diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 9eb6c8e4..5588556c 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -21,8 +21,8 @@ jobs: - name: Test run: go test -v ./... - - uses: dominikh/staticcheck-action@v1.3.0 + - uses: dominikh/staticcheck-action@v1.3.1 with: - version: "2023.1" + version: "2025.1" # go is already installed by actions/setup-go with the correct version from go.mod install-go: false diff --git a/.gitignore b/.gitignore index 7b943f1d..79d04ba3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ config.yaml config.yml sql_exporter +sql-exporter *.tar.gz diff --git a/Dockerfile b/Dockerfile index 749c776f..2090f3b8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.21-alpine AS builder +FROM golang:1.24-alpine AS builder RUN apk add git bash @@ -9,10 +9,10 @@ COPY ./ /src # build WORKDIR /src -RUN GOGC=off go build -mod=vendor -v -o /sql_exporter . +RUN GOGC=off go build -mod=vendor -ldflags="-s -w" -v -o /sql_exporter . # multistage -FROM alpine:3.21.0 +FROM alpine:3.21.3 RUN apk --update upgrade && \ apk add curl ca-certificates && \ diff --git a/VERSION b/VERSION index 416bfb0a..eb49d7c7 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.5.9 +0.7 diff --git a/go.mod b/go.mod index 48812ff5..1fe37829 100644 --- a/go.mod +++ b/go.mod @@ -1,10 +1,10 @@ module github.com/justwatchcom/sql_exporter -go 1.21 +go 1.24 require ( cloud.google.com/go/cloudsqlconn v1.12.1 - github.com/ClickHouse/clickhouse-go/v2 v2.17.1 + github.com/ClickHouse/clickhouse-go/v2 v2.34.0 github.com/aws/aws-sdk-go v1.50.6 github.com/cenkalti/backoff v2.2.1+incompatible github.com/go-kit/log v0.2.1 @@ -17,7 +17,7 @@ require ( github.com/prometheus/common v0.60.0 github.com/robfig/cron/v3 v3.0.1 github.com/segmentio/go-athena v0.0.0-20230626212750-5fac08ed8dab - github.com/snowflakedb/gosnowflake v1.7.2 + github.com/snowflakedb/gosnowflake v1.13.3 github.com/vertica/vertica-sql-go v1.3.3 go.uber.org/automaxprocs v1.5.3 google.golang.org/api v0.197.0 @@ -34,43 +34,44 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.8.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.1 // indirect - github.com/ClickHouse/ch-go v0.61.2 // indirect + github.com/BurntSushi/toml v1.4.0 // indirect + github.com/ClickHouse/ch-go v0.65.1 // indirect github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c // indirect - github.com/andybalholm/brotli v1.1.0 // indirect - github.com/apache/arrow/go/v14 v14.0.2 // indirect - github.com/aws/aws-sdk-go-v2 v1.24.1 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.16.16 // indirect - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.15.15 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.10 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.10 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.10 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.48.1 // indirect - github.com/aws/smithy-go v1.19.0 // indirect + github.com/andybalholm/brotli v1.1.1 // indirect + github.com/apache/arrow-go/v18 v18.0.0 // indirect + github.com/aws/aws-sdk-go-v2 v1.26.1 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.11 // indirect + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.16.15 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1 // indirect + github.com/aws/smithy-go v1.20.2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/danieljoos/wincred v1.2.1 // indirect + github.com/danieljoos/wincred v1.2.2 // indirect github.com/dvsekhvalnov/jose2go v1.6.0 // indirect github.com/elastic/go-sysinfo v1.11.2 // indirect github.com/elastic/go-windows v1.0.1 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/form3tech-oss/jwt-go v3.2.5+incompatible // indirect - github.com/gabriel-vasile/mimetype v1.4.3 // indirect + github.com/gabriel-vasile/mimetype v1.4.7 // indirect github.com/go-faster/city v1.0.1 // indirect github.com/go-faster/errors v0.7.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/goccy/go-json v0.10.2 // indirect + github.com/goccy/go-json v0.10.4 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect + github.com/golang-jwt/jwt/v5 v5.2.2 // indirect github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect github.com/golang-sql/sqlexp v0.1.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/google/flatbuffers v23.5.26+incompatible // indirect + github.com/google/flatbuffers v24.12.23+incompatible // indirect github.com/google/s2a-go v0.1.8 // indirect github.com/google/uuid v1.6.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect @@ -93,40 +94,41 @@ require ( github.com/jcmturner/rpc/v2 v2.0.3 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 // indirect - github.com/klauspost/compress v1.17.9 // indirect - github.com/klauspost/cpuid/v2 v2.2.6 // indirect + github.com/klauspost/compress v1.17.11 // indirect + github.com/klauspost/cpuid/v2 v2.2.9 // indirect github.com/mtibben/percent v0.2.1 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/paulmach/orb v0.11.1 // indirect - github.com/pierrec/lz4/v4 v4.1.21 // indirect + github.com/pierrec/lz4/v4 v4.1.22 // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/segmentio/asm v1.2.0 // indirect - github.com/shopspring/decimal v1.3.1 // indirect + github.com/shopspring/decimal v1.4.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/zeebo/xxh3 v1.0.2 // indirect go.opencensus.io v0.24.0 // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect - go.opentelemetry.io/otel v1.29.0 // indirect - go.opentelemetry.io/otel/metric v1.29.0 // indirect - go.opentelemetry.io/otel/trace v1.29.0 // indirect - golang.org/x/crypto v0.31.0 // indirect - golang.org/x/exp v0.0.0-20240119083558-1b970713d09a // indirect - golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.33.0 // indirect - golang.org/x/oauth2 v0.23.0 // indirect - golang.org/x/sync v0.10.0 // indirect - golang.org/x/sys v0.28.0 // indirect - golang.org/x/term v0.27.0 // indirect - golang.org/x/text v0.21.0 // indirect + go.opentelemetry.io/otel v1.35.0 // indirect + go.opentelemetry.io/otel/metric v1.35.0 // indirect + go.opentelemetry.io/otel/trace v1.35.0 // indirect + golang.org/x/crypto v0.36.0 // indirect + golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect + golang.org/x/mod v0.23.0 // indirect + golang.org/x/net v0.38.0 // indirect + golang.org/x/oauth2 v0.26.0 // indirect + golang.org/x/sync v0.12.0 // indirect + golang.org/x/sys v0.31.0 // indirect + golang.org/x/term v0.30.0 // indirect + golang.org/x/text v0.23.0 // indirect golang.org/x/time v0.6.0 // indirect - golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect - golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect + golang.org/x/tools v0.30.0 // indirect + golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect - google.golang.org/grpc v1.66.2 // indirect - google.golang.org/protobuf v1.34.2 // indirect + google.golang.org/grpc v1.67.1 // indirect + google.golang.org/protobuf v1.35.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect howett.net/plist v1.0.1 // indirect ) diff --git a/go.sum b/go.sum index 759172f8..77baa08f 100644 --- a/go.sum +++ b/go.sum @@ -30,60 +30,64 @@ github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.1/go.mod h1:uwfk06ZBcv github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 h1:XHOnouVk1mxXfQidrMEnLlPk9UMeRtyBTnEFtxkV0kU= github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/ClickHouse/ch-go v0.61.2 h1:8+8eKO2VgxoRa0yLJpWwkqJxi/jrtP5Z+J6eZdPfwdc= -github.com/ClickHouse/ch-go v0.61.2/go.mod h1:ZSVIE1A7mGJNcJeBvVF1v5bo12n0Wmnw30RhnPCpLzg= -github.com/ClickHouse/clickhouse-go/v2 v2.17.1 h1:ZCmAYWpu75IyEi7+Yrs/uaAjiCGY5wfW5kXo64exkX4= -github.com/ClickHouse/clickhouse-go/v2 v2.17.1/go.mod h1:rkGTvFDTLqLIm0ma+13xmcCfr/08Gvs7KmFt1tgiWHQ= +github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= +github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/ClickHouse/ch-go v0.65.1 h1:SLuxmLl5Mjj44/XbINsK2HFvzqup0s6rwKLFH347ZhU= +github.com/ClickHouse/ch-go v0.65.1/go.mod h1:bsodgURwmrkvkBe5jw1qnGDgyITsYErfONKAHn05nv4= +github.com/ClickHouse/clickhouse-go/v2 v2.34.0 h1:Y4rqkdrRHgExvC4o/NTbLdY5LFQ3LHS77/RNFxFX3Co= +github.com/ClickHouse/clickhouse-go/v2 v2.34.0/go.mod h1:yioSINoRLVZkLyDzdMXPLRIqhDvel8iLBlwh6Iefso8= github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c h1:RGWPOewvKIROun94nF7v2cua9qP+thov/7M50KEoeSU= github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= -github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= -github.com/apache/arrow/go/v14 v14.0.2 h1:N8OkaJEOfI3mEZt07BIkvo4sC6XDbL+48MBPWO5IONw= -github.com/apache/arrow/go/v14 v14.0.2/go.mod h1:u3fgh3EdgN/YQ8cVQRguVW3R+seMybFg8QBQ5LU+eBY= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= +github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= +github.com/apache/arrow-go/v18 v18.0.0 h1:1dBDaSbH3LtulTyOVYaBCHO3yVRwjV+TZaqn3g6V7ZM= +github.com/apache/arrow-go/v18 v18.0.0/go.mod h1:t6+cWRSmKgdQ6HsxisQjok+jBpKGhRDiqcf3p0p/F+A= +github.com/apache/thrift v0.21.0 h1:tdPmh/ptjE1IJnhbhrcl2++TauVjy242rkV/UzJChnE= +github.com/apache/thrift v0.21.0/go.mod h1:W1H8aR/QRtYNvrPeFXBtobyRkd0/YVhTc6i07XIAgDw= github.com/aws/aws-sdk-go v1.50.6 h1:FaXvNwHG3Ri1paUEW16Ahk9zLVqSAdqa1M3phjZR35Q= github.com/aws/aws-sdk-go v1.50.6/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= -github.com/aws/aws-sdk-go-v2 v1.24.1 h1:xAojnj+ktS95YZlDf0zxWBkbFtymPeDP+rvUQIH3uAU= -github.com/aws/aws-sdk-go-v2 v1.24.1/go.mod h1:LNh45Br1YAkEKaAqvmE1m8FUx6a5b/V0oAKV7of29b4= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4 h1:OCs21ST2LrepDfD3lwlQiOqIGp6JiEUqG84GzTDoyJs= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4/go.mod h1:usURWEKSNNAcAZuzRn/9ZYPT8aZQkR7xcCtunK/LkJo= -github.com/aws/aws-sdk-go-v2/config v1.26.6 h1:Z/7w9bUqlRI0FFQpetVuFYEsjzE3h7fpU6HuGmfPL/o= -github.com/aws/aws-sdk-go-v2/config v1.26.6/go.mod h1:uKU6cnDmYCvJ+pxO9S4cWDb2yWWIH5hra+32hVh1MI4= -github.com/aws/aws-sdk-go-v2/credentials v1.16.16 h1:8q6Rliyv0aUFAVtzaldUEcS+T5gbadPbWdV1WcAddK8= -github.com/aws/aws-sdk-go-v2/credentials v1.16.16/go.mod h1:UHVZrdUsv63hPXFo1H7c5fEneoVo9UXiz36QG1GEPi0= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11 h1:c5I5iH+DZcH3xOIMlz3/tCKJDaHFwYEmxvlh2fAcFo8= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11/go.mod h1:cRrYDYAMUohBJUtUnOhydaMHtiK/1NZ0Otc9lIb6O0Y= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.15.15 h1:2MUXyGW6dVaQz6aqycpbdLIH1NMcUI6kW6vQ0RabGYg= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.15.15/go.mod h1:aHbhbR6WEQgHAiRj41EQ2W47yOYwNtIkWTXmcAtYqj8= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10 h1:vF+Zgd9s+H4vOXd5BMaPWykta2a6Ih0AKLq/X6NYKn4= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10/go.mod h1:6BkRjejp/GR4411UGqkX8+wFMbFbqsUIimfK4XjOKR4= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10 h1:nYPe006ktcqUji8S2mqXf9c/7NdiKriOwMvWQHgYztw= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10/go.mod h1:6UV4SZkVvmODfXKql4LCbaZUpF7HO2BX38FgBf9ZOLw= -github.com/aws/aws-sdk-go-v2/internal/ini v1.7.3 h1:n3GDfwqF2tzEkXlv5cuy4iy7LpKDtqDMcNLfZDu9rls= -github.com/aws/aws-sdk-go-v2/internal/ini v1.7.3/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.10 h1:5oE2WzJE56/mVveuDZPJESKlg/00AaS2pY2QZcnxg4M= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.10/go.mod h1:FHbKWQtRBYUz4vO5WBWjzMD2by126ny5y/1EoaWoLfI= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 h1:/b31bi3YVNlkzkBrm9LfpaKoaYZUxIAj4sHfOTmLfqw= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4/go.mod h1:2aGXHFmbInwgP9ZfpmdIfOELL79zhdNYNmReK8qDfdQ= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.10 h1:L0ai8WICYHozIKK+OtPzVJBugL7culcuM4E4JOpIEm8= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.10/go.mod h1:byqfyxJBshFk0fF9YmK0M0ugIO8OWjzH2T3bPG4eGuA= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10 h1:DBYTXwIGQSGs9w4jKm60F5dmCQ3EEruxdc0MFh+3EY4= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10/go.mod h1:wohMUQiFdzo0NtxbBg0mSRGZ4vL3n0dKjLTINdcIino= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.10 h1:KOxnQeWy5sXyS37fdKEvAsGHOr9fa/qvwxfJurR/BzE= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.10/go.mod h1:jMx5INQFYFYB3lQD9W0D8Ohgq6Wnl7NYOJ2TQndbulI= -github.com/aws/aws-sdk-go-v2/service/s3 v1.48.1 h1:5XNlsBsEvBZBMO6p82y+sqpWg8j5aBCe+5C2GBFgqBQ= -github.com/aws/aws-sdk-go-v2/service/s3 v1.48.1/go.mod h1:4qXHrG1Ne3VGIMZPCB8OjH/pLFO94sKABIusjh0KWPU= -github.com/aws/aws-sdk-go-v2/service/sso v1.18.7 h1:eajuO3nykDPdYicLlP3AGgOyVN3MOlFmZv7WGTuJPow= -github.com/aws/aws-sdk-go-v2/service/sso v1.18.7/go.mod h1:+mJNDdF+qiUlNKNC3fxn74WWNN+sOiGOEImje+3ScPM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.7 h1:QPMJf+Jw8E1l7zqhZmMlFw6w1NmfkfiSK8mS4zOx3BA= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.7/go.mod h1:ykf3COxYI0UJmxcfcxcVuz7b6uADi1FkiUz6Eb7AgM8= -github.com/aws/aws-sdk-go-v2/service/sts v1.26.7 h1:NzO4Vrau795RkUdSHKEwiR01FaGzGOH1EETJ+5QHnm0= -github.com/aws/aws-sdk-go-v2/service/sts v1.26.7/go.mod h1:6h2YuIoxaMSCFf5fi1EgZAwdfkGMgDY+DVfa61uLe4U= -github.com/aws/smithy-go v1.19.0 h1:KWFKQV80DpP3vJrrA9sVAHQ5gc2z8i4EzrLhLlWXcBM= -github.com/aws/smithy-go v1.19.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE= +github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA= +github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 h1:x6xsQXGSmW6frevwDA+vi/wqhp1ct18mVXYN08/93to= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2/go.mod h1:lPprDr1e6cJdyYeGXnRaJoP4Md+cDBvi2eOj00BlGmg= +github.com/aws/aws-sdk-go-v2/config v1.27.11 h1:f47rANd2LQEYHda2ddSCKYId18/8BhSRM4BULGmfgNA= +github.com/aws/aws-sdk-go-v2/config v1.27.11/go.mod h1:SMsV78RIOYdve1vf36z8LmnszlRWkwMQtomCAI0/mIE= +github.com/aws/aws-sdk-go-v2/credentials v1.17.11 h1:YuIB1dJNf1Re822rriUOTxopaHHvIq0l/pX3fwO+Tzs= +github.com/aws/aws-sdk-go-v2/credentials v1.17.11/go.mod h1:AQtFPsDH9bI2O+71anW6EKL+NcD7LG3dpKGMV4SShgo= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1/go.mod h1:zusuAeqezXzAB24LGuzuekqMAEgWkVYukBec3kr3jUg= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.16.15 h1:7Zwtt/lP3KNRkeZre7soMELMGNoBrutx8nobg1jKWmo= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.16.15/go.mod h1:436h2adoHb57yd+8W+gYPrrA9U/R/SuAuOO42Ushzhw= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5 h1:81KE7vaZzrl7yHBYHVEzYB8sypz11NMOZ40YlWvPxsU= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5/go.mod h1:LIt2rg7Mcgn09Ygbdh/RdIm0rQ+3BNkbP1gyVMFtRK0= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1xUsUr3I8cHps0G+XM3WWU16lP6yG8qu1GAZAs= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7 h1:ZMeFZ5yk+Ek+jNr1+uwCd2tG89t6oTS5yVWpa6yy2es= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7/go.mod h1:mxV05U+4JiHqIpGqqYXOHLPKUC6bDXC44bsUhNjOEwY= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7/go.mod h1:YCsIZhXfRPLFFCl5xxY+1T9RKzOKjCut+28JSX2DnAk= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5 h1:f9RyWNtS8oH7cZlbn+/JNPpjUk5+5fLd5lM9M0i49Ys= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5/go.mod h1:h5CoMZV2VF297/VLhRhO1WF+XYWOzXo+4HsObA4HjBQ= +github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1 h1:6cnno47Me9bRykw9AEv9zkXE+5or7jz8TsskTTccbgc= +github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1/go.mod h1:qmdkIIAC+GCLASF7R2whgNrJADz0QZPX+Seiw/i4S3o= +github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 h1:vN8hEbpRnL7+Hopy9dzmRle1xmDc7o8tmY0klsr175w= +github.com/aws/aws-sdk-go-v2/service/sso v1.20.5/go.mod h1:qGzynb/msuZIE8I75DVRCUXw3o3ZyBmUvMwQ2t/BrGM= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 h1:Jux+gDDyi1Lruk+KHF91tK2KCuY61kzoCpvtvJJBtOE= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4/go.mod h1:mUYPBhaF2lGiukDEjJX2BLRRKTmoUSitGDUgM4tRxak= +github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 h1:cwIxeBttqPN3qkaAjcEcsh8NYr8n2HZPkcKgPAi1phU= +github.com/aws/aws-sdk-go-v2/service/sts v1.28.6/go.mod h1:FZf1/nKNEkHdGGJP/cI2MoIMquumuRK6ol3QQJNDxmw= +github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q= +github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= @@ -98,17 +102,17 @@ github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMe github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/danieljoos/wincred v1.2.1 h1:dl9cBrupW8+r5250DYkYxocLeZ1Y4vB1kxgtjxw8GQs= -github.com/danieljoos/wincred v1.2.1/go.mod h1:uGaFL9fDn3OLTvzCGulzE+SzjEe5NGlh5FdCcyfPwps= +github.com/danieljoos/wincred v1.2.2 h1:774zMFJrqaeYCK2W57BgAem/MLi6mtSE47MB6BOJ0i0= +github.com/danieljoos/wincred v1.2.2/go.mod h1:w7w4Utbrz8lqeMbDAK0lkNJUv5sAOkFi7nd/ogr0Uh8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= -github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM= -github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= +github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/docker/docker v28.0.4+incompatible h1:JNNkBctYKurkw6FrHfKqY0nKIDf5nrbxjVBtS+cdcok= +github.com/docker/docker v28.0.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= +github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dvsekhvalnov/jose2go v1.6.0 h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY= @@ -125,10 +129,8 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/form3tech-oss/jwt-go v3.2.5+incompatible h1:/l4kBbb4/vGSsdtB5nUe8L7B9mImVMaBPw9L/0TBHU8= -github.com/form3tech-oss/jwt-go v3.2.5+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= -github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= +github.com/gabriel-vasile/mimetype v1.4.7 h1:SKFKl7kD0RiPdbht0s7hFtjl489WcQ1VyPW8ZzUMYCA= +github.com/gabriel-vasile/mimetype v1.4.7/go.mod h1:GDlAgAyIRT27BhFl53XNAFtfjzOkLaF35JdEG0P7LtU= github.com/go-faster/city v1.0.1 h1:4WAxSZ3V2Ws4QRDrscLEDcibJY8uf41H6AhXDrNDcGw= github.com/go-faster/city v1.0.1/go.mod h1:jKcUJId49qdW3L1qKHH/3wPeUstCVpVSXTM6vO3VcTw= github.com/go-faster/errors v0.7.1 h1:MkJTnDoEdi9pDabt1dpWf7AA8/BaSYZqibYyhZ20AYg= @@ -149,16 +151,16 @@ github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqw github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= -github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.4 h1:JSwxQzIqKfmFX1swYPpUThQZp/Ka4wzJdK0LWVytLPM= +github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= -github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= +github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA= github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A= @@ -179,8 +181,10 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/flatbuffers v23.5.26+incompatible h1:M9dgRyhJemaM4Sw8+66GHBu8ioaQmyPLg1b8VwK5WJg= -github.com/google/flatbuffers v23.5.26+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/flatbuffers v24.12.23+incompatible h1:ubBKR94NR4pXUCY/MUsRVzd9umNW7ht7EG9hHfS9FX8= +github.com/google/flatbuffers v24.12.23+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -189,8 +193,8 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= @@ -285,11 +289,13 @@ github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 h1:rp+c0RAYOWj8 github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901/go.mod h1:Z86h9688Y0wesXCyonoVr47MasHilkuLMqGhRZ4Hpak= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4= +github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= -github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc= -github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= +github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= +github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= +github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -317,6 +323,12 @@ github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/microsoft/go-mssqldb v1.8.0 h1:7cyZ/AT7ycDsEoWPIXibd+aVKFtteUNhDGf3aobP+tw= github.com/microsoft/go-mssqldb v1.8.0/go.mod h1:6znkekS3T2vp0waiMhen4GPU1BiAsrP+iXHcE7a7rFo= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= +github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= +github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= @@ -325,13 +337,13 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI= -github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= +github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= +github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= github.com/paulmach/orb v0.11.1 h1:3koVegMC4X/WeiXYz9iswopaTwMem53NzTJuTF20JzU= github.com/paulmach/orb v0.11.1/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU= github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY= -github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= -github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= +github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -354,8 +366,8 @@ github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoG github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= @@ -367,20 +379,21 @@ github.com/segmentio/go-athena v0.0.0-20230626212750-5fac08ed8dab h1:C56AWluoKnw github.com/segmentio/go-athena v0.0.0-20230626212750-5fac08ed8dab/go.mod h1:umGD11uSGUY8Vd0lbo1jJUEAk4FxVV3YE5wRSXx1Lbk= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= -github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= +github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/snowflakedb/gosnowflake v1.7.2 h1:HRSwva8YXC64WUppfmHcMNVVzSE1+EwXXaJxgS0EkTo= -github.com/snowflakedb/gosnowflake v1.7.2/go.mod h1:03tW856vc3ceM4rJuj7KO4dzqN7qoezTm+xw7aPIIFo= +github.com/snowflakedb/gosnowflake v1.13.3 h1:udARwDZ+Eb7TnihuMno1CaNVUDbJnikWC+8p4RCJQBk= +github.com/snowflakedb/gosnowflake v1.13.3/go.mod h1:NUxNYUdyPn9sRoYB/udq/fXBXuhLS3SBTPI2/OT79uc= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -390,14 +403,16 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/vertica/vertica-sql-go v1.3.3 h1:fL+FKEAEy5ONmsvya2WH5T8bhkvY27y/Ik3ReR2T+Qw= github.com/vertica/vertica-sql-go v1.3.3/go.mod h1:jnn2GFuv+O2Jcjktb7zyc4Utlbu9YVqpHH/lx63+1M4= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= +github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= +github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -410,14 +425,16 @@ github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxt go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= -go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw= -go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8= -go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc= -go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= -go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= -go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= +go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= +go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= +go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= +go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= +go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= +go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= @@ -443,11 +460,11 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= -golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= -golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= +golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20240119083558-1b970713d09a h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA= -golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08= +golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk= +golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -457,8 +474,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM= +golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -475,11 +492,11 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= -golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= +golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= +golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= -golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.26.0 h1:afQXWNNaeC4nvZ0Ed9XvCCzXM6UHJG7iCg0W4fPqSBE= +golang.org/x/oauth2 v0.26.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -488,8 +505,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= -golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= +golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -510,14 +527,14 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= -golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= -golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= +golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= +golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -525,8 +542,8 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= -golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -544,18 +561,18 @@ golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY= +golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= -golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= -gonum.org/v1/gonum v0.12.0 h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o= -gonum.org/v1/gonum v0.12.0/go.mod h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY= +golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY= +golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +gonum.org/v1/gonum v0.15.1 h1:FNy7N6OUZVUaWG9pTiD+jlhdQ3lMP+/LcTpJ6+a8sQ0= +gonum.org/v1/gonum v0.15.1/go.mod h1:eZTZuRFrzu5pcyjN5wJhcIhnUdNijYxX1T2IcrOGY0o= google.golang.org/api v0.197.0 h1:x6CwqQLsFiA5JKAiGyGBjc2bNtHtLddhJCE2IKuhhcQ= google.golang.org/api v0.197.0/go.mod h1:AuOuo20GoQ331nq7DquGHlU6d+2wN2fZ8O0ta60nRNw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -564,8 +581,8 @@ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoA google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 h1:BulPr26Jqjnd4eYDVe+YvyR7Yc2vJGkO5/0UxD0/jZU= -google.golang.org/genproto/googleapis/api v0.0.0-20240711142825-46eb208f015d h1:kHjw/5UfflP/L5EbledDrcG4C2597RtymmGRZvHiCuY= -google.golang.org/genproto/googleapis/api v0.0.0-20240711142825-46eb208f015d/go.mod h1:mw8MG/Qz5wfgYr6VqVCiZcHe/GJEfI+oGGDCohaVgB0= +google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= +google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -573,8 +590,8 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo= -google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= +google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= +google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -586,8 +603,8 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= +google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/job.go b/job.go index 6852e6ed..7f178785 100644 --- a/job.go +++ b/job.go @@ -12,14 +12,14 @@ import ( _ "github.com/ClickHouse/clickhouse-go/v2" // register the ClickHouse driver "github.com/cenkalti/backoff" - _ "github.com/microsoft/go-mssqldb" // register the MS-SQL driver - _ "github.com/microsoft/go-mssqldb/integratedauth/krb5" // Register integrated auth for MS-SQL "github.com/go-kit/log" "github.com/go-kit/log/level" "github.com/go-sql-driver/mysql" // register the MySQL driver "github.com/gobwas/glob" "github.com/jmoiron/sqlx" - _ "github.com/lib/pq" // register the PostgreSQL driver + _ "github.com/lib/pq" // register the PostgreSQL driver + _ "github.com/microsoft/go-mssqldb" // register the MS-SQL driver + _ "github.com/microsoft/go-mssqldb/integratedauth/krb5" // Register integrated auth for MS-SQL "github.com/prometheus/client_golang/prometheus" _ "github.com/segmentio/go-athena" // register the AWS Athena driver "github.com/snowflakedb/gosnowflake" diff --git a/vendor/github.com/BurntSushi/toml/.gitignore b/vendor/github.com/BurntSushi/toml/.gitignore new file mode 100644 index 00000000..fe79e3ad --- /dev/null +++ b/vendor/github.com/BurntSushi/toml/.gitignore @@ -0,0 +1,2 @@ +/toml.test +/toml-test diff --git a/vendor/github.com/BurntSushi/toml/COPYING b/vendor/github.com/BurntSushi/toml/COPYING new file mode 100644 index 00000000..01b57432 --- /dev/null +++ b/vendor/github.com/BurntSushi/toml/COPYING @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013 TOML authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/github.com/BurntSushi/toml/README.md b/vendor/github.com/BurntSushi/toml/README.md new file mode 100644 index 00000000..639e6c39 --- /dev/null +++ b/vendor/github.com/BurntSushi/toml/README.md @@ -0,0 +1,120 @@ +TOML stands for Tom's Obvious, Minimal Language. This Go package provides a +reflection interface similar to Go's standard library `json` and `xml` packages. + +Compatible with TOML version [v1.0.0](https://toml.io/en/v1.0.0). + +Documentation: https://godocs.io/github.com/BurntSushi/toml + +See the [releases page](https://github.com/BurntSushi/toml/releases) for a +changelog; this information is also in the git tag annotations (e.g. `git show +v0.4.0`). + +This library requires Go 1.18 or newer; add it to your go.mod with: + + % go get github.com/BurntSushi/toml@latest + +It also comes with a TOML validator CLI tool: + + % go install github.com/BurntSushi/toml/cmd/tomlv@latest + % tomlv some-toml-file.toml + +### Examples +For the simplest example, consider some TOML file as just a list of keys and +values: + +```toml +Age = 25 +Cats = [ "Cauchy", "Plato" ] +Pi = 3.14 +Perfection = [ 6, 28, 496, 8128 ] +DOB = 1987-07-05T05:45:00Z +``` + +Which can be decoded with: + +```go +type Config struct { + Age int + Cats []string + Pi float64 + Perfection []int + DOB time.Time +} + +var conf Config +_, err := toml.Decode(tomlData, &conf) +``` + +You can also use struct tags if your struct field name doesn't map to a TOML key +value directly: + +```toml +some_key_NAME = "wat" +``` + +```go +type TOML struct { + ObscureKey string `toml:"some_key_NAME"` +} +``` + +Beware that like other decoders **only exported fields** are considered when +encoding and decoding; private fields are silently ignored. + +### Using the `Marshaler` and `encoding.TextUnmarshaler` interfaces +Here's an example that automatically parses values in a `mail.Address`: + +```toml +contacts = [ + "Donald Duck ", + "Scrooge McDuck ", +] +``` + +Can be decoded with: + +```go +// Create address type which satisfies the encoding.TextUnmarshaler interface. +type address struct { + *mail.Address +} + +func (a *address) UnmarshalText(text []byte) error { + var err error + a.Address, err = mail.ParseAddress(string(text)) + return err +} + +// Decode it. +func decode() { + blob := ` + contacts = [ + "Donald Duck ", + "Scrooge McDuck ", + ] + ` + + var contacts struct { + Contacts []address + } + + _, err := toml.Decode(blob, &contacts) + if err != nil { + log.Fatal(err) + } + + for _, c := range contacts.Contacts { + fmt.Printf("%#v\n", c.Address) + } + + // Output: + // &mail.Address{Name:"Donald Duck", Address:"donald@duckburg.com"} + // &mail.Address{Name:"Scrooge McDuck", Address:"scrooge@duckburg.com"} +} +``` + +To target TOML specifically you can implement `UnmarshalTOML` TOML interface in +a similar way. + +### More complex usage +See the [`_example/`](/_example) directory for a more complex example. diff --git a/vendor/github.com/BurntSushi/toml/decode.go b/vendor/github.com/BurntSushi/toml/decode.go new file mode 100644 index 00000000..7aaf462c --- /dev/null +++ b/vendor/github.com/BurntSushi/toml/decode.go @@ -0,0 +1,613 @@ +package toml + +import ( + "bytes" + "encoding" + "encoding/json" + "fmt" + "io" + "io/fs" + "math" + "os" + "reflect" + "strconv" + "strings" + "time" +) + +// Unmarshaler is the interface implemented by objects that can unmarshal a +// TOML description of themselves. +type Unmarshaler interface { + UnmarshalTOML(any) error +} + +// Unmarshal decodes the contents of data in TOML format into a pointer v. +// +// See [Decoder] for a description of the decoding process. +func Unmarshal(data []byte, v any) error { + _, err := NewDecoder(bytes.NewReader(data)).Decode(v) + return err +} + +// Decode the TOML data in to the pointer v. +// +// See [Decoder] for a description of the decoding process. +func Decode(data string, v any) (MetaData, error) { + return NewDecoder(strings.NewReader(data)).Decode(v) +} + +// DecodeFile reads the contents of a file and decodes it with [Decode]. +func DecodeFile(path string, v any) (MetaData, error) { + fp, err := os.Open(path) + if err != nil { + return MetaData{}, err + } + defer fp.Close() + return NewDecoder(fp).Decode(v) +} + +// DecodeFS reads the contents of a file from [fs.FS] and decodes it with +// [Decode]. +func DecodeFS(fsys fs.FS, path string, v any) (MetaData, error) { + fp, err := fsys.Open(path) + if err != nil { + return MetaData{}, err + } + defer fp.Close() + return NewDecoder(fp).Decode(v) +} + +// Primitive is a TOML value that hasn't been decoded into a Go value. +// +// This type can be used for any value, which will cause decoding to be delayed. +// You can use [PrimitiveDecode] to "manually" decode these values. +// +// NOTE: The underlying representation of a `Primitive` value is subject to +// change. Do not rely on it. +// +// NOTE: Primitive values are still parsed, so using them will only avoid the +// overhead of reflection. They can be useful when you don't know the exact type +// of TOML data until runtime. +type Primitive struct { + undecoded any + context Key +} + +// The significand precision for float32 and float64 is 24 and 53 bits; this is +// the range a natural number can be stored in a float without loss of data. +const ( + maxSafeFloat32Int = 16777215 // 2^24-1 + maxSafeFloat64Int = int64(9007199254740991) // 2^53-1 +) + +// Decoder decodes TOML data. +// +// TOML tables correspond to Go structs or maps; they can be used +// interchangeably, but structs offer better type safety. +// +// TOML table arrays correspond to either a slice of structs or a slice of maps. +// +// TOML datetimes correspond to [time.Time]. Local datetimes are parsed in the +// local timezone. +// +// [time.Duration] types are treated as nanoseconds if the TOML value is an +// integer, or they're parsed with time.ParseDuration() if they're strings. +// +// All other TOML types (float, string, int, bool and array) correspond to the +// obvious Go types. +// +// An exception to the above rules is if a type implements the TextUnmarshaler +// interface, in which case any primitive TOML value (floats, strings, integers, +// booleans, datetimes) will be converted to a []byte and given to the value's +// UnmarshalText method. See the Unmarshaler example for a demonstration with +// email addresses. +// +// # Key mapping +// +// TOML keys can map to either keys in a Go map or field names in a Go struct. +// The special `toml` struct tag can be used to map TOML keys to struct fields +// that don't match the key name exactly (see the example). A case insensitive +// match to struct names will be tried if an exact match can't be found. +// +// The mapping between TOML values and Go values is loose. That is, there may +// exist TOML values that cannot be placed into your representation, and there +// may be parts of your representation that do not correspond to TOML values. +// This loose mapping can be made stricter by using the IsDefined and/or +// Undecoded methods on the MetaData returned. +// +// This decoder does not handle cyclic types. Decode will not terminate if a +// cyclic type is passed. +type Decoder struct { + r io.Reader +} + +// NewDecoder creates a new Decoder. +func NewDecoder(r io.Reader) *Decoder { + return &Decoder{r: r} +} + +var ( + unmarshalToml = reflect.TypeOf((*Unmarshaler)(nil)).Elem() + unmarshalText = reflect.TypeOf((*encoding.TextUnmarshaler)(nil)).Elem() + primitiveType = reflect.TypeOf((*Primitive)(nil)).Elem() +) + +// Decode TOML data in to the pointer `v`. +func (dec *Decoder) Decode(v any) (MetaData, error) { + rv := reflect.ValueOf(v) + if rv.Kind() != reflect.Ptr { + s := "%q" + if reflect.TypeOf(v) == nil { + s = "%v" + } + + return MetaData{}, fmt.Errorf("toml: cannot decode to non-pointer "+s, reflect.TypeOf(v)) + } + if rv.IsNil() { + return MetaData{}, fmt.Errorf("toml: cannot decode to nil value of %q", reflect.TypeOf(v)) + } + + // Check if this is a supported type: struct, map, any, or something that + // implements UnmarshalTOML or UnmarshalText. + rv = indirect(rv) + rt := rv.Type() + if rv.Kind() != reflect.Struct && rv.Kind() != reflect.Map && + !(rv.Kind() == reflect.Interface && rv.NumMethod() == 0) && + !rt.Implements(unmarshalToml) && !rt.Implements(unmarshalText) { + return MetaData{}, fmt.Errorf("toml: cannot decode to type %s", rt) + } + + // TODO: parser should read from io.Reader? Or at the very least, make it + // read from []byte rather than string + data, err := io.ReadAll(dec.r) + if err != nil { + return MetaData{}, err + } + + p, err := parse(string(data)) + if err != nil { + return MetaData{}, err + } + + md := MetaData{ + mapping: p.mapping, + keyInfo: p.keyInfo, + keys: p.ordered, + decoded: make(map[string]struct{}, len(p.ordered)), + context: nil, + data: data, + } + return md, md.unify(p.mapping, rv) +} + +// PrimitiveDecode is just like the other Decode* functions, except it decodes a +// TOML value that has already been parsed. Valid primitive values can *only* be +// obtained from values filled by the decoder functions, including this method. +// (i.e., v may contain more [Primitive] values.) +// +// Meta data for primitive values is included in the meta data returned by the +// Decode* functions with one exception: keys returned by the Undecoded method +// will only reflect keys that were decoded. Namely, any keys hidden behind a +// Primitive will be considered undecoded. Executing this method will update the +// undecoded keys in the meta data. (See the example.) +func (md *MetaData) PrimitiveDecode(primValue Primitive, v any) error { + md.context = primValue.context + defer func() { md.context = nil }() + return md.unify(primValue.undecoded, rvalue(v)) +} + +// unify performs a sort of type unification based on the structure of `rv`, +// which is the client representation. +// +// Any type mismatch produces an error. Finding a type that we don't know +// how to handle produces an unsupported type error. +func (md *MetaData) unify(data any, rv reflect.Value) error { + // Special case. Look for a `Primitive` value. + // TODO: #76 would make this superfluous after implemented. + if rv.Type() == primitiveType { + // Save the undecoded data and the key context into the primitive + // value. + context := make(Key, len(md.context)) + copy(context, md.context) + rv.Set(reflect.ValueOf(Primitive{ + undecoded: data, + context: context, + })) + return nil + } + + rvi := rv.Interface() + if v, ok := rvi.(Unmarshaler); ok { + err := v.UnmarshalTOML(data) + if err != nil { + return md.parseErr(err) + } + return nil + } + if v, ok := rvi.(encoding.TextUnmarshaler); ok { + return md.unifyText(data, v) + } + + // TODO: + // The behavior here is incorrect whenever a Go type satisfies the + // encoding.TextUnmarshaler interface but also corresponds to a TOML hash or + // array. In particular, the unmarshaler should only be applied to primitive + // TOML values. But at this point, it will be applied to all kinds of values + // and produce an incorrect error whenever those values are hashes or arrays + // (including arrays of tables). + + k := rv.Kind() + + if k >= reflect.Int && k <= reflect.Uint64 { + return md.unifyInt(data, rv) + } + switch k { + case reflect.Struct: + return md.unifyStruct(data, rv) + case reflect.Map: + return md.unifyMap(data, rv) + case reflect.Array: + return md.unifyArray(data, rv) + case reflect.Slice: + return md.unifySlice(data, rv) + case reflect.String: + return md.unifyString(data, rv) + case reflect.Bool: + return md.unifyBool(data, rv) + case reflect.Interface: + if rv.NumMethod() > 0 { /// Only empty interfaces are supported. + return md.e("unsupported type %s", rv.Type()) + } + return md.unifyAnything(data, rv) + case reflect.Float32, reflect.Float64: + return md.unifyFloat64(data, rv) + } + return md.e("unsupported type %s", rv.Kind()) +} + +func (md *MetaData) unifyStruct(mapping any, rv reflect.Value) error { + tmap, ok := mapping.(map[string]any) + if !ok { + if mapping == nil { + return nil + } + return md.e("type mismatch for %s: expected table but found %s", rv.Type().String(), fmtType(mapping)) + } + + for key, datum := range tmap { + var f *field + fields := cachedTypeFields(rv.Type()) + for i := range fields { + ff := &fields[i] + if ff.name == key { + f = ff + break + } + if f == nil && strings.EqualFold(ff.name, key) { + f = ff + } + } + if f != nil { + subv := rv + for _, i := range f.index { + subv = indirect(subv.Field(i)) + } + + if isUnifiable(subv) { + md.decoded[md.context.add(key).String()] = struct{}{} + md.context = append(md.context, key) + + err := md.unify(datum, subv) + if err != nil { + return err + } + md.context = md.context[0 : len(md.context)-1] + } else if f.name != "" { + return md.e("cannot write unexported field %s.%s", rv.Type().String(), f.name) + } + } + } + return nil +} + +func (md *MetaData) unifyMap(mapping any, rv reflect.Value) error { + keyType := rv.Type().Key().Kind() + if keyType != reflect.String && keyType != reflect.Interface { + return fmt.Errorf("toml: cannot decode to a map with non-string key type (%s in %q)", + keyType, rv.Type()) + } + + tmap, ok := mapping.(map[string]any) + if !ok { + if tmap == nil { + return nil + } + return md.badtype("map", mapping) + } + if rv.IsNil() { + rv.Set(reflect.MakeMap(rv.Type())) + } + for k, v := range tmap { + md.decoded[md.context.add(k).String()] = struct{}{} + md.context = append(md.context, k) + + rvval := reflect.Indirect(reflect.New(rv.Type().Elem())) + + err := md.unify(v, indirect(rvval)) + if err != nil { + return err + } + md.context = md.context[0 : len(md.context)-1] + + rvkey := indirect(reflect.New(rv.Type().Key())) + + switch keyType { + case reflect.Interface: + rvkey.Set(reflect.ValueOf(k)) + case reflect.String: + rvkey.SetString(k) + } + + rv.SetMapIndex(rvkey, rvval) + } + return nil +} + +func (md *MetaData) unifyArray(data any, rv reflect.Value) error { + datav := reflect.ValueOf(data) + if datav.Kind() != reflect.Slice { + if !datav.IsValid() { + return nil + } + return md.badtype("slice", data) + } + if l := datav.Len(); l != rv.Len() { + return md.e("expected array length %d; got TOML array of length %d", rv.Len(), l) + } + return md.unifySliceArray(datav, rv) +} + +func (md *MetaData) unifySlice(data any, rv reflect.Value) error { + datav := reflect.ValueOf(data) + if datav.Kind() != reflect.Slice { + if !datav.IsValid() { + return nil + } + return md.badtype("slice", data) + } + n := datav.Len() + if rv.IsNil() || rv.Cap() < n { + rv.Set(reflect.MakeSlice(rv.Type(), n, n)) + } + rv.SetLen(n) + return md.unifySliceArray(datav, rv) +} + +func (md *MetaData) unifySliceArray(data, rv reflect.Value) error { + l := data.Len() + for i := 0; i < l; i++ { + err := md.unify(data.Index(i).Interface(), indirect(rv.Index(i))) + if err != nil { + return err + } + } + return nil +} + +func (md *MetaData) unifyString(data any, rv reflect.Value) error { + _, ok := rv.Interface().(json.Number) + if ok { + if i, ok := data.(int64); ok { + rv.SetString(strconv.FormatInt(i, 10)) + } else if f, ok := data.(float64); ok { + rv.SetString(strconv.FormatFloat(f, 'f', -1, 64)) + } else { + return md.badtype("string", data) + } + return nil + } + + if s, ok := data.(string); ok { + rv.SetString(s) + return nil + } + return md.badtype("string", data) +} + +func (md *MetaData) unifyFloat64(data any, rv reflect.Value) error { + rvk := rv.Kind() + + if num, ok := data.(float64); ok { + switch rvk { + case reflect.Float32: + if num < -math.MaxFloat32 || num > math.MaxFloat32 { + return md.parseErr(errParseRange{i: num, size: rvk.String()}) + } + fallthrough + case reflect.Float64: + rv.SetFloat(num) + default: + panic("bug") + } + return nil + } + + if num, ok := data.(int64); ok { + if (rvk == reflect.Float32 && (num < -maxSafeFloat32Int || num > maxSafeFloat32Int)) || + (rvk == reflect.Float64 && (num < -maxSafeFloat64Int || num > maxSafeFloat64Int)) { + return md.parseErr(errUnsafeFloat{i: num, size: rvk.String()}) + } + rv.SetFloat(float64(num)) + return nil + } + + return md.badtype("float", data) +} + +func (md *MetaData) unifyInt(data any, rv reflect.Value) error { + _, ok := rv.Interface().(time.Duration) + if ok { + // Parse as string duration, and fall back to regular integer parsing + // (as nanosecond) if this is not a string. + if s, ok := data.(string); ok { + dur, err := time.ParseDuration(s) + if err != nil { + return md.parseErr(errParseDuration{s}) + } + rv.SetInt(int64(dur)) + return nil + } + } + + num, ok := data.(int64) + if !ok { + return md.badtype("integer", data) + } + + rvk := rv.Kind() + switch { + case rvk >= reflect.Int && rvk <= reflect.Int64: + if (rvk == reflect.Int8 && (num < math.MinInt8 || num > math.MaxInt8)) || + (rvk == reflect.Int16 && (num < math.MinInt16 || num > math.MaxInt16)) || + (rvk == reflect.Int32 && (num < math.MinInt32 || num > math.MaxInt32)) { + return md.parseErr(errParseRange{i: num, size: rvk.String()}) + } + rv.SetInt(num) + case rvk >= reflect.Uint && rvk <= reflect.Uint64: + unum := uint64(num) + if rvk == reflect.Uint8 && (num < 0 || unum > math.MaxUint8) || + rvk == reflect.Uint16 && (num < 0 || unum > math.MaxUint16) || + rvk == reflect.Uint32 && (num < 0 || unum > math.MaxUint32) { + return md.parseErr(errParseRange{i: num, size: rvk.String()}) + } + rv.SetUint(unum) + default: + panic("unreachable") + } + return nil +} + +func (md *MetaData) unifyBool(data any, rv reflect.Value) error { + if b, ok := data.(bool); ok { + rv.SetBool(b) + return nil + } + return md.badtype("boolean", data) +} + +func (md *MetaData) unifyAnything(data any, rv reflect.Value) error { + rv.Set(reflect.ValueOf(data)) + return nil +} + +func (md *MetaData) unifyText(data any, v encoding.TextUnmarshaler) error { + var s string + switch sdata := data.(type) { + case Marshaler: + text, err := sdata.MarshalTOML() + if err != nil { + return err + } + s = string(text) + case encoding.TextMarshaler: + text, err := sdata.MarshalText() + if err != nil { + return err + } + s = string(text) + case fmt.Stringer: + s = sdata.String() + case string: + s = sdata + case bool: + s = fmt.Sprintf("%v", sdata) + case int64: + s = fmt.Sprintf("%d", sdata) + case float64: + s = fmt.Sprintf("%f", sdata) + default: + return md.badtype("primitive (string-like)", data) + } + if err := v.UnmarshalText([]byte(s)); err != nil { + return md.parseErr(err) + } + return nil +} + +func (md *MetaData) badtype(dst string, data any) error { + return md.e("incompatible types: TOML value has type %s; destination has type %s", fmtType(data), dst) +} + +func (md *MetaData) parseErr(err error) error { + k := md.context.String() + return ParseError{ + LastKey: k, + Position: md.keyInfo[k].pos, + Line: md.keyInfo[k].pos.Line, + err: err, + input: string(md.data), + } +} + +func (md *MetaData) e(format string, args ...any) error { + f := "toml: " + if len(md.context) > 0 { + f = fmt.Sprintf("toml: (last key %q): ", md.context) + p := md.keyInfo[md.context.String()].pos + if p.Line > 0 { + f = fmt.Sprintf("toml: line %d (last key %q): ", p.Line, md.context) + } + } + return fmt.Errorf(f+format, args...) +} + +// rvalue returns a reflect.Value of `v`. All pointers are resolved. +func rvalue(v any) reflect.Value { + return indirect(reflect.ValueOf(v)) +} + +// indirect returns the value pointed to by a pointer. +// +// Pointers are followed until the value is not a pointer. New values are +// allocated for each nil pointer. +// +// An exception to this rule is if the value satisfies an interface of interest +// to us (like encoding.TextUnmarshaler). +func indirect(v reflect.Value) reflect.Value { + if v.Kind() != reflect.Ptr { + if v.CanSet() { + pv := v.Addr() + pvi := pv.Interface() + if _, ok := pvi.(encoding.TextUnmarshaler); ok { + return pv + } + if _, ok := pvi.(Unmarshaler); ok { + return pv + } + } + return v + } + if v.IsNil() { + v.Set(reflect.New(v.Type().Elem())) + } + return indirect(reflect.Indirect(v)) +} + +func isUnifiable(rv reflect.Value) bool { + if rv.CanSet() { + return true + } + rvi := rv.Interface() + if _, ok := rvi.(encoding.TextUnmarshaler); ok { + return true + } + if _, ok := rvi.(Unmarshaler); ok { + return true + } + return false +} + +// fmt %T with "interface {}" replaced with "any", which is far more readable. +func fmtType(t any) string { + return strings.ReplaceAll(fmt.Sprintf("%T", t), "interface {}", "any") +} diff --git a/vendor/github.com/BurntSushi/toml/deprecated.go b/vendor/github.com/BurntSushi/toml/deprecated.go new file mode 100644 index 00000000..155709a8 --- /dev/null +++ b/vendor/github.com/BurntSushi/toml/deprecated.go @@ -0,0 +1,29 @@ +package toml + +import ( + "encoding" + "io" +) + +// TextMarshaler is an alias for encoding.TextMarshaler. +// +// Deprecated: use encoding.TextMarshaler +type TextMarshaler encoding.TextMarshaler + +// TextUnmarshaler is an alias for encoding.TextUnmarshaler. +// +// Deprecated: use encoding.TextUnmarshaler +type TextUnmarshaler encoding.TextUnmarshaler + +// DecodeReader is an alias for NewDecoder(r).Decode(v). +// +// Deprecated: use NewDecoder(reader).Decode(&value). +func DecodeReader(r io.Reader, v any) (MetaData, error) { return NewDecoder(r).Decode(v) } + +// PrimitiveDecode is an alias for MetaData.PrimitiveDecode(). +// +// Deprecated: use MetaData.PrimitiveDecode. +func PrimitiveDecode(primValue Primitive, v any) error { + md := MetaData{decoded: make(map[string]struct{})} + return md.unify(primValue.undecoded, rvalue(v)) +} diff --git a/vendor/github.com/BurntSushi/toml/doc.go b/vendor/github.com/BurntSushi/toml/doc.go new file mode 100644 index 00000000..82c90a90 --- /dev/null +++ b/vendor/github.com/BurntSushi/toml/doc.go @@ -0,0 +1,8 @@ +// Package toml implements decoding and encoding of TOML files. +// +// This package supports TOML v1.0.0, as specified at https://toml.io +// +// The github.com/BurntSushi/toml/cmd/tomlv package implements a TOML validator, +// and can be used to verify if TOML document is valid. It can also be used to +// print the type of each key. +package toml diff --git a/vendor/github.com/BurntSushi/toml/encode.go b/vendor/github.com/BurntSushi/toml/encode.go new file mode 100644 index 00000000..73366c0d --- /dev/null +++ b/vendor/github.com/BurntSushi/toml/encode.go @@ -0,0 +1,778 @@ +package toml + +import ( + "bufio" + "bytes" + "encoding" + "encoding/json" + "errors" + "fmt" + "io" + "math" + "reflect" + "sort" + "strconv" + "strings" + "time" + + "github.com/BurntSushi/toml/internal" +) + +type tomlEncodeError struct{ error } + +var ( + errArrayNilElement = errors.New("toml: cannot encode array with nil element") + errNonString = errors.New("toml: cannot encode a map with non-string key type") + errNoKey = errors.New("toml: top-level values must be Go maps or structs") + errAnything = errors.New("") // used in testing +) + +var dblQuotedReplacer = strings.NewReplacer( + "\"", "\\\"", + "\\", "\\\\", + "\x00", `\u0000`, + "\x01", `\u0001`, + "\x02", `\u0002`, + "\x03", `\u0003`, + "\x04", `\u0004`, + "\x05", `\u0005`, + "\x06", `\u0006`, + "\x07", `\u0007`, + "\b", `\b`, + "\t", `\t`, + "\n", `\n`, + "\x0b", `\u000b`, + "\f", `\f`, + "\r", `\r`, + "\x0e", `\u000e`, + "\x0f", `\u000f`, + "\x10", `\u0010`, + "\x11", `\u0011`, + "\x12", `\u0012`, + "\x13", `\u0013`, + "\x14", `\u0014`, + "\x15", `\u0015`, + "\x16", `\u0016`, + "\x17", `\u0017`, + "\x18", `\u0018`, + "\x19", `\u0019`, + "\x1a", `\u001a`, + "\x1b", `\u001b`, + "\x1c", `\u001c`, + "\x1d", `\u001d`, + "\x1e", `\u001e`, + "\x1f", `\u001f`, + "\x7f", `\u007f`, +) + +var ( + marshalToml = reflect.TypeOf((*Marshaler)(nil)).Elem() + marshalText = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem() + timeType = reflect.TypeOf((*time.Time)(nil)).Elem() +) + +// Marshaler is the interface implemented by types that can marshal themselves +// into valid TOML. +type Marshaler interface { + MarshalTOML() ([]byte, error) +} + +// Marshal returns a TOML representation of the Go value. +// +// See [Encoder] for a description of the encoding process. +func Marshal(v any) ([]byte, error) { + buff := new(bytes.Buffer) + if err := NewEncoder(buff).Encode(v); err != nil { + return nil, err + } + return buff.Bytes(), nil +} + +// Encoder encodes a Go to a TOML document. +// +// The mapping between Go values and TOML values should be precisely the same as +// for [Decode]. +// +// time.Time is encoded as a RFC 3339 string, and time.Duration as its string +// representation. +// +// The [Marshaler] and [encoding.TextMarshaler] interfaces are supported to +// encoding the value as custom TOML. +// +// If you want to write arbitrary binary data then you will need to use +// something like base64 since TOML does not have any binary types. +// +// When encoding TOML hashes (Go maps or structs), keys without any sub-hashes +// are encoded first. +// +// Go maps will be sorted alphabetically by key for deterministic output. +// +// The toml struct tag can be used to provide the key name; if omitted the +// struct field name will be used. If the "omitempty" option is present the +// following value will be skipped: +// +// - arrays, slices, maps, and string with len of 0 +// - struct with all zero values +// - bool false +// +// If omitzero is given all int and float types with a value of 0 will be +// skipped. +// +// Encoding Go values without a corresponding TOML representation will return an +// error. Examples of this includes maps with non-string keys, slices with nil +// elements, embedded non-struct types, and nested slices containing maps or +// structs. (e.g. [][]map[string]string is not allowed but []map[string]string +// is okay, as is []map[string][]string). +// +// NOTE: only exported keys are encoded due to the use of reflection. Unexported +// keys are silently discarded. +type Encoder struct { + Indent string // string for a single indentation level; default is two spaces. + hasWritten bool // written any output to w yet? + w *bufio.Writer +} + +// NewEncoder create a new Encoder. +func NewEncoder(w io.Writer) *Encoder { + return &Encoder{w: bufio.NewWriter(w), Indent: " "} +} + +// Encode writes a TOML representation of the Go value to the [Encoder]'s writer. +// +// An error is returned if the value given cannot be encoded to a valid TOML +// document. +func (enc *Encoder) Encode(v any) error { + rv := eindirect(reflect.ValueOf(v)) + err := enc.safeEncode(Key([]string{}), rv) + if err != nil { + return err + } + return enc.w.Flush() +} + +func (enc *Encoder) safeEncode(key Key, rv reflect.Value) (err error) { + defer func() { + if r := recover(); r != nil { + if terr, ok := r.(tomlEncodeError); ok { + err = terr.error + return + } + panic(r) + } + }() + enc.encode(key, rv) + return nil +} + +func (enc *Encoder) encode(key Key, rv reflect.Value) { + // If we can marshal the type to text, then we use that. This prevents the + // encoder for handling these types as generic structs (or whatever the + // underlying type of a TextMarshaler is). + switch { + case isMarshaler(rv): + enc.writeKeyValue(key, rv, false) + return + case rv.Type() == primitiveType: // TODO: #76 would make this superfluous after implemented. + enc.encode(key, reflect.ValueOf(rv.Interface().(Primitive).undecoded)) + return + } + + k := rv.Kind() + switch k { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, + reflect.Int64, + reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, + reflect.Uint64, + reflect.Float32, reflect.Float64, reflect.String, reflect.Bool: + enc.writeKeyValue(key, rv, false) + case reflect.Array, reflect.Slice: + if typeEqual(tomlArrayHash, tomlTypeOfGo(rv)) { + enc.eArrayOfTables(key, rv) + } else { + enc.writeKeyValue(key, rv, false) + } + case reflect.Interface: + if rv.IsNil() { + return + } + enc.encode(key, rv.Elem()) + case reflect.Map: + if rv.IsNil() { + return + } + enc.eTable(key, rv) + case reflect.Ptr: + if rv.IsNil() { + return + } + enc.encode(key, rv.Elem()) + case reflect.Struct: + enc.eTable(key, rv) + default: + encPanic(fmt.Errorf("unsupported type for key '%s': %s", key, k)) + } +} + +// eElement encodes any value that can be an array element. +func (enc *Encoder) eElement(rv reflect.Value) { + switch v := rv.Interface().(type) { + case time.Time: // Using TextMarshaler adds extra quotes, which we don't want. + format := time.RFC3339Nano + switch v.Location() { + case internal.LocalDatetime: + format = "2006-01-02T15:04:05.999999999" + case internal.LocalDate: + format = "2006-01-02" + case internal.LocalTime: + format = "15:04:05.999999999" + } + switch v.Location() { + default: + enc.wf(v.Format(format)) + case internal.LocalDatetime, internal.LocalDate, internal.LocalTime: + enc.wf(v.In(time.UTC).Format(format)) + } + return + case Marshaler: + s, err := v.MarshalTOML() + if err != nil { + encPanic(err) + } + if s == nil { + encPanic(errors.New("MarshalTOML returned nil and no error")) + } + enc.w.Write(s) + return + case encoding.TextMarshaler: + s, err := v.MarshalText() + if err != nil { + encPanic(err) + } + if s == nil { + encPanic(errors.New("MarshalText returned nil and no error")) + } + enc.writeQuoted(string(s)) + return + case time.Duration: + enc.writeQuoted(v.String()) + return + case json.Number: + n, _ := rv.Interface().(json.Number) + + if n == "" { /// Useful zero value. + enc.w.WriteByte('0') + return + } else if v, err := n.Int64(); err == nil { + enc.eElement(reflect.ValueOf(v)) + return + } else if v, err := n.Float64(); err == nil { + enc.eElement(reflect.ValueOf(v)) + return + } + encPanic(fmt.Errorf("unable to convert %q to int64 or float64", n)) + } + + switch rv.Kind() { + case reflect.Ptr: + enc.eElement(rv.Elem()) + return + case reflect.String: + enc.writeQuoted(rv.String()) + case reflect.Bool: + enc.wf(strconv.FormatBool(rv.Bool())) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + enc.wf(strconv.FormatInt(rv.Int(), 10)) + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + enc.wf(strconv.FormatUint(rv.Uint(), 10)) + case reflect.Float32: + f := rv.Float() + if math.IsNaN(f) { + if math.Signbit(f) { + enc.wf("-") + } + enc.wf("nan") + } else if math.IsInf(f, 0) { + if math.Signbit(f) { + enc.wf("-") + } + enc.wf("inf") + } else { + enc.wf(floatAddDecimal(strconv.FormatFloat(f, 'f', -1, 32))) + } + case reflect.Float64: + f := rv.Float() + if math.IsNaN(f) { + if math.Signbit(f) { + enc.wf("-") + } + enc.wf("nan") + } else if math.IsInf(f, 0) { + if math.Signbit(f) { + enc.wf("-") + } + enc.wf("inf") + } else { + enc.wf(floatAddDecimal(strconv.FormatFloat(f, 'f', -1, 64))) + } + case reflect.Array, reflect.Slice: + enc.eArrayOrSliceElement(rv) + case reflect.Struct: + enc.eStruct(nil, rv, true) + case reflect.Map: + enc.eMap(nil, rv, true) + case reflect.Interface: + enc.eElement(rv.Elem()) + default: + encPanic(fmt.Errorf("unexpected type: %s", fmtType(rv.Interface()))) + } +} + +// By the TOML spec, all floats must have a decimal with at least one number on +// either side. +func floatAddDecimal(fstr string) string { + if !strings.Contains(fstr, ".") { + return fstr + ".0" + } + return fstr +} + +func (enc *Encoder) writeQuoted(s string) { + enc.wf("\"%s\"", dblQuotedReplacer.Replace(s)) +} + +func (enc *Encoder) eArrayOrSliceElement(rv reflect.Value) { + length := rv.Len() + enc.wf("[") + for i := 0; i < length; i++ { + elem := eindirect(rv.Index(i)) + enc.eElement(elem) + if i != length-1 { + enc.wf(", ") + } + } + enc.wf("]") +} + +func (enc *Encoder) eArrayOfTables(key Key, rv reflect.Value) { + if len(key) == 0 { + encPanic(errNoKey) + } + for i := 0; i < rv.Len(); i++ { + trv := eindirect(rv.Index(i)) + if isNil(trv) { + continue + } + enc.newline() + enc.wf("%s[[%s]]", enc.indentStr(key), key) + enc.newline() + enc.eMapOrStruct(key, trv, false) + } +} + +func (enc *Encoder) eTable(key Key, rv reflect.Value) { + if len(key) == 1 { + // Output an extra newline between top-level tables. + // (The newline isn't written if nothing else has been written though.) + enc.newline() + } + if len(key) > 0 { + enc.wf("%s[%s]", enc.indentStr(key), key) + enc.newline() + } + enc.eMapOrStruct(key, rv, false) +} + +func (enc *Encoder) eMapOrStruct(key Key, rv reflect.Value, inline bool) { + switch rv.Kind() { + case reflect.Map: + enc.eMap(key, rv, inline) + case reflect.Struct: + enc.eStruct(key, rv, inline) + default: + // Should never happen? + panic("eTable: unhandled reflect.Value Kind: " + rv.Kind().String()) + } +} + +func (enc *Encoder) eMap(key Key, rv reflect.Value, inline bool) { + rt := rv.Type() + if rt.Key().Kind() != reflect.String { + encPanic(errNonString) + } + + // Sort keys so that we have deterministic output. And write keys directly + // underneath this key first, before writing sub-structs or sub-maps. + var mapKeysDirect, mapKeysSub []string + for _, mapKey := range rv.MapKeys() { + k := mapKey.String() + if typeIsTable(tomlTypeOfGo(eindirect(rv.MapIndex(mapKey)))) { + mapKeysSub = append(mapKeysSub, k) + } else { + mapKeysDirect = append(mapKeysDirect, k) + } + } + + var writeMapKeys = func(mapKeys []string, trailC bool) { + sort.Strings(mapKeys) + for i, mapKey := range mapKeys { + val := eindirect(rv.MapIndex(reflect.ValueOf(mapKey))) + if isNil(val) { + continue + } + + if inline { + enc.writeKeyValue(Key{mapKey}, val, true) + if trailC || i != len(mapKeys)-1 { + enc.wf(", ") + } + } else { + enc.encode(key.add(mapKey), val) + } + } + } + + if inline { + enc.wf("{") + } + writeMapKeys(mapKeysDirect, len(mapKeysSub) > 0) + writeMapKeys(mapKeysSub, false) + if inline { + enc.wf("}") + } +} + +const is32Bit = (32 << (^uint(0) >> 63)) == 32 + +func pointerTo(t reflect.Type) reflect.Type { + if t.Kind() == reflect.Ptr { + return pointerTo(t.Elem()) + } + return t +} + +func (enc *Encoder) eStruct(key Key, rv reflect.Value, inline bool) { + // Write keys for fields directly under this key first, because if we write + // a field that creates a new table then all keys under it will be in that + // table (not the one we're writing here). + // + // Fields is a [][]int: for fieldsDirect this always has one entry (the + // struct index). For fieldsSub it contains two entries: the parent field + // index from tv, and the field indexes for the fields of the sub. + var ( + rt = rv.Type() + fieldsDirect, fieldsSub [][]int + addFields func(rt reflect.Type, rv reflect.Value, start []int) + ) + addFields = func(rt reflect.Type, rv reflect.Value, start []int) { + for i := 0; i < rt.NumField(); i++ { + f := rt.Field(i) + isEmbed := f.Anonymous && pointerTo(f.Type).Kind() == reflect.Struct + if f.PkgPath != "" && !isEmbed { /// Skip unexported fields. + continue + } + opts := getOptions(f.Tag) + if opts.skip { + continue + } + + frv := eindirect(rv.Field(i)) + + if is32Bit { + // Copy so it works correct on 32bit archs; not clear why this + // is needed. See #314, and https://www.reddit.com/r/golang/comments/pnx8v4 + // This also works fine on 64bit, but 32bit archs are somewhat + // rare and this is a wee bit faster. + copyStart := make([]int, len(start)) + copy(copyStart, start) + start = copyStart + } + + // Treat anonymous struct fields with tag names as though they are + // not anonymous, like encoding/json does. + // + // Non-struct anonymous fields use the normal encoding logic. + if isEmbed { + if getOptions(f.Tag).name == "" && frv.Kind() == reflect.Struct { + addFields(frv.Type(), frv, append(start, f.Index...)) + continue + } + } + + if typeIsTable(tomlTypeOfGo(frv)) { + fieldsSub = append(fieldsSub, append(start, f.Index...)) + } else { + fieldsDirect = append(fieldsDirect, append(start, f.Index...)) + } + } + } + addFields(rt, rv, nil) + + writeFields := func(fields [][]int) { + for _, fieldIndex := range fields { + fieldType := rt.FieldByIndex(fieldIndex) + fieldVal := rv.FieldByIndex(fieldIndex) + + opts := getOptions(fieldType.Tag) + if opts.skip { + continue + } + if opts.omitempty && isEmpty(fieldVal) { + continue + } + + fieldVal = eindirect(fieldVal) + + if isNil(fieldVal) { /// Don't write anything for nil fields. + continue + } + + keyName := fieldType.Name + if opts.name != "" { + keyName = opts.name + } + + if opts.omitzero && isZero(fieldVal) { + continue + } + + if inline { + enc.writeKeyValue(Key{keyName}, fieldVal, true) + if fieldIndex[0] != len(fields)-1 { + enc.wf(", ") + } + } else { + enc.encode(key.add(keyName), fieldVal) + } + } + } + + if inline { + enc.wf("{") + } + writeFields(fieldsDirect) + writeFields(fieldsSub) + if inline { + enc.wf("}") + } +} + +// tomlTypeOfGo returns the TOML type name of the Go value's type. +// +// It is used to determine whether the types of array elements are mixed (which +// is forbidden). If the Go value is nil, then it is illegal for it to be an +// array element, and valueIsNil is returned as true. +// +// The type may be `nil`, which means no concrete TOML type could be found. +func tomlTypeOfGo(rv reflect.Value) tomlType { + if isNil(rv) || !rv.IsValid() { + return nil + } + + if rv.Kind() == reflect.Struct { + if rv.Type() == timeType { + return tomlDatetime + } + if isMarshaler(rv) { + return tomlString + } + return tomlHash + } + + if isMarshaler(rv) { + return tomlString + } + + switch rv.Kind() { + case reflect.Bool: + return tomlBool + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, + reflect.Int64, + reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, + reflect.Uint64: + return tomlInteger + case reflect.Float32, reflect.Float64: + return tomlFloat + case reflect.Array, reflect.Slice: + if isTableArray(rv) { + return tomlArrayHash + } + return tomlArray + case reflect.Ptr, reflect.Interface: + return tomlTypeOfGo(rv.Elem()) + case reflect.String: + return tomlString + case reflect.Map: + return tomlHash + default: + encPanic(errors.New("unsupported type: " + rv.Kind().String())) + panic("unreachable") + } +} + +func isMarshaler(rv reflect.Value) bool { + return rv.Type().Implements(marshalText) || rv.Type().Implements(marshalToml) +} + +// isTableArray reports if all entries in the array or slice are a table. +func isTableArray(arr reflect.Value) bool { + if isNil(arr) || !arr.IsValid() || arr.Len() == 0 { + return false + } + + ret := true + for i := 0; i < arr.Len(); i++ { + tt := tomlTypeOfGo(eindirect(arr.Index(i))) + // Don't allow nil. + if tt == nil { + encPanic(errArrayNilElement) + } + + if ret && !typeEqual(tomlHash, tt) { + ret = false + } + } + return ret +} + +type tagOptions struct { + skip bool // "-" + name string + omitempty bool + omitzero bool +} + +func getOptions(tag reflect.StructTag) tagOptions { + t := tag.Get("toml") + if t == "-" { + return tagOptions{skip: true} + } + var opts tagOptions + parts := strings.Split(t, ",") + opts.name = parts[0] + for _, s := range parts[1:] { + switch s { + case "omitempty": + opts.omitempty = true + case "omitzero": + opts.omitzero = true + } + } + return opts +} + +func isZero(rv reflect.Value) bool { + switch rv.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return rv.Int() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + return rv.Uint() == 0 + case reflect.Float32, reflect.Float64: + return rv.Float() == 0.0 + } + return false +} + +func isEmpty(rv reflect.Value) bool { + switch rv.Kind() { + case reflect.Array, reflect.Slice, reflect.Map, reflect.String: + return rv.Len() == 0 + case reflect.Struct: + if rv.Type().Comparable() { + return reflect.Zero(rv.Type()).Interface() == rv.Interface() + } + // Need to also check if all the fields are empty, otherwise something + // like this with uncomparable types will always return true: + // + // type a struct{ field b } + // type b struct{ s []string } + // s := a{field: b{s: []string{"AAA"}}} + for i := 0; i < rv.NumField(); i++ { + if !isEmpty(rv.Field(i)) { + return false + } + } + return true + case reflect.Bool: + return !rv.Bool() + case reflect.Ptr: + return rv.IsNil() + } + return false +} + +func (enc *Encoder) newline() { + if enc.hasWritten { + enc.wf("\n") + } +} + +// Write a key/value pair: +// +// key = +// +// This is also used for "k = v" in inline tables; so something like this will +// be written in three calls: +// +// ┌───────────────────┐ +// │ ┌───┐ ┌────┐│ +// v v v v vv +// key = {k = 1, k2 = 2} +func (enc *Encoder) writeKeyValue(key Key, val reflect.Value, inline bool) { + /// Marshaler used on top-level document; call eElement() to just call + /// Marshal{TOML,Text}. + if len(key) == 0 { + enc.eElement(val) + return + } + enc.wf("%s%s = ", enc.indentStr(key), key.maybeQuoted(len(key)-1)) + enc.eElement(val) + if !inline { + enc.newline() + } +} + +func (enc *Encoder) wf(format string, v ...any) { + _, err := fmt.Fprintf(enc.w, format, v...) + if err != nil { + encPanic(err) + } + enc.hasWritten = true +} + +func (enc *Encoder) indentStr(key Key) string { + return strings.Repeat(enc.Indent, len(key)-1) +} + +func encPanic(err error) { + panic(tomlEncodeError{err}) +} + +// Resolve any level of pointers to the actual value (e.g. **string → string). +func eindirect(v reflect.Value) reflect.Value { + if v.Kind() != reflect.Ptr && v.Kind() != reflect.Interface { + if isMarshaler(v) { + return v + } + if v.CanAddr() { /// Special case for marshalers; see #358. + if pv := v.Addr(); isMarshaler(pv) { + return pv + } + } + return v + } + + if v.IsNil() { + return v + } + + return eindirect(v.Elem()) +} + +func isNil(rv reflect.Value) bool { + switch rv.Kind() { + case reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: + return rv.IsNil() + default: + return false + } +} diff --git a/vendor/github.com/BurntSushi/toml/error.go b/vendor/github.com/BurntSushi/toml/error.go new file mode 100644 index 00000000..b45a3f45 --- /dev/null +++ b/vendor/github.com/BurntSushi/toml/error.go @@ -0,0 +1,356 @@ +package toml + +import ( + "fmt" + "strings" +) + +// ParseError is returned when there is an error parsing the TOML syntax such as +// invalid syntax, duplicate keys, etc. +// +// In addition to the error message itself, you can also print detailed location +// information with context by using [ErrorWithPosition]: +// +// toml: error: Key 'fruit' was already created and cannot be used as an array. +// +// At line 4, column 2-7: +// +// 2 | fruit = [] +// 3 | +// 4 | [[fruit]] # Not allowed +// ^^^^^ +// +// [ErrorWithUsage] can be used to print the above with some more detailed usage +// guidance: +// +// toml: error: newlines not allowed within inline tables +// +// At line 1, column 18: +// +// 1 | x = [{ key = 42 # +// ^ +// +// Error help: +// +// Inline tables must always be on a single line: +// +// table = {key = 42, second = 43} +// +// It is invalid to split them over multiple lines like so: +// +// # INVALID +// table = { +// key = 42, +// second = 43 +// } +// +// Use regular for this: +// +// [table] +// key = 42 +// second = 43 +type ParseError struct { + Message string // Short technical message. + Usage string // Longer message with usage guidance; may be blank. + Position Position // Position of the error + LastKey string // Last parsed key, may be blank. + + // Line the error occurred. + // + // Deprecated: use [Position]. + Line int + + err error + input string +} + +// Position of an error. +type Position struct { + Line int // Line number, starting at 1. + Start int // Start of error, as byte offset starting at 0. + Len int // Lenght in bytes. +} + +func (pe ParseError) Error() string { + msg := pe.Message + if msg == "" { // Error from errorf() + msg = pe.err.Error() + } + + if pe.LastKey == "" { + return fmt.Sprintf("toml: line %d: %s", pe.Position.Line, msg) + } + return fmt.Sprintf("toml: line %d (last key %q): %s", + pe.Position.Line, pe.LastKey, msg) +} + +// ErrorWithPosition returns the error with detailed location context. +// +// See the documentation on [ParseError]. +func (pe ParseError) ErrorWithPosition() string { + if pe.input == "" { // Should never happen, but just in case. + return pe.Error() + } + + var ( + lines = strings.Split(pe.input, "\n") + col = pe.column(lines) + b = new(strings.Builder) + ) + + msg := pe.Message + if msg == "" { + msg = pe.err.Error() + } + + // TODO: don't show control characters as literals? This may not show up + // well everywhere. + + if pe.Position.Len == 1 { + fmt.Fprintf(b, "toml: error: %s\n\nAt line %d, column %d:\n\n", + msg, pe.Position.Line, col+1) + } else { + fmt.Fprintf(b, "toml: error: %s\n\nAt line %d, column %d-%d:\n\n", + msg, pe.Position.Line, col, col+pe.Position.Len) + } + if pe.Position.Line > 2 { + fmt.Fprintf(b, "% 7d | %s\n", pe.Position.Line-2, expandTab(lines[pe.Position.Line-3])) + } + if pe.Position.Line > 1 { + fmt.Fprintf(b, "% 7d | %s\n", pe.Position.Line-1, expandTab(lines[pe.Position.Line-2])) + } + + /// Expand tabs, so that the ^^^s are at the correct position, but leave + /// "column 10-13" intact. Adjusting this to the visual column would be + /// better, but we don't know the tabsize of the user in their editor, which + /// can be 8, 4, 2, or something else. We can't know. So leaving it as the + /// character index is probably the "most correct". + expanded := expandTab(lines[pe.Position.Line-1]) + diff := len(expanded) - len(lines[pe.Position.Line-1]) + + fmt.Fprintf(b, "% 7d | %s\n", pe.Position.Line, expanded) + fmt.Fprintf(b, "% 10s%s%s\n", "", strings.Repeat(" ", col+diff), strings.Repeat("^", pe.Position.Len)) + return b.String() +} + +// ErrorWithUsage returns the error with detailed location context and usage +// guidance. +// +// See the documentation on [ParseError]. +func (pe ParseError) ErrorWithUsage() string { + m := pe.ErrorWithPosition() + if u, ok := pe.err.(interface{ Usage() string }); ok && u.Usage() != "" { + lines := strings.Split(strings.TrimSpace(u.Usage()), "\n") + for i := range lines { + if lines[i] != "" { + lines[i] = " " + lines[i] + } + } + return m + "Error help:\n\n" + strings.Join(lines, "\n") + "\n" + } + return m +} + +func (pe ParseError) column(lines []string) int { + var pos, col int + for i := range lines { + ll := len(lines[i]) + 1 // +1 for the removed newline + if pos+ll >= pe.Position.Start { + col = pe.Position.Start - pos + if col < 0 { // Should never happen, but just in case. + col = 0 + } + break + } + pos += ll + } + + return col +} + +func expandTab(s string) string { + var ( + b strings.Builder + l int + fill = func(n int) string { + b := make([]byte, n) + for i := range b { + b[i] = ' ' + } + return string(b) + } + ) + b.Grow(len(s)) + for _, r := range s { + switch r { + case '\t': + tw := 8 - l%8 + b.WriteString(fill(tw)) + l += tw + default: + b.WriteRune(r) + l += 1 + } + } + return b.String() +} + +type ( + errLexControl struct{ r rune } + errLexEscape struct{ r rune } + errLexUTF8 struct{ b byte } + errParseDate struct{ v string } + errLexInlineTableNL struct{} + errLexStringNL struct{} + errParseRange struct { + i any // int or float + size string // "int64", "uint16", etc. + } + errUnsafeFloat struct { + i interface{} // float32 or float64 + size string // "float32" or "float64" + } + errParseDuration struct{ d string } +) + +func (e errLexControl) Error() string { + return fmt.Sprintf("TOML files cannot contain control characters: '0x%02x'", e.r) +} +func (e errLexControl) Usage() string { return "" } + +func (e errLexEscape) Error() string { return fmt.Sprintf(`invalid escape in string '\%c'`, e.r) } +func (e errLexEscape) Usage() string { return usageEscape } +func (e errLexUTF8) Error() string { return fmt.Sprintf("invalid UTF-8 byte: 0x%02x", e.b) } +func (e errLexUTF8) Usage() string { return "" } +func (e errParseDate) Error() string { return fmt.Sprintf("invalid datetime: %q", e.v) } +func (e errParseDate) Usage() string { return usageDate } +func (e errLexInlineTableNL) Error() string { return "newlines not allowed within inline tables" } +func (e errLexInlineTableNL) Usage() string { return usageInlineNewline } +func (e errLexStringNL) Error() string { return "strings cannot contain newlines" } +func (e errLexStringNL) Usage() string { return usageStringNewline } +func (e errParseRange) Error() string { return fmt.Sprintf("%v is out of range for %s", e.i, e.size) } +func (e errParseRange) Usage() string { return usageIntOverflow } +func (e errUnsafeFloat) Error() string { + return fmt.Sprintf("%v is out of the safe %s range", e.i, e.size) +} +func (e errUnsafeFloat) Usage() string { return usageUnsafeFloat } +func (e errParseDuration) Error() string { return fmt.Sprintf("invalid duration: %q", e.d) } +func (e errParseDuration) Usage() string { return usageDuration } + +const usageEscape = ` +A '\' inside a "-delimited string is interpreted as an escape character. + +The following escape sequences are supported: +\b, \t, \n, \f, \r, \", \\, \uXXXX, and \UXXXXXXXX + +To prevent a '\' from being recognized as an escape character, use either: + +- a ' or '''-delimited string; escape characters aren't processed in them; or +- write two backslashes to get a single backslash: '\\'. + +If you're trying to add a Windows path (e.g. "C:\Users\martin") then using '/' +instead of '\' will usually also work: "C:/Users/martin". +` + +const usageInlineNewline = ` +Inline tables must always be on a single line: + + table = {key = 42, second = 43} + +It is invalid to split them over multiple lines like so: + + # INVALID + table = { + key = 42, + second = 43 + } + +Use regular for this: + + [table] + key = 42 + second = 43 +` + +const usageStringNewline = ` +Strings must always be on a single line, and cannot span more than one line: + + # INVALID + string = "Hello, + world!" + +Instead use """ or ''' to split strings over multiple lines: + + string = """Hello, + world!""" +` + +const usageIntOverflow = ` +This number is too large; this may be an error in the TOML, but it can also be a +bug in the program that uses too small of an integer. + +The maximum and minimum values are: + + size │ lowest │ highest + ───────┼────────────────┼────────────── + int8 │ -128 │ 127 + int16 │ -32,768 │ 32,767 + int32 │ -2,147,483,648 │ 2,147,483,647 + int64 │ -9.2 × 10¹⁷ │ 9.2 × 10¹⁷ + uint8 │ 0 │ 255 + uint16 │ 0 │ 65,535 + uint32 │ 0 │ 4,294,967,295 + uint64 │ 0 │ 1.8 × 10¹⁸ + +int refers to int32 on 32-bit systems and int64 on 64-bit systems. +` + +const usageUnsafeFloat = ` +This number is outside of the "safe" range for floating point numbers; whole +(non-fractional) numbers outside the below range can not always be represented +accurately in a float, leading to some loss of accuracy. + +Explicitly mark a number as a fractional unit by adding ".0", which will incur +some loss of accuracy; for example: + + f = 2_000_000_000.0 + +Accuracy ranges: + + float32 = 16,777,215 + float64 = 9,007,199,254,740,991 +` + +const usageDuration = ` +A duration must be as "number", without any spaces. Valid units are: + + ns nanoseconds (billionth of a second) + us, µs microseconds (millionth of a second) + ms milliseconds (thousands of a second) + s seconds + m minutes + h hours + +You can combine multiple units; for example "5m10s" for 5 minutes and 10 +seconds. +` + +const usageDate = ` +A TOML datetime must be in one of the following formats: + + 2006-01-02T15:04:05Z07:00 Date and time, with timezone. + 2006-01-02T15:04:05 Date and time, but without timezone. + 2006-01-02 Date without a time or timezone. + 15:04:05 Just a time, without any timezone. + +Seconds may optionally have a fraction, up to nanosecond precision: + + 15:04:05.123 + 15:04:05.856018510 +` + +// TOML 1.1: +// The seconds part in times is optional, and may be omitted: +// 2006-01-02T15:04Z07:00 +// 2006-01-02T15:04 +// 15:04 diff --git a/vendor/github.com/BurntSushi/toml/internal/tz.go b/vendor/github.com/BurntSushi/toml/internal/tz.go new file mode 100644 index 00000000..022f15bc --- /dev/null +++ b/vendor/github.com/BurntSushi/toml/internal/tz.go @@ -0,0 +1,36 @@ +package internal + +import "time" + +// Timezones used for local datetime, date, and time TOML types. +// +// The exact way times and dates without a timezone should be interpreted is not +// well-defined in the TOML specification and left to the implementation. These +// defaults to current local timezone offset of the computer, but this can be +// changed by changing these variables before decoding. +// +// TODO: +// Ideally we'd like to offer people the ability to configure the used timezone +// by setting Decoder.Timezone and Encoder.Timezone; however, this is a bit +// tricky: the reason we use three different variables for this is to support +// round-tripping – without these specific TZ names we wouldn't know which +// format to use. +// +// There isn't a good way to encode this right now though, and passing this sort +// of information also ties in to various related issues such as string format +// encoding, encoding of comments, etc. +// +// So, for the time being, just put this in internal until we can write a good +// comprehensive API for doing all of this. +// +// The reason they're exported is because they're referred from in e.g. +// internal/tag. +// +// Note that this behaviour is valid according to the TOML spec as the exact +// behaviour is left up to implementations. +var ( + localOffset = func() int { _, o := time.Now().Zone(); return o }() + LocalDatetime = time.FixedZone("datetime-local", localOffset) + LocalDate = time.FixedZone("date-local", localOffset) + LocalTime = time.FixedZone("time-local", localOffset) +) diff --git a/vendor/github.com/BurntSushi/toml/lex.go b/vendor/github.com/BurntSushi/toml/lex.go new file mode 100644 index 00000000..a1016d98 --- /dev/null +++ b/vendor/github.com/BurntSushi/toml/lex.go @@ -0,0 +1,1281 @@ +package toml + +import ( + "fmt" + "reflect" + "runtime" + "strings" + "unicode" + "unicode/utf8" +) + +type itemType int + +const ( + itemError itemType = iota + itemNIL // used in the parser to indicate no type + itemEOF + itemText + itemString + itemStringEsc + itemRawString + itemMultilineString + itemRawMultilineString + itemBool + itemInteger + itemFloat + itemDatetime + itemArray // the start of an array + itemArrayEnd + itemTableStart + itemTableEnd + itemArrayTableStart + itemArrayTableEnd + itemKeyStart + itemKeyEnd + itemCommentStart + itemInlineTableStart + itemInlineTableEnd +) + +const eof = 0 + +type stateFn func(lx *lexer) stateFn + +func (p Position) String() string { + return fmt.Sprintf("at line %d; start %d; length %d", p.Line, p.Start, p.Len) +} + +type lexer struct { + input string + start int + pos int + line int + state stateFn + items chan item + tomlNext bool + esc bool + + // Allow for backing up up to 4 runes. This is necessary because TOML + // contains 3-rune tokens (""" and '''). + prevWidths [4]int + nprev int // how many of prevWidths are in use + atEOF bool // If we emit an eof, we can still back up, but it is not OK to call next again. + + // A stack of state functions used to maintain context. + // + // The idea is to reuse parts of the state machine in various places. For + // example, values can appear at the top level or within arbitrarily nested + // arrays. The last state on the stack is used after a value has been lexed. + // Similarly for comments. + stack []stateFn +} + +type item struct { + typ itemType + val string + err error + pos Position +} + +func (lx *lexer) nextItem() item { + for { + select { + case item := <-lx.items: + return item + default: + lx.state = lx.state(lx) + //fmt.Printf(" STATE %-24s current: %-10s stack: %s\n", lx.state, lx.current(), lx.stack) + } + } +} + +func lex(input string, tomlNext bool) *lexer { + lx := &lexer{ + input: input, + state: lexTop, + items: make(chan item, 10), + stack: make([]stateFn, 0, 10), + line: 1, + tomlNext: tomlNext, + } + return lx +} + +func (lx *lexer) push(state stateFn) { + lx.stack = append(lx.stack, state) +} + +func (lx *lexer) pop() stateFn { + if len(lx.stack) == 0 { + return lx.errorf("BUG in lexer: no states to pop") + } + last := lx.stack[len(lx.stack)-1] + lx.stack = lx.stack[0 : len(lx.stack)-1] + return last +} + +func (lx *lexer) current() string { + return lx.input[lx.start:lx.pos] +} + +func (lx lexer) getPos() Position { + p := Position{ + Line: lx.line, + Start: lx.start, + Len: lx.pos - lx.start, + } + if p.Len <= 0 { + p.Len = 1 + } + return p +} + +func (lx *lexer) emit(typ itemType) { + // Needed for multiline strings ending with an incomplete UTF-8 sequence. + if lx.start > lx.pos { + lx.error(errLexUTF8{lx.input[lx.pos]}) + return + } + lx.items <- item{typ: typ, pos: lx.getPos(), val: lx.current()} + lx.start = lx.pos +} + +func (lx *lexer) emitTrim(typ itemType) { + lx.items <- item{typ: typ, pos: lx.getPos(), val: strings.TrimSpace(lx.current())} + lx.start = lx.pos +} + +func (lx *lexer) next() (r rune) { + if lx.atEOF { + panic("BUG in lexer: next called after EOF") + } + if lx.pos >= len(lx.input) { + lx.atEOF = true + return eof + } + + if lx.input[lx.pos] == '\n' { + lx.line++ + } + lx.prevWidths[3] = lx.prevWidths[2] + lx.prevWidths[2] = lx.prevWidths[1] + lx.prevWidths[1] = lx.prevWidths[0] + if lx.nprev < 4 { + lx.nprev++ + } + + r, w := utf8.DecodeRuneInString(lx.input[lx.pos:]) + if r == utf8.RuneError && w == 1 { + lx.error(errLexUTF8{lx.input[lx.pos]}) + return utf8.RuneError + } + + // Note: don't use peek() here, as this calls next(). + if isControl(r) || (r == '\r' && (len(lx.input)-1 == lx.pos || lx.input[lx.pos+1] != '\n')) { + lx.errorControlChar(r) + return utf8.RuneError + } + + lx.prevWidths[0] = w + lx.pos += w + return r +} + +// ignore skips over the pending input before this point. +func (lx *lexer) ignore() { + lx.start = lx.pos +} + +// backup steps back one rune. Can be called 4 times between calls to next. +func (lx *lexer) backup() { + if lx.atEOF { + lx.atEOF = false + return + } + if lx.nprev < 1 { + panic("BUG in lexer: backed up too far") + } + w := lx.prevWidths[0] + lx.prevWidths[0] = lx.prevWidths[1] + lx.prevWidths[1] = lx.prevWidths[2] + lx.prevWidths[2] = lx.prevWidths[3] + lx.nprev-- + + lx.pos -= w + if lx.pos < len(lx.input) && lx.input[lx.pos] == '\n' { + lx.line-- + } +} + +// accept consumes the next rune if it's equal to `valid`. +func (lx *lexer) accept(valid rune) bool { + if lx.next() == valid { + return true + } + lx.backup() + return false +} + +// peek returns but does not consume the next rune in the input. +func (lx *lexer) peek() rune { + r := lx.next() + lx.backup() + return r +} + +// skip ignores all input that matches the given predicate. +func (lx *lexer) skip(pred func(rune) bool) { + for { + r := lx.next() + if pred(r) { + continue + } + lx.backup() + lx.ignore() + return + } +} + +// error stops all lexing by emitting an error and returning `nil`. +// +// Note that any value that is a character is escaped if it's a special +// character (newlines, tabs, etc.). +func (lx *lexer) error(err error) stateFn { + if lx.atEOF { + return lx.errorPrevLine(err) + } + lx.items <- item{typ: itemError, pos: lx.getPos(), err: err} + return nil +} + +// errorfPrevline is like error(), but sets the position to the last column of +// the previous line. +// +// This is so that unexpected EOF or NL errors don't show on a new blank line. +func (lx *lexer) errorPrevLine(err error) stateFn { + pos := lx.getPos() + pos.Line-- + pos.Len = 1 + pos.Start = lx.pos - 1 + lx.items <- item{typ: itemError, pos: pos, err: err} + return nil +} + +// errorPos is like error(), but allows explicitly setting the position. +func (lx *lexer) errorPos(start, length int, err error) stateFn { + pos := lx.getPos() + pos.Start = start + pos.Len = length + lx.items <- item{typ: itemError, pos: pos, err: err} + return nil +} + +// errorf is like error, and creates a new error. +func (lx *lexer) errorf(format string, values ...any) stateFn { + if lx.atEOF { + pos := lx.getPos() + pos.Line-- + pos.Len = 1 + pos.Start = lx.pos - 1 + lx.items <- item{typ: itemError, pos: pos, err: fmt.Errorf(format, values...)} + return nil + } + lx.items <- item{typ: itemError, pos: lx.getPos(), err: fmt.Errorf(format, values...)} + return nil +} + +func (lx *lexer) errorControlChar(cc rune) stateFn { + return lx.errorPos(lx.pos-1, 1, errLexControl{cc}) +} + +// lexTop consumes elements at the top level of TOML data. +func lexTop(lx *lexer) stateFn { + r := lx.next() + if isWhitespace(r) || isNL(r) { + return lexSkip(lx, lexTop) + } + switch r { + case '#': + lx.push(lexTop) + return lexCommentStart + case '[': + return lexTableStart + case eof: + if lx.pos > lx.start { + return lx.errorf("unexpected EOF") + } + lx.emit(itemEOF) + return nil + } + + // At this point, the only valid item can be a key, so we back up + // and let the key lexer do the rest. + lx.backup() + lx.push(lexTopEnd) + return lexKeyStart +} + +// lexTopEnd is entered whenever a top-level item has been consumed. (A value +// or a table.) It must see only whitespace, and will turn back to lexTop +// upon a newline. If it sees EOF, it will quit the lexer successfully. +func lexTopEnd(lx *lexer) stateFn { + r := lx.next() + switch { + case r == '#': + // a comment will read to a newline for us. + lx.push(lexTop) + return lexCommentStart + case isWhitespace(r): + return lexTopEnd + case isNL(r): + lx.ignore() + return lexTop + case r == eof: + lx.emit(itemEOF) + return nil + } + return lx.errorf("expected a top-level item to end with a newline, comment, or EOF, but got %q instead", r) +} + +// lexTable lexes the beginning of a table. Namely, it makes sure that +// it starts with a character other than '.' and ']'. +// It assumes that '[' has already been consumed. +// It also handles the case that this is an item in an array of tables. +// e.g., '[[name]]'. +func lexTableStart(lx *lexer) stateFn { + if lx.peek() == '[' { + lx.next() + lx.emit(itemArrayTableStart) + lx.push(lexArrayTableEnd) + } else { + lx.emit(itemTableStart) + lx.push(lexTableEnd) + } + return lexTableNameStart +} + +func lexTableEnd(lx *lexer) stateFn { + lx.emit(itemTableEnd) + return lexTopEnd +} + +func lexArrayTableEnd(lx *lexer) stateFn { + if r := lx.next(); r != ']' { + return lx.errorf("expected end of table array name delimiter ']', but got %q instead", r) + } + lx.emit(itemArrayTableEnd) + return lexTopEnd +} + +func lexTableNameStart(lx *lexer) stateFn { + lx.skip(isWhitespace) + switch r := lx.peek(); { + case r == ']' || r == eof: + return lx.errorf("unexpected end of table name (table names cannot be empty)") + case r == '.': + return lx.errorf("unexpected table separator (table names cannot be empty)") + case r == '"' || r == '\'': + lx.ignore() + lx.push(lexTableNameEnd) + return lexQuotedName + default: + lx.push(lexTableNameEnd) + return lexBareName + } +} + +// lexTableNameEnd reads the end of a piece of a table name, optionally +// consuming whitespace. +func lexTableNameEnd(lx *lexer) stateFn { + lx.skip(isWhitespace) + switch r := lx.next(); { + case isWhitespace(r): + return lexTableNameEnd + case r == '.': + lx.ignore() + return lexTableNameStart + case r == ']': + return lx.pop() + default: + return lx.errorf("expected '.' or ']' to end table name, but got %q instead", r) + } +} + +// lexBareName lexes one part of a key or table. +// +// It assumes that at least one valid character for the table has already been +// read. +// +// Lexes only one part, e.g. only 'a' inside 'a.b'. +func lexBareName(lx *lexer) stateFn { + r := lx.next() + if isBareKeyChar(r, lx.tomlNext) { + return lexBareName + } + lx.backup() + lx.emit(itemText) + return lx.pop() +} + +// lexBareName lexes one part of a key or table. +// +// It assumes that at least one valid character for the table has already been +// read. +// +// Lexes only one part, e.g. only '"a"' inside '"a".b'. +func lexQuotedName(lx *lexer) stateFn { + r := lx.next() + switch { + case isWhitespace(r): + return lexSkip(lx, lexValue) + case r == '"': + lx.ignore() // ignore the '"' + return lexString + case r == '\'': + lx.ignore() // ignore the "'" + return lexRawString + case r == eof: + return lx.errorf("unexpected EOF; expected value") + default: + return lx.errorf("expected value but found %q instead", r) + } +} + +// lexKeyStart consumes all key parts until a '='. +func lexKeyStart(lx *lexer) stateFn { + lx.skip(isWhitespace) + switch r := lx.peek(); { + case r == '=' || r == eof: + return lx.errorf("unexpected '=': key name appears blank") + case r == '.': + return lx.errorf("unexpected '.': keys cannot start with a '.'") + case r == '"' || r == '\'': + lx.ignore() + fallthrough + default: // Bare key + lx.emit(itemKeyStart) + return lexKeyNameStart + } +} + +func lexKeyNameStart(lx *lexer) stateFn { + lx.skip(isWhitespace) + switch r := lx.peek(); { + case r == '=' || r == eof: + return lx.errorf("unexpected '='") + case r == '.': + return lx.errorf("unexpected '.'") + case r == '"' || r == '\'': + lx.ignore() + lx.push(lexKeyEnd) + return lexQuotedName + default: + lx.push(lexKeyEnd) + return lexBareName + } +} + +// lexKeyEnd consumes the end of a key and trims whitespace (up to the key +// separator). +func lexKeyEnd(lx *lexer) stateFn { + lx.skip(isWhitespace) + switch r := lx.next(); { + case isWhitespace(r): + return lexSkip(lx, lexKeyEnd) + case r == eof: + return lx.errorf("unexpected EOF; expected key separator '='") + case r == '.': + lx.ignore() + return lexKeyNameStart + case r == '=': + lx.emit(itemKeyEnd) + return lexSkip(lx, lexValue) + default: + return lx.errorf("expected '.' or '=', but got %q instead", r) + } +} + +// lexValue starts the consumption of a value anywhere a value is expected. +// lexValue will ignore whitespace. +// After a value is lexed, the last state on the next is popped and returned. +func lexValue(lx *lexer) stateFn { + // We allow whitespace to precede a value, but NOT newlines. + // In array syntax, the array states are responsible for ignoring newlines. + r := lx.next() + switch { + case isWhitespace(r): + return lexSkip(lx, lexValue) + case isDigit(r): + lx.backup() // avoid an extra state and use the same as above + return lexNumberOrDateStart + } + switch r { + case '[': + lx.ignore() + lx.emit(itemArray) + return lexArrayValue + case '{': + lx.ignore() + lx.emit(itemInlineTableStart) + return lexInlineTableValue + case '"': + if lx.accept('"') { + if lx.accept('"') { + lx.ignore() // Ignore """ + return lexMultilineString + } + lx.backup() + } + lx.ignore() // ignore the '"' + return lexString + case '\'': + if lx.accept('\'') { + if lx.accept('\'') { + lx.ignore() // Ignore """ + return lexMultilineRawString + } + lx.backup() + } + lx.ignore() // ignore the "'" + return lexRawString + case '.': // special error case, be kind to users + return lx.errorf("floats must start with a digit, not '.'") + case 'i', 'n': + if (lx.accept('n') && lx.accept('f')) || (lx.accept('a') && lx.accept('n')) { + lx.emit(itemFloat) + return lx.pop() + } + case '-', '+': + return lexDecimalNumberStart + } + if unicode.IsLetter(r) { + // Be permissive here; lexBool will give a nice error if the + // user wrote something like + // x = foo + // (i.e. not 'true' or 'false' but is something else word-like.) + lx.backup() + return lexBool + } + if r == eof { + return lx.errorf("unexpected EOF; expected value") + } + return lx.errorf("expected value but found %q instead", r) +} + +// lexArrayValue consumes one value in an array. It assumes that '[' or ',' +// have already been consumed. All whitespace and newlines are ignored. +func lexArrayValue(lx *lexer) stateFn { + r := lx.next() + switch { + case isWhitespace(r) || isNL(r): + return lexSkip(lx, lexArrayValue) + case r == '#': + lx.push(lexArrayValue) + return lexCommentStart + case r == ',': + return lx.errorf("unexpected comma") + case r == ']': + return lexArrayEnd + } + + lx.backup() + lx.push(lexArrayValueEnd) + return lexValue +} + +// lexArrayValueEnd consumes everything between the end of an array value and +// the next value (or the end of the array): it ignores whitespace and newlines +// and expects either a ',' or a ']'. +func lexArrayValueEnd(lx *lexer) stateFn { + switch r := lx.next(); { + case isWhitespace(r) || isNL(r): + return lexSkip(lx, lexArrayValueEnd) + case r == '#': + lx.push(lexArrayValueEnd) + return lexCommentStart + case r == ',': + lx.ignore() + return lexArrayValue // move on to the next value + case r == ']': + return lexArrayEnd + default: + return lx.errorf("expected a comma (',') or array terminator (']'), but got %s", runeOrEOF(r)) + } +} + +// lexArrayEnd finishes the lexing of an array. +// It assumes that a ']' has just been consumed. +func lexArrayEnd(lx *lexer) stateFn { + lx.ignore() + lx.emit(itemArrayEnd) + return lx.pop() +} + +// lexInlineTableValue consumes one key/value pair in an inline table. +// It assumes that '{' or ',' have already been consumed. Whitespace is ignored. +func lexInlineTableValue(lx *lexer) stateFn { + r := lx.next() + switch { + case isWhitespace(r): + return lexSkip(lx, lexInlineTableValue) + case isNL(r): + if lx.tomlNext { + return lexSkip(lx, lexInlineTableValue) + } + return lx.errorPrevLine(errLexInlineTableNL{}) + case r == '#': + lx.push(lexInlineTableValue) + return lexCommentStart + case r == ',': + return lx.errorf("unexpected comma") + case r == '}': + return lexInlineTableEnd + } + lx.backup() + lx.push(lexInlineTableValueEnd) + return lexKeyStart +} + +// lexInlineTableValueEnd consumes everything between the end of an inline table +// key/value pair and the next pair (or the end of the table): +// it ignores whitespace and expects either a ',' or a '}'. +func lexInlineTableValueEnd(lx *lexer) stateFn { + switch r := lx.next(); { + case isWhitespace(r): + return lexSkip(lx, lexInlineTableValueEnd) + case isNL(r): + if lx.tomlNext { + return lexSkip(lx, lexInlineTableValueEnd) + } + return lx.errorPrevLine(errLexInlineTableNL{}) + case r == '#': + lx.push(lexInlineTableValueEnd) + return lexCommentStart + case r == ',': + lx.ignore() + lx.skip(isWhitespace) + if lx.peek() == '}' { + if lx.tomlNext { + return lexInlineTableValueEnd + } + return lx.errorf("trailing comma not allowed in inline tables") + } + return lexInlineTableValue + case r == '}': + return lexInlineTableEnd + default: + return lx.errorf("expected a comma or an inline table terminator '}', but got %s instead", runeOrEOF(r)) + } +} + +func runeOrEOF(r rune) string { + if r == eof { + return "end of file" + } + return "'" + string(r) + "'" +} + +// lexInlineTableEnd finishes the lexing of an inline table. +// It assumes that a '}' has just been consumed. +func lexInlineTableEnd(lx *lexer) stateFn { + lx.ignore() + lx.emit(itemInlineTableEnd) + return lx.pop() +} + +// lexString consumes the inner contents of a string. It assumes that the +// beginning '"' has already been consumed and ignored. +func lexString(lx *lexer) stateFn { + r := lx.next() + switch { + case r == eof: + return lx.errorf(`unexpected EOF; expected '"'`) + case isNL(r): + return lx.errorPrevLine(errLexStringNL{}) + case r == '\\': + lx.push(lexString) + return lexStringEscape + case r == '"': + lx.backup() + if lx.esc { + lx.esc = false + lx.emit(itemStringEsc) + } else { + lx.emit(itemString) + } + lx.next() + lx.ignore() + return lx.pop() + } + return lexString +} + +// lexMultilineString consumes the inner contents of a string. It assumes that +// the beginning '"""' has already been consumed and ignored. +func lexMultilineString(lx *lexer) stateFn { + r := lx.next() + switch r { + default: + return lexMultilineString + case eof: + return lx.errorf(`unexpected EOF; expected '"""'`) + case '\\': + return lexMultilineStringEscape + case '"': + /// Found " → try to read two more "". + if lx.accept('"') { + if lx.accept('"') { + /// Peek ahead: the string can contain " and "", including at the + /// end: """str""""" + /// 6 or more at the end, however, is an error. + if lx.peek() == '"' { + /// Check if we already lexed 5 's; if so we have 6 now, and + /// that's just too many man! + /// + /// Second check is for the edge case: + /// + /// two quotes allowed. + /// vv + /// """lol \"""""" + /// ^^ ^^^---- closing three + /// escaped + /// + /// But ugly, but it works + if strings.HasSuffix(lx.current(), `"""""`) && !strings.HasSuffix(lx.current(), `\"""""`) { + return lx.errorf(`unexpected '""""""'`) + } + lx.backup() + lx.backup() + return lexMultilineString + } + + lx.backup() /// backup: don't include the """ in the item. + lx.backup() + lx.backup() + lx.esc = false + lx.emit(itemMultilineString) + lx.next() /// Read over ''' again and discard it. + lx.next() + lx.next() + lx.ignore() + return lx.pop() + } + lx.backup() + } + return lexMultilineString + } +} + +// lexRawString consumes a raw string. Nothing can be escaped in such a string. +// It assumes that the beginning "'" has already been consumed and ignored. +func lexRawString(lx *lexer) stateFn { + r := lx.next() + switch { + default: + return lexRawString + case r == eof: + return lx.errorf(`unexpected EOF; expected "'"`) + case isNL(r): + return lx.errorPrevLine(errLexStringNL{}) + case r == '\'': + lx.backup() + lx.emit(itemRawString) + lx.next() + lx.ignore() + return lx.pop() + } +} + +// lexMultilineRawString consumes a raw string. Nothing can be escaped in such a +// string. It assumes that the beginning triple-' has already been consumed and +// ignored. +func lexMultilineRawString(lx *lexer) stateFn { + r := lx.next() + switch r { + default: + return lexMultilineRawString + case eof: + return lx.errorf(`unexpected EOF; expected "'''"`) + case '\'': + /// Found ' → try to read two more ''. + if lx.accept('\'') { + if lx.accept('\'') { + /// Peek ahead: the string can contain ' and '', including at the + /// end: '''str''''' + /// 6 or more at the end, however, is an error. + if lx.peek() == '\'' { + /// Check if we already lexed 5 's; if so we have 6 now, and + /// that's just too many man! + if strings.HasSuffix(lx.current(), "'''''") { + return lx.errorf(`unexpected "''''''"`) + } + lx.backup() + lx.backup() + return lexMultilineRawString + } + + lx.backup() /// backup: don't include the ''' in the item. + lx.backup() + lx.backup() + lx.emit(itemRawMultilineString) + lx.next() /// Read over ''' again and discard it. + lx.next() + lx.next() + lx.ignore() + return lx.pop() + } + lx.backup() + } + return lexMultilineRawString + } +} + +// lexMultilineStringEscape consumes an escaped character. It assumes that the +// preceding '\\' has already been consumed. +func lexMultilineStringEscape(lx *lexer) stateFn { + if isNL(lx.next()) { /// \ escaping newline. + return lexMultilineString + } + lx.backup() + lx.push(lexMultilineString) + return lexStringEscape(lx) +} + +func lexStringEscape(lx *lexer) stateFn { + lx.esc = true + r := lx.next() + switch r { + case 'e': + if !lx.tomlNext { + return lx.error(errLexEscape{r}) + } + fallthrough + case 'b': + fallthrough + case 't': + fallthrough + case 'n': + fallthrough + case 'f': + fallthrough + case 'r': + fallthrough + case '"': + fallthrough + case ' ', '\t': + // Inside """ .. """ strings you can use \ to escape newlines, and any + // amount of whitespace can be between the \ and \n. + fallthrough + case '\\': + return lx.pop() + case 'x': + if !lx.tomlNext { + return lx.error(errLexEscape{r}) + } + return lexHexEscape + case 'u': + return lexShortUnicodeEscape + case 'U': + return lexLongUnicodeEscape + } + return lx.error(errLexEscape{r}) +} + +func lexHexEscape(lx *lexer) stateFn { + var r rune + for i := 0; i < 2; i++ { + r = lx.next() + if !isHex(r) { + return lx.errorf(`expected two hexadecimal digits after '\x', but got %q instead`, lx.current()) + } + } + return lx.pop() +} + +func lexShortUnicodeEscape(lx *lexer) stateFn { + var r rune + for i := 0; i < 4; i++ { + r = lx.next() + if !isHex(r) { + return lx.errorf(`expected four hexadecimal digits after '\u', but got %q instead`, lx.current()) + } + } + return lx.pop() +} + +func lexLongUnicodeEscape(lx *lexer) stateFn { + var r rune + for i := 0; i < 8; i++ { + r = lx.next() + if !isHex(r) { + return lx.errorf(`expected eight hexadecimal digits after '\U', but got %q instead`, lx.current()) + } + } + return lx.pop() +} + +// lexNumberOrDateStart processes the first character of a value which begins +// with a digit. It exists to catch values starting with '0', so that +// lexBaseNumberOrDate can differentiate base prefixed integers from other +// types. +func lexNumberOrDateStart(lx *lexer) stateFn { + r := lx.next() + switch r { + case '0': + return lexBaseNumberOrDate + } + + if !isDigit(r) { + // The only way to reach this state is if the value starts + // with a digit, so specifically treat anything else as an + // error. + return lx.errorf("expected a digit but got %q", r) + } + + return lexNumberOrDate +} + +// lexNumberOrDate consumes either an integer, float or datetime. +func lexNumberOrDate(lx *lexer) stateFn { + r := lx.next() + if isDigit(r) { + return lexNumberOrDate + } + switch r { + case '-', ':': + return lexDatetime + case '_': + return lexDecimalNumber + case '.', 'e', 'E': + return lexFloat + } + + lx.backup() + lx.emit(itemInteger) + return lx.pop() +} + +// lexDatetime consumes a Datetime, to a first approximation. +// The parser validates that it matches one of the accepted formats. +func lexDatetime(lx *lexer) stateFn { + r := lx.next() + if isDigit(r) { + return lexDatetime + } + switch r { + case '-', ':', 'T', 't', ' ', '.', 'Z', 'z', '+': + return lexDatetime + } + + lx.backup() + lx.emitTrim(itemDatetime) + return lx.pop() +} + +// lexHexInteger consumes a hexadecimal integer after seeing the '0x' prefix. +func lexHexInteger(lx *lexer) stateFn { + r := lx.next() + if isHex(r) { + return lexHexInteger + } + switch r { + case '_': + return lexHexInteger + } + + lx.backup() + lx.emit(itemInteger) + return lx.pop() +} + +// lexOctalInteger consumes an octal integer after seeing the '0o' prefix. +func lexOctalInteger(lx *lexer) stateFn { + r := lx.next() + if isOctal(r) { + return lexOctalInteger + } + switch r { + case '_': + return lexOctalInteger + } + + lx.backup() + lx.emit(itemInteger) + return lx.pop() +} + +// lexBinaryInteger consumes a binary integer after seeing the '0b' prefix. +func lexBinaryInteger(lx *lexer) stateFn { + r := lx.next() + if isBinary(r) { + return lexBinaryInteger + } + switch r { + case '_': + return lexBinaryInteger + } + + lx.backup() + lx.emit(itemInteger) + return lx.pop() +} + +// lexDecimalNumber consumes a decimal float or integer. +func lexDecimalNumber(lx *lexer) stateFn { + r := lx.next() + if isDigit(r) { + return lexDecimalNumber + } + switch r { + case '.', 'e', 'E': + return lexFloat + case '_': + return lexDecimalNumber + } + + lx.backup() + lx.emit(itemInteger) + return lx.pop() +} + +// lexDecimalNumber consumes the first digit of a number beginning with a sign. +// It assumes the sign has already been consumed. Values which start with a sign +// are only allowed to be decimal integers or floats. +// +// The special "nan" and "inf" values are also recognized. +func lexDecimalNumberStart(lx *lexer) stateFn { + r := lx.next() + + // Special error cases to give users better error messages + switch r { + case 'i': + if !lx.accept('n') || !lx.accept('f') { + return lx.errorf("invalid float: '%s'", lx.current()) + } + lx.emit(itemFloat) + return lx.pop() + case 'n': + if !lx.accept('a') || !lx.accept('n') { + return lx.errorf("invalid float: '%s'", lx.current()) + } + lx.emit(itemFloat) + return lx.pop() + case '0': + p := lx.peek() + switch p { + case 'b', 'o', 'x': + return lx.errorf("cannot use sign with non-decimal numbers: '%s%c'", lx.current(), p) + } + case '.': + return lx.errorf("floats must start with a digit, not '.'") + } + + if isDigit(r) { + return lexDecimalNumber + } + + return lx.errorf("expected a digit but got %q", r) +} + +// lexBaseNumberOrDate differentiates between the possible values which +// start with '0'. It assumes that before reaching this state, the initial '0' +// has been consumed. +func lexBaseNumberOrDate(lx *lexer) stateFn { + r := lx.next() + // Note: All datetimes start with at least two digits, so we don't + // handle date characters (':', '-', etc.) here. + if isDigit(r) { + return lexNumberOrDate + } + switch r { + case '_': + // Can only be decimal, because there can't be an underscore + // between the '0' and the base designator, and dates can't + // contain underscores. + return lexDecimalNumber + case '.', 'e', 'E': + return lexFloat + case 'b': + r = lx.peek() + if !isBinary(r) { + lx.errorf("not a binary number: '%s%c'", lx.current(), r) + } + return lexBinaryInteger + case 'o': + r = lx.peek() + if !isOctal(r) { + lx.errorf("not an octal number: '%s%c'", lx.current(), r) + } + return lexOctalInteger + case 'x': + r = lx.peek() + if !isHex(r) { + lx.errorf("not a hexidecimal number: '%s%c'", lx.current(), r) + } + return lexHexInteger + } + + lx.backup() + lx.emit(itemInteger) + return lx.pop() +} + +// lexFloat consumes the elements of a float. It allows any sequence of +// float-like characters, so floats emitted by the lexer are only a first +// approximation and must be validated by the parser. +func lexFloat(lx *lexer) stateFn { + r := lx.next() + if isDigit(r) { + return lexFloat + } + switch r { + case '_', '.', '-', '+', 'e', 'E': + return lexFloat + } + + lx.backup() + lx.emit(itemFloat) + return lx.pop() +} + +// lexBool consumes a bool string: 'true' or 'false. +func lexBool(lx *lexer) stateFn { + var rs []rune + for { + r := lx.next() + if !unicode.IsLetter(r) { + lx.backup() + break + } + rs = append(rs, r) + } + s := string(rs) + switch s { + case "true", "false": + lx.emit(itemBool) + return lx.pop() + } + return lx.errorf("expected value but found %q instead", s) +} + +// lexCommentStart begins the lexing of a comment. It will emit +// itemCommentStart and consume no characters, passing control to lexComment. +func lexCommentStart(lx *lexer) stateFn { + lx.ignore() + lx.emit(itemCommentStart) + return lexComment +} + +// lexComment lexes an entire comment. It assumes that '#' has been consumed. +// It will consume *up to* the first newline character, and pass control +// back to the last state on the stack. +func lexComment(lx *lexer) stateFn { + switch r := lx.next(); { + case isNL(r) || r == eof: + lx.backup() + lx.emit(itemText) + return lx.pop() + default: + return lexComment + } +} + +// lexSkip ignores all slurped input and moves on to the next state. +func lexSkip(lx *lexer, nextState stateFn) stateFn { + lx.ignore() + return nextState +} + +func (s stateFn) String() string { + name := runtime.FuncForPC(reflect.ValueOf(s).Pointer()).Name() + if i := strings.LastIndexByte(name, '.'); i > -1 { + name = name[i+1:] + } + if s == nil { + name = "" + } + return name + "()" +} + +func (itype itemType) String() string { + switch itype { + case itemError: + return "Error" + case itemNIL: + return "NIL" + case itemEOF: + return "EOF" + case itemText: + return "Text" + case itemString, itemStringEsc, itemRawString, itemMultilineString, itemRawMultilineString: + return "String" + case itemBool: + return "Bool" + case itemInteger: + return "Integer" + case itemFloat: + return "Float" + case itemDatetime: + return "DateTime" + case itemTableStart: + return "TableStart" + case itemTableEnd: + return "TableEnd" + case itemKeyStart: + return "KeyStart" + case itemKeyEnd: + return "KeyEnd" + case itemArray: + return "Array" + case itemArrayEnd: + return "ArrayEnd" + case itemCommentStart: + return "CommentStart" + case itemInlineTableStart: + return "InlineTableStart" + case itemInlineTableEnd: + return "InlineTableEnd" + } + panic(fmt.Sprintf("BUG: Unknown type '%d'.", int(itype))) +} + +func (item item) String() string { + return fmt.Sprintf("(%s, %s)", item.typ, item.val) +} + +func isWhitespace(r rune) bool { return r == '\t' || r == ' ' } +func isNL(r rune) bool { return r == '\n' || r == '\r' } +func isControl(r rune) bool { // Control characters except \t, \r, \n + switch r { + case '\t', '\r', '\n': + return false + default: + return (r >= 0x00 && r <= 0x1f) || r == 0x7f + } +} +func isDigit(r rune) bool { return r >= '0' && r <= '9' } +func isBinary(r rune) bool { return r == '0' || r == '1' } +func isOctal(r rune) bool { return r >= '0' && r <= '7' } +func isHex(r rune) bool { return (r >= '0' && r <= '9') || (r|0x20 >= 'a' && r|0x20 <= 'f') } +func isBareKeyChar(r rune, tomlNext bool) bool { + if tomlNext { + return (r >= 'A' && r <= 'Z') || + (r >= 'a' && r <= 'z') || + (r >= '0' && r <= '9') || + r == '_' || r == '-' || + r == 0xb2 || r == 0xb3 || r == 0xb9 || (r >= 0xbc && r <= 0xbe) || + (r >= 0xc0 && r <= 0xd6) || (r >= 0xd8 && r <= 0xf6) || (r >= 0xf8 && r <= 0x037d) || + (r >= 0x037f && r <= 0x1fff) || + (r >= 0x200c && r <= 0x200d) || (r >= 0x203f && r <= 0x2040) || + (r >= 0x2070 && r <= 0x218f) || (r >= 0x2460 && r <= 0x24ff) || + (r >= 0x2c00 && r <= 0x2fef) || (r >= 0x3001 && r <= 0xd7ff) || + (r >= 0xf900 && r <= 0xfdcf) || (r >= 0xfdf0 && r <= 0xfffd) || + (r >= 0x10000 && r <= 0xeffff) + } + + return (r >= 'A' && r <= 'Z') || + (r >= 'a' && r <= 'z') || + (r >= '0' && r <= '9') || + r == '_' || r == '-' +} diff --git a/vendor/github.com/BurntSushi/toml/meta.go b/vendor/github.com/BurntSushi/toml/meta.go new file mode 100644 index 00000000..e6145373 --- /dev/null +++ b/vendor/github.com/BurntSushi/toml/meta.go @@ -0,0 +1,148 @@ +package toml + +import ( + "strings" +) + +// MetaData allows access to meta information about TOML data that's not +// accessible otherwise. +// +// It allows checking if a key is defined in the TOML data, whether any keys +// were undecoded, and the TOML type of a key. +type MetaData struct { + context Key // Used only during decoding. + + keyInfo map[string]keyInfo + mapping map[string]any + keys []Key + decoded map[string]struct{} + data []byte // Input file; for errors. +} + +// IsDefined reports if the key exists in the TOML data. +// +// The key should be specified hierarchically, for example to access the TOML +// key "a.b.c" you would use IsDefined("a", "b", "c"). Keys are case sensitive. +// +// Returns false for an empty key. +func (md *MetaData) IsDefined(key ...string) bool { + if len(key) == 0 { + return false + } + + var ( + hash map[string]any + ok bool + hashOrVal any = md.mapping + ) + for _, k := range key { + if hash, ok = hashOrVal.(map[string]any); !ok { + return false + } + if hashOrVal, ok = hash[k]; !ok { + return false + } + } + return true +} + +// Type returns a string representation of the type of the key specified. +// +// Type will return the empty string if given an empty key or a key that does +// not exist. Keys are case sensitive. +func (md *MetaData) Type(key ...string) string { + if ki, ok := md.keyInfo[Key(key).String()]; ok { + return ki.tomlType.typeString() + } + return "" +} + +// Keys returns a slice of every key in the TOML data, including key groups. +// +// Each key is itself a slice, where the first element is the top of the +// hierarchy and the last is the most specific. The list will have the same +// order as the keys appeared in the TOML data. +// +// All keys returned are non-empty. +func (md *MetaData) Keys() []Key { + return md.keys +} + +// Undecoded returns all keys that have not been decoded in the order in which +// they appear in the original TOML document. +// +// This includes keys that haven't been decoded because of a [Primitive] value. +// Once the Primitive value is decoded, the keys will be considered decoded. +// +// Also note that decoding into an empty interface will result in no decoding, +// and so no keys will be considered decoded. +// +// In this sense, the Undecoded keys correspond to keys in the TOML document +// that do not have a concrete type in your representation. +func (md *MetaData) Undecoded() []Key { + undecoded := make([]Key, 0, len(md.keys)) + for _, key := range md.keys { + if _, ok := md.decoded[key.String()]; !ok { + undecoded = append(undecoded, key) + } + } + return undecoded +} + +// Key represents any TOML key, including key groups. Use [MetaData.Keys] to get +// values of this type. +type Key []string + +func (k Key) String() string { + // This is called quite often, so it's a bit funky to make it faster. + var b strings.Builder + b.Grow(len(k) * 25) +outer: + for i, kk := range k { + if i > 0 { + b.WriteByte('.') + } + if kk == "" { + b.WriteString(`""`) + } else { + for _, r := range kk { + // "Inline" isBareKeyChar + if !((r >= 'A' && r <= 'Z') || (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '_' || r == '-') { + b.WriteByte('"') + b.WriteString(dblQuotedReplacer.Replace(kk)) + b.WriteByte('"') + continue outer + } + } + b.WriteString(kk) + } + } + return b.String() +} + +func (k Key) maybeQuoted(i int) string { + if k[i] == "" { + return `""` + } + for _, r := range k[i] { + if (r >= 'A' && r <= 'Z') || (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '_' || r == '-' { + continue + } + return `"` + dblQuotedReplacer.Replace(k[i]) + `"` + } + return k[i] +} + +// Like append(), but only increase the cap by 1. +func (k Key) add(piece string) Key { + if cap(k) > len(k) { + return append(k, piece) + } + newKey := make(Key, len(k)+1) + copy(newKey, k) + newKey[len(k)] = piece + return newKey +} + +func (k Key) parent() Key { return k[:len(k)-1] } // all except the last piece. +func (k Key) last() string { return k[len(k)-1] } // last piece of this key. diff --git a/vendor/github.com/BurntSushi/toml/parse.go b/vendor/github.com/BurntSushi/toml/parse.go new file mode 100644 index 00000000..11ac3108 --- /dev/null +++ b/vendor/github.com/BurntSushi/toml/parse.go @@ -0,0 +1,844 @@ +package toml + +import ( + "fmt" + "math" + "os" + "strconv" + "strings" + "time" + "unicode/utf8" + + "github.com/BurntSushi/toml/internal" +) + +type parser struct { + lx *lexer + context Key // Full key for the current hash in scope. + currentKey string // Base key name for everything except hashes. + pos Position // Current position in the TOML file. + tomlNext bool + + ordered []Key // List of keys in the order that they appear in the TOML data. + + keyInfo map[string]keyInfo // Map keyname → info about the TOML key. + mapping map[string]any // Map keyname → key value. + implicits map[string]struct{} // Record implicit keys (e.g. "key.group.names"). +} + +type keyInfo struct { + pos Position + tomlType tomlType +} + +func parse(data string) (p *parser, err error) { + _, tomlNext := os.LookupEnv("BURNTSUSHI_TOML_110") + + defer func() { + if r := recover(); r != nil { + if pErr, ok := r.(ParseError); ok { + pErr.input = data + err = pErr + return + } + panic(r) + } + }() + + // Read over BOM; do this here as the lexer calls utf8.DecodeRuneInString() + // which mangles stuff. UTF-16 BOM isn't strictly valid, but some tools add + // it anyway. + if strings.HasPrefix(data, "\xff\xfe") || strings.HasPrefix(data, "\xfe\xff") { // UTF-16 + data = data[2:] + //lint:ignore S1017 https://github.com/dominikh/go-tools/issues/1447 + } else if strings.HasPrefix(data, "\xef\xbb\xbf") { // UTF-8 + data = data[3:] + } + + // Examine first few bytes for NULL bytes; this probably means it's a UTF-16 + // file (second byte in surrogate pair being NULL). Again, do this here to + // avoid having to deal with UTF-8/16 stuff in the lexer. + ex := 6 + if len(data) < 6 { + ex = len(data) + } + if i := strings.IndexRune(data[:ex], 0); i > -1 { + return nil, ParseError{ + Message: "files cannot contain NULL bytes; probably using UTF-16; TOML files must be UTF-8", + Position: Position{Line: 1, Start: i, Len: 1}, + Line: 1, + input: data, + } + } + + p = &parser{ + keyInfo: make(map[string]keyInfo), + mapping: make(map[string]any), + lx: lex(data, tomlNext), + ordered: make([]Key, 0), + implicits: make(map[string]struct{}), + tomlNext: tomlNext, + } + for { + item := p.next() + if item.typ == itemEOF { + break + } + p.topLevel(item) + } + + return p, nil +} + +func (p *parser) panicErr(it item, err error) { + panic(ParseError{ + err: err, + Position: it.pos, + Line: it.pos.Len, + LastKey: p.current(), + }) +} + +func (p *parser) panicItemf(it item, format string, v ...any) { + panic(ParseError{ + Message: fmt.Sprintf(format, v...), + Position: it.pos, + Line: it.pos.Len, + LastKey: p.current(), + }) +} + +func (p *parser) panicf(format string, v ...any) { + panic(ParseError{ + Message: fmt.Sprintf(format, v...), + Position: p.pos, + Line: p.pos.Line, + LastKey: p.current(), + }) +} + +func (p *parser) next() item { + it := p.lx.nextItem() + //fmt.Printf("ITEM %-18s line %-3d │ %q\n", it.typ, it.pos.Line, it.val) + if it.typ == itemError { + if it.err != nil { + panic(ParseError{ + Position: it.pos, + Line: it.pos.Line, + LastKey: p.current(), + err: it.err, + }) + } + + p.panicItemf(it, "%s", it.val) + } + return it +} + +func (p *parser) nextPos() item { + it := p.next() + p.pos = it.pos + return it +} + +func (p *parser) bug(format string, v ...any) { + panic(fmt.Sprintf("BUG: "+format+"\n\n", v...)) +} + +func (p *parser) expect(typ itemType) item { + it := p.next() + p.assertEqual(typ, it.typ) + return it +} + +func (p *parser) assertEqual(expected, got itemType) { + if expected != got { + p.bug("Expected '%s' but got '%s'.", expected, got) + } +} + +func (p *parser) topLevel(item item) { + switch item.typ { + case itemCommentStart: // # .. + p.expect(itemText) + case itemTableStart: // [ .. ] + name := p.nextPos() + + var key Key + for ; name.typ != itemTableEnd && name.typ != itemEOF; name = p.next() { + key = append(key, p.keyString(name)) + } + p.assertEqual(itemTableEnd, name.typ) + + p.addContext(key, false) + p.setType("", tomlHash, item.pos) + p.ordered = append(p.ordered, key) + case itemArrayTableStart: // [[ .. ]] + name := p.nextPos() + + var key Key + for ; name.typ != itemArrayTableEnd && name.typ != itemEOF; name = p.next() { + key = append(key, p.keyString(name)) + } + p.assertEqual(itemArrayTableEnd, name.typ) + + p.addContext(key, true) + p.setType("", tomlArrayHash, item.pos) + p.ordered = append(p.ordered, key) + case itemKeyStart: // key = .. + outerContext := p.context + /// Read all the key parts (e.g. 'a' and 'b' in 'a.b') + k := p.nextPos() + var key Key + for ; k.typ != itemKeyEnd && k.typ != itemEOF; k = p.next() { + key = append(key, p.keyString(k)) + } + p.assertEqual(itemKeyEnd, k.typ) + + /// The current key is the last part. + p.currentKey = key.last() + + /// All the other parts (if any) are the context; need to set each part + /// as implicit. + context := key.parent() + for i := range context { + p.addImplicitContext(append(p.context, context[i:i+1]...)) + } + p.ordered = append(p.ordered, p.context.add(p.currentKey)) + + /// Set value. + vItem := p.next() + val, typ := p.value(vItem, false) + p.setValue(p.currentKey, val) + p.setType(p.currentKey, typ, vItem.pos) + + /// Remove the context we added (preserving any context from [tbl] lines). + p.context = outerContext + p.currentKey = "" + default: + p.bug("Unexpected type at top level: %s", item.typ) + } +} + +// Gets a string for a key (or part of a key in a table name). +func (p *parser) keyString(it item) string { + switch it.typ { + case itemText: + return it.val + case itemString, itemStringEsc, itemMultilineString, + itemRawString, itemRawMultilineString: + s, _ := p.value(it, false) + return s.(string) + default: + p.bug("Unexpected key type: %s", it.typ) + } + panic("unreachable") +} + +var datetimeRepl = strings.NewReplacer( + "z", "Z", + "t", "T", + " ", "T") + +// value translates an expected value from the lexer into a Go value wrapped +// as an empty interface. +func (p *parser) value(it item, parentIsArray bool) (any, tomlType) { + switch it.typ { + case itemString: + return it.val, p.typeOfPrimitive(it) + case itemStringEsc: + return p.replaceEscapes(it, it.val), p.typeOfPrimitive(it) + case itemMultilineString: + return p.replaceEscapes(it, p.stripEscapedNewlines(stripFirstNewline(it.val))), p.typeOfPrimitive(it) + case itemRawString: + return it.val, p.typeOfPrimitive(it) + case itemRawMultilineString: + return stripFirstNewline(it.val), p.typeOfPrimitive(it) + case itemInteger: + return p.valueInteger(it) + case itemFloat: + return p.valueFloat(it) + case itemBool: + switch it.val { + case "true": + return true, p.typeOfPrimitive(it) + case "false": + return false, p.typeOfPrimitive(it) + default: + p.bug("Expected boolean value, but got '%s'.", it.val) + } + case itemDatetime: + return p.valueDatetime(it) + case itemArray: + return p.valueArray(it) + case itemInlineTableStart: + return p.valueInlineTable(it, parentIsArray) + default: + p.bug("Unexpected value type: %s", it.typ) + } + panic("unreachable") +} + +func (p *parser) valueInteger(it item) (any, tomlType) { + if !numUnderscoresOK(it.val) { + p.panicItemf(it, "Invalid integer %q: underscores must be surrounded by digits", it.val) + } + if numHasLeadingZero(it.val) { + p.panicItemf(it, "Invalid integer %q: cannot have leading zeroes", it.val) + } + + num, err := strconv.ParseInt(it.val, 0, 64) + if err != nil { + // Distinguish integer values. Normally, it'd be a bug if the lexer + // provides an invalid integer, but it's possible that the number is + // out of range of valid values (which the lexer cannot determine). + // So mark the former as a bug but the latter as a legitimate user + // error. + if e, ok := err.(*strconv.NumError); ok && e.Err == strconv.ErrRange { + p.panicErr(it, errParseRange{i: it.val, size: "int64"}) + } else { + p.bug("Expected integer value, but got '%s'.", it.val) + } + } + return num, p.typeOfPrimitive(it) +} + +func (p *parser) valueFloat(it item) (any, tomlType) { + parts := strings.FieldsFunc(it.val, func(r rune) bool { + switch r { + case '.', 'e', 'E': + return true + } + return false + }) + for _, part := range parts { + if !numUnderscoresOK(part) { + p.panicItemf(it, "Invalid float %q: underscores must be surrounded by digits", it.val) + } + } + if len(parts) > 0 && numHasLeadingZero(parts[0]) { + p.panicItemf(it, "Invalid float %q: cannot have leading zeroes", it.val) + } + if !numPeriodsOK(it.val) { + // As a special case, numbers like '123.' or '1.e2', + // which are valid as far as Go/strconv are concerned, + // must be rejected because TOML says that a fractional + // part consists of '.' followed by 1+ digits. + p.panicItemf(it, "Invalid float %q: '.' must be followed by one or more digits", it.val) + } + val := strings.Replace(it.val, "_", "", -1) + signbit := false + if val == "+nan" || val == "-nan" { + signbit = val == "-nan" + val = "nan" + } + num, err := strconv.ParseFloat(val, 64) + if err != nil { + if e, ok := err.(*strconv.NumError); ok && e.Err == strconv.ErrRange { + p.panicErr(it, errParseRange{i: it.val, size: "float64"}) + } else { + p.panicItemf(it, "Invalid float value: %q", it.val) + } + } + if signbit { + num = math.Copysign(num, -1) + } + return num, p.typeOfPrimitive(it) +} + +var dtTypes = []struct { + fmt string + zone *time.Location + next bool +}{ + {time.RFC3339Nano, time.Local, false}, + {"2006-01-02T15:04:05.999999999", internal.LocalDatetime, false}, + {"2006-01-02", internal.LocalDate, false}, + {"15:04:05.999999999", internal.LocalTime, false}, + + // tomlNext + {"2006-01-02T15:04Z07:00", time.Local, true}, + {"2006-01-02T15:04", internal.LocalDatetime, true}, + {"15:04", internal.LocalTime, true}, +} + +func (p *parser) valueDatetime(it item) (any, tomlType) { + it.val = datetimeRepl.Replace(it.val) + var ( + t time.Time + ok bool + err error + ) + for _, dt := range dtTypes { + if dt.next && !p.tomlNext { + continue + } + t, err = time.ParseInLocation(dt.fmt, it.val, dt.zone) + if err == nil { + if missingLeadingZero(it.val, dt.fmt) { + p.panicErr(it, errParseDate{it.val}) + } + ok = true + break + } + } + if !ok { + p.panicErr(it, errParseDate{it.val}) + } + return t, p.typeOfPrimitive(it) +} + +// Go's time.Parse() will accept numbers without a leading zero; there isn't any +// way to require it. https://github.com/golang/go/issues/29911 +// +// Depend on the fact that the separators (- and :) should always be at the same +// location. +func missingLeadingZero(d, l string) bool { + for i, c := range []byte(l) { + if c == '.' || c == 'Z' { + return false + } + if (c < '0' || c > '9') && d[i] != c { + return true + } + } + return false +} + +func (p *parser) valueArray(it item) (any, tomlType) { + p.setType(p.currentKey, tomlArray, it.pos) + + var ( + // Initialize to a non-nil slice to make it consistent with how S = [] + // decodes into a non-nil slice inside something like struct { S + // []string }. See #338 + array = make([]any, 0, 2) + ) + for it = p.next(); it.typ != itemArrayEnd; it = p.next() { + if it.typ == itemCommentStart { + p.expect(itemText) + continue + } + + val, typ := p.value(it, true) + array = append(array, val) + + // XXX: type isn't used here, we need it to record the accurate type + // information. + // + // Not entirely sure how to best store this; could use "key[0]", + // "key[1]" notation, or maybe store it on the Array type? + _ = typ + } + return array, tomlArray +} + +func (p *parser) valueInlineTable(it item, parentIsArray bool) (any, tomlType) { + var ( + topHash = make(map[string]any) + outerContext = p.context + outerKey = p.currentKey + ) + + p.context = append(p.context, p.currentKey) + prevContext := p.context + p.currentKey = "" + + p.addImplicit(p.context) + p.addContext(p.context, parentIsArray) + + /// Loop over all table key/value pairs. + for it := p.next(); it.typ != itemInlineTableEnd; it = p.next() { + if it.typ == itemCommentStart { + p.expect(itemText) + continue + } + + /// Read all key parts. + k := p.nextPos() + var key Key + for ; k.typ != itemKeyEnd && k.typ != itemEOF; k = p.next() { + key = append(key, p.keyString(k)) + } + p.assertEqual(itemKeyEnd, k.typ) + + /// The current key is the last part. + p.currentKey = key.last() + + /// All the other parts (if any) are the context; need to set each part + /// as implicit. + context := key.parent() + for i := range context { + p.addImplicitContext(append(p.context, context[i:i+1]...)) + } + p.ordered = append(p.ordered, p.context.add(p.currentKey)) + + /// Set the value. + val, typ := p.value(p.next(), false) + p.setValue(p.currentKey, val) + p.setType(p.currentKey, typ, it.pos) + + hash := topHash + for _, c := range context { + h, ok := hash[c] + if !ok { + h = make(map[string]any) + hash[c] = h + } + hash, ok = h.(map[string]any) + if !ok { + p.panicf("%q is not a table", p.context) + } + } + hash[p.currentKey] = val + + /// Restore context. + p.context = prevContext + } + p.context = outerContext + p.currentKey = outerKey + return topHash, tomlHash +} + +// numHasLeadingZero checks if this number has leading zeroes, allowing for '0', +// +/- signs, and base prefixes. +func numHasLeadingZero(s string) bool { + if len(s) > 1 && s[0] == '0' && !(s[1] == 'b' || s[1] == 'o' || s[1] == 'x') { // Allow 0b, 0o, 0x + return true + } + if len(s) > 2 && (s[0] == '-' || s[0] == '+') && s[1] == '0' { + return true + } + return false +} + +// numUnderscoresOK checks whether each underscore in s is surrounded by +// characters that are not underscores. +func numUnderscoresOK(s string) bool { + switch s { + case "nan", "+nan", "-nan", "inf", "-inf", "+inf": + return true + } + accept := false + for _, r := range s { + if r == '_' { + if !accept { + return false + } + } + + // isHexis a superset of all the permissable characters surrounding an + // underscore. + accept = isHex(r) + } + return accept +} + +// numPeriodsOK checks whether every period in s is followed by a digit. +func numPeriodsOK(s string) bool { + period := false + for _, r := range s { + if period && !isDigit(r) { + return false + } + period = r == '.' + } + return !period +} + +// Set the current context of the parser, where the context is either a hash or +// an array of hashes, depending on the value of the `array` parameter. +// +// Establishing the context also makes sure that the key isn't a duplicate, and +// will create implicit hashes automatically. +func (p *parser) addContext(key Key, array bool) { + /// Always start at the top level and drill down for our context. + hashContext := p.mapping + keyContext := make(Key, 0, len(key)-1) + + /// We only need implicit hashes for the parents. + for _, k := range key.parent() { + _, ok := hashContext[k] + keyContext = append(keyContext, k) + + // No key? Make an implicit hash and move on. + if !ok { + p.addImplicit(keyContext) + hashContext[k] = make(map[string]any) + } + + // If the hash context is actually an array of tables, then set + // the hash context to the last element in that array. + // + // Otherwise, it better be a table, since this MUST be a key group (by + // virtue of it not being the last element in a key). + switch t := hashContext[k].(type) { + case []map[string]any: + hashContext = t[len(t)-1] + case map[string]any: + hashContext = t + default: + p.panicf("Key '%s' was already created as a hash.", keyContext) + } + } + + p.context = keyContext + if array { + // If this is the first element for this array, then allocate a new + // list of tables for it. + k := key.last() + if _, ok := hashContext[k]; !ok { + hashContext[k] = make([]map[string]any, 0, 4) + } + + // Add a new table. But make sure the key hasn't already been used + // for something else. + if hash, ok := hashContext[k].([]map[string]any); ok { + hashContext[k] = append(hash, make(map[string]any)) + } else { + p.panicf("Key '%s' was already created and cannot be used as an array.", key) + } + } else { + p.setValue(key.last(), make(map[string]any)) + } + p.context = append(p.context, key.last()) +} + +// setValue sets the given key to the given value in the current context. +// It will make sure that the key hasn't already been defined, account for +// implicit key groups. +func (p *parser) setValue(key string, value any) { + var ( + tmpHash any + ok bool + hash = p.mapping + keyContext = make(Key, 0, len(p.context)+1) + ) + for _, k := range p.context { + keyContext = append(keyContext, k) + if tmpHash, ok = hash[k]; !ok { + p.bug("Context for key '%s' has not been established.", keyContext) + } + switch t := tmpHash.(type) { + case []map[string]any: + // The context is a table of hashes. Pick the most recent table + // defined as the current hash. + hash = t[len(t)-1] + case map[string]any: + hash = t + default: + p.panicf("Key '%s' has already been defined.", keyContext) + } + } + keyContext = append(keyContext, key) + + if _, ok := hash[key]; ok { + // Normally redefining keys isn't allowed, but the key could have been + // defined implicitly and it's allowed to be redefined concretely. (See + // the `valid/implicit-and-explicit-after.toml` in toml-test) + // + // But we have to make sure to stop marking it as an implicit. (So that + // another redefinition provokes an error.) + // + // Note that since it has already been defined (as a hash), we don't + // want to overwrite it. So our business is done. + if p.isArray(keyContext) { + p.removeImplicit(keyContext) + hash[key] = value + return + } + if p.isImplicit(keyContext) { + p.removeImplicit(keyContext) + return + } + // Otherwise, we have a concrete key trying to override a previous key, + // which is *always* wrong. + p.panicf("Key '%s' has already been defined.", keyContext) + } + + hash[key] = value +} + +// setType sets the type of a particular value at a given key. It should be +// called immediately AFTER setValue. +// +// Note that if `key` is empty, then the type given will be applied to the +// current context (which is either a table or an array of tables). +func (p *parser) setType(key string, typ tomlType, pos Position) { + keyContext := make(Key, 0, len(p.context)+1) + keyContext = append(keyContext, p.context...) + if len(key) > 0 { // allow type setting for hashes + keyContext = append(keyContext, key) + } + // Special case to make empty keys ("" = 1) work. + // Without it it will set "" rather than `""`. + // TODO: why is this needed? And why is this only needed here? + if len(keyContext) == 0 { + keyContext = Key{""} + } + p.keyInfo[keyContext.String()] = keyInfo{tomlType: typ, pos: pos} +} + +// Implicit keys need to be created when tables are implied in "a.b.c.d = 1" and +// "[a.b.c]" (the "a", "b", and "c" hashes are never created explicitly). +func (p *parser) addImplicit(key Key) { p.implicits[key.String()] = struct{}{} } +func (p *parser) removeImplicit(key Key) { delete(p.implicits, key.String()) } +func (p *parser) isImplicit(key Key) bool { _, ok := p.implicits[key.String()]; return ok } +func (p *parser) isArray(key Key) bool { return p.keyInfo[key.String()].tomlType == tomlArray } +func (p *parser) addImplicitContext(key Key) { p.addImplicit(key); p.addContext(key, false) } + +// current returns the full key name of the current context. +func (p *parser) current() string { + if len(p.currentKey) == 0 { + return p.context.String() + } + if len(p.context) == 0 { + return p.currentKey + } + return fmt.Sprintf("%s.%s", p.context, p.currentKey) +} + +func stripFirstNewline(s string) string { + if len(s) > 0 && s[0] == '\n' { + return s[1:] + } + if len(s) > 1 && s[0] == '\r' && s[1] == '\n' { + return s[2:] + } + return s +} + +// stripEscapedNewlines removes whitespace after line-ending backslashes in +// multiline strings. +// +// A line-ending backslash is an unescaped \ followed only by whitespace until +// the next newline. After a line-ending backslash, all whitespace is removed +// until the next non-whitespace character. +func (p *parser) stripEscapedNewlines(s string) string { + var ( + b strings.Builder + i int + ) + b.Grow(len(s)) + for { + ix := strings.Index(s[i:], `\`) + if ix < 0 { + b.WriteString(s) + return b.String() + } + i += ix + + if len(s) > i+1 && s[i+1] == '\\' { + // Escaped backslash. + i += 2 + continue + } + // Scan until the next non-whitespace. + j := i + 1 + whitespaceLoop: + for ; j < len(s); j++ { + switch s[j] { + case ' ', '\t', '\r', '\n': + default: + break whitespaceLoop + } + } + if j == i+1 { + // Not a whitespace escape. + i++ + continue + } + if !strings.Contains(s[i:j], "\n") { + // This is not a line-ending backslash. (It's a bad escape sequence, + // but we can let replaceEscapes catch it.) + i++ + continue + } + b.WriteString(s[:i]) + s = s[j:] + i = 0 + } +} + +func (p *parser) replaceEscapes(it item, str string) string { + var ( + b strings.Builder + skip = 0 + ) + b.Grow(len(str)) + for i, c := range str { + if skip > 0 { + skip-- + continue + } + if c != '\\' { + b.WriteRune(c) + continue + } + + if i >= len(str) { + p.bug("Escape sequence at end of string.") + return "" + } + switch str[i+1] { + default: + p.bug("Expected valid escape code after \\, but got %q.", str[i+1]) + case ' ', '\t': + p.panicItemf(it, "invalid escape: '\\%c'", str[i+1]) + case 'b': + b.WriteByte(0x08) + skip = 1 + case 't': + b.WriteByte(0x09) + skip = 1 + case 'n': + b.WriteByte(0x0a) + skip = 1 + case 'f': + b.WriteByte(0x0c) + skip = 1 + case 'r': + b.WriteByte(0x0d) + skip = 1 + case 'e': + if p.tomlNext { + b.WriteByte(0x1b) + skip = 1 + } + case '"': + b.WriteByte(0x22) + skip = 1 + case '\\': + b.WriteByte(0x5c) + skip = 1 + // The lexer guarantees the correct number of characters are present; + // don't need to check here. + case 'x': + if p.tomlNext { + escaped := p.asciiEscapeToUnicode(it, str[i+2:i+4]) + b.WriteRune(escaped) + skip = 3 + } + case 'u': + escaped := p.asciiEscapeToUnicode(it, str[i+2:i+6]) + b.WriteRune(escaped) + skip = 5 + case 'U': + escaped := p.asciiEscapeToUnicode(it, str[i+2:i+10]) + b.WriteRune(escaped) + skip = 9 + } + } + return b.String() +} + +func (p *parser) asciiEscapeToUnicode(it item, s string) rune { + hex, err := strconv.ParseUint(strings.ToLower(s), 16, 32) + if err != nil { + p.bug("Could not parse '%s' as a hexadecimal number, but the lexer claims it's OK: %s", s, err) + } + if !utf8.ValidRune(rune(hex)) { + p.panicItemf(it, "Escaped character '\\u%s' is not valid UTF-8.", s) + } + return rune(hex) +} diff --git a/vendor/github.com/BurntSushi/toml/type_fields.go b/vendor/github.com/BurntSushi/toml/type_fields.go new file mode 100644 index 00000000..10c51f7e --- /dev/null +++ b/vendor/github.com/BurntSushi/toml/type_fields.go @@ -0,0 +1,238 @@ +package toml + +// Struct field handling is adapted from code in encoding/json: +// +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the Go distribution. + +import ( + "reflect" + "sort" + "sync" +) + +// A field represents a single field found in a struct. +type field struct { + name string // the name of the field (`toml` tag included) + tag bool // whether field has a `toml` tag + index []int // represents the depth of an anonymous field + typ reflect.Type // the type of the field +} + +// byName sorts field by name, breaking ties with depth, +// then breaking ties with "name came from toml tag", then +// breaking ties with index sequence. +type byName []field + +func (x byName) Len() int { return len(x) } +func (x byName) Swap(i, j int) { x[i], x[j] = x[j], x[i] } +func (x byName) Less(i, j int) bool { + if x[i].name != x[j].name { + return x[i].name < x[j].name + } + if len(x[i].index) != len(x[j].index) { + return len(x[i].index) < len(x[j].index) + } + if x[i].tag != x[j].tag { + return x[i].tag + } + return byIndex(x).Less(i, j) +} + +// byIndex sorts field by index sequence. +type byIndex []field + +func (x byIndex) Len() int { return len(x) } +func (x byIndex) Swap(i, j int) { x[i], x[j] = x[j], x[i] } +func (x byIndex) Less(i, j int) bool { + for k, xik := range x[i].index { + if k >= len(x[j].index) { + return false + } + if xik != x[j].index[k] { + return xik < x[j].index[k] + } + } + return len(x[i].index) < len(x[j].index) +} + +// typeFields returns a list of fields that TOML should recognize for the given +// type. The algorithm is breadth-first search over the set of structs to +// include - the top struct and then any reachable anonymous structs. +func typeFields(t reflect.Type) []field { + // Anonymous fields to explore at the current level and the next. + current := []field{} + next := []field{{typ: t}} + + // Count of queued names for current level and the next. + var count map[reflect.Type]int + var nextCount map[reflect.Type]int + + // Types already visited at an earlier level. + visited := map[reflect.Type]bool{} + + // Fields found. + var fields []field + + for len(next) > 0 { + current, next = next, current[:0] + count, nextCount = nextCount, map[reflect.Type]int{} + + for _, f := range current { + if visited[f.typ] { + continue + } + visited[f.typ] = true + + // Scan f.typ for fields to include. + for i := 0; i < f.typ.NumField(); i++ { + sf := f.typ.Field(i) + if sf.PkgPath != "" && !sf.Anonymous { // unexported + continue + } + opts := getOptions(sf.Tag) + if opts.skip { + continue + } + index := make([]int, len(f.index)+1) + copy(index, f.index) + index[len(f.index)] = i + + ft := sf.Type + if ft.Name() == "" && ft.Kind() == reflect.Ptr { + // Follow pointer. + ft = ft.Elem() + } + + // Record found field and index sequence. + if opts.name != "" || !sf.Anonymous || ft.Kind() != reflect.Struct { + tagged := opts.name != "" + name := opts.name + if name == "" { + name = sf.Name + } + fields = append(fields, field{name, tagged, index, ft}) + if count[f.typ] > 1 { + // If there were multiple instances, add a second, + // so that the annihilation code will see a duplicate. + // It only cares about the distinction between 1 or 2, + // so don't bother generating any more copies. + fields = append(fields, fields[len(fields)-1]) + } + continue + } + + // Record new anonymous struct to explore in next round. + nextCount[ft]++ + if nextCount[ft] == 1 { + f := field{name: ft.Name(), index: index, typ: ft} + next = append(next, f) + } + } + } + } + + sort.Sort(byName(fields)) + + // Delete all fields that are hidden by the Go rules for embedded fields, + // except that fields with TOML tags are promoted. + + // The fields are sorted in primary order of name, secondary order + // of field index length. Loop over names; for each name, delete + // hidden fields by choosing the one dominant field that survives. + out := fields[:0] + for advance, i := 0, 0; i < len(fields); i += advance { + // One iteration per name. + // Find the sequence of fields with the name of this first field. + fi := fields[i] + name := fi.name + for advance = 1; i+advance < len(fields); advance++ { + fj := fields[i+advance] + if fj.name != name { + break + } + } + if advance == 1 { // Only one field with this name + out = append(out, fi) + continue + } + dominant, ok := dominantField(fields[i : i+advance]) + if ok { + out = append(out, dominant) + } + } + + fields = out + sort.Sort(byIndex(fields)) + + return fields +} + +// dominantField looks through the fields, all of which are known to +// have the same name, to find the single field that dominates the +// others using Go's embedding rules, modified by the presence of +// TOML tags. If there are multiple top-level fields, the boolean +// will be false: This condition is an error in Go and we skip all +// the fields. +func dominantField(fields []field) (field, bool) { + // The fields are sorted in increasing index-length order. The winner + // must therefore be one with the shortest index length. Drop all + // longer entries, which is easy: just truncate the slice. + length := len(fields[0].index) + tagged := -1 // Index of first tagged field. + for i, f := range fields { + if len(f.index) > length { + fields = fields[:i] + break + } + if f.tag { + if tagged >= 0 { + // Multiple tagged fields at the same level: conflict. + // Return no field. + return field{}, false + } + tagged = i + } + } + if tagged >= 0 { + return fields[tagged], true + } + // All remaining fields have the same length. If there's more than one, + // we have a conflict (two fields named "X" at the same level) and we + // return no field. + if len(fields) > 1 { + return field{}, false + } + return fields[0], true +} + +var fieldCache struct { + sync.RWMutex + m map[reflect.Type][]field +} + +// cachedTypeFields is like typeFields but uses a cache to avoid repeated work. +func cachedTypeFields(t reflect.Type) []field { + fieldCache.RLock() + f := fieldCache.m[t] + fieldCache.RUnlock() + if f != nil { + return f + } + + // Compute fields without lock. + // Might duplicate effort but won't hold other computations back. + f = typeFields(t) + if f == nil { + f = []field{} + } + + fieldCache.Lock() + if fieldCache.m == nil { + fieldCache.m = map[reflect.Type][]field{} + } + fieldCache.m[t] = f + fieldCache.Unlock() + return f +} diff --git a/vendor/github.com/BurntSushi/toml/type_toml.go b/vendor/github.com/BurntSushi/toml/type_toml.go new file mode 100644 index 00000000..1c090d33 --- /dev/null +++ b/vendor/github.com/BurntSushi/toml/type_toml.go @@ -0,0 +1,65 @@ +package toml + +// tomlType represents any Go type that corresponds to a TOML type. +// While the first draft of the TOML spec has a simplistic type system that +// probably doesn't need this level of sophistication, we seem to be militating +// toward adding real composite types. +type tomlType interface { + typeString() string +} + +// typeEqual accepts any two types and returns true if they are equal. +func typeEqual(t1, t2 tomlType) bool { + if t1 == nil || t2 == nil { + return false + } + return t1.typeString() == t2.typeString() +} + +func typeIsTable(t tomlType) bool { + return typeEqual(t, tomlHash) || typeEqual(t, tomlArrayHash) +} + +type tomlBaseType string + +func (btype tomlBaseType) typeString() string { return string(btype) } +func (btype tomlBaseType) String() string { return btype.typeString() } + +var ( + tomlInteger tomlBaseType = "Integer" + tomlFloat tomlBaseType = "Float" + tomlDatetime tomlBaseType = "Datetime" + tomlString tomlBaseType = "String" + tomlBool tomlBaseType = "Bool" + tomlArray tomlBaseType = "Array" + tomlHash tomlBaseType = "Hash" + tomlArrayHash tomlBaseType = "ArrayHash" +) + +// typeOfPrimitive returns a tomlType of any primitive value in TOML. +// Primitive values are: Integer, Float, Datetime, String and Bool. +// +// Passing a lexer item other than the following will cause a BUG message +// to occur: itemString, itemBool, itemInteger, itemFloat, itemDatetime. +func (p *parser) typeOfPrimitive(lexItem item) tomlType { + switch lexItem.typ { + case itemInteger: + return tomlInteger + case itemFloat: + return tomlFloat + case itemDatetime: + return tomlDatetime + case itemString, itemStringEsc: + return tomlString + case itemMultilineString: + return tomlString + case itemRawString: + return tomlString + case itemRawMultilineString: + return tomlString + case itemBool: + return tomlBool + } + p.bug("Cannot infer primitive type of lex item '%s'.", lexItem) + panic("unreachable") +} diff --git a/vendor/github.com/ClickHouse/ch-go/compress/compress.go b/vendor/github.com/ClickHouse/ch-go/compress/compress.go index a89c6401..bf2cbf9c 100644 --- a/vendor/github.com/ClickHouse/ch-go/compress/compress.go +++ b/vendor/github.com/ClickHouse/ch-go/compress/compress.go @@ -7,18 +7,39 @@ import ( "github.com/go-faster/city" ) -//go:generate go run github.com/dmarkham/enumer -transform snake_upper -type Method -output method_enum.go +//go:generate go run github.com/dmarkham/enumer -transform upper -type Method -output method_enum.go // Method is compression codec. type Method byte // Possible compression methods. const ( - None Method = 0x02 - LZ4 Method = 0x82 - ZSTD Method = 0x90 + None Method = iota + LZ4 + LZ4HC + ZSTD + NumMethods int = iota ) +type methodEncoding byte + +const ( + encodedNone methodEncoding = 0x02 + encodedLZ4 methodEncoding = 0x82 + encodedLZ4HC methodEncoding = encodedLZ4 + encodedZSTD methodEncoding = 0x90 +) + +var methodTable = map[Method]methodEncoding{ + None: encodedNone, + LZ4: encodedLZ4, + LZ4HC: encodedLZ4HC, + ZSTD: encodedZSTD, +} + +// Level for supporting compression codecs. +type Level uint32 + // Constants for compression encoding. // // See https://go-faster.org/docs/clickhouse/compression for reference. diff --git a/vendor/github.com/ClickHouse/ch-go/compress/method_enum.go b/vendor/github.com/ClickHouse/ch-go/compress/method_enum.go index 8d443520..373eb288 100644 --- a/vendor/github.com/ClickHouse/ch-go/compress/method_enum.go +++ b/vendor/github.com/ClickHouse/ch-go/compress/method_enum.go @@ -1,4 +1,4 @@ -// Code generated by "enumer -transform snake_upper -type Method -output method_enum.go"; DO NOT EDIT. +// Code generated by "enumer -transform upper -type Method -output method_enum.go"; DO NOT EDIT. package compress @@ -7,58 +7,47 @@ import ( "strings" ) -const ( - _MethodName_0 = "NONE" - _MethodLowerName_0 = "none" - _MethodName_1 = "LZ4" - _MethodLowerName_1 = "lz4" - _MethodName_2 = "ZSTD" - _MethodLowerName_2 = "zstd" -) +const _MethodName = "NONELZ4LZ4HCZSTD" -var ( - _MethodIndex_0 = [...]uint8{0, 4} - _MethodIndex_1 = [...]uint8{0, 3} - _MethodIndex_2 = [...]uint8{0, 4} -) +var _MethodIndex = [...]uint8{0, 4, 7, 12, 16} + +const _MethodLowerName = "nonelz4lz4hczstd" func (i Method) String() string { - switch { - case i == 2: - return _MethodName_0 - case i == 130: - return _MethodName_1 - case i == 144: - return _MethodName_2 - default: + if i >= Method(len(_MethodIndex)-1) { return fmt.Sprintf("Method(%d)", i) } + return _MethodName[_MethodIndex[i]:_MethodIndex[i+1]] } // An "invalid array index" compiler error signifies that the constant values have changed. // Re-run the stringer command to generate them again. func _MethodNoOp() { var x [1]struct{} - _ = x[None-(2)] - _ = x[LZ4-(130)] - _ = x[ZSTD-(144)] + _ = x[None-(0)] + _ = x[LZ4-(1)] + _ = x[LZ4HC-(2)] + _ = x[ZSTD-(3)] } -var _MethodValues = []Method{None, LZ4, ZSTD} +var _MethodValues = []Method{None, LZ4, LZ4HC, ZSTD} var _MethodNameToValueMap = map[string]Method{ - _MethodName_0[0:4]: None, - _MethodLowerName_0[0:4]: None, - _MethodName_1[0:3]: LZ4, - _MethodLowerName_1[0:3]: LZ4, - _MethodName_2[0:4]: ZSTD, - _MethodLowerName_2[0:4]: ZSTD, + _MethodName[0:4]: None, + _MethodLowerName[0:4]: None, + _MethodName[4:7]: LZ4, + _MethodLowerName[4:7]: LZ4, + _MethodName[7:12]: LZ4HC, + _MethodLowerName[7:12]: LZ4HC, + _MethodName[12:16]: ZSTD, + _MethodLowerName[12:16]: ZSTD, } var _MethodNames = []string{ - _MethodName_0[0:4], - _MethodName_1[0:3], - _MethodName_2[0:4], + _MethodName[0:4], + _MethodName[4:7], + _MethodName[7:12], + _MethodName[12:16], } // MethodString retrieves an enum value from the enum constants string name. diff --git a/vendor/github.com/ClickHouse/ch-go/compress/reader.go b/vendor/github.com/ClickHouse/ch-go/compress/reader.go index 6a26f9df..fc4a0e6b 100644 --- a/vendor/github.com/ClickHouse/ch-go/compress/reader.go +++ b/vendor/github.com/ClickHouse/ch-go/compress/reader.go @@ -70,8 +70,8 @@ func (r *Reader) readBlock() error { DataSize: dataSize, }, "mismatch") } - switch m := Method(r.header[hMethod]); m { - case LZ4: + switch m := methodEncoding(r.header[hMethod]); m { + case encodedLZ4: // == encodedLZ4HC, as decompression is similar for both n, err := lz4.UncompressBlock(r.raw[headerSize:], r.data) if err != nil { return errors.Wrap(err, "uncompress") @@ -81,7 +81,7 @@ func (r *Reader) readBlock() error { n, dataSize, ) } - case ZSTD: + case encodedZSTD: if r.zstd == nil { // Lazily initializing to prevent spawning goroutines in NewReader. // See https://github.com/golang/go/issues/47056#issuecomment-997436820 @@ -104,7 +104,7 @@ func (r *Reader) readBlock() error { ) } r.data = data - case None: + case encodedNone: copy(r.data, r.raw[headerSize:]) default: return errors.Errorf("compression 0x%02x not implemented", m) diff --git a/vendor/github.com/ClickHouse/ch-go/compress/writer.go b/vendor/github.com/ClickHouse/ch-go/compress/writer.go index 6094b055..a8d26806 100644 --- a/vendor/github.com/ClickHouse/ch-go/compress/writer.go +++ b/vendor/github.com/ClickHouse/ch-go/compress/writer.go @@ -2,6 +2,7 @@ package compress import ( "encoding/binary" + "math" "github.com/go-faster/city" "github.com/go-faster/errors" @@ -9,30 +10,45 @@ import ( "github.com/pierrec/lz4/v4" ) +const ( + LevelZero Level = 0 + LevelLZ4HCDefault Level = 9 + LevelLZ4HCMax Level = 12 +) + // Writer encodes compressed blocks. type Writer struct { Data []byte - lz4 *lz4.Compressor - zstd *zstd.Encoder + method Method + + lz4 *lz4.Compressor + lz4hc *lz4.CompressorHC + zstd *zstd.Encoder } // Compress buf into Data. -func (w *Writer) Compress(m Method, buf []byte) error { +func (w *Writer) Compress(buf []byte) error { maxSize := lz4.CompressBlockBound(len(buf)) w.Data = append(w.Data[:0], make([]byte, maxSize+headerSize)...) _ = w.Data[:headerSize] - w.Data[hMethod] = byte(m) + w.Data[hMethod] = byte(methodTable[w.method]) var n int - switch m { + switch w.method { case LZ4: compressedSize, err := w.lz4.CompressBlock(buf, w.Data[headerSize:]) if err != nil { return errors.Wrap(err, "block") } n = compressedSize + case LZ4HC: + compressedSize, err := w.lz4hc.CompressBlock(buf, w.Data[headerSize:]) + if err != nil { + return errors.Wrap(err, "block") + } + n = compressedSize case ZSTD: w.Data = w.zstd.EncodeAll(buf, w.Data[:headerSize]) n = len(w.Data) - headerSize @@ -40,8 +56,12 @@ func (w *Writer) Compress(m Method, buf []byte) error { n = copy(w.Data[headerSize:], buf) } - w.Data = w.Data[:n+headerSize] + // security: https://github.com/ClickHouse/ch-go/pull/1041 + if uint64(n)+uint64(compressHeaderSize) > math.MaxUint32 { + return errors.New("compressed size overflows uint32") + } + w.Data = w.Data[:n+headerSize] binary.LittleEndian.PutUint32(w.Data[hRawSize:], uint32(n+compressHeaderSize)) binary.LittleEndian.PutUint32(w.Data[hDataSize:], uint32(len(buf))) h := city.CH128(w.Data[hMethod:]) @@ -51,17 +71,40 @@ func (w *Writer) Compress(m Method, buf []byte) error { return nil } -func NewWriter() *Writer { - w, err := zstd.NewWriter(nil, - zstd.WithEncoderLevel(zstd.SpeedDefault), - zstd.WithEncoderConcurrency(1), - zstd.WithLowerEncoderMem(true), - ) - if err != nil { - panic(err) +// NewWriter creates a new Writer with the specified compression level that supports the specified method. +func NewWriter(l Level, m Method) *Writer { + var err error + var zstdWriter *zstd.Encoder + var lz4Writer *lz4.Compressor + var lz4hcWriter *lz4.CompressorHC + + switch m { + case LZ4: + lz4Writer = &lz4.Compressor{} + case LZ4HC: + levelLZ4HC := l + if levelLZ4HC == 0 { + levelLZ4HC = LevelLZ4HCDefault + } else { + levelLZ4HC = Level(math.Min(float64(levelLZ4HC), float64(LevelLZ4HCMax))) + } + lz4hcWriter = &lz4.CompressorHC{Level: lz4.CompressionLevel(1 << (8 + levelLZ4HC))} + case ZSTD: + zstdWriter, err = zstd.NewWriter(nil, + zstd.WithEncoderLevel(zstd.SpeedDefault), + zstd.WithEncoderConcurrency(1), + zstd.WithLowerEncoderMem(true), + ) + if err != nil { + panic(err) + } + default: } + return &Writer{ - lz4: &lz4.Compressor{}, - zstd: w, + method: m, + lz4: lz4Writer, + lz4hc: lz4hcWriter, + zstd: zstdWriter, } } diff --git a/vendor/github.com/ClickHouse/ch-go/proto/block.go b/vendor/github.com/ClickHouse/ch-go/proto/block.go index 34548067..2e8fb883 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/block.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/block.go @@ -183,6 +183,38 @@ func (b Block) EncodeRawBlock(buf *Buffer, version int, input []InputColumn) err return nil } +func (b Block) WriteBlock(w *Writer, version int, input []InputColumn) error { + w.ChainBuffer(func(buf *Buffer) { + if FeatureBlockInfo.In(version) { + b.Info.Encode(buf) + } + buf.PutInt(b.Columns) + buf.PutInt(b.Rows) + }) + + for _, col := range input { + if r := col.Data.Rows(); r != b.Rows { + return errors.Errorf("%q has %d rows, expected %d", col.Name, r, b.Rows) + } + w.ChainBuffer(func(buf *Buffer) { + col.EncodeStart(buf, version) + }) + if v, ok := col.Data.(Preparable); ok { + if err := v.Prepare(); err != nil { + return errors.Wrapf(err, "prepare %q", col.Name) + } + } + if col.Data.Rows() == 0 { + continue + } + if v, ok := col.Data.(StateEncoder); ok { + w.ChainBuffer(v.EncodeState) + } + col.Data.WriteColumn(w) + } + return nil +} + // This constrains can prevent accidental OOM and allow early detection // of erroneous column or row count. // diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_arr.go b/vendor/github.com/ClickHouse/ch-go/proto/col_arr.go index ad574368..9b7639bf 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_arr.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_arr.go @@ -130,6 +130,12 @@ func (c ColArr[T]) EncodeColumn(b *Buffer) { c.Data.EncodeColumn(b) } +// WriteColumn implements ColInput. +func (c ColArr[T]) WriteColumn(w *Writer) { + c.Offsets.WriteColumn(w) + c.Data.WriteColumn(w) +} + // Append appends new row to column. func (c *ColArr[T]) Append(v []T) { c.Data.AppendArr(v) diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_arr_go123.go b/vendor/github.com/ClickHouse/ch-go/proto/col_arr_go123.go new file mode 100644 index 00000000..c421b419 --- /dev/null +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_arr_go123.go @@ -0,0 +1,22 @@ +//go:build go1.23 + +package proto + +import "iter" + +// RowRange returns a [iter.Seq] iterator over i-th row. +func (c ColArr[T]) RowRange(i int) iter.Seq[T] { + var start int + end := int(c.Offsets[i]) + if i > 0 { + start = int(c.Offsets[i-1]) + } + + return func(yield func(T) bool) { + for idx := start; idx < end; idx++ { + if !yield(c.Data.Row(idx)) { + return + } + } + } +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_auto.go b/vendor/github.com/ClickHouse/ch-go/proto/col_auto.go index 2ed9b8ea..d5f614de 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_auto.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_auto.go @@ -1,6 +1,8 @@ package proto import ( + "reflect" + "strconv" "strings" "github.com/go-faster/errors" @@ -36,20 +38,8 @@ func (c *ColAuto) Infer(t ColumnType) error { switch t { case ColumnTypeNothing: c.Data = new(ColNothing) - case ColumnTypeNullable.Sub(ColumnTypeNothing): - c.Data = new(ColNothing).Nullable() - case ColumnTypeArray.Sub(ColumnTypeNothing): - c.Data = new(ColNothing).Array() case ColumnTypeString: c.Data = new(ColStr) - case ColumnTypeArray.Sub(ColumnTypeString): - c.Data = new(ColStr).Array() - case ColumnTypeNullable.Sub(ColumnTypeString): - c.Data = new(ColStr).Nullable() - case ColumnTypeLowCardinality.Sub(ColumnTypeString): - c.Data = new(ColStr).LowCardinality() - case ColumnTypeArray.Sub(ColumnTypeLowCardinality.Sub(ColumnTypeString)): - c.Data = new(ColStr).LowCardinality().Array() case ColumnTypeBool: c.Data = new(ColBool) case ColumnTypeDateTime: @@ -60,12 +50,50 @@ func (c *ColAuto) Infer(t ColumnType) error { c.Data = NewMap[string, string](new(ColStr), new(ColStr)) case ColumnTypeUUID: c.Data = new(ColUUID) - case ColumnTypeArray.Sub(ColumnTypeUUID): - c.Data = new(ColUUID).Array() - case ColumnTypeNullable.Sub(ColumnTypeUUID): - c.Data = new(ColUUID).Nullable() default: switch t.Base() { + case ColumnTypeArray: + inner := new(ColAuto) + if err := inner.Infer(t.Elem()); err != nil { + return errors.Wrap(err, "array") + } + innerValue := reflect.ValueOf(inner.Data) + arrayMethod := innerValue.MethodByName("Array") + if arrayMethod.IsValid() && arrayMethod.Type().NumOut() == 1 { + if col, ok := arrayMethod.Call(nil)[0].Interface().(Column); ok { + c.Data = col + c.DataType = t + return nil + } + } + case ColumnTypeNullable: + inner := new(ColAuto) + if err := inner.Infer(t.Elem()); err != nil { + return errors.Wrap(err, "nullable") + } + innerValue := reflect.ValueOf(inner.Data) + nullableMethod := innerValue.MethodByName("Nullable") + if nullableMethod.IsValid() && nullableMethod.Type().NumOut() == 1 { + if col, ok := nullableMethod.Call(nil)[0].Interface().(Column); ok { + c.Data = col + c.DataType = t + return nil + } + } + case ColumnTypeLowCardinality: + inner := new(ColAuto) + if err := inner.Infer(t.Elem()); err != nil { + return errors.Wrap(err, "low cardinality") + } + innerValue := reflect.ValueOf(inner.Data) + lowCardinalityMethod := innerValue.MethodByName("LowCardinality") + if lowCardinalityMethod.IsValid() && lowCardinalityMethod.Type().NumOut() == 1 { + if col, ok := lowCardinalityMethod.Call(nil)[0].Interface().(Column); ok { + c.Data = col + c.DataType = t + return nil + } + } case ColumnTypeDateTime: v := new(ColDateTime) if err := v.Infer(t); err != nil { @@ -74,6 +102,49 @@ func (c *ColAuto) Infer(t ColumnType) error { c.Data = v c.DataType = t return nil + case ColumnTypeDecimal: + var prec int + precStr, _, _ := strings.Cut(string(t.Elem()), ",") + if precStr != "" { + var err error + precStr = strings.TrimSpace(precStr) + prec, err = strconv.Atoi(precStr) + if err != nil { + return errors.Wrap(err, "decimal") + } + } else { + prec = 10 + } + switch { + case prec >= 1 && prec < 10: + c.Data = new(ColDecimal32) + case prec >= 10 && prec < 19: + c.Data = new(ColDecimal64) + case prec >= 19 && prec < 39: + c.Data = new(ColDecimal128) + case prec >= 39 && prec < 77: + c.Data = new(ColDecimal256) + default: + return errors.Errorf("decimal precision %d out of range", prec) + } + c.DataType = t + return nil + case ColumnTypeDecimal32: + c.Data = new(ColDecimal32) + c.DataType = t + return nil + case ColumnTypeDecimal64: + c.Data = new(ColDecimal64) + c.DataType = t + return nil + case ColumnTypeDecimal128: + c.Data = new(ColDecimal128) + c.DataType = t + return nil + case ColumnTypeDecimal256: + c.Data = new(ColDecimal256) + c.DataType = t + return nil case ColumnTypeEnum8, ColumnTypeEnum16: v := new(ColEnum) if err := v.Infer(t); err != nil { @@ -122,3 +193,7 @@ func (c ColAuto) Reset() { func (c ColAuto) EncodeColumn(b *Buffer) { c.Data.EncodeColumn(b) } + +func (c ColAuto) WriteColumn(w *Writer) { + c.Data.WriteColumn(w) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_auto_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_auto_gen.go index 70928c65..b297d927 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_auto_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_auto_gen.go @@ -4,154 +4,54 @@ package proto func inferGenerated(t ColumnType) Column { switch t { - case ColumnTypeArray.Sub(ColumnTypeFloat32): - return new(ColFloat32).Array() - case ColumnTypeNullable.Sub(ColumnTypeFloat32): - return new(ColFloat32).Nullable() case ColumnTypeFloat32: return new(ColFloat32) - case ColumnTypeArray.Sub(ColumnTypeFloat64): - return new(ColFloat64).Array() - case ColumnTypeNullable.Sub(ColumnTypeFloat64): - return new(ColFloat64).Nullable() case ColumnTypeFloat64: return new(ColFloat64) - case ColumnTypeArray.Sub(ColumnTypeIPv4): - return new(ColIPv4).Array() - case ColumnTypeNullable.Sub(ColumnTypeIPv4): - return new(ColIPv4).Nullable() case ColumnTypeIPv4: return new(ColIPv4) - case ColumnTypeArray.Sub(ColumnTypeIPv6): - return new(ColIPv6).Array() - case ColumnTypeNullable.Sub(ColumnTypeIPv6): - return new(ColIPv6).Nullable() case ColumnTypeIPv6: return new(ColIPv6) - case ColumnTypeArray.Sub(ColumnTypeDate): - return new(ColDate).Array() - case ColumnTypeNullable.Sub(ColumnTypeDate): - return new(ColDate).Nullable() case ColumnTypeDate: return new(ColDate) - case ColumnTypeArray.Sub(ColumnTypeDate32): - return new(ColDate32).Array() - case ColumnTypeNullable.Sub(ColumnTypeDate32): - return new(ColDate32).Nullable() case ColumnTypeDate32: return new(ColDate32) - case ColumnTypeArray.Sub(ColumnTypeInt8): - return new(ColInt8).Array() - case ColumnTypeNullable.Sub(ColumnTypeInt8): - return new(ColInt8).Nullable() case ColumnTypeInt8: return new(ColInt8) - case ColumnTypeArray.Sub(ColumnTypeUInt8): - return new(ColUInt8).Array() - case ColumnTypeNullable.Sub(ColumnTypeUInt8): - return new(ColUInt8).Nullable() case ColumnTypeUInt8: return new(ColUInt8) - case ColumnTypeArray.Sub(ColumnTypeInt16): - return new(ColInt16).Array() - case ColumnTypeNullable.Sub(ColumnTypeInt16): - return new(ColInt16).Nullable() case ColumnTypeInt16: return new(ColInt16) - case ColumnTypeArray.Sub(ColumnTypeUInt16): - return new(ColUInt16).Array() - case ColumnTypeNullable.Sub(ColumnTypeUInt16): - return new(ColUInt16).Nullable() case ColumnTypeUInt16: return new(ColUInt16) - case ColumnTypeArray.Sub(ColumnTypeInt32): - return new(ColInt32).Array() - case ColumnTypeNullable.Sub(ColumnTypeInt32): - return new(ColInt32).Nullable() case ColumnTypeInt32: return new(ColInt32) - case ColumnTypeArray.Sub(ColumnTypeUInt32): - return new(ColUInt32).Array() - case ColumnTypeNullable.Sub(ColumnTypeUInt32): - return new(ColUInt32).Nullable() case ColumnTypeUInt32: return new(ColUInt32) - case ColumnTypeArray.Sub(ColumnTypeInt64): - return new(ColInt64).Array() - case ColumnTypeNullable.Sub(ColumnTypeInt64): - return new(ColInt64).Nullable() case ColumnTypeInt64: return new(ColInt64) - case ColumnTypeArray.Sub(ColumnTypeUInt64): - return new(ColUInt64).Array() - case ColumnTypeNullable.Sub(ColumnTypeUInt64): - return new(ColUInt64).Nullable() case ColumnTypeUInt64: return new(ColUInt64) - case ColumnTypeArray.Sub(ColumnTypeInt128): - return new(ColInt128).Array() - case ColumnTypeNullable.Sub(ColumnTypeInt128): - return new(ColInt128).Nullable() case ColumnTypeInt128: return new(ColInt128) - case ColumnTypeArray.Sub(ColumnTypeUInt128): - return new(ColUInt128).Array() - case ColumnTypeNullable.Sub(ColumnTypeUInt128): - return new(ColUInt128).Nullable() case ColumnTypeUInt128: return new(ColUInt128) - case ColumnTypeArray.Sub(ColumnTypeInt256): - return new(ColInt256).Array() - case ColumnTypeNullable.Sub(ColumnTypeInt256): - return new(ColInt256).Nullable() case ColumnTypeInt256: return new(ColInt256) - case ColumnTypeArray.Sub(ColumnTypeUInt256): - return new(ColUInt256).Array() - case ColumnTypeNullable.Sub(ColumnTypeUInt256): - return new(ColUInt256).Nullable() case ColumnTypeUInt256: return new(ColUInt256) - case ColumnTypeArray.Sub(ColumnTypeFixedString.With("8")): - return new(ColFixedStr8).Array() - case ColumnTypeNullable.Sub(ColumnTypeFixedString.With("8")): - return new(ColFixedStr8).Nullable() case ColumnTypeFixedString.With("8"): return new(ColFixedStr8) - case ColumnTypeArray.Sub(ColumnTypeFixedString.With("16")): - return new(ColFixedStr16).Array() - case ColumnTypeNullable.Sub(ColumnTypeFixedString.With("16")): - return new(ColFixedStr16).Nullable() case ColumnTypeFixedString.With("16"): return new(ColFixedStr16) - case ColumnTypeArray.Sub(ColumnTypeFixedString.With("32")): - return new(ColFixedStr32).Array() - case ColumnTypeNullable.Sub(ColumnTypeFixedString.With("32")): - return new(ColFixedStr32).Nullable() case ColumnTypeFixedString.With("32"): return new(ColFixedStr32) - case ColumnTypeArray.Sub(ColumnTypeFixedString.With("64")): - return new(ColFixedStr64).Array() - case ColumnTypeNullable.Sub(ColumnTypeFixedString.With("64")): - return new(ColFixedStr64).Nullable() case ColumnTypeFixedString.With("64"): return new(ColFixedStr64) - case ColumnTypeArray.Sub(ColumnTypeFixedString.With("128")): - return new(ColFixedStr128).Array() - case ColumnTypeNullable.Sub(ColumnTypeFixedString.With("128")): - return new(ColFixedStr128).Nullable() case ColumnTypeFixedString.With("128"): return new(ColFixedStr128) - case ColumnTypeArray.Sub(ColumnTypeFixedString.With("256")): - return new(ColFixedStr256).Array() - case ColumnTypeNullable.Sub(ColumnTypeFixedString.With("256")): - return new(ColFixedStr256).Nullable() case ColumnTypeFixedString.With("256"): return new(ColFixedStr256) - case ColumnTypeArray.Sub(ColumnTypeFixedString.With("512")): - return new(ColFixedStr512).Array() - case ColumnTypeNullable.Sub(ColumnTypeFixedString.With("512")): - return new(ColFixedStr512).Nullable() case ColumnTypeFixedString.With("512"): return new(ColFixedStr512) default: diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_bool_safe.go b/vendor/github.com/ClickHouse/ch-go/proto/col_bool_safe.go index 3e998e46..38cc73d3 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_bool_safe.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_bool_safe.go @@ -42,3 +42,11 @@ func (c *ColBool) DecodeColumn(r *Reader, rows int) error { *c = v return nil } + +// WriteColumn encodes ColBool rows to *Writer. +func (c ColBool) WriteColumn(w *Writer) { + if len(c) == 0 { + return + } + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_bool_unsafe.go b/vendor/github.com/ClickHouse/ch-go/proto/col_bool_unsafe.go index 92cac707..c42966ea 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_bool_unsafe.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_bool_unsafe.go @@ -34,3 +34,13 @@ func (c *ColBool) DecodeColumn(r *Reader, rows int) error { } return nil } + +// WriteColumn writes Bool rows to *Writer. +func (c ColBool) WriteColumn(w *Writer) { + if len(c) == 0 { + return + } + s := *(*slice)(unsafe.Pointer(&c)) // #nosec G103 + src := *(*[]byte)(unsafe.Pointer(&s)) // #nosec G103 + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_date.go b/vendor/github.com/ClickHouse/ch-go/proto/col_date.go index 5bf75b3b..4483739a 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_date.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_date.go @@ -20,7 +20,7 @@ func (c ColDate) Row(i int) time.Time { return c[i].Time() } -// LowCardinality returns LowCardinality for Enum8 . +// LowCardinality returns LowCardinality for Enum8. func (c *ColDate) LowCardinality() *ColLowCardinality[time.Time] { return &ColLowCardinality[time.Time]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_date32.go b/vendor/github.com/ClickHouse/ch-go/proto/col_date32.go index 38f1a916..8daa68b7 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_date32.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_date32.go @@ -20,7 +20,7 @@ func (c ColDate32) Row(i int) time.Time { return c[i].Time() } -// LowCardinality returns LowCardinality for Enum8 . +// LowCardinality returns LowCardinality for Enum8. func (c *ColDate32) LowCardinality() *ColLowCardinality[time.Time] { return &ColLowCardinality[time.Time]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_date32_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_date32_safe_gen.go index 7e6ac3d6..3a1f6404 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_date32_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_date32_safe_gen.go @@ -53,3 +53,7 @@ func (c ColDate32) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColDate32) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_date32_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_date32_unsafe_gen.go index 2690a318..f4de4604 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_date32_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_date32_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColDate32) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColDate32) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 32 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_date_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_date_safe_gen.go index 49bb89b5..7b9cfc33 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_date_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_date_safe_gen.go @@ -53,3 +53,7 @@ func (c ColDate) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColDate) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_date_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_date_unsafe_gen.go index 980d8b4c..022a7147 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_date_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_date_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColDate) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColDate) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 16 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_datetime.go b/vendor/github.com/ClickHouse/ch-go/proto/col_datetime.go index 4243f2ba..f8f8d97f 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_datetime.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_datetime.go @@ -61,6 +61,10 @@ func (c ColDateTime) Row(i int) time.Time { return c.Data[i].Time().In(c.loc()) } +func (c *ColDateTime) AppendRaw(v DateTime) { + c.Data = append(c.Data, v) +} + func (c *ColDateTime) Append(v time.Time) { c.Data = append(c.Data, ToDateTime(v)) } @@ -75,7 +79,7 @@ func (c *ColDateTime) AppendArr(vs []time.Time) { c.Data = append(c.Data, dates...) } -// LowCardinality returns LowCardinality for Enum8 . +// LowCardinality returns LowCardinality for Enum8. func (c *ColDateTime) LowCardinality() *ColLowCardinality[time.Time] { return &ColLowCardinality[time.Time]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_datetime64.go b/vendor/github.com/ClickHouse/ch-go/proto/col_datetime64.go index f4d96a49..12506e40 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_datetime64.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_datetime64.go @@ -61,11 +61,10 @@ func (c *ColDateTime64) Infer(t ColumnType) error { if elem == "" { return errors.Errorf("invalid DateTime64: no elements in %q", t) } - elems := strings.SplitN(elem, ",", 2) - for i := range elems { - elems[i] = strings.Trim(elems[i], `' `) - } - n, err := strconv.ParseUint(elems[0], 10, 8) + pStr, locStr, hasloc := strings.Cut(elem, ",") + pStr = strings.Trim(pStr, `' `) + locStr = strings.Trim(locStr, `' `) + n, err := strconv.ParseUint(pStr, 10, 8) if err != nil { return errors.Wrap(err, "parse precision") } @@ -75,8 +74,8 @@ func (c *ColDateTime64) Infer(t ColumnType) error { } c.Precision = p c.PrecisionSet = true - if len(elems) > 1 { - loc, err := time.LoadLocation(elems[1]) + if hasloc { + loc, err := time.LoadLocation(locStr) if err != nil { return errors.Wrap(err, "invalid location") } @@ -126,6 +125,10 @@ func (c ColDateTime64) Raw() *ColDateTime64Raw { return &ColDateTime64Raw{ColDateTime64: c} } +func (c *ColDateTime64) Nullable() *ColNullable[time.Time] { + return &ColNullable[time.Time]{Values: c} +} + func (c *ColDateTime64) Array() *ColArr[time.Time] { return &ColArr[time.Time]{Data: c} } diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_datetime64_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_datetime64_safe_gen.go index ccff09d2..69ac2f84 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_datetime64_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_datetime64_safe_gen.go @@ -53,3 +53,7 @@ func (c ColDateTime64) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColDateTime64) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_datetime64_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_datetime64_unsafe_gen.go index 4eeeaf5a..22e5052e 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_datetime64_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_datetime64_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColDateTime64) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColDateTime64) WriteColumn(w *Writer) { + v := c.Data + if len(v) == 0 { + return + } + const size = 64 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_datetime_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_datetime_safe_gen.go index 20e9aad8..2eca6eb3 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_datetime_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_datetime_safe_gen.go @@ -53,3 +53,7 @@ func (c ColDateTime) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColDateTime) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_datetime_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_datetime_unsafe_gen.go index 40a056c5..b4214756 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_datetime_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_datetime_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColDateTime) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColDateTime) WriteColumn(w *Writer) { + v := c.Data + if len(v) == 0 { + return + } + const size = 32 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal128_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal128_gen.go index 18811acd..775acbbb 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal128_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal128_gen.go @@ -42,7 +42,7 @@ func (c *ColDecimal128) AppendArr(vs []Decimal128) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for Decimal128 . +// LowCardinality returns LowCardinality for Decimal128. func (c *ColDecimal128) LowCardinality() *ColLowCardinality[Decimal128] { return &ColLowCardinality[Decimal128]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal128_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal128_safe_gen.go index 58c02eb2..fa8498d4 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal128_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal128_safe_gen.go @@ -53,3 +53,7 @@ func (c ColDecimal128) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColDecimal128) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal128_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal128_unsafe_gen.go index 1b2fe125..9a4070f1 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal128_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal128_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColDecimal128) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColDecimal128) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 128 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal256_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal256_gen.go index ad96b27a..7bb2ffaa 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal256_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal256_gen.go @@ -42,7 +42,7 @@ func (c *ColDecimal256) AppendArr(vs []Decimal256) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for Decimal256 . +// LowCardinality returns LowCardinality for Decimal256. func (c *ColDecimal256) LowCardinality() *ColLowCardinality[Decimal256] { return &ColLowCardinality[Decimal256]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal256_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal256_safe_gen.go index 301b7b14..d7b37f79 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal256_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal256_safe_gen.go @@ -53,3 +53,7 @@ func (c ColDecimal256) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColDecimal256) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal256_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal256_unsafe_gen.go index b0d694ef..57419fb6 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal256_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal256_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColDecimal256) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColDecimal256) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 256 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal32_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal32_gen.go index 2c4f4eaf..e26ec6f5 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal32_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal32_gen.go @@ -42,7 +42,7 @@ func (c *ColDecimal32) AppendArr(vs []Decimal32) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for Decimal32 . +// LowCardinality returns LowCardinality for Decimal32. func (c *ColDecimal32) LowCardinality() *ColLowCardinality[Decimal32] { return &ColLowCardinality[Decimal32]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal32_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal32_safe_gen.go index 44cb9f7a..9935f75f 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal32_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal32_safe_gen.go @@ -53,3 +53,7 @@ func (c ColDecimal32) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColDecimal32) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal32_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal32_unsafe_gen.go index eaed3dff..07845255 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal32_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal32_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColDecimal32) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColDecimal32) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 32 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal64_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal64_gen.go index c37ffcd3..bfb06b93 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal64_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal64_gen.go @@ -42,7 +42,7 @@ func (c *ColDecimal64) AppendArr(vs []Decimal64) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for Decimal64 . +// LowCardinality returns LowCardinality for Decimal64. func (c *ColDecimal64) LowCardinality() *ColLowCardinality[Decimal64] { return &ColLowCardinality[Decimal64]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal64_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal64_safe_gen.go index a0934c68..9bb72cce 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal64_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal64_safe_gen.go @@ -53,3 +53,7 @@ func (c ColDecimal64) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColDecimal64) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal64_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal64_unsafe_gen.go index f5ba1b2d..c4824fc1 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_decimal64_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_decimal64_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColDecimal64) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColDecimal64) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 64 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_enum.go b/vendor/github.com/ClickHouse/ch-go/proto/col_enum.go index f4af963b..f798ec90 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_enum.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_enum.go @@ -63,14 +63,12 @@ func (e *ColEnum) parse(t ColumnType) error { for _, elem := range strings.Split(elements, ",") { def := strings.TrimSpace(elem) // 'hello' = 1 - parts := strings.SplitN(def, "=", 2) - if len(parts) != 2 { + left, right, hascomma := strings.Cut(def, "=") + if !hascomma { return errors.Errorf("bad enum definition %q", def) } - var ( - left = strings.TrimSpace(parts[0]) // 'hello' - right = strings.TrimSpace(parts[1]) // 1 - ) + left = strings.TrimSpace(left) // 'hello' + right = strings.TrimSpace(right) // 1 idx, err := strconv.Atoi(right) if err != nil { return errors.Errorf("bad right side of definition %q", right) @@ -169,4 +167,8 @@ func (e *ColEnum) EncodeColumn(b *Buffer) { e.raw().EncodeColumn(b) } +func (e *ColEnum) WriteColumn(w *Writer) { + e.raw().WriteColumn(w) +} + func (e *ColEnum) Type() ColumnType { return e.t } diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_enum16_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_enum16_gen.go index 3f99c642..406e2323 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_enum16_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_enum16_gen.go @@ -42,7 +42,7 @@ func (c *ColEnum16) AppendArr(vs []Enum16) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for Enum16 . +// LowCardinality returns LowCardinality for Enum16. func (c *ColEnum16) LowCardinality() *ColLowCardinality[Enum16] { return &ColLowCardinality[Enum16]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_enum16_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_enum16_safe_gen.go index bf3b0122..11b3ff08 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_enum16_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_enum16_safe_gen.go @@ -53,3 +53,7 @@ func (c ColEnum16) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColEnum16) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_enum16_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_enum16_unsafe_gen.go index 52757012..36bcabfa 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_enum16_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_enum16_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColEnum16) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColEnum16) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 16 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_enum8_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_enum8_gen.go index a063eaf8..c9c3e438 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_enum8_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_enum8_gen.go @@ -42,7 +42,7 @@ func (c *ColEnum8) AppendArr(vs []Enum8) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for Enum8 . +// LowCardinality returns LowCardinality for Enum8. func (c *ColEnum8) LowCardinality() *ColLowCardinality[Enum8] { return &ColLowCardinality[Enum8]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_enum8_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_enum8_safe_gen.go index edf5712c..e8747e3f 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_enum8_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_enum8_safe_gen.go @@ -42,3 +42,7 @@ func (c ColEnum8) EncodeColumn(b *Buffer) { b.Buf[i+start] = uint8(v[i]) } } + +func (c ColEnum8) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_enum8_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_enum8_unsafe_gen.go index 09e6fe2b..7d3b3807 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_enum8_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_enum8_unsafe_gen.go @@ -37,3 +37,12 @@ func (c ColEnum8) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColEnum8) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + src := *(*[]byte)(unsafe.Pointer(&v)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixed_str.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixed_str.go index 982cfa1b..7ae816e6 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixed_str.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixed_str.go @@ -86,6 +86,11 @@ func (c *ColFixedStr) DecodeColumn(r *Reader, rows int) error { return nil } +// WriteColumn writes ColFixedStr rows to *Writer. +func (c ColFixedStr) WriteColumn(w *Writer) { + w.ChainWrite(c.Buf) +} + // Array returns new Array(FixedString). func (c *ColFixedStr) Array() *ColArr[[]byte] { return &ColArr[[]byte]{ diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr128_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr128_gen.go index cb769537..130b7be6 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr128_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr128_gen.go @@ -42,7 +42,7 @@ func (c *ColFixedStr128) AppendArr(vs [][128]byte) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for FixedStr128 . +// LowCardinality returns LowCardinality for FixedStr128. func (c *ColFixedStr128) LowCardinality() *ColLowCardinality[[128]byte] { return &ColLowCardinality[[128]byte]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr128_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr128_safe_gen.go index edf7f9cd..3ecd33c0 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr128_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr128_safe_gen.go @@ -53,3 +53,7 @@ func (c ColFixedStr128) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColFixedStr128) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr128_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr128_unsafe_gen.go index 46ee96c7..6cba7dbb 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr128_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr128_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColFixedStr128) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColFixedStr128) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 128 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr16_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr16_gen.go index adfc2de1..765a4182 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr16_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr16_gen.go @@ -42,7 +42,7 @@ func (c *ColFixedStr16) AppendArr(vs [][16]byte) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for FixedStr16 . +// LowCardinality returns LowCardinality for FixedStr16. func (c *ColFixedStr16) LowCardinality() *ColLowCardinality[[16]byte] { return &ColLowCardinality[[16]byte]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr16_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr16_safe_gen.go index 4a9313ab..030b49ce 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr16_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr16_safe_gen.go @@ -53,3 +53,7 @@ func (c ColFixedStr16) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColFixedStr16) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr16_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr16_unsafe_gen.go index 5d0dbeee..0b1e411c 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr16_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr16_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColFixedStr16) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColFixedStr16) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 16 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr256_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr256_gen.go index 1e2d9559..da652618 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr256_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr256_gen.go @@ -42,7 +42,7 @@ func (c *ColFixedStr256) AppendArr(vs [][256]byte) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for FixedStr256 . +// LowCardinality returns LowCardinality for FixedStr256. func (c *ColFixedStr256) LowCardinality() *ColLowCardinality[[256]byte] { return &ColLowCardinality[[256]byte]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr256_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr256_safe_gen.go index bb961f8b..a4b8a5bf 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr256_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr256_safe_gen.go @@ -53,3 +53,7 @@ func (c ColFixedStr256) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColFixedStr256) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr256_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr256_unsafe_gen.go index 277ac598..318908ac 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr256_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr256_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColFixedStr256) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColFixedStr256) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 256 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr32_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr32_gen.go index 90adba9e..052bae3a 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr32_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr32_gen.go @@ -42,7 +42,7 @@ func (c *ColFixedStr32) AppendArr(vs [][32]byte) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for FixedStr32 . +// LowCardinality returns LowCardinality for FixedStr32. func (c *ColFixedStr32) LowCardinality() *ColLowCardinality[[32]byte] { return &ColLowCardinality[[32]byte]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr32_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr32_safe_gen.go index cdaf62d0..7816cb5f 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr32_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr32_safe_gen.go @@ -53,3 +53,7 @@ func (c ColFixedStr32) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColFixedStr32) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr32_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr32_unsafe_gen.go index 3777e5e8..7e1386a2 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr32_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr32_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColFixedStr32) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColFixedStr32) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 32 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr512_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr512_gen.go index 09837fa8..529ba31f 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr512_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr512_gen.go @@ -42,7 +42,7 @@ func (c *ColFixedStr512) AppendArr(vs [][512]byte) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for FixedStr512 . +// LowCardinality returns LowCardinality for FixedStr512. func (c *ColFixedStr512) LowCardinality() *ColLowCardinality[[512]byte] { return &ColLowCardinality[[512]byte]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr512_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr512_safe_gen.go index aa8ea319..b3cf5740 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr512_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr512_safe_gen.go @@ -53,3 +53,7 @@ func (c ColFixedStr512) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColFixedStr512) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr512_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr512_unsafe_gen.go index 970ca0f0..58bd05c2 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr512_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr512_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColFixedStr512) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColFixedStr512) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 512 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr64_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr64_gen.go index 38849ccd..ad317153 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr64_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr64_gen.go @@ -42,7 +42,7 @@ func (c *ColFixedStr64) AppendArr(vs [][64]byte) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for FixedStr64 . +// LowCardinality returns LowCardinality for FixedStr64. func (c *ColFixedStr64) LowCardinality() *ColLowCardinality[[64]byte] { return &ColLowCardinality[[64]byte]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr64_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr64_safe_gen.go index 89c1f24e..4af33c0f 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr64_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr64_safe_gen.go @@ -53,3 +53,7 @@ func (c ColFixedStr64) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColFixedStr64) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr64_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr64_unsafe_gen.go index 62ec09e5..34a10785 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr64_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr64_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColFixedStr64) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColFixedStr64) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 64 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr8_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr8_gen.go index a58723ee..a233df76 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr8_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr8_gen.go @@ -42,7 +42,7 @@ func (c *ColFixedStr8) AppendArr(vs [][8]byte) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for FixedStr8 . +// LowCardinality returns LowCardinality for FixedStr8. func (c *ColFixedStr8) LowCardinality() *ColLowCardinality[[8]byte] { return &ColLowCardinality[[8]byte]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr8_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr8_safe_gen.go index 086ea6fc..d830f164 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr8_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr8_safe_gen.go @@ -53,3 +53,7 @@ func (c ColFixedStr8) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColFixedStr8) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr8_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr8_unsafe_gen.go index 9991c06e..56cf28f7 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr8_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_fixedstr8_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColFixedStr8) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColFixedStr8) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_float32_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_float32_gen.go index 7031f111..01a35f30 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_float32_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_float32_gen.go @@ -42,7 +42,7 @@ func (c *ColFloat32) AppendArr(vs []float32) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for Float32 . +// LowCardinality returns LowCardinality for Float32. func (c *ColFloat32) LowCardinality() *ColLowCardinality[float32] { return &ColLowCardinality[float32]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_float32_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_float32_safe_gen.go index f400aef2..dde651fb 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_float32_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_float32_safe_gen.go @@ -54,3 +54,7 @@ func (c ColFloat32) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColFloat32) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_float32_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_float32_unsafe_gen.go index 2ded35f8..f1d20f40 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_float32_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_float32_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColFloat32) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColFloat32) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 32 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_float64_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_float64_gen.go index c210eb8d..4df408c0 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_float64_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_float64_gen.go @@ -42,7 +42,7 @@ func (c *ColFloat64) AppendArr(vs []float64) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for Float64 . +// LowCardinality returns LowCardinality for Float64. func (c *ColFloat64) LowCardinality() *ColLowCardinality[float64] { return &ColLowCardinality[float64]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_float64_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_float64_safe_gen.go index 68281aec..9bdaa816 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_float64_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_float64_safe_gen.go @@ -54,3 +54,7 @@ func (c ColFloat64) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColFloat64) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_float64_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_float64_unsafe_gen.go index f16fd396..16e29743 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_float64_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_float64_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColFloat64) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColFloat64) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 64 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_int128_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_int128_gen.go index 5e982c4f..3ff6e76f 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_int128_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_int128_gen.go @@ -42,7 +42,7 @@ func (c *ColInt128) AppendArr(vs []Int128) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for Int128 . +// LowCardinality returns LowCardinality for Int128. func (c *ColInt128) LowCardinality() *ColLowCardinality[Int128] { return &ColLowCardinality[Int128]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_int128_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_int128_safe_gen.go index 5902d3f9..b38a58da 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_int128_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_int128_safe_gen.go @@ -53,3 +53,7 @@ func (c ColInt128) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColInt128) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_int128_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_int128_unsafe_gen.go index c5862fff..80985010 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_int128_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_int128_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColInt128) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColInt128) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 128 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_int16_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_int16_gen.go index 212801d9..d2d0795c 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_int16_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_int16_gen.go @@ -42,7 +42,7 @@ func (c *ColInt16) AppendArr(vs []int16) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for Int16 . +// LowCardinality returns LowCardinality for Int16. func (c *ColInt16) LowCardinality() *ColLowCardinality[int16] { return &ColLowCardinality[int16]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_int16_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_int16_safe_gen.go index 75523a44..2c85f106 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_int16_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_int16_safe_gen.go @@ -53,3 +53,7 @@ func (c ColInt16) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColInt16) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_int16_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_int16_unsafe_gen.go index 6ba5e50c..b994fb41 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_int16_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_int16_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColInt16) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColInt16) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 16 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_int256_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_int256_gen.go index 5d7454b5..05c5073f 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_int256_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_int256_gen.go @@ -42,7 +42,7 @@ func (c *ColInt256) AppendArr(vs []Int256) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for Int256 . +// LowCardinality returns LowCardinality for Int256. func (c *ColInt256) LowCardinality() *ColLowCardinality[Int256] { return &ColLowCardinality[Int256]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_int256_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_int256_safe_gen.go index 0b9f8f1c..9c0589d6 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_int256_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_int256_safe_gen.go @@ -53,3 +53,7 @@ func (c ColInt256) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColInt256) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_int256_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_int256_unsafe_gen.go index 2433bc92..3c49eadb 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_int256_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_int256_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColInt256) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColInt256) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 256 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_int32_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_int32_gen.go index 46b09585..63d4cddc 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_int32_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_int32_gen.go @@ -42,7 +42,7 @@ func (c *ColInt32) AppendArr(vs []int32) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for Int32 . +// LowCardinality returns LowCardinality for Int32. func (c *ColInt32) LowCardinality() *ColLowCardinality[int32] { return &ColLowCardinality[int32]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_int32_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_int32_safe_gen.go index 52f78c14..54c6a2c2 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_int32_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_int32_safe_gen.go @@ -53,3 +53,7 @@ func (c ColInt32) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColInt32) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_int32_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_int32_unsafe_gen.go index b2e10256..8236c9d5 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_int32_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_int32_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColInt32) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColInt32) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 32 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_int64_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_int64_gen.go index 4c8875c1..01061c0c 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_int64_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_int64_gen.go @@ -42,7 +42,7 @@ func (c *ColInt64) AppendArr(vs []int64) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for Int64 . +// LowCardinality returns LowCardinality for Int64. func (c *ColInt64) LowCardinality() *ColLowCardinality[int64] { return &ColLowCardinality[int64]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_int64_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_int64_safe_gen.go index 400367d3..e2dba725 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_int64_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_int64_safe_gen.go @@ -53,3 +53,7 @@ func (c ColInt64) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColInt64) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_int64_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_int64_unsafe_gen.go index 5c6f2658..aa15d1ea 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_int64_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_int64_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColInt64) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColInt64) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 64 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_int8_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_int8_gen.go index 98a71a28..32f30039 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_int8_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_int8_gen.go @@ -42,7 +42,7 @@ func (c *ColInt8) AppendArr(vs []int8) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for Int8 . +// LowCardinality returns LowCardinality for Int8. func (c *ColInt8) LowCardinality() *ColLowCardinality[int8] { return &ColLowCardinality[int8]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_int8_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_int8_safe_gen.go index a79459d2..343b6132 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_int8_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_int8_safe_gen.go @@ -42,3 +42,7 @@ func (c ColInt8) EncodeColumn(b *Buffer) { b.Buf[i+start] = uint8(v[i]) } } + +func (c ColInt8) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_int8_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_int8_unsafe_gen.go index 1c62c7db..daa67152 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_int8_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_int8_unsafe_gen.go @@ -37,3 +37,12 @@ func (c ColInt8) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColInt8) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + src := *(*[]byte)(unsafe.Pointer(&v)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_interval.go b/vendor/github.com/ClickHouse/ch-go/proto/col_interval.go index 57bb2e39..c9ecb4c4 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_interval.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_interval.go @@ -110,3 +110,7 @@ func (c *ColInterval) Reset() { func (c ColInterval) EncodeColumn(b *Buffer) { c.Values.EncodeColumn(b) } + +func (c ColInterval) WriteColumn(w *Writer) { + c.Values.WriteColumn(w) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_ipv4_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_ipv4_gen.go index 4c7a0bc9..7559e79c 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_ipv4_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_ipv4_gen.go @@ -42,7 +42,7 @@ func (c *ColIPv4) AppendArr(vs []IPv4) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for IPv4 . +// LowCardinality returns LowCardinality for IPv4. func (c *ColIPv4) LowCardinality() *ColLowCardinality[IPv4] { return &ColLowCardinality[IPv4]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_ipv4_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_ipv4_safe_gen.go index 8b0b7902..cd687b2e 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_ipv4_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_ipv4_safe_gen.go @@ -53,3 +53,7 @@ func (c ColIPv4) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColIPv4) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_ipv4_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_ipv4_unsafe_gen.go index 5fc0b7c7..1039fc15 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_ipv4_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_ipv4_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColIPv4) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColIPv4) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 32 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_ipv6_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_ipv6_gen.go index 5907bd71..cff4ee95 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_ipv6_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_ipv6_gen.go @@ -42,7 +42,7 @@ func (c *ColIPv6) AppendArr(vs []IPv6) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for IPv6 . +// LowCardinality returns LowCardinality for IPv6. func (c *ColIPv6) LowCardinality() *ColLowCardinality[IPv6] { return &ColLowCardinality[IPv6]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_ipv6_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_ipv6_safe_gen.go index 9a5870d2..a2d317f9 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_ipv6_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_ipv6_safe_gen.go @@ -53,3 +53,7 @@ func (c ColIPv6) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColIPv6) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_ipv6_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_ipv6_unsafe_gen.go index 5650b498..e4fe0a02 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_ipv6_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_ipv6_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColIPv6) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColIPv6) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 128 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_json_str.go b/vendor/github.com/ClickHouse/ch-go/proto/col_json_str.go new file mode 100644 index 00000000..069a5260 --- /dev/null +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_json_str.go @@ -0,0 +1,164 @@ +package proto + +import ( + "github.com/go-faster/errors" +) + +const JSONStringSerializationVersion uint64 = 1 + +// ColJSONStr represents String column. +// +// Use ColJSONBytes for []bytes ColumnOf implementation. +type ColJSONStr struct { + Str ColStr +} + +// Append string to column. +func (c *ColJSONStr) Append(v string) { + c.Str.Append(v) +} + +// AppendBytes append byte slice as string to column. +func (c *ColJSONStr) AppendBytes(v []byte) { + c.Str.AppendBytes(v) +} + +func (c *ColJSONStr) AppendArr(v []string) { + c.Str.AppendArr(v) +} + +// Compile-time assertions for ColJSONStr. +var ( + _ ColInput = ColJSONStr{} + _ ColResult = (*ColJSONStr)(nil) + _ Column = (*ColJSONStr)(nil) + _ ColumnOf[string] = (*ColJSONStr)(nil) + _ Arrayable[string] = (*ColJSONStr)(nil) + _ StateEncoder = (*ColJSONStr)(nil) + _ StateDecoder = (*ColJSONStr)(nil) +) + +// Type returns ColumnType of JSON. +func (ColJSONStr) Type() ColumnType { + return ColumnTypeJSON +} + +// Rows returns count of rows in column. +func (c ColJSONStr) Rows() int { + return c.Str.Rows() +} + +// Reset resets data in row, preserving capacity for efficiency. +func (c *ColJSONStr) Reset() { + c.Str.Reset() +} + +// EncodeState encodes the JSON serialization version +func (c *ColJSONStr) EncodeState(b *Buffer) { + b.PutUInt64(JSONStringSerializationVersion) +} + +// EncodeColumn encodes String rows to *Buffer. +func (c ColJSONStr) EncodeColumn(b *Buffer) { + c.Str.EncodeColumn(b) +} + +// WriteColumn writes JSON rows to *Writer. +func (c ColJSONStr) WriteColumn(w *Writer) { + c.Str.WriteColumn(w) +} + +// ForEach calls f on each string from column. +func (c ColJSONStr) ForEach(f func(i int, s string) error) error { + return c.Str.ForEach(f) +} + +// First returns the first row of the column. +func (c ColJSONStr) First() string { + return c.Str.First() +} + +// Row returns row with number i. +func (c ColJSONStr) Row(i int) string { + return c.Str.Row(i) +} + +// RowBytes returns row with number i as byte slice. +func (c ColJSONStr) RowBytes(i int) []byte { + return c.Str.RowBytes(i) +} + +// ForEachBytes calls f on each string from column as byte slice. +func (c ColJSONStr) ForEachBytes(f func(i int, b []byte) error) error { + return c.Str.ForEachBytes(f) +} + +// DecodeState decodes the JSON serialization version +func (c *ColJSONStr) DecodeState(r *Reader) error { + jsonSerializationVersion, err := r.UInt64() + if err != nil { + return errors.Wrap(err, "failed to read json serialization version") + } + + if jsonSerializationVersion != JSONStringSerializationVersion { + return errors.Errorf("received invalid JSON string serialization version %d. Setting \"output_format_native_write_json_as_string\" must be enabled.", jsonSerializationVersion) + } + + return nil +} + +// DecodeColumn decodes String rows from *Reader. +func (c *ColJSONStr) DecodeColumn(r *Reader, rows int) error { + return c.Str.DecodeColumn(r, rows) +} + +// LowCardinality returns LowCardinality(JSON). +func (c *ColJSONStr) LowCardinality() *ColLowCardinality[string] { + return c.Str.LowCardinality() +} + +// Array is helper that creates Array(JSON). +func (c *ColJSONStr) Array() *ColArr[string] { + return c.Str.Array() +} + +// Nullable is helper that creates Nullable(JSON). +func (c *ColJSONStr) Nullable() *ColNullable[string] { + return c.Str.Nullable() +} + +// ColJSONBytes is ColJSONStr wrapper to be ColumnOf for []byte. +type ColJSONBytes struct { + ColJSONStr +} + +// Row returns row with number i. +func (c ColJSONBytes) Row(i int) []byte { + return c.RowBytes(i) +} + +// Append byte slice to column. +func (c *ColJSONBytes) Append(v []byte) { + c.AppendBytes(v) +} + +// AppendArr append slice of byte slices to column. +func (c *ColJSONBytes) AppendArr(v [][]byte) { + for _, s := range v { + c.Append(s) + } +} + +// Array is helper that creates Array(JSON). +func (c *ColJSONBytes) Array() *ColArr[[]byte] { + return &ColArr[[]byte]{ + Data: c, + } +} + +// Nullable is helper that creates Nullable(JSON). +func (c *ColJSONBytes) Nullable() *ColNullable[[]byte] { + return &ColNullable[[]byte]{ + Values: c, + } +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_low_cardinality.go b/vendor/github.com/ClickHouse/ch-go/proto/col_low_cardinality.go index ffed5809..4471fb89 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_low_cardinality.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_low_cardinality.go @@ -230,6 +230,41 @@ func (c *ColLowCardinality[T]) EncodeColumn(b *Buffer) { } } +func (c *ColLowCardinality[T]) WriteColumn(w *Writer) { + // Using pointer receiver as Prepare() is expected to be called before + // encoding. + + if c.Rows() == 0 { + // Skipping encoding entirely. + return + } + + w.ChainBuffer(func(b *Buffer) { + // Meta encodes whether reader should update + // low cardinality metadata and keys column type. + meta := cardinalityUpdateAll | int64(c.key) + b.PutInt64(meta) + + // Writing index (dictionary). + b.PutInt64(int64(c.index.Rows())) + }) + c.index.WriteColumn(w) + + w.ChainBuffer(func(b *Buffer) { + b.PutInt64(int64(c.Rows())) + }) + switch c.key { + case KeyUInt8: + c.keys8.WriteColumn(w) + case KeyUInt16: + c.keys16.WriteColumn(w) + case KeyUInt32: + c.keys32.WriteColumn(w) + case KeyUInt64: + c.keys64.WriteColumn(w) + } +} + func (c *ColLowCardinality[T]) Reset() { for k := range c.kv { delete(c.kv, k) @@ -286,17 +321,6 @@ func (c ColLowCardinality[T]) Rows() int { // Prepare column for ingestion. func (c *ColLowCardinality[T]) Prepare() error { - // Select minimum possible size for key. - if n := len(c.Values); n < math.MaxUint8 { - c.key = KeyUInt8 - } else if n < math.MaxUint16 { - c.key = KeyUInt16 - } else if uint32(n) < math.MaxUint32 { - c.key = KeyUInt32 - } else { - c.key = KeyUInt64 - } - // Allocate keys slice. c.keys = append(c.keys[:0], make([]int, len(c.Values))...) if c.kv == nil { @@ -317,6 +341,17 @@ func (c *ColLowCardinality[T]) Prepare() error { c.keys[i] = idx } + // Select minimum possible size for key. + if n := last; n < math.MaxUint8 { + c.key = KeyUInt8 + } else if n < math.MaxUint16 { + c.key = KeyUInt16 + } else if uint32(n) < math.MaxUint32 { + c.key = KeyUInt32 + } else { + c.key = KeyUInt64 + } + // Fill key column with key indexes. switch c.key { case KeyUInt8: diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_low_cardinality_raw.go b/vendor/github.com/ClickHouse/ch-go/proto/col_low_cardinality_raw.go index 665dc20c..99286345 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_low_cardinality_raw.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_low_cardinality_raw.go @@ -155,3 +155,28 @@ func (c ColLowCardinalityRaw) EncodeColumn(b *Buffer) { b.PutInt64(int64(k.Rows())) k.EncodeColumn(b) } + +func (c ColLowCardinalityRaw) WriteColumn(w *Writer) { + if c.Rows() == 0 { + // Skipping encoding entirely. + return + } + + w.ChainBuffer(func(b *Buffer) { + // Meta encodes whether reader should update + // low cardinality metadata and keys column type. + meta := cardinalityUpdateAll | int64(c.Key) + b.PutInt64(meta) + + // Writing index (dictionary). + b.PutInt64(int64(c.Index.Rows())) + }) + c.Index.WriteColumn(w) + + // Sequence of values as indexes in dictionary. + k := c.Keys() + w.ChainBuffer(func(b *Buffer) { + b.PutInt64(int64(k.Rows())) + }) + k.WriteColumn(w) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_map.go b/vendor/github.com/ClickHouse/ch-go/proto/col_map.go index 90925fb2..e27781dd 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_map.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_map.go @@ -164,6 +164,16 @@ func (c ColMap[K, V]) EncodeColumn(b *Buffer) { c.Values.EncodeColumn(b) } +func (c ColMap[K, V]) WriteColumn(w *Writer) { + if c.Rows() == 0 { + return + } + + c.Offsets.WriteColumn(w) + c.Keys.WriteColumn(w) + c.Values.WriteColumn(w) +} + // Prepare ensures Preparable column propagation. func (c ColMap[K, V]) Prepare() error { if v, ok := c.Keys.(Preparable); ok { @@ -181,18 +191,18 @@ func (c ColMap[K, V]) Prepare() error { // Infer ensures Inferable column propagation. func (c *ColMap[K, V]) Infer(t ColumnType) error { - elems := strings.Split(string(t.Elem()), ",") - if len(elems) != 2 { + keytype, valtype, hascomma := strings.Cut(string(t.Elem()), ",") + if !hascomma || strings.ContainsRune(valtype, ',') { return errors.New("invalid map type") } if v, ok := c.Keys.(Inferable); ok { - ct := ColumnType(strings.TrimSpace(elems[0])) + ct := ColumnType(strings.TrimSpace(keytype)) if err := v.Infer(ct); err != nil { return errors.Wrap(err, "infer data") } } if v, ok := c.Values.(Inferable); ok { - ct := ColumnType(strings.TrimSpace(elems[1])) + ct := ColumnType(strings.TrimSpace(valtype)) if err := v.Infer(ct); err != nil { return errors.Wrap(err, "infer data") } diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_map_go123.go b/vendor/github.com/ClickHouse/ch-go/proto/col_map_go123.go new file mode 100644 index 00000000..e9d83c58 --- /dev/null +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_map_go123.go @@ -0,0 +1,25 @@ +//go:build go1.23 + +package proto + +import "iter" + +// RowRange returns a [iter.Seq2] iterator over i-th row. +func (c ColMap[K, V]) RowRange(i int) iter.Seq2[K, V] { + var start int + end := int(c.Offsets[i]) + if i > 0 { + start = int(c.Offsets[i-1]) + } + + return func(yield func(K, V) bool) { + for idx := start; idx < end; idx++ { + if !yield( + c.Keys.Row(idx), + c.Values.Row(idx), + ) { + return + } + } + } +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_nothing.go b/vendor/github.com/ClickHouse/ch-go/proto/col_nothing.go index 1a825091..d72eeba6 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_nothing.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_nothing.go @@ -71,3 +71,7 @@ func (c ColNothing) EncodeColumn(b *Buffer) { } b.PutRaw(make([]byte, c)) } + +func (c ColNothing) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_nullable.go b/vendor/github.com/ClickHouse/ch-go/proto/col_nullable.go index 516245f0..fd3615d2 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_nullable.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_nullable.go @@ -117,6 +117,12 @@ func (c ColNullable[T]) Row(i int) Nullable[T] { } } +func (c *ColNullable[T]) Array() *ColArr[Nullable[T]] { + return &ColArr[Nullable[T]]{ + Data: c, + } +} + func (c *ColNullable[T]) Reset() { c.Nulls.Reset() c.Values.Reset() @@ -127,6 +133,11 @@ func (c ColNullable[T]) EncodeColumn(b *Buffer) { c.Values.EncodeColumn(b) } +func (c ColNullable[T]) WriteColumn(w *Writer) { + c.Nulls.WriteColumn(w) + c.Values.WriteColumn(w) +} + func (c ColNullable[T]) IsElemNull(i int) bool { if i < c.Rows() { return c.Nulls[i] == boolTrue diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_point.go b/vendor/github.com/ClickHouse/ch-go/proto/col_point.go index 0e1549ff..5d7834f8 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_point.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_point.go @@ -61,3 +61,8 @@ func (c ColPoint) EncodeColumn(b *Buffer) { c.X.EncodeColumn(b) c.Y.EncodeColumn(b) } + +func (c ColPoint) WriteColumn(w *Writer) { + c.X.WriteColumn(w) + c.Y.WriteColumn(w) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_raw_of.go b/vendor/github.com/ClickHouse/ch-go/proto/col_raw_of.go index 325a17b3..d56e3571 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_raw_of.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_raw_of.go @@ -82,3 +82,17 @@ func (c *ColRawOf[X]) DecodeColumn(r *Reader, rows int) error { } return nil } + +// WriteColumn write ColRawOf rows to *Writer. +func (c ColRawOf[X]) WriteColumn(w *Writer) { + if len(c) == 0 { + return + } + var x X + size := unsafe.Sizeof(x) // #nosec G103 + s := *(*slice)(unsafe.Pointer(&c)) // #nosec G103 + s.Len *= size + s.Cap *= size + src := *(*[]byte)(unsafe.Pointer(&s)) // #nosec G103 + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_str.go b/vendor/github.com/ClickHouse/ch-go/proto/col_str.go index 8f48ad7f..9786f0ee 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_str.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_str.go @@ -76,6 +76,20 @@ func (c ColStr) EncodeColumn(b *Buffer) { } } +// WriteColumn writes String rows to *Writer. +func (c ColStr) WriteColumn(w *Writer) { + buf := make([]byte, binary.MaxVarintLen64) + // Writing values from c.Buf directly might improve performance if [ColStr] contains a few rows of very long strings. + // However, most of the time it is quite opposite, so we copy data. + w.ChainBuffer(func(b *Buffer) { + for _, p := range c.Pos { + n := binary.PutUvarint(buf, uint64(p.End-p.Start)) + b.PutRaw(buf[:n]) + b.PutRaw(c.Buf[p.Start:p.End]) + } + }) +} + // ForEach calls f on each string from column. func (c ColStr) ForEach(f func(i int, s string) error) error { return c.ForEachBytes(func(i int, b []byte) error { diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_tuple.go b/vendor/github.com/ClickHouse/ch-go/proto/col_tuple.go index ac7ad6c8..7ee1bef0 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_tuple.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_tuple.go @@ -167,3 +167,9 @@ func (c ColTuple) EncodeColumn(b *Buffer) { v.EncodeColumn(b) } } + +func (c ColTuple) WriteColumn(w *Writer) { + for _, v := range c { + v.WriteColumn(w) + } +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_uint128_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_uint128_gen.go index e34f07e9..58b83a34 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_uint128_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_uint128_gen.go @@ -42,7 +42,7 @@ func (c *ColUInt128) AppendArr(vs []UInt128) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for UInt128 . +// LowCardinality returns LowCardinality for UInt128. func (c *ColUInt128) LowCardinality() *ColLowCardinality[UInt128] { return &ColLowCardinality[UInt128]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_uint128_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_uint128_safe_gen.go index bbe55dce..785cc9c4 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_uint128_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_uint128_safe_gen.go @@ -53,3 +53,7 @@ func (c ColUInt128) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColUInt128) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_uint128_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_uint128_unsafe_gen.go index 5989b5f3..4ee0aa00 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_uint128_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_uint128_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColUInt128) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColUInt128) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 128 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_uint16_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_uint16_gen.go index 7bc8ba63..4d41de4a 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_uint16_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_uint16_gen.go @@ -42,7 +42,7 @@ func (c *ColUInt16) AppendArr(vs []uint16) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for UInt16 . +// LowCardinality returns LowCardinality for UInt16. func (c *ColUInt16) LowCardinality() *ColLowCardinality[uint16] { return &ColLowCardinality[uint16]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_uint16_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_uint16_safe_gen.go index 219f3a6c..3d45fbef 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_uint16_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_uint16_safe_gen.go @@ -53,3 +53,7 @@ func (c ColUInt16) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColUInt16) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_uint16_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_uint16_unsafe_gen.go index d98d9534..126c46ec 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_uint16_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_uint16_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColUInt16) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColUInt16) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 16 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_uint256_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_uint256_gen.go index b68a119e..0c7d9122 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_uint256_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_uint256_gen.go @@ -42,7 +42,7 @@ func (c *ColUInt256) AppendArr(vs []UInt256) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for UInt256 . +// LowCardinality returns LowCardinality for UInt256. func (c *ColUInt256) LowCardinality() *ColLowCardinality[UInt256] { return &ColLowCardinality[UInt256]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_uint256_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_uint256_safe_gen.go index 68633e19..4dda2228 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_uint256_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_uint256_safe_gen.go @@ -53,3 +53,7 @@ func (c ColUInt256) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColUInt256) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_uint256_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_uint256_unsafe_gen.go index 02488d3f..df657cc9 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_uint256_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_uint256_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColUInt256) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColUInt256) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 256 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_uint32_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_uint32_gen.go index 41abca5b..4f205d22 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_uint32_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_uint32_gen.go @@ -42,7 +42,7 @@ func (c *ColUInt32) AppendArr(vs []uint32) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for UInt32 . +// LowCardinality returns LowCardinality for UInt32. func (c *ColUInt32) LowCardinality() *ColLowCardinality[uint32] { return &ColLowCardinality[uint32]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_uint32_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_uint32_safe_gen.go index 0bc7de95..11ebb114 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_uint32_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_uint32_safe_gen.go @@ -53,3 +53,7 @@ func (c ColUInt32) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColUInt32) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_uint32_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_uint32_unsafe_gen.go index 3ddfa760..fad9cb13 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_uint32_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_uint32_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColUInt32) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColUInt32) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 32 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_uint64_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_uint64_gen.go index 4521cd45..f3471d18 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_uint64_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_uint64_gen.go @@ -42,7 +42,7 @@ func (c *ColUInt64) AppendArr(vs []uint64) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for UInt64 . +// LowCardinality returns LowCardinality for UInt64. func (c *ColUInt64) LowCardinality() *ColLowCardinality[uint64] { return &ColLowCardinality[uint64]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_uint64_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_uint64_safe_gen.go index deea8a48..ada64d55 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_uint64_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_uint64_safe_gen.go @@ -53,3 +53,7 @@ func (c ColUInt64) EncodeColumn(b *Buffer) { offset += size } } + +func (c ColUInt64) WriteColumn(w *Writer) { + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_uint64_unsafe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_uint64_unsafe_gen.go index 664f80f0..bb73e18e 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_uint64_unsafe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_uint64_unsafe_gen.go @@ -43,3 +43,18 @@ func (c ColUInt64) EncodeColumn(b *Buffer) { dst := b.Buf[offset:] copy(dst, src) } + +func (c ColUInt64) WriteColumn(w *Writer) { + v := c + if len(v) == 0 { + return + } + const size = 64 / 8 + + s := *(*slice)(unsafe.Pointer(&v)) + s.Len *= size + s.Cap *= size + + src := *(*[]byte)(unsafe.Pointer(&s)) + w.ChainWrite(src) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_uint8_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_uint8_gen.go index 02c05161..e34a0675 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_uint8_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_uint8_gen.go @@ -42,7 +42,7 @@ func (c *ColUInt8) AppendArr(vs []uint8) { *c = append(*c, vs...) } -// LowCardinality returns LowCardinality for UInt8 . +// LowCardinality returns LowCardinality for UInt8. func (c *ColUInt8) LowCardinality() *ColLowCardinality[uint8] { return &ColLowCardinality[uint8]{ index: c, diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_uint8_safe_gen.go b/vendor/github.com/ClickHouse/ch-go/proto/col_uint8_safe_gen.go index ec5ff190..2acccc6a 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_uint8_safe_gen.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_uint8_safe_gen.go @@ -31,3 +31,7 @@ func (c ColUInt8) EncodeColumn(b *Buffer) { } b.Buf = append(b.Buf, v...) } + +func (c ColUInt8) WriteColumn(w *Writer) { + w.ChainWrite([]byte(c)) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_uuid_safe.go b/vendor/github.com/ClickHouse/ch-go/proto/col_uuid_safe.go index 8de94088..d74508b5 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_uuid_safe.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_uuid_safe.go @@ -34,3 +34,12 @@ func (c ColUUID) EncodeColumn(b *Buffer) { } bswap.Swap64(b.Buf) // BE <-> LE } + +// WriteColumn encodes ColUUID rows to *Writer. +func (c ColUUID) WriteColumn(w *Writer) { + if len(c) == 0 { + return + } + // Can't write UUID as-is: bswap is required. + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/col_uuid_unsafe.go b/vendor/github.com/ClickHouse/ch-go/proto/col_uuid_unsafe.go index 18fa73fc..877bc4d4 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/col_uuid_unsafe.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/col_uuid_unsafe.go @@ -47,3 +47,12 @@ func (c ColUUID) EncodeColumn(b *Buffer) { copy(dst, src) bswap.Swap64(dst) // BE <-> LE } + +// WriteColumn encodes ColUUID rows to *Writer. +func (c ColUUID) WriteColumn(w *Writer) { + if len(c) == 0 { + return + } + // Can't write UUID as-is: bswap is required. + w.ChainBuffer(c.EncodeColumn) +} diff --git a/vendor/github.com/ClickHouse/ch-go/proto/column.go b/vendor/github.com/ClickHouse/ch-go/proto/column.go index 1cdeb31b..4f0dbff0 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/column.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/column.go @@ -2,6 +2,7 @@ package proto import ( "fmt" + "strconv" "strings" "github.com/go-faster/errors" @@ -12,6 +13,7 @@ type ColInput interface { Type() ColumnType Rows() int EncodeColumn(b *Buffer) + WriteColumn(w *Writer) } // ColResult column. @@ -73,8 +75,8 @@ func (c ColumnType) Base() ColumnType { } var ( v = string(c) - start = strings.Index(v, "(") - end = strings.LastIndex(v, ")") + start = strings.IndexByte(v, '(') + end = strings.LastIndexByte(v, ')') ) if start <= 0 || end <= 0 || end < start { return c @@ -82,30 +84,64 @@ func (c ColumnType) Base() ColumnType { return c[:start] } +// reduces Decimal(P, ...) to Decimal32/Decimal64/Decimal128/Decimal256 +// returns c if any errors occur during conversion +func (c ColumnType) decimalDowncast() ColumnType { + if c.Base() != ColumnTypeDecimal { + return c + } + elem := c.Elem() + precStr, _, _ := strings.Cut(string(elem), ",") + precStr = strings.TrimSpace(precStr) + prec, err := strconv.Atoi(precStr) + if err != nil { + return c + } + switch { + case prec < 10: + return ColumnTypeDecimal32 + case prec < 19: + return ColumnTypeDecimal64 + case prec < 39: + return ColumnTypeDecimal128 + case prec < 77: + return ColumnTypeDecimal256 + default: + return c + } +} + // Conflicts reports whether two types conflict. func (c ColumnType) Conflicts(b ColumnType) bool { if c == b { return false } - { - a := c - if b.Base() == ColumnTypeEnum8 || b.Base() == ColumnTypeEnum16 { - a, b = b, a - } - switch { - case a.Base() == ColumnTypeEnum8 && b == ColumnTypeInt8: - return false - case a.Base() == ColumnTypeEnum16 && b == ColumnTypeInt16: - return false - } + cBase := c.Base() + bBase := b.Base() + if (cBase == ColumnTypeEnum8 && b == ColumnTypeInt8) || + (cBase == ColumnTypeEnum16 && b == ColumnTypeInt16) || + (bBase == ColumnTypeEnum8 && c == ColumnTypeInt8) || + (bBase == ColumnTypeEnum16 && c == ColumnTypeInt16) { + return false + } + if cBase == ColumnTypeDecimal || bBase == ColumnTypeDecimal { + return c.decimalDowncast() != b.decimalDowncast() } - if c.Base() != b.Base() { + + if cBase != bBase { return true } + switch cBase { + case ColumnTypeEnum8, ColumnTypeEnum16: + return false + } + if c.normalizeCommas() == b.normalizeCommas() { return false } - switch c.Base() { + switch cBase { + case ColumnTypeArray, ColumnTypeNullable, ColumnTypeLowCardinality: + return c.Elem().Conflicts(b.Elem()) case ColumnTypeDateTime, ColumnTypeDateTime64: // TODO(ernado): improve check return false @@ -149,8 +185,8 @@ func (c ColumnType) Elem() ColumnType { } var ( v = string(c) - start = strings.Index(v, "(") - end = strings.LastIndex(v, ")") + start = strings.IndexByte(v, '(') + end = strings.LastIndexByte(v, ')') ) if start <= 0 || end <= 0 || end < start { // No element. @@ -206,6 +242,7 @@ const ( ColumnTypeBool ColumnType = "Bool" ColumnTypeTuple ColumnType = "Tuple" ColumnTypeNullable ColumnType = "Nullable" + ColumnTypeDecimal ColumnType = "Decimal" ColumnTypeDecimal32 ColumnType = "Decimal32" ColumnTypeDecimal64 ColumnType = "Decimal64" ColumnTypeDecimal128 ColumnType = "Decimal128" @@ -213,6 +250,7 @@ const ( ColumnTypePoint ColumnType = "Point" ColumnTypeInterval ColumnType = "Interval" ColumnTypeNothing ColumnType = "Nothing" + ColumnTypeJSON ColumnType = "JSON" ) // colWrap wraps Column with type t. diff --git a/vendor/github.com/ClickHouse/ch-go/proto/date.go b/vendor/github.com/ClickHouse/ch-go/proto/date.go index 3f850327..44a3d58c 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/date.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/date.go @@ -33,6 +33,9 @@ func (d Date) String() string { // ToDate returns Date of time.Time. func ToDate(t time.Time) Date { + if t.IsZero() { + return 0 + } _, offset := t.Zone() return Date((t.Unix() + int64(offset)) / secInDay) } diff --git a/vendor/github.com/ClickHouse/ch-go/proto/date32.go b/vendor/github.com/ClickHouse/ch-go/proto/date32.go index 6c1330f7..e67f69d2 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/date32.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/date32.go @@ -25,6 +25,9 @@ func (d Date32) String() string { // ToDate32 returns Date32 of time.Time. func ToDate32(t time.Time) Date32 { + if t.IsZero() { + return 0 + } _, offset := t.Zone() return Date32((t.Unix() + int64(offset)) / secInDay) } diff --git a/vendor/github.com/ClickHouse/ch-go/proto/datetime.go b/vendor/github.com/ClickHouse/ch-go/proto/datetime.go index 4917339e..a7f48e33 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/datetime.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/datetime.go @@ -15,9 +15,6 @@ func ToDateTime(t time.Time) DateTime { // Time returns DateTime as time.Time. func (d DateTime) Time() time.Time { - if d == 0 { - return time.Time{} - } // https://clickhouse.com/docs/en/sql-reference/data-types/datetime/#usage-remarks // ClickHouse stores UTC timestamps that are timezone-agnostic. return time.Unix(int64(d), 0) diff --git a/vendor/github.com/ClickHouse/ch-go/proto/datetime64.go b/vendor/github.com/ClickHouse/ch-go/proto/datetime64.go index 6d2a9997..f60ba49b 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/datetime64.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/datetime64.go @@ -57,9 +57,6 @@ func ToDateTime64(t time.Time, p Precision) DateTime64 { // Time returns DateTime64 as time.Time. func (d DateTime64) Time(p Precision) time.Time { - if d == 0 { - return time.Time{} - } nsec := int64(d) * p.Scale() return time.Unix(nsec/1e9, nsec%1e9) } diff --git a/vendor/github.com/ClickHouse/ch-go/proto/feature.go b/vendor/github.com/ClickHouse/ch-go/proto/feature.go index b06deac7..68cdffa5 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/feature.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/feature.go @@ -32,6 +32,7 @@ const ( FeatureAddendum Feature = 54458 FeatureParameters Feature = 54459 FeatureServerQueryTimeInProgress Feature = 54460 + FeatureJSONStrings Feature = 54475 ) // Version reports protocol version when Feature was introduced. diff --git a/vendor/github.com/ClickHouse/ch-go/proto/feature_enum.go b/vendor/github.com/ClickHouse/ch-go/proto/feature_enum.go index 95b453f3..280aa077 100644 --- a/vendor/github.com/ClickHouse/ch-go/proto/feature_enum.go +++ b/vendor/github.com/ClickHouse/ch-go/proto/feature_enum.go @@ -7,8 +7,8 @@ import ( "strings" ) -const _FeatureName = "TempTablesBlockInfoTimezoneQuotaKeyInClientInfoDisplayNameVersionPatchServerLogsColumnDefaultsMetadataClientWriteInfoSettingsSerializedAsStringsInterServerSecretOpenTelemetryXForwardedForInClientInfoRefererInClientInfoDistributedDepthQueryStartTimeProfileEventsParallelReplicasCustomSerializationQuotaKeyParametersServerQueryTimeInProgress" -const _FeatureLowerName = "temptablesblockinfotimezonequotakeyinclientinfodisplaynameversionpatchserverlogscolumndefaultsmetadataclientwriteinfosettingsserializedasstringsinterserversecretopentelemetryxforwardedforinclientinforefererinclientinfodistributeddepthquerystarttimeprofileeventsparallelreplicascustomserializationquotakeyparametersserverquerytimeinprogress" +const _FeatureName = "TempTablesBlockInfoTimezoneQuotaKeyInClientInfoDisplayNameVersionPatchServerLogsColumnDefaultsMetadataClientWriteInfoSettingsSerializedAsStringsInterServerSecretOpenTelemetryXForwardedForInClientInfoRefererInClientInfoDistributedDepthQueryStartTimeProfileEventsParallelReplicasCustomSerializationQuotaKeyParametersServerQueryTimeInProgressJSONStrings" +const _FeatureLowerName = "temptablesblockinfotimezonequotakeyinclientinfodisplaynameversionpatchserverlogscolumndefaultsmetadataclientwriteinfosettingsserializedasstringsinterserversecretopentelemetryxforwardedforinclientinforefererinclientinfodistributeddepthquerystarttimeprofileeventsparallelreplicascustomserializationquotakeyparametersserverquerytimeinprogressjsonstrings" var _FeatureMap = map[Feature]string{ 50264: _FeatureName[0:10], @@ -33,6 +33,7 @@ var _FeatureMap = map[Feature]string{ 54458: _FeatureName[296:304], 54459: _FeatureName[304:314], 54460: _FeatureName[314:339], + 54475: _FeatureName[339:350], } func (i Feature) String() string { @@ -68,9 +69,10 @@ func _FeatureNoOp() { _ = x[FeatureQuotaKey-(54458)] _ = x[FeatureParameters-(54459)] _ = x[FeatureServerQueryTimeInProgress-(54460)] + _ = x[FeatureJSONStrings-(54475)] } -var _FeatureValues = []Feature{FeatureTempTables, FeatureBlockInfo, FeatureTimezone, FeatureQuotaKeyInClientInfo, FeatureDisplayName, FeatureVersionPatch, FeatureServerLogs, FeatureColumnDefaultsMetadata, FeatureClientWriteInfo, FeatureSettingsSerializedAsStrings, FeatureInterServerSecret, FeatureOpenTelemetry, FeatureXForwardedForInClientInfo, FeatureRefererInClientInfo, FeatureDistributedDepth, FeatureQueryStartTime, FeatureProfileEvents, FeatureParallelReplicas, FeatureCustomSerialization, FeatureQuotaKey, FeatureParameters, FeatureServerQueryTimeInProgress} +var _FeatureValues = []Feature{FeatureTempTables, FeatureBlockInfo, FeatureTimezone, FeatureQuotaKeyInClientInfo, FeatureDisplayName, FeatureVersionPatch, FeatureServerLogs, FeatureColumnDefaultsMetadata, FeatureClientWriteInfo, FeatureSettingsSerializedAsStrings, FeatureInterServerSecret, FeatureOpenTelemetry, FeatureXForwardedForInClientInfo, FeatureRefererInClientInfo, FeatureDistributedDepth, FeatureQueryStartTime, FeatureProfileEvents, FeatureParallelReplicas, FeatureCustomSerialization, FeatureQuotaKey, FeatureParameters, FeatureServerQueryTimeInProgress, FeatureJSONStrings} var _FeatureNameToValueMap = map[string]Feature{ _FeatureName[0:10]: FeatureTempTables, @@ -117,6 +119,8 @@ var _FeatureNameToValueMap = map[string]Feature{ _FeatureLowerName[304:314]: FeatureParameters, _FeatureName[314:339]: FeatureServerQueryTimeInProgress, _FeatureLowerName[314:339]: FeatureServerQueryTimeInProgress, + _FeatureName[339:350]: FeatureJSONStrings, + _FeatureLowerName[339:350]: FeatureJSONStrings, } var _FeatureNames = []string{ @@ -142,6 +146,7 @@ var _FeatureNames = []string{ _FeatureName[296:304], _FeatureName[304:314], _FeatureName[314:339], + _FeatureName[339:350], } // FeatureString retrieves an enum value from the enum constants string name. diff --git a/vendor/github.com/ClickHouse/ch-go/proto/writer.go b/vendor/github.com/ClickHouse/ch-go/proto/writer.go new file mode 100644 index 00000000..c3ba4c4a --- /dev/null +++ b/vendor/github.com/ClickHouse/ch-go/proto/writer.go @@ -0,0 +1,73 @@ +package proto + +import ( + "io" + "net" +) + +// Writer is a column writer. +// +// It helps to reduce memory footprint by writing column using vector I/O. +type Writer struct { + conn io.Writer + + buf *Buffer + bufOffset int + needCut bool + + vec net.Buffers +} + +// NewWriter creates new [Writer]. +func NewWriter(conn io.Writer, buf *Buffer) *Writer { + w := &Writer{ + conn: conn, + buf: buf, + vec: make(net.Buffers, 0, 16), + } + return w +} + +// ChainWrite adds buffer to the vector to write later. +// +// Passed byte slice may be captured until [Writer.Flush] is called. +func (w *Writer) ChainWrite(data []byte) { + w.cutBuffer() + w.vec = append(w.vec, data) +} + +// ChainBuffer creates a temporary buffer and adds it to the vector to write later. +// +// Data is not written immediately, call [Writer.Flush] to flush data. +// +// NB: do not retain buffer. +func (w *Writer) ChainBuffer(cb func(*Buffer)) { + cb(w.buf) +} + +func (w *Writer) cutBuffer() { + newOffset := len(w.buf.Buf) + data := w.buf.Buf[w.bufOffset:newOffset:newOffset] + if len(data) == 0 { + return + } + w.bufOffset = newOffset + w.vec = append(w.vec, data) +} + +func (w *Writer) reset() { + w.bufOffset = 0 + w.needCut = false + w.buf.Reset() + // Do not hold references, to avoid memory leaks. + clear(w.vec) + w.vec = w.vec[:0] +} + +// Flush flushes all data to writer. +func (w *Writer) Flush() (n int64, err error) { + w.cutBuffer() + n, err = w.vec.WriteTo(w.conn) + w.reset() + return n, err +} diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/.gitignore b/vendor/github.com/ClickHouse/clickhouse-go/v2/.gitignore index 108aa399..2e8e75ba 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/.gitignore +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/.gitignore @@ -27,6 +27,7 @@ _testmain.go coverage.txt .idea/** +.vscode/** dev/* .run/** @@ -36,3 +37,6 @@ vendor .terraform.lock.hcl **/.terraform* pipeline.auto.tfvars +*.tfvars + +.env diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/.golangci.yaml b/vendor/github.com/ClickHouse/clickhouse-go/v2/.golangci.yaml index 23e116a4..44520afc 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/.golangci.yaml +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/.golangci.yaml @@ -66,6 +66,6 @@ linters: - gofmt - govet - ineffassign - - importas + - imports - misspell - staticcheck diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/CHANGELOG.md b/vendor/github.com/ClickHouse/clickhouse-go/v2/CHANGELOG.md index bcfe72fd..6337527c 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/CHANGELOG.md +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/CHANGELOG.md @@ -1,3 +1,464 @@ +# v2.34.0, 2025-04-01 + +## What's Changed + +### Enhancements 🎉 +* allow appending to Decimal column with `string` by @rutaka-n in https://github.com/ClickHouse/clickhouse-go/pull/1532 +* Enhancements for decimal strings by @SpencerTorres in https://github.com/ClickHouse/clickhouse-go/pull/1535 +### Bug fixes 🐛 +* Add length check to `FixedString` to prevent panic by @SpencerTorres in https://github.com/ClickHouse/clickhouse-go/pull/1534 +### Other Changes 🛠 +* chore: replace github.com/pkg/errors with stdlib by @hazzik in https://github.com/ClickHouse/clickhouse-go/pull/1530 + +## New Contributors +* @hazzik made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1530 + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.33.1...v2.34.0 + +# v2.33.1, 2025-03-18 + +## What's Changed +### Bug fixes 🐛 +* fix concurrent map write errors with context by @SpencerTorres in https://github.com/ClickHouse/clickhouse-go/pull/1523 + + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.33.0...v2.33.1 + +# v2.33.0, 2025-03-07 + +## What's Changed +### Enhancements 🎉 +* Add handling for nested structs in named tuples by @Exca-DK in https://github.com/ClickHouse/clickhouse-go/pull/1500 +* Add option to control MaxConnsPerHost for http.Transport by @holycheater in https://github.com/ClickHouse/clickhouse-go/pull/1517 + +### Bug fixes 🐛 +* fix ConnOpenRandom strategy, issue: #1509 by @PalanQu in https://github.com/ClickHouse/clickhouse-go/pull/1510 +* fix: preserve nil elements in map by @SpencerTorres in https://github.com/ClickHouse/clickhouse-go/pull/1516 + + +## New Contributors +* @PalanQu made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1510 +* @Exca-DK made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1500 +* @holycheater made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1517 + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.32.2...v2.33.0 + +# v2.32.2, 2025-02-20 + +## What's Changed +### Bug Fixes 🐛 +* fix: decode prefix of nested columns in Variant by @SpencerTorres in https://github.com/ClickHouse/clickhouse-go/pull/1506 + + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.32.1...v2.32.2 + +# v2.32.1, 2025-02-17 + +## What's Changed +### Bug Fixes 🐛 +* fix: enable Array() support for Variant, Dynamic, JSON by @SpencerTorres in https://github.com/ClickHouse/clickhouse-go/pull/1501 + + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.32.0...v2.32.1 + +# v2.32.0, 2025-02-14 + +## What's Changed + +### Enhancements 🎉 +* Add LZ4HC compression method by @SpencerTorres in https://github.com/ClickHouse/clickhouse-go/pull/1499 + +### Performance 🏎️ +* Removed ~1MB of memory usage in compressor by @pablomatiasgomez and @SpencerTorres in https://github.com/ClickHouse/clickhouse-go/pull/1499 + +### Bug fixes 🐛 +* Fixed potential security vulnerability in compression block header length overflow by @santrancisco https://github.com/ClickHouse/clickhouse-go/pull/1499 + +### Other Changes 🛠 +* update compressor functions by @SpencerTorres in https://github.com/ClickHouse/clickhouse-go/pull/1499 +* change container provider, verify close conn error in tests by @pablomatiasgomez in https://github.com/ClickHouse/clickhouse-go/pull/1497 + +## New Contributors +* @pablomatiasgomez made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1497 + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.31.0...v2.32.0 + +# v2.31.0, 2025-02-10 + +## What's Changed + +### Enhancements 🎉 +* `clickhouse.JSON` Serializer interface by @SpencerTorres in https://github.com/ClickHouse/clickhouse-go/pull/1491 +* use unsafe.Slice/unsafe.StringData by @serprex in https://github.com/ClickHouse/clickhouse-go/pull/1493 + +### Other Changes 🛠 +* JSON read/write benchmarks by @SpencerTorres in https://github.com/ClickHouse/clickhouse-go/pull/1490 + +## New Contributors +* @serprex made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1493 + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.30.3...2.31.0 + +# v2.30.3, 2025-02-03 + +## What's Changed +### Other Changes 🛠 +* fix enum parse logic when its last index is zero by @lobachpavel in https://github.com/ClickHouse/clickhouse-go/pull/1487 + +## New Contributors +* @lobachpavel made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1487 + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.30.2...v2.30.3 + +# v2.30.2, 2025-01-30 + +## What's Changed +### Bug fixes 🐛 +* Handle json tag without name override by @matevzmihalic in https://github.com/ClickHouse/clickhouse-go/pull/1478 +* fix: JSON NestedMap + add tests by @SpencerTorres in https://github.com/ClickHouse/clickhouse-go/pull/1482 + +## New Contributors +* @matevzmihalic made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1478 + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.30.1...v2.30.2 + +# v2.30.1, 2025-01-17 + +## What's Changed +### Enhancements 🎉 +* [improvement] Some performance related changes to evaluate by @mdonkers in https://github.com/ClickHouse/clickhouse-go/pull/1426 +* Add Variant Type by @SpencerTorres in https://github.com/ClickHouse/clickhouse-go/pull/1453 +* Add Dynamic Type by @SpencerTorres in https://github.com/ClickHouse/clickhouse-go/pull/1454 +* Add JSON Type by @SpencerTorres in https://github.com/ClickHouse/clickhouse-go/pull/1455 +* stdlib sql return precision for DateTime64 by @SpencerTorres in https://github.com/ClickHouse/clickhouse-go/pull/1469 + +### Fixes 🐛 +* [FIX] Minor updates by @barkhayot in https://github.com/ClickHouse/clickhouse-go/pull/1451 +* Fix file descriptor leak in release utility script by @fengjun2016 in https://github.com/ClickHouse/clickhouse-go/pull/1460 +* Remove forced string conversions for Tuple by @SpencerTorres in https://github.com/ClickHouse/clickhouse-go/pull/1465 + +### Other Changes 🛠 +* [Chore] Use defer to close rows in examples by @hayotbisonai in https://github.com/ClickHouse/clickhouse-go/pull/1431 +* Regenerate certificates used in tests by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1441 + + +## New Contributors +* @hayotbisonai made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1431 +* @barkhayot made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1451 +* @fengjun2016 made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1460 +* @SpencerTorres made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1453 + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.30.0...v2.30.1 + +# v2.30.0, 2024-10-16 + +## What's Changed +### Enhancements 🎉 +* Extended support for HTTP proxy in driver options by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1424 +* Default implementation of column.IterableOrderedMap by @earwin in https://github.com/ClickHouse/clickhouse-go/pull/1417 +### Fixes 🐛 +* Fix serialization for slices of OrderedMap/IterableOrderedMap (#1365) by @earwin in https://github.com/ClickHouse/clickhouse-go/pull/1418 +* Retry on broken pipe in batch by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1423 +### Other Changes 🛠 +* Add 'clickhouse-go-rows-utils' to third-party libraries by @EpicStep in https://github.com/ClickHouse/clickhouse-go/pull/1413 + +## New Contributors +* @earwin made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1418 + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.29.0...v2.30.0 + +# v2.29.0, 2024-09-24 + +## What's Changed +### Enhancements 🎉 +* Add ability to handle context cancellations for TCP protocol by @tinybit in https://github.com/ClickHouse/clickhouse-go/pull/1389 +### Other Changes 🛠 +* Add Examples for batch.Column(n).AppendRow in columnar_insert.go by @achmad-dev in https://github.com/ClickHouse/clickhouse-go/pull/1410 + +## New Contributors +* @achmad-dev made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1410 +* @tinybit made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1389 + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.28.3...v2.29.0 + +# v2.28.3, 2024-09-12 + +## What's Changed +### Other Changes 🛠 +* Revert the minimum required Go version to 1.21 by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1405 + + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.28.2...v2.28.3 + +# v2.28.2, 2024-08-30 + +## What's Changed +### Fixes 🐛 +* Validate connection in bad state before query execution in the stdlib database/sql driver by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1396 +### Other Changes 🛠 +* Update README with newer Go versions by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1393 + + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.28.1...v2.28.2 + +# v2.28.1, 2024-08-27 + +## What's Changed +### Fixes 🐛 +* Recognize empty strings as a valid enum key by @genzgd in https://github.com/ClickHouse/clickhouse-go/pull/1387 +### Other Changes 🛠 +* ClickHouse 24.8 by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1385 + + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.28.0...v2.28.1 + +# v2.28.0, 2024-08-23 + +## What's Changed +### Fixes 🐛 +* Fix Enum column definition parse logic to match ClickHouse spec by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1380 +* Fix support custom serialization in Nested type by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1381 +* Fix panic on nil map append by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1383 +### Other Changes 🛠 +* Remove test coverage for deprecated Object('JSON') type by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1377 +* Remove JSON type use from a context use example by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1379 +* Make sure non-secure port is used during readiness check by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1382 +* Deprecate Go 1.21 ended support and require Go 1.22 by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1378 + + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.27.2...v2.28.0 + +# v2.27.2, 2024-08-20 + +## What's Changed +### Enhancements 🎉 +* Optimize Date/Date32 scan by @ShoshinNikita in https://github.com/ClickHouse/clickhouse-go/pull/1374 +### Fixes 🐛 +* Fix column list parsing for multiline INSERT statements by @Fiery-Fenix in https://github.com/ClickHouse/clickhouse-go/pull/1373 + +## New Contributors +* @Fiery-Fenix made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1373 +* @ShoshinNikita made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1374 + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.27.1...v2.27.2 + +# v2.27.1, 2024-08-05 + +## What's Changed +### Fixes 🐛 +* Fix INSERT statement normalization match backtick table name by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1366 + + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.27.0...v2.27.1 + +# v2.27.0, 2024-08-01 + +## Breaking change notice + +v2.25.0 was released with a breaking change in https://github.com/ClickHouse/clickhouse-go/pull/1306. Please review your implementation. + +## What's Changed +### Enhancements 🎉 +* Unpack value of indirect types in array column to support nested structures in interfaced slices/arrays by @jmaicher in https://github.com/ClickHouse/clickhouse-go/pull/1350 +### Fixes 🐛 +* Common HTTP insert query normalization by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1341 +### Other Changes 🛠 +* Update examples std json by @xjeway in https://github.com/ClickHouse/clickhouse-go/pull/1240 +* ClickHouse 24.6 by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1352 +* ClickHouse 24.7 release by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1363 +* Update CHANGELOG with a breaking change note by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1364 + +## New Contributors +* @xjeway made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1240 + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.26.0...v2.27.0 + +# v2.26.0, 2024-06-25 + +## What's Changed +### Enhancements 🎉 +* Reintroduce the random connection strategy by @larry-cdn77 in https://github.com/ClickHouse/clickhouse-go/pull/1313 +* Make custom debug log function on-par with the built-in one by @vespian in https://github.com/ClickHouse/clickhouse-go/pull/1317 +* Remove date overflow check as it's normalised by ClickHouse server by @gogingersnap777 in https://github.com/ClickHouse/clickhouse-go/pull/1315 +* Batch: impl `Columns() []column.Interface` method by @egsam98 in https://github.com/ClickHouse/clickhouse-go/pull/1277 +### Fixes 🐛 +* Fix rows.Close do not return too early by @yujiarista in https://github.com/ClickHouse/clickhouse-go/pull/1314 +* Setting `X-Clickhouse-SSL-Certificate-Auth` header correctly given `X-ClickHouse-Key` by @gogingersnap777 in https://github.com/ClickHouse/clickhouse-go/pull/1316 +* Retry on network errors and fix retries on async inserts with `database/sql` interface by @tommyzli in https://github.com/ClickHouse/clickhouse-go/pull/1330 +* BatchInsert parentheses issue fix by @ramzes642 in https://github.com/ClickHouse/clickhouse-go/pull/1327 +### Other Changes 🛠 +* ClickHouse 24.5 by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1319 +* Align `allow_suspicious_low_cardinality_types` and `allow_suspicious_low_cardinality_types ` settings in tests due to ClickHouse Cloud incompatibility by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1331 +* Use HTTPs scheme in std connection failover tests by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1332 + +## New Contributors +* @larry-cdn77 made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1313 +* @vespian made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1317 +* @gogingersnap777 made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1315 +* @yujiarista made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1314 +* @egsam98 made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1277 +* @tommyzli made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1330 +* @ramzes642 made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1327 + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.25.0...v2.26.0 + +# v2.25.0, 2024-05-28 + +## What's Changed +### Breaking Changes 🚨 +* Add a compatibility layer for a database/sql driver to work with sql.NullString and ClickHouse nullable column by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1306 +### Other Changes 🛠 +* Use Go 1.22 in head tests by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1305 +* Skip flaky 1127 test by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1307 + + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.24.0...v2.25.0 + +# v2.24.0, 2024-05-08 + +## What's Changed +### Enhancements 🎉 +* Always compress responses when the client compression is on by @zhkvia in https://github.com/ClickHouse/clickhouse-go/pull/1286 +* Optional flag to close query with flush by @hongker in https://github.com/ClickHouse/clickhouse-go/pull/1276 +### Fixes 🐛 +* Fix prepare batch does not break on `values` substring in table name by @Wang in https://github.com/ClickHouse/clickhouse-go/pull/1290 +* Fix nil checks when appending slices of pointers by @markandrus in https://github.com/ClickHouse/clickhouse-go/pull/1283 +### Other Changes 🛠 +* Don't recreate keys from LC columns from direct stream by @genzgd in https://github.com/ClickHouse/clickhouse-go/pull/1291 + +## New Contributors +* @zhkvia made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1286 + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.23.2...v2.24.0 + +# v2.23.2, 2024-04-25 + +## What's Changed +### Fixes 🐛 +* Fixed panic on concurrent context key map write by @Wang in https://github.com/ClickHouse/clickhouse-go/pull/1284 +### Other Changes 🛠 +* Fix ClickHouse Terraform provider version by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1285 + +## New Contributors +* @Wang made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1284 + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.23.1...v2.23.2 + +# v2.23.1, 2024-04-15 + +## What's Changed +### Fixes 🐛 +* Zero-value timestamp to be formatted as toDateTime(0) in bind by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1260 +### Other Changes 🛠 +* Update #1127 test case to reproduce a progress handle when exception is thrown by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1259 +* Set max parallel for GH jobs by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1261 +* Ensure test container termination by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1274 + + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.23.0...v2.23.1 + +# v2.23.0, 2024-03-27 + +## What's Changed +### Enhancements 🎉 +* Implement `ConnBeginTx` as replacement for deprecated `Begin` by @FelipeLema in https://github.com/ClickHouse/clickhouse-go/pull/1255 +### Other Changes 🛠 +* Align error message assertion to new missing custom setting error formatting by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1256 +* CI chores by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1258 + +## New Contributors +* @FelipeLema made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1255 + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.22.4...v2.23.0 + +# v2.22.4, 2024-03-25 + +## What's Changed +### Fixes 🐛 +* Fix column name with parantheses handle in prepare batch by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1252 +### Other Changes 🛠 +* Fix TestBatchAppendRows work different on cloud by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1251 + + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.22.3...v2.22.4 + +# v2.22.3, 2024-03-25 + +## What's Changed +### Fixes 🐛 +* Fix panic on tuple scan on []any by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1249 +### Other Changes 🛠 +* Error channel deadlock fix test case by @threadedstream in https://github.com/ClickHouse/clickhouse-go/pull/1239 +* Add a test case for #1127 by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1242 +* Run cloud/head jobs when label by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1250 + + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.22.2...v2.22.3 + +# v2.22.2, 2024-03-18 + +## What's Changed +### Fixes 🐛 +* Fix for Map columns with Enums by @leklund in https://github.com/ClickHouse/clickhouse-go/pull/1236 + +## New Contributors +* @leklund made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1236 + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.22.1...v2.22.2 + +# v2.22.1, 2024-03-18 + +## What's Changed +### Fixes 🐛 +* Make errors channel buffered inside query() by @threadedstream in https://github.com/ClickHouse/clickhouse-go/pull/1237 + + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.22.0...v2.22.1 + +# v2.20.0, 2024-02-28 + +## What's Changed +### Enhancements 🎉 +* Support [n]byte/[]byte type Scan/Append to FixedString column by @rogeryk in https://github.com/ClickHouse/clickhouse-go/pull/1205 +### Other Changes 🛠 +* Enable cloud tests by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1202 +* Removed LowCardinality(UInt64) tests that caused allow_suspicious_low_cardinality_types related error by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1206 + + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.19.0...v2.20.0 + +# v2.19.0, 2024-02-26 + +## What's Changed +### Enhancements 🎉 +* handle ctx.Done() in acquire by @threadedstream in https://github.com/ClickHouse/clickhouse-go/pull/1199 +### Fixes 🐛 +* Fix panic on format nil *fmt.Stringer type value by @zaneli in https://github.com/ClickHouse/clickhouse-go/pull/1200 +### Other Changes 🛠 +* Update Go/ClickHouse versions by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1201 + +## New Contributors +* @threadedstream made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1199 +* @zaneli made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1200 + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.18.0...v2.19.0 + +# v2.18.0, 2024-02-01 + +## What's Changed +### Enhancements 🎉 +* Add WithAllocBufferColStrProvider string column allocator for batch insert performance boost by @hongker in https://github.com/ClickHouse/clickhouse-go/pull/1181 +### Fixes 🐛 +* Fix bind for seconds scale DateTime by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1184 +### Other Changes 🛠 +* resolves #1163 debugF function is not respected by @omurbekjk in https://github.com/ClickHouse/clickhouse-go/pull/1166 + +## New Contributors +* @omurbekjk made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1166 +* @hongker made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1181 + +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.17.1...v2.18.0 + # v2.17.1, 2023-12-27 ## What's Changed @@ -7,8 +468,8 @@ ## New Contributors * @nityanandagohain made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1168 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.17.0...v2.17.1 - +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.17.0...v2.17.1 + # v2.17.0, 2023-12-21 ## What's Changed @@ -23,8 +484,8 @@ * @yogasw made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1156 * @aramperes made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1153 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.16.0...v2.17.0 - +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.16.0...v2.17.0 + # v2.16.0, 2023-12-01 ## What's Changed @@ -37,8 +498,8 @@ * @phil-schreiber made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1148 * @deankarn made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1144 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.15.0...v2.16.0 - +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.15.0...v2.16.0 + # v2.14.3, 2023-10-12 ## What's Changed @@ -53,8 +514,8 @@ * @rdaniels6813 made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1111 * @rutaka-n made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1095 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.14.2...v2.14.3 - +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.14.2...v2.14.3 + # v2.14.2, 2023-10-04 ## What's Changed @@ -71,8 +532,8 @@ * @beck917 made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1103 * @srikanthccv made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1085 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.14.1...v2.14.2 - +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.14.1...v2.14.2 + # v2.14.1, 2023-09-14 ## What's Changed @@ -82,8 +543,8 @@ ## New Contributors * @hanjm made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1084 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.14.0...v2.14.1 - +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.14.0...v2.14.1 + # v2.14.0, 2023-09-12 ## What's Changed @@ -104,8 +565,8 @@ * @alrs made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1081 * @testwill made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1080 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.13.4...v2.14 - +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.13.4...v2.14 + # v2.13.4, 2023-08-30 ## What's Changed @@ -113,8 +574,8 @@ * fix(proto): add TCP protocol version in query packet by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1077 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.13.3...v2.13.4 - +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.13.3...v2.13.4 + # v2.13.3, 2023-08-23 ## What's Changed @@ -122,8 +583,8 @@ * fix(column.json): fix bool type handling by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1073 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.13.2...v2.13.3 - +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.13.2...v2.13.3 + # v2.13.2, 2023-08-18 ## What's Changed @@ -133,8 +594,8 @@ * Test against latest and head CH by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1060 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.13.1...v2.13.2 - +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.13.1...v2.13.2 + # v2.13.1, 2023-08-17 ## What's Changed @@ -142,8 +603,8 @@ * fix: native format Date32 representation by @jkaflik in https://github.com/ClickHouse/clickhouse-go/pull/1069 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.13.0...v2.13.1 - +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.13.0...v2.13.1 + # v2.13.0, 2023-08-10 ## What's Changed @@ -158,8 +619,8 @@ ## New Contributors * @ValManP made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1051 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.12.1...v2.13.0 - +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.12.1...v2.13.0 + # v2.12.1, 2023-08-02 ## What's Changed @@ -178,8 +639,8 @@ * @jmaicher made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1046 * @RoryCrispin made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1056 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.12.0...v2.12.1 - +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.12.0...v2.12.1 + # v2.12.0, 2023-07-27 ## What's Changed @@ -191,8 +652,8 @@ ## New Contributors * @sentanos made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1042 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.11.0...v2.12.0 - +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.11.0...v2.12.0 + # v2.11.0, 2023-07-20 ## What's Changed @@ -209,8 +670,8 @@ * @djosephsen made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/941 * @anjmao made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1029 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.10.1...v2.11.0 - +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.10.1...v2.11.0 + # v2.10.1, 2023-06-06 ## What's Changed @@ -221,8 +682,8 @@ ## New Contributors * @kokizzu made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/1006 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.10.0...v2.10.1 - +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.10.0...v2.10.1 + # v2.10.0, 2023-05-17 ## What's Changed @@ -236,8 +697,8 @@ ## New Contributors * @stephaniehingtgen made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/998 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.9.3...v2.10.0 - +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.9.3...v2.10.0 + # v2.9.2, 2023-05-08 ## What's Changed @@ -250,8 +711,8 @@ * @candiduslynx made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/984 * @slvrtrn made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/987 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.9.1...v2.9.2 - +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.9.1...v2.9.2 + # v2.9.1, 2023-04-24 ## What's Changed @@ -264,8 +725,8 @@ * @czubocha made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/977 * @hexchain made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/975 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.9.0...v2.9.1 - +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.9.0...v2.9.1 + # v2.9.0, 2023-04-13 ## What's Changed @@ -283,174 +744,174 @@ ## New Contributors * @xiaochaoren1 made their first contribution in https://github.com/ClickHouse/clickhouse-go/pull/964 -**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.8.3...v2.9.0 - -## 2.8.3, 2023-04-03 - -### Bug fixes - -- Revert: Expire idle connections no longer acquired during lifetime [#958](https://github.com/ClickHouse/clickhouse-go/pull/958) by @jkaflik - -## 2.8.2, 2023-03-31 - -### Bug fixes - -- Expire idle connections no longer acquired during lifetime [#945](https://github.com/ClickHouse/clickhouse-go/pull/945) by @jkaflik - -## 2.8.1, 2023-03-29 - -### Bug fixes - -- Fix idle connection check for TLS connections [#951](https://github.com/ClickHouse/clickhouse-go/pull/951) by @jkaflik & @alekar - -## 2.8.0, 2023-03-27 - -### New features - -- Support customized "url path" in http connection [#938](https://github.com/ClickHouse/clickhouse-go/pull/938) by @crisismaple -- Allow Auth.Database option to be empty [#926](https://github.com/ClickHouse/clickhouse-go/pull/938) by @v4run - -### Chores - -- Bump github.com/stretchr/testify from 1.8.1 to 1.8.2 [#933](https://github.com/ClickHouse/clickhouse-go/pull/933) -- fix: small typo in the text of an error [#936](https://github.com/ClickHouse/clickhouse-go/pull/936) by @lspgn -- Improved bug template [#916](https://github.com/ClickHouse/clickhouse-go/pull/916) by @mshustov - -## 2.7.0, 2023-03-08 - -### New features - -- Date type with user location [#923](https://github.com/ClickHouse/clickhouse-go/pull/923) by @jkaflik -- Add AppendRow function to BatchColumn [#927](https://github.com/ClickHouse/clickhouse-go/pull/927) by @pikot - -### Bug fixes - -- fix: fix connect.compression's format verb [#924](https://github.com/ClickHouse/clickhouse-go/pull/924) by @mind1949 -- Add extra padding for strings shorter than FixedColumn length [#910](https://github.com/ClickHouse/clickhouse-go/pull/910) by @jkaflik - -### Chore - -- Bump github.com/andybalholm/brotli from 1.0.4 to 1.0.5 [#911](https://github.com/ClickHouse/clickhouse-go/pull/911) -- Bump github.com/paulmach/orb from 0.8.0 to 0.9.0 [#912](https://github.com/ClickHouse/clickhouse-go/pull/912) -- Bump golang.org/x/net from 0.0.0-20220722155237-a158d28d115b to 0.7.0 [#928](https://github.com/ClickHouse/clickhouse-go/pull/928) - -## 2.6.5, 2023-02-28 - -### Bug fixes - -- Fix array parameter formatting in binding mechanism [#921](https://github.com/ClickHouse/clickhouse-go/pull/921) by @genzgd - -## 2.6.4, 2023-02-23 - -### Bug fixes - -- Fixed concurrency issue in stdConnOpener [#918](https://github.com/ClickHouse/clickhouse-go/pull/918) by @jkaflik - -## 2.6.3, 2023-02-22 - -### Bug fixes - -- Fixed `lib/binary/string_safe.go` for non 64bit arch [#914](https://github.com/ClickHouse/clickhouse-go/pull/914) by @atoulme - -## 2.6.2, 2023-02-20 - -### Bug fixes - -- Fix decimal encoding with non-standard exponential representation [#909](https://github.com/ClickHouse/clickhouse-go/pull/909) by @vogrelord -- Add extra padding for strings shorter than FixedColumn length [#910](https://github.com/ClickHouse/clickhouse-go/pull/910) by @jkaflik - -### Chore - -- Remove Yandex ClickHouse image from Makefile [#895](https://github.com/ClickHouse/clickhouse-go/pull/895) by @alexey-milovidov -- Remove duplicate of error handling [#898](https://github.com/ClickHouse/clickhouse-go/pull/898) by @Astemirdum -- Bump github.com/ClickHouse/ch-go from 0.51.2 to 0.52.1 [#901](https://github.com/ClickHouse/clickhouse-go/pull/901) - -## 2.6.1, 2023-02-13 - -### Bug fixes - -- Do not reuse expired connections (`ConnMaxLifetime`) [#892](https://github.com/ClickHouse/clickhouse-go/pull/892) by @iamluc -- Extend default dial timeout value to 30s [#893](https://github.com/ClickHouse/clickhouse-go/pull/893) by @jkaflik -- Compression name fixed in sendQuery log [#884](https://github.com/ClickHouse/clickhouse-go/pull/884) by @fredngr - -## 2.6.0, 2023-01-27 - -### New features - -- Client info specification implementation [#876](https://github.com/ClickHouse/clickhouse-go/pull/876) by @jkaflik - -### Bug fixes - -- Better handling for broken connection errors in the std interface [#879](https://github.com/ClickHouse/clickhouse-go/pull/879) by @n-oden - -### Chore - -- Document way to provide table or database identifier with query parameters [#875](https://github.com/ClickHouse/clickhouse-go/pull/875) by @jkaflik -- Bump github.com/ClickHouse/ch-go from 0.51.0 to 0.51.2 [#881](https://github.com/ClickHouse/clickhouse-go/pull/881) - -## 2.5.1, 2023-01-10 - -### Bug fixes - -- Flag connection as closed on broken pipe [#871](https://github.com/ClickHouse/clickhouse-go/pull/871) by @n-oden - -## 2.5.0, 2023-01-10 - -### New features - -- Buffered compression column by column for a native protocol. Introduces the `MaxCompressionBuffer` option - max size (bytes) of compression buffer during column-by-column compression (default 10MiB) [#808](https://github.com/ClickHouse/clickhouse-go/pull/808) by @gingerwizard and @jkaflik -- Support custom types that implement `sql.Scanner` interface (e.g. `type customString string`) [#850](https://github.com/ClickHouse/clickhouse-go/pull/850) by @DarkDrim -- Append query options to the context instead of overwriting [#860](https://github.com/ClickHouse/clickhouse-go/pull/860) by @aaron276h -- Query parameters support [#854](https://github.com/ClickHouse/clickhouse-go/pull/854) by @jkaflik -- Expose `DialStrategy` function to the user for custom connection routing. [#855](https://github.com/ClickHouse/clickhouse-go/pull/855) by @jkaflik - -### Bug fixes - -- Close connection on `Cancel`. This is to make sure context timed out/canceled connection is not reused further [#764](https://github.com/ClickHouse/clickhouse-go/pull/764) by @gingerwizard -- Fully parse `secure` and `skip_verify` in DSN query parameters. [#862](https://github.com/ClickHouse/clickhouse-go/pull/862) by @n-oden - -### Chore - -- Added tests covering read-only user queries [#837](https://github.com/ClickHouse/clickhouse-go/pull/837) by @jkaflik -- Agreed on a batch append fail semantics [#853](https://github.com/ClickHouse/clickhouse-go/pull/853) by @jkaflik - -## 2.4.3, 2022-11-30 -### Bug Fixes -* Fix in batch concurrency - batch could panic if used in separate go routines.
-The issue was originally detected due to the use of a batch in a go routine and Abort being called after the connection was released on the batch. This would invalidate the connection which had been subsequently reassigned.
-This issue could occur as soon as the conn is released (this can happen in a number of places e.g. after Send or an Append error), and it potentially returns to the pool for use in another go routine. Subsequent releases could then occur e.g., the user calls Abort mainly but also Send would do it. The result is the connection being closed in the release function while another batch or query potentially used it.
-This release includes a guard to prevent release from being called more than once on a batch. It assumes that batches are not thread-safe - they aren't (only connections are). -## 2.4.2, 2022-11-24 -### Bug Fixes -- Don't panic on `Send()` on batch after invalid `Append`. [#830](https://github.com/ClickHouse/clickhouse-go/pull/830) -- Fix JSON issue with `nil` if column order is inconsisent. [#824](https://github.com/ClickHouse/clickhouse-go/pull/824) - -## 2.4.1, 2022-11-23 -### Bug Fixes -- Patch release to fix "Regression - escape character was not considered when comparing column names". [#828](https://github.com/ClickHouse/clickhouse-go/issues/828) - -## 2.4.0, 2022-11-22 -### New Features -- Support for Nullables in Tuples. [#821](https://github.com/ClickHouse/clickhouse-go/pull/821) [#817](https://github.com/ClickHouse/clickhouse-go/pull/817) -- Use headers for auth and not url if SSL. [#811](https://github.com/ClickHouse/clickhouse-go/pull/811) -- Support additional headers. [#811](https://github.com/ClickHouse/clickhouse-go/pull/811) -- Support int64 for DateTime. [#807](https://github.com/ClickHouse/clickhouse-go/pull/807) -- Support inserting Enums as int8/int16/int. [#802](https://github.com/ClickHouse/clickhouse-go/pull/802) -- Print error if unsupported server. [#792](https://github.com/ClickHouse/clickhouse-go/pull/792) -- Allow block buffer size to tuned for performance - see `BlockBufferSize`. [#776](https://github.com/ClickHouse/clickhouse-go/pull/776) -- Support custom datetime in Scan. [#767](https://github.com/ClickHouse/clickhouse-go/pull/767) -- Support insertion of an orderedmap. [#763](https://github.com/ClickHouse/clickhouse-go/pull/763) - -### Bug Fixes -- Decompress errors over HTTP. [#792](https://github.com/ClickHouse/clickhouse-go/pull/792) -- Use `timezone` vs `timeZone` so we work on older versions. [#781](https://github.com/ClickHouse/clickhouse-go/pull/781) -- Ensure only columns specified in INSERT are required in batch. [#790](https://github.com/ClickHouse/clickhouse-go/pull/790) -- Respect order of columns in insert for batch. [#790](https://github.com/ClickHouse/clickhouse-go/pull/790) -- Handle double pointers for Nullable columns when batch inserting. [#774](https://github.com/ClickHouse/clickhouse-go/pull/774) -- Use nil for `LowCardinality(Nullable(X))`. [#768](https://github.com/ClickHouse/clickhouse-go/pull/768) - -### Breaking Changes -- Align timezone handling with spec. [#776](https://github.com/ClickHouse/clickhouse-go/pull/766), specifically: - - If parsing strings for datetime, datetime64 or dates we assume the locale is Local (i.e. the client) if not specified in the string. - - The server (or column tz) is used for datetime and datetime64 rendering. For date/date32, these have no tz info in the server. For now, they will be rendered as UTC - consistent with the clickhouse-client - - Addresses bind when no location is set +**Full Changelog**: https://github.com/ClickHouse/clickhouse-go/compare/v2.8.3...v2.9.0 + +## 2.8.3, 2023-04-03 + +### Bug fixes + +- Revert: Expire idle connections no longer acquired during lifetime [#958](https://github.com/ClickHouse/clickhouse-go/pull/958) by @jkaflik + +## 2.8.2, 2023-03-31 + +### Bug fixes + +- Expire idle connections no longer acquired during lifetime [#945](https://github.com/ClickHouse/clickhouse-go/pull/945) by @jkaflik + +## 2.8.1, 2023-03-29 + +### Bug fixes + +- Fix idle connection check for TLS connections [#951](https://github.com/ClickHouse/clickhouse-go/pull/951) by @jkaflik & @alekar + +## 2.8.0, 2023-03-27 + +### New features + +- Support customized "url path" in http connection [#938](https://github.com/ClickHouse/clickhouse-go/pull/938) by @crisismaple +- Allow Auth.Database option to be empty [#926](https://github.com/ClickHouse/clickhouse-go/pull/938) by @v4run + +### Chores + +- Bump github.com/stretchr/testify from 1.8.1 to 1.8.2 [#933](https://github.com/ClickHouse/clickhouse-go/pull/933) +- fix: small typo in the text of an error [#936](https://github.com/ClickHouse/clickhouse-go/pull/936) by @lspgn +- Improved bug template [#916](https://github.com/ClickHouse/clickhouse-go/pull/916) by @mshustov + +## 2.7.0, 2023-03-08 + +### New features + +- Date type with user location [#923](https://github.com/ClickHouse/clickhouse-go/pull/923) by @jkaflik +- Add AppendRow function to BatchColumn [#927](https://github.com/ClickHouse/clickhouse-go/pull/927) by @pikot + +### Bug fixes + +- fix: fix connect.compression's format verb [#924](https://github.com/ClickHouse/clickhouse-go/pull/924) by @mind1949 +- Add extra padding for strings shorter than FixedColumn length [#910](https://github.com/ClickHouse/clickhouse-go/pull/910) by @jkaflik + +### Chore + +- Bump github.com/andybalholm/brotli from 1.0.4 to 1.0.5 [#911](https://github.com/ClickHouse/clickhouse-go/pull/911) +- Bump github.com/paulmach/orb from 0.8.0 to 0.9.0 [#912](https://github.com/ClickHouse/clickhouse-go/pull/912) +- Bump golang.org/x/net from 0.0.0-20220722155237-a158d28d115b to 0.7.0 [#928](https://github.com/ClickHouse/clickhouse-go/pull/928) + +## 2.6.5, 2023-02-28 + +### Bug fixes + +- Fix array parameter formatting in binding mechanism [#921](https://github.com/ClickHouse/clickhouse-go/pull/921) by @genzgd + +## 2.6.4, 2023-02-23 + +### Bug fixes + +- Fixed concurrency issue in stdConnOpener [#918](https://github.com/ClickHouse/clickhouse-go/pull/918) by @jkaflik + +## 2.6.3, 2023-02-22 + +### Bug fixes + +- Fixed `lib/binary/string_safe.go` for non 64bit arch [#914](https://github.com/ClickHouse/clickhouse-go/pull/914) by @atoulme + +## 2.6.2, 2023-02-20 + +### Bug fixes + +- Fix decimal encoding with non-standard exponential representation [#909](https://github.com/ClickHouse/clickhouse-go/pull/909) by @vogrelord +- Add extra padding for strings shorter than FixedColumn length [#910](https://github.com/ClickHouse/clickhouse-go/pull/910) by @jkaflik + +### Chore + +- Remove Yandex ClickHouse image from Makefile [#895](https://github.com/ClickHouse/clickhouse-go/pull/895) by @alexey-milovidov +- Remove duplicate of error handling [#898](https://github.com/ClickHouse/clickhouse-go/pull/898) by @Astemirdum +- Bump github.com/ClickHouse/ch-go from 0.51.2 to 0.52.1 [#901](https://github.com/ClickHouse/clickhouse-go/pull/901) + +## 2.6.1, 2023-02-13 + +### Bug fixes + +- Do not reuse expired connections (`ConnMaxLifetime`) [#892](https://github.com/ClickHouse/clickhouse-go/pull/892) by @iamluc +- Extend default dial timeout value to 30s [#893](https://github.com/ClickHouse/clickhouse-go/pull/893) by @jkaflik +- Compression name fixed in sendQuery log [#884](https://github.com/ClickHouse/clickhouse-go/pull/884) by @fredngr + +## 2.6.0, 2023-01-27 + +### New features + +- Client info specification implementation [#876](https://github.com/ClickHouse/clickhouse-go/pull/876) by @jkaflik + +### Bug fixes + +- Better handling for broken connection errors in the std interface [#879](https://github.com/ClickHouse/clickhouse-go/pull/879) by @n-oden + +### Chore + +- Document way to provide table or database identifier with query parameters [#875](https://github.com/ClickHouse/clickhouse-go/pull/875) by @jkaflik +- Bump github.com/ClickHouse/ch-go from 0.51.0 to 0.51.2 [#881](https://github.com/ClickHouse/clickhouse-go/pull/881) + +## 2.5.1, 2023-01-10 + +### Bug fixes + +- Flag connection as closed on broken pipe [#871](https://github.com/ClickHouse/clickhouse-go/pull/871) by @n-oden + +## 2.5.0, 2023-01-10 + +### New features + +- Buffered compression column by column for a native protocol. Introduces the `MaxCompressionBuffer` option - max size (bytes) of compression buffer during column-by-column compression (default 10MiB) [#808](https://github.com/ClickHouse/clickhouse-go/pull/808) by @gingerwizard and @jkaflik +- Support custom types that implement `sql.Scanner` interface (e.g. `type customString string`) [#850](https://github.com/ClickHouse/clickhouse-go/pull/850) by @DarkDrim +- Append query options to the context instead of overwriting [#860](https://github.com/ClickHouse/clickhouse-go/pull/860) by @aaron276h +- Query parameters support [#854](https://github.com/ClickHouse/clickhouse-go/pull/854) by @jkaflik +- Expose `DialStrategy` function to the user for custom connection routing. [#855](https://github.com/ClickHouse/clickhouse-go/pull/855) by @jkaflik + +### Bug fixes + +- Close connection on `Cancel`. This is to make sure context timed out/canceled connection is not reused further [#764](https://github.com/ClickHouse/clickhouse-go/pull/764) by @gingerwizard +- Fully parse `secure` and `skip_verify` in DSN query parameters. [#862](https://github.com/ClickHouse/clickhouse-go/pull/862) by @n-oden + +### Chore + +- Added tests covering read-only user queries [#837](https://github.com/ClickHouse/clickhouse-go/pull/837) by @jkaflik +- Agreed on a batch append fail semantics [#853](https://github.com/ClickHouse/clickhouse-go/pull/853) by @jkaflik + +## 2.4.3, 2022-11-30 +### Bug Fixes +* Fix in batch concurrency - batch could panic if used in separate go routines.
+The issue was originally detected due to the use of a batch in a go routine and Abort being called after the connection was released on the batch. This would invalidate the connection which had been subsequently reassigned.
+This issue could occur as soon as the conn is released (this can happen in a number of places e.g. after Send or an Append error), and it potentially returns to the pool for use in another go routine. Subsequent releases could then occur e.g., the user calls Abort mainly but also Send would do it. The result is the connection being closed in the release function while another batch or query potentially used it.
+This release includes a guard to prevent release from being called more than once on a batch. It assumes that batches are not thread-safe - they aren't (only connections are). +## 2.4.2, 2022-11-24 +### Bug Fixes +- Don't panic on `Send()` on batch after invalid `Append`. [#830](https://github.com/ClickHouse/clickhouse-go/pull/830) +- Fix JSON issue with `nil` if column order is inconsistent. [#824](https://github.com/ClickHouse/clickhouse-go/pull/824) + +## 2.4.1, 2022-11-23 +### Bug Fixes +- Patch release to fix "Regression - escape character was not considered when comparing column names". [#828](https://github.com/ClickHouse/clickhouse-go/issues/828) + +## 2.4.0, 2022-11-22 +### New Features +- Support for Nullables in Tuples. [#821](https://github.com/ClickHouse/clickhouse-go/pull/821) [#817](https://github.com/ClickHouse/clickhouse-go/pull/817) +- Use headers for auth and not url if SSL. [#811](https://github.com/ClickHouse/clickhouse-go/pull/811) +- Support additional headers. [#811](https://github.com/ClickHouse/clickhouse-go/pull/811) +- Support int64 for DateTime. [#807](https://github.com/ClickHouse/clickhouse-go/pull/807) +- Support inserting Enums as int8/int16/int. [#802](https://github.com/ClickHouse/clickhouse-go/pull/802) +- Print error if unsupported server. [#792](https://github.com/ClickHouse/clickhouse-go/pull/792) +- Allow block buffer size to tuned for performance - see `BlockBufferSize`. [#776](https://github.com/ClickHouse/clickhouse-go/pull/776) +- Support custom datetime in Scan. [#767](https://github.com/ClickHouse/clickhouse-go/pull/767) +- Support insertion of an orderedmap. [#763](https://github.com/ClickHouse/clickhouse-go/pull/763) + +### Bug Fixes +- Decompress errors over HTTP. [#792](https://github.com/ClickHouse/clickhouse-go/pull/792) +- Use `timezone` vs `timeZone` so we work on older versions. [#781](https://github.com/ClickHouse/clickhouse-go/pull/781) +- Ensure only columns specified in INSERT are required in batch. [#790](https://github.com/ClickHouse/clickhouse-go/pull/790) +- Respect order of columns in insert for batch. [#790](https://github.com/ClickHouse/clickhouse-go/pull/790) +- Handle double pointers for Nullable columns when batch inserting. [#774](https://github.com/ClickHouse/clickhouse-go/pull/774) +- Use nil for `LowCardinality(Nullable(X))`. [#768](https://github.com/ClickHouse/clickhouse-go/pull/768) + +### Breaking Changes +- Align timezone handling with spec. [#776](https://github.com/ClickHouse/clickhouse-go/pull/766), specifically: + - If parsing strings for datetime, datetime64 or dates we assume the locale is Local (i.e. the client) if not specified in the string. + - The server (or column tz) is used for datetime and datetime64 rendering. For date/date32, these have no tz info in the server. For now, they will be rendered as UTC - consistent with the clickhouse-client + - Addresses bind when no location is set diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/Makefile b/vendor/github.com/ClickHouse/clickhouse-go/v2/Makefile index acd3a74f..28c63515 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/Makefile +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/Makefile @@ -1,5 +1,5 @@ CLICKHOUSE_VERSION ?= latest -CLICKHOUSE_TEST_TIMEOUT ?= 120s +CLICKHOUSE_TEST_TIMEOUT ?= 240s CLICKHOUSE_QUORUM_INSERT ?= 1 up: diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/README.md b/vendor/github.com/ClickHouse/clickhouse-go/v2/README.md index ef08eb0a..ed83cf67 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/README.md +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/README.md @@ -2,28 +2,6 @@ Golang SQL database client for [ClickHouse](https://clickhouse.com/). -## Versions - -There are two version of this client, v1 and v2, available as separate branches. - -**v1 is now in a state of a maintenance - we will only accept PRs for bug and security fixes.** - -Users should use v2 which is production ready and [significantly faster than v1](#benchmark). - -v2 has breaking changes for users migrating from v1. These were not properly tracked prior to this client being officially supported. We endeavour to track known differences [here](https://github.com/ClickHouse/clickhouse-go/blob/main/v1_v2_CHANGES.md) and resolve where possible. - -## Supported ClickHouse Versions - -The client is tested against the currently [supported versions](https://github.com/ClickHouse/ClickHouse/blob/master/SECURITY.md) of ClickHouse - -## Supported Golang Versions - -| Client Version | Golang Versions | -|----------------|-----------------| -| => 2.0 <= 2.2 | 1.17, 1.18 | -| >= 2.3 | 1.18.4+, 1.19 | -| >= 2.14 | 1.20, 1.21 | - ## Key features * Uses ClickHouse native format for optimal performance. Utilises low level [ch-go](https://github.com/ClickHouse/ch-go) client for encoding/decoding and compression (versions >= 2.3.0). @@ -55,6 +33,22 @@ Support for the ClickHouse protocol advanced features using `Context`: * Profile info * Profile events + +## Supported ClickHouse Versions + +The client is tested against the currently [supported versions](https://github.com/ClickHouse/ClickHouse/blob/master/SECURITY.md) of ClickHouse + +## Supported Golang Versions + +| Client Version | Golang Versions | +|----------------|------------------------| +| => 2.0 <= 2.2 | 1.17, 1.18 | +| >= 2.3 | 1.18.4+, 1.19 | +| >= 2.14 | 1.20, 1.21 | +| >= 2.19 | 1.21, 1.22 | +| >= 2.28 | 1.22, 1.23 | +| >= 2.29 | 1.21, 1.22, 1.23, 1.24 | + ## Documentation [https://clickhouse.com/docs/en/integrations/go](https://clickhouse.com/docs/en/integrations/go) @@ -151,8 +145,9 @@ conn.SetConnMaxLifetime(time.Hour) * username/password - auth credentials * database - select the current default database * dial_timeout - a duration string is a possibly signed sequence of decimal numbers, each with optional fraction and a unit suffix such as "300ms", "1s". Valid time units are "ms", "s", "m". (default 30s) -* connection_open_strategy - round_robin/in_order (default in_order). - * round_robin - choose a round-robin server from the set +* connection_open_strategy - random/round_robin/in_order (default in_order). + * random - choose random server from the set + * round_robin - choose a round-robin server from the set * in_order - first live server is chosen in specified order * debug - enable debug output (boolean value) * compress - compress - specify the compression algorithm - “none” (default), `zstd`, `lz4`, `gzip`, `deflate`, `br`. If set to `true`, `lz4` will be used. @@ -165,6 +160,7 @@ conn.SetConnMaxLifetime(time.Hour) * read_timeout - a duration string is a possibly signed sequence of decimal numbers, each with optional fraction and a unit suffix such as "300ms", "1s". Valid time units are "ms", "s", "m" (default 5m). * max_compression_buffer - max size (bytes) of compression buffer during column by column compression (default 10MiB) * client_info_product - optional list (comma separated) of product name and version pair separated with `/`. This value will be pass a part of client info. e.g. `client_info_product=my_app/1.0,my_module/0.1` More details in [Client info](#client-info) section. +* http_proxy - HTTP proxy address SSL/TLS parameters: @@ -179,6 +175,8 @@ clickhouse://username:password@host1:9000,host2:9000/database?dial_timeout=200ms ### HTTP Support (Experimental) +**Note**: using HTTP protocol is possible only with `database/sql` interface. + The native format can be used over the HTTP protocol. This is useful in scenarios where users need to proxy traffic e.g. using [ChProxy](https://www.chproxy.org/) or via load balancers. This can be achieved by modifying the DSN to specify the HTTP protocol. @@ -208,7 +206,19 @@ conn := clickhouse.OpenDB(&clickhouse.Options{ }) ``` -**Note**: using HTTP protocol is possible only with `database/sql` interface. +#### Proxy support + +HTTP proxy can be set in the DSN string by specifying the `http_proxy` parameter. +(make sure to URL encode the proxy address) + +```sh +http://host1:8123,host2:8123/database?dial_timeout=200ms&max_execution_time=60&http_proxy=http%3A%2F%2Fproxy%3A8080 +``` + +If you are using `clickhouse.OpenDB`, set the `HTTProxy` field in the `clickhouse.Options`. + +An alternative way is to enable proxy by setting the `HTTP_PROXY` (for HTTP) or `HTTPS_PROXY` (for HTTPS) environment variables. +See more details in the [Go documentation](https://pkg.go.dev/net/http#ProxyFromEnvironment). ## Compression @@ -319,7 +329,7 @@ go get -u github.com/ClickHouse/clickhouse-go/v2 * [batch struct](examples/clickhouse_api/append_struct.go) * [columnar](examples/clickhouse_api/columnar_insert.go) * [scan struct](examples/clickhouse_api/scan_struct.go) -* [query parameters](examples/clickhouse_api/query_parameters.go) (deprecated in favour of native query parameters) +* [query parameters](examples/clickhouse_api/query_parameters.go) * [bind params](examples/clickhouse_api/bind.go) (deprecated in favour of native query parameters) * [client info](examples/clickhouse_api/client_info.go) @@ -332,6 +342,10 @@ go get -u github.com/ClickHouse/clickhouse-go/v2 * [bind params](examples/std/bind.go) (deprecated in favour of native query parameters) * [client info](examples/std/client_info.go) +## Third-party libraries + +* [clickhouse-go-rows-utils](https://github.com/EpicStep/clickhouse-go-rows-utils) - utilities that simplify working with rows. + ## ClickHouse alternatives - ch-go Versions of this client >=2.3.x utilise [ch-go](https://github.com/ClickHouse/ch-go) for their low level encoding/decoding. This low lever client provides a high performance columnar interface and should be used in performance critical use cases. This client provides more familar row orientated and `database/sql` semantics at the cost of some performance. diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/TYPES.md b/vendor/github.com/ClickHouse/clickhouse-go/v2/TYPES.md index 6712539e..fe1a746a 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/TYPES.md +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/TYPES.md @@ -2,7 +2,7 @@ The following table aims to capture the Golang types supported for each ClickHou Whilst each ClickHouse type often has a logical Golang type, we aim to support implicit conversions where possible and provided no precision loss will be incurred - thus alleviating the need for users to ensure their data aligns perfectly with ClickHouse types. -This effort is ongoing and can be seperated in to insertion (`Append`/`AppendRow`) and read time (via a `Scan`). Should you need support for a specific conversion, please raise an issue. +This effort is ongoing and can be separated in to insertion (`Append`/`AppendRow`) and read time (via a `Scan`). Should you need support for a specific conversion, please raise an issue. ## Append Support diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/batch.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/batch.go new file mode 100644 index 00000000..cf376f38 --- /dev/null +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/batch.go @@ -0,0 +1,56 @@ +// Licensed to ClickHouse, Inc. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. ClickHouse, Inc. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package clickhouse + +import ( + "fmt" + "regexp" + "strings" +) + +var normalizeInsertQueryMatch = regexp.MustCompile(`(?i)(INSERT\s+INTO\s+([^(]+)(?:\s*\([^()]*(?:\([^()]*\)[^()]*)*\))?)(?:\s*VALUES)?`) +var truncateFormat = regexp.MustCompile(`(?i)\sFORMAT\s+[^\s]+`) +var truncateValues = regexp.MustCompile(`\sVALUES\s.*$`) +var extractInsertColumnsMatch = regexp.MustCompile(`(?si)INSERT INTO .+\s\((?P.+)\)$`) + +func extractNormalizedInsertQueryAndColumns(query string) (normalizedQuery string, tableName string, columns []string, err error) { + query = truncateFormat.ReplaceAllString(query, "") + query = truncateValues.ReplaceAllString(query, "") + + matches := normalizeInsertQueryMatch.FindStringSubmatch(query) + if len(matches) == 0 { + err = fmt.Errorf("invalid INSERT query: %s", query) + return + } + + normalizedQuery = fmt.Sprintf("%s FORMAT Native", matches[1]) + tableName = strings.TrimSpace(matches[2]) + + columns = make([]string, 0) + matches = extractInsertColumnsMatch.FindStringSubmatch(matches[1]) + if len(matches) == 2 { + columns = strings.Split(matches[1], ",") + for i := range columns { + // refers to https://clickhouse.com/docs/en/sql-reference/syntax#identifiers + // we can use identifiers with double quotes or backticks, for example: "id", `id`, but not both, like `"id"`. + columns[i] = strings.Trim(strings.Trim(strings.TrimSpace(columns[i]), "\""), "`") + } + } + + return +} diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/bind.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/bind.go index 7f5ac393..f6373078 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/bind.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/bind.go @@ -59,8 +59,10 @@ func DateNamed(name string, value time.Time, scale TimeUnit) driver.NamedDateVal } } -var bindNumericRe = regexp.MustCompile(`\$[0-9]+`) -var bindPositionalRe = regexp.MustCompile(`[^\\][?]`) +var ( + bindNumericRe = regexp.MustCompile(`\$[0-9]+`) + bindPositionalRe = regexp.MustCompile(`[^\\][?]`) +) func bind(tz *time.Location, query string, args ...any) (string, error) { if len(args) == 0 { @@ -245,6 +247,12 @@ func bindNamed(tz *time.Location, query string, args ...any) (_ string, err erro func formatTime(tz *time.Location, scale TimeUnit, value time.Time) (string, error) { switch value.Location().String() { case "Local", "": + // It's required to pass timestamp as string due to decimal overflow for higher precision, + // but zero-value string "toDateTime('0')" will be not parsed by ClickHouse. + if value.Unix() == 0 { + return "toDateTime(0)", nil + } + switch scale { case Seconds: return fmt.Sprintf("toDateTime('%d')", value.Unix()), nil @@ -262,7 +270,7 @@ func formatTime(tz *time.Location, scale TimeUnit, value time.Time) (string, err return fmt.Sprintf("toDateTime64('%s', %d)", value.Format(fmt.Sprintf("2006-01-02 15:04:05.%0*d", int(scale*3), 0)), int(scale*3)), nil } if scale == Seconds { - return value.Format(fmt.Sprintf("toDateTime('2006-01-02 15:04:05', '%s')", value.Location().String())), nil + return fmt.Sprintf("toDateTime('%s', '%s')", value.Format("2006-01-02 15:04:05"), value.Location().String()), nil } return fmt.Sprintf("toDateTime64('%s', %d, '%s')", value.Format(fmt.Sprintf("2006-01-02 15:04:05.%0*d", int(scale*3), 0)), int(scale*3), value.Location().String()), nil } @@ -304,6 +312,11 @@ func format(tz *time.Location, scale TimeUnit, v any) (string, error) { } return fmt.Sprintf("[%s]", val), nil case fmt.Stringer: + if v := reflect.ValueOf(v); v.Kind() == reflect.Pointer && + v.IsNil() && + v.Type().Elem().Implements(reflect.TypeOf((*fmt.Stringer)(nil)).Elem()) { + return "NULL", nil + } return quote(v.String()), nil case column.OrderedMap: values := make([]string, 0) diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/chcol.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/chcol.go new file mode 100644 index 00000000..65b65f4c --- /dev/null +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/chcol.go @@ -0,0 +1,70 @@ +// Licensed to ClickHouse, Inc. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. ClickHouse, Inc. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package clickhouse + +import "github.com/ClickHouse/clickhouse-go/v2/lib/chcol" + +// Re-export chcol types/funcs to top level clickhouse package + +type ( + // Variant represents a ClickHouse Variant type that can hold multiple possible types + Variant = chcol.Variant + // Dynamic is an alias for the Variant type + Dynamic = chcol.Dynamic + // JSON represents a ClickHouse JSON type that can hold multiple possible types + JSON = chcol.JSON + + // JSONSerializer interface allows a struct to be manually converted to an optimized JSON structure instead of relying + // on recursive reflection. + // Note that the struct must be a pointer in order for the interface to be matched, reflection will be used otherwise. + JSONSerializer = chcol.JSONSerializer + // JSONDeserializer interface allows a struct to load its data from an optimized JSON structure instead of relying + // on recursive reflection to set its fields. + JSONDeserializer = chcol.JSONDeserializer +) + +// NewVariant creates a new Variant with the given value +func NewVariant(v any) Variant { + return chcol.NewVariant(v) +} + +// NewVariantWithType creates a new Variant with the given value and ClickHouse type +func NewVariantWithType(v any, chType string) Variant { + return chcol.NewVariantWithType(v, chType) +} + +// NewDynamic creates a new Dynamic with the given value +func NewDynamic(v any) Dynamic { + return chcol.NewDynamic(v) +} + +// NewDynamicWithType creates a new Dynamic with the given value and ClickHouse type +func NewDynamicWithType(v any, chType string) Dynamic { + return chcol.NewDynamicWithType(v, chType) +} + +// NewJSON creates a new empty JSON value +func NewJSON() *JSON { + return chcol.NewJSON() +} + +// ExtractJSONPathAs is a convenience function for asserting a path to a specific type. +// The underlying value is also extracted from its Dynamic wrapper if present. +func ExtractJSONPathAs[T any](o *JSON, path string) (valueAs T, ok bool) { + return chcol.ExtractJSONPathAs[T](o, path) +} diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/clickhouse.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/clickhouse.go index a565247a..f5399f87 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/clickhouse.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/clickhouse.go @@ -21,6 +21,7 @@ import ( "context" "errors" "fmt" + "math/rand" "sync/atomic" "time" @@ -239,7 +240,10 @@ func DefaultDialStrategy(ctx context.Context, connID int, opt *Options, dial Dia case ConnOpenInOrder: num = i case ConnOpenRoundRobin: - num = (int(connID) + i) % len(opt.Addr) + num = (connID + i) % len(opt.Addr) + case ConnOpenRandom: + random := rand.Int() + num = (random + i) % len(opt.Addr) } if r, err = dial(ctx, opt.Addr[num], opt); err == nil { @@ -265,6 +269,8 @@ func (ch *clickhouse) acquire(ctx context.Context) (conn *connect, err error) { select { case <-timer.C: return nil, ErrAcquireConnTimeout + case <-ctx.Done(): + return nil, ctx.Err() case ch.open <- struct{}{}: } select { diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/clickhouse_options.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/clickhouse_options.go index d64b04eb..fe15e6fa 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/clickhouse_options.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/clickhouse_options.go @@ -20,15 +20,16 @@ package clickhouse import ( "context" "crypto/tls" + "errors" "fmt" "net" + "net/http" "net/url" "strconv" "strings" "time" "github.com/ClickHouse/ch-go/compress" - "github.com/pkg/errors" ) type CompressionMethod byte @@ -41,6 +42,8 @@ func (c CompressionMethod) String() string { return "zstd" case CompressionLZ4: return "lz4" + case CompressionLZ4HC: + return "lz4hc" case CompressionGZIP: return "gzip" case CompressionDeflate: @@ -55,6 +58,7 @@ func (c CompressionMethod) String() string { const ( CompressionNone = CompressionMethod(compress.None) CompressionLZ4 = CompressionMethod(compress.LZ4) + CompressionLZ4HC = CompressionMethod(compress.LZ4HC) CompressionZSTD = CompressionMethod(compress.ZSTD) CompressionGZIP = CompressionMethod(0x95) CompressionDeflate = CompressionMethod(0x96) @@ -65,6 +69,7 @@ var compressionMap = map[string]CompressionMethod{ "none": CompressionNone, "zstd": CompressionZSTD, "lz4": CompressionLZ4, + "lz4hc": CompressionLZ4HC, "gzip": CompressionGZIP, "deflate": CompressionDeflate, "br": CompressionBrotli, @@ -78,7 +83,7 @@ type Auth struct { // has_control_character type Compression struct { Method CompressionMethod - // this only applies to zlib and brotli compression algorithms + // this only applies to lz4, lz4hc, zlib, and brotli compression algorithms Level int } @@ -87,6 +92,7 @@ type ConnOpenStrategy uint8 const ( ConnOpenInOrder ConnOpenStrategy = iota ConnOpenRoundRobin + ConnOpenRandom ) type Protocol int @@ -120,6 +126,8 @@ type DialResult struct { conn *connect } +type HTTPProxy func(*http.Request) (*url.URL, error) + type Options struct { Protocol Protocol ClientInfo ClientInfo @@ -141,8 +149,12 @@ type Options struct { FreeBufOnConnRelease bool // drop preserved memory buffer after each query HttpHeaders map[string]string // set additional headers on HTTP requests HttpUrlPath string // set additional URL path for HTTP requests + HttpMaxConnsPerHost int // MaxConnsPerHost for http.Transport BlockBufferSize uint8 // default 2 - can be overwritten on query - MaxCompressionBuffer int // default 10485760 - measured in bytes i.e. 10MiB + MaxCompressionBuffer int // default 10485760 - measured in bytes i.e. + + // HTTPProxy specifies an HTTP proxy URL to use for requests made by the client. + HTTPProxyURL *url.URL scheme string ReadTimeout time.Duration @@ -199,7 +211,7 @@ func (o *Options) fromDSN(in string) error { case "compress_level": level, err := strconv.ParseInt(params.Get(v), 10, 8) if err != nil { - return errors.Wrap(err, "compress_level invalid value") + return fmt.Errorf("compress_level invalid value: %w", err) } if o.Compression == nil { @@ -215,7 +227,7 @@ func (o *Options) fromDSN(in string) error { case "max_compression_buffer": max, err := strconv.Atoi(params.Get(v)) if err != nil { - return errors.Wrap(err, "max_compression_buffer invalid value") + return fmt.Errorf("max_compression_buffer invalid value: %w", err) } o.MaxCompressionBuffer = max case "dial_timeout": @@ -265,23 +277,25 @@ func (o *Options) fromDSN(in string) error { o.ConnOpenStrategy = ConnOpenInOrder case "round_robin": o.ConnOpenStrategy = ConnOpenRoundRobin + case "random": + o.ConnOpenStrategy = ConnOpenRandom } case "max_open_conns": maxOpenConns, err := strconv.Atoi(params.Get(v)) if err != nil { - return errors.Wrap(err, "max_open_conns invalid value") + return fmt.Errorf("max_open_conns invalid value: %w", err) } o.MaxOpenConns = maxOpenConns case "max_idle_conns": maxIdleConns, err := strconv.Atoi(params.Get(v)) if err != nil { - return errors.Wrap(err, "max_idle_conns invalid value") + return fmt.Errorf("max_idle_conns invalid value: %w", err) } o.MaxIdleConns = maxIdleConns case "conn_max_lifetime": connMaxLifetime, err := time.ParseDuration(params.Get(v)) if err != nil { - return errors.Wrap(err, "conn_max_lifetime invalid value") + return fmt.Errorf("conn_max_lifetime invalid value: %w", err) } o.ConnMaxLifetime = connMaxLifetime case "username": @@ -299,6 +313,12 @@ func (o *Options) fromDSN(in string) error { version, }) } + case "http_proxy": + proxyURL, err := url.Parse(params.Get(v)) + if err != nil { + return fmt.Errorf("clickhouse [dsn parse]: http_proxy: %s", err) + } + o.HTTPProxyURL = proxyURL default: switch p := strings.ToLower(params.Get(v)); p { case "true": diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/clickhouse_rows.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/clickhouse_rows.go index 698905e7..1686e902 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/clickhouse_rows.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/clickhouse_rows.go @@ -46,6 +46,9 @@ func (r *rows) Next() (result bool) { } next: if r.row >= r.block.Rows() { + if r.stream == nil { + return false + } select { case err := <-r.errors: if err != nil { @@ -95,27 +98,43 @@ func (r *rows) Columns() []string { } func (r *rows) Close() error { - active := 2 + if r.errors == nil && r.stream == nil { + return r.err + } + + if r.errors == nil { + for range r.stream { + } + return nil + } + + if r.stream == nil { + for err := range r.errors { + r.err = err + } + return r.err + } + + errorsClosed := false + streamClosed := false for { select { case _, ok := <-r.stream: if !ok { - active-- - if active == 0 { - return r.err - } + streamClosed = true } case err, ok := <-r.errors: if err != nil { r.err = err } if !ok { - active-- - if active == 0 { - return r.err - } + errorsClosed = true } } + + if errorsClosed && streamClosed { + return r.err + } } } diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/clickhouse_std.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/clickhouse_std.go index 7ab67066..c6871d4a 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/clickhouse_std.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/clickhouse_std.go @@ -25,6 +25,8 @@ import ( "fmt" "io" "log" + "math/rand" + "net" "os" "reflect" "strings" @@ -46,7 +48,11 @@ type stdConnOpener struct { func (o *stdConnOpener) Driver() driver.Driver { var debugf = func(format string, v ...any) {} if o.opt.Debug { - debugf = log.New(os.Stdout, "[clickhouse-std] ", 0).Printf + if o.opt.Debugf != nil { + debugf = o.opt.Debugf + } else { + debugf = log.New(os.Stdout, "[clickhouse-std] ", 0).Printf + } } return &stdDriver{debugf: debugf} } @@ -83,12 +89,19 @@ func (o *stdConnOpener) Connect(ctx context.Context) (_ driver.Conn, err error) case ConnOpenInOrder: num = i case ConnOpenRoundRobin: - num = (int(connID) + i) % len(o.opt.Addr) + num = (connID + i) % len(o.opt.Addr) + case ConnOpenRandom: + random := rand.Int() + num = (random + i) % len(o.opt.Addr) } if conn, err = dialFunc(ctx, o.opt.Addr[num], connID, o.opt); err == nil { var debugf = func(format string, v ...any) {} if o.opt.Debug { - debugf = log.New(os.Stdout, fmt.Sprintf("[clickhouse-std][conn=%d][%s] ", num, o.opt.Addr[num]), 0).Printf + if o.opt.Debugf != nil { + debugf = o.opt.Debugf + } else { + debugf = log.New(os.Stdout, fmt.Sprintf("[clickhouse-std][conn=%d][%s] ", num, o.opt.Addr[num]), 0).Printf + } } return &stdDriver{ conn: conn, @@ -102,6 +115,8 @@ func (o *stdConnOpener) Connect(ctx context.Context) (_ driver.Conn, err error) return nil, err } +var _ driver.Connector = (*stdConnOpener)(nil) + func init() { var debugf = func(format string, v ...any) {} sql.Register("clickhouse", &stdDriver{debugf: debugf}) @@ -110,7 +125,10 @@ func init() { // isConnBrokenError returns true if the error class indicates that the // db connection is no longer usable and should be marked bad func isConnBrokenError(err error) bool { - if errors.Is(err, io.EOF) || errors.Is(err, syscall.EPIPE) { + if errors.Is(err, io.EOF) || errors.Is(err, syscall.EPIPE) || errors.Is(err, syscall.ECONNRESET) { + return true + } + if _, ok := err.(*net.OpError); ok { return true } return false @@ -125,7 +143,11 @@ func Connector(opt *Options) driver.Connector { var debugf = func(format string, v ...any) {} if o.Debug { - debugf = log.New(os.Stdout, "[clickhouse-std][opener] ", 0).Printf + if o.Debugf != nil { + debugf = o.Debugf + } else { + debugf = log.New(os.Stdout, "[clickhouse-std][opener] ", 0).Printf + } } return &stdConnOpener{ opt: o, @@ -149,7 +171,11 @@ func OpenDB(opt *Options) *sql.DB { settings = append(settings, "SetConnMaxLifetime") } if opt.Debug { - debugf = log.New(os.Stdout, "[clickhouse-std][opener] ", 0).Printf + if opt.Debugf != nil { + debugf = opt.Debugf + } else { + debugf = log.New(os.Stdout, "[clickhouse-std][opener] ", 0).Printf + } } if len(settings) != 0 { return sql.OpenDB(&stdConnOpener{ @@ -180,6 +206,12 @@ type stdDriver struct { debugf func(format string, v ...any) } +var _ driver.Conn = (*stdDriver)(nil) +var _ driver.ConnBeginTx = (*stdDriver)(nil) +var _ driver.ExecerContext = (*stdDriver)(nil) +var _ driver.QueryerContext = (*stdDriver)(nil) +var _ driver.ConnPrepareContext = (*stdDriver)(nil) + func (std *stdDriver) Open(dsn string) (_ driver.Conn, err error) { var opt Options if err := opt.fromDSN(dsn); err != nil { @@ -195,6 +227,8 @@ func (std *stdDriver) Open(dsn string) (_ driver.Conn, err error) { return (&stdConnOpener{opt: o, debugf: debugf}).Connect(context.Background()) } +var _ driver.Driver = (*stdDriver)(nil) + func (std *stdDriver) ResetSession(ctx context.Context) error { if std.conn.isBad() { std.debugf("Resetting session because connection is bad") @@ -203,9 +237,36 @@ func (std *stdDriver) ResetSession(ctx context.Context) error { return nil } -func (std *stdDriver) Ping(ctx context.Context) error { return std.conn.ping(ctx) } +var _ driver.SessionResetter = (*stdDriver)(nil) -func (std *stdDriver) Begin() (driver.Tx, error) { return std, nil } +func (std *stdDriver) Ping(ctx context.Context) error { + if std.conn.isBad() { + std.debugf("Ping: connection is bad") + return driver.ErrBadConn + } + + return std.conn.ping(ctx) +} + +var _ driver.Pinger = (*stdDriver)(nil) + +func (std *stdDriver) Begin() (driver.Tx, error) { + if std.conn.isBad() { + std.debugf("Begin: connection is bad") + return nil, driver.ErrBadConn + } + + return std, nil +} + +func (std *stdDriver) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) { + if std.conn.isBad() { + std.debugf("BeginTx: connection is bad") + return nil, driver.ErrBadConn + } + + return std, nil +} func (std *stdDriver) Commit() error { if std.commit == nil { @@ -232,13 +293,26 @@ func (std *stdDriver) Rollback() error { return nil } +var _ driver.Tx = (*stdDriver)(nil) + func (std *stdDriver) CheckNamedValue(nv *driver.NamedValue) error { return nil } +var _ driver.NamedValueChecker = (*stdDriver)(nil) + func (std *stdDriver) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error) { - if options := queryOptions(ctx); options.async.ok { - return driver.RowsAffected(0), std.conn.asyncInsert(ctx, query, options.async.wait, rebind(args)...) + if std.conn.isBad() { + std.debugf("ExecContext: connection is bad") + return nil, driver.ErrBadConn + } + + var err error + if asyncOpt := queryOptionsAsync(ctx); asyncOpt.ok { + err = std.conn.asyncInsert(ctx, query, asyncOpt.wait, rebind(args)...) + } else { + err = std.conn.exec(ctx, query, rebind(args)...) } - if err := std.conn.exec(ctx, query, rebind(args)...); err != nil { + + if err != nil { if isConnBrokenError(err) { std.debugf("ExecContext got a fatal error, resetting connection: %v\n", err) return nil, driver.ErrBadConn @@ -250,6 +324,11 @@ func (std *stdDriver) ExecContext(ctx context.Context, query string, args []driv } func (std *stdDriver) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) { + if std.conn.isBad() { + std.debugf("QueryContext: connection is bad") + return nil, driver.ErrBadConn + } + r, err := std.conn.query(ctx, func(*connect, error) {}, query, rebind(args)...) if isConnBrokenError(err) { std.debugf("QueryContext got a fatal error, resetting connection: %v\n", err) @@ -270,6 +349,11 @@ func (std *stdDriver) Prepare(query string) (driver.Stmt, error) { } func (std *stdDriver) PrepareContext(ctx context.Context, query string) (driver.Stmt, error) { + if std.conn.isBad() { + std.debugf("PrepareContext: connection is bad") + return nil, driver.ErrBadConn + } + batch, err := std.conn.prepareBatch(ctx, query, ldriver.PrepareBatchOptions{}, func(*connect, error) {}, func(context.Context) (*connect, error) { return nil, nil }) if err != nil { if isConnBrokenError(err) { @@ -324,7 +408,10 @@ func (s *stdBatch) ExecContext(ctx context.Context, args []driver.NamedValue) (d return s.Exec(values) } +var _ driver.StmtExecContext = (*stdBatch)(nil) + func (s *stdBatch) Query(args []driver.Value) (driver.Rows, error) { + // Note: not implementing driver.StmtQueryContext accordingly return nil, errors.New("only Exec method supported in batch mode") } @@ -343,6 +430,8 @@ func (r *stdRows) ColumnTypeScanType(idx int) reflect.Type { return r.rows.block.Columns[idx].ScanType() } +var _ driver.RowsColumnTypeScanType = (*stdRows)(nil) + func (r *stdRows) ColumnTypeDatabaseTypeName(idx int) string { return string(r.rows.block.Columns[idx].Type()) } @@ -356,15 +445,27 @@ func (r *stdRows) ColumnTypePrecisionScale(idx int) (precision, scale int64, ok switch col := r.rows.block.Columns[idx].(type) { case *column.Decimal: return col.Precision(), col.Scale(), true + case *column.DateTime64: + p, ok := col.Precision() + return p, 0, ok case interface{ Base() column.Interface }: switch col := col.Base().(type) { case *column.Decimal: return col.Precision(), col.Scale(), true + case *column.DateTime64: + p, ok := col.Precision() + return p, 0, ok } } return 0, 0, false } +var _ driver.Rows = (*stdRows)(nil) +var _ driver.RowsNextResultSet = (*stdRows)(nil) +var _ driver.RowsColumnTypeDatabaseTypeName = (*stdRows)(nil) +var _ driver.RowsColumnTypeNullable = (*stdRows)(nil) +var _ driver.RowsColumnTypePrecisionScale = (*stdRows)(nil) + func (r *stdRows) Next(dest []driver.Value) error { if len(r.rows.block.Columns) != len(dest) { err := fmt.Errorf("expected %d destination arguments in Next, not %d", len(r.rows.block.Columns), len(dest)) @@ -386,6 +487,21 @@ func (r *stdRows) Next(dest []driver.Value) error { } dest[i] = v default: + // We don't know what is the destination type at this stage, + // but destination type might be a sql.Null* type that expects to receive a value + // instead of a pointer to a value. ClickHouse-go returns pointers to values for nullable columns. + // + // This is a compatibility layer to make sure that the driver works with the standard library. + // Due to reflection used it has a performance cost. + if nullable { + if value == nil { + dest[i] = nil + continue + } + rv := reflect.ValueOf(value) + value = rv.Elem().Interface() + } + dest[i] = value } } @@ -413,6 +529,8 @@ func (r *stdRows) NextResultSet() error { return nil } +var _ driver.RowsNextResultSet = (*stdRows)(nil) + func (r *stdRows) Close() error { err := r.rows.Close() if err != nil { @@ -420,3 +538,5 @@ func (r *stdRows) Close() error { } return err } + +var _ driver.Rows = (*stdRows)(nil) diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/client_info.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/client_info.go index d7b7c242..07856f45 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/client_info.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/client_info.go @@ -29,8 +29,8 @@ const ClientName = "clickhouse-go" const ( ClientVersionMajor = 2 - ClientVersionMinor = 17 - ClientVersionPatch = 1 + ClientVersionMinor = 34 + ClientVersionPatch = 0 ClientTCPProtocolVersion = proto.DBMS_TCP_PROTOCOL_VERSION ) diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/conn.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/conn.go index 5c2c34b6..9dee9fc3 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/conn.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/conn.go @@ -20,16 +20,17 @@ package clickhouse import ( "context" "crypto/tls" + "errors" "fmt" "io" "log" "net" "os" + "sync" "syscall" "time" "github.com/ClickHouse/clickhouse-go/v2/resources" - "github.com/pkg/errors" "github.com/ClickHouse/ch-go/compress" chproto "github.com/ClickHouse/ch-go/proto" @@ -42,6 +43,7 @@ func dial(ctx context.Context, addr string, num int, opt *Options) (*connect, er conn net.Conn debugf = func(format string, v ...any) {} ) + switch { case opt.DialContext != nil: conn, err = opt.DialContext(ctx, addr) @@ -53,24 +55,40 @@ func dial(ctx context.Context, addr string, num int, opt *Options) (*connect, er conn, err = net.DialTimeout("tcp", addr, opt.DialTimeout) } } + if err != nil { return nil, err } + if opt.Debug { if opt.Debugf != nil { - debugf = opt.Debugf + debugf = func(format string, v ...any) { + opt.Debugf( + "[clickhouse][conn=%d][%s] "+format, + append([]interface{}{num, conn.RemoteAddr()}, v...)..., + ) + } } else { debugf = log.New(os.Stdout, fmt.Sprintf("[clickhouse][conn=%d][%s]", num, conn.RemoteAddr()), 0).Printf } } - compression := CompressionNone + + var ( + compression CompressionMethod + compressor *compress.Writer + ) if opt.Compression != nil { switch opt.Compression.Method { - case CompressionLZ4, CompressionZSTD, CompressionNone: + case CompressionLZ4, CompressionLZ4HC, CompressionZSTD, CompressionNone: compression = opt.Compression.Method default: return nil, fmt.Errorf("unsupported compression method for native protocol") } + + compressor = compress.NewWriter(compress.Level(opt.Compression.Level), compress.Method(opt.Compression.Method)) + } else { + compression = CompressionNone + compressor = compress.NewWriter(compress.LevelZero, compress.None) } var ( @@ -85,15 +103,17 @@ func dial(ctx context.Context, addr string, num int, opt *Options) (*connect, er structMap: &structMap{}, compression: compression, connectedAt: time.Now(), - compressor: compress.NewWriter(), + compressor: compressor, readTimeout: opt.ReadTimeout, blockBufferSize: opt.BlockBufferSize, maxCompressionBuffer: opt.MaxCompressionBuffer, } ) + if err := connect.handshake(opt.Auth.Database, opt.Auth.Username, opt.Auth.Password); err != nil { return nil, err } + if connect.revision >= proto.DBMS_MIN_PROTOCOL_VERSION_WITH_ADDENDUM { if err := connect.sendAddendum(); err != nil { return nil, err @@ -104,6 +124,7 @@ func dial(ctx context.Context, addr string, num int, opt *Options) (*connect, er if num == 1 && !resources.ClientMeta.IsSupportedClickHouseVersion(connect.server.Version) { debugf("[handshake] WARNING: version %v of ClickHouse is not supported by this client - client supports %v", connect.server.Version, resources.ClientMeta.SupportedVersions()) } + return connect, nil } @@ -126,6 +147,8 @@ type connect struct { readTimeout time.Duration blockBufferSize uint8 maxCompressionBuffer int + readerMutex sync.Mutex + closeMutex sync.Mutex } func (c *connect) settings(querySettings Settings) []proto.Setting { @@ -148,15 +171,16 @@ func (c *connect) settings(querySettings Settings) []proto.Setting { for k, v := range c.opt.Settings { settings = append(settings, settingToProtoSetting(k, v)) } + for k, v := range querySettings { settings = append(settings, settingToProtoSetting(k, v)) } + return settings } func (c *connect) isBad() bool { - switch { - case c.closed: + if c.isClosed() { return true } @@ -167,19 +191,44 @@ func (c *connect) isBad() bool { if err := c.connCheck(); err != nil { return true } + return false } +func (c *connect) isClosed() bool { + c.closeMutex.Lock() + defer c.closeMutex.Unlock() + + return c.closed +} + +func (c *connect) setClosed() { + c.closeMutex.Lock() + defer c.closeMutex.Unlock() + + c.closed = true +} + func (c *connect) close() error { + c.closeMutex.Lock() if c.closed { + c.closeMutex.Unlock() return nil } c.closed = true - c.buffer = nil - c.reader = nil + c.closeMutex.Unlock() + if err := c.conn.Close(); err != nil { return err } + + c.buffer = nil + c.compressor = nil + + c.readerMutex.Lock() + c.reader = nil + c.readerMutex.Unlock() + return nil } @@ -188,6 +237,7 @@ func (c *connect) progress() (*Progress, error) { if err := progress.Decode(c.reader, c.revision); err != nil { return nil, err } + c.debugf("[progress] %s", &progress) return &progress, nil } @@ -197,6 +247,7 @@ func (c *connect) exception() error { if err := e.Decode(c.reader); err != nil { return err } + c.debugf("[exception] %s", e.Error()) return &e } @@ -204,8 +255,8 @@ func (c *connect) exception() error { func (c *connect) compressBuffer(start int) error { if c.compression != CompressionNone && len(c.buffer.Buf) > 0 { data := c.buffer.Buf[start:] - if err := c.compressor.Compress(compress.Method(c.compression), data); err != nil { - return errors.Wrap(err, "compress") + if err := c.compressor.Compress(data); err != nil { + return fmt.Errorf("compress: %w", err) } c.buffer.Buf = append(c.buffer.Buf[:start], c.compressor.Data...) } @@ -213,6 +264,12 @@ func (c *connect) compressBuffer(start int) error { } func (c *connect) sendData(block *proto.Block, name string) error { + if c.isClosed() { + err := errors.New("attempted sending on closed connection") + c.debugf("[send data] err: %v", err) + return err + } + c.debugf("[send data] compression=%q", c.compression) c.buffer.PutByte(proto.ClientData) c.buffer.PutString(name) @@ -222,6 +279,7 @@ func (c *connect) sendData(block *proto.Block, name string) error { if err := block.EncodeHeader(c.buffer, c.revision); err != nil { return err } + for i := range block.Columns { if err := block.EncodeColumn(c.buffer, c.revision, i); err != nil { return err @@ -237,42 +295,59 @@ func (c *connect) sendData(block *proto.Block, name string) error { compressionOffset = 0 } } + if err := c.compressBuffer(compressionOffset); err != nil { return err } + if err := c.flush(); err != nil { switch { case errors.Is(err, syscall.EPIPE): c.debugf("[send data] pipe is broken, closing connection") - c.closed = true + c.setClosed() case errors.Is(err, io.EOF): c.debugf("[send data] unexpected EOF, closing connection") - c.closed = true + c.setClosed() default: c.debugf("[send data] unexpected error: %v", err) } return err } + defer func() { c.buffer.Reset() }() + return nil } func (c *connect) readData(ctx context.Context, packet byte, compressible bool) (*proto.Block, error) { + if c.isClosed() { + err := errors.New("attempted reading on closed connection") + c.debugf("[read data] err: %v", err) + return nil, err + } + + if c.reader == nil { + err := errors.New("attempted reading on nil reader") + c.debugf("[read data] err: %v", err) + return nil, err + } + if _, err := c.reader.Str(); err != nil { c.debugf("[read data] str error: %v", err) return nil, err } + if compressible && c.compression != CompressionNone { c.reader.EnableCompression() defer c.reader.DisableCompression() } - opts := queryOptions(ctx) + userLocation := queryOptionsUserLocation(ctx) location := c.server.Timezone - if opts.userLocation != nil { - location = opts.userLocation + if userLocation != nil { + location = userLocation } block := proto.Block{Timezone: location} @@ -280,6 +355,7 @@ func (c *connect) readData(ctx context.Context, packet byte, compressible bool) c.debugf("[read data] decode error: %v", err) return nil, err } + block.Packet = packet c.debugf("[read data] compression=%q. block: columns=%d, rows=%d", c.compression, len(block.Columns), block.Rows()) return &block, nil @@ -290,10 +366,12 @@ func (c *connect) flush() error { // Nothing to flush. return nil } + n, err := c.conn.Write(c.buffer.Buf) if err != nil { - return errors.Wrap(err, "write") + return fmt.Errorf("write: %w", err) } + if n != len(c.buffer.Buf) { return errors.New("wrote less than expected") } diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_batch.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_batch.go index 38329900..41090d24 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_batch.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_batch.go @@ -19,40 +19,28 @@ package clickhouse import ( "context" + "errors" "fmt" "os" "regexp" - "strings" + "slices" + "syscall" "time" - "github.com/pkg/errors" - "github.com/ClickHouse/clickhouse-go/v2/lib/column" "github.com/ClickHouse/clickhouse-go/v2/lib/driver" "github.com/ClickHouse/clickhouse-go/v2/lib/proto" ) -var splitInsertRe = regexp.MustCompile(`(?i)\sVALUES\s*\(`) -var columnMatch = regexp.MustCompile(`.*\((?P.+)\)$`) +var insertMatch = regexp.MustCompile(`(?i)(INSERT\s+INTO\s+[^( ]+(?:\s*\([^()]*(?:\([^()]*\)[^()]*)*\))?)(?:\s*VALUES)?`) +var columnMatch = regexp.MustCompile(`INSERT INTO .+\s\((?P.+)\)$`) func (c *connect) prepareBatch(ctx context.Context, query string, opts driver.PrepareBatchOptions, release func(*connect, error), acquire func(context.Context) (*connect, error)) (driver.Batch, error) { - //defer func() { - // if err := recover(); err != nil { - // fmt.Printf("panic occurred on %d:\n", c.num) - // } - //}() - query = splitInsertRe.Split(query, -1)[0] - colMatch := columnMatch.FindStringSubmatch(query) - var columns []string - if len(colMatch) == 2 { - columns = strings.Split(colMatch[1], ",") - for i := range columns { - columns[i] = strings.Trim(strings.TrimSpace(columns[i]), "`\"") - } - } - if !strings.HasSuffix(strings.TrimSpace(strings.ToUpper(query)), "VALUES") { - query += " VALUES" + query, _, queryColumns, verr := extractNormalizedInsertQueryAndColumns(query) + if verr != nil { + return nil, verr } + options := queryOptions(ctx) if deadline, ok := ctx.Deadline(); ok { c.conn.SetDeadline(deadline) @@ -71,19 +59,20 @@ func (c *connect) prepareBatch(ctx context.Context, query string, opts driver.Pr return nil, err } // resort batch to specified columns - if err = block.SortColumns(columns); err != nil { + if err = block.SortColumns(queryColumns); err != nil { return nil, err } b := &batch{ - ctx: ctx, - query: query, - conn: c, - block: block, - released: false, - connRelease: release, - connAcquire: acquire, - onProcess: onProcess, + ctx: ctx, + query: query, + conn: c, + block: block, + released: false, + connRelease: release, + connAcquire: acquire, + onProcess: onProcess, + closeOnFlush: opts.CloseOnFlush, } if opts.ReleaseConnection { @@ -94,16 +83,17 @@ func (c *connect) prepareBatch(ctx context.Context, query string, opts driver.Pr } type batch struct { - err error - ctx context.Context - query string - conn *connect - sent bool // sent signalize that batch is send to ClickHouse. - released bool // released signalize that conn was returned to pool and can't be used. - block *proto.Block - connRelease func(*connect, error) - connAcquire func(context.Context) (*connect, error) - onProcess *onProcess + err error + ctx context.Context + query string + conn *connect + sent bool // sent signalize that batch is send to ClickHouse. + released bool // released signalize that conn was returned to pool and can't be used. + closeOnFlush bool // closeOnFlush signalize that batch should close query and release conn when use Flush + block *proto.Block + connRelease func(*connect, error) + connAcquire func(context.Context) (*connect, error) + onProcess *onProcess } func (b *batch) release(err error) { @@ -131,14 +121,51 @@ func (b *batch) Append(v ...any) error { if b.err != nil { return b.err } + + if len(v) > 0 { + if r, ok := v[0].(*rows); ok { + return b.appendRowsBlocks(r) + } + } + if err := b.block.Append(v...); err != nil { - b.err = errors.Wrap(ErrBatchInvalid, err.Error()) + b.err = fmt.Errorf("%w: %w", ErrBatchInvalid, err) b.release(err) return err } return nil } +// appendRowsBlocks is an experimental feature that allows rows blocks be appended directly to the batch. +// This API is not stable and may be changed in the future. +// See: tests/batch_block_test.go +func (b *batch) appendRowsBlocks(r *rows) error { + var lastReadLock *proto.Block + var blockNum int + + for r.Next() { + if lastReadLock == nil { // make sure the first block is logged + b.conn.debugf("[batch.appendRowsBlocks] blockNum = %d", blockNum) + } + + // rows.Next() will read the next block from the server only if the current block is empty + // only if new block is available we should flush the current block + // the last block will be handled by the batch.Send() method + if lastReadLock != nil && lastReadLock != r.block { + if err := b.Flush(); err != nil { + return err + } + blockNum++ + b.conn.debugf("[batch.appendRowsBlocks] blockNum = %d", blockNum) + } + + b.block = r.block + lastReadLock = r.block + } + + return nil +} + func (b *batch) AppendStruct(v any) error { if b.err != nil { return b.err @@ -259,8 +286,15 @@ func (b *batch) Flush() error { } if b.block.Rows() != 0 { if err := b.conn.sendData(b.block, ""); err != nil { + // broken pipe/conn reset aren't generally recoverable on retry + if errors.Is(err, syscall.EPIPE) || errors.Is(err, syscall.ECONNRESET) { + b.release(err) + } return err } + if b.closeOnFlush { + b.release(b.closeQuery()) + } } b.block.Reset() return nil @@ -270,6 +304,10 @@ func (b *batch) Rows() int { return b.block.Rows() } +func (b *batch) Columns() []column.Interface { + return slices.Clone(b.block.Columns) +} + func (b *batch) closeQuery() error { if err := b.conn.sendData(&proto.Block{}, ""); err != nil { return err diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http.go index a5d9e9c2..bc9d11c0 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http.go @@ -24,9 +24,9 @@ import ( "compress/zlib" "context" "database/sql/driver" + "errors" "fmt" "io" - "io/ioutil" "log" "mime/multipart" "net" @@ -43,7 +43,6 @@ import ( chproto "github.com/ClickHouse/ch-go/proto" "github.com/ClickHouse/clickhouse-go/v2/lib/proto" "github.com/andybalholm/brotli" - "github.com/pkg/errors" ) const ( @@ -76,49 +75,32 @@ type HTTPReaderWriter struct { method CompressionMethod } -func (rw HTTPReaderWriter) read(res *http.Response) ([]byte, error) { +// NewReader will return a reader that will decompress data if needed. +func (rw *HTTPReaderWriter) NewReader(res *http.Response) (io.Reader, error) { enc := res.Header.Get("Content-Encoding") if !res.Uncompressed && rw.method.String() == enc { switch rw.method { case CompressionGZIP: reader := rw.reader.(*gzip.Reader) - defer reader.Close() if err := reader.Reset(res.Body); err != nil { return nil, err } - body, err := ioutil.ReadAll(reader) - if err != nil { - return nil, err - } - return body, nil + return reader, nil case CompressionDeflate: - reader := rw.reader.(io.ReadCloser) - defer reader.Close() - if err := rw.reader.(flate.Resetter).Reset(res.Body, nil); err != nil { - return nil, err - } - body, err := ioutil.ReadAll(reader) - if err != nil { + reader := rw.reader + if err := reader.(flate.Resetter).Reset(res.Body, nil); err != nil { return nil, err } - return body, nil + return reader, nil case CompressionBrotli: reader := rw.reader.(*brotli.Reader) if err := reader.Reset(res.Body); err != nil { return nil, err } - body, err := ioutil.ReadAll(reader) - if err != nil { - return nil, err - } - return body, nil + return reader, nil } } - body, err := ioutil.ReadAll(res.Body) - if err != nil { - return nil, err - } - return body, nil + return res.Body, nil } func (rw *HTTPReaderWriter) reset(pw *io.PipeWriter) io.WriteCloser { @@ -141,7 +123,12 @@ func dialHttp(ctx context.Context, addr string, num int, opt *Options) (*httpCon var debugf = func(format string, v ...any) {} if opt.Debug { if opt.Debugf != nil { - debugf = opt.Debugf + debugf = func(format string, v ...any) { + opt.Debugf( + "[clickhouse][conn=%d][%s] "+format, + append([]interface{}{num, addr}, v...)..., + ) + } } else { debugf = log.New(os.Stdout, fmt.Sprintf("[clickhouse][conn=%d][%s]", num, addr), 0).Printf } @@ -179,6 +166,9 @@ func dialHttp(ctx context.Context, addr string, num int, opt *Options) (*httpCon headers["X-ClickHouse-User"] = opt.Auth.Username if len(opt.Auth.Password) > 0 { headers["X-ClickHouse-Key"] = opt.Auth.Password + headers["X-ClickHouse-SSL-Certificate-Auth"] = "off" + } else { + headers["X-ClickHouse-SSL-Certificate-Auth"] = "on" } } @@ -211,12 +201,18 @@ func dialHttp(ctx context.Context, addr string, num int, opt *Options) (*httpCon query.Set("default_format", "Native") u.RawQuery = query.Encode() + httpProxy := http.ProxyFromEnvironment + if opt.HTTPProxyURL != nil { + httpProxy = http.ProxyURL(opt.HTTPProxyURL) + } + t := &http.Transport{ - Proxy: http.ProxyFromEnvironment, + Proxy: httpProxy, DialContext: (&net.Dialer{ Timeout: opt.DialTimeout, }).DialContext, MaxIdleConns: 1, + MaxConnsPerHost: opt.HttpMaxConnsPerHost, IdleConnTimeout: opt.ConnMaxLifetime, ResponseHeaderTimeout: opt.ReadTimeout, TLSClientConfig: opt.TLS, @@ -235,7 +231,7 @@ func dialHttp(ctx context.Context, addr string, num int, opt *Options) (*httpCon url: u, buffer: new(chproto.Buffer), compression: opt.Compression.Method, - blockCompressor: compress.NewWriter(), + blockCompressor: compress.NewWriter(compress.Level(opt.Compression.Level), compress.Method(opt.Compression.Method)), compressionPool: compressionPool, blockBufferSize: opt.BlockBufferSize, headers: headers, @@ -261,7 +257,7 @@ func dialHttp(ctx context.Context, addr string, num int, opt *Options) (*httpCon url: u, buffer: new(chproto.Buffer), compression: opt.Compression.Method, - blockCompressor: compress.NewWriter(), + blockCompressor: compress.NewWriter(compress.Level(opt.Compression.Level), compress.Method(opt.Compression.Method)), compressionPool: compressionPool, location: location, blockBufferSize: opt.BlockBufferSize, @@ -382,19 +378,18 @@ func (h *httpConnect) writeData(block *proto.Block) error { if h.compression == CompressionLZ4 || h.compression == CompressionZSTD { // Performing compression. Supported and requires data := h.buffer.Buf[start:] - if err := h.blockCompressor.Compress(compress.Method(h.compression), data); err != nil { - return errors.Wrap(err, "compress") + if err := h.blockCompressor.Compress(data); err != nil { + return fmt.Errorf("compress: %w", err) } h.buffer.Buf = append(h.buffer.Buf[:start], h.blockCompressor.Data...) } return nil } -func (h *httpConnect) readData(ctx context.Context, reader *chproto.Reader) (*proto.Block, error) { - opts := queryOptions(ctx) +func (h *httpConnect) readData(reader *chproto.Reader, timezone *time.Location) (*proto.Block, error) { location := h.location - if opts.userLocation != nil { - location = opts.userLocation + if timezone != nil { + location = timezone } block := proto.Block{Timezone: location} @@ -437,27 +432,21 @@ func (h *httpConnect) sendQuery(ctx context.Context, query string, options *Quer func (h *httpConnect) readRawResponse(response *http.Response) (body []byte, err error) { rw := h.compressionPool.Get() - defer response.Body.Close() defer h.compressionPool.Put(rw) - if body, err = rw.read(response); err != nil { + + reader, err := rw.NewReader(response) + if err != nil { return nil, err } if h.compression == CompressionLZ4 || h.compression == CompressionZSTD { - result := make([]byte, len(body)) - reader := chproto.NewReader(bytes.NewReader(body)) - reader.EnableCompression() - defer reader.DisableCompression() - for { - b, err := reader.ReadByte() - if err != nil { - if errors.Is(err, io.EOF) { - break - } - return nil, err - } - result = append(result, b) - } - return result, nil + chReader := chproto.NewReader(reader) + chReader.EnableCompression() + reader = chReader + } + + body, err = io.ReadAll(reader) + if err != nil && !errors.Is(err, io.EOF) { + return nil, err } return body, nil } @@ -550,14 +539,13 @@ func (h *httpConnect) executeRequest(req *http.Request) (*http.Response, error) if err != nil { return nil, err } - if resp.StatusCode != http.StatusOK { + if resp.StatusCode != http.StatusOK { + defer resp.Body.Close() msg, err := h.readRawResponse(resp) - if err != nil { return nil, fmt.Errorf("clickhouse [execute]:: %d code: failed to read the response: %w", resp.StatusCode, err) } - return nil, fmt.Errorf("clickhouse [execute]:: %d code: %s", resp.StatusCode, string(msg)) } return resp, nil diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http_async_insert.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http_async_insert.go index 4a748de6..3e197f0b 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http_async_insert.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http_async_insert.go @@ -20,7 +20,6 @@ package clickhouse import ( "context" "io" - "io/ioutil" ) func (h *httpConnect) asyncInsert(ctx context.Context, query string, wait bool, args ...any) error { @@ -43,7 +42,7 @@ func (h *httpConnect) asyncInsert(ctx context.Context, query string, wait bool, if res != nil { defer res.Body.Close() // we don't care about result, so just discard it to reuse connection - _, _ = io.Copy(ioutil.Discard, res.Body) + _, _ = io.Copy(io.Discard, res.Body) } return err diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http_batch.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http_batch.go index d64faeb3..b4b27920 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http_batch.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http_batch.go @@ -19,63 +19,53 @@ package clickhouse import ( "context" - "errors" "fmt" + "io" + "slices" + "github.com/ClickHouse/clickhouse-go/v2/lib/column" "github.com/ClickHouse/clickhouse-go/v2/lib/driver" "github.com/ClickHouse/clickhouse-go/v2/lib/proto" - "io" - "io/ioutil" - "regexp" - "strings" ) -// \x60 represents a backtick -var httpInsertRe = regexp.MustCompile(`(?i)^INSERT INTO\s+\x60?([\w.^\(]+)\x60?\s*(\([^\)]*\))?`) - // release is ignored, because http used by std with empty release function. // Also opts ignored because all options unused in http batch. func (h *httpConnect) prepareBatch(ctx context.Context, query string, opts driver.PrepareBatchOptions, release func(*connect, error), acquire func(context.Context) (*connect, error)) (driver.Batch, error) { - matches := httpInsertRe.FindStringSubmatch(query) - if len(matches) < 3 { - return nil, errors.New("cannot get table name from query") - } - tableName := matches[1] - var rColumns []string - if matches[2] != "" { - colMatch := strings.TrimSuffix(strings.TrimPrefix(matches[2], "("), ")") - rColumns = strings.Split(colMatch, ",") - for i := range rColumns { - rColumns[i] = strings.Trim(strings.TrimSpace(rColumns[i]), "`") - } + query, tableName, queryColumns, err := extractNormalizedInsertQueryAndColumns(query) + if err != nil { + return nil, err } - query = "INSERT INTO " + tableName + " FORMAT Native" - queryTableSchema := "DESCRIBE TABLE " + tableName - r, err := h.query(ctx, release, queryTableSchema) + + describeTableQuery := fmt.Sprintf("DESCRIBE TABLE %s", tableName) + r, err := h.query(ctx, release, describeTableQuery) if err != nil { return nil, err } block := &proto.Block{} - // get Table columns and types columns := make(map[string]string) var colNames []string for r.Next() { var ( - colName string - colType string - ignore string + colName string + colType string + default_type string + ignore string ) - if err = r.Scan(&colName, &colType, &ignore, &ignore, &ignore, &ignore, &ignore); err != nil { + if err = r.Scan(&colName, &colType, &default_type, &ignore, &ignore, &ignore, &ignore); err != nil { return nil, err } + // these column types cannot be specified in INSERT queries + if default_type == "MATERIALIZED" || default_type == "ALIAS" { + continue + } colNames = append(colNames, colName) columns[colName] = colType } - switch len(rColumns) { + switch len(queryColumns) { case 0: for _, colName := range colNames { if err = block.AddColumn(colName, column.Type(columns[colName])); err != nil { @@ -84,7 +74,7 @@ func (h *httpConnect) prepareBatch(ctx context.Context, query string, opts drive } default: // user has requested specific columns so only include these - for _, colName := range rColumns { + for _, colName := range queryColumns { if colType, ok := columns[colName]; ok { if err = block.AddColumn(colName, column.Type(colType)); err != nil { return nil, err @@ -194,6 +184,7 @@ func (b *httpBatch) Send() (err error) { headers["Content-Encoding"] = b.conn.compression.String() case CompressionZSTD, CompressionLZ4: options.settings["decompress"] = "1" + options.settings["compress"] = "1" } go func() { @@ -224,7 +215,7 @@ func (b *httpBatch) Send() (err error) { if res != nil { defer res.Body.Close() // we don't care about result, so just discard it to reuse connection - _, _ = io.Copy(ioutil.Discard, res.Body) + _, _ = io.Copy(io.Discard, res.Body) } return err @@ -234,4 +225,8 @@ func (b *httpBatch) Rows() int { return b.block.Rows() } +func (b *httpBatch) Columns() []column.Interface { + return slices.Clone(b.block.Columns) +} + var _ driver.Batch = (*httpBatch)(nil) diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http_exec.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http_exec.go index 0af9de0b..75198eb1 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http_exec.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http_exec.go @@ -20,7 +20,6 @@ package clickhouse import ( "context" "io" - "io/ioutil" ) func (h *httpConnect) exec(ctx context.Context, query string, args ...any) error { @@ -34,7 +33,7 @@ func (h *httpConnect) exec(ctx context.Context, query string, args ...any) error if res != nil { defer res.Body.Close() // we don't care about result, so just discard it to reuse connection - _, _ = io.Copy(ioutil.Discard, res.Body) + _, _ = io.Copy(io.Discard, res.Body) } return err diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http_query.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http_query.go index 3716a285..7ee12002 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http_query.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_http_query.go @@ -18,12 +18,12 @@ package clickhouse import ( - "bytes" "context" "errors" + "io" + chproto "github.com/ClickHouse/ch-go/proto" "github.com/ClickHouse/clickhouse-go/v2/lib/proto" - "io" ) // release is ignored, because http used by std with empty release function @@ -50,52 +50,48 @@ func (h *httpConnect) query(ctx context.Context, release func(*connect, error), if err != nil { return nil, err } - defer res.Body.Close() - // detect compression from http Content-Encoding header - note user will need to have set enable_http_compression - // for CH to respond with compressed data - we don't set this automatically as they might not have permissions - var body []byte - //adding Accept-Encoding:gzip on your request means response won’t be automatically decompressed per https://github.com/golang/go/blob/master/src/net/http/transport.go#L182-L190 - - rw := h.compressionPool.Get() - body, err = rw.read(res) - bufferSize := h.blockBufferSize - if options.blockBufferSize > 0 { - // allow block buffer sze to be overridden per query - bufferSize = options.blockBufferSize - } - var ( - errCh = make(chan error) - stream = make(chan *proto.Block, bufferSize) - ) - if len(body) == 0 { - // queries with no results can get an empty body - go func() { - close(stream) - close(errCh) - }() + if res.ContentLength == 0 { + block := &proto.Block{} return &rows{ - err: nil, - stream: stream, - errors: errCh, - block: &proto.Block{}, - columns: []string{}, + block: block, + columns: block.ColumnsNames(), structMap: &structMap{}, }, nil } + + rw := h.compressionPool.Get() + // The HTTPReaderWriter.NewReader will create a reader that will decompress it if needed, + // cause adding Accept-Encoding:gzip on your request means response won’t be automatically decompressed + // per https://github.com/golang/go/blob/master/src/net/http/transport.go#L182-L190. + // Note user will need to have set enable_http_compression for CH to respond with compressed data. we don't set this + // automatically as they might not have permissions. + reader, err := rw.NewReader(res) if err != nil { + res.Body.Close() + h.compressionPool.Put(rw) return nil, err } - h.compressionPool.Put(rw) - reader := chproto.NewReader(bytes.NewReader(body)) - block, err := h.readData(ctx, reader) - if err != nil { + chReader := chproto.NewReader(reader) + block, err := h.readData(chReader, options.userLocation) + if err != nil && !errors.Is(err, io.EOF) { + res.Body.Close() + h.compressionPool.Put(rw) return nil, err } + bufferSize := h.blockBufferSize + if options.blockBufferSize > 0 { + // allow block buffer sze to be overridden per query + bufferSize = options.blockBufferSize + } + var ( + errCh = make(chan error) + stream = make(chan *proto.Block, bufferSize) + ) go func() { for { - block, err := h.readData(ctx, reader) + block, err := h.readData(chReader, options.userLocation) if err != nil { // ch-go wraps EOF errors if !errors.Is(err, io.EOF) { @@ -110,10 +106,15 @@ func (h *httpConnect) query(ctx context.Context, release func(*connect, error), case stream <- block: } } + res.Body.Close() + h.compressionPool.Put(rw) close(stream) close(errCh) }() + if block == nil { + block = &proto.Block{} + } return &rows{ block: block, stream: stream, diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_process.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_process.go index 967e2ffc..ca452a71 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_process.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_process.go @@ -19,9 +19,11 @@ package clickhouse import ( "context" + "errors" "fmt" - "github.com/ClickHouse/clickhouse-go/v2/lib/proto" "io" + + "github.com/ClickHouse/clickhouse-go/v2/lib/proto" ) type onProcess struct { @@ -33,51 +35,137 @@ type onProcess struct { } func (c *connect) firstBlock(ctx context.Context, on *onProcess) (*proto.Block, error) { + // if context is already timedout/cancelled — we're done + select { + case <-ctx.Done(): + c.cancel() + return nil, ctx.Err() + default: + } + + // do reads in background + resultCh := make(chan *proto.Block, 1) + errCh := make(chan error, 1) + + go func() { + block, err := c.firstBlockImpl(ctx, on) + if err != nil { + errCh <- err + return + } + resultCh <- block + }() + + // select on context or read channels (results/errors) + select { + case <-ctx.Done(): + c.cancel() + return nil, ctx.Err() + + case err := <-errCh: + return nil, err + + case block := <-resultCh: + return block, nil + } +} + +func (c *connect) firstBlockImpl(ctx context.Context, on *onProcess) (*proto.Block, error) { + c.readerMutex.Lock() + defer c.readerMutex.Unlock() + for { - select { - case <-ctx.Done(): - c.cancel() - return nil, ctx.Err() - default: + if c.reader == nil { + return nil, errors.New("unexpected state: c.reader is nil") } + packet, err := c.reader.ReadByte() if err != nil { return nil, err } + switch packet { case proto.ServerData: return c.readData(ctx, packet, true) + case proto.ServerEndOfStream: c.debugf("[end of stream]") return nil, io.EOF + default: if err := c.handle(ctx, packet, on); err != nil { + // handling error, return return nil, err } + + // handled okay, read next byte } } } func (c *connect) process(ctx context.Context, on *onProcess) error { + // if context is already timedout/cancelled — we're done + select { + case <-ctx.Done(): + c.cancel() + return ctx.Err() + default: + } + + // do reads in background + errCh := make(chan error, 1) + doneCh := make(chan bool, 1) + + go func() { + err := c.processImpl(ctx, on) + if err != nil { + errCh <- err + return + } + + doneCh <- true + }() + + // select on context or read channel (errors) + select { + case <-ctx.Done(): + c.cancel() + return ctx.Err() + + case err := <-errCh: + return err + + case <-doneCh: + return nil + } +} + +func (c *connect) processImpl(ctx context.Context, on *onProcess) error { + c.readerMutex.Lock() + defer c.readerMutex.Unlock() + for { - select { - case <-ctx.Done(): - c.cancel() - return ctx.Err() - default: + if c.reader == nil { + return errors.New("unexpected state: c.reader is nil") } + packet, err := c.reader.ReadByte() if err != nil { return err } + switch packet { case proto.ServerEndOfStream: c.debugf("[end of stream]") return nil } + if err := c.handle(ctx, packet, on); err != nil { + // handling error, return return err } + + // handled okay, read next byte } } diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_query.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_query.go index 0fef95ca..dbd03939 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_query.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/conn_query.go @@ -65,7 +65,7 @@ func (c *connect) query(ctx context.Context, release func(*connect, error), quer bufferSize = options.blockBufferSize } var ( - errors = make(chan error) + errors = make(chan error, 1) stream = make(chan *proto.Block, bufferSize) ) diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/context.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/context.go index 67cd2c8d..7f4d7c30 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/context.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/context.go @@ -19,6 +19,7 @@ package clickhouse import ( "context" + "maps" "time" "github.com/ClickHouse/clickhouse-go/v2/ext" @@ -43,12 +44,13 @@ type CustomSetting struct { type Parameters map[string]string type ( QueryOption func(*QueryOptions) error + AsyncOptions struct { + ok bool + wait bool + } QueryOptions struct { - span trace.SpanContext - async struct { - ok bool - wait bool - } + span trace.SpanContext + async AsyncOptions queryID string quotaKey string events struct { @@ -163,26 +165,68 @@ func ignoreExternalTables() QueryOption { } } +// Context returns a derived context with the given ClickHouse QueryOptions. +// Existing QueryOptions will be overwritten per option if present. +// The QueryOptions Settings map will be initialized if nil. func Context(parent context.Context, options ...QueryOption) context.Context { - opt := queryOptions(parent) + var opt QueryOptions + if ctxOpt, ok := parent.Value(_contextOptionKey).(QueryOptions); ok { + opt = ctxOpt + } + for _, f := range options { f(&opt) } + + if opt.settings == nil { + opt.settings = make(Settings) + } + return context.WithValue(parent, _contextOptionKey, opt) } +// queryOptions returns a mutable copy of the QueryOptions struct within the given context. +// If ClickHouse context was not provided, an empty struct with a valid Settings map is returned. +// If the context has a deadline greater than 1s then max_execution_time setting is appended. func queryOptions(ctx context.Context) QueryOptions { - if o, ok := ctx.Value(_contextOptionKey).(QueryOptions); ok { - if deadline, ok := ctx.Deadline(); ok { - if sec := time.Until(deadline).Seconds(); sec > 1 { - o.settings["max_execution_time"] = int(sec + 5) - } + var opt QueryOptions + + if ctxOpt, ok := ctx.Value(_contextOptionKey).(QueryOptions); ok { + opt = ctxOpt.clone() + } else { + opt = QueryOptions{ + settings: make(Settings), } - return o } - return QueryOptions{ - settings: make(Settings), + + deadline, ok := ctx.Deadline() + if !ok { + return opt + } + + if sec := time.Until(deadline).Seconds(); sec > 1 { + opt.settings["max_execution_time"] = int(sec + 5) } + + return opt +} + +// queryOptionsAsync returns the AsyncOptions struct within the given context's QueryOptions. +func queryOptionsAsync(ctx context.Context) AsyncOptions { + if opt, ok := ctx.Value(_contextOptionKey).(QueryOptions); ok { + return opt.async + } + + return AsyncOptions{} +} + +// queryOptionsUserLocation returns the *time.Location within the given context's QueryOptions. +func queryOptionsUserLocation(ctx context.Context) *time.Location { + if opt, ok := ctx.Value(_contextOptionKey).(QueryOptions); ok { + return opt.userLocation + } + + return nil } func (q *QueryOptions) onProcess() *onProcess { @@ -211,3 +255,31 @@ func (q *QueryOptions) onProcess() *onProcess { }, } } + +// clone returns a copy of QueryOptions where Settings and Parameters are safely mutable. +func (q *QueryOptions) clone() QueryOptions { + c := QueryOptions{ + span: q.span, + async: q.async, + queryID: q.queryID, + quotaKey: q.quotaKey, + events: q.events, + settings: nil, + parameters: nil, + external: q.external, + blockBufferSize: q.blockBufferSize, + userLocation: q.userLocation, + } + + if q.settings != nil { + c.settings = make(Settings, len(q.settings)) + maps.Copy(c.settings, q.settings) + } + + if q.parameters != nil { + c.parameters = make(Parameters, len(q.parameters)) + maps.Copy(c.parameters, q.parameters) + } + + return c +} diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/contributors/list b/vendor/github.com/ClickHouse/clickhouse-go/v2/contributors/list index 01d27626..b1c3263d 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/contributors/list +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/contributors/list @@ -1 +1,216 @@ +Aaron Harlap +Abraham Adberstein +Aleksandr Petrukhin +Aleksandr Razumov +Alex Bocharov +Alex Salt +Alex Yang +Alex Zaytsev +Alexander Chumakov +Alexander Obukhov +Alexey Milovidov +Alexey Palazhchenko +Alvaro Tuso +Andrey Ustinov +Andžej Maciusovič +Antoine Toulme +Anton Kozlov +Aram Peres <6775216+aramperes@users.noreply.github.com> +Ashish Gaurav +Ather Shu +Barkhayot <157342287+hayotbisonai@users.noreply.github.com> +Beck Xu +Benjamin Rupp +Cem Sancak +Chao Wang +CharlesFeng +Chris Duncan +Daguang <28806852+DGuang21@users.noreply.github.com> +Dale McDiarmid +Dale Mcdiarmid +Damir Sayfutdinov +Dan Walters +Daniel Bershatsky +Danila Migalin +Danny.Dunn +Darío +Dave Josephsen +Dean Karn +Denis Gukov +Denis Krivak +Denys +Derek Perkins +Dmitry Markov +Dmitry Ponomarev +Dmitry Ponomarev +Earwin +Egor Samotoev <38672780+egsam98@users.noreply.github.com> +Egor.Gorlin +Eric Thomas +Eugene Formanenko +Evan Au +Ewan +Exca-DK +Felipe Lema +Florian Lehner +Fredz <513317651@qq.com> +Félix Mattrat +Geoff Genz +GitHub Action +Gregory Petrosyan +Guoqiang +Ian McGraw +Ildarov Gazimagomed <60438666+threadedstream@users.noreply.github.com> +Ivan +Ivan Blinkov +Ivan Blinkov +Ivan Ivanov +Ivan Yurochko +Ivan Zhukov +Jake Sylvestre +Jakub Chábek +James Hartig +Jan Was +Jeehoon Kim +Jeway <152489546+xjeway@users.noreply.github.com> +Jimmie Han +John Troy +Jon Aquino +Julian Maicher +Kevin Joiner <10265309+KevinJoiner@users.noreply.github.com> +Kirill Shvakov +Kiswono Prayogo +Kuba Kaflik +LI Tao +LIU Chao <42240939+xiaochaoren1@users.noreply.github.com> +Larry Snizek <72978202+larry-cdn77@users.noreply.github.com> +Lars Lehtonen +Leo Di Donato +Louis +Luc Vieillescazes +Lukas Eklund +LuoJi Zhu +Maksim Sokolnikov +Marek Vavrusa +Marek Vavruša +Marek Vavruša +Marek Vavruša +Mark Andrus Roberts +Mark Roberts +Matevz Mihalic +Max Justus Spransy +Michael Vigovsky +Michail Safronov +Miel Donkers +Miel Donkers +Miel Donkers +Mikhail Shustov +Nathan J Mehl <70606471+n-oden@users.noreply.github.com> +Nay Linn +Nikita Mikhaylov Nityananda Gohain +Oleg Strokachuk +Oleksandr Nikitin +Omurbek +Pablo Matias Gomez +PalanQu +Pavel Lobach +Paweł Rozlach <2124609+vespian@users.noreply.github.com> +Philip Dubé +Philip Dubé +Philipp Schreiber +Richard Artoul +Rim Zaidullin +Robert Sköld +Robin Hahling +Roman Usachev +Rory Crispin +Ross Rothenstine +Ross Rothenstine +Ryan +Selboo +Serge Klochkov <3175289+slvrtrn@users.noreply.github.com> +Sergei Sobolev +Sergey Melekhin +Sergey Salnikov +Sergey Salnikov +Shoshin Nikita +Shunsuke Otani +Spencer Torres +Srikanth Chekuri +Stepan Rabotkin <36516357+EpicStep@users.noreply.github.com> +Stepan Rabotkin +Stepan Rabotkin +Stephane Moreau +Stephanie Hingtgen +Taras Matsyk +Thibault Deutsch +Tomasz Czubocha +Tommy Li +Tsimafei Bredau +Valerii Pozdiaev <12141268+ValManP@users.noreply.github.com> +Varun Vasan V +Vespertinus +Vincent Bernat +Vitaly Orlov +Vyacheslav Stepanov +YenchangChan <43897067+YenchangChan@users.noreply.github.com> +Yoga Setiawan +Yury Korolev +Yury Yurochko +Zachary <136084364+gogingersnap777@users.noreply.github.com> +Zhehao Wu +a-dot +achmad-dev <83978538+achmad-dev@users.noreply.github.com> +albertlockett +alex +anton troyanov +astduman <41344369+Astemirdum@users.noreply.github.com> +barkhayot +caleb.xiang <90543061+cxiang03@users.noreply.github.com> +candiduslynx +chengzhi +chenlujjj <953546398@qq.com> +coldWater +count +daguang +daguang +dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +derN3rd +dmitry kuzmin +fengberlin +fengyun.rui +gaetan.rizio +guangwu +hexchain +hongker +hulb +ianmcgraw +ilker moral +jiyongwang +kshvakov +neverlee +nevseliev +ortyomka +pavel raskin +restrry +rogeryk +rtkaratekid <42547811+rtkaratekid@users.noreply.github.com> +sentanos +sundy-li <543950155@qq.com> +vahid sohrabloo +vasily.popov +viktorzaharov +vl4deee11 <44677024+vl4deee11@users.noreply.github.com> +vl4deee11 +vl4deee11 +vladislav doster +vladislav promzelev +vogrelord +vpromzelev +vvoronin +yuankun +yujiarista <127893837+yujiarista@users.noreply.github.com> +zxc111 +zxc9007 +李盼 diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/binary/string.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/binary/string.go index f94ef288..abe6618a 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/binary/string.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/binary/string.go @@ -18,22 +18,9 @@ package binary import ( - "reflect" "unsafe" ) -// Copied from https://github.com/m3db/m3/blob/master/src/x/unsafe/string.go#L62 - func unsafeStr2Bytes(str string) []byte { - if len(str) == 0 { - return nil - } - var scratch []byte - { - slice := (*reflect.SliceHeader)(unsafe.Pointer(&scratch)) - slice.Len = len(str) - slice.Cap = len(str) - slice.Data = (*reflect.StringHeader)(unsafe.Pointer(&str)).Data - } - return scratch + return unsafe.Slice(unsafe.StringData(str), len(str)) } diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/chcol/dynamic.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/chcol/dynamic.go new file mode 100644 index 00000000..17d1e266 --- /dev/null +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/chcol/dynamic.go @@ -0,0 +1,33 @@ +// Licensed to ClickHouse, Inc. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. ClickHouse, Inc. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package chcol + +type Dynamic = Variant + +// NewDynamic creates a new Dynamic with the given value +func NewDynamic(v any) Dynamic { + return Dynamic{value: v} +} + +// NewDynamicWithType creates a new Dynamic with the given value and ClickHouse type +func NewDynamicWithType(v any, chType string) Dynamic { + return Dynamic{ + value: v, + chType: chType, + } +} diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/chcol/json.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/chcol/json.go new file mode 100644 index 00000000..943043a7 --- /dev/null +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/chcol/json.go @@ -0,0 +1,145 @@ +// Licensed to ClickHouse, Inc. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. ClickHouse, Inc. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package chcol + +import ( + "database/sql/driver" + "encoding/json" + "fmt" + "slices" + "strings" +) + +// JSONSerializer interface allows a struct to be manually converted to an optimized JSON structure instead of relying +// on recursive reflection. +// Note that the struct must be a pointer in order for the interface to be matched, reflection will be used otherwise. +type JSONSerializer interface { + SerializeClickHouseJSON() (*JSON, error) +} + +// JSONDeserializer interface allows a struct to load its data from an optimized JSON structure instead of relying +// on recursive reflection to set its fields. +type JSONDeserializer interface { + DeserializeClickHouseJSON(*JSON) error +} + +// ExtractJSONPathAs is a convenience function for asserting a path to a specific type. +// The underlying value is also extracted from its Dynamic wrapper if present. +func ExtractJSONPathAs[T any](o *JSON, path string) (T, bool) { + value, ok := o.valuesByPath[path] + if !ok || value == nil { + var empty T + return empty, false + } + + dynValue, ok := value.(Dynamic) + if !ok { + valueAs, ok := value.(T) + return valueAs, ok + } + + valueAs, ok := dynValue.value.(T) + return valueAs, ok +} + +// JSON represents a ClickHouse JSON type that can hold multiple possible types +type JSON struct { + valuesByPath map[string]any +} + +// NewJSON creates a new empty JSON value +func NewJSON() *JSON { + return &JSON{ + valuesByPath: make(map[string]any), + } +} + +func (o *JSON) ValuesByPath() map[string]any { + return o.valuesByPath +} + +func (o *JSON) SetValueAtPath(path string, value any) { + o.valuesByPath[path] = value +} + +func (o *JSON) ValueAtPath(path string) (any, bool) { + value, ok := o.valuesByPath[path] + return value, ok +} + +// NestedMap converts the flattened JSON data into a nested structure +func (o *JSON) NestedMap() map[string]any { + result := make(map[string]any) + + sortedPaths := make([]string, 0, len(o.valuesByPath)) + for path := range o.valuesByPath { + sortedPaths = append(sortedPaths, path) + } + slices.Sort(sortedPaths) + + for _, path := range sortedPaths { + value := o.valuesByPath[path] + if vt, ok := value.(Variant); ok && vt.Nil() { + continue + } + + parts := strings.Split(path, ".") + current := result + + for i := 0; i < len(parts)-1; i++ { + part := parts[i] + + if _, exists := current[part]; !exists { + current[part] = make(map[string]any) + } + + if next, ok := current[part].(map[string]any); ok { + current = next + } + } + current[parts[len(parts)-1]] = value + } + + return result +} + +// MarshalJSON implements the json.Marshaler interface +func (o *JSON) MarshalJSON() ([]byte, error) { + return json.Marshal(o.NestedMap()) +} + +// Scan implements the sql.Scanner interface +func (o *JSON) Scan(value interface{}) error { + switch vv := value.(type) { + case JSON: + o.valuesByPath = vv.valuesByPath + case *JSON: + o.valuesByPath = vv.valuesByPath + case map[string]any: + o.valuesByPath = vv + default: + return fmt.Errorf("JSON Scan value must be clickhouse.JSON or map[string]any") + } + + return nil +} + +// Value implements the driver.Valuer interface +func (o *JSON) Value() (driver.Value, error) { + return o, nil +} diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/chcol/variant.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/chcol/variant.go new file mode 100644 index 00000000..ac873969 --- /dev/null +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/chcol/variant.go @@ -0,0 +1,146 @@ +// Licensed to ClickHouse, Inc. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. ClickHouse, Inc. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package chcol + +import ( + "database/sql/driver" + "encoding/json" +) + +// Variant represents a ClickHouse Variant type that can hold multiple possible types +type Variant struct { + value any + chType string +} + +// NewVariant creates a new Variant with the given value +func NewVariant(v any) Variant { + return Variant{ + value: v, + chType: "", + } +} + +// NewVariantWithType creates a new Variant with the given value and ClickHouse type +func NewVariantWithType(v any, chType string) Variant { + return Variant{ + value: v, + chType: chType, + } +} + +// WithType creates a new Variant with the current value and given ClickHouse type +func (v Variant) WithType(chType string) Variant { + return Variant{ + value: v.value, + chType: chType, + } +} + +// Type returns the ClickHouse type as a string. +func (v Variant) Type() string { + return v.chType +} + +// HasType returns true if the value has a type ClickHouse included. +func (v Variant) HasType() bool { + return v.chType == "" +} + +// Nil returns true if the underlying value is nil. +func (v Variant) Nil() bool { + return v.value == nil +} + +// Any returns the underlying value as any. +func (v Variant) Any() any { + return v.value +} + +// Scan implements the sql.Scanner interface +func (v *Variant) Scan(value interface{}) error { + switch vv := value.(type) { + case Variant: + v.value = vv.value + v.chType = vv.chType + case *Variant: + v.value = vv.value + v.chType = vv.chType + default: + v.value = value + } + + return nil +} + +// Value implements the driver.Valuer interface +func (v Variant) Value() (driver.Value, error) { + return v, nil +} + +// MarshalJSON implements the json.Marshaler interface +func (v Variant) MarshalJSON() ([]byte, error) { + if v.Nil() { + return []byte("null"), nil + } + + return json.Marshal(v.value) +} + +// UnmarshalJSON implements the json.Unmarshaler interface +func (v *Variant) UnmarshalJSON(data []byte) error { + if string(data) == "null" { + v.value = nil + return nil + } + + if err := json.Unmarshal(data, &v.value); err != nil { + return err + } + + return nil +} + +// MarshalText implements the encoding.TextMarshaler interface +func (v Variant) MarshalText() ([]byte, error) { + if v.Nil() { + return []byte(""), nil + } + + switch vv := v.value.(type) { + case string: + return []byte(vv), nil + case []byte: + return vv, nil + case json.RawMessage: + return vv, nil + } + + return json.Marshal(v.value) +} + +// UnmarshalText implements the encoding.TextUnmarshaler interface +func (v *Variant) UnmarshalText(text []byte) error { + if len(text) == 0 { + v.value = nil + return nil + } + + v.value = string(text) + return nil +} diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/array.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/array.go index e2db1825..2a0c17d4 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/array.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/array.go @@ -192,6 +192,11 @@ func appendNullableRowPlain[T any](col *Array, arr []*T) error { func (col *Array) append(elem reflect.Value, level int) error { if level < col.depth { switch elem.Kind() { + // allows to traverse pointers to slices and slices cast to `any` + case reflect.Interface, reflect.Ptr: + if !elem.IsNil() { + return col.append(elem.Elem(), level) + } // reflect.Value.Len() & reflect.Value.Index() is called in `append` method which is only valid for // Slice, Array and String that make sense here. case reflect.Slice, reflect.Array, reflect.String: diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/bigint.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/bigint.go index e09c96ae..49e179cb 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/bigint.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/bigint.go @@ -90,7 +90,7 @@ func (col *BigInt) Append(v any) (nulls []uint8, err error) { nulls = make([]uint8, len(v)) for i := range v { switch { - case v != nil: + case v[i] != nil: col.append(v[i]) default: nulls[i] = 1 diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/column_gen.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/column_gen.go index d13781af..259a3cd8 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/column_gen.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/column_gen.go @@ -25,6 +25,7 @@ import ( "database/sql/driver" "fmt" "github.com/ClickHouse/ch-go/proto" + "github.com/ClickHouse/clickhouse-go/v2/lib/chcol" "github.com/google/uuid" "github.com/paulmach/orb" "github.com/shopspring/decimal" @@ -136,7 +137,9 @@ func (t Type) Column(name string, tz *time.Location) (Interface, error) { case "Point": return &Point{name: name}, nil case "String": - return &String{name: name}, nil + return &String{name: name, col: colStrProvider(name)}, nil + case "SharedVariant": + return &SharedVariant{name: name}, nil case "Object('json')": return &JSONObject{name: name, root: true, tz: tz}, nil } @@ -146,6 +149,12 @@ func (t Type) Column(name string, tz *time.Location) (Interface, error) { return (&Map{name: name}).parse(t, tz) case strings.HasPrefix(string(t), "Tuple("): return (&Tuple{name: name}).parse(t, tz) + case strings.HasPrefix(string(t), "Variant("): + return (&Variant{name: name}).parse(t, tz) + case strings.HasPrefix(string(t), "Dynamic"): + return (&Dynamic{name: name}).parse(t, tz) + case strings.HasPrefix(string(t), "JSON"): + return (&JSON{name: name}).parse(t, tz) case strings.HasPrefix(string(t), "Decimal("): return (&Decimal{name: name}).parse(t) case strings.HasPrefix(strType, "Nested("): @@ -255,6 +264,9 @@ var ( scanTypePolygon = reflect.TypeOf(orb.Polygon{}) scanTypeDecimal = reflect.TypeOf(decimal.Decimal{}) scanTypeMultiPolygon = reflect.TypeOf(orb.MultiPolygon{}) + scanTypeVariant = reflect.TypeOf(chcol.Variant{}) + scanTypeDynamic = reflect.TypeOf(chcol.Dynamic{}) + scanTypeJSON = reflect.TypeOf(chcol.JSON{}) ) func (col *Float32) Name() string { @@ -656,7 +668,9 @@ func (col *Int8) Append(v any) (nulls []uint8, err error) { nulls = make([]uint8, len(v)) for i := range v { val := int8(0) - if *v[i] { + if v[i] == nil { + nulls[i] = 1 + } else if *v[i] { val = 1 } col.col.Append(val) diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/column_gen_option.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/column_gen_option.go new file mode 100644 index 00000000..6a883527 --- /dev/null +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/column_gen_option.go @@ -0,0 +1,46 @@ +// Licensed to ClickHouse, Inc. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. ClickHouse, Inc. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package column + +import "github.com/ClickHouse/ch-go/proto" + +// ColStrProvider defines provider of proto.ColStr +type ColStrProvider func(name string) proto.ColStr + +// colStrProvider provide proto.ColStr for Column() when type is String +var colStrProvider ColStrProvider = defaultColStrProvider + +// defaultColStrProvider defines sample provider for proto.ColStr +func defaultColStrProvider(string) proto.ColStr { + return proto.ColStr{} +} + +// issue: https://github.com/ClickHouse/clickhouse-go/issues/1164 +// WithAllocBufferColStrProvider allow pre alloc buffer cap for proto.ColStr +// +// It is more suitable for scenarios where a lot of data is written in batches +func WithAllocBufferColStrProvider(cap int) { + colStrProvider = func(string) proto.ColStr { + return proto.ColStr{Buf: make([]byte, 0, cap)} + } +} + +// WithColStrProvider more flexible than WithAllocBufferColStrProvider, such as use sync.Pool +func WithColStrProvider(provider ColStrProvider) { + colStrProvider = provider +} diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/date.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/date.go index bc4f77db..7453afba 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/date.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/date.go @@ -21,9 +21,10 @@ import ( "database/sql" "database/sql/driver" "fmt" - "github.com/ClickHouse/ch-go/proto" "reflect" "time" + + "github.com/ClickHouse/ch-go/proto" ) var ( @@ -101,9 +102,6 @@ func (col *Date) Append(v any) (nulls []uint8, err error) { switch v := v.(type) { case []time.Time: for _, t := range v { - if err := dateOverflow(minDate, maxDate, t, defaultDateFormatNoZone); err != nil { - return nil, err - } col.col.Append(t) } case []*time.Time: @@ -111,9 +109,6 @@ func (col *Date) Append(v any) (nulls []uint8, err error) { for i, v := range v { switch { case v != nil: - if err := dateOverflow(minDate, maxDate, *v, defaultDateFormatNoZone); err != nil { - return nil, err - } col.col.Append(*v) default: nulls[i] = 1 @@ -181,16 +176,10 @@ func (col *Date) Append(v any) (nulls []uint8, err error) { func (col *Date) AppendRow(v any) error { switch v := v.(type) { case time.Time: - if err := dateOverflow(minDate, maxDate, v, defaultDateFormatNoZone); err != nil { - return err - } col.col.Append(v) case *time.Time: switch { case v != nil: - if err := dateOverflow(minDate, maxDate, *v, defaultDateFormatNoZone); err != nil { - return err - } col.col.Append(*v) default: col.col.Append(time.Time{}) @@ -257,19 +246,11 @@ func parseDate(value string, minDate time.Time, maxDate time.Time, location *tim if location == nil { location = time.Local } - - defer func() { - if err == nil { - err = dateOverflow(minDate, maxDate, tv, defaultDateFormatNoZone) - } - }() if tv, err = time.Parse(defaultDateFormatWithZone, value); err == nil { return tv, nil } if tv, err = time.Parse(defaultDateFormatNoZone, value); err == nil { - return time.Date( - tv.Year(), tv.Month(), tv.Day(), tv.Hour(), tv.Minute(), tv.Second(), tv.Nanosecond(), location, - ), nil + return getTimeWithDifferentLocation(tv, location), nil } return time.Time{}, err } @@ -289,10 +270,10 @@ func (col *Date) Encode(buffer *proto.Buffer) { func (col *Date) row(i int) time.Time { t := col.col.Row(i) - if col.location != nil { + if col.location != nil && col.location != time.UTC { // proto.Date is normalized as time.Time with UTC timezone. // We make sure Date return from ClickHouse matches server timezone or user defined location. - t = time.Date(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second(), t.Nanosecond(), col.location) + t = getTimeWithDifferentLocation(t, col.location) } return t } diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/date32.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/date32.go index e23429de..51504293 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/date32.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/date32.go @@ -21,14 +21,15 @@ import ( "database/sql" "database/sql/driver" "fmt" - "github.com/ClickHouse/ch-go/proto" "reflect" "time" + + "github.com/ClickHouse/ch-go/proto" ) var ( - minDate32, _ = time.Parse("2006-01-02 15:04:05", "1925-01-01 00:00:00") - maxDate32, _ = time.Parse("2006-01-02 15:04:05", "2283-11-11 00:00:00") + minDate32, _ = time.Parse("2006-01-02 15:04:05", "1900-01-01 00:00:00") + maxDate32, _ = time.Parse("2006-01-02 15:04:05", "2299-12-31 00:00:00") ) type Date32 struct { @@ -91,9 +92,6 @@ func (col *Date32) Append(v any) (nulls []uint8, err error) { switch v := v.(type) { case []time.Time: for _, t := range v { - if err := dateOverflow(minDate32, maxDate32, t, "2006-01-02"); err != nil { - return nil, err - } col.col.Append(t) } case []*time.Time: @@ -101,9 +99,6 @@ func (col *Date32) Append(v any) (nulls []uint8, err error) { for i, v := range v { switch { case v != nil: - if err := dateOverflow(minDate32, maxDate32, *v, "2006-01-02"); err != nil { - return nil, err - } col.col.Append(*v) default: nulls[i] = 1 @@ -171,16 +166,10 @@ func (col *Date32) Append(v any) (nulls []uint8, err error) { func (col *Date32) AppendRow(v any) error { switch v := v.(type) { case time.Time: - if err := dateOverflow(minDate32, maxDate32, v, "2006-01-02"); err != nil { - return err - } col.col.Append(v) case *time.Time: switch { case v != nil: - if err := dateOverflow(minDate32, maxDate32, *v, "2006-01-02"); err != nil { - return err - } col.col.Append(*v) default: col.col.Append(time.Time{}) @@ -258,10 +247,10 @@ func (col *Date32) Encode(buffer *proto.Buffer) { func (col *Date32) row(i int) time.Time { t := col.col.Row(i) - if col.location != nil { + if col.location != nil && col.location != time.UTC { // proto.Date is normalized as time.Time with UTC timezone. // We make sure Date return from ClickHouse matches server timezone or user defined location. - t = time.Date(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second(), t.Nanosecond(), col.location) + t = getTimeWithDifferentLocation(t, col.location) } return t } diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/datetime.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/datetime.go index d5dfffad..04f24f86 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/datetime.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/datetime.go @@ -21,11 +21,12 @@ import ( "database/sql" "database/sql/driver" "fmt" - "github.com/ClickHouse/ch-go/proto" "reflect" "strings" "time" + "github.com/ClickHouse/ch-go/proto" + "github.com/ClickHouse/clickhouse-go/v2/lib/timezone" ) @@ -121,7 +122,7 @@ func (col *DateTime) Append(v any) (nulls []uint8, err error) { nulls = make([]uint8, len(v)) for i := range v { switch { - case v != nil: + case v[i] != nil: col.col.Append(time.Unix(*v[i], 0)) default: col.col.Append(time.Time{}) @@ -131,9 +132,6 @@ func (col *DateTime) Append(v any) (nulls []uint8, err error) { case []time.Time: nulls = make([]uint8, len(v)) for i := range v { - if err := dateOverflow(minDateTime, maxDateTime, v[i], defaultDateTimeFormatNoZone); err != nil { - return nil, err - } col.col.Append(v[i]) } @@ -142,9 +140,6 @@ func (col *DateTime) Append(v any) (nulls []uint8, err error) { for i := range v { switch { case v[i] != nil: - if err := dateOverflow(minDateTime, maxDateTime, *v[i], defaultDateTimeFormatNoZone); err != nil { - return nil, err - } col.col.Append(*v[i]) default: nulls[i] = 1 @@ -223,16 +218,10 @@ func (col *DateTime) AppendRow(v any) error { col.col.Append(time.Time{}) } case time.Time: - if err := dateOverflow(minDateTime, maxDateTime, v, defaultDateTimeFormatNoZone); err != nil { - return err - } col.col.Append(v) case *time.Time: switch { case v != nil: - if err := dateOverflow(minDateTime, maxDateTime, *v, defaultDateTimeFormatNoZone); err != nil { - return err - } col.col.Append(*v) default: col.col.Append(time.Time{}) @@ -309,19 +298,11 @@ func (col *DateTime) row(i int) time.Time { } func (col *DateTime) parseDateTime(value string) (tv time.Time, err error) { - defer func() { - if err == nil { - err = dateOverflow(minDateTime, maxDateTime, tv, defaultDateFormatNoZone) - } - }() - if tv, err = time.Parse(defaultDateTimeFormatWithZone, value); err == nil { return tv, nil } if tv, err = time.Parse(defaultDateTimeFormatNoZone, value); err == nil { - return time.Date( - tv.Year(), tv.Month(), tv.Day(), tv.Hour(), tv.Minute(), tv.Second(), tv.Nanosecond(), time.Local, - ), nil + return getTimeWithDifferentLocation(tv, time.Local), nil } return time.Time{}, err } diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/datetime64.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/datetime64.go index f5a5a948..668bc2ce 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/datetime64.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/datetime64.go @@ -21,13 +21,14 @@ import ( "database/sql" "database/sql/driver" "fmt" - "github.com/ClickHouse/ch-go/proto" "math" "reflect" "strconv" "strings" "time" + "github.com/ClickHouse/ch-go/proto" + "github.com/ClickHouse/clickhouse-go/v2/lib/timezone" ) @@ -95,6 +96,10 @@ func (col *DateTime64) ScanType() reflect.Type { return scanTypeTime } +func (col *DateTime64) Precision() (int64, bool) { + return int64(col.col.Precision), col.col.PrecisionSet +} + func (col *DateTime64) Rows() int { return col.col.Rows() } @@ -142,7 +147,7 @@ func (col *DateTime64) Append(v any) (nulls []uint8, err error) { nulls = make([]uint8, len(v)) for i := range v { switch { - case v != nil: + case v[i] != nil: col.col.Append(time.UnixMilli(*v[i])) default: col.col.Append(time.UnixMilli(0)) @@ -152,9 +157,6 @@ func (col *DateTime64) Append(v any) (nulls []uint8, err error) { case []time.Time: nulls = make([]uint8, len(v)) for i := range v { - if err := dateOverflow(minDateTime64, maxDateTime64, v[i], "2006-01-02 15:04:05"); err != nil { - return nil, err - } col.col.Append(v[i]) } case []*time.Time: @@ -162,9 +164,6 @@ func (col *DateTime64) Append(v any) (nulls []uint8, err error) { for i := range v { switch { case v[i] != nil: - if err := dateOverflow(minDateTime64, maxDateTime64, *v[i], "2006-01-02 15:04:05"); err != nil { - return nil, err - } col.col.Append(*v[i]) default: col.col.Append(time.Time{}) @@ -227,16 +226,10 @@ func (col *DateTime64) AppendRow(v any) error { col.col.Append(time.Time{}) } case time.Time: - if err := dateOverflow(minDateTime64, maxDateTime64, v, "2006-01-02 15:04:05"); err != nil { - return err - } col.col.Append(v) case *time.Time: switch { case v != nil: - if err := dateOverflow(minDateTime64, maxDateTime64, *v, "2006-01-02 15:04:05"); err != nil { - return err - } col.col.Append(*v) default: col.col.Append(time.Time{}) @@ -318,9 +311,7 @@ func (col *DateTime64) parseDateTime(value string) (tv time.Time, err error) { return tv, nil } if tv, err = time.Parse(defaultDateTime64FormatNoZone, value); err == nil { - return time.Date( - tv.Year(), tv.Month(), tv.Day(), tv.Hour(), tv.Minute(), tv.Second(), tv.Nanosecond(), time.Local, - ), nil + return getTimeWithDifferentLocation(tv, time.Local), nil } return time.Time{}, err } diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/decimal.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/decimal.go index 74b7d75f..4c7b18db 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/decimal.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/decimal.go @@ -170,6 +170,32 @@ func (col *Decimal) Append(v any) (nulls []uint8, err error) { col.append(&value) } } + case []string: + nulls = make([]uint8, len(v)) + for i := range v { + d, err := decimal.NewFromString(v[i]) + if err != nil { + return nil, fmt.Errorf("could not convert \"%v\" to decimal: %w", v[i], err) + } + col.append(&d) + } + case []*string: + nulls = make([]uint8, len(v)) + for i := range v { + if v[i] == nil { + nulls[i] = 1 + value := decimal.New(0, 0) + col.append(&value) + + continue + } + + d, err := decimal.NewFromString(*v[i]) + if err != nil { + return nil, fmt.Errorf("could not convert \"%v\" to decimal: %w", *v[i], err) + } + col.append(&d) + } default: if valuer, ok := v.(driver.Valuer); ok { val, err := valuer.Value() @@ -201,6 +227,20 @@ func (col *Decimal) AppendRow(v any) error { if v != nil { value = *v } + case string: + d, err := decimal.NewFromString(v) + if err != nil { + return fmt.Errorf("could not convert \"%v\" to decimal: %w", v, err) + } + value = d + case *string: + if v != nil { + d, err := decimal.NewFromString(*v) + if err != nil { + return fmt.Errorf("could not convert \"%v\" to decimal: %w", *v, err) + } + value = d + } case nil: default: if valuer, ok := v.(driver.Valuer); ok { diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/dynamic.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/dynamic.go new file mode 100644 index 00000000..65ddd098 --- /dev/null +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/dynamic.go @@ -0,0 +1,417 @@ +// Licensed to ClickHouse, Inc. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. ClickHouse, Inc. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package column + +import ( + "database/sql/driver" + "fmt" + "reflect" + "slices" + "strconv" + "strings" + "time" + + "github.com/ClickHouse/ch-go/proto" + "github.com/ClickHouse/clickhouse-go/v2/lib/chcol" +) + +const SupportedDynamicSerializationVersion = 1 +const DefaultMaxDynamicTypes = 32 + +type Dynamic struct { + chType Type + tz *time.Location + + name string + + maxTypes uint8 + totalTypes uint8 + typeNames []string + typeNamesIndex map[string]int + + variant Variant +} + +func (c *Dynamic) parse(t Type, tz *time.Location) (_ *Dynamic, err error) { + c.chType = t + c.tz = tz + tStr := string(t) + + // SharedVariant is special, and does not count against totalTypes + c.typeNamesIndex = make(map[string]int) + c.variant.columnTypeIndex = make(map[string]uint8) + sv, _ := Type("SharedVariant").Column("", tz) + c.addColumn(sv) + + c.maxTypes = DefaultMaxDynamicTypes + c.totalTypes = 0 // Reset to 0 after adding SharedVariant + + if tStr == "Dynamic" { + return c, nil + } + + if !strings.HasPrefix(tStr, "Dynamic(") || !strings.HasSuffix(tStr, ")") { + return nil, &UnsupportedColumnTypeError{t: t} + } + + typeParamsStr := strings.TrimPrefix(tStr, "Dynamic(") + typeParamsStr = strings.TrimSuffix(typeParamsStr, ")") + + if strings.HasPrefix(typeParamsStr, "max_types=") { + v := strings.TrimPrefix(typeParamsStr, "max_types=") + if maxTypes, err := strconv.Atoi(v); err == nil { + c.maxTypes = uint8(maxTypes) + } + } + + return c, nil +} + +func (c *Dynamic) addColumn(col Interface) { + typeName := string(col.Type()) + c.typeNames = append(c.typeNames, typeName) + c.typeNamesIndex[typeName] = len(c.typeNames) - 1 + c.totalTypes++ + c.variant.addColumn(col) +} + +func (c *Dynamic) Name() string { + return c.name +} + +func (c *Dynamic) Type() Type { + return c.chType +} + +func (c *Dynamic) Rows() int { + return c.variant.Rows() +} + +func (c *Dynamic) Row(i int, ptr bool) any { + typeIndex := c.variant.discriminators[i] + offsetIndex := c.variant.offsets[i] + var value any + var chType string + if typeIndex != NullVariantDiscriminator { + value = c.variant.columns[typeIndex].Row(offsetIndex, ptr) + chType = string(c.variant.columns[typeIndex].Type()) + } + + dyn := chcol.NewDynamicWithType(value, chType) + if ptr { + return &dyn + } + + return dyn +} + +func (c *Dynamic) ScanRow(dest any, row int) error { + typeIndex := c.variant.discriminators[row] + offsetIndex := c.variant.offsets[row] + var value any + var chType string + if typeIndex != NullVariantDiscriminator { + value = c.variant.columns[typeIndex].Row(offsetIndex, false) + chType = string(c.variant.columns[typeIndex].Type()) + } + + switch v := dest.(type) { + case *chcol.Dynamic: + dyn := chcol.NewDynamicWithType(value, chType) + *v = dyn + case **chcol.Dynamic: + dyn := chcol.NewDynamicWithType(value, chType) + **v = dyn + default: + if typeIndex == NullVariantDiscriminator { + return nil + } + + if err := c.variant.columns[typeIndex].ScanRow(dest, offsetIndex); err != nil { + return err + } + } + + return nil +} + +func (c *Dynamic) Append(v any) (nulls []uint8, err error) { + switch vv := v.(type) { + case []chcol.Dynamic: + for i, dyn := range vv { + err := c.AppendRow(dyn) + if err != nil { + return nil, fmt.Errorf("failed to AppendRow at index %d: %w", i, err) + } + } + + return nil, nil + case []*chcol.Dynamic: + for i, dyn := range vv { + err := c.AppendRow(dyn) + if err != nil { + return nil, fmt.Errorf("failed to AppendRow at index %d: %w", i, err) + } + } + + return nil, nil + default: + if valuer, ok := v.(driver.Valuer); ok { + val, err := valuer.Value() + if err != nil { + return nil, &ColumnConverterError{ + Op: "Append", + To: string(c.chType), + From: fmt.Sprintf("%T", v), + Hint: "could not get driver.Valuer value", + } + } + + return c.Append(val) + } + + return nil, &ColumnConverterError{ + Op: "Append", + To: string(c.chType), + From: fmt.Sprintf("%T", v), + } + } +} + +func (c *Dynamic) AppendRow(v any) error { + var requestedType string + switch vv := v.(type) { + case nil: + c.variant.appendNullRow() + return nil + case chcol.Dynamic: + requestedType = vv.Type() + v = vv.Any() + if vv.Nil() { + c.variant.appendNullRow() + return nil + } + case *chcol.Dynamic: + requestedType = vv.Type() + v = vv.Any() + if vv.Nil() { + c.variant.appendNullRow() + return nil + } + } + + if requestedType != "" { + var col Interface + colIndex, ok := c.typeNamesIndex[requestedType] + if ok { + col = c.variant.columns[colIndex] + } else { + newCol, err := Type(requestedType).Column("", c.tz) + if err != nil { + return fmt.Errorf("value \"%v\" cannot be stored in dynamic column %s with requested type %s: unable to append type: %w", v, c.chType, requestedType, err) + } + + c.addColumn(newCol) + colIndex = int(c.totalTypes) + col = newCol + } + + if err := col.AppendRow(v); err != nil { + return fmt.Errorf("value \"%v\" cannot be stored in dynamic column %s with requested type %s: %w", v, c.chType, requestedType, err) + } + + c.variant.appendDiscriminatorRow(uint8(colIndex)) + return nil + } + + // If preferred type wasn't provided, try each column + for i, col := range c.variant.columns { + if c.typeNames[i] == "SharedVariant" { + // Do not try to fit into SharedVariant + continue + } + + if err := col.AppendRow(v); err == nil { + c.variant.appendDiscriminatorRow(uint8(i)) + return nil + } + } + + // If no existing columns match, try matching a ClickHouse type from common Go types + inferredTypeName := inferClickHouseTypeFromGoType(v) + if inferredTypeName != "" { + return c.AppendRow(chcol.NewDynamicWithType(v, inferredTypeName)) + } + + return fmt.Errorf("value \"%v\" cannot be stored in dynamic column: no compatible types. hint: use clickhouse.DynamicWithType to wrap the value", v) +} + +func (c *Dynamic) sortColumnsForEncoding() { + previousTypeNames := make([]string, 0, len(c.typeNames)) + previousTypeNames = append(previousTypeNames, c.typeNames...) + slices.Sort(c.typeNames) + + for i, typeName := range c.typeNames { + c.typeNamesIndex[typeName] = i + c.variant.columnTypeIndex[typeName] = uint8(i) + } + + sortedDiscriminatorMap := make([]uint8, len(c.variant.columns)) + sortedColumns := make([]Interface, len(c.variant.columns)) + for i, typeName := range previousTypeNames { + correctIndex := c.typeNamesIndex[typeName] + + sortedDiscriminatorMap[i] = uint8(correctIndex) + sortedColumns[correctIndex] = c.variant.columns[i] + } + c.variant.columns = sortedColumns + + for i := range c.variant.discriminators { + if c.variant.discriminators[i] == NullVariantDiscriminator { + continue + } + + c.variant.discriminators[i] = sortedDiscriminatorMap[c.variant.discriminators[i]] + } +} + +func (c *Dynamic) encodeHeader(buffer *proto.Buffer) { + c.sortColumnsForEncoding() + + buffer.PutUInt64(SupportedDynamicSerializationVersion) + buffer.PutUVarInt(uint64(c.maxTypes)) + buffer.PutUVarInt(uint64(c.totalTypes)) + + for _, typeName := range c.typeNames { + if typeName == "SharedVariant" { + // SharedVariant is implicitly present in Dynamic, do not append to type names + continue + } + + buffer.PutString(typeName) + } + + c.variant.encodeHeader(buffer) +} + +func (c *Dynamic) encodeData(buffer *proto.Buffer) { + c.variant.encodeData(buffer) +} + +func (c *Dynamic) WriteStatePrefix(buffer *proto.Buffer) error { + c.encodeHeader(buffer) + + return nil +} + +func (c *Dynamic) Encode(buffer *proto.Buffer) { + c.encodeData(buffer) +} + +func (c *Dynamic) ScanType() reflect.Type { + return scanTypeDynamic +} + +func (c *Dynamic) Reset() { + c.variant.Reset() +} + +func (c *Dynamic) decodeHeader(reader *proto.Reader) error { + dynamicSerializationVersion, err := reader.UInt64() + if err != nil { + return fmt.Errorf("failed to read dynamic serialization version: %w", err) + } + + if dynamicSerializationVersion != SupportedDynamicSerializationVersion { + return fmt.Errorf("unsupported dynamic serialization version: %d", dynamicSerializationVersion) + } + + maxTypes, err := reader.UVarInt() + if err != nil { + return fmt.Errorf("failed to read max types for dynamic column: %w", err) + } + c.maxTypes = uint8(maxTypes) + + totalTypes, err := reader.UVarInt() + if err != nil { + return fmt.Errorf("failed to read total types for dynamic column: %w", err) + } + + sortedTypeNames := make([]string, 0, totalTypes+1) + for i := uint64(0); i < totalTypes; i++ { + typeName, err := reader.Str() + if err != nil { + return fmt.Errorf("failed to read type name at index %d for dynamic column: %w", i, err) + } + + sortedTypeNames = append(sortedTypeNames, typeName) + } + + sortedTypeNames = append(sortedTypeNames, "SharedVariant") + slices.Sort(sortedTypeNames) // Re-sort after adding SharedVariant + + c.typeNames = make([]string, 0, len(sortedTypeNames)) + c.typeNamesIndex = make(map[string]int, len(sortedTypeNames)) + c.variant.columns = make([]Interface, 0, len(sortedTypeNames)) + c.variant.columnTypeIndex = make(map[string]uint8, len(sortedTypeNames)) + + for _, typeName := range sortedTypeNames { + col, err := Type(typeName).Column("", c.tz) + if err != nil { + return fmt.Errorf("failed to add dynamic column with type %s: %w", typeName, err) + } + + c.addColumn(col) + } + + c.totalTypes = uint8(totalTypes) // Reset to server's totalTypes + + err = c.variant.decodeHeader(reader) + if err != nil { + return fmt.Errorf("failed to decode variant header: %w", err) + } + + return nil +} + +func (c *Dynamic) decodeData(reader *proto.Reader, rows int) error { + err := c.variant.decodeData(reader, rows) + if err != nil { + return fmt.Errorf("failed to decode variant data: %w", err) + } + + return nil +} + +func (c *Dynamic) ReadStatePrefix(reader *proto.Reader) error { + err := c.decodeHeader(reader) + if err != nil { + return fmt.Errorf("failed to decode dynamic header: %w", err) + } + + return nil +} + +func (c *Dynamic) Decode(reader *proto.Reader, rows int) error { + err := c.decodeData(reader, rows) + if err != nil { + return fmt.Errorf("failed to decode dynamic data: %w", err) + } + + return nil +} diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/dynamic_gen.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/dynamic_gen.go new file mode 100644 index 00000000..425b1489 --- /dev/null +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/dynamic_gen.go @@ -0,0 +1,269 @@ +// Licensed to ClickHouse, Inc. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. ClickHouse, Inc. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +// Code generated by make codegen DO NOT EDIT. +// source: lib/column/codegen/dynamic.tpl + +package column + +import ( + "database/sql" + "encoding/json" + "github.com/ClickHouse/ch-go/proto" + "github.com/google/uuid" + "github.com/paulmach/orb" + "time" +) + +// inferClickHouseTypeFromGoType takes a Go interface{} and converts it to a ClickHouse type. +// Returns empty string if type was not matched. +// This is best effort and does not work for all types. +// Optimally, users should provide a type using DynamicWithType. +func inferClickHouseTypeFromGoType(v any) string { + switch v.(type) { + case float32: + return "Float32" + case *float32: + return "Float32" + case float64: + return "Float64" + case *float64: + return "Float64" + case int8: + return "Int8" + case *int8: + return "Int8" + case int16: + return "Int16" + case *int16: + return "Int16" + case int32: + return "Int32" + case *int32: + return "Int32" + case int64: + return "Int64" + case *int64: + return "Int64" + case uint8: + return "UInt8" + case *uint8: + return "UInt8" + case uint16: + return "UInt16" + case *uint16: + return "UInt16" + case uint32: + return "UInt32" + case *uint32: + return "UInt32" + case uint64: + return "UInt64" + case *uint64: + return "UInt64" + case string: + return "String" + case *string: + return "String" + case json.RawMessage: + return "String" + case *json.RawMessage: + return "String" + case sql.NullString: + return "String" + case *sql.NullString: + return "String" + case bool: + return "Bool" + case *bool: + return "Bool" + case sql.NullBool: + return "Bool" + case *sql.NullBool: + return "Bool" + case time.Time: + return "DateTime64(3)" + case *time.Time: + return "DateTime64(3)" + case sql.NullTime: + return "DateTime64(3)" + case *sql.NullTime: + return "DateTime64(3)" + case uuid.UUID: + return "UUID" + case *uuid.UUID: + return "UUID" + case proto.IPv6: + return "IPv6" + case *proto.IPv6: + return "IPv6" + case orb.MultiPolygon: + return "MultiPolygon" + case *orb.MultiPolygon: + return "MultiPolygon" + case orb.Point: + return "Point" + case *orb.Point: + return "Point" + case orb.Polygon: + return "Polygon" + case *orb.Polygon: + return "Polygon" + case orb.Ring: + return "Ring" + case *orb.Ring: + return "Ring" + case []float32: + return "Array(Float32)" + case []*float32: + return "Array(Float32)" + case []float64: + return "Array(Float64)" + case []*float64: + return "Array(Float64)" + case []int8: + return "Array(Int8)" + case []*int8: + return "Array(Int8)" + case []int16: + return "Array(Int16)" + case []*int16: + return "Array(Int16)" + case []int32: + return "Array(Int32)" + case []*int32: + return "Array(Int32)" + case []int64: + return "Array(Int64)" + case []*int64: + return "Array(Int64)" + case []*uint8: + return "Array(UInt8)" + case []uint16: + return "Array(UInt16)" + case []*uint16: + return "Array(UInt16)" + case []uint32: + return "Array(UInt32)" + case []*uint32: + return "Array(UInt32)" + case []uint64: + return "Array(UInt64)" + case []*uint64: + return "Array(UInt64)" + case []string: + return "Array(String)" + case []*string: + return "Array(String)" + case []json.RawMessage: + return "Array(String)" + case []*json.RawMessage: + return "Array(String)" + case []sql.NullString: + return "Array(String)" + case []*sql.NullString: + return "Array(String)" + case []bool: + return "Array(Bool)" + case []*bool: + return "Array(Bool)" + case []sql.NullBool: + return "Array(Bool)" + case []*sql.NullBool: + return "Array(Bool)" + case []time.Time: + return "Array(DateTime64(3))" + case []*time.Time: + return "Array(DateTime64(3))" + case []sql.NullTime: + return "Array(DateTime64(3))" + case []*sql.NullTime: + return "Array(DateTime64(3))" + case []uuid.UUID: + return "Array(UUID)" + case []*uuid.UUID: + return "Array(UUID)" + case []proto.IPv6: + return "Array(IPv6)" + case []*proto.IPv6: + return "Array(IPv6)" + case []orb.MultiPolygon: + return "Array(MultiPolygon)" + case []*orb.MultiPolygon: + return "Array(MultiPolygon)" + case []orb.Point: + return "Array(Point)" + case []*orb.Point: + return "Array(Point)" + case []orb.Polygon: + return "Array(Polygon)" + case []*orb.Polygon: + return "Array(Polygon)" + case []orb.Ring: + return "Array(Ring)" + case []*orb.Ring: + return "Array(Ring)" + case map[string]float32: + return "Map(String, Float32)" + case map[string]float64: + return "Map(String, Float64)" + case map[string]int8: + return "Map(String, Int8)" + case map[string]int16: + return "Map(String, Int16)" + case map[string]int32: + return "Map(String, Int32)" + case map[string]int64: + return "Map(String, Int64)" + case map[string]uint8: + return "Map(String, UInt8)" + case map[string]uint16: + return "Map(String, UInt16)" + case map[string]uint32: + return "Map(String, UInt32)" + case map[string]uint64: + return "Map(String, UInt64)" + case map[string]string: + return "Map(String, String)" + case map[string]json.RawMessage: + return "Map(String, String)" + case map[string]sql.NullString: + return "Map(String, String)" + case map[string]bool: + return "Map(String, Bool)" + case map[string]sql.NullBool: + return "Map(String, Bool)" + case map[string]time.Time: + return "Map(String, DateTime64(3))" + case map[string]sql.NullTime: + return "Map(String, DateTime64(3))" + case map[string]uuid.UUID: + return "Map(String, UUID)" + case map[string]proto.IPv6: + return "Map(String, IPv6)" + case map[string]orb.MultiPolygon: + return "Map(String, MultiPolygon)" + case map[string]orb.Point: + return "Map(String, Point)" + case map[string]orb.Polygon: + return "Map(String, Polygon)" + case map[string]orb.Ring: + return "Map(String, Ring)" + default: + return "" + } +} diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/enum.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/enum.go index 935dd2d4..45aa07a1 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/enum.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/enum.go @@ -18,89 +18,171 @@ package column import ( + "bytes" "errors" - "github.com/ClickHouse/ch-go/proto" "math" "strconv" - "strings" + + "github.com/ClickHouse/ch-go/proto" ) func Enum(chType Type, name string) (Interface, error) { - var ( - payload string - columnType = string(chType) - ) - if len(columnType) < 8 { - return nil, &Error{ - ColumnType: string(chType), - Err: errors.New("invalid Enum"), - } - } - switch { - case strings.HasPrefix(columnType, "Enum8"): - payload = columnType[6:] - case strings.HasPrefix(columnType, "Enum16"): - payload = columnType[7:] - default: + enumType, values, indexes, valid := extractEnumNamedValues(chType) + if !valid { return nil, &Error{ ColumnType: string(chType), Err: errors.New("invalid Enum"), } } - var ( - idents []string - indexes []int64 - ) - for _, block := range strings.Split(payload[:len(payload)-1], ",") { - parts := strings.Split(block, "=") - if len(parts) != 2 { - return nil, &Error{ - ColumnType: string(chType), - Err: errors.New("invalid Enum"), - } - } - var ( - ident = strings.TrimSpace(parts[0]) - index, err = strconv.ParseInt(strings.TrimSpace(parts[1]), 10, 16) - ) - if err != nil || len(ident) < 2 { - return nil, &Error{ - ColumnType: string(chType), - Err: errors.New("invalid Enum"), - } - } - ident = ident[1 : len(ident)-1] - idents, indexes = append(idents, ident), append(indexes, index) - } - if strings.HasPrefix(columnType, "Enum8") { + + if enumType == enum8Type { enum := Enum8{ - iv: make(map[string]proto.Enum8, len(idents)), - vi: make(map[proto.Enum8]string, len(idents)), + iv: make(map[string]proto.Enum8, len(values)), + vi: make(map[proto.Enum8]string, len(values)), chType: chType, name: name, } - for i := range idents { - if indexes[i] > math.MaxUint8 { - return nil, &Error{ - ColumnType: string(chType), - Err: errors.New("invalid Enum"), - } - } + for i := range values { v := int8(indexes[i]) - enum.iv[idents[i]] = proto.Enum8(v) - enum.vi[proto.Enum8(v)] = idents[i] + enum.iv[values[i]] = proto.Enum8(v) + enum.vi[proto.Enum8(v)] = values[i] + + enum.enumValuesBitset[uint8(v)>>6] |= 1 << (v & 63) } return &enum, nil } enum := Enum16{ - iv: make(map[string]proto.Enum16, len(idents)), - vi: make(map[proto.Enum16]string, len(idents)), + iv: make(map[string]proto.Enum16, len(values)), + vi: make(map[proto.Enum16]string, len(values)), chType: chType, name: name, + // to be updated below, when ranging over all index/enum values + minEnum: math.MaxInt16, + maxEnum: math.MinInt16, } - for i := range idents { - enum.iv[idents[i]] = proto.Enum16(indexes[i]) - enum.vi[proto.Enum16(indexes[i])] = idents[i] + + for i := range values { + k := int16(indexes[i]) + enum.iv[values[i]] = proto.Enum16(k) + enum.vi[proto.Enum16(k)] = values[i] + if k < enum.minEnum { + enum.minEnum = k + } + if k > enum.maxEnum { + enum.maxEnum = k + } } + enum.continuous = (enum.maxEnum-enum.minEnum)+1 == int16(len(enum.vi)) return &enum, nil } + +const ( + enum8Type = "Enum8" + E + enum16Type = "Enum16" +) + +func extractEnumNamedValues(chType Type) (typ string, values []string, indexes []int, valid bool) { + src := []byte(chType) + + var bracketOpen, stringOpen bool + + var foundValueOffset int + var foundValueLen int + var skippedValueTokens []int + var indexFound bool + var valueFound bool + var valueIndex = 0 + + for c := 0; c < len(src); c++ { + token := src[c] + + switch { + // open bracket found, capture the type + case token == '(' && !stringOpen: + typ = string(src[:c]) + + // Ignore everything captured as non-enum type + if typ != enum8Type && typ != enum16Type { + return + } + + bracketOpen = true + break + // when inside a bracket, we can start capture value inside single quotes + case bracketOpen && token == '\'' && !stringOpen: + foundValueOffset = c + 1 + stringOpen = true + break + // close the string and capture the value + case token == '\'' && stringOpen: + stringOpen = false + foundValueLen = c - foundValueOffset + valueFound = true + break + // escape character, skip the next character + case token == '\\' && stringOpen: + skippedValueTokens = append(skippedValueTokens, c-foundValueOffset) + c++ + break + // capture optional index. `=` token is followed with an integer index + case token == '=' && !stringOpen: + if !valueFound { + return + } + indexStart := c + 1 + // find the end of the index, it's either a comma or a closing bracket + for _, token := range src[indexStart:] { + if token == ',' || token == ')' { + break + } + c++ + } + + idx, err := strconv.Atoi(string(bytes.TrimSpace(src[indexStart : c+1]))) + if err != nil { + return + } + valueIndex = idx + indexFound = true + break + // capture the value and index when a comma or closing bracket is found + case (token == ',' || token == ')') && !stringOpen: + if !valueFound { + return + } + // if no index was found for current value, increment the value index + // e.g. Enum8('a','b') is equivalent to Enum8('a'=1,'b'=2) + // or Enum8('a'=3,'b') is equivalent to Enum8('a'=3,'b'=4) + // so if no index is provided, we increment the value index + if !indexFound { + valueIndex++ + } + + // if the index is out of range, return + if (typ == enum8Type && valueIndex > math.MaxUint8) || + (typ == enum16Type && valueIndex > math.MaxUint16) { + return + } + + foundName := src[foundValueOffset : foundValueOffset+foundValueLen] + for _, skipped := range skippedValueTokens { + foundName = append(foundName[:skipped], foundName[skipped+1:]...) + } + + indexes = append(indexes, valueIndex) + values = append(values, string(foundName)) + indexFound = false + valueFound = false + break + } + } + + // Enum type must have at least one value + if len(indexes) == 0 { + return + } + + valid = true + return +} diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/enum16.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/enum16.go index c394e7ff..d3a15b80 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/enum16.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/enum16.go @@ -31,6 +31,10 @@ type Enum16 struct { chType Type col proto.ColEnum16 name string + + continuous bool + minEnum int16 + maxEnum int16 } func (col *Enum16) Reset() { @@ -179,9 +183,17 @@ func (col *Enum16) Append(v any) (nulls []uint8, err error) { func (col *Enum16) AppendRow(elem any) error { switch elem := elem.(type) { case int16: - return col.AppendRow(int(elem)) + if col.continuous && elem >= col.minEnum && elem <= col.maxEnum { + col.col.Append(proto.Enum16(elem)) + } else { + return col.AppendRow(int(elem)) + } case *int16: - return col.AppendRow(int(*elem)) + if col.continuous && *elem >= col.minEnum && *elem <= col.maxEnum { + col.col.Append(proto.Enum16(*elem)) + } else { + return col.AppendRow(int(*elem)) + } case int: v := proto.Enum16(elem) _, ok := col.vi[v] diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/enum8.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/enum8.go index 4aee561a..2f291365 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/enum8.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/enum8.go @@ -31,6 +31,10 @@ type Enum8 struct { chType Type name string col proto.ColEnum8 + + // Encoding of the enums that have been specified by the user. + // Using this when appending rows, to validate the enum is valud. + enumValuesBitset [4]uint64 } func (col *Enum8) Reset() { @@ -183,27 +187,25 @@ func (col *Enum8) AppendRow(elem any) error { case *int8: return col.AppendRow(int(*elem)) case int: - v := proto.Enum8(elem) - _, ok := col.vi[v] - if !ok { + // Check if the enum value is defined + if col.enumValuesBitset[uint8(elem)>>6]&(1<<(elem&63)) == 0 { return &Error{ Err: fmt.Errorf("unknown element %v", elem), ColumnType: string(col.chType), } } - col.col.Append(v) + col.col.Append(proto.Enum8(elem)) case *int: switch { case elem != nil: - v := proto.Enum8(*elem) - _, ok := col.vi[v] - if !ok { + // Check if the enum value is defined + if col.enumValuesBitset[uint8(*elem)>>6]&(1<<(*elem&63)) == 0 { return &Error{ Err: fmt.Errorf("unknown element %v", *elem), ColumnType: string(col.chType), } } - col.col.Append(v) + col.col.Append(proto.Enum8(*elem)) default: col.col.Append(0) } diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/fixed_string.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/fixed_string.go index 8ddb0d1c..50966e1f 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/fixed_string.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/fixed_string.go @@ -22,9 +22,10 @@ import ( "database/sql/driver" "encoding" "fmt" - "github.com/ClickHouse/ch-go/proto" "reflect" + "github.com/ClickHouse/ch-go/proto" + "github.com/ClickHouse/clickhouse-go/v2/lib/binary" ) @@ -77,7 +78,27 @@ func (col *FixedString) ScanRow(dest any, row int) error { **d = col.row(row) case encoding.BinaryUnmarshaler: return d.UnmarshalBinary(col.rowBytes(row)) + case *[]byte: + *d = col.rowBytes(row) default: + // handle for *[n]byte + if t := reflect.TypeOf(dest); t.Kind() == reflect.Pointer && + t.Elem().Kind() == reflect.Array && + t.Elem().Elem() == reflect.TypeOf(byte(0)) { + size := t.Elem().Len() + if size != col.col.Size { + return &ColumnConverterError{ + Op: "ScanRow", + To: fmt.Sprintf("%T", dest), + From: "FixedString", + Hint: fmt.Sprintf("invalid size %d, expect %d", size, col.col.Size), + } + } + rv := reflect.ValueOf(dest).Elem() + reflect.Copy(rv, reflect.ValueOf(col.row(row))) + return nil + } + if scan, ok := dest.(sql.Scanner); ok { return scan.Scan(col.row(row)) } @@ -90,32 +111,61 @@ func (col *FixedString) ScanRow(dest any, row int) error { return nil } +// safeAppendRow appends the value to the underlying column with a length check. +// This re-implements the logic from ch-go but without the panic. +// It also fills unused space with zeros. +func (col *FixedString) safeAppendRow(v []byte) error { + if col.col.Size == 0 { + // If unset, use first value's length for the string size + col.col.Size = len(v) + } + + if len(v) > col.col.Size { + return fmt.Errorf("input value with length %d exceeds FixedString(%d) capacity", len(v), col.col.Size) + } + + col.col.Buf = append(col.col.Buf, v...) + + // Fill the unused space of the fixed string with zeros + padding := col.col.Size - len(v) + for i := 0; i < padding; i++ { + col.col.Buf = append(col.col.Buf, 0) + } + + return nil +} + func (col *FixedString) Append(v any) (nulls []uint8, err error) { switch v := v.(type) { case []string: nulls = make([]uint8, len(v)) for _, v := range v { + var err error if v == "" { - col.col.Append(make([]byte, col.col.Size)) + err = col.safeAppendRow(nil) } else { - col.col.Append(binary.Str2Bytes(v, col.col.Size)) + err = col.safeAppendRow(binary.Str2Bytes(v, col.col.Size)) + } + + if err != nil { + return nil, err } } case []*string: nulls = make([]uint8, len(v)) for i, v := range v { + var err error if v == nil { nulls[i] = 1 + err = col.safeAppendRow(nil) + } else if *v == "" { + err = col.safeAppendRow(nil) + } else { + err = col.safeAppendRow(binary.Str2Bytes(*v, col.col.Size)) } - switch { - case v == nil: - col.col.Append(make([]byte, col.col.Size)) - default: - if *v == "" { - col.col.Append(make([]byte, col.col.Size)) - } else { - col.col.Append(binary.Str2Bytes(*v, col.col.Size)) - } + + if err != nil { + return nil, err } } case encoding.BinaryMarshaler: @@ -123,9 +173,51 @@ func (col *FixedString) Append(v any) (nulls []uint8, err error) { if err != nil { return nil, err } - col.col.Append(data) + err = col.safeAppendRow(data) + if err != nil { + return nil, err + } + nulls = make([]uint8, len(data)/col.col.Size) + case [][]byte: + nulls = make([]uint8, len(v)) + for i, v := range v { + if v == nil { + nulls[i] = 1 + } + n := len(v) + var err error + if n == 0 { + err = col.safeAppendRow(nil) + } else if n >= col.col.Size { + err = col.safeAppendRow(v[0:col.col.Size]) + } else { + err = col.safeAppendRow(v) + } + + if err != nil { + return nil, err + } + } default: + // handle for [][n]byte + if t := reflect.TypeOf(v); t.Kind() == reflect.Slice && + t.Elem().Kind() == reflect.Array && + t.Elem().Elem() == reflect.TypeOf(byte(0)) { + rv := reflect.ValueOf(v) + nulls = make([]uint8, rv.Len()) + for i := 0; i < rv.Len(); i++ { + e := rv.Index(i) + data := make([]byte, e.Len()) + reflect.Copy(reflect.ValueOf(data), e) + err := col.safeAppendRow(data) + if err != nil { + return nil, err + } + } + return + } + if s, ok := v.(driver.Valuer); ok { val, err := s.Value() if err != nil { @@ -147,25 +239,64 @@ func (col *FixedString) Append(v any) (nulls []uint8, err error) { return } -func (col *FixedString) AppendRow(v any) (err error) { - data := make([]byte, col.col.Size) +func (col *FixedString) AppendRow(v any) error { switch v := v.(type) { + case []byte: + err := col.safeAppendRow(v) + if err != nil { + return err + } case string: - if v != "" { - data = binary.Str2Bytes(v, col.col.Size) + err := col.safeAppendRow(binary.Str2Bytes(v, col.col.Size)) + if err != nil { + return err } case *string: + var data []byte if v != nil { - if *v != "" { - data = binary.Str2Bytes(*v, col.col.Size) - } + data = binary.Str2Bytes(*v, col.col.Size) + } + + err := col.safeAppendRow(data) + if err != nil { + return err } case nil: + err := col.safeAppendRow(nil) + if err != nil { + return err + } case encoding.BinaryMarshaler: - if data, err = v.MarshalBinary(); err != nil { + data, err := v.MarshalBinary() + if err != nil { + return err + } + + err = col.safeAppendRow(data) + if err != nil { return err } default: + if t := reflect.TypeOf(v); t.Kind() == reflect.Array && t.Elem() == reflect.TypeOf(byte(0)) { + if t.Len() != col.col.Size { + return &ColumnConverterError{ + Op: "AppendRow", + To: "FixedString", + From: fmt.Sprintf("%T", v), + Hint: fmt.Sprintf("invalid size %d, expect %d", t.Len(), col.col.Size), + } + } + + data := make([]byte, col.col.Size) + reflect.Copy(reflect.ValueOf(data), reflect.ValueOf(v)) + err := col.safeAppendRow(data) + if err != nil { + return err + } + + return nil + } + if s, ok := v.(driver.Valuer); ok { val, err := s.Value() if err != nil { @@ -189,7 +320,7 @@ func (col *FixedString) AppendRow(v any) (err error) { From: fmt.Sprintf("%T", v), } } - col.col.Append(data) + return nil } diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/geo_multi_polygon.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/geo_multi_polygon.go index 2839a41c..1263b897 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/geo_multi_polygon.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/geo_multi_polygon.go @@ -86,9 +86,15 @@ func (col *MultiPolygon) Append(v any) (nulls []uint8, err error) { } return col.set.Append(values) case []*orb.MultiPolygon: + nulls = make([]uint8, len(v)) values := make([][]orb.Polygon, 0, len(v)) - for _, v := range v { - values = append(values, *v) + for i, v := range v { + if v == nil { + nulls[i] = 1 + values = append(values, orb.MultiPolygon{}) + } else { + values = append(values, *v) + } } return col.set.Append(values) default: diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/geo_point.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/geo_point.go index c93a715a..4a4fe16b 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/geo_point.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/geo_point.go @@ -89,11 +89,16 @@ func (col *Point) Append(v any) (nulls []uint8, err error) { } case []*orb.Point: nulls = make([]uint8, len(v)) - for _, v := range v { - col.col.Append(proto.Point{ - X: v.Lon(), - Y: v.Lat(), - }) + for i, v := range v { + if v == nil { + nulls[i] = 1 + col.col.Append(proto.Point{}) + } else { + col.col.Append(proto.Point{ + X: v.Lon(), + Y: v.Lat(), + }) + } } default: if valuer, ok := v.(driver.Valuer); ok { diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/geo_polygon.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/geo_polygon.go index 54226081..6e78b1a9 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/geo_polygon.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/geo_polygon.go @@ -86,9 +86,15 @@ func (col *Polygon) Append(v any) (nulls []uint8, err error) { } return col.set.Append(values) case []*orb.Polygon: + nulls = make([]uint8, len(v)) values := make([][]orb.Ring, 0, len(v)) - for _, v := range v { - values = append(values, *v) + for i, v := range v { + if v == nil { + nulls[i] = 1 + values = append(values, orb.Polygon{}) + } else { + values = append(values, *v) + } } return col.set.Append(values) default: diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/geo_ring.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/geo_ring.go index 0f190a8e..a64de47f 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/geo_ring.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/geo_ring.go @@ -86,9 +86,15 @@ func (col *Ring) Append(v any) (nulls []uint8, err error) { } return col.set.Append(values) case []*orb.Ring: + nulls = make([]uint8, len(v)) values := make([][]orb.Point, 0, len(v)) - for _, v := range v { - values = append(values, *v) + for i, v := range v { + if v == nil { + nulls[i] = 1 + values = append(values, orb.Ring{}) + } else { + values = append(values, *v) + } } return col.set.Append(values) default: diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/ipv4.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/ipv4.go index a15f6d3e..3d4c2528 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/ipv4.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/ipv4.go @@ -145,7 +145,7 @@ func (col *IPv4) Append(v any) (nulls []uint8, err error) { ips := make([]netip.Addr, len(v), len(v)) for i := range v { switch { - case v != nil: + case v[i] != nil: ip, err := strToIPV4(*v[i]) if err != nil { return nulls, err @@ -164,7 +164,7 @@ func (col *IPv4) Append(v any) (nulls []uint8, err error) { nulls = make([]uint8, len(v)) for i := range v { switch { - case v != nil: + case v[i] != nil: col.col.Append(proto.ToIPv4(*v[i])) default: nulls[i] = 1 @@ -196,7 +196,7 @@ func (col *IPv4) Append(v any) (nulls []uint8, err error) { nulls = make([]uint8, len(v)) for i := range v { switch { - case v != nil: + case v[i] != nil: col.col.Append(proto.IPv4(*v[i])) default: nulls[i] = 1 diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/json.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/json.go index 0978a0b0..682ff853 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/json.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/json.go @@ -19,925 +19,769 @@ package column import ( "fmt" - "github.com/ClickHouse/ch-go/proto" + "github.com/ClickHouse/clickhouse-go/v2/lib/chcol" + "math" "reflect" + "strconv" "strings" "time" + + "github.com/ClickHouse/ch-go/proto" ) -// inverse mapping - go types to clickhouse types -var kindMappings = map[reflect.Kind]string{ - reflect.String: "String", - reflect.Int: "Int64", - reflect.Int8: "Int8", - reflect.Int16: "Int16", - reflect.Int32: "Int32", - reflect.Int64: "Int64", - reflect.Uint: "UInt64", - reflect.Uint8: "UInt8", - reflect.Uint16: "UInt16", - reflect.Uint32: "UInt32", - reflect.Uint64: "UInt64", - reflect.Float32: "Float32", - reflect.Float64: "Float64", - reflect.Bool: "Bool", -} - -// complex types for which a mapping exists - currently we map to String but could enhance in the future for other types -var typeMappings = map[string]struct{}{ - // currently JSON doesn't support DateTime, Decimal or IP so mapped to String - "time.Time": {}, - "decimal.Decimal": {}, - "net.IP": {}, - "uuid.UUID": {}, -} - -type JSON interface { - Interface - appendEmptyValue() error -} - -type JSONParent interface { - upsertValue(name string, ct string) (*JSONValue, error) - upsertList(name string) (*JSONList, error) - upsertObject(name string) (*JSONObject, error) - insertEmptyColumn(name string) error - columnNames() []string - rows() int -} - -func parseType(name string, vType reflect.Type, values any, isArray bool, jCol JSONParent, numEmpty int) error { - _, ok := typeMappings[vType.String()] - if !ok { - return &UnsupportedColumnTypeError{ - t: Type(vType.String()), - } - } - ct := "String" - if isArray { - ct = fmt.Sprintf("Array(%s)", ct) - } - col, err := jCol.upsertValue(name, ct) - if err != nil { - return err - } - col.origType = vType +const JSONObjectSerializationVersion uint64 = 0 +const JSONStringSerializationVersion uint64 = 1 +const JSONUnsetSerializationVersion uint64 = math.MaxUint64 +const DefaultMaxDynamicPaths = 1024 - //pre pad with empty - e.g. for new values in maps - for i := 0; i < numEmpty; i++ { - if isArray { - // empty array for nil of the right type - err = col.AppendRow([]string{}) - } else { - // empty value of the type - err = col.AppendRow(fmt.Sprint(reflect.New(vType).Elem().Interface())) - } - if err != nil { - return err - } - } - if isArray { - iValues := reflect.ValueOf(values) - sValues := make([]string, iValues.Len(), iValues.Len()) - for i := 0; i < iValues.Len(); i++ { - sValues[i] = fmt.Sprint(iValues.Index(i).Interface()) - } - return col.AppendRow(sValues) - } - return col.AppendRow(fmt.Sprint(values)) +type JSON struct { + chType Type + tz *time.Location + name string + rows int + + serializationVersion uint64 + + jsonStrings String + + typedPaths []string + typedPathsIndex map[string]int + typedColumns []Interface + + skipPaths []string + skipPathsIndex map[string]int + + dynamicPaths []string + dynamicPathsIndex map[string]int + dynamicColumns []*Dynamic + + maxDynamicPaths int + maxDynamicTypes int + totalDynamicPaths int } -func parsePrimitive(name string, kind reflect.Kind, values any, isArray bool, jCol JSONParent, numEmpty int) error { - ct, ok := kindMappings[kind] - if !ok { - return &UnsupportedColumnTypeError{ - t: Type(fmt.Sprintf("%s - %s", kind, reflect.TypeOf(values).String())), - } - } - var err error - if isArray { - ct = fmt.Sprintf("Array(%s)", ct) - // if we have a []any we will need to cast to the target column type - this will be based on the first - // values types. Inconsistent slices will fail. - values, err = convertSlice(values) - if err != nil { - return err - } +func (c *JSON) parse(t Type, tz *time.Location) (_ *JSON, err error) { + c.chType = t + c.tz = tz + tStr := string(t) + + c.serializationVersion = JSONUnsetSerializationVersion + c.typedPathsIndex = make(map[string]int) + c.skipPathsIndex = make(map[string]int) + c.dynamicPathsIndex = make(map[string]int) + c.maxDynamicPaths = DefaultMaxDynamicPaths + c.maxDynamicTypes = DefaultMaxDynamicTypes + + if tStr == "JSON" { + return c, nil } - col, err := jCol.upsertValue(name, ct) - if err != nil { - return err + + if !strings.HasPrefix(tStr, "JSON(") || !strings.HasSuffix(tStr, ")") { + return nil, &UnsupportedColumnTypeError{t: t} } - //pre pad with empty - e.g. for new values in maps - for i := 0; i < numEmpty; i++ { - if isArray { - // empty array for nil of the right type - err = col.AppendRow(reflect.MakeSlice(reflect.TypeOf(values), 0, 0).Interface()) - } else { - err = col.AppendRow(nil) + typePartsStr := strings.TrimPrefix(tStr, "JSON(") + typePartsStr = strings.TrimSuffix(typePartsStr, ")") + + typeParts := splitWithDelimiters(typePartsStr) + for _, typePart := range typeParts { + typePart = strings.TrimSpace(typePart) + + if strings.HasPrefix(typePart, "max_dynamic_paths=") { + v := strings.TrimPrefix(typePart, "max_dynamic_paths=") + if maxPaths, err := strconv.Atoi(v); err == nil { + c.maxDynamicPaths = maxPaths + } + + continue } - if err != nil { - return err + + if strings.HasPrefix(typePart, "max_dynamic_types=") { + v := strings.TrimPrefix(typePart, "max_dynamic_types=") + if maxTypes, err := strconv.Atoi(v); err == nil { + c.maxDynamicTypes = maxTypes + } + + continue } - } - return col.AppendRow(values) -} + if strings.HasPrefix(typePart, "SKIP REGEXP") { + pattern := strings.TrimPrefix(typePart, "SKIP REGEXP") + pattern = strings.Trim(pattern, " '") + c.skipPaths = append(c.skipPaths, pattern) + c.skipPathsIndex[pattern] = len(c.skipPaths) - 1 -// converts a []any of primitives to a typed slice -// maybe this can be done with reflection but likely slower. investigate. -// this uses the first value to determine the type - subsequent values must currently be of the same type - we might cast later -// but wider driver doesn't support e.g. int to int64 -func convertSlice(values any) (any, error) { - rValues := reflect.ValueOf(values) - if rValues.Len() == 0 || rValues.Index(0).Kind() != reflect.Interface { - return values, nil - } - var fType reflect.Type - for i := 0; i < rValues.Len(); i++ { - elem := rValues.Index(i).Elem() - if elem.IsValid() { - fType = elem.Type() - break + continue } - } - if fType == nil { - return []any{}, nil - } - typedSlice := reflect.MakeSlice(reflect.SliceOf(fType), 0, rValues.Len()) - for i := 0; i < rValues.Len(); i++ { - value := rValues.Index(i) - if value.IsNil() { - typedSlice = reflect.Append(typedSlice, reflect.Zero(fType)) + + if strings.HasPrefix(typePart, "SKIP") { + path := strings.TrimPrefix(typePart, "SKIP") + path = strings.Trim(path, " `") + c.skipPaths = append(c.skipPaths, path) + c.skipPathsIndex[path] = len(c.skipPaths) - 1 + continue } - if rValues.Index(i).Elem().Type() != fType { - return nil, &Error{ - ColumnType: fmt.Sprint(fType), - Err: fmt.Errorf("inconsistent slices are not supported - expected %s got %s", fType, rValues.Index(i).Elem().Type()), - } + + typedPathParts := strings.SplitN(typePart, " ", 2) + if len(typedPathParts) != 2 { + continue } - typedSlice = reflect.Append(typedSlice, rValues.Index(i).Elem()) - } - return typedSlice.Interface(), nil -} -func (jCol *JSONList) createNewOffsets(num int) { - for i := 0; i < num; i++ { - //single depth so can take 1st - if jCol.offsets[0].values.col.Rows() == 0 { - // first entry in the column - jCol.offsets[0].values.col.Append(0) - } else { - // entry for this object to see offset from last - offsets are cumulative - jCol.offsets[0].values.col.Append(jCol.offsets[0].values.col.Row(jCol.offsets[0].values.col.Rows() - 1)) + typedPath := strings.Trim(typedPathParts[0], "`") + typeName := strings.TrimSpace(typedPathParts[1]) + + c.typedPaths = append(c.typedPaths, typedPath) + c.typedPathsIndex[typedPath] = len(c.typedPaths) - 1 + + col, err := Type(typeName).Column("", tz) + if err != nil { + return nil, fmt.Errorf("failed to init column of type \"%s\" at path \"%s\": %w", typeName, typedPath, err) } + + c.typedColumns = append(c.typedColumns, col) } + + return c, nil } -func getStructFieldName(field reflect.StructField) (string, bool) { - name := field.Name - tag := field.Tag.Get("json") - // not a standard but we allow - to omit fields - if tag == "-" { - return name, true - } - if tag != "" { - return tag, false - } - // support ch tag as well as this is used elsewhere - tag = field.Tag.Get("ch") - if tag == "-" { - return name, true - } - if tag != "" { - return tag, false - } - return name, false +func (c *JSON) hasTypedPath(path string) bool { + _, ok := c.typedPathsIndex[path] + return ok } -// ensures numeric keys and ` are escaped properly -func getMapFieldName(name string) string { - if !escapeColRegex.MatchString(name) { - return fmt.Sprintf("`%s`", colEscape.Replace(name)) - } - return colEscape.Replace(name) +func (c *JSON) hasDynamicPath(path string) bool { + _, ok := c.dynamicPathsIndex[path] + return ok } -func parseSlice(name string, values any, jCol JSONParent, preFill int) error { - fType := reflect.TypeOf(values).Elem() - sKind := fType.Kind() - rValues := reflect.ValueOf(values) +func (c *JSON) hasSkipPath(path string) bool { + _, ok := c.skipPathsIndex[path] + return ok +} - if sKind == reflect.Interface { - //use the first element to determine if it is a complex or primitive map - after this we need consistent dimensions - if rValues.Len() == 0 { - return nil - } - var value reflect.Value - for i := 0; i < rValues.Len(); i++ { - value = rValues.Index(i).Elem() - if value.IsValid() { - break - } - } - if !value.IsValid() { - return nil +// pathHasNestedValues returns true if the provided path has child paths in typed or dynamic paths +func (c *JSON) pathHasNestedValues(path string) bool { + for _, typedPath := range c.typedPaths { + if strings.HasPrefix(typedPath, path+".") { + return true } - fType = value.Type() - sKind = value.Kind() } - if _, ok := typeMappings[fType.String()]; ok { - return parseType(name, fType, values, true, jCol, preFill) - } else if sKind == reflect.Struct || sKind == reflect.Map || sKind == reflect.Slice { - if rValues.Len() == 0 { - return nil - } - col, err := jCol.upsertList(name) - if err != nil { - return err - } - col.createNewOffsets(preFill + 1) - for i := 0; i < rValues.Len(); i++ { - // increment offset - col.offsets[0].values.col[col.offsets[0].values.col.Rows()-1] += 1 - value := rValues.Index(i) - sKind = value.Kind() - if sKind == reflect.Interface { - sKind = value.Elem().Kind() - } - switch sKind { - case reflect.Struct: - col.isNested = true - if err = iterateStruct(value, col, 0); err != nil { - return err - } - case reflect.Map: - col.isNested = true - if err = iterateMap(value, col, 0); err != nil { - return err - } - case reflect.Slice: - if err = parseSlice("", value.Interface(), col, 0); err != nil { - return err - } - default: - // only happens if slice has a primitive mixed with complex types in a []any - return &Error{ - ColumnType: fmt.Sprint(sKind), - Err: fmt.Errorf("slices must be same dimension in column %s", col.Name()), - } - } + for _, dynamicPath := range c.dynamicPaths { + if strings.HasPrefix(dynamicPath, path+".") { + return true } - return nil } - return parsePrimitive(name, sKind, values, true, jCol, preFill) -} -func parseStruct(name string, structVal reflect.Value, jCol JSONParent, preFill int) error { - col, err := jCol.upsertObject(name) - if err != nil { - return err - } - return iterateStruct(structVal, col, preFill) + return false } -func iterateStruct(structVal reflect.Value, col JSONParent, preFill int) error { - // structs generally have consistent field counts but we ignore nil values that are any as we can't infer from - // these until they occur - so we might need to either backfill when to do occur or insert empty based on previous - if structVal.Kind() == reflect.Interface { - // can happen if passed from []any - structVal = structVal.Elem() +// valueAtPath returns the row value at the specified path, typed or dynamic +func (c *JSON) valueAtPath(path string, row int, ptr bool) any { + if colIndex, ok := c.typedPathsIndex[path]; ok { + return c.typedColumns[colIndex].Row(row, ptr) } - currentColumns := col.columnNames() - columnLookup := make(map[string]struct{}) - numRows := col.rows() - for _, name := range currentColumns { - columnLookup[name] = struct{}{} + if colIndex, ok := c.dynamicPathsIndex[path]; ok { + return c.dynamicColumns[colIndex].Row(row, ptr) } - addedColumns := make([]string, structVal.NumField(), structVal.NumField()) - newColumn := false - for i := 0; i < structVal.NumField(); i++ { - fName, omit := getStructFieldName(structVal.Type().Field(i)) - if omit { - continue - } - field := structVal.Field(i) - if !field.CanInterface() { - // can't interface - likely not exported so ignore the field - continue - } - kind := field.Kind() - value := field.Interface() - fType := field.Type() - //resolve underlying kind - if kind == reflect.Interface { - if value == nil { - // ignore nil fields - continue - } - kind = reflect.TypeOf(value).Kind() - field = reflect.ValueOf(value) - fType = field.Type() - } - if _, ok := columnLookup[fName]; !ok && len(currentColumns) > 0 { - // new column - need to handle missing - preFill = numRows - newColumn = true - } - if _, ok := typeMappings[fType.String()]; ok { - if err := parseType(fName, fType, value, false, col, preFill); err != nil { - return err - } - } else { - switch kind { - case reflect.Slice: - if reflect.ValueOf(value).Len() == 0 { - continue - } - if err := parseSlice(fName, value, col, preFill); err != nil { - return err - } - case reflect.Struct: - if err := parseStruct(fName, field, col, preFill); err != nil { - return err - } - case reflect.Map: - if err := parseMap(fName, field, col, preFill); err != nil { - return err - } - default: - if err := parsePrimitive(fName, kind, value, false, col, preFill); err != nil { - return err - } - } - } - addedColumns[i] = fName - if newColumn { - // reset as otherwise prefill overflow to other fields. But don't reset if this prefill has come from - // a higher level - preFill = 0 - } - } - // handle missing - missingColumns := difference(currentColumns, addedColumns) - for _, name := range missingColumns { - if err := col.insertEmptyColumn(name); err != nil { - return err - } - } return nil } -func parseMap(name string, mapVal reflect.Value, jCol JSONParent, preFill int) error { - if mapVal.Type().Key().Kind() != reflect.String { - return &Error{ - ColumnType: fmt.Sprint(mapVal.Type().Key().Kind()), - Err: fmt.Errorf("map keys must be string for column %s", name), - } +// scanTypedPathToValue scans the provided typed path into a `reflect.Value` +func (c *JSON) scanTypedPathToValue(path string, row int, value reflect.Value) error { + colIndex, ok := c.typedPathsIndex[path] + if !ok { + return fmt.Errorf("typed path \"%s\" does not exist in JSON column", path) } - col, err := jCol.upsertObject(name) + + col := c.typedColumns[colIndex] + err := col.ScanRow(value.Addr().Interface(), row) if err != nil { - return err - } - return iterateMap(mapVal, col, preFill) -} - -func iterateMap(mapVal reflect.Value, col JSONParent, preFill int) error { - // maps can have inconsistent numbers of elements - we must ensure they are consistent in the encoding - // two inconsistent options - 1. new - map has new columns 2. massing - map has missing columns - // for (1) we need to update previous, for (2) we need to ensure we add a null entry - if mapVal.Kind() == reflect.Interface { - // can happen if passed from []any - mapVal = mapVal.Elem() - } - - currentColumns := col.columnNames() - //gives us a fast lookup for large maps - columnLookup := make(map[string]struct{}) - numRows := col.rows() - // true if we need nil values - for _, name := range currentColumns { - columnLookup[name] = struct{}{} - } - addedColumns := make([]string, len(mapVal.MapKeys()), len(mapVal.MapKeys())) - newColumn := false - for i, key := range mapVal.MapKeys() { - if newColumn { - // reset as otherwise prefill overflow to other fields. But don't reset if this prefill has come from - // a higher level - preFill = 0 - } - - name := getMapFieldName(key.Interface().(string)) - if _, ok := columnLookup[name]; !ok && len(currentColumns) > 0 { - // new column - need to handle - preFill = numRows - newColumn = true - } - field := mapVal.MapIndex(key) - kind := field.Kind() - fType := field.Type() - - if kind == reflect.Interface { - if field.Interface() == nil { - // ignore nil fields - continue - } - kind = reflect.TypeOf(field.Interface()).Kind() - field = reflect.ValueOf(field.Interface()) - fType = field.Type() - } - if _, ok := typeMappings[fType.String()]; ok { - if err := parseType(name, fType, field.Interface(), false, col, preFill); err != nil { - return err - } - } else { - switch kind { - case reflect.Struct: - if err := parseStruct(name, field, col, preFill); err != nil { - return err - } - case reflect.Slice: - if err := parseSlice(name, field.Interface(), col, preFill); err != nil { - return err - } - case reflect.Map: - if err := parseMap(name, field, col, preFill); err != nil { - return err - } - default: - if err := parsePrimitive(name, kind, field.Interface(), false, col, preFill); err != nil { - return err - } - } - } - addedColumns[i] = name - } - // handle missing - missingColumns := difference(currentColumns, addedColumns) - for _, name := range missingColumns { - if err := col.insertEmptyColumn(name); err != nil { - return err - } + return fmt.Errorf("failed to scan %s column into typed path \"%s\": %w", col.Type(), path, err) } + return nil } -func appendStructOrMap(jCol *JSONObject, data any) error { - vData := reflect.ValueOf(data) - kind := vData.Kind() - if kind == reflect.Struct { - return iterateStruct(vData, jCol, 0) - } - if kind == reflect.Map { - if reflect.TypeOf(data).Key().Kind() != reflect.String { - return &Error{ - ColumnType: fmt.Sprint(reflect.TypeOf(data).Key().Kind()), - Err: fmt.Errorf("map keys must be string for column %s", jCol.Name()), - } - } - if jCol.columns == nil && vData.Len() == 0 { - // if map is empty, we need to create an empty Tuple to make sure subcolumns protocol is happy - // _dummy is a ClickHouse internal name for empty Tuple subcolumn - // it has the same effect as `INSERT INTO single_json_type_table VALUES ('{}');` - jCol.upsertValue("_dummy", "Int8") - return jCol.insertEmptyColumn("_dummy") - } - return iterateMap(vData, jCol, 0) +// scanDynamicPathToValue scans the provided typed path into a `reflect.Value` +func (c *JSON) scanDynamicPathToValue(path string, row int, value reflect.Value) error { + colIndex, ok := c.dynamicPathsIndex[path] + if !ok { + return fmt.Errorf("dynamic path \"%s\" does not exist in JSON column", path) } - return &UnsupportedColumnTypeError{ - t: Type(fmt.Sprint(kind)), + + col := c.dynamicColumns[colIndex] + err := col.ScanRow(value.Addr().Interface(), row) + if err != nil { + return fmt.Errorf("failed to scan %s column into dynamic path \"%s\": %w", col.Type(), path, err) } -} -type JSONValue struct { - Interface - // represents the type e.g. uuid - these may have been mapped to a Column type support by JSON e.g. String - origType reflect.Type + return nil } -func (jCol *JSONValue) Reset() { - jCol.Interface.Reset() -} +func (c *JSON) rowAsJSON(row int) *chcol.JSON { + obj := chcol.NewJSON() -func (jCol *JSONValue) appendEmptyValue() error { - switch jCol.Interface.(type) { - case *Array: - if jCol.Rows() > 0 { - return jCol.AppendRow(reflect.MakeSlice(reflect.TypeOf(jCol.Row(0, false)), 0, 0).Interface()) - } - return &Error{ - ColumnType: "unknown", - Err: fmt.Errorf("can't add empty value to column %s - no entries to infer type", jCol.Name()), - } - default: - // can't just append nil here as we need a custom nil value for the type - if jCol.origType != nil { - return jCol.AppendRow(fmt.Sprint(reflect.New(jCol.origType).Elem().Interface())) - } - return jCol.AppendRow(nil) + for i, path := range c.typedPaths { + col := c.typedColumns[i] + obj.SetValueAtPath(path, col.Row(row, false)) } -} -func (jCol *JSONValue) Type() Type { - return Type(fmt.Sprintf("%s %s", jCol.Name(), jCol.Interface.Type())) + for i, path := range c.dynamicPaths { + col := c.dynamicColumns[i] + obj.SetValueAtPath(path, col.Row(row, false)) + } + + return obj } -type JSONList struct { - Array - name string - isNested bool // indicates if this a list of objects i.e. a Nested +func (c *JSON) Name() string { + return c.name } -func (jCol *JSONList) Name() string { - return jCol.name +func (c *JSON) Type() Type { + return c.chType } -func (jCol *JSONList) columnNames() []string { - return jCol.Array.values.(*JSONObject).columnNames() +func (c *JSON) Rows() int { + return c.rows } -func (jCol *JSONList) rows() int { - return jCol.values.(*JSONObject).Rows() +func (c *JSON) Row(row int, ptr bool) any { + switch c.serializationVersion { + case JSONObjectSerializationVersion: + return c.rowAsJSON(row) + case JSONStringSerializationVersion: + return c.jsonStrings.Row(row, ptr) + default: + return nil + } } -func createJSONList(name string, tz *time.Location) (jCol *JSONList) { - // lists are represented as Nested which are in turn encoded as Array(Tuple()). We thus pass a Array(JSONObject()) - // as this encodes like a tuple - lCol := &JSONList{ - name: name, +func (c *JSON) ScanRow(dest any, row int) error { + switch c.serializationVersion { + case JSONObjectSerializationVersion: + return c.scanRowObject(dest, row) + case JSONStringSerializationVersion: + return c.scanRowString(dest, row) + default: + return fmt.Errorf("unsupported JSON serialization version for scan: %d", c.serializationVersion) } - lCol.values = &JSONObject{tz: tz} - // depth should always be one as nested arrays aren't possible - lCol.depth = 1 - lCol.scanType = scanTypeSlice - offsetScanTypes := []reflect.Type{lCol.scanType} - lCol.offsets = []*offset{{ - scanType: offsetScanTypes[0], - }} - return lCol } -func (jCol *JSONList) appendEmptyValue() error { - // only need to bump the offsets - jCol.createNewOffsets(1) - return nil +func (c *JSON) scanRowObject(dest any, row int) error { + switch v := dest.(type) { + case *chcol.JSON: + obj := c.rowAsJSON(row) + *v = *obj + return nil + case **chcol.JSON: + obj := c.rowAsJSON(row) + **v = *obj + return nil + case chcol.JSONDeserializer: + obj := c.rowAsJSON(row) + err := v.DeserializeClickHouseJSON(obj) + if err != nil { + return fmt.Errorf("failed to deserialize using DeserializeClickHouseJSON: %w", err) + } + + return nil + } + + switch val := reflect.ValueOf(dest); val.Kind() { + case reflect.Pointer: + if val.Elem().Kind() == reflect.Struct { + return c.scanIntoStruct(dest, row) + } else if val.Elem().Kind() == reflect.Map { + return c.scanIntoMap(dest, row) + } + } + + return fmt.Errorf("destination must be a pointer to struct or map, or %s. hint: enable \"output_format_native_write_json_as_string\" setting for string decoding", scanTypeJSON.String()) } -func (jCol *JSONList) insertEmptyColumn(name string) error { - return jCol.values.(*JSONObject).insertEmptyColumn(name) +func (c *JSON) scanRowString(dest any, row int) error { + return c.jsonStrings.ScanRow(dest, row) } -func (jCol *JSONList) upsertValue(name string, ct string) (*JSONValue, error) { - // check if column exists and reuse if same type, error if same name and different type - jObj := jCol.values.(*JSONObject) - cols := jObj.columns - for i := range cols { - sCol := cols[i] - if sCol.Name() == name { - vCol, ok := cols[i].(*JSONValue) - if !ok { - sType := cols[i].Type() - return nil, &Error{ - ColumnType: fmt.Sprint(sType), - Err: fmt.Errorf("type mismatch in column %s - expected value, got %s", name, sType), - } - } - tType := vCol.Interface.Type() - if tType != Type(ct) { - return nil, &Error{ - ColumnType: ct, - Err: fmt.Errorf("type mismatch in column %s - expected %s, got %s", name, tType, ct), - } +func (c *JSON) Append(v any) (nulls []uint8, err error) { + switch c.serializationVersion { + case JSONObjectSerializationVersion: + return c.appendObject(v) + case JSONStringSerializationVersion: + return c.appendString(v) + default: + // Unset serialization preference, try string first unless its specifically JSON + switch v.(type) { + case []chcol.JSON: + c.serializationVersion = JSONObjectSerializationVersion + return c.appendObject(v) + case []*chcol.JSON: + c.serializationVersion = JSONObjectSerializationVersion + return c.appendObject(v) + case []chcol.JSONSerializer: + c.serializationVersion = JSONObjectSerializationVersion + return c.appendObject(v) + } + + var err error + if _, err = c.appendString(v); err == nil { + c.serializationVersion = JSONStringSerializationVersion + return nil, nil + } else if _, err = c.appendObject(v); err == nil { + c.serializationVersion = JSONObjectSerializationVersion + return nil, nil + } + + return nil, fmt.Errorf("unsupported type \"%s\" for JSON column, must use slice of string, []byte, struct, map, or *%s: %w", reflect.TypeOf(v).String(), scanTypeJSON.String(), err) + } +} + +func (c *JSON) appendObject(v any) (nulls []uint8, err error) { + switch vv := v.(type) { + case []chcol.JSON: + for i, obj := range vv { + err := c.AppendRow(obj) + if err != nil { + return nil, fmt.Errorf("failed to AppendRow at index %d: %w", i, err) } - return vCol, nil } - } - col, err := Type(ct).Column(name, jObj.tz) - if err != nil { - return nil, err - } - vCol := &JSONValue{ - Interface: col, - } - jCol.values.(*JSONObject).columns = append(cols, vCol) // nolint:gocritic - return vCol, nil -} - -func (jCol *JSONList) upsertList(name string) (*JSONList, error) { - // check if column exists and reuse if same type, error if same name and different type - jObj := jCol.values.(*JSONObject) - cols := jCol.values.(*JSONObject).columns - for i := range cols { - sCol := cols[i] - if sCol.Name() == name { - sCol, ok := cols[i].(*JSONList) - if !ok { - return nil, &Error{ - ColumnType: fmt.Sprint(cols[i].Type()), - Err: fmt.Errorf("type mismatch in column %s - expected list, got %s", name, cols[i].Type()), - } + + return nil, nil + case []*chcol.JSON: + for i, obj := range vv { + err := c.AppendRow(obj) + if err != nil { + return nil, fmt.Errorf("failed to AppendRow at index %d: %w", i, err) } - return sCol, nil } - } - lCol := createJSONList(name, jObj.tz) - jCol.values.(*JSONObject).columns = append(cols, lCol) // nolint:gocritic - return lCol, nil -} - -func (jCol *JSONList) upsertObject(name string) (*JSONObject, error) { - // check if column exists and reuse if same type, error if same name and different type - jObj := jCol.values.(*JSONObject) - cols := jObj.columns - for i := range cols { - sCol := cols[i] - if sCol.Name() == name { - sCol, ok := cols[i].(*JSONObject) - if !ok { - sType := cols[i].Type() - return nil, &Error{ - ColumnType: fmt.Sprint(sType), - Err: fmt.Errorf("type mismatch in column %s, expected object got %s", name, sType), - } + return nil, nil + case []chcol.JSONSerializer: + for i, obj := range vv { + err := c.AppendRow(obj) + if err != nil { + return nil, fmt.Errorf("failed to AppendRow at index %d: %w", i, err) } - return sCol, nil } + + return nil, nil } - // lists are represented as Nested which are in turn encoded as Array(Tuple()). We thus pass a Array(JSONObject()) - // as this encodes like a tuple - oCol := &JSONObject{ - name: name, - tz: jObj.tz, - } - jCol.values.(*JSONObject).columns = append(cols, oCol) // nolint:gocritic - return oCol, nil -} -func (jCol *JSONList) Type() Type { - cols := jCol.values.(*JSONObject).columns - subTypes := make([]string, len(cols)) - for i, v := range cols { - subTypes[i] = string(v.Type()) + value := reflect.Indirect(reflect.ValueOf(v)) + if value.Kind() != reflect.Slice { + return nil, &ColumnConverterError{ + Op: "Append", + To: string(c.chType), + From: fmt.Sprintf("%T", v), + Hint: "value must be a slice", + } } - // can be a list of lists or a nested - if jCol.isNested { - return Type(fmt.Sprintf("%s Nested(%s)", jCol.name, strings.Join(subTypes, ", "))) + for i := 0; i < value.Len(); i++ { + if err := c.AppendRow(value.Index(i)); err != nil { + return nil, err + } } - return Type(fmt.Sprintf("%s Array(%s)", jCol.name, strings.Join(subTypes, ", "))) -} -type JSONObject struct { - columns []JSON - name string - root bool - encoding uint8 - tz *time.Location + return nil, nil } -func (jCol *JSONObject) Reset() { - for i := range jCol.columns { - jCol.columns[i].Reset() +func (c *JSON) appendString(v any) (nulls []uint8, err error) { + nulls, err = c.jsonStrings.Append(v) + if err != nil { + return nil, err } -} -func (jCol *JSONObject) Name() string { - return jCol.name + c.rows = c.jsonStrings.Rows() + return nulls, nil } -func (jCol *JSONObject) columnNames() []string { - columns := make([]string, len(jCol.columns), len(jCol.columns)) - for i := range jCol.columns { - columns[i] = jCol.columns[i].Name() - } - return columns -} +func (c *JSON) AppendRow(v any) error { + switch c.serializationVersion { + case JSONObjectSerializationVersion: + return c.appendRowObject(v) + case JSONStringSerializationVersion: + return c.appendRowString(v) + default: + // Unset serialization preference, try string first unless its specifically JSON + switch v.(type) { + case chcol.JSON: + c.serializationVersion = JSONObjectSerializationVersion + return c.appendRowObject(v) + case *chcol.JSON: + c.serializationVersion = JSONObjectSerializationVersion + return c.appendRowObject(v) + case chcol.JSONSerializer: + c.serializationVersion = JSONObjectSerializationVersion + return c.appendRowObject(v) + } + + var err error + if err = c.appendRowString(v); err == nil { + c.serializationVersion = JSONStringSerializationVersion + return nil + } else if err = c.appendRowObject(v); err == nil { + c.serializationVersion = JSONObjectSerializationVersion + return nil + } -func (jCol *JSONObject) rows() int { - return jCol.Rows() + return fmt.Errorf("unsupported type \"%s\" for JSON column, must use string, []byte, *struct, map, or *clickhouse.JSON: %w", reflect.TypeOf(v).String(), err) + } } -func (jCol *JSONObject) appendEmptyValue() error { - for i := range jCol.columns { - if err := jCol.columns[i].appendEmptyValue(); err != nil { - return err +func (c *JSON) appendRowObject(v any) error { + var obj *chcol.JSON + switch vv := v.(type) { + case chcol.JSON: + obj = &vv + case *chcol.JSON: + obj = vv + case chcol.JSONSerializer: + var err error + obj, err = vv.SerializeClickHouseJSON() + if err != nil { + return fmt.Errorf("failed to serialize using SerializeClickHouseJSON: %w", err) } } - return nil -} -func (jCol *JSONObject) insertEmptyColumn(name string) error { - for i := range jCol.columns { - if jCol.columns[i].Name() == name { - if err := jCol.columns[i].appendEmptyValue(); err != nil { - return err + if obj == nil && v != nil { + var err error + switch val := reflect.ValueOf(v); val.Kind() { + case reflect.Pointer: + if val.Elem().Kind() == reflect.Struct { + obj, err = structToJSON(v) + } else if val.Elem().Kind() == reflect.Map { + obj, err = mapToJSON(v) } - return nil + case reflect.Struct: + obj, err = structToJSON(v) + case reflect.Map: + obj, err = mapToJSON(v) } - } - return &Error{ - ColumnType: "unknown", - Err: fmt.Errorf("column %s is missing - empty value cannot be appended", name), - } -} -func (jCol *JSONObject) upsertValue(name string, ct string) (*JSONValue, error) { - for i := range jCol.columns { - sCol := jCol.columns[i] - if sCol.Name() == name { - vCol, ok := jCol.columns[i].(*JSONValue) - if !ok { - sType := jCol.columns[i].Type() - return nil, &Error{ - ColumnType: fmt.Sprint(sType), - Err: fmt.Errorf("type mismatch in column %s, expected value got %s", name, sType), - } - } - if vCol.Interface.Type() != Type(ct) { - return nil, &Error{ - ColumnType: ct, - Err: fmt.Errorf("type mismatch in column %s, expected %s got %s", name, vCol.Interface.Type(), ct), - } - } - return vCol, nil + if err != nil { + return fmt.Errorf("failed to convert value to JSON: %w", err) } } - col, err := Type(ct).Column(name, jCol.tz) - if err != nil { - return nil, err + + if obj == nil { + obj = chcol.NewJSON() } - vCol := &JSONValue{ - Interface: col, + valuesByPath := obj.ValuesByPath() + + // Match typed paths first + for i, typedPath := range c.typedPaths { + // Even if value is nil, we must append a value for this row. + // nil is a valid value for most column types, with most implementations putting a zero value. + // If the column doesn't support appending nil, then the user must provide a zero value. + value, _ := valuesByPath[typedPath] + + col := c.typedColumns[i] + err := col.AppendRow(value) + if err != nil { + return fmt.Errorf("failed to append type %s to json column at typed path %s: %w", col.Type(), typedPath, err) + } } - jCol.columns = append(jCol.columns, vCol) - return vCol, nil -} -func (jCol *JSONObject) upsertList(name string) (*JSONList, error) { - for i := range jCol.columns { - sCol := jCol.columns[i] - if sCol.Name() == name { - sCol, ok := jCol.columns[i].(*JSONList) - if !ok { - sType := jCol.columns[i].Type() - return nil, &Error{ - ColumnType: fmt.Sprint(sType), - Err: fmt.Errorf("type mismatch in column %s, expected list got %s", name, sType), - } - } - return sCol, nil + // Verify all dynamic paths have an equal number of rows by appending nil for all unspecified dynamic paths + for _, dynamicPath := range c.dynamicPaths { + if _, ok := valuesByPath[dynamicPath]; !ok { + valuesByPath[dynamicPath] = nil } } - lCol := createJSONList(name, jCol.tz) - jCol.columns = append(jCol.columns, lCol) - return lCol, nil -} -func (jCol *JSONObject) upsertObject(name string) (*JSONObject, error) { - // check if it exists - for i := range jCol.columns { - sCol := jCol.columns[i] - if sCol.Name() == name { - sCol, ok := jCol.columns[i].(*JSONObject) - if !ok { - sType := jCol.columns[i].Type() - return nil, &Error{ - ColumnType: fmt.Sprint(sType), - Err: fmt.Errorf("type mismatch in column %s, expected object got %s", name, sType), + // Match or add dynamic paths + for objPath, value := range valuesByPath { + if c.hasTypedPath(objPath) || c.hasSkipPath(objPath) { + continue + } + + if dynamicPathIndex, ok := c.dynamicPathsIndex[objPath]; ok { + err := c.dynamicColumns[dynamicPathIndex].AppendRow(value) + if err != nil { + return fmt.Errorf("failed to append to json column at dynamic path \"%s\": %w", objPath, err) + } + } else { + // Path doesn't exist, add new dynamic path + column + parsedColDynamic, _ := Type("Dynamic").Column("", c.tz) + colDynamic := parsedColDynamic.(*Dynamic) + + // New path must back-fill nils for each row + for i := 0; i < c.rows; i++ { + err := colDynamic.AppendRow(nil) + if err != nil { + return fmt.Errorf("failed to back-fill json column at new dynamic path \"%s\" index %d: %w", objPath, i, err) } } - return sCol, nil + + err := colDynamic.AppendRow(value) + if err != nil { + return fmt.Errorf("failed to append to json column at new dynamic path \"%s\": %w", objPath, err) + } + + c.dynamicPaths = append(c.dynamicPaths, objPath) + c.dynamicPathsIndex[objPath] = len(c.dynamicPaths) - 1 + c.dynamicColumns = append(c.dynamicColumns, colDynamic) + c.totalDynamicPaths++ } } - // not present so create - oCol := &JSONObject{ - name: name, - tz: jCol.tz, + + c.rows++ + return nil +} + +func (c *JSON) appendRowString(v any) error { + err := c.jsonStrings.AppendRow(v) + if err != nil { + return err } - jCol.columns = append(jCol.columns, oCol) - return oCol, nil + + c.rows++ + return nil } -func (jCol *JSONObject) Type() Type { - if jCol.root { - return "Object('json')" +func (c *JSON) encodeObjectHeader(buffer *proto.Buffer) { + buffer.PutUVarInt(uint64(c.maxDynamicPaths)) + buffer.PutUVarInt(uint64(c.totalDynamicPaths)) + + for _, dynamicPath := range c.dynamicPaths { + buffer.PutString(dynamicPath) + } + + for _, col := range c.dynamicColumns { + col.encodeHeader(buffer) } - return jCol.FullType() } -func (jCol *JSONObject) FullType() Type { - subTypes := make([]string, len(jCol.columns)) - for i, v := range jCol.columns { - subTypes[i] = string(v.Type()) +func (c *JSON) encodeObjectData(buffer *proto.Buffer) { + for _, col := range c.typedColumns { + col.Encode(buffer) + } + + for _, col := range c.dynamicColumns { + col.encodeData(buffer) } - if jCol.root { - return Type(fmt.Sprintf("Tuple(%s)", strings.Join(subTypes, ", "))) + + // SharedData per row, empty for now. + for i := 0; i < c.rows; i++ { + buffer.PutUInt64(0) } - return Type(fmt.Sprintf("%s Tuple(%s)", jCol.name, strings.Join(subTypes, ", "))) } -func (jCol *JSONObject) ScanType() reflect.Type { - return scanTypeMap +func (c *JSON) encodeStringData(buffer *proto.Buffer) { + c.jsonStrings.Encode(buffer) } -func (jCol *JSONObject) Rows() int { - if len(jCol.columns) != 0 { - return jCol.columns[0].Rows() +func (c *JSON) WriteStatePrefix(buffer *proto.Buffer) error { + switch c.serializationVersion { + case JSONObjectSerializationVersion: + buffer.PutUInt64(JSONObjectSerializationVersion) + c.encodeObjectHeader(buffer) + + return nil + case JSONStringSerializationVersion: + buffer.PutUInt64(JSONStringSerializationVersion) + + return nil + default: + // If the column is an array, it can be empty but still require a prefix. + // Use string encoding since it's smaller + buffer.PutUInt64(JSONStringSerializationVersion) + + return nil } - return 0 } -// ClickHouse returns JSON as a tuple i.e. these will never be invoked - -func (jCol *JSONObject) Row(i int, ptr bool) any { - panic("Not implemented") +func (c *JSON) Encode(buffer *proto.Buffer) { + switch c.serializationVersion { + case JSONObjectSerializationVersion: + c.encodeObjectData(buffer) + return + case JSONStringSerializationVersion: + c.encodeStringData(buffer) + return + } } -func (jCol *JSONObject) ScanRow(dest any, row int) error { - panic("Not implemented") +func (c *JSON) ScanType() reflect.Type { + return scanTypeJSON } -func (jCol *JSONObject) Append(v any) (nulls []uint8, err error) { - jSlice := reflect.ValueOf(v) - if jSlice.Kind() != reflect.Slice { - return nil, &ColumnConverterError{ - Op: "Append", - To: string(jCol.Type()), - From: fmt.Sprintf("slice of structs/map or strings required - received %T", v), +func (c *JSON) Reset() { + c.rows = 0 + + switch c.serializationVersion { + case JSONObjectSerializationVersion: + for _, col := range c.typedColumns { + col.Reset() } - } - for i := 0; i < jSlice.Len(); i++ { - if err := jCol.AppendRow(jSlice.Index(i).Interface()); err != nil { - return nil, err + + for _, col := range c.dynamicColumns { + col.Reset() } + + return + case JSONStringSerializationVersion: + c.jsonStrings.Reset() + return } - return nil, nil } -func (jCol *JSONObject) AppendRow(v any) error { - if reflect.ValueOf(v).Kind() == reflect.Struct || reflect.ValueOf(v).Kind() == reflect.Map { - if jCol.columns != nil && jCol.encoding == 1 { - return &Error{ - ColumnType: fmt.Sprint(jCol.Type()), - Err: fmt.Errorf("encoding of JSON columns cannot be mixed in a batch - %s cannot be added as previously String", reflect.ValueOf(v).Kind()), - } +func (c *JSON) decodeObjectHeader(reader *proto.Reader) error { + maxDynamicPaths, err := reader.UVarInt() + if err != nil { + return fmt.Errorf("failed to read max dynamic paths for json column: %w", err) + } + c.maxDynamicPaths = int(maxDynamicPaths) + + totalDynamicPaths, err := reader.UVarInt() + if err != nil { + return fmt.Errorf("failed to read total dynamic paths for json column: %w", err) + } + c.totalDynamicPaths = int(totalDynamicPaths) + + c.dynamicPaths = make([]string, 0, totalDynamicPaths) + for i := 0; i < int(totalDynamicPaths); i++ { + dynamicPath, err := reader.Str() + if err != nil { + return fmt.Errorf("failed to read dynamic path name bytes at index %d for json column: %w", i, err) } - err := appendStructOrMap(jCol, v) - return err + + c.dynamicPaths = append(c.dynamicPaths, dynamicPath) + c.dynamicPathsIndex[dynamicPath] = len(c.dynamicPaths) - 1 } - switch v := v.(type) { - case string: - if jCol.columns != nil && jCol.encoding == 0 { - return &Error{ - ColumnType: fmt.Sprint(jCol.Type()), - Err: fmt.Errorf("encoding of JSON columns cannot be mixed in a batch - %s cannot be added as previously Struct/Map", reflect.ValueOf(v).Kind()), - } + + c.dynamicColumns = make([]*Dynamic, 0, totalDynamicPaths) + for _, dynamicPath := range c.dynamicPaths { + parsedColDynamic, _ := Type("Dynamic").Column("", c.tz) + colDynamic := parsedColDynamic.(*Dynamic) + + err := colDynamic.decodeHeader(reader) + if err != nil { + return fmt.Errorf("failed to decode dynamic header at path %s for json column: %w", dynamicPath, err) } - jCol.encoding = 1 - if jCol.columns == nil { - jCol.columns = append(jCol.columns, &JSONValue{Interface: &String{}}) + + c.dynamicColumns = append(c.dynamicColumns, colDynamic) + } + + return nil +} + +func (c *JSON) decodeObjectData(reader *proto.Reader, rows int) error { + for i, col := range c.typedColumns { + typedPath := c.typedPaths[i] + + err := col.Decode(reader, rows) + if err != nil { + return fmt.Errorf("failed to decode %s typed path %s for json column: %w", col.Type(), typedPath, err) } - jCol.columns[0].AppendRow(v) - default: - return &ColumnConverterError{ - Op: "AppendRow", - To: "String", - From: fmt.Sprintf("json row must be struct, map or string - received %T", v), + } + + for i, col := range c.dynamicColumns { + dynamicPath := c.dynamicPaths[i] + + err := col.decodeData(reader, rows) + if err != nil { + return fmt.Errorf("failed to decode dynamic path %s for json column: %w", dynamicPath, err) } } + + // SharedData per row, ignored for now. May cause stream offset issues if present + _, err := reader.ReadRaw(8 * rows) // one UInt64 per row + if err != nil { + return fmt.Errorf("failed to read shared data for json column: %w", err) + } + return nil } -func (jCol *JSONObject) Decode(reader *proto.Reader, rows int) error { - panic("Not implemented") +func (c *JSON) decodeStringData(reader *proto.Reader, rows int) error { + return c.jsonStrings.Decode(reader, rows) } -func (jCol *JSONObject) Encode(buffer *proto.Buffer) { - if jCol.root && jCol.encoding == 0 { - buffer.PutString(string(jCol.FullType())) +func (c *JSON) ReadStatePrefix(reader *proto.Reader) error { + jsonSerializationVersion, err := reader.UInt64() + if err != nil { + return fmt.Errorf("failed to read json serialization version: %w", err) } - for _, c := range jCol.columns { - c.Encode(buffer) + + c.serializationVersion = jsonSerializationVersion + + switch jsonSerializationVersion { + case JSONObjectSerializationVersion: + err := c.decodeObjectHeader(reader) + if err != nil { + return fmt.Errorf("failed to decode json object header: %w", err) + } + + return nil + case JSONStringSerializationVersion: + return nil + default: + return fmt.Errorf("unsupported JSON serialization version for prefix decode: %d", jsonSerializationVersion) } } -func (jCol *JSONObject) ReadStatePrefix(reader *proto.Reader) error { - _, err := reader.UInt8() - return err -} +func (c *JSON) Decode(reader *proto.Reader, rows int) error { + c.rows = rows -func (jCol *JSONObject) WriteStatePrefix(buffer *proto.Buffer) error { - buffer.PutUInt8(jCol.encoding) - return nil -} + switch c.serializationVersion { + case JSONObjectSerializationVersion: + err := c.decodeObjectData(reader, rows) + if err != nil { + return fmt.Errorf("failed to decode json object data: %w", err) + } -var ( - _ Interface = (*JSONObject)(nil) - _ CustomSerialization = (*JSONObject)(nil) -) + return nil + case JSONStringSerializationVersion: + err := c.decodeStringData(reader, rows) + if err != nil { + return fmt.Errorf("failed to decode json string data: %w", err) + } + + return nil + default: + return fmt.Errorf("unsupported JSON serialization version for decode: %d", c.serializationVersion) + } +} + +// splitWithDelimiters splits the string while considering backticks and parentheses +func splitWithDelimiters(s string) []string { + var parts []string + var currentPart strings.Builder + var brackets int + inBackticks := false + + for i := 0; i < len(s); i++ { + switch s[i] { + case '`': + inBackticks = !inBackticks + currentPart.WriteByte(s[i]) + case '(': + brackets++ + currentPart.WriteByte(s[i]) + case ')': + brackets-- + currentPart.WriteByte(s[i]) + case ',': + if !inBackticks && brackets == 0 { + parts = append(parts, currentPart.String()) + currentPart.Reset() + } else { + currentPart.WriteByte(s[i]) + } + default: + currentPart.WriteByte(s[i]) + } + } + + if currentPart.Len() > 0 { + parts = append(parts, currentPart.String()) + } + + return parts +} diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/json_reflect.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/json_reflect.go new file mode 100644 index 00000000..3b48d14b --- /dev/null +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/json_reflect.go @@ -0,0 +1,450 @@ +// Licensed to ClickHouse, Inc. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. ClickHouse, Inc. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package column + +import ( + "fmt" + "reflect" + "strings" + + "github.com/ClickHouse/clickhouse-go/v2/lib/chcol" +) + +// Decoding (Scanning) + +// scanIntoStruct will iterate the provided struct and scan JSON data into the matching fields +func (c *JSON) scanIntoStruct(dest any, row int) error { + val := reflect.ValueOf(dest) + if val.Kind() != reflect.Pointer { + return fmt.Errorf("destination must be a pointer") + } + val = val.Elem() + + if val.Kind() != reflect.Struct { + return fmt.Errorf("destination must be a pointer to struct") + } + + return c.fillStruct(val, "", row) +} + +// scanIntoMap converts JSON data into a map +func (c *JSON) scanIntoMap(dest any, row int) error { + val := reflect.ValueOf(dest) + if val.Kind() != reflect.Pointer { + return fmt.Errorf("destination must be a pointer") + } + val = val.Elem() + + if val.Kind() != reflect.Map { + return fmt.Errorf("destination must be a pointer to map") + } + + if val.Type().Key().Kind() != reflect.String { + return fmt.Errorf("map key must be string") + } + + if val.IsNil() { + val.Set(reflect.MakeMap(val.Type())) + } + + return c.fillMap(val, "", row) +} + +// fillStruct will iterate the provided struct and scan JSON data into the matching fields recursively +func (c *JSON) fillStruct(val reflect.Value, prefix string, row int) error { + typ := val.Type() + + for i := 0; i < val.NumField(); i++ { + field := val.Field(i) + fieldType := typ.Field(i) + + if !field.CanSet() { + continue + } + + name := fieldType.Tag.Get("json") + if name == "" || name[0] == ',' { + name = fieldType.Name + } else { + name = strings.Split(name, ",")[0] + } + + if name == "-" { + continue + } + + path := name + if prefix != "" { + path = prefix + "." + name + } + + if c.hasTypedPath(path) { + err := c.scanTypedPathToValue(path, row, field) + if err != nil { + return fmt.Errorf("fillStruct failed to scan typed path: %w", err) + } + + continue + } else if c.hasDynamicPath(path) { + err := c.scanDynamicPathToValue(path, row, field) + if err != nil { + return fmt.Errorf("fillStruct failed to scan dynamic path: %w", err) + } + + continue + } + + hasNestedFields := c.pathHasNestedValues(path) + if !hasNestedFields { + continue + } + + switch field.Kind() { + case reflect.Pointer: + if field.Type().Elem().Kind() == reflect.Struct { + if field.IsNil() { + field.Set(reflect.New(field.Type().Elem())) + } + + if err := c.fillStruct(field.Elem(), path, row); err != nil { + return fmt.Errorf("error filling nested struct pointer: %w", err) + } + } + case reflect.Struct: + if err := c.fillStruct(field, path, row); err != nil { + return fmt.Errorf("error filling nested struct: %w", err) + } + case reflect.Map: + if err := c.fillMap(field, path, row); err != nil { + return fmt.Errorf("error filling nested map: %w", err) + } + } + } + + return nil +} + +// fillMap will iterate the provided map and scan JSON data in recursively +func (c *JSON) fillMap(val reflect.Value, prefix string, row int) error { + if val.IsNil() { + val.Set(reflect.MakeMap(val.Type())) + } + + var paths []string + for _, path := range c.typedPaths { + if strings.HasPrefix(path, prefix) { + paths = append(paths, path) + } + } + for _, path := range c.dynamicPaths { + if strings.HasPrefix(path, prefix) { + paths = append(paths, path) + } + } + + children := make(map[string][]string) + prefixLen := len(prefix) + if prefixLen > 0 { + prefixLen++ // splitter + } + + for _, path := range paths { + if prefixLen >= len(path) { + continue + } + + suffix := path[prefixLen:] + nextDot := strings.Index(suffix, ".") + var current string + if nextDot == -1 { + current = suffix + } else { + current = suffix[:nextDot] + } + children[current] = append(children[current], path) + } + + for key, childPaths := range children { + noChildNodes := true + for _, path := range childPaths { + if strings.Contains(path[prefixLen:], ".") { + noChildNodes = false + break + } + } + + if noChildNodes { + fullPath := prefix + if prefix != "" { + fullPath += "." + } + fullPath += key + + mapValueType := val.Type().Elem() + newVal := reflect.New(mapValueType).Elem() + + var err error + if _, isTyped := c.typedPathsIndex[fullPath]; isTyped { + err = c.scanTypedPathToValue(fullPath, row, newVal) + } else { + if mapValueType.Kind() == reflect.Interface { + value := c.valueAtPath(fullPath, row, false) + if dyn, ok := value.(chcol.Dynamic); ok { + value = dyn.Any() + } + + if value != nil { + newVal.Set(reflect.ValueOf(value)) + } + } else { + err = c.scanDynamicPathToValue(fullPath, row, newVal) + } + } + if err != nil { + return fmt.Errorf("failed to scan value at path \"%s\": %w", fullPath, err) + } + + val.SetMapIndex(reflect.ValueOf(key), newVal) + } else { + newPrefix := prefix + if newPrefix != "" { + newPrefix += "." + } + newPrefix += key + + mapValueType := val.Type().Elem() + var newMap reflect.Value + + if mapValueType.Kind() == reflect.Interface { + newMap = reflect.MakeMap(reflect.TypeOf(map[string]interface{}{})) + } else if mapValueType.Kind() == reflect.Map { + newMap = reflect.MakeMap(mapValueType) + } else { + return fmt.Errorf("invalid map value type for nested path \"%s\"", newPrefix) + } + + err := c.fillMap(newMap, newPrefix, row) + if err != nil { + return fmt.Errorf("failed filling nested map at path \"%s\": %w", newPrefix, err) + } + + val.SetMapIndex(reflect.ValueOf(key), newMap) + } + } + + return nil +} + +// Encoding (Append, AppendRow) + +// structToJSON converts a struct to JSON data +func structToJSON(v any) (*chcol.JSON, error) { + json := chcol.NewJSON() + val := reflect.ValueOf(v) + + if val.Kind() == reflect.Pointer { + val = val.Elem() + } + + if val.Kind() != reflect.Struct { + return nil, fmt.Errorf("expected struct, got %v", val.Kind()) + } + + err := iterateStruct(val, "", json) + if err != nil { + return nil, err + } + + return json, nil +} + +// mapToJSON converts a map to JSON data +func mapToJSON(v any) (*chcol.JSON, error) { + json := chcol.NewJSON() + val := reflect.ValueOf(v) + + if val.Kind() == reflect.Pointer { + val = val.Elem() + } + + if val.Kind() != reflect.Map { + return nil, fmt.Errorf("expected map, got %v", val.Kind()) + } + + if val.Type().Key().Kind() != reflect.String { + return nil, fmt.Errorf("map key must be string, got %v", val.Type().Key().Kind()) + } + + err := iterateMap(val, "", json) + if err != nil { + return nil, err + } + + return json, nil +} + +// iterateStruct recursively iterates through a struct and adds its fields to the JSON data +func iterateStruct(val reflect.Value, prefix string, json *chcol.JSON) error { + typ := val.Type() + + for i := 0; i < val.NumField(); i++ { + field := val.Field(i) + fieldType := typ.Field(i) + + if !field.CanInterface() { + continue + } + + name := fieldType.Tag.Get("json") + if name == "" || name[0] == ',' { + name = fieldType.Name + } else { + // handle `json:"name,omitempty"` + name = strings.Split(name, ",")[0] + } + + if name == "-" { + continue + } + + path := name + if prefix != "" { + path = prefix + "." + name + } + + forcedType := fieldType.Tag.Get("chType") + err := handleValue(field, path, json, forcedType) + if err != nil { + return err + } + } + + return nil +} + +// iterateStructSkipTypes is a set of struct types that will not be iterated. +// Instead, the value will be assigned directly for use within Dynamic row appending. +var iterateStructSkipTypes = map[reflect.Type]struct{}{ + scanTypeIP: {}, + scanTypeUUID: {}, + scanTypeTime: {}, + scanTypeTime: {}, + scanTypeRing: {}, + scanTypePoint: {}, + scanTypeBigInt: {}, + scanTypePolygon: {}, + scanTypeDecimal: {}, + scanTypeMultiPolygon: {}, + scanTypeVariant: {}, + scanTypeDynamic: {}, + scanTypeJSON: {}, +} + +// handleValue processes a single value and adds it to the JSON data +func handleValue(val reflect.Value, path string, json *chcol.JSON, forcedType string) error { + if val.Kind() == reflect.Interface { + val = val.Elem() + } + + if !val.IsValid() { + json.SetValueAtPath(path, nil) + return nil + } + + switch val.Kind() { + case reflect.Pointer: + if val.IsNil() { + json.SetValueAtPath(path, nil) + return nil + } + return handleValue(val.Elem(), path, json, forcedType) + + case reflect.Struct: + if _, ok := iterateStructSkipTypes[val.Type()]; ok { + json.SetValueAtPath(path, val.Interface()) + return nil + } + + return iterateStruct(val, path, json) + + case reflect.Map: + if forcedType == "" && val.Type().Elem().Kind() == reflect.Interface { + // Only iterate maps if they are map[string]interface{} + return iterateMap(val, path, json) + } else if forcedType == "" { + json.SetValueAtPath(path, val.Interface()) + return nil + } else { + json.SetValueAtPath(path, chcol.NewDynamicWithType(val.Interface(), forcedType)) + return nil + } + case reflect.Slice, reflect.Array: + if forcedType == "" { + json.SetValueAtPath(path, val.Interface()) + } else { + json.SetValueAtPath(path, chcol.NewDynamicWithType(val.Interface(), forcedType)) + } + return nil + default: + if forcedType == "" { + json.SetValueAtPath(path, val.Interface()) + } else { + json.SetValueAtPath(path, chcol.NewDynamicWithType(val.Interface(), forcedType)) + } + return nil + } +} + +const MaxMapPathDepth = 32 + +// iterateMap recursively iterates through a map and adds its values to the JSON data +func iterateMap(val reflect.Value, prefix string, json *chcol.JSON) error { + depth := len(strings.Split(prefix, ".")) + if depth > MaxMapPathDepth { + return fmt.Errorf("maximum nesting depth exceeded") + } + + for _, key := range val.MapKeys() { + if key.Kind() != reflect.String { + return fmt.Errorf("map key must be string, got %v", key.Kind()) + } + + path := key.String() + if prefix != "" { + path = prefix + "." + path + } + + mapValue := val.MapIndex(key) + + if mapValue.Kind() == reflect.Interface { + mapValue = mapValue.Elem() + } + + if mapValue.Kind() == reflect.Map { + if err := iterateMap(mapValue, path, json); err != nil { + return err + } + } else { + if err := handleValue(mapValue, path, json, ""); err != nil { + return err + } + } + } + + return nil +} diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/lowcardinality.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/lowcardinality.go index 52933c67..393d4dad 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/lowcardinality.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/lowcardinality.go @@ -220,6 +220,9 @@ func (col *LowCardinality) Encode(buffer *proto.Buffer) { }() ixLen := uint64(len(col.append.index)) switch { + case col.keys().Rows() > 0: + // We already have keys, so this column is probably in a block directly decoded from the server, and we should + // not reset them case ixLen < math.MaxUint8: col.key = keyUInt8 for _, v := range col.append.keys { diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/map.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/map.go index 85ccbe9e..090aa629 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/map.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/map.go @@ -66,7 +66,17 @@ func (col *Map) Name() string { func (col *Map) parse(t Type, tz *time.Location) (_ Interface, err error) { col.chType = t - if types := strings.SplitN(t.params(), ",", 2); len(types) == 2 { + types := make([]string, 2, 2) + typeParams := t.params() + idx := strings.Index(typeParams, ",") + if strings.HasPrefix(typeParams, "Enum") { + idx = strings.Index(typeParams, "),") + 1 + } + if idx > 0 { + types[0] = typeParams[:idx] + types[1] = typeParams[idx+1:] + } + if types[0] != "" && types[1] != "" { if col.keys, err = Type(strings.TrimSpace(types[0])).Column(col.name, tz); err != nil { return nil, err } @@ -159,6 +169,15 @@ func (col *Map) Append(v any) (nulls []uint8, err error) { } func (col *Map) AppendRow(v any) error { + if v == nil { + return &ColumnConverterError{ + Op: "Append", + To: string(col.chType), + From: fmt.Sprintf("%T", v), + Hint: fmt.Sprintf("try using %s", col.scanType), + } + } + value := reflect.Indirect(reflect.ValueOf(v)) if value.Type() == col.scanType { var ( @@ -309,9 +328,19 @@ func (col *Map) row(n int) reflect.Value { from = int(prev) ) for next := 0; next < size; next++ { + mapValue := col.values.Row(from+next, false) + var mapReflectValue reflect.Value + if mapValue == nil { + // Convert interface{} nil to typed nil (such as nil *string) to preserve map element + // https://github.com/ClickHouse/clickhouse-go/issues/1515 + mapReflectValue = reflect.New(value.Type().Elem()).Elem() + } else { + mapReflectValue = reflect.ValueOf(mapValue) + } + value.SetMapIndex( reflect.ValueOf(col.keys.Row(from+next, false)), - reflect.ValueOf(col.values.Row(from+next, false)), + mapReflectValue, ) } return value diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/nested.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/nested.go index d961bd02..77b09309 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/nested.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/nested.go @@ -21,6 +21,8 @@ import ( "fmt" "strings" "time" + + "github.com/ClickHouse/ch-go/proto" ) type Nested struct { @@ -86,4 +88,22 @@ func nestedColumns(raw string) (columns []namedCol) { return } +func (col *Nested) ReadStatePrefix(reader *proto.Reader) error { + if serialize, ok := col.Interface.(CustomSerialization); ok { + if err := serialize.ReadStatePrefix(reader); err != nil { + return err + } + } + return nil +} + +func (col *Nested) WriteStatePrefix(buffer *proto.Buffer) error { + if serialize, ok := col.Interface.(CustomSerialization); ok { + if err := serialize.WriteStatePrefix(buffer); err != nil { + return err + } + } + return nil +} + var _ Interface = (*Nested)(nil) diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/object_json.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/object_json.go new file mode 100644 index 00000000..2806fea5 --- /dev/null +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/object_json.go @@ -0,0 +1,953 @@ +// Licensed to ClickHouse, Inc. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. ClickHouse, Inc. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package column + +import ( + "fmt" + "reflect" + "strings" + "time" + + "github.com/ClickHouse/ch-go/proto" +) + +// This JSON type implementation was done for an experimental Object('JSON') type: +// https://clickhouse.com/docs/en/sql-reference/data-types/object-data-type +// It's already deprecated in ClickHouse and will be removed in the future. +// Since ClickHouse 24.8, the Object('JSON') type is no longer alias for JSON type. +// The new JSON type has been introduced: https://clickhouse.com/docs/en/sql-reference/data-types/newjson +// However, the new JSON type is not supported by the driver yet. +// +// This implementation is kept for backward compatibility and will be removed in the future. TODO: remove this + +// inverse mapping - go types to clickhouse types +var kindMappings = map[reflect.Kind]string{ + reflect.String: "String", + reflect.Int: "Int64", + reflect.Int8: "Int8", + reflect.Int16: "Int16", + reflect.Int32: "Int32", + reflect.Int64: "Int64", + reflect.Uint: "UInt64", + reflect.Uint8: "UInt8", + reflect.Uint16: "UInt16", + reflect.Uint32: "UInt32", + reflect.Uint64: "UInt64", + reflect.Float32: "Float32", + reflect.Float64: "Float64", + reflect.Bool: "Bool", +} + +// complex types for which a mapping exists - currently we map to String but could enhance in the future for other types +var typeMappings = map[string]struct{}{ + // currently JSON doesn't support DateTime, Decimal or IP so mapped to String + "time.Time": {}, + "decimal.Decimal": {}, + "net.IP": {}, + "uuid.UUID": {}, +} + +type ObjectJSON interface { + Interface + appendEmptyValue() error +} + +type JSONParent interface { + upsertValue(name string, ct string) (*JSONValue, error) + upsertList(name string) (*JSONList, error) + upsertObject(name string) (*JSONObject, error) + insertEmptyColumn(name string) error + columnNames() []string + rows() int +} + +func parseType(name string, vType reflect.Type, values any, isArray bool, jCol JSONParent, numEmpty int) error { + _, ok := typeMappings[vType.String()] + if !ok { + return &UnsupportedColumnTypeError{ + t: Type(vType.String()), + } + } + ct := "String" + if isArray { + ct = fmt.Sprintf("Array(%s)", ct) + } + col, err := jCol.upsertValue(name, ct) + if err != nil { + return err + } + col.origType = vType + + //pre pad with empty - e.g. for new values in maps + for i := 0; i < numEmpty; i++ { + if isArray { + // empty array for nil of the right type + err = col.AppendRow([]string{}) + } else { + // empty value of the type + err = col.AppendRow(fmt.Sprint(reflect.New(vType).Elem().Interface())) + } + if err != nil { + return err + } + } + if isArray { + iValues := reflect.ValueOf(values) + sValues := make([]string, iValues.Len(), iValues.Len()) + for i := 0; i < iValues.Len(); i++ { + sValues[i] = fmt.Sprint(iValues.Index(i).Interface()) + } + return col.AppendRow(sValues) + } + return col.AppendRow(fmt.Sprint(values)) +} + +func parsePrimitive(name string, kind reflect.Kind, values any, isArray bool, jCol JSONParent, numEmpty int) error { + ct, ok := kindMappings[kind] + if !ok { + return &UnsupportedColumnTypeError{ + t: Type(fmt.Sprintf("%s - %s", kind, reflect.TypeOf(values).String())), + } + } + var err error + if isArray { + ct = fmt.Sprintf("Array(%s)", ct) + // if we have a []any we will need to cast to the target column type - this will be based on the first + // values types. Inconsistent slices will fail. + values, err = convertSlice(values) + if err != nil { + return err + } + } + col, err := jCol.upsertValue(name, ct) + if err != nil { + return err + } + + //pre pad with empty - e.g. for new values in maps + for i := 0; i < numEmpty; i++ { + if isArray { + // empty array for nil of the right type + err = col.AppendRow(reflect.MakeSlice(reflect.TypeOf(values), 0, 0).Interface()) + } else { + err = col.AppendRow(nil) + } + if err != nil { + return err + } + } + + return col.AppendRow(values) +} + +// converts a []any of primitives to a typed slice +// maybe this can be done with reflection but likely slower. investigate. +// this uses the first value to determine the type - subsequent values must currently be of the same type - we might cast later +// but wider driver doesn't support e.g. int to int64 +func convertSlice(values any) (any, error) { + rValues := reflect.ValueOf(values) + if rValues.Len() == 0 || rValues.Index(0).Kind() != reflect.Interface { + return values, nil + } + var fType reflect.Type + for i := 0; i < rValues.Len(); i++ { + elem := rValues.Index(i).Elem() + if elem.IsValid() { + fType = elem.Type() + break + } + } + if fType == nil { + return []any{}, nil + } + typedSlice := reflect.MakeSlice(reflect.SliceOf(fType), 0, rValues.Len()) + for i := 0; i < rValues.Len(); i++ { + value := rValues.Index(i) + if value.IsNil() { + typedSlice = reflect.Append(typedSlice, reflect.Zero(fType)) + continue + } + if rValues.Index(i).Elem().Type() != fType { + return nil, &Error{ + ColumnType: fmt.Sprint(fType), + Err: fmt.Errorf("inconsistent slices are not supported - expected %s got %s", fType, rValues.Index(i).Elem().Type()), + } + } + typedSlice = reflect.Append(typedSlice, rValues.Index(i).Elem()) + } + return typedSlice.Interface(), nil +} + +func (jCol *JSONList) createNewOffsets(num int) { + for i := 0; i < num; i++ { + //single depth so can take 1st + if jCol.offsets[0].values.col.Rows() == 0 { + // first entry in the column + jCol.offsets[0].values.col.Append(0) + } else { + // entry for this object to see offset from last - offsets are cumulative + jCol.offsets[0].values.col.Append(jCol.offsets[0].values.col.Row(jCol.offsets[0].values.col.Rows() - 1)) + } + } +} + +func getStructFieldName(field reflect.StructField) (string, bool) { + name := field.Name + tag := field.Tag.Get("json") + // not a standard but we allow - to omit fields + if tag == "-" { + return name, true + } + if tag != "" { + return tag, false + } + // support ch tag as well as this is used elsewhere + tag = field.Tag.Get("ch") + if tag == "-" { + return name, true + } + if tag != "" { + return tag, false + } + return name, false +} + +// ensures numeric keys and ` are escaped properly +func getMapFieldName(name string) string { + if !escapeColRegex.MatchString(name) { + return fmt.Sprintf("`%s`", colEscape.Replace(name)) + } + return colEscape.Replace(name) +} + +func parseSlice(name string, values any, jCol JSONParent, preFill int) error { + fType := reflect.TypeOf(values).Elem() + sKind := fType.Kind() + rValues := reflect.ValueOf(values) + + if sKind == reflect.Interface { + //use the first element to determine if it is a complex or primitive map - after this we need consistent dimensions + if rValues.Len() == 0 { + return nil + } + var value reflect.Value + for i := 0; i < rValues.Len(); i++ { + value = rValues.Index(i).Elem() + if value.IsValid() { + break + } + } + if !value.IsValid() { + return nil + } + fType = value.Type() + sKind = value.Kind() + } + + if _, ok := typeMappings[fType.String()]; ok { + return parseType(name, fType, values, true, jCol, preFill) + } else if sKind == reflect.Struct || sKind == reflect.Map || sKind == reflect.Slice { + if rValues.Len() == 0 { + return nil + } + col, err := jCol.upsertList(name) + if err != nil { + return err + } + col.createNewOffsets(preFill + 1) + for i := 0; i < rValues.Len(); i++ { + // increment offset + col.offsets[0].values.col[col.offsets[0].values.col.Rows()-1] += 1 + value := rValues.Index(i) + sKind = value.Kind() + if sKind == reflect.Interface { + sKind = value.Elem().Kind() + } + switch sKind { + case reflect.Struct: + col.isNested = true + if err = oldIterateStruct(value, col, 0); err != nil { + return err + } + case reflect.Map: + col.isNested = true + if err = oldIterateMap(value, col, 0); err != nil { + return err + } + case reflect.Slice: + if err = parseSlice("", value.Interface(), col, 0); err != nil { + return err + } + default: + // only happens if slice has a primitive mixed with complex types in a []any + return &Error{ + ColumnType: fmt.Sprint(sKind), + Err: fmt.Errorf("slices must be same dimension in column %s", col.Name()), + } + } + } + return nil + } + return parsePrimitive(name, sKind, values, true, jCol, preFill) +} + +func parseStruct(name string, structVal reflect.Value, jCol JSONParent, preFill int) error { + col, err := jCol.upsertObject(name) + if err != nil { + return err + } + return oldIterateStruct(structVal, col, preFill) +} + +func oldIterateStruct(structVal reflect.Value, col JSONParent, preFill int) error { + // structs generally have consistent field counts but we ignore nil values that are any as we can't infer from + // these until they occur - so we might need to either backfill when to do occur or insert empty based on previous + if structVal.Kind() == reflect.Interface { + // can happen if passed from []any + structVal = structVal.Elem() + } + + currentColumns := col.columnNames() + columnLookup := make(map[string]struct{}) + numRows := col.rows() + for _, name := range currentColumns { + columnLookup[name] = struct{}{} + } + addedColumns := make([]string, structVal.NumField(), structVal.NumField()) + newColumn := false + + for i := 0; i < structVal.NumField(); i++ { + fName, omit := getStructFieldName(structVal.Type().Field(i)) + if omit { + continue + } + field := structVal.Field(i) + if !field.CanInterface() { + // can't interface - likely not exported so ignore the field + continue + } + kind := field.Kind() + value := field.Interface() + fType := field.Type() + //resolve underlying kind + if kind == reflect.Interface { + if value == nil { + // ignore nil fields + continue + } + kind = reflect.TypeOf(value).Kind() + field = reflect.ValueOf(value) + fType = field.Type() + } + if _, ok := columnLookup[fName]; !ok && len(currentColumns) > 0 { + // new column - need to handle missing + preFill = numRows + newColumn = true + } + if _, ok := typeMappings[fType.String()]; ok { + if err := parseType(fName, fType, value, false, col, preFill); err != nil { + return err + } + } else { + switch kind { + case reflect.Slice: + if reflect.ValueOf(value).Len() == 0 { + continue + } + if err := parseSlice(fName, value, col, preFill); err != nil { + return err + } + case reflect.Struct: + if err := parseStruct(fName, field, col, preFill); err != nil { + return err + } + case reflect.Map: + if err := parseMap(fName, field, col, preFill); err != nil { + return err + } + default: + if err := parsePrimitive(fName, kind, value, false, col, preFill); err != nil { + return err + } + } + } + addedColumns[i] = fName + if newColumn { + // reset as otherwise prefill overflow to other fields. But don't reset if this prefill has come from + // a higher level + preFill = 0 + } + } + // handle missing + missingColumns := difference(currentColumns, addedColumns) + for _, name := range missingColumns { + if err := col.insertEmptyColumn(name); err != nil { + return err + } + } + return nil +} + +func parseMap(name string, mapVal reflect.Value, jCol JSONParent, preFill int) error { + if mapVal.Type().Key().Kind() != reflect.String { + return &Error{ + ColumnType: fmt.Sprint(mapVal.Type().Key().Kind()), + Err: fmt.Errorf("map keys must be string for column %s", name), + } + } + col, err := jCol.upsertObject(name) + if err != nil { + return err + } + return oldIterateMap(mapVal, col, preFill) +} + +func oldIterateMap(mapVal reflect.Value, col JSONParent, preFill int) error { + // maps can have inconsistent numbers of elements - we must ensure they are consistent in the encoding + // two inconsistent options - 1. new - map has new columns 2. massing - map has missing columns + // for (1) we need to update previous, for (2) we need to ensure we add a null entry + if mapVal.Kind() == reflect.Interface { + // can happen if passed from []any + mapVal = mapVal.Elem() + } + + currentColumns := col.columnNames() + //gives us a fast lookup for large maps + columnLookup := make(map[string]struct{}) + numRows := col.rows() + // true if we need nil values + for _, name := range currentColumns { + columnLookup[name] = struct{}{} + } + addedColumns := make([]string, len(mapVal.MapKeys()), len(mapVal.MapKeys())) + newColumn := false + for i, key := range mapVal.MapKeys() { + if newColumn { + // reset as otherwise prefill overflow to other fields. But don't reset if this prefill has come from + // a higher level + preFill = 0 + } + + name := getMapFieldName(key.Interface().(string)) + if _, ok := columnLookup[name]; !ok && len(currentColumns) > 0 { + // new column - need to handle + preFill = numRows + newColumn = true + } + field := mapVal.MapIndex(key) + kind := field.Kind() + fType := field.Type() + + if kind == reflect.Interface { + if field.Interface() == nil { + // ignore nil fields + continue + } + kind = reflect.TypeOf(field.Interface()).Kind() + field = reflect.ValueOf(field.Interface()) + fType = field.Type() + } + if _, ok := typeMappings[fType.String()]; ok { + if err := parseType(name, fType, field.Interface(), false, col, preFill); err != nil { + return err + } + } else { + switch kind { + case reflect.Struct: + if err := parseStruct(name, field, col, preFill); err != nil { + return err + } + case reflect.Slice: + if err := parseSlice(name, field.Interface(), col, preFill); err != nil { + return err + } + case reflect.Map: + if err := parseMap(name, field, col, preFill); err != nil { + return err + } + default: + if err := parsePrimitive(name, kind, field.Interface(), false, col, preFill); err != nil { + return err + } + } + } + addedColumns[i] = name + } + // handle missing + missingColumns := difference(currentColumns, addedColumns) + for _, name := range missingColumns { + if err := col.insertEmptyColumn(name); err != nil { + return err + } + } + return nil +} + +func appendStructOrMap(jCol *JSONObject, data any) error { + vData := reflect.ValueOf(data) + kind := vData.Kind() + if kind == reflect.Struct { + return oldIterateStruct(vData, jCol, 0) + } + if kind == reflect.Map { + if reflect.TypeOf(data).Key().Kind() != reflect.String { + return &Error{ + ColumnType: fmt.Sprint(reflect.TypeOf(data).Key().Kind()), + Err: fmt.Errorf("map keys must be string for column %s", jCol.Name()), + } + } + if jCol.columns == nil && vData.Len() == 0 { + // if map is empty, we need to create an empty Tuple to make sure subcolumns protocol is happy + // _dummy is a ClickHouse internal name for empty Tuple subcolumn + // it has the same effect as `INSERT INTO single_json_type_table VALUES ('{}');` + jCol.upsertValue("_dummy", "Int8") + return jCol.insertEmptyColumn("_dummy") + } + return oldIterateMap(vData, jCol, 0) + } + return &UnsupportedColumnTypeError{ + t: Type(fmt.Sprint(kind)), + } +} + +type JSONValue struct { + Interface + // represents the type e.g. uuid - these may have been mapped to a Column type support by JSON e.g. String + origType reflect.Type +} + +func (jCol *JSONValue) Reset() { + jCol.Interface.Reset() +} + +func (jCol *JSONValue) appendEmptyValue() error { + switch jCol.Interface.(type) { + case *Array: + if jCol.Rows() > 0 { + return jCol.AppendRow(reflect.MakeSlice(reflect.TypeOf(jCol.Row(0, false)), 0, 0).Interface()) + } + return &Error{ + ColumnType: "unknown", + Err: fmt.Errorf("can't add empty value to column %s - no entries to infer type", jCol.Name()), + } + default: + // can't just append nil here as we need a custom nil value for the type + if jCol.origType != nil { + return jCol.AppendRow(fmt.Sprint(reflect.New(jCol.origType).Elem().Interface())) + } + return jCol.AppendRow(nil) + } +} + +func (jCol *JSONValue) Type() Type { + return Type(fmt.Sprintf("%s %s", jCol.Name(), jCol.Interface.Type())) +} + +type JSONList struct { + Array + name string + isNested bool // indicates if this a list of objects i.e. a Nested +} + +func (jCol *JSONList) Name() string { + return jCol.name +} + +func (jCol *JSONList) columnNames() []string { + return jCol.Array.values.(*JSONObject).columnNames() +} + +func (jCol *JSONList) rows() int { + return jCol.values.(*JSONObject).Rows() +} + +func createJSONList(name string, tz *time.Location) (jCol *JSONList) { + // lists are represented as Nested which are in turn encoded as Array(Tuple()). We thus pass a Array(JSONObject()) + // as this encodes like a tuple + lCol := &JSONList{ + name: name, + } + lCol.values = &JSONObject{tz: tz} + // depth should always be one as nested arrays aren't possible + lCol.depth = 1 + lCol.scanType = scanTypeSlice + offsetScanTypes := []reflect.Type{lCol.scanType} + lCol.offsets = []*offset{{ + scanType: offsetScanTypes[0], + }} + return lCol +} + +func (jCol *JSONList) appendEmptyValue() error { + // only need to bump the offsets + jCol.createNewOffsets(1) + return nil +} + +func (jCol *JSONList) insertEmptyColumn(name string) error { + return jCol.values.(*JSONObject).insertEmptyColumn(name) +} + +func (jCol *JSONList) upsertValue(name string, ct string) (*JSONValue, error) { + // check if column exists and reuse if same type, error if same name and different type + jObj := jCol.values.(*JSONObject) + cols := jObj.columns + for i := range cols { + sCol := cols[i] + if sCol.Name() == name { + vCol, ok := cols[i].(*JSONValue) + if !ok { + sType := cols[i].Type() + return nil, &Error{ + ColumnType: fmt.Sprint(sType), + Err: fmt.Errorf("type mismatch in column %s - expected value, got %s", name, sType), + } + } + tType := vCol.Interface.Type() + if tType != Type(ct) { + return nil, &Error{ + ColumnType: ct, + Err: fmt.Errorf("type mismatch in column %s - expected %s, got %s", name, tType, ct), + } + } + return vCol, nil + } + } + col, err := Type(ct).Column(name, jObj.tz) + if err != nil { + return nil, err + } + vCol := &JSONValue{ + Interface: col, + } + jCol.values.(*JSONObject).columns = append(cols, vCol) // nolint:gocritic + return vCol, nil +} + +func (jCol *JSONList) upsertList(name string) (*JSONList, error) { + // check if column exists and reuse if same type, error if same name and different type + jObj := jCol.values.(*JSONObject) + cols := jCol.values.(*JSONObject).columns + for i := range cols { + sCol := cols[i] + if sCol.Name() == name { + sCol, ok := cols[i].(*JSONList) + if !ok { + return nil, &Error{ + ColumnType: fmt.Sprint(cols[i].Type()), + Err: fmt.Errorf("type mismatch in column %s - expected list, got %s", name, cols[i].Type()), + } + } + return sCol, nil + } + } + lCol := createJSONList(name, jObj.tz) + jCol.values.(*JSONObject).columns = append(cols, lCol) // nolint:gocritic + return lCol, nil + +} + +func (jCol *JSONList) upsertObject(name string) (*JSONObject, error) { + // check if column exists and reuse if same type, error if same name and different type + jObj := jCol.values.(*JSONObject) + cols := jObj.columns + for i := range cols { + sCol := cols[i] + if sCol.Name() == name { + sCol, ok := cols[i].(*JSONObject) + if !ok { + sType := cols[i].Type() + return nil, &Error{ + ColumnType: fmt.Sprint(sType), + Err: fmt.Errorf("type mismatch in column %s, expected object got %s", name, sType), + } + } + return sCol, nil + } + } + // lists are represented as Nested which are in turn encoded as Array(Tuple()). We thus pass a Array(JSONObject()) + // as this encodes like a tuple + oCol := &JSONObject{ + name: name, + tz: jObj.tz, + } + jCol.values.(*JSONObject).columns = append(cols, oCol) // nolint:gocritic + return oCol, nil +} + +func (jCol *JSONList) Type() Type { + cols := jCol.values.(*JSONObject).columns + subTypes := make([]string, len(cols)) + for i, v := range cols { + subTypes[i] = string(v.Type()) + } + // can be a list of lists or a nested + if jCol.isNested { + return Type(fmt.Sprintf("%s Nested(%s)", jCol.name, strings.Join(subTypes, ", "))) + } + return Type(fmt.Sprintf("%s Array(%s)", jCol.name, strings.Join(subTypes, ", "))) +} + +type JSONObject struct { + columns []ObjectJSON + name string + root bool + encoding uint8 + tz *time.Location +} + +func (jCol *JSONObject) Reset() { + for i := range jCol.columns { + jCol.columns[i].Reset() + } +} + +func (jCol *JSONObject) Name() string { + return jCol.name +} + +func (jCol *JSONObject) columnNames() []string { + columns := make([]string, len(jCol.columns), len(jCol.columns)) + for i := range jCol.columns { + columns[i] = jCol.columns[i].Name() + } + return columns +} + +func (jCol *JSONObject) rows() int { + return jCol.Rows() +} + +func (jCol *JSONObject) appendEmptyValue() error { + for i := range jCol.columns { + if err := jCol.columns[i].appendEmptyValue(); err != nil { + return err + } + } + return nil +} + +func (jCol *JSONObject) insertEmptyColumn(name string) error { + for i := range jCol.columns { + if jCol.columns[i].Name() == name { + if err := jCol.columns[i].appendEmptyValue(); err != nil { + return err + } + return nil + } + } + return &Error{ + ColumnType: "unknown", + Err: fmt.Errorf("column %s is missing - empty value cannot be appended", name), + } +} + +func (jCol *JSONObject) upsertValue(name string, ct string) (*JSONValue, error) { + for i := range jCol.columns { + sCol := jCol.columns[i] + if sCol.Name() == name { + vCol, ok := jCol.columns[i].(*JSONValue) + if !ok { + sType := jCol.columns[i].Type() + return nil, &Error{ + ColumnType: fmt.Sprint(sType), + Err: fmt.Errorf("type mismatch in column %s, expected value got %s", name, sType), + } + } + if vCol.Interface.Type() != Type(ct) { + return nil, &Error{ + ColumnType: ct, + Err: fmt.Errorf("type mismatch in column %s, expected %s got %s", name, vCol.Interface.Type(), ct), + } + } + return vCol, nil + } + } + col, err := Type(ct).Column(name, jCol.tz) + if err != nil { + return nil, err + } + vCol := &JSONValue{ + Interface: col, + } + jCol.columns = append(jCol.columns, vCol) + return vCol, nil +} + +func (jCol *JSONObject) upsertList(name string) (*JSONList, error) { + for i := range jCol.columns { + sCol := jCol.columns[i] + if sCol.Name() == name { + sCol, ok := jCol.columns[i].(*JSONList) + if !ok { + sType := jCol.columns[i].Type() + return nil, &Error{ + ColumnType: fmt.Sprint(sType), + Err: fmt.Errorf("type mismatch in column %s, expected list got %s", name, sType), + } + } + return sCol, nil + } + } + lCol := createJSONList(name, jCol.tz) + jCol.columns = append(jCol.columns, lCol) + return lCol, nil +} + +func (jCol *JSONObject) upsertObject(name string) (*JSONObject, error) { + // check if it exists + for i := range jCol.columns { + sCol := jCol.columns[i] + if sCol.Name() == name { + sCol, ok := jCol.columns[i].(*JSONObject) + if !ok { + sType := jCol.columns[i].Type() + return nil, &Error{ + ColumnType: fmt.Sprint(sType), + Err: fmt.Errorf("type mismatch in column %s, expected object got %s", name, sType), + } + } + return sCol, nil + } + } + // not present so create + oCol := &JSONObject{ + name: name, + tz: jCol.tz, + } + jCol.columns = append(jCol.columns, oCol) + return oCol, nil +} + +func (jCol *JSONObject) Type() Type { + if jCol.root { + return "Object('json')" + } + return jCol.FullType() +} + +func (jCol *JSONObject) FullType() Type { + subTypes := make([]string, len(jCol.columns)) + for i, v := range jCol.columns { + subTypes[i] = string(v.Type()) + } + if jCol.root { + return Type(fmt.Sprintf("Tuple(%s)", strings.Join(subTypes, ", "))) + } + return Type(fmt.Sprintf("%s Tuple(%s)", jCol.name, strings.Join(subTypes, ", "))) +} + +func (jCol *JSONObject) ScanType() reflect.Type { + return scanTypeMap +} + +func (jCol *JSONObject) Rows() int { + if len(jCol.columns) != 0 { + return jCol.columns[0].Rows() + } + return 0 +} + +// ClickHouse returns JSON as a tuple i.e. these will never be invoked + +func (jCol *JSONObject) Row(i int, ptr bool) any { + panic("Not implemented") +} + +func (jCol *JSONObject) ScanRow(dest any, row int) error { + panic("Not implemented") +} + +func (jCol *JSONObject) Append(v any) (nulls []uint8, err error) { + jSlice := reflect.ValueOf(v) + if jSlice.Kind() != reflect.Slice { + return nil, &ColumnConverterError{ + Op: "Append", + To: string(jCol.Type()), + From: fmt.Sprintf("slice of structs/map or strings required - received %T", v), + } + } + for i := 0; i < jSlice.Len(); i++ { + if err := jCol.AppendRow(jSlice.Index(i).Interface()); err != nil { + return nil, err + } + } + return nil, nil +} + +func (jCol *JSONObject) AppendRow(v any) error { + if reflect.ValueOf(v).Kind() == reflect.Struct || reflect.ValueOf(v).Kind() == reflect.Map { + if jCol.columns != nil && jCol.encoding == 1 { + return &Error{ + ColumnType: fmt.Sprint(jCol.Type()), + Err: fmt.Errorf("encoding of JSON columns cannot be mixed in a batch - %s cannot be added as previously String", reflect.ValueOf(v).Kind()), + } + } + err := appendStructOrMap(jCol, v) + return err + } + switch v := v.(type) { + case string: + if jCol.columns != nil && jCol.encoding == 0 { + return &Error{ + ColumnType: fmt.Sprint(jCol.Type()), + Err: fmt.Errorf("encoding of JSON columns cannot be mixed in a batch - %s cannot be added as previously Struct/Map", reflect.ValueOf(v).Kind()), + } + } + jCol.encoding = 1 + if jCol.columns == nil { + jCol.columns = append(jCol.columns, &JSONValue{Interface: &String{}}) + } + jCol.columns[0].AppendRow(v) + default: + return &ColumnConverterError{ + Op: "AppendRow", + To: "String", + From: fmt.Sprintf("json row must be struct, map or string - received %T", v), + } + } + return nil +} + +func (jCol *JSONObject) Decode(reader *proto.Reader, rows int) error { + panic("Not implemented") +} + +func (jCol *JSONObject) Encode(buffer *proto.Buffer) { + if jCol.root && jCol.encoding == 0 { + buffer.PutString(string(jCol.FullType())) + } + for _, c := range jCol.columns { + c.Encode(buffer) + } +} + +func (jCol *JSONObject) ReadStatePrefix(reader *proto.Reader) error { + _, err := reader.UInt8() + return err +} + +func (jCol *JSONObject) WriteStatePrefix(buffer *proto.Buffer) error { + buffer.PutUInt8(jCol.encoding) + return nil +} + +var ( + _ Interface = (*JSONObject)(nil) + _ CustomSerialization = (*JSONObject)(nil) +) diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/sharedvariant.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/sharedvariant.go new file mode 100644 index 00000000..b356f1ac --- /dev/null +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/sharedvariant.go @@ -0,0 +1,72 @@ +// Licensed to ClickHouse, Inc. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. ClickHouse, Inc. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package column + +import ( + "github.com/ClickHouse/ch-go/proto" + "reflect" +) + +type SharedVariant struct { + name string + stringData String +} + +func (c *SharedVariant) Name() string { + return c.name +} + +func (c *SharedVariant) Type() Type { + return "SharedVariant" +} + +func (c *SharedVariant) Rows() int { + return c.stringData.Rows() +} + +func (c *SharedVariant) Row(i int, ptr bool) any { + return c.stringData.Row(i, ptr) +} + +func (c *SharedVariant) ScanRow(dest any, row int) error { + return c.stringData.ScanRow(dest, row) +} + +func (c *SharedVariant) Append(v any) (nulls []uint8, err error) { + return c.stringData.Append(v) +} + +func (c *SharedVariant) AppendRow(v any) error { + return c.stringData.AppendRow(v) +} + +func (c *SharedVariant) Decode(reader *proto.Reader, rows int) error { + return c.stringData.Decode(reader, rows) +} + +func (c *SharedVariant) Encode(buffer *proto.Buffer) { + c.stringData.Encode(buffer) +} + +func (c *SharedVariant) ScanType() reflect.Type { + return c.stringData.ScanType() +} + +func (c *SharedVariant) Reset() { + c.stringData.Reset() +} diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/string.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/string.go index 5ce480b0..79b86e70 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/string.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/string.go @@ -21,6 +21,7 @@ import ( "database/sql" "database/sql/driver" "encoding" + "encoding/json" "fmt" "github.com/ClickHouse/ch-go/proto" "reflect" @@ -71,6 +72,11 @@ func (col *String) ScanRow(dest any, row int) error { **d = val case *sql.NullString: return d.Scan(val) + case *json.RawMessage: + *d = json.RawMessage(val) + case **json.RawMessage: + *d = new(json.RawMessage) + **d = json.RawMessage(val) case encoding.BinaryUnmarshaler: return d.UnmarshalBinary(binary.Str2Bytes(val, len(val))) default: @@ -111,6 +117,10 @@ func (col *String) AppendRow(v any) error { default: col.col.Append("") } + case json.RawMessage: + col.col.AppendBytes(v) + case *json.RawMessage: + col.col.AppendBytes(*v) case []byte: col.col.AppendBytes(v) case nil: @@ -171,6 +181,16 @@ func (col *String) Append(v any) (nulls []uint8, err error) { } col.AppendRow(v[i]) } + case []json.RawMessage: + nulls = make([]uint8, len(v)) + for i := range v { + col.col.Append(string(v[i])) + } + case []*json.RawMessage: + nulls = make([]uint8, len(v)) + for i := range v { + col.col.Append(string(*v[i])) + } case [][]byte: nulls = make([]uint8, len(v)) for i := range v { diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/date_helpers.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/time_helper.go similarity index 60% rename from vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/date_helpers.go rename to vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/time_helper.go index 2e6691ec..f71b8f92 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/date_helpers.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/time_helper.go @@ -17,31 +17,13 @@ package column -import ( - "fmt" - "time" -) +import "time" -const secInDay = 24 * 60 * 60 +// getTimeWithDifferentLocation returns the same time but with different location, e.g. +// "2024-08-15 13:22:34 -03:00" will become "2024-08-15 13:22:34 +04:00". +func getTimeWithDifferentLocation(t time.Time, loc *time.Location) time.Time { + year, month, day := t.Date() + hour, minute, sec := t.Clock() -func dateOverflow(min, max, v time.Time, format string) error { - if v.Before(min) || v.After(max) { - return &DateOverflowError{ - Min: min, - Max: max, - Value: v, - Format: format, - } - } - return nil -} - -type DateOverflowError struct { - Min, Max time.Time - Value time.Time - Format string -} - -func (e *DateOverflowError) Error() string { - return fmt.Sprintf("clickhouse: dateTime overflow. must be between %s and %s", e.Min.Format(e.Format), e.Max.Format(e.Format)) + return time.Date(year, month, day, hour, minute, sec, t.Nanosecond(), loc) } diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/tuple.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/tuple.go index 95e00db0..ea5bfff0 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/tuple.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/tuple.go @@ -200,13 +200,6 @@ func setJSONFieldValue(field reflect.Value, value reflect.Value) error { } } - // check if our target is a string - if field.Kind() == reflect.String { - if v := reflect.ValueOf(fmt.Sprint(value.Interface())); v.Type().AssignableTo(field.Type()) { - field.Set(v) - return nil - } - } if value.CanConvert(field.Type()) { field.Set(value.Convert(field.Type())) return nil @@ -447,7 +440,7 @@ func (col *Tuple) scan(targetType reflect.Type, row int) (reflect.Value, error) //tuples can be scanned into slices - specifically default for unnamed tuples rSlice, err := col.scanSlice(targetType, row) if err != nil { - return reflect.Value{}, nil + return reflect.Value{}, err } return rSlice, nil case reflect.Interface: @@ -518,6 +511,68 @@ func (col *Tuple) AppendRow(v any) error { value = value.Elem() } switch value.Kind() { + case reflect.Struct: + if valuer, ok := v.(driver.Valuer); ok { + val, err := valuer.Value() + if err != nil { + return &ColumnConverterError{ + Op: "AppendRow", + To: string(col.chType), + From: fmt.Sprintf("%T", v), + Hint: "could not get driver.Valuer value", + } + } + return col.AppendRow(val) + } + + if !col.isNamed { + return &Error{ + ColumnType: string(col.chType), + Err: fmt.Errorf("converting from %T is not supported for unnamed tuples - use a slice", v), + } + } + + valueType := value.Type() + fieldNames := make(map[string]struct{}, value.NumField()) + for i := 0; i < value.NumField(); i++ { + if !value.Field(i).CanInterface() { + // can't interface - likely not exported so ignore the field + continue + } + name, omit := getStructFieldName(valueType.Field(i)) + if omit { + continue + } + fieldNames[name] = struct{}{} + } + + if len(fieldNames) != len(col.columns) { + return &Error{ + ColumnType: string(col.chType), + Err: fmt.Errorf("invalid size. expected %d got %d", len(col.columns), len(fieldNames)), + } + } + + for i := 0; i < value.NumField(); i++ { + if !value.Field(i).CanInterface() { + // can't interface - likely not exported so ignore the field + continue + } + name, omit := getStructFieldName(valueType.Field(i)) + if omit { + continue + } + if _, ok := col.index[name]; !ok { + return &Error{ + ColumnType: string(col.chType), + Err: fmt.Errorf("sub column '%s' does not exist in %s", name, col.Name()), + } + } + if err := col.columns[col.index[name]].AppendRow(value.Field(i).Interface()); err != nil { + return err + } + } + return nil case reflect.Map: if !col.isNamed { return &Error{ diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/variant.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/variant.go new file mode 100644 index 00000000..e1126cad --- /dev/null +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/column/variant.go @@ -0,0 +1,368 @@ +// Licensed to ClickHouse, Inc. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. ClickHouse, Inc. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package column + +import ( + "database/sql/driver" + "fmt" + "github.com/ClickHouse/clickhouse-go/v2/lib/chcol" + "reflect" + "strings" + "time" + + "github.com/ClickHouse/ch-go/proto" +) + +const SupportedVariantSerializationVersion = 0 +const NullVariantDiscriminator uint8 = 255 + +type Variant struct { + chType Type + name string + + discriminators []uint8 + offsets []int + + columns []Interface + columnTypeIndex map[string]uint8 +} + +func (c *Variant) parse(t Type, tz *time.Location) (_ *Variant, err error) { + c.chType = t + var ( + element []rune + elements []Type + brackets int + appendElement = func() { + if len(element) != 0 { + cType := strings.TrimSpace(string(element)) + if parts := strings.SplitN(cType, " ", 2); len(parts) == 2 { + if !strings.Contains(parts[0], "(") { + cType = parts[1] + } + } + + elements = append(elements, Type(strings.TrimSpace(cType))) + } + } + ) + + for _, r := range t.params() { + switch r { + case '(': + brackets++ + case ')': + brackets-- + case ',': + if brackets == 0 { + appendElement() + element = element[:0] + continue + } + } + element = append(element, r) + } + + appendElement() + + c.columnTypeIndex = make(map[string]uint8, len(elements)) + for _, columnType := range elements { + column, err := columnType.Column("", tz) + if err != nil { + return nil, err + } + + c.addColumn(column) + } + + if len(c.columns) != 0 { + return c, nil + } + + return nil, &UnsupportedColumnTypeError{ + t: t, + } +} + +func (c *Variant) addColumn(col Interface) { + c.columns = append(c.columns, col) + c.columnTypeIndex[string(col.Type())] = uint8(len(c.columns) - 1) +} + +func (c *Variant) appendDiscriminatorRow(d uint8) { + c.discriminators = append(c.discriminators, d) +} + +func (c *Variant) appendNullRow() { + c.appendDiscriminatorRow(NullVariantDiscriminator) +} + +func (c *Variant) Name() string { + return c.name +} + +func (c *Variant) Type() Type { + return c.chType +} + +func (c *Variant) Rows() int { + return len(c.discriminators) +} + +func (c *Variant) Row(i int, ptr bool) any { + typeIndex := c.discriminators[i] + offsetIndex := c.offsets[i] + var value any + var chType string + if typeIndex != NullVariantDiscriminator { + value = c.columns[typeIndex].Row(offsetIndex, ptr) + chType = string(c.columns[typeIndex].Type()) + } + + vt := chcol.NewVariantWithType(value, chType) + if ptr { + return &vt + } + + return vt +} + +func (c *Variant) ScanRow(dest any, row int) error { + typeIndex := c.discriminators[row] + offsetIndex := c.offsets[row] + var value any + var chType string + if typeIndex != NullVariantDiscriminator { + value = c.columns[typeIndex].Row(offsetIndex, false) + chType = string(c.columns[typeIndex].Type()) + } + + switch v := dest.(type) { + case *chcol.Variant: + vt := chcol.NewVariantWithType(value, chType) + *v = vt + case **chcol.Variant: + vt := chcol.NewVariantWithType(value, chType) + **v = vt + default: + if typeIndex == NullVariantDiscriminator { + return nil + } + + if err := c.columns[typeIndex].ScanRow(dest, offsetIndex); err != nil { + return err + } + } + + return nil +} + +func (c *Variant) Append(v any) (nulls []uint8, err error) { + switch vv := v.(type) { + case []chcol.Variant: + for i, vt := range vv { + err := c.AppendRow(vt) + if err != nil { + return nil, fmt.Errorf("failed to AppendRow at index %d: %w", i, err) + } + } + + return nil, nil + case []*chcol.Variant: + for i, vt := range vv { + err := c.AppendRow(vt) + if err != nil { + return nil, fmt.Errorf("failed to AppendRow at index %d: %w", i, err) + } + } + + return nil, nil + default: + if valuer, ok := v.(driver.Valuer); ok { + val, err := valuer.Value() + if err != nil { + return nil, &ColumnConverterError{ + Op: "Append", + To: string(c.chType), + From: fmt.Sprintf("%T", v), + Hint: "could not get driver.Valuer value", + } + } + + return c.Append(val) + } + + return nil, &ColumnConverterError{ + Op: "Append", + To: string(c.chType), + From: fmt.Sprintf("%T", v), + } + } +} + +func (c *Variant) AppendRow(v any) error { + var requestedType string + switch vv := v.(type) { + case nil: + c.appendNullRow() + return nil + case chcol.Variant: + requestedType = vv.Type() + v = vv.Any() + if vv.Nil() { + c.appendNullRow() + return nil + } + case *chcol.Variant: + requestedType = vv.Type() + v = vv.Any() + if vv.Nil() { + c.appendNullRow() + return nil + } + } + + if requestedType != "" { + typeIndex, ok := c.columnTypeIndex[requestedType] + if !ok { + return fmt.Errorf("value %v cannot be stored in variant column %s with requested type %s: type not present in variant", v, c.chType, requestedType) + } + + if err := c.columns[typeIndex].AppendRow(v); err != nil { + return fmt.Errorf("failed to append row to variant column with requested type %s: %w", requestedType, err) + } + + c.appendDiscriminatorRow(typeIndex) + return nil + } + + // If preferred type wasn't provided, try each column + var err error + for i, col := range c.columns { + if err = col.AppendRow(v); err == nil { + c.appendDiscriminatorRow(uint8(i)) + return nil + } + } + + return fmt.Errorf("value \"%v\" cannot be stored in variant column: no compatible types", v) +} + +func (c *Variant) encodeHeader(buffer *proto.Buffer) { + buffer.PutUInt64(SupportedVariantSerializationVersion) +} + +func (c *Variant) encodeData(buffer *proto.Buffer) { + buffer.PutRaw(c.discriminators) + + for _, col := range c.columns { + col.Encode(buffer) + } +} + +func (c *Variant) WriteStatePrefix(buffer *proto.Buffer) error { + c.encodeHeader(buffer) + + return nil +} + +func (c *Variant) Encode(buffer *proto.Buffer) { + c.encodeData(buffer) +} + +func (c *Variant) ScanType() reflect.Type { + return scanTypeVariant +} + +func (c *Variant) Reset() { + c.discriminators = c.discriminators[:0] + + for _, col := range c.columns { + col.Reset() + } +} + +func (c *Variant) decodeHeader(reader *proto.Reader) error { + variantSerializationVersion, err := reader.UInt64() + if err != nil { + return fmt.Errorf("failed to read variant discriminator version: %w", err) + } + + if variantSerializationVersion != SupportedVariantSerializationVersion { + return fmt.Errorf("unsupported variant discriminator version: %d", variantSerializationVersion) + } + + for _, col := range c.columns { + if serialize, ok := col.(CustomSerialization); ok { + if err := serialize.ReadStatePrefix(reader); err != nil { + return fmt.Errorf("failed to read prefix for type %s in variant: %w", col.Type(), err) + } + } + } + + return nil +} + +func (c *Variant) decodeData(reader *proto.Reader, rows int) error { + c.discriminators = make([]uint8, rows) + c.offsets = make([]int, rows) + rowCountByType := make(map[uint8]int, len(c.columns)) + + for i := 0; i < rows; i++ { + disc, err := reader.ReadByte() + if err != nil { + return fmt.Errorf("failed to read discriminator at index %d: %w", i, err) + } + + c.discriminators[i] = disc + if rowCountByType[disc] == 0 { + rowCountByType[disc] = 1 + } else { + rowCountByType[disc]++ + } + + c.offsets[i] = rowCountByType[disc] - 1 + } + + for i, col := range c.columns { + cRows := rowCountByType[uint8(i)] + if err := col.Decode(reader, cRows); err != nil { + return fmt.Errorf("failed to decode variant column with %s type: %w", col.Type(), err) + } + } + + return nil +} + +func (c *Variant) ReadStatePrefix(reader *proto.Reader) error { + err := c.decodeHeader(reader) + if err != nil { + return fmt.Errorf("failed to decode variant header: %w", err) + } + + return nil +} + +func (c *Variant) Decode(reader *proto.Reader, rows int) error { + err := c.decodeData(reader, rows) + if err != nil { + return fmt.Errorf("failed to decode variant data: %w", err) + } + + return nil +} diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/driver/driver.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/driver/driver.go index f88bb43e..a3a9c35f 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/driver/driver.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/driver/driver.go @@ -22,6 +22,7 @@ import ( "reflect" "time" + "github.com/ClickHouse/clickhouse-go/v2/lib/column" "github.com/ClickHouse/clickhouse-go/v2/lib/proto" ) @@ -85,6 +86,7 @@ type ( Send() error IsSent() bool Rows() int + Columns() []column.Interface } BatchColumn interface { Append(any) error diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/driver/options.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/driver/options.go index d81760c9..c214c2c9 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/driver/options.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/driver/options.go @@ -2,6 +2,7 @@ package driver type PrepareBatchOptions struct { ReleaseConnection bool + CloseOnFlush bool } type PrepareBatchOption func(options *PrepareBatchOptions) @@ -11,3 +12,10 @@ func WithReleaseConnection() PrepareBatchOption { options.ReleaseConnection = true } } + +// WithCloseOnFlush closes batch INSERT query when Flush is executed +func WithCloseOnFlush() PrepareBatchOption { + return func(options *PrepareBatchOptions) { + options.CloseOnFlush = true + } +} diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/proto/block.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/proto/block.go index 79a5f13f..6debe8cc 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/proto/block.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/lib/proto/block.go @@ -301,8 +301,6 @@ func (e *BlockError) Error() string { switch err := e.Err.(type) { case *column.Error: return fmt.Sprintf("clickhouse [%s]: (%s %s) %s", e.Op, e.ColumnName, err.ColumnType, err.Err) - case *column.DateOverflowError: - return fmt.Sprintf("clickhouse: dateTime overflow. %s must be between %s and %s", e.ColumnName, err.Min.Format(err.Format), err.Max.Format(err.Format)) } return fmt.Sprintf("clickhouse [%s]: %s %s", e.Op, e.ColumnName, e.Err) } diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/main.tf b/vendor/github.com/ClickHouse/clickhouse-go/v2/main.tf deleted file mode 100644 index 95a0e7da..00000000 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/main.tf +++ /dev/null @@ -1,59 +0,0 @@ -terraform { - required_providers { - clickhouse = { - source = "ClickHouse/clickhouse" - version = "~> 0.0.2" - } - } -} - -variable "organization_id" { - type = string -} - -variable "token_key" { - type = string -} - -variable "token_secret" { - type = string -} - -variable "service_name" { - type = string -} - -variable "service_password" { - type = string -} - -provider clickhouse { - environment = "production" - organization_id = var.organization_id - token_key = var.token_key - token_secret = var.token_secret -} - -resource "clickhouse_service" "service" { - name = var.service_name - cloud_provider = "aws" - region = "us-east-2" - tier = "development" - idle_scaling = true - password = var.service_password - - ip_access = [ - { - source = "0.0.0.0/0" - description = "Anywhere" - } - ] -} - -output "CLICKHOUSE_HOST" { - value = clickhouse_service.service.endpoints.0.host -} - -output "SERVICE_ID" { - value = clickhouse_service.service.id -} diff --git a/vendor/github.com/ClickHouse/clickhouse-go/v2/query_parameters.go b/vendor/github.com/ClickHouse/clickhouse-go/v2/query_parameters.go index 9b7e94ca..e5473807 100644 --- a/vendor/github.com/ClickHouse/clickhouse-go/v2/query_parameters.go +++ b/vendor/github.com/ClickHouse/clickhouse-go/v2/query_parameters.go @@ -18,10 +18,11 @@ package clickhouse import ( - "github.com/ClickHouse/clickhouse-go/v2/lib/driver" - "github.com/pkg/errors" + "errors" "regexp" "time" + + "github.com/ClickHouse/clickhouse-go/v2/lib/driver" ) var ( diff --git a/vendor/github.com/andybalholm/brotli/encoder.go b/vendor/github.com/andybalholm/brotli/encoder.go index 650d1e42..19283825 100644 --- a/vendor/github.com/andybalholm/brotli/encoder.go +++ b/vendor/github.com/andybalholm/brotli/encoder.go @@ -21,6 +21,15 @@ func (e *Encoder) Encode(dst []byte, src []byte, matches []matchfinder.Match, la e.wroteHeader = true } + if len(src) == 0 { + if lastBlock { + e.bw.writeBits(2, 3) // islast + isempty + e.bw.jumpToByteBoundary() + return e.bw.dst + } + return dst + } + var literalHisto [256]uint32 var commandHisto [704]uint32 var distanceHisto [64]uint32 diff --git a/vendor/github.com/andybalholm/brotli/matchfinder/emitter.go b/vendor/github.com/andybalholm/brotli/matchfinder/emitter.go index 37ed8e13..507d1cae 100644 --- a/vendor/github.com/andybalholm/brotli/matchfinder/emitter.go +++ b/vendor/github.com/andybalholm/brotli/matchfinder/emitter.go @@ -32,14 +32,3 @@ func (e *matchEmitter) emit(m absoluteMatch) { }) e.NextEmit = m.End } - -// trim shortens m if it extends past maxEnd. Then if the length is at least -// minLength, the match is emitted. -func (e *matchEmitter) trim(m absoluteMatch, maxEnd int, minLength int) { - if m.End > maxEnd { - m.End = maxEnd - } - if m.End-m.Start >= minLength { - e.emit(m) - } -} diff --git a/vendor/github.com/andybalholm/brotli/matchfinder/m4.go b/vendor/github.com/andybalholm/brotli/matchfinder/m4.go index 5b2acba2..81894725 100644 --- a/vendor/github.com/andybalholm/brotli/matchfinder/m4.go +++ b/vendor/github.com/andybalholm/brotli/matchfinder/m4.go @@ -56,7 +56,7 @@ func (q *M4) Reset() { } func (q *M4) score(m absoluteMatch) int { - return (m.End-m.Start)*256 + bits.LeadingZeros32(uint32(m.Start-m.Match))*q.DistanceBitCost + return (m.End-m.Start)*256 + (bits.LeadingZeros32(uint32(m.Start-m.Match))-32)*q.DistanceBitCost } func (q *M4) FindMatches(dst []Match, src []byte) []Match { @@ -112,7 +112,12 @@ func (q *M4) FindMatches(dst []Match, src []byte) []Match { // We have found some matches, and we're far enough along that we probably // won't find overlapping matches, so we might as well emit them. if matches[1] != (absoluteMatch{}) { - e.trim(matches[1], matches[0].Start, q.MinLength) + if matches[1].End > matches[0].Start { + matches[1].End = matches[0].Start + } + if matches[1].End-matches[1].Start >= q.MinLength && q.score(matches[1]) > 0 { + e.emit(matches[1]) + } } e.emit(matches[0]) matches = [3]absoluteMatch{} @@ -139,12 +144,10 @@ func (q *M4) FindMatches(dst []Match, src []byte) []Match { // Look for a match. var currentMatch absoluteMatch - if i-candidate != matches[0].Start-matches[0].Match { - if binary.LittleEndian.Uint32(src[candidate:]) == binary.LittleEndian.Uint32(src[i:]) { - m := extendMatch2(src, i, candidate, e.NextEmit) - if m.End-m.Start > q.MinLength { - currentMatch = m - } + if binary.LittleEndian.Uint32(src[candidate:]) == binary.LittleEndian.Uint32(src[i:]) { + m := extendMatch2(src, i, candidate, e.NextEmit) + if m.End-m.Start > q.MinLength && q.score(m) > 0 { + currentMatch = m } } @@ -157,12 +160,10 @@ func (q *M4) FindMatches(dst []Match, src []byte) []Match { if candidate <= 0 || i-candidate > q.MaxDistance { break } - if i-candidate != matches[0].Start-matches[0].Match { - if binary.LittleEndian.Uint32(src[candidate:]) == binary.LittleEndian.Uint32(src[i:]) { - m := extendMatch2(src, i, candidate, e.NextEmit) - if m.End-m.Start > q.MinLength && q.score(m) > q.score(currentMatch) { - currentMatch = m - } + if binary.LittleEndian.Uint32(src[candidate:]) == binary.LittleEndian.Uint32(src[i:]) { + m := extendMatch2(src, i, candidate, e.NextEmit) + if m.End-m.Start > q.MinLength && q.score(m) > q.score(currentMatch) { + currentMatch = m } } } @@ -217,14 +218,24 @@ func (q *M4) FindMatches(dst []Match, src []byte) []Match { default: // Emit the first match, shortening it if necessary to avoid overlap with the second. - e.trim(matches[2], matches[1].Start, q.MinLength) + if matches[2].End > matches[1].Start { + matches[2].End = matches[1].Start + } + if matches[2].End-matches[2].Start >= q.MinLength && q.score(matches[2]) > 0 { + e.emit(matches[2]) + } matches[2] = absoluteMatch{} } } // We've found all the matches now; emit the remaining ones. if matches[1] != (absoluteMatch{}) { - e.trim(matches[1], matches[0].Start, q.MinLength) + if matches[1].End > matches[0].Start { + matches[1].End = matches[0].Start + } + if matches[1].End-matches[1].Start >= q.MinLength && q.score(matches[1]) > 0 { + e.emit(matches[1]) + } } if matches[0] != (absoluteMatch{}) { e.emit(matches[0]) diff --git a/vendor/github.com/apache/arrow-go/v18/LICENSE.txt b/vendor/github.com/apache/arrow-go/v18/LICENSE.txt new file mode 100644 index 00000000..d722f3ee --- /dev/null +++ b/vendor/github.com/apache/arrow-go/v18/LICENSE.txt @@ -0,0 +1,236 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +-------------------------------------------------------------------------------- + +This project includes code from the Go project, BSD 3-clause license + PATENTS +weak patent termination clause +(https://github.com/golang/go/blob/master/PATENTS). + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/.editorconfig b/vendor/github.com/apache/arrow-go/v18/arrow/.editorconfig similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/.editorconfig rename to vendor/github.com/apache/arrow-go/v18/arrow/.editorconfig diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/.gitignore b/vendor/github.com/apache/arrow-go/v18/arrow/.gitignore similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/.gitignore rename to vendor/github.com/apache/arrow-go/v18/arrow/.gitignore diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/Gopkg.lock b/vendor/github.com/apache/arrow-go/v18/arrow/Gopkg.lock similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/Gopkg.lock rename to vendor/github.com/apache/arrow-go/v18/arrow/Gopkg.lock diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/Gopkg.toml b/vendor/github.com/apache/arrow-go/v18/arrow/Gopkg.toml similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/Gopkg.toml rename to vendor/github.com/apache/arrow-go/v18/arrow/Gopkg.toml diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/Makefile b/vendor/github.com/apache/arrow-go/v18/arrow/Makefile similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/Makefile rename to vendor/github.com/apache/arrow-go/v18/arrow/Makefile diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array.go b/vendor/github.com/apache/arrow-go/v18/arrow/array.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/array.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array.go index 7622e750..df186f2d 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array.go @@ -19,8 +19,8 @@ package arrow import ( "fmt" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) // ArrayData is the underlying memory and metadata of an Arrow array, corresponding @@ -81,6 +81,8 @@ type ArrayData interface { // Dictionary returns the ArrayData object for the dictionary if this is a // dictionary array, otherwise it will be nil. Dictionary() ArrayData + // SizeInBytes returns the size of the ArrayData buffers and any children and/or dictionary in bytes. + SizeInBytes() uint64 } // Array represents an immutable sequence of values using the Arrow in-memory format. diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/array.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/array.go similarity index 93% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/array.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/array.go index 1ee04c7a..6e281a43 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/array.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/array.go @@ -19,9 +19,9 @@ package array import ( "sync/atomic" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/internal/debug" ) const ( @@ -160,6 +160,8 @@ func init() { arrow.TIME64: func(data arrow.ArrayData) arrow.Array { return NewTime64Data(data) }, arrow.INTERVAL_MONTHS: func(data arrow.ArrayData) arrow.Array { return NewMonthIntervalData(data) }, arrow.INTERVAL_DAY_TIME: func(data arrow.ArrayData) arrow.Array { return NewDayTimeIntervalData(data) }, + arrow.DECIMAL32: func(data arrow.ArrayData) arrow.Array { return NewDecimal32Data(data) }, + arrow.DECIMAL64: func(data arrow.ArrayData) arrow.Array { return NewDecimal64Data(data) }, arrow.DECIMAL128: func(data arrow.ArrayData) arrow.Array { return NewDecimal128Data(data) }, arrow.DECIMAL256: func(data arrow.ArrayData) arrow.Array { return NewDecimal256Data(data) }, arrow.LIST: func(data arrow.ArrayData) arrow.Array { return NewListData(data) }, @@ -178,7 +180,8 @@ func init() { arrow.RUN_END_ENCODED: func(data arrow.ArrayData) arrow.Array { return NewRunEndEncodedData(data) }, arrow.LIST_VIEW: func(data arrow.ArrayData) arrow.Array { return NewListViewData(data) }, arrow.LARGE_LIST_VIEW: func(data arrow.ArrayData) arrow.Array { return NewLargeListViewData(data) }, - + arrow.BINARY_VIEW: func(data arrow.ArrayData) arrow.Array { return NewBinaryViewData(data) }, + arrow.STRING_VIEW: func(data arrow.ArrayData) arrow.Array { return NewStringViewData(data) }, // invalid data types to fill out array to size 2^6 - 1 63: invalidDataType, } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/binary.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/binary.go similarity index 70% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/binary.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/binary.go index e9e6e66e..1af7631b 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/binary.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/binary.go @@ -23,12 +23,14 @@ import ( "strings" "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) type BinaryLike interface { arrow.Array + ValueLen(int) int ValueBytes() []byte ValueOffset64(int) int64 } @@ -318,6 +320,134 @@ func arrayEqualLargeBinary(left, right *LargeBinary) bool { return true } +type ViewLike interface { + arrow.Array + ValueHeader(int) *arrow.ViewHeader +} + +type BinaryView struct { + array + values []arrow.ViewHeader + dataBuffers []*memory.Buffer +} + +func NewBinaryViewData(data arrow.ArrayData) *BinaryView { + a := &BinaryView{} + a.refCount = 1 + a.setData(data.(*Data)) + return a +} + +func (a *BinaryView) setData(data *Data) { + if len(data.buffers) < 2 { + panic("len(data.buffers) < 2") + } + a.array.setData(data) + + if valueData := data.buffers[1]; valueData != nil { + a.values = arrow.ViewHeaderTraits.CastFromBytes(valueData.Bytes()) + } + + a.dataBuffers = data.buffers[2:] +} + +func (a *BinaryView) ValueHeader(i int) *arrow.ViewHeader { + if i < 0 || i >= a.array.data.length { + panic("arrow/array: index out of range") + } + return &a.values[a.array.data.offset+i] +} + +func (a *BinaryView) Value(i int) []byte { + s := a.ValueHeader(i) + if s.IsInline() { + return s.InlineBytes() + } + start := s.BufferOffset() + buf := a.dataBuffers[s.BufferIndex()] + return buf.Bytes()[start : start+int32(s.Len())] +} + +func (a *BinaryView) ValueLen(i int) int { + s := a.ValueHeader(i) + return s.Len() +} + +// ValueString returns the value at index i as a string instead of +// a byte slice, without copying the underlying data. +func (a *BinaryView) ValueString(i int) string { + b := a.Value(i) + return *(*string)(unsafe.Pointer(&b)) +} + +func (a *BinaryView) String() string { + var o strings.Builder + o.WriteString("[") + for i := 0; i < a.Len(); i++ { + if i > 0 { + o.WriteString(" ") + } + switch { + case a.IsNull(i): + o.WriteString(NullValueStr) + default: + fmt.Fprintf(&o, "%q", a.ValueString(i)) + } + } + o.WriteString("]") + return o.String() +} + +// ValueStr is paired with AppendValueFromString in that it returns +// the value at index i as a string: Semantically this means that for +// a null value it will return the string "(null)", otherwise it will +// return the value as a base64 encoded string suitable for CSV/JSON. +// +// This is always going to be less performant than just using ValueString +// and exists to fulfill the Array interface to provide a method which +// can produce a human readable string for a given index. +func (a *BinaryView) ValueStr(i int) string { + if a.IsNull(i) { + return NullValueStr + } + return base64.StdEncoding.EncodeToString(a.Value(i)) +} + +func (a *BinaryView) GetOneForMarshal(i int) interface{} { + if a.IsNull(i) { + return nil + } + return a.Value(i) +} + +func (a *BinaryView) MarshalJSON() ([]byte, error) { + vals := make([]interface{}, a.Len()) + for i := 0; i < a.Len(); i++ { + vals[i] = a.GetOneForMarshal(i) + } + // golang marshal standard says that []byte will be marshalled + // as a base64-encoded string + return json.Marshal(vals) +} + +func arrayEqualBinaryView(left, right *BinaryView) bool { + leftBufs, rightBufs := left.dataBuffers, right.dataBuffers + for i := 0; i < left.Len(); i++ { + if left.IsNull(i) { + continue + } + if !left.ValueHeader(i).Equals(leftBufs, right.ValueHeader(i), rightBufs) { + return false + } + } + return true +} + var ( _ arrow.Array = (*Binary)(nil) + _ arrow.Array = (*LargeBinary)(nil) + _ arrow.Array = (*BinaryView)(nil) + + _ BinaryLike = (*Binary)(nil) + _ BinaryLike = (*LargeBinary)(nil) ) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/binarybuilder.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/binarybuilder.go similarity index 56% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/binarybuilder.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/binarybuilder.go index 3cb709b4..794ac688 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/binarybuilder.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/binarybuilder.go @@ -23,11 +23,12 @@ import ( "math" "reflect" "sync/atomic" + "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) // A BinaryBuilder is used to build a Binary array using the Append methods. @@ -370,6 +371,334 @@ func (b *BinaryBuilder) UnmarshalJSON(data []byte) error { return b.Unmarshal(dec) } +const ( + dfltBlockSize = 32 << 10 // 32 KB + viewValueSizeLimit int32 = math.MaxInt32 +) + +type BinaryViewBuilder struct { + builder + dtype arrow.BinaryDataType + + data *memory.Buffer + rawData []arrow.ViewHeader + + blockBuilder multiBufferBuilder +} + +func NewBinaryViewBuilder(mem memory.Allocator) *BinaryViewBuilder { + return &BinaryViewBuilder{ + dtype: arrow.BinaryTypes.BinaryView, + builder: builder{ + refCount: 1, + mem: mem, + }, + blockBuilder: multiBufferBuilder{ + refCount: 1, + blockSize: dfltBlockSize, + mem: mem, + }, + } +} + +func (b *BinaryViewBuilder) SetBlockSize(sz uint) { + b.blockBuilder.blockSize = int(sz) +} + +func (b *BinaryViewBuilder) Type() arrow.DataType { return b.dtype } + +func (b *BinaryViewBuilder) Release() { + debug.Assert(atomic.LoadInt64(&b.refCount) > 0, "too many releases") + + if atomic.AddInt64(&b.refCount, -1) != 0 { + return + } + + if b.nullBitmap != nil { + b.nullBitmap.Release() + b.nullBitmap = nil + } + if b.data != nil { + b.data.Release() + b.data = nil + b.rawData = nil + } +} + +func (b *BinaryViewBuilder) init(capacity int) { + b.builder.init(capacity) + b.data = memory.NewResizableBuffer(b.mem) + bytesN := arrow.ViewHeaderTraits.BytesRequired(capacity) + b.data.Resize(bytesN) + b.rawData = arrow.ViewHeaderTraits.CastFromBytes(b.data.Bytes()) +} + +func (b *BinaryViewBuilder) Resize(n int) { + nbuild := n + if n < minBuilderCapacity { + n = minBuilderCapacity + } + + if b.capacity == 0 { + b.init(n) + return + } + + b.builder.resize(nbuild, b.init) + b.data.Resize(arrow.ViewHeaderTraits.BytesRequired(n)) + b.rawData = arrow.ViewHeaderTraits.CastFromBytes(b.data.Bytes()) +} + +func (b *BinaryViewBuilder) ReserveData(length int) { + if int32(length) > viewValueSizeLimit { + panic(fmt.Errorf("%w: BinaryView or StringView elements cannot reference strings larger than 2GB", + arrow.ErrInvalid)) + } + b.blockBuilder.Reserve(int(length)) +} + +func (b *BinaryViewBuilder) Reserve(n int) { + b.builder.reserve(n, b.Resize) +} + +func (b *BinaryViewBuilder) Append(v []byte) { + if int32(len(v)) > viewValueSizeLimit { + panic(fmt.Errorf("%w: BinaryView or StringView elements cannot reference strings larger than 2GB", arrow.ErrInvalid)) + } + + if !arrow.IsViewInline(len(v)) { + b.ReserveData(len(v)) + } + + b.Reserve(1) + b.UnsafeAppend(v) +} + +// AppendString is identical to Append, only accepting a string instead +// of a byte slice, avoiding the extra copy that would occur if you simply +// did []byte(v). +// +// This is different than AppendValueFromString which exists for the +// Builder interface, in that this expects raw binary data which is +// appended unmodified. AppendValueFromString expects base64 encoded binary +// data instead. +func (b *BinaryViewBuilder) AppendString(v string) { + // create a []byte without copying the bytes + // in go1.20 this would be unsafe.StringData + val := *(*[]byte)(unsafe.Pointer(&struct { + string + int + }{v, len(v)})) + b.Append(val) +} + +func (b *BinaryViewBuilder) AppendNull() { + b.Reserve(1) + b.UnsafeAppendBoolToBitmap(false) +} + +func (b *BinaryViewBuilder) AppendNulls(n int) { + b.Reserve(n) + for i := 0; i < n; i++ { + b.UnsafeAppendBoolToBitmap(false) + } +} + +func (b *BinaryViewBuilder) AppendEmptyValue() { + b.Reserve(1) + b.UnsafeAppendBoolToBitmap(true) +} + +func (b *BinaryViewBuilder) AppendEmptyValues(n int) { + b.Reserve(n) + b.unsafeAppendBoolsToBitmap(nil, n) +} + +func (b *BinaryViewBuilder) UnsafeAppend(v []byte) { + hdr := &b.rawData[b.length] + hdr.SetBytes(v) + if !hdr.IsInline() { + b.blockBuilder.UnsafeAppend(hdr, v) + } + b.UnsafeAppendBoolToBitmap(true) +} + +func (b *BinaryViewBuilder) AppendValues(v [][]byte, valid []bool) { + if len(v) != len(valid) && len(valid) != 0 { + panic("len(v) != len(valid) && len(valid) != 0") + } + + if len(v) == 0 { + return + } + + b.Reserve(len(v)) + outOfLineTotal := 0 + for i, vv := range v { + if len(valid) == 0 || valid[i] { + if !arrow.IsViewInline(len(vv)) { + outOfLineTotal += len(vv) + } + } + } + + b.ReserveData(outOfLineTotal) + for i, vv := range v { + if len(valid) == 0 || valid[i] { + hdr := &b.rawData[b.length+i] + hdr.SetBytes(vv) + if !hdr.IsInline() { + b.blockBuilder.UnsafeAppend(hdr, vv) + } + } + } + + b.builder.unsafeAppendBoolsToBitmap(valid, len(v)) +} + +func (b *BinaryViewBuilder) AppendStringValues(v []string, valid []bool) { + if len(v) != len(valid) && len(valid) != 0 { + panic("len(v) != len(valid) && len(valid) != 0") + } + + if len(v) == 0 { + return + } + + b.Reserve(len(v)) + outOfLineTotal := 0 + for i, vv := range v { + if len(valid) == 0 || valid[i] { + if !arrow.IsViewInline(len(vv)) { + outOfLineTotal += len(vv) + } + } + } + + b.ReserveData(outOfLineTotal) + for i, vv := range v { + if len(valid) == 0 || valid[i] { + hdr := &b.rawData[b.length+i] + hdr.SetString(vv) + if !hdr.IsInline() { + b.blockBuilder.UnsafeAppendString(hdr, vv) + } + } + } + + b.builder.unsafeAppendBoolsToBitmap(valid, len(v)) +} + +// AppendValueFromString is paired with ValueStr for fulfilling the +// base Builder interface. This is intended to read in a human-readable +// string such as from CSV or JSON and append it to the array. +// +// For Binary values are expected to be base64 encoded (and will be +// decoded as such before being appended). +func (b *BinaryViewBuilder) AppendValueFromString(s string) error { + if s == NullValueStr { + b.AppendNull() + return nil + } + + if b.dtype.IsUtf8() { + b.Append([]byte(s)) + return nil + } + + decodedVal, err := base64.StdEncoding.DecodeString(s) + if err != nil { + return fmt.Errorf("could not decode base64 string: %w", err) + } + b.Append(decodedVal) + return nil +} + +func (b *BinaryViewBuilder) UnmarshalOne(dec *json.Decoder) error { + t, err := dec.Token() + if err != nil { + return err + } + + switch v := t.(type) { + case string: + data, err := base64.StdEncoding.DecodeString(v) + if err != nil { + return err + } + b.Append(data) + case []byte: + b.Append(v) + case nil: + b.AppendNull() + default: + return &json.UnmarshalTypeError{ + Value: fmt.Sprint(t), + Type: reflect.TypeOf([]byte{}), + Offset: dec.InputOffset(), + } + } + return nil +} + +func (b *BinaryViewBuilder) Unmarshal(dec *json.Decoder) error { + for dec.More() { + if err := b.UnmarshalOne(dec); err != nil { + return err + } + } + return nil +} + +func (b *BinaryViewBuilder) UnmarshalJSON(data []byte) error { + dec := json.NewDecoder(bytes.NewReader(data)) + t, err := dec.Token() + if err != nil { + return err + } + + if delim, ok := t.(json.Delim); !ok || delim != '[' { + return fmt.Errorf("binary view builder must unpack from json array, found %s", delim) + } + + return b.Unmarshal(dec) +} + +func (b *BinaryViewBuilder) newData() (data *Data) { + bytesRequired := arrow.ViewHeaderTraits.BytesRequired(b.length) + if bytesRequired > 0 && bytesRequired < b.data.Len() { + // trim buffers + b.data.Resize(bytesRequired) + } + + dataBuffers := b.blockBuilder.Finish() + data = NewData(b.dtype, b.length, append([]*memory.Buffer{ + b.nullBitmap, b.data}, dataBuffers...), nil, b.nulls, 0) + b.reset() + + if b.data != nil { + b.data.Release() + b.data = nil + b.rawData = nil + for _, buf := range dataBuffers { + buf.Release() + } + } + return +} + +func (b *BinaryViewBuilder) NewBinaryViewArray() (a *BinaryView) { + data := b.newData() + a = NewBinaryViewData(data) + data.Release() + return +} + +func (b *BinaryViewBuilder) NewArray() arrow.Array { + return b.NewBinaryViewArray() +} + var ( _ Builder = (*BinaryBuilder)(nil) + _ Builder = (*BinaryViewBuilder)(nil) ) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/boolean.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/boolean.go similarity index 94% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/boolean.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/boolean.go index 464cef48..fb2dba73 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/boolean.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/boolean.go @@ -21,10 +21,10 @@ import ( "strconv" "strings" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) // A type which represents an immutable sequence of boolean values. diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/booleanbuilder.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/booleanbuilder.go similarity index 96% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/booleanbuilder.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/booleanbuilder.go index 10b7405a..951fe3a9 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/booleanbuilder.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/booleanbuilder.go @@ -23,11 +23,11 @@ import ( "strconv" "sync/atomic" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) type BooleanBuilder struct { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/bufferbuilder.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/bufferbuilder.go similarity index 60% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/bufferbuilder.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/bufferbuilder.go index e023b0d9..085d43ef 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/bufferbuilder.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/bufferbuilder.go @@ -18,10 +18,12 @@ package array import ( "sync/atomic" + "unsafe" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" ) type bufBuilder interface { @@ -151,3 +153,109 @@ func (b *bufferBuilder) unsafeAppend(data []byte) { copy(b.bytes[b.length:], data) b.length += len(data) } + +type multiBufferBuilder struct { + refCount int64 + blockSize int + + mem memory.Allocator + blocks []*memory.Buffer + currentOutBuffer int +} + +// Retain increases the reference count by 1. +// Retain may be called simultaneously from multiple goroutines. +func (b *multiBufferBuilder) Retain() { + atomic.AddInt64(&b.refCount, 1) +} + +// Release decreases the reference count by 1. +// When the reference count goes to zero, the memory is freed. +// Release may be called simultaneously from multiple goroutines. +func (b *multiBufferBuilder) Release() { + debug.Assert(atomic.LoadInt64(&b.refCount) > 0, "too many releases") + + if atomic.AddInt64(&b.refCount, -1) == 0 { + b.Reset() + } +} + +func (b *multiBufferBuilder) Reserve(nbytes int) { + if len(b.blocks) == 0 { + out := memory.NewResizableBuffer(b.mem) + if nbytes < b.blockSize { + nbytes = b.blockSize + } + out.Reserve(nbytes) + b.currentOutBuffer = 0 + b.blocks = []*memory.Buffer{out} + return + } + + curBuf := b.blocks[b.currentOutBuffer] + remain := curBuf.Cap() - curBuf.Len() + if nbytes <= remain { + return + } + + // search for underfull block that has enough bytes + for i, block := range b.blocks { + remaining := block.Cap() - block.Len() + if nbytes <= remaining { + b.currentOutBuffer = i + return + } + } + + // current buffer doesn't have enough space, no underfull buffers + // make new buffer and set that as our current. + newBuf := memory.NewResizableBuffer(b.mem) + if nbytes < b.blockSize { + nbytes = b.blockSize + } + + newBuf.Reserve(nbytes) + b.currentOutBuffer = len(b.blocks) + b.blocks = append(b.blocks, newBuf) +} + +func (b *multiBufferBuilder) RemainingBytes() int { + if len(b.blocks) == 0 { + return 0 + } + + buf := b.blocks[b.currentOutBuffer] + return buf.Cap() - buf.Len() +} + +func (b *multiBufferBuilder) Reset() { + b.currentOutBuffer = 0 + for _, block := range b.Finish() { + block.Release() + } +} + +func (b *multiBufferBuilder) UnsafeAppend(hdr *arrow.ViewHeader, val []byte) { + buf := b.blocks[b.currentOutBuffer] + idx, offset := b.currentOutBuffer, buf.Len() + hdr.SetIndexOffset(int32(idx), int32(offset)) + + n := copy(buf.Buf()[offset:], val) + buf.ResizeNoShrink(offset + n) +} + +func (b *multiBufferBuilder) UnsafeAppendString(hdr *arrow.ViewHeader, val string) { + // create a byte slice with zero-copies + // in go1.20 this would be equivalent to unsafe.StringData + v := *(*[]byte)(unsafe.Pointer(&struct { + string + int + }{val, len(val)})) + b.UnsafeAppend(hdr, v) +} + +func (b *multiBufferBuilder) Finish() (out []*memory.Buffer) { + b.currentOutBuffer = 0 + out, b.blocks = b.blocks, nil + return +} diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/bufferbuilder_byte.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/bufferbuilder_byte.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/bufferbuilder_byte.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/bufferbuilder_byte.go index 00a0d1c2..78bb938e 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/bufferbuilder_byte.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/bufferbuilder_byte.go @@ -16,7 +16,7 @@ package array -import "github.com/apache/arrow/go/v14/arrow/memory" +import "github.com/apache/arrow-go/v18/arrow/memory" type byteBufferBuilder struct { bufferBuilder diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/bufferbuilder_numeric.gen.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/bufferbuilder_numeric.gen.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/bufferbuilder_numeric.gen.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/bufferbuilder_numeric.gen.go index 879bc9f5..3812c5e7 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/bufferbuilder_numeric.gen.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/bufferbuilder_numeric.gen.go @@ -19,9 +19,9 @@ package array import ( - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/memory" ) type int64BufferBuilder struct { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/bufferbuilder_numeric.gen.go.tmpl b/vendor/github.com/apache/arrow-go/v18/arrow/array/bufferbuilder_numeric.gen.go.tmpl similarity index 94% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/bufferbuilder_numeric.gen.go.tmpl rename to vendor/github.com/apache/arrow-go/v18/arrow/array/bufferbuilder_numeric.gen.go.tmpl index e859b5bf..c3c39de1 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/bufferbuilder_numeric.gen.go.tmpl +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/bufferbuilder_numeric.gen.go.tmpl @@ -17,9 +17,9 @@ package array import ( - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/memory" ) {{range .In}} diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/builder.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/builder.go similarity index 92% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/builder.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/builder.go index 2f15ac96..a2a40d48 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/builder.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/builder.go @@ -20,10 +20,10 @@ import ( "fmt" "sync/atomic" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) const ( @@ -313,6 +313,14 @@ func NewBuilder(mem memory.Allocator, dtype arrow.DataType) Builder { return NewDayTimeIntervalBuilder(mem) case arrow.INTERVAL_MONTH_DAY_NANO: return NewMonthDayNanoIntervalBuilder(mem) + case arrow.DECIMAL32: + if typ, ok := dtype.(*arrow.Decimal32Type); ok { + return NewDecimal32Builder(mem, typ) + } + case arrow.DECIMAL64: + if typ, ok := dtype.(*arrow.Decimal64Type); ok { + return NewDecimal64Builder(mem, typ) + } case arrow.DECIMAL128: if typ, ok := dtype.(*arrow.Decimal128Type); ok { return NewDecimal128Builder(mem, typ) @@ -349,21 +357,26 @@ func NewBuilder(mem memory.Allocator, dtype arrow.DataType) Builder { typ := dtype.(*arrow.LargeListViewType) return NewLargeListViewBuilderWithField(mem, typ.ElemField()) case arrow.EXTENSION: - typ := dtype.(arrow.ExtensionType) - bldr := NewExtensionBuilder(mem, typ) - if custom, ok := typ.(ExtensionBuilderWrapper); ok { - return custom.NewBuilder(bldr) + if custom, ok := dtype.(CustomExtensionBuilder); ok { + return custom.NewBuilder(mem) + } + if typ, ok := dtype.(arrow.ExtensionType); ok { + return NewExtensionBuilder(mem, typ) } - return bldr + panic(fmt.Errorf("arrow/array: invalid extension type: %T", dtype)) case arrow.FIXED_SIZE_LIST: typ := dtype.(*arrow.FixedSizeListType) - return NewFixedSizeListBuilder(mem, typ.Len(), typ.Elem()) + return NewFixedSizeListBuilderWithField(mem, typ.Len(), typ.ElemField()) case arrow.DURATION: typ := dtype.(*arrow.DurationType) return NewDurationBuilder(mem, typ) case arrow.RUN_END_ENCODED: typ := dtype.(*arrow.RunEndEncodedType) return NewRunEndEncodedBuilder(mem, typ.RunEnds(), typ.Encoded()) + case arrow.BINARY_VIEW: + return NewBinaryViewBuilder(mem) + case arrow.STRING_VIEW: + return NewStringViewBuilder(mem) } panic(fmt.Errorf("arrow/array: unsupported builder for %T", dtype)) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/compare.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/compare.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/compare.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/compare.go index e70716be..ad3a50b8 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/compare.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/compare.go @@ -20,9 +20,9 @@ import ( "fmt" "math" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/float16" - "github.com/apache/arrow/go/v14/internal/bitutils" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/float16" + "github.com/apache/arrow-go/v18/internal/bitutils" ) // RecordEqual reports whether the two provided records are equal. @@ -232,6 +232,12 @@ func Equal(left, right arrow.Array) bool { case *LargeString: r := right.(*LargeString) return arrayEqualLargeString(l, r) + case *BinaryView: + r := right.(*BinaryView) + return arrayEqualBinaryView(l, r) + case *StringView: + r := right.(*StringView) + return arrayEqualStringView(l, r) case *Int8: r := right.(*Int8) return arrayEqualInt8(l, r) @@ -265,12 +271,18 @@ func Equal(left, right arrow.Array) bool { case *Float64: r := right.(*Float64) return arrayEqualFloat64(l, r) + case *Decimal32: + r := right.(*Decimal32) + return arrayEqualDecimal(l, r) + case *Decimal64: + r := right.(*Decimal64) + return arrayEqualDecimal(l, r) case *Decimal128: r := right.(*Decimal128) - return arrayEqualDecimal128(l, r) + return arrayEqualDecimal(l, r) case *Decimal256: r := right.(*Decimal256) - return arrayEqualDecimal256(l, r) + return arrayEqualDecimal(l, r) case *Date32: r := right.(*Date32) return arrayEqualDate32(l, r) @@ -482,6 +494,12 @@ func arrayApproxEqual(left, right arrow.Array, opt equalOption) bool { case *LargeString: r := right.(*LargeString) return arrayEqualLargeString(l, r) + case *BinaryView: + r := right.(*BinaryView) + return arrayEqualBinaryView(l, r) + case *StringView: + r := right.(*StringView) + return arrayEqualStringView(l, r) case *Int8: r := right.(*Int8) return arrayEqualInt8(l, r) @@ -515,12 +533,18 @@ func arrayApproxEqual(left, right arrow.Array, opt equalOption) bool { case *Float64: r := right.(*Float64) return arrayApproxEqualFloat64(l, r, opt) + case *Decimal32: + r := right.(*Decimal32) + return arrayEqualDecimal(l, r) + case *Decimal64: + r := right.(*Decimal64) + return arrayEqualDecimal(l, r) case *Decimal128: r := right.(*Decimal128) - return arrayEqualDecimal128(l, r) + return arrayEqualDecimal(l, r) case *Decimal256: r := right.(*Decimal256) - return arrayEqualDecimal256(l, r) + return arrayEqualDecimal(l, r) case *Date32: r := right.(*Date32) return arrayEqualDate32(l, r) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/concat.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/concat.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/concat.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/concat.go index 9d815023..bb50354b 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/concat.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/concat.go @@ -23,13 +23,13 @@ import ( "math/bits" "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/encoded" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/bitutils" - "github.com/apache/arrow/go/v14/internal/utils" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/encoded" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/bitutils" + "github.com/apache/arrow-go/v18/internal/utils" ) // Concatenate creates a new arrow.Array which is the concatenation of the @@ -520,12 +520,7 @@ func concat(data []arrow.ArrayData, mem memory.Allocator) (arr arrow.ArrayData, out := &Data{refCount: 1, dtype: data[0].DataType(), nulls: 0} defer func() { if pErr := recover(); pErr != nil { - switch e := pErr.(type) { - case error: - err = fmt.Errorf("arrow/concat: %w", e) - default: - err = fmt.Errorf("arrow/concat: %v", pErr) - } + err = utils.FormatRecoveredError("arrow/concat", pErr) } if err != nil { out.Release() @@ -600,6 +595,35 @@ func concat(data []arrow.ArrayData, mem memory.Allocator) (arr arrow.ArrayData, } case arrow.FixedWidthDataType: out.buffers[1] = concatBuffers(gatherBuffersFixedWidthType(data, 1, dt), mem) + case arrow.BinaryViewDataType: + out.buffers = out.buffers[:2] + for _, d := range data { + for _, buf := range d.Buffers()[2:] { + buf.Retain() + out.buffers = append(out.buffers, buf) + } + } + + out.buffers[1] = concatBuffers(gatherFixedBuffers(data, 1, arrow.ViewHeaderSizeBytes), mem) + + var ( + s = arrow.ViewHeaderTraits.CastFromBytes(out.buffers[1].Bytes()) + i = data[0].Len() + precedingBufsCount int + ) + + for idx := 1; idx < len(data); idx++ { + precedingBufsCount += len(data[idx-1].Buffers()) - 2 + + for end := i + data[idx].Len(); i < end; i++ { + if s[i].IsInline() { + continue + } + + bufIndex := s[i].BufferIndex() + int32(precedingBufsCount) + s[i].SetIndexOffset(bufIndex, s[i].BufferOffset()) + } + } case arrow.BinaryDataType: offsetWidth := dt.Layout().Buffers[1].ByteWidth offsetBuffer, valueRanges, err := concatOffsets(gatherFixedBuffers(data, 1, offsetWidth), offsetWidth, mem) @@ -666,7 +690,7 @@ func concat(data []arrow.ArrayData, mem memory.Allocator) (arr arrow.ArrayData, } out.childData = []arrow.ArrayData{children} case *arrow.StructType: - out.childData = make([]arrow.ArrayData, len(dt.Fields())) + out.childData = make([]arrow.ArrayData, dt.NumFields()) for i := range dt.Fields() { children := gatherChildren(data, i) for _, c := range children { @@ -739,7 +763,6 @@ func concat(data []arrow.ArrayData, mem memory.Allocator) (arr arrow.ArrayData, out.childData[0].Release() return nil, err } - default: return nil, fmt.Errorf("concatenate not implemented for type %s", dt) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/data.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/data.go similarity index 90% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/data.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/data.go index 49df06fb..be75c7c7 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/data.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/data.go @@ -22,9 +22,9 @@ import ( "sync/atomic" "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" ) // Data represents the memory and metadata of an Arrow array. @@ -190,9 +190,36 @@ func (d *Data) SetDictionary(dict arrow.ArrayData) { } } +// SizeInBytes returns the size of the Data and any children and/or dictionary in bytes by +// recursively examining the nested structures of children and/or dictionary. +// The value returned is an upper-bound since offset is not taken into account. +func (d *Data) SizeInBytes() uint64 { + var size uint64 + + if d == nil { + return 0 + } + + for _, b := range d.Buffers() { + if b != nil { + size += uint64(b.Len()) + } + } + for _, c := range d.Children() { + size += c.SizeInBytes() + } + if d.dictionary != nil { + size += d.dictionary.SizeInBytes() + } + + return size +} + // NewSliceData returns a new slice that shares backing data with the input. // The returned Data slice starts at i and extends j-i elements, such as: -// slice := data[i:j] +// +// slice := data[i:j] +// // The returned value must be Release'd after use. // // NewSliceData panics if the slice is outside the valid range of the input Data. diff --git a/vendor/github.com/apache/arrow-go/v18/arrow/array/decimal.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/decimal.go new file mode 100644 index 00000000..1a9d61c1 --- /dev/null +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/decimal.go @@ -0,0 +1,432 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package array + +import ( + "bytes" + "fmt" + "reflect" + "strings" + "sync/atomic" + + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/decimal" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" +) + +type baseDecimal[T interface { + decimal.DecimalTypes + decimal.Num[T] +}] struct { + array + + values []T +} + +func newDecimalData[T interface { + decimal.DecimalTypes + decimal.Num[T] +}](data arrow.ArrayData) *baseDecimal[T] { + a := &baseDecimal[T]{} + a.refCount = 1 + a.setData(data.(*Data)) + return a +} + +func (a *baseDecimal[T]) Value(i int) T { return a.values[i] } + +func (a *baseDecimal[T]) ValueStr(i int) string { + if a.IsNull(i) { + return NullValueStr + } + return a.GetOneForMarshal(i).(string) +} + +func (a *baseDecimal[T]) Values() []T { return a.values } + +func (a *baseDecimal[T]) String() string { + o := new(strings.Builder) + o.WriteString("[") + for i := 0; i < a.Len(); i++ { + if i > 0 { + fmt.Fprintf(o, " ") + } + switch { + case a.IsNull(i): + o.WriteString(NullValueStr) + default: + fmt.Fprintf(o, "%v", a.Value(i)) + } + } + o.WriteString("]") + return o.String() +} + +func (a *baseDecimal[T]) setData(data *Data) { + a.array.setData(data) + vals := data.buffers[1] + if vals != nil { + a.values = arrow.GetData[T](vals.Bytes()) + beg := a.array.data.offset + end := beg + a.array.data.length + a.values = a.values[beg:end] + } +} + +func (a *baseDecimal[T]) GetOneForMarshal(i int) any { + if a.IsNull(i) { + return nil + } + + typ := a.DataType().(arrow.DecimalType) + n, scale := a.Value(i), typ.GetScale() + return n.ToBigFloat(scale).Text('g', int(typ.GetPrecision())) +} + +func (a *baseDecimal[T]) MarshalJSON() ([]byte, error) { + vals := make([]any, a.Len()) + for i := 0; i < a.Len(); i++ { + vals[i] = a.GetOneForMarshal(i) + } + return json.Marshal(vals) +} + +func arrayEqualDecimal[T interface { + decimal.DecimalTypes + decimal.Num[T] +}](left, right *baseDecimal[T]) bool { + for i := 0; i < left.Len(); i++ { + if left.IsNull(i) { + continue + } + + if left.Value(i) != right.Value(i) { + return false + } + } + return true +} + +type Decimal32 = baseDecimal[decimal.Decimal32] + +func NewDecimal32Data(data arrow.ArrayData) *Decimal32 { + return newDecimalData[decimal.Decimal32](data) +} + +type Decimal64 = baseDecimal[decimal.Decimal64] + +func NewDecimal64Data(data arrow.ArrayData) *Decimal64 { + return newDecimalData[decimal.Decimal64](data) +} + +type Decimal128 = baseDecimal[decimal.Decimal128] + +func NewDecimal128Data(data arrow.ArrayData) *Decimal128 { + return newDecimalData[decimal.Decimal128](data) +} + +type Decimal256 = baseDecimal[decimal.Decimal256] + +func NewDecimal256Data(data arrow.ArrayData) *Decimal256 { + return newDecimalData[decimal.Decimal256](data) +} + +type Decimal32Builder = baseDecimalBuilder[decimal.Decimal32] +type Decimal64Builder = baseDecimalBuilder[decimal.Decimal64] +type Decimal128Builder struct { + *baseDecimalBuilder[decimal.Decimal128] +} + +func (b *Decimal128Builder) NewDecimal128Array() *Decimal128 { + return b.NewDecimalArray() +} + +type Decimal256Builder struct { + *baseDecimalBuilder[decimal.Decimal256] +} + +func (b *Decimal256Builder) NewDecimal256Array() *Decimal256 { + return b.NewDecimalArray() +} + +type baseDecimalBuilder[T interface { + decimal.DecimalTypes + decimal.Num[T] +}] struct { + builder + traits decimal.Traits[T] + + dtype arrow.DecimalType + data *memory.Buffer + rawData []T +} + +func newDecimalBuilder[T interface { + decimal.DecimalTypes + decimal.Num[T] +}, DT arrow.DecimalType](mem memory.Allocator, dtype DT) *baseDecimalBuilder[T] { + return &baseDecimalBuilder[T]{ + builder: builder{refCount: 1, mem: mem}, + dtype: dtype, + } +} + +func (b *baseDecimalBuilder[T]) Type() arrow.DataType { return b.dtype } + +func (b *baseDecimalBuilder[T]) Release() { + debug.Assert(atomic.LoadInt64(&b.refCount) > 0, "too many releases") + + if atomic.AddInt64(&b.refCount, -1) == 0 { + if b.nullBitmap != nil { + b.nullBitmap.Release() + b.nullBitmap = nil + } + if b.data != nil { + b.data.Release() + b.data, b.rawData = nil, nil + } + } +} + +func (b *baseDecimalBuilder[T]) Append(v T) { + b.Reserve(1) + b.UnsafeAppend(v) +} + +func (b *baseDecimalBuilder[T]) UnsafeAppend(v T) { + bitutil.SetBit(b.nullBitmap.Bytes(), b.length) + b.rawData[b.length] = v + b.length++ +} + +func (b *baseDecimalBuilder[T]) AppendNull() { + b.Reserve(1) + b.UnsafeAppendBoolToBitmap(false) +} + +func (b *baseDecimalBuilder[T]) AppendNulls(n int) { + for i := 0; i < n; i++ { + b.AppendNull() + } +} + +func (b *baseDecimalBuilder[T]) AppendEmptyValue() { + var empty T + b.Append(empty) +} + +func (b *baseDecimalBuilder[T]) AppendEmptyValues(n int) { + for i := 0; i < n; i++ { + b.AppendEmptyValue() + } +} + +func (b *baseDecimalBuilder[T]) UnsafeAppendBoolToBitmap(isValid bool) { + if isValid { + bitutil.SetBit(b.nullBitmap.Bytes(), b.length) + } else { + b.nulls++ + } + b.length++ +} + +func (b *baseDecimalBuilder[T]) AppendValues(v []T, valid []bool) { + if len(v) != len(valid) && len(valid) != 0 { + panic("len(v) != len(valid) && len(valid) != 0") + } + + if len(v) == 0 { + return + } + + b.Reserve(len(v)) + if len(v) > 0 { + copy(b.rawData[b.length:], v) + } + b.builder.unsafeAppendBoolsToBitmap(valid, len(v)) +} + +func (b *baseDecimalBuilder[T]) init(capacity int) { + b.builder.init(capacity) + + b.data = memory.NewResizableBuffer(b.mem) + bytesN := int(reflect.TypeFor[T]().Size()) * capacity + b.data.Resize(bytesN) + b.rawData = arrow.GetData[T](b.data.Bytes()) +} + +func (b *baseDecimalBuilder[T]) Reserve(n int) { + b.builder.reserve(n, b.Resize) +} + +func (b *baseDecimalBuilder[T]) Resize(n int) { + nBuilder := n + if n < minBuilderCapacity { + n = minBuilderCapacity + } + + if b.capacity == 0 { + b.init(n) + } else { + b.builder.resize(nBuilder, b.init) + b.data.Resize(b.traits.BytesRequired(n)) + b.rawData = arrow.GetData[T](b.data.Bytes()) + } +} + +func (b *baseDecimalBuilder[T]) NewDecimalArray() (a *baseDecimal[T]) { + data := b.newData() + a = newDecimalData[T](data) + data.Release() + return +} + +func (b *baseDecimalBuilder[T]) NewArray() arrow.Array { + return b.NewDecimalArray() +} + +func (b *baseDecimalBuilder[T]) newData() (data *Data) { + bytesRequired := b.traits.BytesRequired(b.length) + if bytesRequired > 0 && bytesRequired < b.data.Len() { + // trim buffers + b.data.Resize(bytesRequired) + } + data = NewData(b.dtype, b.length, []*memory.Buffer{b.nullBitmap, b.data}, nil, b.nulls, 0) + b.reset() + + if b.data != nil { + b.data.Release() + b.data, b.rawData = nil, nil + } + + return +} + +func (b *baseDecimalBuilder[T]) AppendValueFromString(s string) error { + if s == NullValueStr { + b.AppendNull() + return nil + } + + val, err := b.traits.FromString(s, b.dtype.GetPrecision(), b.dtype.GetScale()) + if err != nil { + b.AppendNull() + return err + } + b.Append(val) + return nil +} + +func (b *baseDecimalBuilder[T]) UnmarshalOne(dec *json.Decoder) error { + t, err := dec.Token() + if err != nil { + return err + } + + var token T + switch v := t.(type) { + case float64: + token, err = b.traits.FromFloat64(v, b.dtype.GetPrecision(), b.dtype.GetScale()) + if err != nil { + return err + } + b.Append(token) + case string: + token, err = b.traits.FromString(v, b.dtype.GetPrecision(), b.dtype.GetScale()) + if err != nil { + return err + } + b.Append(token) + case json.Number: + token, err = b.traits.FromString(v.String(), b.dtype.GetPrecision(), b.dtype.GetScale()) + if err != nil { + return err + } + b.Append(token) + case nil: + b.AppendNull() + default: + return &json.UnmarshalTypeError{ + Value: fmt.Sprint(t), + Type: reflect.TypeFor[T](), + Offset: dec.InputOffset(), + } + } + + return nil +} + +func (b *baseDecimalBuilder[T]) Unmarshal(dec *json.Decoder) error { + for dec.More() { + if err := b.UnmarshalOne(dec); err != nil { + return err + } + } + return nil +} + +func (b *baseDecimalBuilder[T]) UnmarshalJSON(data []byte) error { + dec := json.NewDecoder(bytes.NewReader(data)) + t, err := dec.Token() + if err != nil { + return err + } + + if delim, ok := t.(json.Delim); !ok || delim != '[' { + return fmt.Errorf("decimal builder must unpack from json array, found %s", delim) + } + + return b.Unmarshal(dec) +} + +func NewDecimal32Builder(mem memory.Allocator, dtype *arrow.Decimal32Type) *Decimal32Builder { + b := newDecimalBuilder[decimal.Decimal32](mem, dtype) + b.traits = decimal.Dec32Traits + return b +} + +func NewDecimal64Builder(mem memory.Allocator, dtype *arrow.Decimal64Type) *Decimal64Builder { + b := newDecimalBuilder[decimal.Decimal64](mem, dtype) + b.traits = decimal.Dec64Traits + return b +} + +func NewDecimal128Builder(mem memory.Allocator, dtype *arrow.Decimal128Type) *Decimal128Builder { + b := newDecimalBuilder[decimal.Decimal128](mem, dtype) + b.traits = decimal.Dec128Traits + return &Decimal128Builder{b} +} + +func NewDecimal256Builder(mem memory.Allocator, dtype *arrow.Decimal256Type) *Decimal256Builder { + b := newDecimalBuilder[decimal.Decimal256](mem, dtype) + b.traits = decimal.Dec256Traits + return &Decimal256Builder{b} +} + +var ( + _ arrow.Array = (*Decimal32)(nil) + _ arrow.Array = (*Decimal64)(nil) + _ arrow.Array = (*Decimal128)(nil) + _ arrow.Array = (*Decimal256)(nil) + _ Builder = (*Decimal32Builder)(nil) + _ Builder = (*Decimal64Builder)(nil) + _ Builder = (*Decimal128Builder)(nil) + _ Builder = (*Decimal256Builder)(nil) +) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/dictionary.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/dictionary.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/dictionary.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/dictionary.go index d0a1c4dc..0c23934a 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/dictionary.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/dictionary.go @@ -25,16 +25,17 @@ import ( "sync/atomic" "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/decimal128" - "github.com/apache/arrow/go/v14/arrow/decimal256" - "github.com/apache/arrow/go/v14/arrow/float16" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/hashing" - "github.com/apache/arrow/go/v14/internal/json" - "github.com/apache/arrow/go/v14/internal/utils" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/decimal" + "github.com/apache/arrow-go/v18/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/decimal256" + "github.com/apache/arrow-go/v18/arrow/float16" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/hashing" + "github.com/apache/arrow-go/v18/internal/json" + "github.com/apache/arrow-go/v18/internal/utils" ) // Dictionary represents the type for dictionary-encoded data with a data @@ -392,7 +393,8 @@ func createMemoTable(mem memory.Allocator, dt arrow.DataType) (ret hashing.MemoT ret = hashing.NewFloat32MemoTable(0) case arrow.FLOAT64: ret = hashing.NewFloat64MemoTable(0) - case arrow.BINARY, arrow.FIXED_SIZE_BINARY, arrow.DECIMAL128, arrow.DECIMAL256, arrow.INTERVAL_DAY_TIME, arrow.INTERVAL_MONTH_DAY_NANO: + case arrow.BINARY, arrow.FIXED_SIZE_BINARY, arrow.DECIMAL32, arrow.DECIMAL64, + arrow.DECIMAL128, arrow.DECIMAL256, arrow.INTERVAL_DAY_TIME, arrow.INTERVAL_MONTH_DAY_NANO: ret = hashing.NewBinaryMemoTable(0, 0, NewBinaryBuilder(mem, arrow.BinaryTypes.Binary)) case arrow.STRING: ret = hashing.NewBinaryMemoTable(0, 0, NewBinaryBuilder(mem, arrow.BinaryTypes.String)) @@ -412,6 +414,7 @@ type DictionaryBuilder interface { AppendArray(arrow.Array) error AppendIndices([]int, []bool) ResetFull() + DictionarySize() int } type dictionaryBuilder struct { @@ -622,6 +625,22 @@ func NewDictionaryBuilderWithDict(mem memory.Allocator, dt *arrow.DictionaryType } } return ret + case arrow.DECIMAL32: + ret := &Decimal32DictionaryBuilder{bldr} + if init != nil { + if err = ret.InsertDictValues(init.(*Decimal32)); err != nil { + panic(err) + } + } + return ret + case arrow.DECIMAL64: + ret := &Decimal64DictionaryBuilder{bldr} + if init != nil { + if err = ret.InsertDictValues(init.(*Decimal64)); err != nil { + panic(err) + } + } + return ret case arrow.DECIMAL128: ret := &Decimal128DictionaryBuilder{bldr} if init != nil { @@ -739,7 +758,7 @@ func (b *dictionaryBuilder) UnmarshalJSON(data []byte) error { } if delim, ok := t.(json.Delim); !ok || delim != '[' { - return fmt.Errorf("dictionary builder must upack from json array, found %s", delim) + return fmt.Errorf("dictionary builder must unpack from json array, found %s", delim) } return b.Unmarshal(dec) @@ -905,6 +924,16 @@ func getvalFn(arr arrow.Array) func(i int) interface{} { return func(i int) interface{} { return typedarr.Value(i) } case *String: return func(i int) interface{} { return typedarr.Value(i) } + case *Decimal32: + return func(i int) interface{} { + val := typedarr.Value(i) + return (*(*[arrow.Decimal32SizeBytes]byte)(unsafe.Pointer(&val)))[:] + } + case *Decimal64: + return func(i int) interface{} { + val := typedarr.Value(i) + return (*(*[arrow.Decimal64SizeBytes]byte)(unsafe.Pointer(&val)))[:] + } case *Decimal128: return func(i int) interface{} { val := typedarr.Value(i) @@ -1004,6 +1033,10 @@ func (b *dictionaryBuilder) AppendIndices(indices []int, valid []bool) { } } +func (b *dictionaryBuilder) DictionarySize() int { + return b.memoTable.Size() +} + type NullDictionaryBuilder struct { dictionaryBuilder } @@ -1389,6 +1422,42 @@ func (b *FixedSizeBinaryDictionaryBuilder) InsertDictValues(arr *FixedSizeBinary return } +type Decimal32DictionaryBuilder struct { + dictionaryBuilder +} + +func (b *Decimal32DictionaryBuilder) Append(v decimal.Decimal32) error { + return b.appendValue((*(*[arrow.Decimal32SizeBytes]byte)(unsafe.Pointer(&v)))[:]) +} +func (b *Decimal32DictionaryBuilder) InsertDictValues(arr *Decimal32) (err error) { + data := arrow.Decimal32Traits.CastToBytes(arr.values) + for len(data) > 0 { + if err = b.insertDictValue(data[:arrow.Decimal32SizeBytes]); err != nil { + break + } + data = data[arrow.Decimal32SizeBytes:] + } + return +} + +type Decimal64DictionaryBuilder struct { + dictionaryBuilder +} + +func (b *Decimal64DictionaryBuilder) Append(v decimal.Decimal64) error { + return b.appendValue((*(*[arrow.Decimal64SizeBytes]byte)(unsafe.Pointer(&v)))[:]) +} +func (b *Decimal64DictionaryBuilder) InsertDictValues(arr *Decimal64) (err error) { + data := arrow.Decimal64Traits.CastToBytes(arr.values) + for len(data) > 0 { + if err = b.insertDictValue(data[:arrow.Decimal64SizeBytes]); err != nil { + break + } + data = data[arrow.Decimal64SizeBytes:] + } + return +} + type Decimal128DictionaryBuilder struct { dictionaryBuilder } @@ -1533,7 +1602,7 @@ type DictionaryUnifier interface { // values, an error will be returned instead. The new unified dictionary // is returned. GetResultWithIndexType(indexType arrow.DataType) (arrow.Array, error) - // Release should be called to clean up any allocated scrach memo-table used + // Release should be called to clean up any allocated scratch memo-table used // for building the unified dictionary. Release() } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/diff.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/diff.go similarity index 99% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/diff.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/diff.go index 026a27b9..9320ec98 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/diff.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/diff.go @@ -20,7 +20,7 @@ import ( "fmt" "strings" - "github.com/apache/arrow/go/v14/arrow" + "github.com/apache/arrow-go/v18/arrow" ) // Edit represents one entry in the edit script to compare two arrays. diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/doc.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/doc.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/doc.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/doc.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/encoded.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/encoded.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/encoded.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/encoded.go index bf4a942c..81c375c9 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/encoded.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/encoded.go @@ -23,12 +23,12 @@ import ( "reflect" "sync/atomic" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/encoded" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" - "github.com/apache/arrow/go/v14/internal/utils" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/encoded" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" + "github.com/apache/arrow-go/v18/internal/utils" ) // RunEndEncoded represents an array containing two children: @@ -150,19 +150,19 @@ func (r *RunEndEncoded) LogicalRunEndsArray(mem memory.Allocator) arrow.Array { case *Int16: for _, v := range e.Int16Values()[physOffset : physOffset+physLength] { v -= int16(r.data.offset) - v = int16(utils.MinInt(int(v), r.data.length)) + v = int16(utils.Min(int(v), r.data.length)) bldr.(*Int16Builder).Append(v) } case *Int32: for _, v := range e.Int32Values()[physOffset : physOffset+physLength] { v -= int32(r.data.offset) - v = int32(utils.MinInt(int(v), r.data.length)) + v = int32(utils.Min(int(v), r.data.length)) bldr.(*Int32Builder).Append(v) } case *Int64: for _, v := range e.Int64Values()[physOffset : physOffset+physLength] { v -= int64(r.data.offset) - v = int64(utils.MinInt(int(v), r.data.length)) + v = int64(utils.Min(int(v), r.data.length)) bldr.(*Int64Builder).Append(v) } } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/extension.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/extension.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/extension.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/extension.go index 03e8c173..d1a28350 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/extension.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/extension.go @@ -20,9 +20,9 @@ import ( "fmt" "reflect" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) // ExtensionArray is the interface that needs to be implemented to handle diff --git a/vendor/github.com/apache/arrow-go/v18/arrow/array/extension_builder.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/extension_builder.go new file mode 100644 index 00000000..9442ac01 --- /dev/null +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/extension_builder.go @@ -0,0 +1,25 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package array + +import "github.com/apache/arrow-go/v18/arrow/memory" + +// CustomExtensionBuilder is an interface that custom extension types may implement to provide a custom builder +// instead of the underlying storage type's builder when array.NewBuilder is called with that type. +type CustomExtensionBuilder interface { + NewBuilder(memory.Allocator) Builder +} diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/fixed_size_list.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/fixed_size_list.go similarity index 88% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/fixed_size_list.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/fixed_size_list.go index 62c32138..84036f94 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/fixed_size_list.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/fixed_size_list.go @@ -22,11 +22,11 @@ import ( "strings" "sync/atomic" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) // FixedSizeList represents an immutable sequence of N array values. @@ -162,25 +162,38 @@ func (a *FixedSizeList) MarshalJSON() ([]byte, error) { } type FixedSizeListBuilder struct { - builder - - etype arrow.DataType // data type of the list's elements. - n int32 // number of elements in the fixed-size list. - values Builder // value builder for the list's elements. + baseListBuilder + n int32 // number of elements in the fixed-size list. } // NewFixedSizeListBuilder returns a builder, using the provided memory allocator. // The created list builder will create a list whose elements will be of type etype. func NewFixedSizeListBuilder(mem memory.Allocator, n int32, etype arrow.DataType) *FixedSizeListBuilder { return &FixedSizeListBuilder{ - builder: builder{refCount: 1, mem: mem}, - etype: etype, - n: n, - values: NewBuilder(mem, etype), + baseListBuilder{ + builder: builder{refCount: 1, mem: mem}, + values: NewBuilder(mem, etype), + dt: arrow.FixedSizeListOf(n, etype), + }, + n, + } +} + +// NewFixedSizeListBuilderWithField returns a builder similarly to +// NewFixedSizeListBuilder, but it accepts a child rather than just a datatype +// to ensure nullability context is preserved. +func NewFixedSizeListBuilderWithField(mem memory.Allocator, n int32, field arrow.Field) *FixedSizeListBuilder { + return &FixedSizeListBuilder{ + baseListBuilder{ + builder: builder{refCount: 1, mem: mem}, + values: NewBuilder(mem, field.Type), + dt: arrow.FixedSizeListOfField(n, field), + }, + n, } } -func (b *FixedSizeListBuilder) Type() arrow.DataType { return arrow.FixedSizeListOf(b.n, b.etype) } +func (b *FixedSizeListBuilder) Type() arrow.DataType { return b.dt } // Release decreases the reference count by 1. // When the reference count goes to zero, the memory is freed. @@ -296,7 +309,7 @@ func (b *FixedSizeListBuilder) newData() (data *Data) { defer values.Release() data = NewData( - arrow.FixedSizeListOf(b.n, b.etype), b.length, + b.dt, b.length, []*memory.Buffer{b.nullBitmap}, []arrow.ArrayData{values.Data()}, b.nulls, @@ -336,7 +349,7 @@ func (b *FixedSizeListBuilder) UnmarshalOne(dec *json.Decoder) error { default: return &json.UnmarshalTypeError{ Value: fmt.Sprint(t), - Struct: arrow.FixedSizeListOf(b.n, b.etype).String(), + Struct: b.dt.String(), } } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/fixedsize_binary.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/fixedsize_binary.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/fixedsize_binary.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/fixedsize_binary.go index 5466156d..7049c9c0 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/fixedsize_binary.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/fixedsize_binary.go @@ -22,8 +22,8 @@ import ( "fmt" "strings" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/internal/json" ) // A type which represents an immutable sequence of fixed-length binary strings. diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/fixedsize_binarybuilder.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/fixedsize_binarybuilder.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/fixedsize_binarybuilder.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/fixedsize_binarybuilder.go index ba4b474a..02e72a25 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/fixedsize_binarybuilder.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/fixedsize_binarybuilder.go @@ -23,10 +23,10 @@ import ( "reflect" "sync/atomic" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) // A FixedSizeBinaryBuilder is used to build a FixedSizeBinary array using the Append methods. diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/float16.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/float16.go similarity index 87% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/float16.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/float16.go index de499e26..6b0e820f 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/float16.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/float16.go @@ -20,9 +20,9 @@ import ( "fmt" "strings" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/float16" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/float16" + "github.com/apache/arrow-go/v18/internal/json" ) // A type which represents an immutable sequence of Float16 values. @@ -87,10 +87,20 @@ func (a *Float16) GetOneForMarshal(i int) interface{} { func (a *Float16) MarshalJSON() ([]byte, error) { vals := make([]interface{}, a.Len()) for i, v := range a.values { - if a.IsValid(i) { - vals[i] = v.Float32() - } else { + if !a.IsValid(i) { vals[i] = nil + continue + } + + switch { + case v.IsNaN(): + vals[i] = "NaN" + case v.IsInf() && !v.Signbit(): + vals[i] = "+Inf" + case v.IsInf() && v.Signbit(): + vals[i] = "-Inf" + default: + vals[i] = v.Float32() } } return json.Marshal(vals) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/float16_builder.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/float16_builder.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/float16_builder.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/float16_builder.go index f96ab603..93dbfbc0 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/float16_builder.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/float16_builder.go @@ -23,12 +23,12 @@ import ( "strconv" "sync/atomic" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/float16" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/float16" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) type Float16Builder struct { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/interval.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/interval.go similarity index 99% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/interval.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/interval.go index ff059c92..324647e8 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/interval.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/interval.go @@ -23,11 +23,11 @@ import ( "strings" "sync/atomic" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) func NewIntervalData(data arrow.ArrayData) arrow.Array { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/json_reader.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/json_reader.go similarity index 96% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/json_reader.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/json_reader.go index e09717c4..7835b280 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/json_reader.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/json_reader.go @@ -22,10 +22,10 @@ import ( "io" "sync/atomic" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) type Option func(config) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/list.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/list.go similarity index 90% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/list.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/list.go index d8d8b8c7..e80bc896 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/list.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/list.go @@ -19,15 +19,14 @@ package array import ( "bytes" "fmt" - "math" "strings" "sync/atomic" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) type ListLike interface { @@ -926,7 +925,7 @@ func (a *LargeListView) Release() { a.values.Release() } -// Acessors for offsets and sizes to make ListView and LargeListView validation generic. +// Accessors for offsets and sizes to make ListView and LargeListView validation generic. type offsetsAndSizes interface { offsetAt(slot int64) int64 sizeAt(slot int64) int64 @@ -1411,118 +1410,19 @@ func (b *baseListViewBuilder) UnmarshalJSON(data []byte) error { return b.Unmarshal(dec) } -// Pre-conditions: -// -// input.DataType() is ListViewType -// input.Len() > 0 && input.NullN() != input.Len() -func minListViewOffset32(input arrow.ArrayData) int32 { - var bitmap []byte - if input.Buffers()[0] != nil { - bitmap = input.Buffers()[0].Bytes() - } - offsets := arrow.Int32Traits.CastFromBytes(input.Buffers()[1].Bytes())[input.Offset():] - sizes := arrow.Int32Traits.CastFromBytes(input.Buffers()[2].Bytes())[input.Offset():] - - isNull := func(i int) bool { - return bitmap != nil && bitutil.BitIsNotSet(bitmap, input.Offset()+i) - } - - // It's very likely that the first non-null non-empty list-view starts at - // offset 0 of the child array. - i := 0 - for i < input.Len() && (isNull(i) || sizes[i] == 0) { - i += 1 - } - if i >= input.Len() { - return 0 - } - minOffset := offsets[i] - if minOffset == 0 { - // early exit: offset 0 found already - return 0 - } - - // Slow path: scan the buffers entirely. - i += 1 - for ; i < input.Len(); i += 1 { - if isNull(i) { - continue - } - offset := offsets[i] - if offset < minOffset && sizes[i] > 0 { - minOffset = offset - } - } - return minOffset -} - -// Find the maximum offset+size in a LIST_VIEW array. +// Find the minimum offset+size in a LIST_VIEW/LARGE_LIST_VIEW array. // // Pre-conditions: // -// input.DataType() is ListViewType -// input.Len() > 0 && input.NullN() != input.Len() -func maxListViewOffset32(input arrow.ArrayData) int { - inputOffset := input.Offset() - var bitmap []byte - if input.Buffers()[0] != nil { - bitmap = input.Buffers()[0].Bytes() - } - offsets := arrow.Int32Traits.CastFromBytes(input.Buffers()[1].Bytes())[inputOffset:] - sizes := arrow.Int32Traits.CastFromBytes(input.Buffers()[2].Bytes())[inputOffset:] - - isNull := func(i int) bool { - return bitmap != nil && bitutil.BitIsNotSet(bitmap, inputOffset+i) - } - - i := input.Len() - 1 // safe because input.Len() > 0 - for i != 0 && (isNull(i) || sizes[i] == 0) { - i -= 1 - } - offset := offsets[i] - size := sizes[i] - if i == 0 { - if isNull(i) || sizes[i] == 0 { - return 0 - } else { - return int(offset + size) - } - } - - values := input.Children()[0] - maxEnd := int(offsets[i] + sizes[i]) - if maxEnd == values.Len() { - // Early-exit: maximum possible view-end found already. - return maxEnd - } - - // Slow path: scan the buffers entirely. - for ; i >= 0; i -= 1 { - offset := offsets[i] - size := sizes[i] - if size > 0 && !isNull(i) { - if int(offset+size) > maxEnd { - maxEnd = int(offset + size) - if maxEnd == values.Len() { - return maxEnd - } - } - } - } - return maxEnd -} - -// Pre-conditions: -// -// input.DataType() is LargeListViewType +// input.DataType() is ListViewType if Offset=int32 or LargeListViewType if Offset=int64 // input.Len() > 0 && input.NullN() != input.Len() -func minLargeListViewOffset64(input arrow.ArrayData) int64 { +func minListViewOffset[Offset int32 | int64](input arrow.ArrayData) Offset { var bitmap []byte if input.Buffers()[0] != nil { bitmap = input.Buffers()[0].Bytes() } - offsets := arrow.Int64Traits.CastFromBytes(input.Buffers()[1].Bytes())[input.Offset():] - sizes := arrow.Int64Traits.CastFromBytes(input.Buffers()[2].Bytes())[input.Offset():] + offsets := arrow.GetData[Offset](input.Buffers()[1].Bytes())[input.Offset():] + sizes := arrow.GetData[Offset](input.Buffers()[2].Bytes())[input.Offset():] isNull := func(i int) bool { return bitmap != nil && bitutil.BitIsNotSet(bitmap, input.Offset()+i) @@ -1557,27 +1457,25 @@ func minLargeListViewOffset64(input arrow.ArrayData) int64 { return minOffset } -// Find the maximum offset+size in a LARGE_LIST_VIEW array. +// Find the maximum offset+size in a LIST_VIEW/LARGE_LIST_VIEW array. // // Pre-conditions: // -// input.DataType() is LargeListViewType +// input.DataType() is ListViewType if Offset=int32 or LargeListViewType if Offset=int64 // input.Len() > 0 && input.NullN() != input.Len() -func maxLargeListViewOffset64(input arrow.ArrayData) int64 { +func maxListViewEnd[Offset int32 | int64](input arrow.ArrayData) Offset { inputOffset := input.Offset() var bitmap []byte if input.Buffers()[0] != nil { bitmap = input.Buffers()[0].Bytes() } - offsets := arrow.Int64Traits.CastFromBytes(input.Buffers()[1].Bytes())[inputOffset:] - sizes := arrow.Int64Traits.CastFromBytes(input.Buffers()[2].Bytes())[inputOffset:] + offsets := arrow.GetData[Offset](input.Buffers()[1].Bytes())[inputOffset:] + sizes := arrow.GetData[Offset](input.Buffers()[2].Bytes())[inputOffset:] isNull := func(i int) bool { return bitmap != nil && bitutil.BitIsNotSet(bitmap, inputOffset+i) } - // It's very likely that the first non-null non-empty list-view starts at - // offset zero, so we check that first and potentially early-return a 0. i := input.Len() - 1 // safe because input.Len() > 0 for i != 0 && (isNull(i) || sizes[i] == 0) { i -= 1 @@ -1592,15 +1490,9 @@ func maxLargeListViewOffset64(input arrow.ArrayData) int64 { } } - if offset > math.MaxInt64-size { - // Early-exit: 64-bit overflow detected. This is not possible on a - // valid list-view, but we return the maximum possible value to - // avoid undefined behavior. - return math.MaxInt64 - } values := input.Children()[0] maxEnd := offsets[i] + sizes[i] - if maxEnd == int64(values.Len()) { + if maxEnd == Offset(values.Len()) { // Early-exit: maximum possible view-end found already. return maxEnd } @@ -1611,14 +1503,8 @@ func maxLargeListViewOffset64(input arrow.ArrayData) int64 { size := sizes[i] if size > 0 && !isNull(i) { if offset+size > maxEnd { - if offset > math.MaxInt64-size { - // 64-bit overflow detected. This is not possible on a valid list-view, - // but we saturate maxEnd to the maximum possible value to avoid - // undefined behavior. - return math.MaxInt64 - } maxEnd = offset + size - if maxEnd == int64(values.Len()) { + if maxEnd == Offset(values.Len()) { return maxEnd } } @@ -1634,11 +1520,11 @@ func rangeOfValuesUsed(input arrow.ArrayData) (int, int) { var minOffset, maxEnd int switch input.DataType().(type) { case *arrow.ListViewType: - minOffset = int(minListViewOffset32(input)) - maxEnd = maxListViewOffset32(input) + minOffset = int(minListViewOffset[int32](input)) + maxEnd = int(maxListViewEnd[int32](input)) case *arrow.LargeListViewType: - minOffset = int(minLargeListViewOffset64(input)) - maxEnd = int(maxLargeListViewOffset64(input)) + minOffset = int(minListViewOffset[int64](input)) + maxEnd = int(maxListViewEnd[int64](input)) case *arrow.ListType: offsets := arrow.Int32Traits.CastFromBytes(input.Buffers()[1].Bytes())[input.Offset():] minOffset = int(offsets[0]) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/map.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/map.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/map.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/map.go index 9945a90c..5609ccd0 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/map.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/map.go @@ -20,9 +20,9 @@ import ( "bytes" "fmt" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) // Map represents an immutable sequence of Key/Value structs. It is a diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/null.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/null.go similarity index 96% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/null.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/null.go index 150a1030..76e56a49 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/null.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/null.go @@ -23,10 +23,10 @@ import ( "strings" "sync/atomic" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) // Null represents an immutable, degenerate array with no physical storage. diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/numeric.gen.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/numeric.gen.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/numeric.gen.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/numeric.gen.go index a3e11015..7e94fe5c 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/numeric.gen.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/numeric.gen.go @@ -20,11 +20,12 @@ package array import ( "fmt" + "math" "strconv" "strings" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/internal/json" ) // A type which represents an immutable sequence of int64 values. @@ -100,11 +101,13 @@ func (a *Int64) GetOneForMarshal(i int) interface{} { func (a *Int64) MarshalJSON() ([]byte, error) { vals := make([]interface{}, a.Len()) for i := 0; i < a.Len(); i++ { + if a.IsValid(i) { vals[i] = a.values[i] } else { vals[i] = nil } + } return json.Marshal(vals) @@ -195,11 +198,13 @@ func (a *Uint64) GetOneForMarshal(i int) interface{} { func (a *Uint64) MarshalJSON() ([]byte, error) { vals := make([]interface{}, a.Len()) for i := 0; i < a.Len(); i++ { + if a.IsValid(i) { vals[i] = a.values[i] } else { vals[i] = nil } + } return json.Marshal(vals) @@ -290,11 +295,23 @@ func (a *Float64) GetOneForMarshal(i int) interface{} { func (a *Float64) MarshalJSON() ([]byte, error) { vals := make([]interface{}, a.Len()) for i := 0; i < a.Len(); i++ { - if a.IsValid(i) { - vals[i] = a.values[i] - } else { + if !a.IsValid(i) { vals[i] = nil + continue } + + f := a.Value(i) + switch { + case math.IsNaN(f): + vals[i] = "NaN" + case math.IsInf(f, 1): + vals[i] = "+Inf" + case math.IsInf(f, -1): + vals[i] = "-Inf" + default: + vals[i] = f + } + } return json.Marshal(vals) @@ -385,11 +402,13 @@ func (a *Int32) GetOneForMarshal(i int) interface{} { func (a *Int32) MarshalJSON() ([]byte, error) { vals := make([]interface{}, a.Len()) for i := 0; i < a.Len(); i++ { + if a.IsValid(i) { vals[i] = a.values[i] } else { vals[i] = nil } + } return json.Marshal(vals) @@ -480,11 +499,13 @@ func (a *Uint32) GetOneForMarshal(i int) interface{} { func (a *Uint32) MarshalJSON() ([]byte, error) { vals := make([]interface{}, a.Len()) for i := 0; i < a.Len(); i++ { + if a.IsValid(i) { vals[i] = a.values[i] } else { vals[i] = nil } + } return json.Marshal(vals) @@ -575,11 +596,21 @@ func (a *Float32) GetOneForMarshal(i int) interface{} { func (a *Float32) MarshalJSON() ([]byte, error) { vals := make([]interface{}, a.Len()) for i := 0; i < a.Len(); i++ { - if a.IsValid(i) { - vals[i] = a.values[i] - } else { + if !a.IsValid(i) { vals[i] = nil + continue } + + f := a.Value(i) + v := strconv.FormatFloat(float64(f), 'g', -1, 32) + + switch v { + case "NaN", "+Inf", "-Inf": + vals[i] = v + default: + vals[i] = f + } + } return json.Marshal(vals) @@ -670,11 +701,13 @@ func (a *Int16) GetOneForMarshal(i int) interface{} { func (a *Int16) MarshalJSON() ([]byte, error) { vals := make([]interface{}, a.Len()) for i := 0; i < a.Len(); i++ { + if a.IsValid(i) { vals[i] = a.values[i] } else { vals[i] = nil } + } return json.Marshal(vals) @@ -765,11 +798,13 @@ func (a *Uint16) GetOneForMarshal(i int) interface{} { func (a *Uint16) MarshalJSON() ([]byte, error) { vals := make([]interface{}, a.Len()) for i := 0; i < a.Len(); i++ { + if a.IsValid(i) { vals[i] = a.values[i] } else { vals[i] = nil } + } return json.Marshal(vals) @@ -860,11 +895,13 @@ func (a *Int8) GetOneForMarshal(i int) interface{} { func (a *Int8) MarshalJSON() ([]byte, error) { vals := make([]interface{}, a.Len()) for i := 0; i < a.Len(); i++ { + if a.IsValid(i) { vals[i] = float64(a.values[i]) // prevent uint8 from being seen as binary data } else { vals[i] = nil } + } return json.Marshal(vals) @@ -955,11 +992,13 @@ func (a *Uint8) GetOneForMarshal(i int) interface{} { func (a *Uint8) MarshalJSON() ([]byte, error) { vals := make([]interface{}, a.Len()) for i := 0; i < a.Len(); i++ { + if a.IsValid(i) { vals[i] = float64(a.values[i]) // prevent uint8 from being seen as binary data } else { vals[i] = nil } + } return json.Marshal(vals) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/numeric.gen.go.tmpl b/vendor/github.com/apache/arrow-go/v18/arrow/array/numeric.gen.go.tmpl similarity index 87% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/numeric.gen.go.tmpl rename to vendor/github.com/apache/arrow-go/v18/arrow/array/numeric.gen.go.tmpl index 34d17fbf..df07f205 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/numeric.gen.go.tmpl +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/numeric.gen.go.tmpl @@ -21,8 +21,8 @@ import ( "strings" "time" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/internal/json" ) {{range .In}} @@ -133,11 +133,45 @@ func (a *{{.Name}}) MarshalJSON() ([]byte, error) { {{else -}} vals := make([]interface{}, a.Len()) for i := 0; i < a.Len(); i++ { + {{if (eq .Name "Float32") -}} + if !a.IsValid(i) { + vals[i] = nil + continue + } + + f := a.Value(i) + v := strconv.FormatFloat(float64(f), 'g', -1, 32) + + switch v { + case "NaN", "+Inf", "-Inf": + vals[i] = v + default: + vals[i] = f + } + {{else if (eq .Name "Float64") -}} + if !a.IsValid(i) { + vals[i] = nil + continue + } + + f := a.Value(i) + switch { + case math.IsNaN(f): + vals[i] = "NaN" + case math.IsInf(f, 1): + vals[i] = "+Inf" + case math.IsInf(f, -1): + vals[i] = "-Inf" + default: + vals[i] = f + } + {{else}} if a.IsValid(i) { {{ if (eq .Size "1") }}vals[i] = float64(a.values[i]) // prevent uint8 from being seen as binary data{{ else }}vals[i] = a.values[i]{{ end }} } else { vals[i] = nil } + {{end}} } {{end}} return json.Marshal(vals) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/numericbuilder.gen.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/numericbuilder.gen.go similarity index 99% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/numericbuilder.gen.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/numericbuilder.gen.go index 7f01180f..1618dba0 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/numericbuilder.gen.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/numericbuilder.gen.go @@ -27,11 +27,11 @@ import ( "sync/atomic" "time" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) type Int64Builder struct { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/numericbuilder.gen.go.tmpl b/vendor/github.com/apache/arrow-go/v18/arrow/array/numericbuilder.gen.go.tmpl similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/numericbuilder.gen.go.tmpl rename to vendor/github.com/apache/arrow-go/v18/arrow/array/numericbuilder.gen.go.tmpl index cf663c03..e84e095c 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/numericbuilder.gen.go.tmpl +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/numericbuilder.gen.go.tmpl @@ -17,11 +17,11 @@ package array import ( - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) {{range .In}} diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/numericbuilder.gen_test.go.tmpl b/vendor/github.com/apache/arrow-go/v18/arrow/array/numericbuilder.gen_test.go.tmpl similarity index 90% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/numericbuilder.gen_test.go.tmpl rename to vendor/github.com/apache/arrow-go/v18/arrow/array/numericbuilder.gen_test.go.tmpl index bc8c9933..a5d58f48 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/numericbuilder.gen_test.go.tmpl +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/numericbuilder.gen_test.go.tmpl @@ -19,9 +19,9 @@ package array_test import ( "testing" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/memory" "github.com/stretchr/testify/assert" ) @@ -271,6 +271,29 @@ func Test{{.Name}}Builder_Resize(t *testing.T) { ab.Resize(32) assert.Equal(t, 5, ab.Len()) } + +func Test{{.Name}}BuilderUnmarshalJSON(t *testing.T) { + mem := memory.NewCheckedAllocator(memory.NewGoAllocator()) + defer mem.AssertSize(t, 0) + + bldr := array.New{{.Name}}Builder(mem) + defer bldr.Release() + + jsonstr := `[0, 1, "+Inf", 2, 3, "NaN", "NaN", 4, 5, "-Inf"]` + + err := bldr.UnmarshalJSON([]byte(jsonstr)) + assert.NoError(t, err) + + arr := bldr.New{{.Name}}Array() + defer arr.Release() + + assert.NotNil(t, arr) + + assert.False(t, math.IsInf(float64(arr.Value(0)), 0), arr.Value(0)) + assert.True(t, math.IsInf(float64(arr.Value(2)), 1), arr.Value(2)) + assert.True(t, math.IsNaN(float64(arr.Value(5))), arr.Value(5)) +} + {{end}} diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/record.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/record.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/record.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/record.go index 0b0fe4c3..b8041e27 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/record.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/record.go @@ -22,10 +22,10 @@ import ( "strings" "sync/atomic" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) // RecordReader reads a stream of records. @@ -50,7 +50,7 @@ type simpleRecords struct { } // NewRecordReader returns a simple iterator over the given slice of records. -func NewRecordReader(schema *arrow.Schema, recs []arrow.Record) (*simpleRecords, error) { +func NewRecordReader(schema *arrow.Schema, recs []arrow.Record) (RecordReader, error) { rs := &simpleRecords{ refCount: 1, schema: schema, @@ -124,7 +124,7 @@ type simpleRecord struct { // // NewRecord panics if the columns and schema are inconsistent. // NewRecord panics if rows is larger than the height of the columns. -func NewRecord(schema *arrow.Schema, cols []arrow.Array, nrows int64) *simpleRecord { +func NewRecord(schema *arrow.Schema, cols []arrow.Array, nrows int64) arrow.Record { rec := &simpleRecord{ refCount: 1, schema: schema, @@ -185,7 +185,7 @@ func (rec *simpleRecord) validate() error { return nil } - if len(rec.arrs) != len(rec.schema.Fields()) { + if len(rec.arrs) != rec.schema.NumFields() { return fmt.Errorf("arrow/array: number of columns/fields mismatch") } @@ -285,11 +285,11 @@ func NewRecordBuilder(mem memory.Allocator, schema *arrow.Schema) *RecordBuilder refCount: 1, mem: mem, schema: schema, - fields: make([]Builder, len(schema.Fields())), + fields: make([]Builder, schema.NumFields()), } - for i, f := range schema.Fields() { - b.fields[i] = NewBuilder(b.mem, f.Type) + for i := 0; i < schema.NumFields(); i++ { + b.fields[i] = NewBuilder(b.mem, schema.Field(i).Type) } return b @@ -397,8 +397,8 @@ func (b *RecordBuilder) UnmarshalJSON(data []byte) error { } } - for i, f := range b.schema.Fields() { - if !keylist[f.Name] { + for i := 0; i < b.schema.NumFields(); i++ { + if !keylist[b.schema.Field(i).Name] { b.fields[i].AppendNull() } } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/string.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/string.go similarity index 73% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/string.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/string.go index 86e27c97..d3de86b5 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/string.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/string.go @@ -23,11 +23,17 @@ import ( "strings" "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) +type StringLike interface { + arrow.Array + Value(int) string + ValueLen(int) int +} + // String represents an immutable sequence of variable-length UTF-8 strings. type String struct { array @@ -220,6 +226,14 @@ func (a *LargeString) ValueOffset64(i int) int64 { return a.ValueOffset(i) } +func (a *LargeString) ValueLen(i int) int { + if i < 0 || i >= a.array.data.length { + panic("arrow/array: index out of range") + } + beg := a.array.data.offset + i + return int(a.offsets[beg+1] - a.offsets[beg]) +} + func (a *LargeString) ValueOffsets() []int64 { beg := a.array.data.offset end := beg + a.array.data.length + 1 @@ -310,6 +324,113 @@ func arrayEqualLargeString(left, right *LargeString) bool { return true } +type StringView struct { + array + values []arrow.ViewHeader + dataBuffers []*memory.Buffer +} + +func NewStringViewData(data arrow.ArrayData) *StringView { + a := &StringView{} + a.refCount = 1 + a.setData(data.(*Data)) + return a +} + +// Reset resets the String with a different set of Data. +func (a *StringView) Reset(data arrow.ArrayData) { + a.setData(data.(*Data)) +} + +func (a *StringView) setData(data *Data) { + if len(data.buffers) < 2 { + panic("len(data.buffers) < 2") + } + a.array.setData(data) + + if valueData := data.buffers[1]; valueData != nil { + a.values = arrow.ViewHeaderTraits.CastFromBytes(valueData.Bytes()) + } + + a.dataBuffers = data.buffers[2:] +} + +func (a *StringView) ValueHeader(i int) *arrow.ViewHeader { + if i < 0 || i >= a.array.data.length { + panic("arrow/array: index out of range") + } + return &a.values[a.array.data.offset+i] +} + +func (a *StringView) Value(i int) string { + s := a.ValueHeader(i) + if s.IsInline() { + return s.InlineString() + } + start := s.BufferOffset() + buf := a.dataBuffers[s.BufferIndex()] + value := buf.Bytes()[start : start+int32(s.Len())] + return *(*string)(unsafe.Pointer(&value)) +} + +func (a *StringView) ValueLen(i int) int { + s := a.ValueHeader(i) + return s.Len() +} + +func (a *StringView) String() string { + var o strings.Builder + o.WriteString("[") + for i := 0; i < a.Len(); i++ { + if i > 0 { + o.WriteString(" ") + } + switch { + case a.IsNull(i): + o.WriteString(NullValueStr) + default: + fmt.Fprintf(&o, "%q", a.Value(i)) + } + } + o.WriteString("]") + return o.String() +} + +func (a *StringView) ValueStr(i int) string { + if a.IsNull(i) { + return NullValueStr + } + return a.Value(i) +} + +func (a *StringView) GetOneForMarshal(i int) interface{} { + if a.IsNull(i) { + return nil + } + return a.Value(i) +} + +func (a *StringView) MarshalJSON() ([]byte, error) { + vals := make([]interface{}, a.Len()) + for i := 0; i < a.Len(); i++ { + vals[i] = a.GetOneForMarshal(i) + } + return json.Marshal(vals) +} + +func arrayEqualStringView(left, right *StringView) bool { + leftBufs, rightBufs := left.dataBuffers, right.dataBuffers + for i := 0; i < left.Len(); i++ { + if left.IsNull(i) { + continue + } + if !left.ValueHeader(i).Equals(leftBufs, right.ValueHeader(i), rightBufs) { + return false + } + } + return true +} + // A StringBuilder is used to build a String array using the Append methods. type StringBuilder struct { *BinaryBuilder @@ -344,10 +465,6 @@ func (b *StringBuilder) Value(i int) string { return string(b.BinaryBuilder.Value(i)) } -// func (b *StringBuilder) UnsafeAppend(v string) { -// b.BinaryBuilder.UnsafeAppend([]byte(v)) -// } - // NewArray creates a String array from the memory buffers used by the builder and resets the StringBuilder // so it can be used to build a new array. func (b *StringBuilder) NewArray() arrow.Array { @@ -441,10 +558,6 @@ func (b *LargeStringBuilder) Value(i int) string { return string(b.BinaryBuilder.Value(i)) } -// func (b *LargeStringBuilder) UnsafeAppend(v string) { -// b.BinaryBuilder.UnsafeAppend([]byte(v)) -// } - // NewArray creates a String array from the memory buffers used by the builder and resets the StringBuilder // so it can be used to build a new array. func (b *LargeStringBuilder) NewArray() arrow.Array { @@ -504,9 +617,87 @@ func (b *LargeStringBuilder) UnmarshalJSON(data []byte) error { return b.Unmarshal(dec) } +type StringViewBuilder struct { + *BinaryViewBuilder +} + +func NewStringViewBuilder(mem memory.Allocator) *StringViewBuilder { + bldr := &StringViewBuilder{ + BinaryViewBuilder: NewBinaryViewBuilder(mem), + } + bldr.dtype = arrow.BinaryTypes.StringView + return bldr +} + +func (b *StringViewBuilder) Append(v string) { + b.BinaryViewBuilder.AppendString(v) +} + +func (b *StringViewBuilder) AppendValues(v []string, valid []bool) { + b.BinaryViewBuilder.AppendStringValues(v, valid) +} + +func (b *StringViewBuilder) UnmarshalOne(dec *json.Decoder) error { + t, err := dec.Token() + if err != nil { + return err + } + + switch v := t.(type) { + case string: + b.Append(v) + case []byte: + b.BinaryViewBuilder.Append(v) + case nil: + b.AppendNull() + default: + return &json.UnmarshalTypeError{ + Value: fmt.Sprint(t), + Type: reflect.TypeOf([]byte{}), + Offset: dec.InputOffset(), + } + } + return nil +} + +func (b *StringViewBuilder) Unmarshal(dec *json.Decoder) error { + for dec.More() { + if err := b.UnmarshalOne(dec); err != nil { + return err + } + } + return nil +} + +func (b *StringViewBuilder) UnmarshalJSON(data []byte) error { + dec := json.NewDecoder(bytes.NewReader(data)) + t, err := dec.Token() + if err != nil { + return err + } + + if delim, ok := t.(json.Delim); !ok || delim != '[' { + return fmt.Errorf("binary view builder must unpack from json array, found %s", delim) + } + + return b.Unmarshal(dec) +} + +func (b *StringViewBuilder) NewArray() arrow.Array { + return b.NewStringViewArray() +} + +func (b *StringViewBuilder) NewStringViewArray() (a *StringView) { + data := b.newData() + a = NewStringViewData(data) + data.Release() + return +} + type StringLikeBuilder interface { Builder Append(string) + AppendValues([]string, []bool) UnsafeAppend([]byte) ReserveData(int) } @@ -514,8 +705,14 @@ type StringLikeBuilder interface { var ( _ arrow.Array = (*String)(nil) _ arrow.Array = (*LargeString)(nil) + _ arrow.Array = (*StringView)(nil) _ Builder = (*StringBuilder)(nil) _ Builder = (*LargeStringBuilder)(nil) + _ Builder = (*StringViewBuilder)(nil) _ StringLikeBuilder = (*StringBuilder)(nil) _ StringLikeBuilder = (*LargeStringBuilder)(nil) + _ StringLikeBuilder = (*StringViewBuilder)(nil) + _ StringLike = (*String)(nil) + _ StringLike = (*LargeString)(nil) + _ StringLike = (*StringView)(nil) ) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/struct.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/struct.go similarity index 88% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/struct.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/struct.go index 248a25bf..7f65f8d2 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/struct.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/struct.go @@ -23,11 +23,11 @@ import ( "strings" "sync/atomic" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) // Struct represents an ordered sequence of relative types. @@ -43,6 +43,40 @@ func NewStructArray(cols []arrow.Array, names []string) (*Struct, error) { return NewStructArrayWithNulls(cols, names, nil, 0, 0) } +// NewStructArrayWithFields builds a new Struct Array using the passed columns +// and provided fields. As opposed to NewStructArray, this allows you to provide +// the full fields to utilize for the struct column instead of just the names. +func NewStructArrayWithFields(cols []arrow.Array, fields []arrow.Field) (*Struct, error) { + if len(cols) != len(fields) { + return nil, fmt.Errorf("%w: mismatching number of fields and child arrays", arrow.ErrInvalid) + } + if len(cols) == 0 { + return nil, fmt.Errorf("%w: can't infer struct array length with 0 child arrays", arrow.ErrInvalid) + } + + length := cols[0].Len() + children := make([]arrow.ArrayData, len(cols)) + for i, c := range cols { + if length != c.Len() { + return nil, fmt.Errorf("%w: mismatching child array lengths", arrow.ErrInvalid) + } + if !arrow.TypeEqual(fields[i].Type, c.DataType()) { + return nil, fmt.Errorf("%w: mismatching data type for child #%d, field says '%s', got '%s'", + arrow.ErrInvalid, i, fields[i].Type, c.DataType()) + } + if !fields[i].Nullable && c.NullN() > 0 { + return nil, fmt.Errorf("%w: field says not-nullable, child #%d has nulls", + arrow.ErrInvalid, i) + } + + children[i] = c.Data() + } + + data := NewData(arrow.StructOf(fields...), length, []*memory.Buffer{nil}, children, 0, 0) + defer data.Release() + return NewStructData(data), nil +} + // NewStructArrayWithNulls is like NewStructArray as a convenience function, // but also takes in a null bitmap, the number of nulls, and an optional offset // to use for creating the Struct Array. @@ -224,7 +258,7 @@ func NewStructBuilder(mem memory.Allocator, dtype *arrow.StructType) *StructBuil b := &StructBuilder{ builder: builder{refCount: 1, mem: mem}, dtype: dtype, - fields: make([]Builder, len(dtype.Fields())), + fields: make([]Builder, dtype.NumFields()), } for i, f := range dtype.Fields() { b.fields[i] = NewBuilder(b.mem, f.Type) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/table.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/table.go similarity index 96% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/table.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/table.go index 6456992e..95ac67f2 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/table.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/table.go @@ -23,8 +23,8 @@ import ( "strings" "sync/atomic" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/internal/debug" ) // NewColumnSlice returns a new zero-copy slice of the column with the indicated @@ -99,7 +99,7 @@ type simpleTable struct { // // NewTable panics if the columns and schema are inconsistent. // NewTable panics if rows is larger than the height of the columns. -func NewTable(schema *arrow.Schema, cols []arrow.Column, rows int64) *simpleTable { +func NewTable(schema *arrow.Schema, cols []arrow.Column, rows int64) arrow.Table { tbl := simpleTable{ refCount: 1, rows: rows, @@ -136,12 +136,12 @@ func NewTable(schema *arrow.Schema, cols []arrow.Column, rows int64) *simpleTabl // - len(schema.Fields) != len(data) // - the total length of each column's array slice (ie: number of rows // in the column) aren't the same for all columns. -func NewTableFromSlice(schema *arrow.Schema, data [][]arrow.Array) *simpleTable { - if len(data) != len(schema.Fields()) { +func NewTableFromSlice(schema *arrow.Schema, data [][]arrow.Array) arrow.Table { + if len(data) != schema.NumFields() { panic("array/table: mismatch in number of columns and data for creating a table") } - cols := make([]arrow.Column, len(schema.Fields())) + cols := make([]arrow.Column, schema.NumFields()) for i, arrs := range data { field := schema.Field(i) chunked := arrow.NewChunked(field.Type, arrs) @@ -175,9 +175,9 @@ func NewTableFromSlice(schema *arrow.Schema, data [][]arrow.Array) *simpleTable // NewTableFromRecords returns a new basic, non-lazy in-memory table. // // NewTableFromRecords panics if the records and schema are inconsistent. -func NewTableFromRecords(schema *arrow.Schema, recs []arrow.Record) *simpleTable { +func NewTableFromRecords(schema *arrow.Schema, recs []arrow.Record) arrow.Table { arrs := make([]arrow.Array, len(recs)) - cols := make([]arrow.Column, len(schema.Fields())) + cols := make([]arrow.Column, schema.NumFields()) defer func(cols []arrow.Column) { for i := range cols { @@ -224,7 +224,7 @@ func (tbl *simpleTable) NumCols() int64 { return int64(len(tbl.cols) func (tbl *simpleTable) Column(i int) *arrow.Column { return &tbl.cols[i] } func (tbl *simpleTable) validate() { - if len(tbl.cols) != len(tbl.schema.Fields()) { + if len(tbl.cols) != tbl.schema.NumFields() { panic(errors.New("arrow/array: table schema mismatch")) } for i, col := range tbl.cols { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/timestamp.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/timestamp.go similarity index 94% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/timestamp.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/timestamp.go index 2928b1fc..37359db1 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/timestamp.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/timestamp.go @@ -24,11 +24,11 @@ import ( "sync/atomic" "time" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/json" ) // Timestamp represents an immutable sequence of arrow.Timestamp values. @@ -91,16 +91,15 @@ func (a *Timestamp) ValueStr(i int) string { return NullValueStr } - dt := a.DataType().(*arrow.TimestampType) - z, _ := dt.GetZone() - return a.values[i].ToTime(dt.Unit).In(z).Format("2006-01-02 15:04:05.999999999Z0700") + toTime, _ := a.DataType().(*arrow.TimestampType).GetToTimeFunc() + return toTime(a.values[i]).Format("2006-01-02 15:04:05.999999999Z0700") } func (a *Timestamp) GetOneForMarshal(i int) interface{} { - if a.IsNull(i) { - return nil + if val := a.ValueStr(i); val != NullValueStr { + return val } - return a.values[i].ToTime(a.DataType().(*arrow.TimestampType).Unit).Format("2006-01-02 15:04:05.999999999") + return nil } func (a *Timestamp) MarshalJSON() ([]byte, error) { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/union.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/union.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/union.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/union.go index 869355ac..6f3a9a6e 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/union.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/union.go @@ -25,12 +25,12 @@ import ( "strings" "sync/atomic" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/bitutils" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/bitutils" + "github.com/apache/arrow-go/v18/internal/json" ) // Union is a convenience interface to encompass both Sparse and Dense @@ -69,7 +69,7 @@ type Union interface { // or arrow.DenseMode. Mode() arrow.UnionMode // Field returns the requested child array for this union. Returns nil if a - // non-existent position is passed in. + // nonexistent position is passed in. // // The appropriate child for an index can be retrieved with Field(ChildID(index)) Field(pos int) arrow.Array @@ -896,7 +896,7 @@ func NewEmptySparseUnionBuilder(mem memory.Allocator) *SparseUnionBuilder { // children and type codes. Builders will be constructed for each child // using the fields in typ func NewSparseUnionBuilder(mem memory.Allocator, typ *arrow.SparseUnionType) *SparseUnionBuilder { - children := make([]Builder, len(typ.Fields())) + children := make([]Builder, typ.NumFields()) for i, f := range typ.Fields() { children[i] = NewBuilder(mem, f.Type) defer children[i].Release() @@ -980,7 +980,7 @@ func (b *SparseUnionBuilder) AppendEmptyValues(n int) { // // After appending to the corresponding child builder, all other child // builders should have a null or empty value appended to them (although -// this is not enfoced and any value is theoretically allowed and will be +// this is not enforced and any value is theoretically allowed and will be // ignored). func (b *SparseUnionBuilder) Append(nextType arrow.UnionTypeCode) { b.typesBuilder.AppendValue(nextType) @@ -1129,7 +1129,7 @@ func NewEmptyDenseUnionBuilder(mem memory.Allocator) *DenseUnionBuilder { // children and type codes. Builders will be constructed for each child // using the fields in typ func NewDenseUnionBuilder(mem memory.Allocator, typ *arrow.DenseUnionType) *DenseUnionBuilder { - children := make([]Builder, 0, len(typ.Fields())) + children := make([]Builder, 0, typ.NumFields()) defer func() { for _, child := range children { child.Release() diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/util.go b/vendor/github.com/apache/arrow-go/v18/arrow/array/util.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/util.go rename to vendor/github.com/apache/arrow-go/v18/arrow/array/util.go index 54d15a80..e21290f1 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/util.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/array/util.go @@ -22,11 +22,11 @@ import ( "io" "strings" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/hashing" - "github.com/apache/arrow/go/v14/internal/json" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/hashing" + "github.com/apache/arrow-go/v18/internal/json" ) func min(a, b int) int { @@ -428,7 +428,7 @@ func (n *nullArrayFactory) create() *Data { } if nf, ok := dt.(arrow.NestedType); ok { - childData = make([]arrow.ArrayData, len(nf.Fields())) + childData = make([]arrow.ArrayData, nf.NumFields()) } switch dt := dt.(type) { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/arrio/arrio.go b/vendor/github.com/apache/arrow-go/v18/arrow/arrio/arrio.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/arrio/arrio.go rename to vendor/github.com/apache/arrow-go/v18/arrow/arrio/arrio.go index 466a93a6..22fabc22 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/arrio/arrio.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/arrio/arrio.go @@ -22,7 +22,7 @@ import ( "errors" "io" - "github.com/apache/arrow/go/v14/arrow" + "github.com/apache/arrow-go/v18/arrow" ) // Reader is the interface that wraps the Read method. diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/bitutil/Makefile b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/Makefile similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/bitutil/Makefile rename to vendor/github.com/apache/arrow-go/v18/arrow/bitutil/Makefile diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops.go b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops.go rename to vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops_amd64.go b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops_amd64.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops_amd64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops_amd64.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops_arm64.go b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops_arm64.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops_arm64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops_arm64.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops_avx2_amd64.go b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops_avx2_amd64.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops_avx2_amd64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops_avx2_amd64.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops_avx2_amd64.s b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops_avx2_amd64.s similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops_avx2_amd64.s rename to vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops_avx2_amd64.s diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops_noasm.go b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops_noasm.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops_noasm.go rename to vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops_noasm.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops_ppc64le.go b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops_ppc64le.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops_ppc64le.go rename to vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops_ppc64le.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops_s390x.go b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops_s390x.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops_s390x.go rename to vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops_s390x.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops_sse4_amd64.go b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops_sse4_amd64.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops_sse4_amd64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops_sse4_amd64.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops_sse4_amd64.s b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops_sse4_amd64.s similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmap_ops_sse4_amd64.s rename to vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmap_ops_sse4_amd64.s diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmaps.go b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmaps.go similarity index 99% rename from vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmaps.go rename to vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmaps.go index 2e9c0601..0ac7ff58 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitmaps.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitmaps.go @@ -22,9 +22,9 @@ import ( "math/bits" "unsafe" - "github.com/apache/arrow/go/v14/arrow/endian" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow/endian" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" ) // BitmapReader is a simple bitmap reader for a byte slice. @@ -360,7 +360,7 @@ func (bm *BitmapWordWriter) PutNextTrailingByte(b byte, validBits int) { bm.bitmap = bm.bitmap[1:] } else { debug.Assert(validBits > 0 && validBits < 8, "invalid valid bits in bitmap word writer") - debug.Assert(BytesForBits(int64(bm.offset+validBits)) <= int64(len(bm.bitmap)), "writing trailiing byte outside of bounds of bitmap") + debug.Assert(BytesForBits(int64(bm.offset+validBits)) <= int64(len(bm.bitmap)), "writing trailing byte outside of bounds of bitmap") wr := NewBitmapWriter(bm.bitmap, int(bm.offset), validBits) for i := 0; i < validBits; i++ { if b&0x01 != 0 { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitutil.go b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitutil.go similarity index 86% rename from vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitutil.go rename to vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitutil.go index a4a1519b..47af2b2e 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/bitutil/bitutil.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitutil.go @@ -19,10 +19,9 @@ package bitutil import ( "math" "math/bits" - "reflect" "unsafe" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow/memory" ) var ( @@ -99,8 +98,6 @@ func countSetBitsWithOffset(buf []byte, offset, n int) int { count := 0 beg := offset - end := offset + n - begU8 := roundUp(beg, uint64SizeBits) init := min(n, begU8-beg) @@ -110,27 +107,8 @@ func countSetBitsWithOffset(buf []byte, offset, n int) int { } } - nU64 := (n - init) / uint64SizeBits - begU64 := begU8 / uint64SizeBits - endU64 := begU64 + nU64 - bufU64 := bytesToUint64(buf) - if begU64 < len(bufU64) { - for _, v := range bufU64[begU64:endU64] { - count += bits.OnesCount64(v) - } - } - - // FIXME: use a fallback to bits.OnesCount8 - // before counting the tail bits. - - tail := beg + init + nU64*uint64SizeBits - for i := tail; i < end; i++ { - if BitIsSet(buf, i) { - count++ - } - } - - return count + begU64 := BytesForBits(int64(beg + init)) + return count + CountSetBits(buf[begU64:], 0, n-init) } func roundUp(v, f int) int { @@ -149,15 +127,6 @@ const ( uint64SizeBits = uint64SizeBytes * 8 ) -func bytesToUint64(b []byte) []uint64 { - if cap(b) < uint64SizeBytes { - return nil - } - - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - return unsafe.Slice((*uint64)(unsafe.Pointer(h.Data)), cap(b)/uint64SizeBytes)[:len(b)/uint64SizeBytes] -} - var ( // PrecedingBitmask is a convenience set of values as bitmasks for checking // prefix bits of a byte diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/extension_builder.go b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitutil_bytes.go similarity index 71% rename from vendor/github.com/apache/arrow/go/v14/arrow/array/extension_builder.go rename to vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitutil_bytes.go index a71287fa..09dd5cbc 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/extension_builder.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/bitutil_bytes.go @@ -14,10 +14,24 @@ // See the License for the specific language governing permissions and // limitations under the License. -package array +//go:build go1.20 || tinygo -// ExtensionBuilderWrapper is an interface that you need to implement in your custom extension type if you want to provide a customer builder as well. -// See example in ./arrow/internal/testing/types/extension_types.go -type ExtensionBuilderWrapper interface { - NewBuilder(bldr *ExtensionBuilder) Builder +package bitutil + +import ( + "unsafe" +) + +func bytesToUint64(b []byte) []uint64 { + if len(b) < uint64SizeBytes { + return nil + } + + ptr := unsafe.SliceData(b) + if ptr == nil { + return nil + } + + return unsafe.Slice((*uint64)(unsafe.Pointer(ptr)), + len(b)/uint64SizeBytes) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/bitutil/endian_default.go b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/endian_default.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/bitutil/endian_default.go rename to vendor/github.com/apache/arrow-go/v18/arrow/bitutil/endian_default.go index 9f5d3cdc..ecbbaa70 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/bitutil/endian_default.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/endian_default.go @@ -14,6 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:build !s390x // +build !s390x package bitutil diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/bitutil/endian_s390x.go b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/endian_s390x.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/bitutil/endian_s390x.go rename to vendor/github.com/apache/arrow-go/v18/arrow/bitutil/endian_s390x.go index a9bba439..e99605f5 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/bitutil/endian_s390x.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/bitutil/endian_s390x.go @@ -18,7 +18,7 @@ package bitutil import ( "math/bits" - "unsafe" + "unsafe" ) var toFromLEFunc = bits.ReverseBytes64 diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compare.go b/vendor/github.com/apache/arrow-go/v18/arrow/compare.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/compare.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compare.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/arithmetic.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/arithmetic.go similarity index 99% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/arithmetic.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/arithmetic.go index 2fb95f06..95936678 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/arithmetic.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/arithmetic.go @@ -22,12 +22,12 @@ import ( "context" "fmt" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/compute/internal/kernels" - "github.com/apache/arrow/go/v14/arrow/decimal128" - "github.com/apache/arrow/go/v14/arrow/decimal256" - "github.com/apache/arrow/go/v14/arrow/scalar" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/compute/internal/kernels" + "github.com/apache/arrow-go/v18/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/decimal256" + "github.com/apache/arrow-go/v18/arrow/scalar" ) type ( @@ -678,8 +678,8 @@ func RegisterScalarArithmetic(reg FunctionRegistry) { // the allocated space is for duration (an int64) but we // wrote the time32 - time32 as if the output was time32 // so a quick copy in reverse expands the int32s to int64. - rawData := exec.GetData[int32](out.Buffers[1].Buf) - outData := exec.GetData[int64](out.Buffers[1].Buf) + rawData := arrow.GetData[int32](out.Buffers[1].Buf) + outData := arrow.GetData[int64](out.Buffers[1].Buf) for i := out.Len - 1; i >= 0; i-- { outData[i] = int64(rawData[i]) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/cast.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/cast.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/cast.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/cast.go index 8b720a2b..bd239b58 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/cast.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/cast.go @@ -23,11 +23,11 @@ import ( "fmt" "sync" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/compute/internal/kernels" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/compute/internal/kernels" ) var ( @@ -266,8 +266,8 @@ func CastStruct(ctx *exec.KernelCtx, batch *exec.ExecSpan, out *exec.ExecResult) opts = ctx.State.(kernels.CastState) inType = batch.Values[0].Array.Type.(*arrow.StructType) outType = out.Type.(*arrow.StructType) - inFieldCount = len(inType.Fields()) - outFieldCount = len(outType.Fields()) + inFieldCount = inType.NumFields() + outFieldCount = outType.NumFields() ) fieldsToSelect := make([]int, outFieldCount) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/datum.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/datum.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/datum.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/datum.go index 1d3c1b4d..438f10a3 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/datum.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/datum.go @@ -21,9 +21,9 @@ package compute import ( "fmt" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/scalar" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/scalar" ) //go:generate go run golang.org/x/tools/cmd/stringer -type=DatumKind -linecomment @@ -250,7 +250,7 @@ func (d *TableDatum) Equals(other Datum) bool { // an array.Table gets a TableDatum // a scalar.Scalar gets a ScalarDatum // -// Anything else is passed to scalar.MakeScalar and recieves a scalar +// Anything else is passed to scalar.MakeScalar and receives a scalar // datum of that appropriate type. func NewDatum(value interface{}) Datum { switch v := value.(type) { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/datumkind_string.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/datumkind_string.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/datumkind_string.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/datumkind_string.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/doc.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/doc.go similarity index 96% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/doc.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/doc.go index 53a164e6..7c763cb1 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/doc.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/doc.go @@ -23,7 +23,7 @@ // is an attempt to provide for those users, and in general create a // native-go arrow compute engine. // -// The overwhemling majority of things in this package require go1.18 as +// The overwhelming majority of things in this package require go1.18 as // it utilizes generics. The files in this package and its sub-packages // are all excluded from being built by go versions lower than 1.18 so // that the larger Arrow module itself is still compatible with go1.17. diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/exec.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/exec.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/exec.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/exec.go index 84e3310c..d37d95a7 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/exec.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/exec.go @@ -22,9 +22,9 @@ import ( "context" "fmt" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/internal/debug" ) func haveChunkedArray(values []Datum) bool { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/exec/hash_util.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/exec/hash_util.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/exec/hash_util.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/exec/hash_util.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/exec/kernel.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/exec/kernel.go similarity index 99% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/exec/kernel.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/exec/kernel.go index 327426da..d7de176c 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/exec/kernel.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/exec/kernel.go @@ -24,10 +24,10 @@ import ( "hash/maphash" "strings" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" "golang.org/x/exp/slices" ) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/exec/span.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/exec/span.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/exec/span.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/exec/span.go index b6d240fa..2585d9a6 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/exec/span.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/exec/span.go @@ -19,15 +19,14 @@ package exec import ( - "reflect" "sync/atomic" "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/arrow/scalar" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/arrow/scalar" ) // BufferSpan is a lightweight Buffer holder for ArraySpans that does not @@ -250,22 +249,6 @@ func (a *ArraySpan) resizeChildren(i int) { } } -// convenience function for populating the offsets buffer from a scalar -// value's size. -func setOffsetsForScalar[T int32 | int64](span *ArraySpan, buf []T, valueSize int64, bufidx int) { - buf[0] = 0 - buf[1] = T(valueSize) - - b := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) - s := (*reflect.SliceHeader)(unsafe.Pointer(&span.Buffers[bufidx].Buf)) - s.Data = b.Data - s.Len = 2 * int(unsafe.Sizeof(T(0))) - s.Cap = s.Len - - span.Buffers[bufidx].Owner = nil - span.Buffers[bufidx].SelfAlloc = false -} - // FillFromScalar populates this ArraySpan as if it were a 1 length array // with the single value equal to the passed in Scalar. func (a *ArraySpan) FillFromScalar(val scalar.Scalar) { @@ -633,7 +616,7 @@ func FillZeroLength(dt arrow.DataType, span *ArraySpan) { return } - span.resizeChildren(len(nt.Fields())) + span.resizeChildren(nt.NumFields()) for i, f := range nt.Fields() { FillZeroLength(f.Type, &span.Children[i]) } diff --git a/vendor/github.com/apache/arrow-go/v18/arrow/compute/exec/span_offsets.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/exec/span_offsets.go new file mode 100644 index 00000000..d2d03988 --- /dev/null +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/exec/span_offsets.go @@ -0,0 +1,36 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build go1.20 || tinygo + +package exec + +import ( + "unsafe" +) + +// convenience function for populating the offsets buffer from a scalar +// value's size. +func setOffsetsForScalar[T int32 | int64](span *ArraySpan, buf []T, valueSize int64, bufidx int) { + buf[0] = 0 + buf[1] = T(valueSize) + + span.Buffers[bufidx].Buf = unsafe.Slice((*byte)(unsafe.Pointer(unsafe.SliceData(buf))), + 2*int(unsafe.Sizeof(T(0)))) + + span.Buffers[bufidx].Owner = nil + span.Buffers[bufidx].SelfAlloc = false +} diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/exec/utils.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/exec/utils.go similarity index 52% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/exec/utils.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/exec/utils.go index 6d83b75d..e3685205 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/exec/utils.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/exec/utils.go @@ -21,96 +21,21 @@ package exec import ( "fmt" "math" - "reflect" "sync/atomic" "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/decimal128" - "github.com/apache/arrow/go/v14/arrow/decimal256" - "github.com/apache/arrow/go/v14/arrow/float16" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/memory" "golang.org/x/exp/constraints" "golang.org/x/exp/slices" ) -// IntTypes is a type constraint for raw values represented as signed -// integer types by Arrow. We aren't just using constraints.Signed -// because we don't want to include the raw `int` type here whose size -// changes based on the architecture (int32 on 32-bit architectures and -// int64 on 64-bit architectures). -// -// This will also cover types like MonthInterval or the time types -// as their underlying types are int32 and int64 which will get covered -// by using the ~ -type IntTypes interface { - ~int8 | ~int16 | ~int32 | ~int64 -} - -// UintTypes is a type constraint for raw values represented as unsigned -// integer types by Arrow. We aren't just using constraints.Unsigned -// because we don't want to include the raw `uint` type here whose size -// changes based on the architecture (uint32 on 32-bit architectures and -// uint64 on 64-bit architectures). We also don't want to include uintptr -type UintTypes interface { - ~uint8 | ~uint16 | ~uint32 | ~uint64 -} - -// FloatTypes is a type constraint for raw values for representing -// floating point values in Arrow. This consists of constraints.Float and -// float16.Num -type FloatTypes interface { - float16.Num | constraints.Float -} - -// NumericTypes is a type constraint for just signed/unsigned integers -// and float32/float64. -type NumericTypes interface { - IntTypes | UintTypes | constraints.Float -} - -// DecimalTypes is a type constraint for raw values representing larger -// decimal type values in Arrow, specifically decimal128 and decimal256. -type DecimalTypes interface { - decimal128.Num | decimal256.Num -} - -// FixedWidthTypes is a type constraint for raw values in Arrow that -// can be represented as FixedWidth byte slices. Specifically this is for -// using Go generics to easily re-type a byte slice to a properly-typed -// slice. Booleans are excluded here since they are represented by Arrow -// as a bitmap and thus the buffer can't be just reinterpreted as a []bool -type FixedWidthTypes interface { - IntTypes | UintTypes | - FloatTypes | DecimalTypes | - arrow.DayTimeInterval | arrow.MonthDayNanoInterval -} - -type TemporalTypes interface { - arrow.Date32 | arrow.Date64 | arrow.Time32 | arrow.Time64 | - arrow.Timestamp | arrow.Duration | arrow.DayTimeInterval | - arrow.MonthInterval | arrow.MonthDayNanoInterval -} - -func GetValues[T FixedWidthTypes](data arrow.ArrayData, i int) []T { - if data.Buffers()[i] == nil || data.Buffers()[i].Len() == 0 { - return nil - } - ret := unsafe.Slice((*T)(unsafe.Pointer(&data.Buffers()[i].Bytes()[0])), data.Offset()+data.Len()) - return ret[data.Offset():] -} - -func GetOffsets[T int32 | int64](data arrow.ArrayData, i int) []T { - ret := unsafe.Slice((*T)(unsafe.Pointer(&data.Buffers()[i].Bytes()[0])), data.Offset()+data.Len()+1) - return ret[data.Offset():] -} - // GetSpanValues returns a properly typed slice by reinterpreting // the buffer at index i using unsafe.Slice. This will take into account // the offset of the given ArraySpan. -func GetSpanValues[T FixedWidthTypes](span *ArraySpan, i int) []T { +func GetSpanValues[T arrow.FixedWidthType](span *ArraySpan, i int) []T { if len(span.Buffers[i].Buf) == 0 { return nil } @@ -126,16 +51,6 @@ func GetSpanOffsets[T int32 | int64](span *ArraySpan, i int) []T { return ret[span.Offset:] } -func GetBytes[T FixedWidthTypes](in []T) []byte { - var z T - return unsafe.Slice((*byte)(unsafe.Pointer(&in[0])), len(in)*int(unsafe.Sizeof(z))) -} - -func GetData[T FixedWidthTypes](in []byte) []T { - var z T - return unsafe.Slice((*T)(unsafe.Pointer(&in[0])), len(in)/int(unsafe.Sizeof(z))) -} - func Min[T constraints.Ordered](a, b T) T { if a < b { return a @@ -165,59 +80,22 @@ func OptionsInit[T any](_ *KernelCtx, args KernelInitArgs) (KernelState, error) arrow.ErrInvalid) } -var typMap = map[reflect.Type]arrow.DataType{ - reflect.TypeOf(false): arrow.FixedWidthTypes.Boolean, - reflect.TypeOf(int8(0)): arrow.PrimitiveTypes.Int8, - reflect.TypeOf(int16(0)): arrow.PrimitiveTypes.Int16, - reflect.TypeOf(int32(0)): arrow.PrimitiveTypes.Int32, - reflect.TypeOf(int64(0)): arrow.PrimitiveTypes.Int64, - reflect.TypeOf(uint8(0)): arrow.PrimitiveTypes.Uint8, - reflect.TypeOf(uint16(0)): arrow.PrimitiveTypes.Uint16, - reflect.TypeOf(uint32(0)): arrow.PrimitiveTypes.Uint32, - reflect.TypeOf(uint64(0)): arrow.PrimitiveTypes.Uint64, - reflect.TypeOf(float32(0)): arrow.PrimitiveTypes.Float32, - reflect.TypeOf(float64(0)): arrow.PrimitiveTypes.Float64, - reflect.TypeOf(string("")): arrow.BinaryTypes.String, - reflect.TypeOf(arrow.Date32(0)): arrow.FixedWidthTypes.Date32, - reflect.TypeOf(arrow.Date64(0)): arrow.FixedWidthTypes.Date64, - reflect.TypeOf(true): arrow.FixedWidthTypes.Boolean, - reflect.TypeOf(float16.Num{}): arrow.FixedWidthTypes.Float16, - reflect.TypeOf([]byte{}): arrow.BinaryTypes.Binary, -} - -// GetDataType returns the appropriate arrow.DataType for the given type T -// only for non-parametric types. This uses a map and reflection internally -// so don't call this in a tight loop, instead call this once and then use -// a closure with the result. -func GetDataType[T NumericTypes | bool | string | []byte | float16.Num]() arrow.DataType { - var z T - return typMap[reflect.TypeOf(z)] -} - -// GetType returns the appropriate arrow.Type type T, only for non-parameteric -// types. This uses a map and reflection internally so don't call this in -// a tight loop, instead call it once and then use a closure with the result. -func GetType[T NumericTypes | bool | string]() arrow.Type { - var z T - return typMap[reflect.TypeOf(z)].ID() -} - -type arrayBuilder[T NumericTypes | bool] interface { +type arrayBuilder[T arrow.NumericType | bool] interface { array.Builder Append(T) AppendValues([]T, []bool) } -func ArrayFromSlice[T NumericTypes | bool](mem memory.Allocator, data []T) arrow.Array { - bldr := array.NewBuilder(mem, typMap[reflect.TypeOf(data).Elem()]).(arrayBuilder[T]) +func ArrayFromSlice[T arrow.NumericType | bool](mem memory.Allocator, data []T) arrow.Array { + bldr := array.NewBuilder(mem, arrow.GetDataType[T]()).(arrayBuilder[T]) defer bldr.Release() bldr.AppendValues(data, nil) return bldr.NewArray() } -func ArrayFromSliceWithValid[T NumericTypes | bool](mem memory.Allocator, data []T, valid []bool) arrow.Array { - bldr := array.NewBuilder(mem, typMap[reflect.TypeOf(data).Elem()]).(arrayBuilder[T]) +func ArrayFromSliceWithValid[T arrow.NumericType | bool](mem memory.Allocator, data []T, valid []bool) arrow.Array { + bldr := array.NewBuilder(mem, arrow.GetDataType[T]()).(arrayBuilder[T]) defer bldr.Release() bldr.AppendValues(data, valid) @@ -323,7 +201,7 @@ func (c *ChunkResolver) Resolve(idx int64) (chunk, index int64) { } type arrayTypes interface { - FixedWidthTypes | TemporalTypes | bool | string | []byte + arrow.FixedWidthType | arrow.TemporalType | bool | string | []byte } type ArrayIter[T arrayTypes] interface { @@ -345,11 +223,11 @@ func (b *BoolIter) Next() (out bool) { return } -type PrimitiveIter[T FixedWidthTypes] struct { +type PrimitiveIter[T arrow.FixedWidthType] struct { Values []T } -func NewPrimitiveIter[T FixedWidthTypes](arr *ArraySpan) ArrayIter[T] { +func NewPrimitiveIter[T arrow.FixedWidthType](arr *ArraySpan) ArrayIter[T] { return &PrimitiveIter[T]{Values: GetSpanValues[T](arr, 1)} } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/executor.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/executor.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/executor.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/executor.go index 6da7ed12..13740951 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/executor.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/executor.go @@ -25,14 +25,14 @@ import ( "runtime" "sync" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/internal" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/arrow/scalar" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/internal" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/arrow/scalar" ) // ExecCtx holds simple contextual information for execution @@ -171,6 +171,8 @@ func addComputeDataPrealloc(dt arrow.DataType, widths []bufferPrealloc) []buffer return append(widths, bufferPrealloc{bitWidth: 32, addLen: 1}) case arrow.LARGE_BINARY, arrow.LARGE_STRING, arrow.LARGE_LIST: return append(widths, bufferPrealloc{bitWidth: 64, addLen: 1}) + case arrow.STRING_VIEW, arrow.BINARY_VIEW: + return append(widths, bufferPrealloc{bitWidth: arrow.ViewHeaderSizeBytes * 8}) } return widths } @@ -389,7 +391,7 @@ func inferBatchLength(values []Datum) (length int64, allSame bool) { type KernelExecutor interface { // Init must be called *after* the kernel's init method and any // KernelState must be set into the KernelCtx *before* calling - // this Init method. This is to faciliate the case where + // this Init method. This is to facilitate the case where // Init may be expensive and does not need to be called // again for each execution of the kernel. For example, // the same lookup table can be re-used for all scanned batches @@ -1007,9 +1009,10 @@ func (v *vectorExecutor) WrapResults(ctx context.Context, out <-chan Datum, hasC case <-ctx.Done(): return nil case output = <-out: - if output == nil { + if output == nil || ctx.Err() != nil { return nil } + // if the inputs contained at least one chunked array // then we want to return chunked output if hasChunked { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/expression.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/expression.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/expression.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/expression.go index 9f20c970..88e1dde3 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/expression.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/expression.go @@ -28,14 +28,14 @@ import ( "strconv" "strings" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/compute/internal/kernels" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/ipc" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/arrow/scalar" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/compute/internal/kernels" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/ipc" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/arrow/scalar" ) var hashSeed = maphash.MakeSeed() diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/fieldref.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/fieldref.go similarity index 90% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/fieldref.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/fieldref.go index ee6f3994..55ec3372 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/fieldref.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/fieldref.go @@ -20,15 +20,13 @@ import ( "errors" "fmt" "hash/maphash" - "math/bits" "reflect" "strconv" "strings" "unicode" - "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" ) var ( @@ -168,21 +166,6 @@ func (f FieldPath) GetColumn(batch arrow.Record) (arrow.Array, error) { return f.getArray(batch.Columns()) } -func (f FieldPath) hash(h *maphash.Hash) { - raw := (*reflect.SliceHeader)(unsafe.Pointer(&f)).Data - - var b []byte - s := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - s.Data = raw - if bits.UintSize == 32 { - s.Len = arrow.Int32Traits.BytesRequired(len(f)) - } else { - s.Len = arrow.Int64Traits.BytesRequired(len(f)) - } - s.Cap = s.Len - h.Write(b) -} - func (f FieldPath) findAll(fields []arrow.Field) []FieldPath { _, err := f.GetFieldFromSlice(fields) if err == nil { @@ -282,31 +265,31 @@ type refImpl interface { // // Nested fields can be referenced as well, given the schema: // -// arrow.NewSchema([]arrow.Field{ -// {Name: "a", Type: arrow.StructOf(arrow.Field{Name: "n", Type: arrow.Null})}, -// {Name: "b", Type: arrow.PrimitiveTypes.Int32}, -// }) +// arrow.NewSchema([]arrow.Field{ +// {Name: "a", Type: arrow.StructOf(arrow.Field{Name: "n", Type: arrow.Null})}, +// {Name: "b", Type: arrow.PrimitiveTypes.Int32}, +// }) // // the following all indicate the nested field named "n": // -// FieldRefPath(FieldPath{0, 0}) -// FieldRefList("a", 0) -// FieldRefList("a", "n") -// FieldRefList(0, "n") -// NewFieldRefFromDotPath(".a[0]") +// FieldRefPath(FieldPath{0, 0}) +// FieldRefList("a", 0) +// FieldRefList("a", "n") +// FieldRefList(0, "n") +// NewFieldRefFromDotPath(".a[0]") // // FieldPaths matching a FieldRef are retrieved with the FindAll* functions // Multiple matches are possible because field names may be duplicated within // a schema. For example: // -// aIsAmbiguous := arrow.NewSchema([]arrow.Field{ -// {Name: "a", Type: arrow.PrimitiveTypes.Int32}, -// {Name: "a", Type: arrow.PrimitiveTypes.Float32}, -// }) -// matches := FieldRefName("a").FindAll(aIsAmbiguous) -// assert.Len(matches, 2) -// assert.True(matches[0].Get(aIsAmbiguous).Equals(aIsAmbiguous.Field(0)) -// assert.True(matches[1].Get(aIsAmbiguous).Equals(aIsAmbiguous.Field(1)) +// aIsAmbiguous := arrow.NewSchema([]arrow.Field{ +// {Name: "a", Type: arrow.PrimitiveTypes.Int32}, +// {Name: "a", Type: arrow.PrimitiveTypes.Float32}, +// }) +// matches := FieldRefName("a").FindAll(aIsAmbiguous) +// assert.Len(matches, 2) +// assert.True(matches[0].Get(aIsAmbiguous).Equals(aIsAmbiguous.Field(0)) +// assert.True(matches[1].Get(aIsAmbiguous).Equals(aIsAmbiguous.Field(1)) type FieldRef struct { impl refImpl } @@ -346,17 +329,18 @@ func FieldRefList(elems ...interface{}) FieldRef { // NewFieldRefFromDotPath parses a dot path into a field ref. // // dot_path = '.' name -// | '[' digit+ ']' -// | dot_path+ +// +// | '[' digit+ ']' +// | dot_path+ // // Examples // -// ".alpha" => FieldRefName("alpha") -// "[2]" => FieldRefIndex(2) -// ".beta[3]" => FieldRefList("beta", 3) -// "[5].gamma.delta[7]" => FieldRefList(5, "gamma", "delta", 7) -// ".hello world" => FieldRefName("hello world") -// `.\[y\]\\tho\.\` => FieldRef(`[y]\tho.\`) +// ".alpha" => FieldRefName("alpha") +// "[2]" => FieldRefIndex(2) +// ".beta[3]" => FieldRefList("beta", 3) +// "[5].gamma.delta[7]" => FieldRefList(5, "gamma", "delta", 7) +// ".hello world" => FieldRefName("hello world") +// `.\[y\]\\tho\.\` => FieldRef(`[y]\tho.\`) // // Note: when parsing a name, a '\' preceding any other character will be // dropped from the resulting name. therefore if a name must contain the characters diff --git a/vendor/github.com/apache/arrow-go/v18/arrow/compute/fieldref_hash.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/fieldref_hash.go new file mode 100644 index 00000000..02efc46d --- /dev/null +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/fieldref_hash.go @@ -0,0 +1,39 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build go1.20 || tinygo + +package compute + +import ( + "hash/maphash" + "math/bits" + "unsafe" + + "github.com/apache/arrow-go/v18/arrow" +) + +func (f FieldPath) hash(h *maphash.Hash) { + raw := unsafe.Pointer(unsafe.SliceData(f)) + var byteLen int + if bits.UintSize == 32 { + byteLen = arrow.Int32Traits.BytesRequired(len(f)) + } else { + byteLen = arrow.Int64Traits.BytesRequired(len(f)) + } + + h.Write(unsafe.Slice((*byte)(raw), byteLen)) +} diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/funckind_string.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/funckind_string.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/funckind_string.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/funckind_string.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/functions.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/functions.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/functions.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/functions.go index a1905f91..11d8e685 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/functions.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/functions.go @@ -23,8 +23,8 @@ import ( "fmt" "strings" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/compute/exec" ) type Function interface { @@ -179,7 +179,7 @@ func (b *baseFunction) checkArity(nargs int) error { return nil } -// kernelType is a type contstraint interface that is used for funcImpl +// kernelType is a type constraint interface that is used for funcImpl // generic definitions. It will be extended as other kernel types // are defined. // @@ -227,7 +227,7 @@ func (fi *funcImpl[KT]) Kernels() []*KT { // A ScalarFunction is a function that executes element-wise operations // on arrays or scalars, and therefore whose results generally do not -// depent on the order of the values in the arguments. Accepts and returns +// depend on the order of the values in the arguments. Accepts and returns // arrays that are all of the same size. These functions roughly correspond // to the functions used in most SQL expressions. type ScalarFunction struct { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/Makefile b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/Makefile similarity index 93% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/Makefile rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/Makefile index ac00bd83..4e8ddd85 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/Makefile +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/Makefile @@ -21,14 +21,15 @@ C2GOASM=c2goasm CC=clang-11 CXX=clang++-11 C_FLAGS=-target x86_64-unknown-none -masm=intel -mno-red-zone -mstackrealign -mllvm -inline-threshold=5000 \ - -fno-asynchronous-unwind-tables -fno-exceptions -fno-rtti -O3 -fno-builtin -ffast-math -fno-jump-tables -I_lib -I../../../../internal/utils/_lib + -fno-asynchronous-unwind-tables -fno-exceptions -fno-rtti -O3 -fno-builtin -fno-jump-tables \ + -fno-math-errno -funsafe-math-optimizations -fno-rounding-math -fno-trapping-math -I_lib -I../../../../internal/utils/_lib ASM_FLAGS_AVX2=-mavx2 -mfma ASM_FLAGS_SSE4=-msse4 ASM_FLAGS_BMI2=-mbmi2 ASM_FLAGS_POPCNT=-mpopcnt C_FLAGS_NEON=-O3 -fvectorize -mllvm -force-vector-width=16 -fno-asynchronous-unwind-tables -mno-red-zone -mstackrealign -fno-exceptions \ - -fno-rtti -fno-builtin -ffast-math -fno-jump-tables -I_lib -I../../../../internal/utils/_lib + -fno-rtti -fno-builtin -fno-math-errno -funsafe-math-optimizations -fno-rounding-math -fno-trapping-math -fno-jump-tables -I_lib -I../../../../internal/utils/_lib GO_SOURCES := $(shell find . -path ./_lib -prune -o -name '*.go' -not -name '*_test.go') ALL_SOURCES := $(shell find . -path ./_lib -prune -o -name '*.go' -name '*.s' -not -name '*_test.go') diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/base_arithmetic.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/base_arithmetic.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/base_arithmetic.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/base_arithmetic.go index 67e80af7..d2254040 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/base_arithmetic.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/base_arithmetic.go @@ -24,11 +24,11 @@ import ( "math/bits" "github.com/JohnCGriffin/overflow" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/decimal128" - "github.com/apache/arrow/go/v14/arrow/decimal256" - "github.com/apache/arrow/go/v14/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/decimal256" + "github.com/apache/arrow-go/v18/arrow/internal/debug" "golang.org/x/exp/constraints" ) @@ -81,7 +81,7 @@ const ( OpLogbChecked ) -func mulWithOverflow[T exec.IntTypes | exec.UintTypes](a, b T) (T, error) { +func mulWithOverflow[T arrow.IntType | arrow.UintType](a, b T) (T, error) { min, max := MinOf[T](), MaxOf[T]() switch { case a > 0: @@ -107,7 +107,7 @@ func mulWithOverflow[T exec.IntTypes | exec.UintTypes](a, b T) (T, error) { return a * b, nil } -func getGoArithmeticBinary[OutT, Arg0T, Arg1T exec.NumericTypes](op func(a Arg0T, b Arg1T, e *error) OutT) binaryOps[OutT, Arg0T, Arg1T] { +func getGoArithmeticBinary[OutT, Arg0T, Arg1T arrow.NumericType](op func(a Arg0T, b Arg1T, e *error) OutT) binaryOps[OutT, Arg0T, Arg1T] { return binaryOps[OutT, Arg0T, Arg1T]{ arrArr: func(_ *exec.KernelCtx, left []Arg0T, right []Arg1T, out []OutT) error { var err error @@ -143,7 +143,7 @@ var ( errLogNeg = fmt.Errorf("%w: logarithm of negative number", arrow.ErrInvalid) ) -func getGoArithmeticOpIntegral[InT, OutT exec.UintTypes | exec.IntTypes](op ArithmeticOp) exec.ArrayKernelExec { +func getGoArithmeticOpIntegral[InT, OutT arrow.UintType | arrow.IntType](op ArithmeticOp) exec.ArrayKernelExec { switch op { case OpAdd: return ScalarBinary(getGoArithmeticBinary(func(a, b InT, _ *error) OutT { return OutT(a + b) })) @@ -178,7 +178,7 @@ func getGoArithmeticOpIntegral[InT, OutT exec.UintTypes | exec.IntTypes](op Arit if SizeOf[InT]() == SizeOf[OutT]() { return ScalarUnary(func(_ *exec.KernelCtx, arg []InT, out []OutT) error { - in, output := exec.GetBytes(arg), exec.GetBytes(out) + in, output := arrow.GetBytes(arg), arrow.GetBytes(out) copy(output, in) return nil }) @@ -314,7 +314,7 @@ func getGoArithmeticOpIntegral[InT, OutT exec.UintTypes | exec.IntTypes](op Arit } if SizeOf[InT]() == SizeOf[OutT]() { return ScalarUnary(func(_ *exec.KernelCtx, arg []InT, out []OutT) error { - in, output := exec.GetBytes(arg), exec.GetBytes(out) + in, output := arrow.GetBytes(arg), arrow.GetBytes(out) copy(output, in) return nil }) @@ -795,7 +795,7 @@ func getArithmeticOpDecimalImpl[T decimal128.Num | decimal256.Num](op Arithmetic return int64(fns.Sign(arg)) }) } - debug.Assert(false, "unimplemented arithemtic op") + debug.Assert(false, "unimplemented arithmetic op") return nil } @@ -837,7 +837,7 @@ func ArithmeticExecSameType(ty arrow.Type, op ArithmeticOp) exec.ArrayKernelExec return nil } -func arithmeticExec[InT exec.IntTypes | exec.UintTypes](oty arrow.Type, op ArithmeticOp) exec.ArrayKernelExec { +func arithmeticExec[InT arrow.IntType | arrow.UintType](oty arrow.Type, op ArithmeticOp) exec.ArrayKernelExec { switch oty { case arrow.INT8: return getArithmeticOpIntegral[InT, int8](op) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/base_arithmetic_amd64.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/base_arithmetic_amd64.go similarity index 63% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/base_arithmetic_amd64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/base_arithmetic_amd64.go index 0e78e6c9..2073e62b 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/base_arithmetic_amd64.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/base_arithmetic_amd64.go @@ -21,63 +21,64 @@ package kernels import ( "unsafe" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/internal/debug" "golang.org/x/exp/constraints" "golang.org/x/sys/cpu" ) -func getAvx2ArithmeticBinaryNumeric[T exec.NumericTypes](op ArithmeticOp) binaryOps[T, T, T] { - typ := exec.GetType[T]() +func getAvx2ArithmeticBinaryNumeric[T arrow.NumericType](op ArithmeticOp) binaryOps[T, T, T] { + typ := arrow.GetType[T]() return binaryOps[T, T, T]{ arrArr: func(_ *exec.KernelCtx, Arg0, Arg1, Out []T) error { - arithmeticAvx2(typ, op, exec.GetBytes(Arg0), exec.GetBytes(Arg1), exec.GetBytes(Out), len(Arg0)) + arithmeticAvx2(typ, op, arrow.GetBytes(Arg0), arrow.GetBytes(Arg1), arrow.GetBytes(Out), len(Arg0)) return nil }, arrScalar: func(_ *exec.KernelCtx, Arg0 []T, Arg1 T, Out []T) error { - arithmeticArrScalarAvx2(typ, op, exec.GetBytes(Arg0), unsafe.Pointer(&Arg1), exec.GetBytes(Out), len(Arg0)) + arithmeticArrScalarAvx2(typ, op, arrow.GetBytes(Arg0), unsafe.Pointer(&Arg1), arrow.GetBytes(Out), len(Arg0)) return nil }, scalarArr: func(_ *exec.KernelCtx, Arg0 T, Arg1, Out []T) error { - arithmeticScalarArrAvx2(typ, op, unsafe.Pointer(&Arg0), exec.GetBytes(Arg1), exec.GetBytes(Out), len(Arg1)) + arithmeticScalarArrAvx2(typ, op, unsafe.Pointer(&Arg0), arrow.GetBytes(Arg1), arrow.GetBytes(Out), len(Arg1)) return nil }, } } -func getSSE4ArithmeticBinaryNumeric[T exec.NumericTypes](op ArithmeticOp) binaryOps[T, T, T] { - typ := exec.GetType[T]() +func getSSE4ArithmeticBinaryNumeric[T arrow.NumericType](op ArithmeticOp) binaryOps[T, T, T] { + typ := arrow.GetType[T]() return binaryOps[T, T, T]{ arrArr: func(_ *exec.KernelCtx, Arg0, Arg1, Out []T) error { - arithmeticSSE4(typ, op, exec.GetBytes(Arg0), exec.GetBytes(Arg1), exec.GetBytes(Out), len(Arg0)) + arithmeticSSE4(typ, op, arrow.GetBytes(Arg0), arrow.GetBytes(Arg1), arrow.GetBytes(Out), len(Arg0)) return nil }, arrScalar: func(_ *exec.KernelCtx, Arg0 []T, Arg1 T, Out []T) error { - arithmeticArrScalarSSE4(typ, op, exec.GetBytes(Arg0), unsafe.Pointer(&Arg1), exec.GetBytes(Out), len(Arg0)) + arithmeticArrScalarSSE4(typ, op, arrow.GetBytes(Arg0), unsafe.Pointer(&Arg1), arrow.GetBytes(Out), len(Arg0)) return nil }, scalarArr: func(_ *exec.KernelCtx, Arg0 T, Arg1, Out []T) error { - arithmeticScalarArrSSE4(typ, op, unsafe.Pointer(&Arg0), exec.GetBytes(Arg1), exec.GetBytes(Out), len(Arg1)) + arithmeticScalarArrSSE4(typ, op, unsafe.Pointer(&Arg0), arrow.GetBytes(Arg1), arrow.GetBytes(Out), len(Arg1)) return nil }, } } -func getArithmeticOpIntegral[InT, OutT exec.UintTypes | exec.IntTypes](op ArithmeticOp) exec.ArrayKernelExec { +func getArithmeticOpIntegral[InT, OutT arrow.UintType | arrow.IntType](op ArithmeticOp) exec.ArrayKernelExec { if cpu.X86.HasAVX2 { switch op { case OpAdd, OpSub, OpMul: return ScalarBinary(getAvx2ArithmeticBinaryNumeric[InT](op)) case OpAbsoluteValue, OpNegate: - typ := exec.GetType[InT]() + typ := arrow.GetType[InT]() return ScalarUnary(func(_ *exec.KernelCtx, arg, out []InT) error { - arithmeticUnaryAvx2(typ, op, exec.GetBytes(arg), exec.GetBytes(out), len(arg)) + arithmeticUnaryAvx2(typ, op, arrow.GetBytes(arg), arrow.GetBytes(out), len(arg)) return nil }) case OpSign: - inType, outType := exec.GetType[InT](), exec.GetType[OutT]() + inType, outType := arrow.GetType[InT](), arrow.GetType[OutT]() return ScalarUnary(func(_ *exec.KernelCtx, arg []InT, out []OutT) error { - arithmeticUnaryDiffTypesAvx2(inType, outType, op, exec.GetBytes(arg), exec.GetBytes(out), len(arg)) + arithmeticUnaryDiffTypesAvx2(inType, outType, op, arrow.GetBytes(arg), arrow.GetBytes(out), len(arg)) return nil }) } @@ -86,15 +87,15 @@ func getArithmeticOpIntegral[InT, OutT exec.UintTypes | exec.IntTypes](op Arithm case OpAdd, OpSub, OpMul: return ScalarBinary(getSSE4ArithmeticBinaryNumeric[InT](op)) case OpAbsoluteValue, OpNegate: - typ := exec.GetType[InT]() + typ := arrow.GetType[InT]() return ScalarUnary(func(ctx *exec.KernelCtx, arg, out []InT) error { - arithmeticUnarySSE4(typ, op, exec.GetBytes(arg), exec.GetBytes(out), len(arg)) + arithmeticUnarySSE4(typ, op, arrow.GetBytes(arg), arrow.GetBytes(out), len(arg)) return nil }) case OpSign: - inType, outType := exec.GetType[InT](), exec.GetType[OutT]() + inType, outType := arrow.GetType[InT](), arrow.GetType[OutT]() return ScalarUnary(func(_ *exec.KernelCtx, arg []InT, out []OutT) error { - arithmeticUnaryDiffTypesSSE4(inType, outType, op, exec.GetBytes(arg), exec.GetBytes(out), len(arg)) + arithmeticUnaryDiffTypesSSE4(inType, outType, op, arrow.GetBytes(arg), arrow.GetBytes(out), len(arg)) return nil }) } @@ -109,38 +110,38 @@ func getArithmeticOpFloating[InT, OutT constraints.Float](op ArithmeticOp) exec. if cpu.X86.HasAVX2 { switch op { case OpAdd, OpSub, OpAddChecked, OpSubChecked, OpMul, OpMulChecked: - if exec.GetType[InT]() != exec.GetType[OutT]() { + if arrow.GetType[InT]() != arrow.GetType[OutT]() { debug.Assert(false, "not implemented") return nil } return ScalarBinary(getAvx2ArithmeticBinaryNumeric[InT](op)) case OpAbsoluteValue, OpAbsoluteValueChecked, OpNegate, OpNegateChecked, OpSign: - if exec.GetType[InT]() != exec.GetType[OutT]() { + if arrow.GetType[InT]() != arrow.GetType[OutT]() { debug.Assert(false, "not implemented") return nil } - typ := exec.GetType[InT]() + typ := arrow.GetType[InT]() return ScalarUnary(func(_ *exec.KernelCtx, arg, out []InT) error { - arithmeticUnaryAvx2(typ, op, exec.GetBytes(arg), exec.GetBytes(out), len(arg)) + arithmeticUnaryAvx2(typ, op, arrow.GetBytes(arg), arrow.GetBytes(out), len(arg)) return nil }) } } else if cpu.X86.HasSSE42 { switch op { case OpAdd, OpSub, OpAddChecked, OpSubChecked, OpMul, OpMulChecked: - if exec.GetType[InT]() != exec.GetType[OutT]() { + if arrow.GetType[InT]() != arrow.GetType[OutT]() { debug.Assert(false, "not implemented") return nil } return ScalarBinary(getSSE4ArithmeticBinaryNumeric[InT](op)) case OpAbsoluteValue, OpAbsoluteValueChecked, OpNegate, OpNegateChecked, OpSign: - if exec.GetType[InT]() != exec.GetType[OutT]() { + if arrow.GetType[InT]() != arrow.GetType[OutT]() { debug.Assert(false, "not implemented") return nil } - typ := exec.GetType[InT]() + typ := arrow.GetType[InT]() return ScalarUnary(func(_ *exec.KernelCtx, arg, out []InT) error { - arithmeticUnarySSE4(typ, op, exec.GetBytes(arg), exec.GetBytes(out), len(arg)) + arithmeticUnarySSE4(typ, op, arrow.GetBytes(arg), arrow.GetBytes(out), len(arg)) return nil }) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/base_arithmetic_avx2_amd64.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/base_arithmetic_avx2_amd64.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/base_arithmetic_avx2_amd64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/base_arithmetic_avx2_amd64.go index 29cce783..5dbaa8dc 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/base_arithmetic_avx2_amd64.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/base_arithmetic_avx2_amd64.go @@ -21,7 +21,7 @@ package kernels import ( "unsafe" - "github.com/apache/arrow/go/v14/arrow" + "github.com/apache/arrow-go/v18/arrow" ) //go:noescape diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/base_arithmetic_avx2_amd64.s b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/base_arithmetic_avx2_amd64.s similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/base_arithmetic_avx2_amd64.s rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/base_arithmetic_avx2_amd64.s diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/base_arithmetic_sse4_amd64.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/base_arithmetic_sse4_amd64.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/base_arithmetic_sse4_amd64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/base_arithmetic_sse4_amd64.go index e9b03551..510b24b7 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/base_arithmetic_sse4_amd64.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/base_arithmetic_sse4_amd64.go @@ -21,7 +21,7 @@ package kernels import ( "unsafe" - "github.com/apache/arrow/go/v14/arrow" + "github.com/apache/arrow-go/v18/arrow" ) //go:noescape diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/base_arithmetic_sse4_amd64.s b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/base_arithmetic_sse4_amd64.s similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/base_arithmetic_sse4_amd64.s rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/base_arithmetic_sse4_amd64.s diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/basic_arithmetic_noasm.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/basic_arithmetic_noasm.go similarity index 84% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/basic_arithmetic_noasm.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/basic_arithmetic_noasm.go index 4f160a14..74d64b69 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/basic_arithmetic_noasm.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/basic_arithmetic_noasm.go @@ -19,7 +19,8 @@ package kernels import ( - "github.com/apache/arrow/go/v14/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/compute/exec" "golang.org/x/exp/constraints" ) @@ -27,6 +28,6 @@ func getArithmeticOpFloating[InT, OutT constraints.Float](op ArithmeticOp) exec. return getGoArithmeticOpFloating[InT, OutT](op) } -func getArithmeticOpIntegral[InT, OutT exec.UintTypes | exec.IntTypes](op ArithmeticOp) exec.ArrayKernelExec { +func getArithmeticOpIntegral[InT, OutT arrow.UintType | arrow.IntType](op ArithmeticOp) exec.ArrayKernelExec { return getGoArithmeticOpIntegral[InT, OutT](op) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/boolean_cast.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/boolean_cast.go similarity index 94% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/boolean_cast.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/boolean_cast.go index 18d04c84..dbe96f10 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/boolean_cast.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/boolean_cast.go @@ -22,12 +22,12 @@ import ( "strconv" "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/compute/exec" ) -func isNonZero[T exec.FixedWidthTypes](ctx *exec.KernelCtx, in []T, out []byte) error { +func isNonZero[T arrow.FixedWidthType](ctx *exec.KernelCtx, in []T, out []byte) error { var zero T for i, v := range in { bitutil.SetBitTo(out, i, v != zero) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast.go similarity index 96% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast.go index 5a71206b..66f75ad2 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast.go @@ -19,9 +19,9 @@ package kernels import ( - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/compute/exec" ) type CastOptions struct { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric.go index 4e5c5c1d..a1772599 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric.go @@ -21,7 +21,7 @@ package kernels import ( "unsafe" - "github.com/apache/arrow/go/v14/arrow" + "github.com/apache/arrow-go/v18/arrow" ) var castNumericUnsafe func(itype, otype arrow.Type, in, out []byte, len int) = castNumericGo diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric_amd64.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric_amd64.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric_amd64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric_amd64.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric_avx2_amd64.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric_avx2_amd64.go similarity index 96% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric_avx2_amd64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric_avx2_amd64.go index 6b28441e..3c55e07c 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric_avx2_amd64.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric_avx2_amd64.go @@ -21,7 +21,7 @@ package kernels import ( "unsafe" - "github.com/apache/arrow/go/v14/arrow" + "github.com/apache/arrow-go/v18/arrow" ) //go:noescape diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric_avx2_amd64.s b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric_avx2_amd64.s similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric_avx2_amd64.s rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric_avx2_amd64.s diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric_neon_arm64.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric_neon_arm64.go similarity index 96% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric_neon_arm64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric_neon_arm64.go index d53a4486..f62b7b96 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric_neon_arm64.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric_neon_arm64.go @@ -21,7 +21,7 @@ package kernels import ( "unsafe" - "github.com/apache/arrow/go/v14/arrow" + "github.com/apache/arrow-go/v18/arrow" "golang.org/x/sys/cpu" ) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric_neon_arm64.s b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric_neon_arm64.s similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric_neon_arm64.s rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric_neon_arm64.s diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric_sse4_amd64.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric_sse4_amd64.go similarity index 96% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric_sse4_amd64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric_sse4_amd64.go index 1cbea033..d53f219f 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric_sse4_amd64.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric_sse4_amd64.go @@ -21,7 +21,7 @@ package kernels import ( "unsafe" - "github.com/apache/arrow/go/v14/arrow" + "github.com/apache/arrow-go/v18/arrow" ) //go:noescape diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric_sse4_amd64.s b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric_sse4_amd64.s similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_numeric_sse4_amd64.s rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_numeric_sse4_amd64.s diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_temporal.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_temporal.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_temporal.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_temporal.go index 82fce1e3..6d061432 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/cast_temporal.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/cast_temporal.go @@ -24,10 +24,10 @@ import ( "time" "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/internal/debug" ) const millisecondsInDay = 86400000 @@ -112,6 +112,10 @@ func TimestampToDate32(ctx *exec.KernelCtx, batch *exec.ExecSpan, out *exec.Exec return ScalarUnaryNotNull(func(_ *exec.KernelCtx, arg0 arrow.Timestamp, _ *error) arrow.Date32 { tm := fnToTime(arg0) + if _, offset := tm.Zone(); offset != 0 { + // normalize the tm + tm = tm.Add(time.Duration(offset) * time.Second).UTC() + } return arrow.Date32FromTime(tm) })(ctx, batch, out) } @@ -125,6 +129,10 @@ func TimestampToDate64(ctx *exec.KernelCtx, batch *exec.ExecSpan, out *exec.Exec return ScalarUnaryNotNull(func(_ *exec.KernelCtx, arg0 arrow.Timestamp, _ *error) arrow.Date64 { tm := fnToTime(arg0) + if _, offset := tm.Zone(); offset != 0 { + // normalize the tm + tm = tm.Add(time.Duration(offset) * time.Second).UTC() + } return arrow.Date64FromTime(tm) })(ctx, batch, out) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/compareoperator_string.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/compareoperator_string.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/compareoperator_string.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/compareoperator_string.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/constant_factor.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/constant_factor.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/constant_factor.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/constant_factor.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/constant_factor_amd64.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/constant_factor_amd64.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/constant_factor_amd64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/constant_factor_amd64.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/constant_factor_avx2_amd64.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/constant_factor_avx2_amd64.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/constant_factor_avx2_amd64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/constant_factor_avx2_amd64.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/constant_factor_avx2_amd64.s b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/constant_factor_avx2_amd64.s similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/constant_factor_avx2_amd64.s rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/constant_factor_avx2_amd64.s diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/constant_factor_sse4_amd64.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/constant_factor_sse4_amd64.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/constant_factor_sse4_amd64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/constant_factor_sse4_amd64.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/constant_factor_sse4_amd64.s b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/constant_factor_sse4_amd64.s similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/constant_factor_sse4_amd64.s rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/constant_factor_sse4_amd64.s diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/doc.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/doc.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/doc.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/doc.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/helpers.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/helpers.go similarity index 94% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/helpers.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/helpers.go index ed25071c..4a9ead12 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/helpers.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/helpers.go @@ -22,13 +22,13 @@ import ( "fmt" "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/arrow/scalar" - "github.com/apache/arrow/go/v14/internal/bitutils" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/arrow/scalar" + "github.com/apache/arrow-go/v18/internal/bitutils" "golang.org/x/exp/constraints" ) @@ -37,9 +37,9 @@ import ( // which will receive a slice containing the raw input data along with // a slice to populate for the output data. // -// Note that bool is not included in exec.FixedWidthTypes since it is +// Note that bool is not included in arrow.FixedWidthType since it is // represented as a bitmap, not as a slice of bool. -func ScalarUnary[OutT, Arg0T exec.FixedWidthTypes](op func(*exec.KernelCtx, []Arg0T, []OutT) error) exec.ArrayKernelExec { +func ScalarUnary[OutT, Arg0T arrow.FixedWidthType](op func(*exec.KernelCtx, []Arg0T, []OutT) error) exec.ArrayKernelExec { return func(ctx *exec.KernelCtx, in *exec.ExecSpan, out *exec.ExecResult) error { arg0 := in.Values[0].Array inData := exec.GetSpanValues[Arg0T](&arg0, 1) @@ -51,7 +51,7 @@ func ScalarUnary[OutT, Arg0T exec.FixedWidthTypes](op func(*exec.KernelCtx, []Ar // ScalarUnaryNotNull is for generating a kernel to operate only on the // non-null values in the input array. The zerovalue of the output type // is used for any null input values. -func ScalarUnaryNotNull[OutT, Arg0T exec.FixedWidthTypes](op func(*exec.KernelCtx, Arg0T, *error) OutT) exec.ArrayKernelExec { +func ScalarUnaryNotNull[OutT, Arg0T arrow.FixedWidthType](op func(*exec.KernelCtx, Arg0T, *error) OutT) exec.ArrayKernelExec { return func(ctx *exec.KernelCtx, in *exec.ExecSpan, out *exec.ExecResult) error { var ( arg0 = &in.Values[0].Array @@ -78,7 +78,7 @@ func ScalarUnaryNotNull[OutT, Arg0T exec.FixedWidthTypes](op func(*exec.KernelCt // ScalarUnaryBoolOutput is like ScalarUnary only it is for cases of boolean // output. The function should take in a slice of the input type and a slice // of bytes to fill with the output boolean bitmap. -func ScalarUnaryBoolOutput[Arg0T exec.FixedWidthTypes](op func(*exec.KernelCtx, []Arg0T, []byte) error) exec.ArrayKernelExec { +func ScalarUnaryBoolOutput[Arg0T arrow.FixedWidthType](op func(*exec.KernelCtx, []Arg0T, []byte) error) exec.ArrayKernelExec { return func(ctx *exec.KernelCtx, in *exec.ExecSpan, out *exec.ExecResult) error { arg0 := in.Values[0].Array inData := exec.GetSpanValues[Arg0T](&arg0, 1) @@ -127,7 +127,7 @@ func ScalarUnaryNotNullBinaryArgBoolOut[OffsetT int32 | int64](defVal bool, op f // It implements the handling to iterate the offsets and values calling // the provided function on each byte slice. The zero value of the OutT // will be used as the output for elements of the input that are null. -func ScalarUnaryNotNullBinaryArg[OutT exec.FixedWidthTypes, OffsetT int32 | int64](op func(*exec.KernelCtx, []byte, *error) OutT) exec.ArrayKernelExec { +func ScalarUnaryNotNullBinaryArg[OutT arrow.FixedWidthType, OffsetT int32 | int64](op func(*exec.KernelCtx, []byte, *error) OutT) exec.ArrayKernelExec { return func(ctx *exec.KernelCtx, in *exec.ExecSpan, out *exec.ExecResult) error { var ( arg0 = &in.Values[0].Array @@ -156,14 +156,14 @@ func ScalarUnaryNotNullBinaryArg[OutT exec.FixedWidthTypes, OffsetT int32 | int6 // ScalarUnaryBoolArg is like ScalarUnary except it specifically expects a // function that takes a byte slice since booleans arrays are represented // as a bitmap. -func ScalarUnaryBoolArg[OutT exec.FixedWidthTypes](op func(*exec.KernelCtx, []byte, []OutT) error) exec.ArrayKernelExec { +func ScalarUnaryBoolArg[OutT arrow.FixedWidthType](op func(*exec.KernelCtx, []byte, []OutT) error) exec.ArrayKernelExec { return func(ctx *exec.KernelCtx, input *exec.ExecSpan, out *exec.ExecResult) error { outData := exec.GetSpanValues[OutT](out, 1) return op(ctx, input.Values[0].Array.Buffers[1].Buf, outData) } } -func UnboxScalar[T exec.FixedWidthTypes](val scalar.PrimitiveScalar) T { +func UnboxScalar[T arrow.FixedWidthType](val scalar.PrimitiveScalar) T { return *(*T)(unsafe.Pointer(&val.Data()[0])) } @@ -174,11 +174,11 @@ func UnboxBinaryScalar(val scalar.BinaryScalar) []byte { return val.Data() } -type arrArrFn[OutT, Arg0T, Arg1T exec.FixedWidthTypes] func(*exec.KernelCtx, []Arg0T, []Arg1T, []OutT) error -type arrScalarFn[OutT, Arg0T, Arg1T exec.FixedWidthTypes] func(*exec.KernelCtx, []Arg0T, Arg1T, []OutT) error -type scalarArrFn[OutT, Arg0T, Arg1T exec.FixedWidthTypes] func(*exec.KernelCtx, Arg0T, []Arg1T, []OutT) error +type arrArrFn[OutT, Arg0T, Arg1T arrow.FixedWidthType] func(*exec.KernelCtx, []Arg0T, []Arg1T, []OutT) error +type arrScalarFn[OutT, Arg0T, Arg1T arrow.FixedWidthType] func(*exec.KernelCtx, []Arg0T, Arg1T, []OutT) error +type scalarArrFn[OutT, Arg0T, Arg1T arrow.FixedWidthType] func(*exec.KernelCtx, Arg0T, []Arg1T, []OutT) error -type binaryOps[OutT, Arg0T, Arg1T exec.FixedWidthTypes] struct { +type binaryOps[OutT, Arg0T, Arg1T arrow.FixedWidthType] struct { arrArr arrArrFn[OutT, Arg0T, Arg1T] arrScalar arrScalarFn[OutT, Arg0T, Arg1T] scalarArr scalarArrFn[OutT, Arg0T, Arg1T] @@ -190,7 +190,7 @@ type binaryBoolOps struct { scalarArr func(ctx *exec.KernelCtx, lhs bool, rhs, out bitutil.Bitmap) error } -func ScalarBinary[OutT, Arg0T, Arg1T exec.FixedWidthTypes](ops binaryOps[OutT, Arg0T, Arg1T]) exec.ArrayKernelExec { +func ScalarBinary[OutT, Arg0T, Arg1T arrow.FixedWidthType](ops binaryOps[OutT, Arg0T, Arg1T]) exec.ArrayKernelExec { arrayArray := func(ctx *exec.KernelCtx, arg0, arg1 *exec.ArraySpan, out *exec.ExecResult) error { var ( a0 = exec.GetSpanValues[Arg0T](arg0, 1) @@ -281,7 +281,7 @@ func ScalarBinaryBools(ops *binaryBoolOps) exec.ArrayKernelExec { } } -func ScalarBinaryNotNull[OutT, Arg0T, Arg1T exec.FixedWidthTypes](op func(*exec.KernelCtx, Arg0T, Arg1T, *error) OutT) exec.ArrayKernelExec { +func ScalarBinaryNotNull[OutT, Arg0T, Arg1T arrow.FixedWidthType](op func(*exec.KernelCtx, Arg0T, Arg1T, *error) OutT) exec.ArrayKernelExec { arrayArray := func(ctx *exec.KernelCtx, arg0, arg1 *exec.ArraySpan, out *exec.ExecResult) (err error) { // fast path if one side is entirely null if arg0.UpdateNullCount() == arg0.Len || arg1.UpdateNullCount() == arg1.Len { @@ -379,7 +379,7 @@ func ScalarBinaryNotNull[OutT, Arg0T, Arg1T exec.FixedWidthTypes](op func(*exec. } } -type binaryBinOp[T exec.FixedWidthTypes | bool] func(ctx *exec.KernelCtx, arg0, arg1 []byte) T +type binaryBinOp[T arrow.FixedWidthType | bool] func(ctx *exec.KernelCtx, arg0, arg1 []byte) T func ScalarBinaryBinaryArgsBoolOut(itrFn func(*exec.ArraySpan) exec.ArrayIter[[]byte], op binaryBinOp[bool]) exec.ArrayKernelExec { arrArr := func(ctx *exec.KernelCtx, arg0, arg1 *exec.ArraySpan, out *exec.ExecResult) error { @@ -577,7 +577,7 @@ func intsCanFit(data *exec.ArraySpan, target arrow.Type) error { } } -func intsInRange[T exec.IntTypes | exec.UintTypes](data *exec.ArraySpan, lowerBound, upperBound T) error { +func intsInRange[T arrow.IntType | arrow.UintType](data *exec.ArraySpan, lowerBound, upperBound T) error { if MinOf[T]() >= lowerBound && MaxOf[T]() <= upperBound { return nil } @@ -653,7 +653,7 @@ func intsInRange[T exec.IntTypes | exec.UintTypes](data *exec.ArraySpan, lowerBo } type numeric interface { - exec.IntTypes | exec.UintTypes | constraints.Float + arrow.IntType | arrow.UintType | constraints.Float } func memCpySpan[T numeric](in, out *exec.ArraySpan) { @@ -883,12 +883,12 @@ func (bldr *execBufBuilder) finish() (buf *memory.Buffer) { return } -type bufferBuilder[T exec.FixedWidthTypes] struct { +type bufferBuilder[T arrow.FixedWidthType] struct { execBufBuilder zero T } -func newBufferBuilder[T exec.FixedWidthTypes](mem memory.Allocator) *bufferBuilder[T] { +func newBufferBuilder[T arrow.FixedWidthType](mem memory.Allocator) *bufferBuilder[T] { return &bufferBuilder[T]{ execBufBuilder: execBufBuilder{ mem: mem, @@ -901,11 +901,11 @@ func (b *bufferBuilder[T]) reserve(additional int) { } func (b *bufferBuilder[T]) unsafeAppend(value T) { - b.execBufBuilder.unsafeAppend(exec.GetBytes([]T{value})) + b.execBufBuilder.unsafeAppend(arrow.GetBytes([]T{value})) } func (b *bufferBuilder[T]) unsafeAppendSlice(values []T) { - b.execBufBuilder.unsafeAppend(exec.GetBytes(values)) + b.execBufBuilder.unsafeAppend(arrow.GetBytes(values)) } func (b *bufferBuilder[T]) len() int { return b.sz / int(unsafe.Sizeof(b.zero)) } @@ -914,7 +914,7 @@ func (b *bufferBuilder[T]) cap() int { return cap(b.data) / int(unsafe.Sizeof(b.zero)) } -func checkIndexBoundsImpl[T exec.IntTypes | exec.UintTypes](values *exec.ArraySpan, upperLimit uint64) error { +func checkIndexBoundsImpl[T arrow.IntType | arrow.UintType](values *exec.ArraySpan, upperLimit uint64) error { // for unsigned integers, if the values array is larger // than the maximum index value, then there's no need to bounds check isSigned := !arrow.IsUnsignedInteger(values.Type.ID()) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/numeric_cast.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/numeric_cast.go similarity index 94% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/numeric_cast.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/numeric_cast.go index 8e535075..1e76709e 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/numeric_cast.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/numeric_cast.go @@ -23,13 +23,13 @@ import ( "strconv" "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/decimal128" - "github.com/apache/arrow/go/v14/arrow/decimal256" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/internal/bitutils" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/decimal256" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/internal/bitutils" "golang.org/x/exp/constraints" ) @@ -69,13 +69,13 @@ func CastIntegerToFloating(ctx *exec.KernelCtx, batch *exec.ExecSpan, out *exec. return nil } -type decimal[T exec.DecimalTypes] interface { +type decimal[T decimal128.Num | decimal256.Num] interface { Less(T) bool GreaterEqual(T) bool LowBits() uint64 } -func decimalToIntImpl[InT exec.DecimalTypes, OutT exec.IntTypes | exec.UintTypes](allowOverflow bool, min, max InT, v decimal[InT], err *error) OutT { +func decimalToIntImpl[InT decimal128.Num | decimal256.Num, OutT arrow.IntType | arrow.UintType](allowOverflow bool, min, max InT, v decimal[InT], err *error) OutT { if !allowOverflow && (v.Less(min) || v.GreaterEqual(max)) { debug.Log("integer value out of bounds from decimal") *err = fmt.Errorf("%w: integer value out of bounds", arrow.ErrInvalid) @@ -84,7 +84,7 @@ func decimalToIntImpl[InT exec.DecimalTypes, OutT exec.IntTypes | exec.UintTypes return OutT(v.LowBits()) } -func CastDecimal256ToInteger[T exec.IntTypes | exec.UintTypes](ctx *exec.KernelCtx, batch *exec.ExecSpan, out *exec.ExecResult) error { +func CastDecimal256ToInteger[T arrow.IntType | arrow.UintType](ctx *exec.KernelCtx, batch *exec.ExecSpan, out *exec.ExecResult) error { var ( opts = ctx.State.(CastState) inputType = batch.Values[0].Type().(*arrow.Decimal256Type) @@ -125,7 +125,7 @@ func CastDecimal256ToInteger[T exec.IntTypes | exec.UintTypes](ctx *exec.KernelC return ex(ctx, batch, out) } -func CastDecimal128ToInteger[T exec.IntTypes | exec.UintTypes](ctx *exec.KernelCtx, batch *exec.ExecSpan, out *exec.ExecResult) error { +func CastDecimal128ToInteger[T arrow.IntType | arrow.UintType](ctx *exec.KernelCtx, batch *exec.ExecSpan, out *exec.ExecResult) error { var ( opts = ctx.State.(CastState) inputType = batch.Values[0].Type().(*arrow.Decimal128Type) @@ -166,7 +166,7 @@ func CastDecimal128ToInteger[T exec.IntTypes | exec.UintTypes](ctx *exec.KernelC return ex(ctx, batch, out) } -func integerToDecimal128[T exec.IntTypes | exec.UintTypes](inType arrow.Type, outScale int32) exec.ArrayKernelExec { +func integerToDecimal128[T arrow.IntType | arrow.UintType](inType arrow.Type, outScale int32) exec.ArrayKernelExec { var getDecimal func(v T) decimal128.Num switch inType { case arrow.UINT8, arrow.UINT16, arrow.UINT32, arrow.UINT64: @@ -183,7 +183,7 @@ func integerToDecimal128[T exec.IntTypes | exec.UintTypes](inType arrow.Type, ou }) } -func integerToDecimal256[T exec.IntTypes | exec.UintTypes](inType arrow.Type, outScale int32) exec.ArrayKernelExec { +func integerToDecimal256[T arrow.IntType | arrow.UintType](inType arrow.Type, outScale int32) exec.ArrayKernelExec { var getDecimal func(v T) decimal256.Num switch inType { case arrow.UINT8, arrow.UINT16, arrow.UINT32, arrow.UINT64: @@ -200,7 +200,7 @@ func integerToDecimal256[T exec.IntTypes | exec.UintTypes](inType arrow.Type, ou }) } -func CastIntegerToDecimal[OutT exec.DecimalTypes, Arg0 exec.IntTypes | exec.UintTypes](ctx *exec.KernelCtx, batch *exec.ExecSpan, out *exec.ExecResult) error { +func CastIntegerToDecimal[OutT decimal128.Num | decimal256.Num, Arg0 arrow.IntType | arrow.UintType](ctx *exec.KernelCtx, batch *exec.ExecSpan, out *exec.ExecResult) error { var ( precision, scale int32 executor exec.ArrayKernelExec @@ -234,7 +234,7 @@ func CastIntegerToDecimal[OutT exec.DecimalTypes, Arg0 exec.IntTypes | exec.Uint return executor(ctx, batch, out) } -func getCastIntToDecimal[T exec.DecimalTypes](inType arrow.Type) exec.ArrayKernelExec { +func getCastIntToDecimal[T decimal128.Num | decimal256.Num](inType arrow.Type) exec.ArrayKernelExec { switch inType { case arrow.UINT8: return CastIntegerToDecimal[T, uint8] @@ -543,7 +543,7 @@ func boolToNum[T numeric](_ *exec.KernelCtx, in []byte, out []T) error { return nil } -func checkFloatTrunc[InT constraints.Float, OutT exec.IntTypes | exec.UintTypes](in, out *exec.ArraySpan) error { +func checkFloatTrunc[InT constraints.Float, OutT arrow.IntType | arrow.UintType](in, out *exec.ArraySpan) error { wasTrunc := func(out OutT, in InT) bool { return InT(out) != in } @@ -665,7 +665,7 @@ func checkIntToFloatTrunc(in *exec.ArraySpan, outType arrow.Type) error { return nil } -func parseStringToNumberImpl[T exec.IntTypes | exec.UintTypes | exec.FloatTypes, OffsetT int32 | int64](parseFn func(string) (T, error)) exec.ArrayKernelExec { +func parseStringToNumberImpl[T arrow.IntType | arrow.UintType | arrow.FloatType, OffsetT int32 | int64](parseFn func(string) (T, error)) exec.ArrayKernelExec { return ScalarUnaryNotNullBinaryArg[T, OffsetT](func(_ *exec.KernelCtx, in []byte, err *error) T { st := *(*string)(unsafe.Pointer(&in)) v, e := parseFn(st) @@ -749,7 +749,7 @@ func addCommonNumberCasts[T numeric](outTy arrow.DataType, kernels []exec.Scalar return kernels } -func GetCastToInteger[T exec.IntTypes | exec.UintTypes](outType arrow.DataType) []exec.ScalarKernel { +func GetCastToInteger[T arrow.IntType | arrow.UintType](outType arrow.DataType) []exec.ScalarKernel { kernels := make([]exec.ScalarKernel, 0) output := exec.NewOutputType(outType) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/rounding.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/rounding.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/rounding.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/rounding.go index 2f58a9fa..46b68f3c 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/rounding.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/rounding.go @@ -22,11 +22,11 @@ import ( "fmt" "math" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/decimal128" - "github.com/apache/arrow/go/v14/arrow/decimal256" - "github.com/apache/arrow/go/v14/arrow/scalar" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/decimal256" + "github.com/apache/arrow-go/v18/arrow/scalar" "golang.org/x/exp/constraints" ) @@ -619,7 +619,7 @@ func (rnd *roundToMultipleDec[T]) call(_ *exec.KernelCtx, arg T, e *error) T { if rnd.mode >= HalfDown { if rnd.hasHalfwayPoint && (remainder == rnd.halfMult || remainder == rnd.negHalfMult) { // on the halfway point, use tiebreaker - // manually implement rounding since we're not actually rounding + // manually implement rounding since we aren't actually rounding // a decimal value, but rather manipulating the multiple switch rnd.mode { case HalfDown: @@ -666,7 +666,7 @@ func (rnd *roundToMultipleDec[T]) call(_ *exec.KernelCtx, arg T, e *error) T { } } } else { - // manually implement rounding since we're not actually rounding + // manually implement rounding since we aren't actually rounding // a decimal value, but rather manipulating the multiple switch rnd.mode { case RoundDown: diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/roundmode_string.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/roundmode_string.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/roundmode_string.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/roundmode_string.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_arithmetic.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_arithmetic.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_arithmetic.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_arithmetic.go index 9cb32ae6..cfcdd1cf 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_arithmetic.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_arithmetic.go @@ -22,13 +22,13 @@ import ( "fmt" "time" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/decimal128" - "github.com/apache/arrow/go/v14/arrow/decimal256" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/scalar" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/decimal256" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/scalar" ) // scalar kernel that ignores (assumed all-null inputs) and returns null @@ -254,7 +254,7 @@ func GetBitwiseBinaryKernels(op BitwiseOp) []exec.ScalarKernel { return append(kernels, NullExecKernel(2)) } -func bitwiseNot[T exec.IntTypes | exec.UintTypes](_ *exec.KernelCtx, arg T, _ *error) T { +func bitwiseNot[T arrow.IntType | arrow.UintType](_ *exec.KernelCtx, arg T, _ *error) T { return ^arg } @@ -290,7 +290,7 @@ const ( ShiftRight ) -func shiftKernelSignedImpl[T exec.IntTypes, Unsigned exec.UintTypes](dir ShiftDir, checked bool) exec.ArrayKernelExec { +func shiftKernelSignedImpl[T arrow.IntType, Unsigned arrow.UintType](dir ShiftDir, checked bool) exec.ArrayKernelExec { errShift := fmt.Errorf("%w: shift amount must be >= 0 and less than precision of type", arrow.ErrInvalid) maxShift := T(8*SizeOf[T]() - 1) @@ -334,7 +334,7 @@ func shiftKernelSignedImpl[T exec.IntTypes, Unsigned exec.UintTypes](dir ShiftDi return nil } -func shiftKernelUnsignedImpl[T exec.UintTypes](dir ShiftDir, checked bool) exec.ArrayKernelExec { +func shiftKernelUnsignedImpl[T arrow.UintType](dir ShiftDir, checked bool) exec.ArrayKernelExec { errShift := fmt.Errorf("%w: shift amount must be >= 0 and less than precision of type", arrow.ErrInvalid) maxShift := T(8 * SizeOf[T]()) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_boolean.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_boolean.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_boolean.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_boolean.go index 812f4ad1..cc5d0aec 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_boolean.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_boolean.go @@ -19,9 +19,9 @@ package kernels import ( - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/scalar" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/scalar" ) type computeWordFN func(leftTrue, leftFalse, rightTrue, rightFalse uint64) (outValid, outData uint64) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparison_amd64.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparison_amd64.go similarity index 94% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparison_amd64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparison_amd64.go index 585d1bff..7e66fbf2 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparison_amd64.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparison_amd64.go @@ -21,8 +21,7 @@ package kernels import ( "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow" "golang.org/x/sys/cpu" ) @@ -32,12 +31,12 @@ type cmpfn func(arrow.Type, []byte, []byte, []byte, int64, int) var comparisonMap map[CompareOperator][3]cmpfn -func genCompareKernel[T exec.NumericTypes](op CompareOperator) *CompareData { +func genCompareKernel[T arrow.NumericType](op CompareOperator) *CompareData { if pureGo { return genGoCompareKernel(getCmpOp[T](op)) } - ty := exec.GetType[T]() + ty := arrow.GetType[T]() byteWidth := int(unsafe.Sizeof(T(0))) comparisonFns := comparisonMap[op] return &CompareData{ diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparison_avx2_amd64.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparison_avx2_amd64.go similarity index 99% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparison_avx2_amd64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparison_avx2_amd64.go index 86817905..d1c235f8 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparison_avx2_amd64.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparison_avx2_amd64.go @@ -21,7 +21,7 @@ package kernels import ( "unsafe" - "github.com/apache/arrow/go/v14/arrow" + "github.com/apache/arrow-go/v18/arrow" ) //go:noescape diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparison_avx2_amd64.s b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparison_avx2_amd64.s similarity index 88% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparison_avx2_amd64.s rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparison_avx2_amd64.s index bfc999b8..30246a22 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparison_avx2_amd64.s +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparison_avx2_amd64.s @@ -1,4 +1,4 @@ -//go:build go1.18 && !noasm && !appengine +//+build !noasm !appengine // AUTO-GENERATED BY C2GOASM -- DO NOT EDIT TEXT ·_comparison_equal_arr_arr_avx2(SB), $80-48 @@ -11,8 +11,9 @@ TEXT ·_comparison_equal_arr_arr_avx2(SB), $80-48 MOVQ offset+40(FP), R9 ADDQ $8, SP - WORD $0x894d; BYTE $0xc3 // mov r11, r8 - WORD $0x8949; BYTE $0xce // mov r14, rcx + WORD $0x8944; BYTE $0xc8 // mov eax, r9d + WORD $0x894d; BYTE $0xc6 // mov r14, r8 + WORD $0x8949; BYTE $0xcc // mov r12, rcx WORD $0xff83; BYTE $0x06 // cmp edi, 6 JG LBB0_29 WORD $0xff83; BYTE $0x03 // cmp edi, 3 @@ -23,16 +24,16 @@ TEXT ·_comparison_equal_arr_arr_avx2(SB), $80-48 JE LBB0_79 WORD $0xff83; BYTE $0x06 // cmp edi, 6 JNE LBB0_123 - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_22 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB0_20: WORD $0x0e8b // mov ecx, dword [rsi] @@ -45,7 +46,7 @@ LBB0_20: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -54,49 +55,49 @@ LBB0_20: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB0_20 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_22: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_26 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB0_24: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0x068b // mov eax, dword [rsi] WORD $0x4e8b; BYTE $0x04 // mov ecx, dword [rsi + 4] WORD $0x023b // cmp eax, dword [rdx] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] WORD $0x4a3b; BYTE $0x04 // cmp ecx, dword [rdx + 4] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] WORD $0x468b; BYTE $0x08 // mov eax, dword [rsi + 8] WORD $0x423b; BYTE $0x08 // cmp eax, dword [rdx + 8] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] + LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] WORD $0x468b; BYTE $0x0c // mov eax, dword [rsi + 12] WORD $0x423b; BYTE $0x0c // cmp eax, dword [rdx + 12] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] + LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] WORD $0x468b; BYTE $0x10 // mov eax, dword [rsi + 16] WORD $0x423b; BYTE $0x10 // cmp eax, dword [rdx + 16] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] WORD $0x468b; BYTE $0x14 // mov eax, dword [rsi + 20] WORD $0x423b; BYTE $0x14 // cmp eax, dword [rdx + 20] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + LONG $0x2454940f; BYTE $0x03 // sete byte [rsp + 3] WORD $0x468b; BYTE $0x18 // mov eax, dword [rsi + 24] WORD $0x423b; BYTE $0x18 // cmp eax, dword [rdx + 24] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] + LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] WORD $0x468b; BYTE $0x1c // mov eax, dword [rsi + 28] WORD $0x423b; BYTE $0x1c // cmp eax, dword [rdx + 28] LONG $0xd5940f41 // sete r13b WORD $0x468b; BYTE $0x20 // mov eax, dword [rsi + 32] WORD $0x423b; BYTE $0x20 // cmp eax, dword [rdx + 32] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] WORD $0x468b; BYTE $0x24 // mov eax, dword [rsi + 36] WORD $0x423b; BYTE $0x24 // cmp eax, dword [rdx + 36] LONG $0xd0940f41 // sete r8b @@ -108,165 +109,165 @@ LBB0_24: LONG $0xd7940f41 // sete r15b WORD $0x468b; BYTE $0x30 // mov eax, dword [rsi + 48] WORD $0x423b; BYTE $0x30 // cmp eax, dword [rdx + 48] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] + LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] WORD $0x468b; BYTE $0x34 // mov eax, dword [rsi + 52] WORD $0x423b; BYTE $0x34 // cmp eax, dword [rdx + 52] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] + LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] WORD $0x468b; BYTE $0x38 // mov eax, dword [rsi + 56] WORD $0x423b; BYTE $0x38 // cmp eax, dword [rdx + 56] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] WORD $0x468b; BYTE $0x3c // mov eax, dword [rsi + 60] WORD $0x423b; BYTE $0x3c // cmp eax, dword [rdx + 60] - WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0xd7940f40 // sete dil WORD $0x468b; BYTE $0x40 // mov eax, dword [rsi + 64] - WORD $0x4e8b; BYTE $0x44 // mov ecx, dword [rsi + 68] + WORD $0x5e8b; BYTE $0x44 // mov ebx, dword [rsi + 68] WORD $0x423b; BYTE $0x40 // cmp eax, dword [rdx + 64] WORD $0x468b; BYTE $0x48 // mov eax, dword [rsi + 72] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] - WORD $0x4a3b; BYTE $0x44 // cmp ecx, dword [rdx + 68] - WORD $0x4e8b; BYTE $0x4c // mov ecx, dword [rsi + 76] + LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + WORD $0x5a3b; BYTE $0x44 // cmp ebx, dword [rdx + 68] + WORD $0x5e8b; BYTE $0x4c // mov ebx, dword [rsi + 76] LONG $0xd2940f41 // sete r10b WORD $0x423b; BYTE $0x48 // cmp eax, dword [rdx + 72] WORD $0x468b; BYTE $0x50 // mov eax, dword [rsi + 80] LONG $0xd6940f41 // sete r14b - WORD $0x4a3b; BYTE $0x4c // cmp ecx, dword [rdx + 76] - WORD $0x4e8b; BYTE $0x54 // mov ecx, dword [rsi + 84] + WORD $0x5a3b; BYTE $0x4c // cmp ebx, dword [rdx + 76] + WORD $0x5e8b; BYTE $0x54 // mov ebx, dword [rsi + 84] LONG $0xd4940f41 // sete r12b WORD $0x423b; BYTE $0x50 // cmp eax, dword [rdx + 80] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] - WORD $0x4a3b; BYTE $0x54 // cmp ecx, dword [rdx + 84] + LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + WORD $0x5a3b; BYTE $0x54 // cmp ebx, dword [rdx + 84] WORD $0x468b; BYTE $0x58 // mov eax, dword [rsi + 88] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] WORD $0x423b; BYTE $0x58 // cmp eax, dword [rdx + 88] WORD $0x468b; BYTE $0x5c // mov eax, dword [rsi + 92] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] + LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] WORD $0x423b; BYTE $0x5c // cmp eax, dword [rdx + 92] WORD $0x468b; BYTE $0x60 // mov eax, dword [rsi + 96] LONG $0xd1940f41 // sete r9b WORD $0x423b; BYTE $0x60 // cmp eax, dword [rdx + 96] WORD $0x468b; BYTE $0x64 // mov eax, dword [rsi + 100] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] + LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] WORD $0x423b; BYTE $0x64 // cmp eax, dword [rdx + 100] WORD $0x468b; BYTE $0x68 // mov eax, dword [rsi + 104] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] + LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] WORD $0x423b; BYTE $0x68 // cmp eax, dword [rdx + 104] WORD $0x468b; BYTE $0x6c // mov eax, dword [rsi + 108] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] + LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] WORD $0x423b; BYTE $0x6c // cmp eax, dword [rdx + 108] WORD $0x468b; BYTE $0x70 // mov eax, dword [rsi + 112] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] WORD $0x423b; BYTE $0x70 // cmp eax, dword [rdx + 112] WORD $0x468b; BYTE $0x74 // mov eax, dword [rsi + 116] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] WORD $0x423b; BYTE $0x74 // cmp eax, dword [rdx + 116] WORD $0x468b; BYTE $0x78 // mov eax, dword [rsi + 120] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] + LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] WORD $0x423b; BYTE $0x78 // cmp eax, dword [rdx + 120] WORD $0x468b; BYTE $0x7c // mov eax, dword [rsi + 124] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] + LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x80ee8348 // sub rsi, -128 WORD $0x423b; BYTE $0x7c // cmp eax, dword [rdx + 124] - LONG $0xd7940f40 // sete dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x940f; BYTE $0xd1 // sete cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x80c28148; WORD $0x0000; BYTE $0x00 // add rdx, 128 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB0_24 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB0_26: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_28: @@ -277,16 +278,16 @@ LBB0_28: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB0_28 JMP LBB0_123 @@ -299,266 +300,361 @@ LBB0_29: JE LBB0_112 WORD $0xff83; BYTE $0x0c // cmp edi, 12 JNE LBB0_123 - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_50 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x634c; BYTE $0xd0 // movsxd r10, eax LBB0_48: LONG $0x0610fbc5 // vmovsd xmm0, qword [rsi] LONG $0x08c68348 // add rsi, 8 LONG $0x022ef9c5 // vucomisd xmm0, qword [rdx] LONG $0x08528d48 // lea rdx, [rdx + 8] - LONG $0xd2940f41 // sete r10b - WORD $0xf641; BYTE $0xda // neg r10b - LONG $0x07788d48 // lea rdi, [rax + 7] - WORD $0x8548; BYTE $0xc0 // test rax, rax - LONG $0xf8490f48 // cmovns rdi, rax + WORD $0x9b0f; BYTE $0xd1 // setnp cl + WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0xcb20 // and bl, cl + WORD $0xdbf6 // neg bl + LONG $0x077a8d49 // lea rdi, [r10 + 7] + WORD $0x854d; BYTE $0xd2 // test r10, r10 + LONG $0xfa490f49 // cmovns rdi, r10 LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] - WORD $0x3045; BYTE $0xc2 // xor r10b, r8b + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] + WORD $0x3044; BYTE $0xc3 // xor bl, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] - WORD $0xc189 // mov ecx, eax + WORD $0x8944; BYTE $0xd1 // mov ecx, r10d WORD $0x2944; BYTE $0xc9 // sub ecx, r9d - LONG $0x000001bb; BYTE $0x00 // mov ebx, 1 - WORD $0xe3d3 // shl ebx, cl - WORD $0x2044; BYTE $0xd3 // and bl, r10b - WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl - LONG $0x01c08348 // add rax, 1 - LONG $0x08f88348 // cmp rax, 8 + LONG $0x000001b8; BYTE $0x00 // mov eax, 1 + WORD $0xe0d3 // shl eax, cl + WORD $0xd820 // and al, bl + WORD $0x3044; BYTE $0xc0 // xor al, r8b + LONG $0x3c048841 // mov byte [r12 + rdi], al + LONG $0x01c28349 // add r10, 1 + LONG $0x08fa8349 // cmp r10, 8 JNE LBB0_48 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_50: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_54 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 - LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 + LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 LBB0_52: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 LONG $0x0610fbc5 // vmovsd xmm0, qword [rsi] - LONG $0x4e10fbc5; BYTE $0x08 // vmovsd xmm1, qword [rsi + 8] LONG $0x022ef9c5 // vucomisd xmm0, qword [rdx] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] - LONG $0x4a2ef9c5; BYTE $0x08 // vucomisd xmm1, qword [rdx + 8] - WORD $0x940f; BYTE $0xd0 // sete al + LONG $0x4610fbc5; BYTE $0x08 // vmovsd xmm0, qword [rsi + 8] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x15244c88 // mov byte [rsp + 21], cl + LONG $0x422ef9c5; BYTE $0x08 // vucomisd xmm0, qword [rdx + 8] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0d244c88 // mov byte [rsp + 13], cl LONG $0x4610fbc5; BYTE $0x10 // vmovsd xmm0, qword [rsi + 16] LONG $0x422ef9c5; BYTE $0x10 // vucomisd xmm0, qword [rdx + 16] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x14244c88 // mov byte [rsp + 20], cl LONG $0x4610fbc5; BYTE $0x18 // vmovsd xmm0, qword [rsi + 24] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] LONG $0x422ef9c5; BYTE $0x18 // vucomisd xmm0, qword [rdx + 24] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x17244c88 // mov byte [rsp + 23], cl LONG $0x4610fbc5; BYTE $0x20 // vmovsd xmm0, qword [rsi + 32] LONG $0x422ef9c5; BYTE $0x20 // vucomisd xmm0, qword [rdx + 32] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x16244c88 // mov byte [rsp + 22], cl LONG $0x4610fbc5; BYTE $0x28 // vmovsd xmm0, qword [rsi + 40] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] LONG $0x422ef9c5; BYTE $0x28 // vucomisd xmm0, qword [rdx + 40] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f40 // sete dil + WORD $0x2040; BYTE $0xc7 // and dil, al LONG $0x4610fbc5; BYTE $0x30 // vmovsd xmm0, qword [rsi + 48] LONG $0x422ef9c5; BYTE $0x30 // vucomisd xmm0, qword [rdx + 48] - LONG $0x4610fbc5; BYTE $0x38 // vmovsd xmm0, qword [rsi + 56] + WORD $0x9b0f; BYTE $0xd0 // setnp al LONG $0xd5940f41 // sete r13b + WORD $0x2041; BYTE $0xc5 // and r13b, al + LONG $0x4610fbc5; BYTE $0x38 // vmovsd xmm0, qword [rsi + 56] LONG $0x422ef9c5; BYTE $0x38 // vucomisd xmm0, qword [rdx + 56] - LONG $0xd7940f41 // sete r15b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x03244c88 // mov byte [rsp + 3], cl LONG $0x4610fbc5; BYTE $0x40 // vmovsd xmm0, qword [rsi + 64] LONG $0x422ef9c5; BYTE $0x40 // vucomisd xmm0, qword [rdx + 64] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x13244c88 // mov byte [rsp + 19], cl LONG $0x4610fbc5; BYTE $0x48 // vmovsd xmm0, qword [rsi + 72] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0x422ef9c5; BYTE $0x48 // vucomisd xmm0, qword [rdx + 72] - WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0xc320 // and bl, al LONG $0x4610fbc5; BYTE $0x50 // vmovsd xmm0, qword [rsi + 80] LONG $0x422ef9c5; BYTE $0x50 // vucomisd xmm0, qword [rdx + 80] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x12244c88 // mov byte [rsp + 18], cl LONG $0x4610fbc5; BYTE $0x58 // vmovsd xmm0, qword [rsi + 88] - LONG $0xd1940f41 // sete r9b LONG $0x422ef9c5; BYTE $0x58 // vucomisd xmm0, qword [rdx + 88] - LONG $0xd3940f41 // sete r11b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x11244c88 // mov byte [rsp + 17], cl LONG $0x4610fbc5; BYTE $0x60 // vmovsd xmm0, qword [rsi + 96] LONG $0x422ef9c5; BYTE $0x60 // vucomisd xmm0, qword [rdx + 96] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x10244c88 // mov byte [rsp + 16], cl LONG $0x4610fbc5; BYTE $0x68 // vmovsd xmm0, qword [rsi + 104] - LONG $0xd2940f41 // sete r10b LONG $0x422ef9c5; BYTE $0x68 // vucomisd xmm0, qword [rdx + 104] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0f244c88 // mov byte [rsp + 15], cl LONG $0x4610fbc5; BYTE $0x70 // vmovsd xmm0, qword [rsi + 112] LONG $0x422ef9c5; BYTE $0x70 // vucomisd xmm0, qword [rdx + 112] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0c244c88 // mov byte [rsp + 12], cl LONG $0x4610fbc5; BYTE $0x78 // vmovsd xmm0, qword [rsi + 120] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] LONG $0x422ef9c5; BYTE $0x78 // vucomisd xmm0, qword [rdx + 120] - WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0b244c88 // mov byte [rsp + 11], cl QUAD $0x000000808610fbc5 // vmovsd xmm0, qword [rsi + 128] QUAD $0x00000080822ef9c5 // vucomisd xmm0, qword [rdx + 128] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0e244c88 // mov byte [rsp + 14], cl QUAD $0x000000888610fbc5 // vmovsd xmm0, qword [rsi + 136] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] QUAD $0x00000088822ef9c5 // vucomisd xmm0, qword [rdx + 136] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0a244c88 // mov byte [rsp + 10], cl QUAD $0x000000908610fbc5 // vmovsd xmm0, qword [rsi + 144] - LONG $0xd6940f41 // sete r14b QUAD $0x00000090822ef9c5 // vucomisd xmm0, qword [rdx + 144] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x09244c88 // mov byte [rsp + 9], cl QUAD $0x000000988610fbc5 // vmovsd xmm0, qword [rsi + 152] - LONG $0xd4940f41 // sete r12b QUAD $0x00000098822ef9c5 // vucomisd xmm0, qword [rdx + 152] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd6940f41 // sete r14b + WORD $0x2041; BYTE $0xc6 // and r14b, al QUAD $0x000000a08610fbc5 // vmovsd xmm0, qword [rsi + 160] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] QUAD $0x000000a0822ef9c5 // vucomisd xmm0, qword [rdx + 160] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x08244c88 // mov byte [rsp + 8], cl QUAD $0x000000a88610fbc5 // vmovsd xmm0, qword [rsi + 168] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] QUAD $0x000000a8822ef9c5 // vucomisd xmm0, qword [rdx + 168] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x07244c88 // mov byte [rsp + 7], cl QUAD $0x000000b08610fbc5 // vmovsd xmm0, qword [rsi + 176] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] QUAD $0x000000b0822ef9c5 // vucomisd xmm0, qword [rdx + 176] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x05244c88 // mov byte [rsp + 5], cl QUAD $0x000000b88610fbc5 // vmovsd xmm0, qword [rsi + 184] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] QUAD $0x000000b8822ef9c5 // vucomisd xmm0, qword [rdx + 184] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f41 // sete r15b + WORD $0x2041; BYTE $0xc7 // and r15b, al QUAD $0x000000c08610fbc5 // vmovsd xmm0, qword [rsi + 192] - LONG $0xd0940f41 // sete r8b QUAD $0x000000c0822ef9c5 // vucomisd xmm0, qword [rdx + 192] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x06244c88 // mov byte [rsp + 6], cl QUAD $0x000000c88610fbc5 // vmovsd xmm0, qword [rsi + 200] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] QUAD $0x000000c8822ef9c5 // vucomisd xmm0, qword [rdx + 200] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl QUAD $0x000000d08610fbc5 // vmovsd xmm0, qword [rsi + 208] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] QUAD $0x000000d0822ef9c5 // vucomisd xmm0, qword [rdx + 208] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd3940f41 // sete r11b + WORD $0x2041; BYTE $0xc3 // and r11b, al QUAD $0x000000d88610fbc5 // vmovsd xmm0, qword [rsi + 216] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] QUAD $0x000000d8822ef9c5 // vucomisd xmm0, qword [rdx + 216] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd2940f41 // sete r10b + WORD $0x2041; BYTE $0xc2 // and r10b, al QUAD $0x000000e08610fbc5 // vmovsd xmm0, qword [rsi + 224] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] QUAD $0x000000e0822ef9c5 // vucomisd xmm0, qword [rdx + 224] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x04244c88 // mov byte [rsp + 4], cl QUAD $0x000000e88610fbc5 // vmovsd xmm0, qword [rsi + 232] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] QUAD $0x000000e8822ef9c5 // vucomisd xmm0, qword [rdx + 232] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl QUAD $0x000000f08610fbc5 // vmovsd xmm0, qword [rsi + 240] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] QUAD $0x000000f0822ef9c5 // vucomisd xmm0, qword [rdx + 240] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd1940f41 // sete r9b + WORD $0x2041; BYTE $0xc1 // and r9b, al QUAD $0x000000f88610fbc5 // vmovsd xmm0, qword [rsi + 248] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 QUAD $0x000000f8822ef9c5 // vucomisd xmm0, qword [rdx + 248] - LONG $0xd7940f40 // sete dil + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd0940f41 // sete r8b + WORD $0x2041; BYTE $0xc0 // and r8b, al + LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] WORD $0xc000 // add al, al - LONG $0x04244402 // add al, byte [rsp + 4] + LONG $0x15244402 // add al, byte [rsp + 21] + LONG $0x05e7c040 // shl dil, 5 LONG $0x06e5c041 // shl r13b, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0845; BYTE $0xef // or r15b, r13b - LONG $0x6cb60f44; WORD $0x0524 // movzx r13d, byte [rsp + 5] - LONG $0x02e5c041 // shl r13b, 2 - WORD $0x0841; BYTE $0xc5 // or r13b, al - WORD $0x8944; BYTE $0xe8 // mov eax, r13d - WORD $0xc900 // add cl, cl - LONG $0x08244c02 // add cl, byte [rsp + 8] + WORD $0x0841; BYTE $0xfd // or r13b, dil + WORD $0x8944; BYTE $0xef // mov edi, r13d + LONG $0x244cb60f; BYTE $0x14 // movzx ecx, byte [rsp + 20] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xc108 // or cl, al + WORD $0xd889 // mov eax, ebx + WORD $0xd800 // add al, bl + LONG $0x13244402 // add al, byte [rsp + 19] + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x2444b60f; BYTE $0x03 // movzx eax, byte [rsp + 3] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x03244488 // mov byte [rsp + 3], al + LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x17 // movzx eax, byte [rsp + 23] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + LONG $0x245cb60f; BYTE $0x11 // movzx ebx, byte [rsp + 17] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0840; BYTE $0xfb // or bl, dil LONG $0x6cb60f44; WORD $0x1624 // movzx r13d, byte [rsp + 22] - LONG $0x03e5c041 // shl r13b, 3 + LONG $0x04e5c041 // shl r13b, 4 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0x0844; BYTE $0xe9 // or cl, r13b - WORD $0x8941; BYTE $0xcd // mov r13d, ecx - LONG $0x03e3c041 // shl r11b, 3 - WORD $0x0845; BYTE $0xcb // or r11b, r9b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xe9 // or cl, r13b - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xda // or r10b, r11b - LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0844; BYTE $0xd0 // or al, r10b - LONG $0x4cb60f44; WORD $0x0624 // movzx r9d, byte [rsp + 6] - LONG $0x06e1c041 // shl r9b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xcb // or bl, r9b - WORD $0x0841; BYTE $0xcf // or r15b, cl - WORD $0xc308 // or bl, al - WORD $0x0045; BYTE $0xf6 // add r14b, r14b - LONG $0x24740244; BYTE $0x0e // add r14b, byte [rsp + 14] - LONG $0x02e4c041 // shl r12b, 2 - WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0a // movzx eax, byte [rsp + 10] + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc789 // mov edi, eax + LONG $0x245cb60f; BYTE $0x0f // movzx ebx, byte [rsp + 15] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x3e // mov byte [r14], r15b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x0a // movzx ebx, byte [rsp + 10] + WORD $0xdb00 // add bl, bl + LONG $0x0e245c02 // add bl, byte [rsp + 14] + LONG $0x244cb60f; BYTE $0x09 // movzx ecx, byte [rsp + 9] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xd908 // or cl, bl + LONG $0x03e6c041 // shl r14b, 3 + WORD $0x0841; BYTE $0xce // or r14b, cl + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xf3 // or bl, r14b + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x74b60f44; WORD $0x0324 // movzx r14d, byte [rsp + 3] + WORD $0x0845; BYTE $0xee // or r14b, r13b + LONG $0x6cb60f44; WORD $0x0724 // movzx r13d, byte [rsp + 7] + LONG $0x05e5c041 // shl r13b, 5 + LONG $0x244cb60f; BYTE $0x05 // movzx ecx, byte [rsp + 5] WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x0844; BYTE $0xe9 // or cl, r13b + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x07e7c041 // shl r15b, 7 + WORD $0x0841; BYTE $0xcf // or r15b, cl + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] + WORD $0xc900 // add cl, cl + LONG $0x06244c02 // add cl, byte [rsp + 6] + LONG $0x02e3c041 // shl r11b, 2 + WORD $0x0841; BYTE $0xcb // or r11b, cl + LONG $0x03e2c041 // shl r10b, 3 + WORD $0x0845; BYTE $0xda // or r10b, r11b + LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0x0844; BYTE $0xd1 // or cl, r10b + LONG $0x24348845 // mov byte [r12], r14b + LONG $0x245cb60f; BYTE $0x28 // movzx ebx, byte [rsp + 40] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e1c041 // shl r9b, 6 + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x24448841; BYTE $0x01 // mov byte [r12 + 1], al LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xc8 // or r8b, r9b WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl - WORD $0x0841; BYTE $0xc0 // or r8b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x14244402 // add al, byte [rsp + 20] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x13 // movzx ecx, byte [rsp + 19] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xc108 // or cl, al - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xc7 // or dil, al - WORD $0x0840; BYTE $0xcf // or dil, cl - LONG $0x02468845 // mov byte [r14 + 2], r8b - LONG $0x037e8841 // mov byte [r14 + 3], dil + LONG $0x247c8845; BYTE $0x02 // mov byte [r12 + 2], r15b + LONG $0x24448845; BYTE $0x03 // mov byte [r12 + 3], r8b LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff28 // add qword [rsp + 40], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 JNE LBB0_52 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] LBB0_54: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_56: + LONG $0x01498d4c // lea r9, [rcx + 1] LONG $0x0410fbc5; BYTE $0xce // vmovsd xmm0, qword [rsi + 8*rcx] LONG $0x042ef9c5; BYTE $0xca // vucomisd xmm0, qword [rdx + 8*rcx] - LONG $0x01418d4c // lea r8, [rcx + 1] - WORD $0x940f; BYTE $0xd3 // sete bl - WORD $0xdbf6 // neg bl + WORD $0x9b0f; BYTE $0xd3 // setnp bl + WORD $0x940f; BYTE $0xd0 // sete al + WORD $0xd820 // and al, bl + WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] - WORD $0x3044; BYTE $0xcb // xor bl, r9b + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] + WORD $0x3044; BYTE $0xc0 // xor al, r8b WORD $0xe180; BYTE $0x07 // and cl, 7 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0xd820 // and al, bl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al - WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xc3 // xor bl, r8b + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl + WORD $0x894c; BYTE $0xc9 // mov rcx, r9 + WORD $0x394d; BYTE $0xce // cmp r14, r9 JNE LBB0_56 JMP LBB0_123 @@ -567,16 +663,16 @@ LBB0_2: JE LBB0_57 WORD $0xff83; BYTE $0x03 // cmp edi, 3 JNE LBB0_123 - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_8 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB0_6: WORD $0xb60f; BYTE $0x0e // movzx ecx, byte [rsi] @@ -589,7 +685,7 @@ LBB0_6: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -598,49 +694,49 @@ LBB0_6: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB0_6 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_8: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_12 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 + LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 LBB0_10: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0xb60f; BYTE $0x06 // movzx eax, byte [rsi] LONG $0x014eb60f // movzx ecx, byte [rsi + 1] WORD $0x023a // cmp al, byte [rdx] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] WORD $0x4a3a; BYTE $0x01 // cmp cl, byte [rdx + 1] - WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x940f; BYTE $0xd3 // sete bl LONG $0x0246b60f // movzx eax, byte [rsi + 2] WORD $0x423a; BYTE $0x02 // cmp al, byte [rdx + 2] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] + LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] LONG $0x0346b60f // movzx eax, byte [rsi + 3] WORD $0x423a; BYTE $0x03 // cmp al, byte [rdx + 3] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] + LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] LONG $0x0446b60f // movzx eax, byte [rsi + 4] WORD $0x423a; BYTE $0x04 // cmp al, byte [rdx + 4] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] LONG $0x0546b60f // movzx eax, byte [rsi + 5] WORD $0x423a; BYTE $0x05 // cmp al, byte [rdx + 5] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + LONG $0x2454940f; BYTE $0x03 // sete byte [rsp + 3] LONG $0x0646b60f // movzx eax, byte [rsi + 6] WORD $0x423a; BYTE $0x06 // cmp al, byte [rdx + 6] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] + LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] LONG $0x0746b60f // movzx eax, byte [rsi + 7] WORD $0x423a; BYTE $0x07 // cmp al, byte [rdx + 7] LONG $0xd7940f41 // sete r15b LONG $0x0846b60f // movzx eax, byte [rsi + 8] WORD $0x423a; BYTE $0x08 // cmp al, byte [rdx + 8] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0x0946b60f // movzx eax, byte [rsi + 9] WORD $0x423a; BYTE $0x09 // cmp al, byte [rdx + 9] LONG $0xd7940f40 // sete dil @@ -655,16 +751,16 @@ LBB0_10: LONG $0xd6940f41 // sete r14b LONG $0x0d46b60f // movzx eax, byte [rsi + 13] WORD $0x423a; BYTE $0x0d // cmp al, byte [rdx + 13] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] + LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] LONG $0x0e46b60f // movzx eax, byte [rsi + 14] WORD $0x423a; BYTE $0x0e // cmp al, byte [rdx + 14] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] + LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] LONG $0x0f46b60f // movzx eax, byte [rsi + 15] WORD $0x423a; BYTE $0x0f // cmp al, byte [rdx + 15] - WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0xd0940f41 // sete r8b LONG $0x1046b60f // movzx eax, byte [rsi + 16] WORD $0x423a; BYTE $0x10 // cmp al, byte [rdx + 16] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] + LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] LONG $0x1146b60f // movzx eax, byte [rsi + 17] WORD $0x423a; BYTE $0x11 // cmp al, byte [rdx + 17] LONG $0xd4940f41 // sete r12b @@ -673,144 +769,144 @@ LBB0_10: LONG $0xd5940f41 // sete r13b LONG $0x1346b60f // movzx eax, byte [rsi + 19] WORD $0x423a; BYTE $0x13 // cmp al, byte [rdx + 19] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] + LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] LONG $0x1446b60f // movzx eax, byte [rsi + 20] WORD $0x423a; BYTE $0x14 // cmp al, byte [rdx + 20] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] LONG $0x1546b60f // movzx eax, byte [rsi + 21] WORD $0x423a; BYTE $0x15 // cmp al, byte [rdx + 21] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] + LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] LONG $0x1646b60f // movzx eax, byte [rsi + 22] WORD $0x423a; BYTE $0x16 // cmp al, byte [rdx + 22] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] LONG $0x1746b60f // movzx eax, byte [rsi + 23] WORD $0x423a; BYTE $0x17 // cmp al, byte [rdx + 23] LONG $0xd1940f41 // sete r9b LONG $0x1846b60f // movzx eax, byte [rsi + 24] WORD $0x423a; BYTE $0x18 // cmp al, byte [rdx + 24] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] + LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] LONG $0x1946b60f // movzx eax, byte [rsi + 25] WORD $0x423a; BYTE $0x19 // cmp al, byte [rdx + 25] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] + LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] LONG $0x1a46b60f // movzx eax, byte [rsi + 26] WORD $0x423a; BYTE $0x1a // cmp al, byte [rdx + 26] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] + LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] LONG $0x1b46b60f // movzx eax, byte [rsi + 27] WORD $0x423a; BYTE $0x1b // cmp al, byte [rdx + 27] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0x1c46b60f // movzx eax, byte [rsi + 28] WORD $0x423a; BYTE $0x1c // cmp al, byte [rdx + 28] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] LONG $0x1d46b60f // movzx eax, byte [rsi + 29] WORD $0x423a; BYTE $0x1d // cmp al, byte [rdx + 29] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] + LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x1e46b60f // movzx eax, byte [rsi + 30] WORD $0x423a; BYTE $0x1e // cmp al, byte [rdx + 30] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] + LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] LONG $0x1f46b60f // movzx eax, byte [rsi + 31] LONG $0x20c68348 // add rsi, 32 WORD $0x423a; BYTE $0x1f // cmp al, byte [rdx + 31] - LONG $0xd0940f41 // sete r8b - WORD $0xc900 // add cl, cl - LONG $0x28244c02 // add cl, byte [rsp + 40] - WORD $0xc889 // mov eax, ecx - LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xdb00 // add bl, bl + LONG $0x04245c02 // add bl, byte [rsp + 4] + WORD $0xd889 // mov eax, ebx + LONG $0x245cb60f; BYTE $0x05 // movzx ebx, byte [rsp + 5] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xcf // or r15b, cl - LONG $0x244cb60f; BYTE $0x14 // movzx ecx, byte [rsp + 20] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x245cb60f; BYTE $0x15 // movzx ebx, byte [rsp + 21] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx WORD $0x0040; BYTE $0xff // add dil, dil - LONG $0x247c0240; BYTE $0x07 // add dil, byte [rsp + 7] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x247c0240; BYTE $0x08 // add dil, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e2c041 // shl r10b, 2 WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0xcf89 // mov edi, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0xdf89 // mov edi, ebx LONG $0x03e3c041 // shl r11b, 3 WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0840; BYTE $0xf9 // or cl, dil + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xfb // or bl, dil LONG $0x04e6c041 // shl r14b, 4 WORD $0x0845; BYTE $0xde // or r14b, r11b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x247cb60f; BYTE $0x06 // movzx edi, byte [rsp + 6] + LONG $0x247cb60f; BYTE $0x07 // movzx edi, byte [rsp + 7] LONG $0x06e7c040 // shl dil, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0840; BYTE $0xfb // or bl, dil - WORD $0x0841; BYTE $0xcf // or r15b, cl - WORD $0xc308 // or bl, al + LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + WORD $0x0841; BYTE $0xdf // or r15b, bl + WORD $0x0841; BYTE $0xc0 // or r8b, al WORD $0x0045; BYTE $0xe4 // add r12b, r12b - LONG $0x24640244; BYTE $0x0d // add r12b, byte [rsp + 13] + LONG $0x24640244; BYTE $0x0e // add r12b, byte [rsp + 14] LONG $0x02e5c041 // shl r13b, 2 WORD $0x0845; BYTE $0xe5 // or r13b, r12b - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xe8 // or al, r13b - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0a // movzx eax, byte [rsp + 10] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x3e // mov byte [r14], r15b - LONG $0x244cb60f; BYTE $0x0b // movzx ecx, byte [rsp + 11] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x243c8845 // mov byte [r12], r15b + LONG $0x245cb60f; BYTE $0x0c // movzx ebx, byte [rsp + 12] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x24448845; BYTE $0x01 // mov byte [r12 + 1], r8b WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] + LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x12 // movzx ecx, byte [rsp + 18] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xc8 // or r8b, cl - WORD $0x0841; BYTE $0xc0 // or r8b, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x03468845 // mov byte [r14 + 3], r8b + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x13 // movzx ebx, byte [rsp + 19] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x20c28348 // add rdx, 32 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff28 // add qword [rsp + 40], -1 JNE LBB0_10 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] LBB0_12: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_14: @@ -821,16 +917,16 @@ LBB0_14: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB0_14 JMP LBB0_123 @@ -839,16 +935,16 @@ LBB0_30: JE LBB0_90 WORD $0xff83; BYTE $0x08 // cmp edi, 8 JNE LBB0_123 - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_36 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB0_34: WORD $0x8b48; BYTE $0x0e // mov rcx, qword [rsi] @@ -861,7 +957,7 @@ LBB0_34: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -870,49 +966,49 @@ LBB0_34: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB0_34 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_36: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_40 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB0_38: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0x8b48; BYTE $0x06 // mov rax, qword [rsi] LONG $0x084e8b48 // mov rcx, qword [rsi + 8] WORD $0x3b48; BYTE $0x02 // cmp rax, qword [rdx] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] LONG $0x084a3b48 // cmp rcx, qword [rdx + 8] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] LONG $0x10468b48 // mov rax, qword [rsi + 16] LONG $0x10423b48 // cmp rax, qword [rdx + 16] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] + LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] LONG $0x18468b48 // mov rax, qword [rsi + 24] LONG $0x18423b48 // cmp rax, qword [rdx + 24] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] + LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] LONG $0x20468b48 // mov rax, qword [rsi + 32] LONG $0x20423b48 // cmp rax, qword [rdx + 32] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] LONG $0x28468b48 // mov rax, qword [rsi + 40] LONG $0x28423b48 // cmp rax, qword [rdx + 40] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + LONG $0x2454940f; BYTE $0x03 // sete byte [rsp + 3] LONG $0x30468b48 // mov rax, qword [rsi + 48] LONG $0x30423b48 // cmp rax, qword [rdx + 48] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] + LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] LONG $0x38468b48 // mov rax, qword [rsi + 56] LONG $0x38423b48 // cmp rax, qword [rdx + 56] LONG $0xd5940f41 // sete r13b LONG $0x40468b48 // mov rax, qword [rsi + 64] LONG $0x40423b48 // cmp rax, qword [rdx + 64] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] LONG $0x48468b48 // mov rax, qword [rsi + 72] LONG $0x48423b48 // cmp rax, qword [rdx + 72] LONG $0xd0940f41 // sete r8b @@ -924,165 +1020,165 @@ LBB0_38: LONG $0xd7940f41 // sete r15b LONG $0x60468b48 // mov rax, qword [rsi + 96] LONG $0x60423b48 // cmp rax, qword [rdx + 96] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] + LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] LONG $0x68468b48 // mov rax, qword [rsi + 104] LONG $0x68423b48 // cmp rax, qword [rdx + 104] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] + LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] LONG $0x70468b48 // mov rax, qword [rsi + 112] LONG $0x70423b48 // cmp rax, qword [rdx + 112] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0x78468b48 // mov rax, qword [rsi + 120] LONG $0x78423b48 // cmp rax, qword [rdx + 120] - WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0xd7940f40 // sete dil LONG $0x80868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 128] - LONG $0x888e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 136] + LONG $0x889e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 136] LONG $0x80823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 128] LONG $0x90868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 144] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] - LONG $0x888a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 136] - LONG $0x988e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 152] + LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x889a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 136] + LONG $0x989e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 152] LONG $0xd2940f41 // sete r10b LONG $0x90823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 144] LONG $0xa0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 160] LONG $0xd6940f41 // sete r14b - LONG $0x988a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 152] - LONG $0xa88e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 168] + LONG $0x989a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 152] + LONG $0xa89e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 168] LONG $0xd4940f41 // sete r12b LONG $0xa0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 160] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] - LONG $0xa88a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 168] + LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0xa89a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 168] LONG $0xb0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 176] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] LONG $0xb0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 176] LONG $0xb8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 184] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] + LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] LONG $0xb8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 184] LONG $0xc0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 192] LONG $0xd1940f41 // sete r9b LONG $0xc0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 192] LONG $0xc8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 200] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] + LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] LONG $0xc8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 200] LONG $0xd0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 208] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] + LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] LONG $0xd0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 208] LONG $0xd8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 216] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] + LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] LONG $0xd8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 216] LONG $0xe0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 224] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0xe0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 224] LONG $0xe8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 232] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] LONG $0xe8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 232] LONG $0xf0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 240] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] + LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] LONG $0xf0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 240] LONG $0xf8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 248] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] + LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 LONG $0xf8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 248] - LONG $0xd7940f40 // sete dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x940f; BYTE $0xd1 // sete cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB0_38 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB0_40: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_42: @@ -1093,30 +1189,30 @@ LBB0_42: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB0_42 JMP LBB0_123 LBB0_68: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_72 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB0_70: WORD $0xb70f; BYTE $0x0e // movzx ecx, word [rsi] @@ -1129,7 +1225,7 @@ LBB0_70: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -1138,49 +1234,49 @@ LBB0_70: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB0_70 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_72: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_76 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB0_74: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0xb70f; BYTE $0x06 // movzx eax, word [rsi] LONG $0x024eb70f // movzx ecx, word [rsi + 2] WORD $0x3b66; BYTE $0x02 // cmp ax, word [rdx] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] LONG $0x024a3b66 // cmp cx, word [rdx + 2] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] LONG $0x0446b70f // movzx eax, word [rsi + 4] LONG $0x04423b66 // cmp ax, word [rdx + 4] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] + LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] LONG $0x0646b70f // movzx eax, word [rsi + 6] LONG $0x06423b66 // cmp ax, word [rdx + 6] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] + LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] LONG $0x0846b70f // movzx eax, word [rsi + 8] LONG $0x08423b66 // cmp ax, word [rdx + 8] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] LONG $0x0a46b70f // movzx eax, word [rsi + 10] LONG $0x0a423b66 // cmp ax, word [rdx + 10] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + LONG $0x2454940f; BYTE $0x03 // sete byte [rsp + 3] LONG $0x0c46b70f // movzx eax, word [rsi + 12] LONG $0x0c423b66 // cmp ax, word [rdx + 12] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] + LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] LONG $0x0e46b70f // movzx eax, word [rsi + 14] LONG $0x0e423b66 // cmp ax, word [rdx + 14] LONG $0xd5940f41 // sete r13b LONG $0x1046b70f // movzx eax, word [rsi + 16] LONG $0x10423b66 // cmp ax, word [rdx + 16] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] LONG $0x1246b70f // movzx eax, word [rsi + 18] LONG $0x12423b66 // cmp ax, word [rdx + 18] LONG $0xd0940f41 // sete r8b @@ -1192,165 +1288,165 @@ LBB0_74: LONG $0xd7940f41 // sete r15b LONG $0x1846b70f // movzx eax, word [rsi + 24] LONG $0x18423b66 // cmp ax, word [rdx + 24] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] + LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] LONG $0x1a46b70f // movzx eax, word [rsi + 26] LONG $0x1a423b66 // cmp ax, word [rdx + 26] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] + LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] LONG $0x1c46b70f // movzx eax, word [rsi + 28] LONG $0x1c423b66 // cmp ax, word [rdx + 28] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0x1e46b70f // movzx eax, word [rsi + 30] LONG $0x1e423b66 // cmp ax, word [rdx + 30] - WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0xd7940f40 // sete dil LONG $0x2046b70f // movzx eax, word [rsi + 32] - LONG $0x224eb70f // movzx ecx, word [rsi + 34] + LONG $0x225eb70f // movzx ebx, word [rsi + 34] LONG $0x20423b66 // cmp ax, word [rdx + 32] LONG $0x2446b70f // movzx eax, word [rsi + 36] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] - LONG $0x224a3b66 // cmp cx, word [rdx + 34] - LONG $0x264eb70f // movzx ecx, word [rsi + 38] + LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x225a3b66 // cmp bx, word [rdx + 34] + LONG $0x265eb70f // movzx ebx, word [rsi + 38] LONG $0xd2940f41 // sete r10b LONG $0x24423b66 // cmp ax, word [rdx + 36] LONG $0x2846b70f // movzx eax, word [rsi + 40] LONG $0xd6940f41 // sete r14b - LONG $0x264a3b66 // cmp cx, word [rdx + 38] - LONG $0x2a4eb70f // movzx ecx, word [rsi + 42] + LONG $0x265a3b66 // cmp bx, word [rdx + 38] + LONG $0x2a5eb70f // movzx ebx, word [rsi + 42] LONG $0xd4940f41 // sete r12b LONG $0x28423b66 // cmp ax, word [rdx + 40] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] - LONG $0x2a4a3b66 // cmp cx, word [rdx + 42] + LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2a5a3b66 // cmp bx, word [rdx + 42] LONG $0x2c46b70f // movzx eax, word [rsi + 44] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] LONG $0x2c423b66 // cmp ax, word [rdx + 44] LONG $0x2e46b70f // movzx eax, word [rsi + 46] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] + LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] LONG $0x2e423b66 // cmp ax, word [rdx + 46] LONG $0x3046b70f // movzx eax, word [rsi + 48] LONG $0xd1940f41 // sete r9b LONG $0x30423b66 // cmp ax, word [rdx + 48] LONG $0x3246b70f // movzx eax, word [rsi + 50] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] + LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] LONG $0x32423b66 // cmp ax, word [rdx + 50] LONG $0x3446b70f // movzx eax, word [rsi + 52] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] + LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] LONG $0x34423b66 // cmp ax, word [rdx + 52] LONG $0x3646b70f // movzx eax, word [rsi + 54] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] + LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] LONG $0x36423b66 // cmp ax, word [rdx + 54] LONG $0x3846b70f // movzx eax, word [rsi + 56] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0x38423b66 // cmp ax, word [rdx + 56] LONG $0x3a46b70f // movzx eax, word [rsi + 58] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] LONG $0x3a423b66 // cmp ax, word [rdx + 58] LONG $0x3c46b70f // movzx eax, word [rsi + 60] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] + LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] LONG $0x3c423b66 // cmp ax, word [rdx + 60] LONG $0x3e46b70f // movzx eax, word [rsi + 62] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] + LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x40c68348 // add rsi, 64 LONG $0x3e423b66 // cmp ax, word [rdx + 62] - LONG $0xd7940f40 // sete dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x940f; BYTE $0xd1 // sete cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x40c28348 // add rdx, 64 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB0_74 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB0_76: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_78: @@ -1361,30 +1457,30 @@ LBB0_78: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB0_78 JMP LBB0_123 LBB0_79: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_83 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB0_81: WORD $0xb70f; BYTE $0x0e // movzx ecx, word [rsi] @@ -1397,7 +1493,7 @@ LBB0_81: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -1406,49 +1502,49 @@ LBB0_81: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB0_81 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_83: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_87 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB0_85: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0xb70f; BYTE $0x06 // movzx eax, word [rsi] LONG $0x024eb70f // movzx ecx, word [rsi + 2] WORD $0x3b66; BYTE $0x02 // cmp ax, word [rdx] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] LONG $0x024a3b66 // cmp cx, word [rdx + 2] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] LONG $0x0446b70f // movzx eax, word [rsi + 4] LONG $0x04423b66 // cmp ax, word [rdx + 4] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] + LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] LONG $0x0646b70f // movzx eax, word [rsi + 6] LONG $0x06423b66 // cmp ax, word [rdx + 6] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] + LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] LONG $0x0846b70f // movzx eax, word [rsi + 8] LONG $0x08423b66 // cmp ax, word [rdx + 8] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] LONG $0x0a46b70f // movzx eax, word [rsi + 10] LONG $0x0a423b66 // cmp ax, word [rdx + 10] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + LONG $0x2454940f; BYTE $0x03 // sete byte [rsp + 3] LONG $0x0c46b70f // movzx eax, word [rsi + 12] LONG $0x0c423b66 // cmp ax, word [rdx + 12] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] + LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] LONG $0x0e46b70f // movzx eax, word [rsi + 14] LONG $0x0e423b66 // cmp ax, word [rdx + 14] LONG $0xd5940f41 // sete r13b LONG $0x1046b70f // movzx eax, word [rsi + 16] LONG $0x10423b66 // cmp ax, word [rdx + 16] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] LONG $0x1246b70f // movzx eax, word [rsi + 18] LONG $0x12423b66 // cmp ax, word [rdx + 18] LONG $0xd0940f41 // sete r8b @@ -1460,165 +1556,165 @@ LBB0_85: LONG $0xd7940f41 // sete r15b LONG $0x1846b70f // movzx eax, word [rsi + 24] LONG $0x18423b66 // cmp ax, word [rdx + 24] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] + LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] LONG $0x1a46b70f // movzx eax, word [rsi + 26] LONG $0x1a423b66 // cmp ax, word [rdx + 26] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] + LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] LONG $0x1c46b70f // movzx eax, word [rsi + 28] LONG $0x1c423b66 // cmp ax, word [rdx + 28] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0x1e46b70f // movzx eax, word [rsi + 30] LONG $0x1e423b66 // cmp ax, word [rdx + 30] - WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0xd7940f40 // sete dil LONG $0x2046b70f // movzx eax, word [rsi + 32] - LONG $0x224eb70f // movzx ecx, word [rsi + 34] + LONG $0x225eb70f // movzx ebx, word [rsi + 34] LONG $0x20423b66 // cmp ax, word [rdx + 32] LONG $0x2446b70f // movzx eax, word [rsi + 36] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] - LONG $0x224a3b66 // cmp cx, word [rdx + 34] - LONG $0x264eb70f // movzx ecx, word [rsi + 38] + LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x225a3b66 // cmp bx, word [rdx + 34] + LONG $0x265eb70f // movzx ebx, word [rsi + 38] LONG $0xd2940f41 // sete r10b LONG $0x24423b66 // cmp ax, word [rdx + 36] LONG $0x2846b70f // movzx eax, word [rsi + 40] LONG $0xd6940f41 // sete r14b - LONG $0x264a3b66 // cmp cx, word [rdx + 38] - LONG $0x2a4eb70f // movzx ecx, word [rsi + 42] + LONG $0x265a3b66 // cmp bx, word [rdx + 38] + LONG $0x2a5eb70f // movzx ebx, word [rsi + 42] LONG $0xd4940f41 // sete r12b LONG $0x28423b66 // cmp ax, word [rdx + 40] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] - LONG $0x2a4a3b66 // cmp cx, word [rdx + 42] + LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2a5a3b66 // cmp bx, word [rdx + 42] LONG $0x2c46b70f // movzx eax, word [rsi + 44] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] LONG $0x2c423b66 // cmp ax, word [rdx + 44] LONG $0x2e46b70f // movzx eax, word [rsi + 46] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] + LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] LONG $0x2e423b66 // cmp ax, word [rdx + 46] LONG $0x3046b70f // movzx eax, word [rsi + 48] LONG $0xd1940f41 // sete r9b LONG $0x30423b66 // cmp ax, word [rdx + 48] LONG $0x3246b70f // movzx eax, word [rsi + 50] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] + LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] LONG $0x32423b66 // cmp ax, word [rdx + 50] LONG $0x3446b70f // movzx eax, word [rsi + 52] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] + LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] LONG $0x34423b66 // cmp ax, word [rdx + 52] LONG $0x3646b70f // movzx eax, word [rsi + 54] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] + LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] LONG $0x36423b66 // cmp ax, word [rdx + 54] LONG $0x3846b70f // movzx eax, word [rsi + 56] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0x38423b66 // cmp ax, word [rdx + 56] LONG $0x3a46b70f // movzx eax, word [rsi + 58] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] LONG $0x3a423b66 // cmp ax, word [rdx + 58] LONG $0x3c46b70f // movzx eax, word [rsi + 60] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] + LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] LONG $0x3c423b66 // cmp ax, word [rdx + 60] LONG $0x3e46b70f // movzx eax, word [rsi + 62] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] + LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x40c68348 // add rsi, 64 LONG $0x3e423b66 // cmp ax, word [rdx + 62] - LONG $0xd7940f40 // sete dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x940f; BYTE $0xd1 // sete cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x40c28348 // add rdx, 64 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB0_85 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB0_87: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_89: @@ -1629,30 +1725,30 @@ LBB0_89: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB0_89 JMP LBB0_123 LBB0_101: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_105 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB0_103: WORD $0x8b48; BYTE $0x0e // mov rcx, qword [rsi] @@ -1665,7 +1761,7 @@ LBB0_103: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -1674,49 +1770,49 @@ LBB0_103: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB0_103 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_105: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_109 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB0_107: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0x8b48; BYTE $0x06 // mov rax, qword [rsi] LONG $0x084e8b48 // mov rcx, qword [rsi + 8] WORD $0x3b48; BYTE $0x02 // cmp rax, qword [rdx] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] LONG $0x084a3b48 // cmp rcx, qword [rdx + 8] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] LONG $0x10468b48 // mov rax, qword [rsi + 16] LONG $0x10423b48 // cmp rax, qword [rdx + 16] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] + LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] LONG $0x18468b48 // mov rax, qword [rsi + 24] LONG $0x18423b48 // cmp rax, qword [rdx + 24] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] + LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] LONG $0x20468b48 // mov rax, qword [rsi + 32] LONG $0x20423b48 // cmp rax, qword [rdx + 32] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] LONG $0x28468b48 // mov rax, qword [rsi + 40] LONG $0x28423b48 // cmp rax, qword [rdx + 40] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + LONG $0x2454940f; BYTE $0x03 // sete byte [rsp + 3] LONG $0x30468b48 // mov rax, qword [rsi + 48] LONG $0x30423b48 // cmp rax, qword [rdx + 48] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] + LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] LONG $0x38468b48 // mov rax, qword [rsi + 56] LONG $0x38423b48 // cmp rax, qword [rdx + 56] LONG $0xd5940f41 // sete r13b LONG $0x40468b48 // mov rax, qword [rsi + 64] LONG $0x40423b48 // cmp rax, qword [rdx + 64] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] LONG $0x48468b48 // mov rax, qword [rsi + 72] LONG $0x48423b48 // cmp rax, qword [rdx + 72] LONG $0xd0940f41 // sete r8b @@ -1728,165 +1824,165 @@ LBB0_107: LONG $0xd7940f41 // sete r15b LONG $0x60468b48 // mov rax, qword [rsi + 96] LONG $0x60423b48 // cmp rax, qword [rdx + 96] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] + LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] LONG $0x68468b48 // mov rax, qword [rsi + 104] LONG $0x68423b48 // cmp rax, qword [rdx + 104] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] + LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] LONG $0x70468b48 // mov rax, qword [rsi + 112] LONG $0x70423b48 // cmp rax, qword [rdx + 112] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0x78468b48 // mov rax, qword [rsi + 120] LONG $0x78423b48 // cmp rax, qword [rdx + 120] - WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0xd7940f40 // sete dil LONG $0x80868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 128] - LONG $0x888e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 136] + LONG $0x889e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 136] LONG $0x80823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 128] LONG $0x90868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 144] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] - LONG $0x888a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 136] - LONG $0x988e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 152] + LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x889a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 136] + LONG $0x989e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 152] LONG $0xd2940f41 // sete r10b LONG $0x90823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 144] LONG $0xa0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 160] LONG $0xd6940f41 // sete r14b - LONG $0x988a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 152] - LONG $0xa88e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 168] + LONG $0x989a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 152] + LONG $0xa89e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 168] LONG $0xd4940f41 // sete r12b LONG $0xa0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 160] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] - LONG $0xa88a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 168] + LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0xa89a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 168] LONG $0xb0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 176] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] LONG $0xb0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 176] LONG $0xb8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 184] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] + LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] LONG $0xb8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 184] LONG $0xc0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 192] LONG $0xd1940f41 // sete r9b LONG $0xc0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 192] LONG $0xc8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 200] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] + LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] LONG $0xc8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 200] LONG $0xd0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 208] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] + LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] LONG $0xd0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 208] LONG $0xd8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 216] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] + LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] LONG $0xd8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 216] LONG $0xe0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 224] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0xe0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 224] LONG $0xe8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 232] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] LONG $0xe8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 232] LONG $0xf0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 240] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] + LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] LONG $0xf0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 240] LONG $0xf8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 248] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] + LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 LONG $0xf8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 248] - LONG $0xd7940f40 // sete dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x940f; BYTE $0xd1 // sete cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB0_107 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB0_109: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_111: @@ -1897,294 +1993,389 @@ LBB0_111: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB0_111 JMP LBB0_123 LBB0_112: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_116 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x634c; BYTE $0xd0 // movsxd r10, eax LBB0_114: LONG $0x0610fac5 // vmovss xmm0, dword [rsi] LONG $0x04c68348 // add rsi, 4 LONG $0x022ef8c5 // vucomiss xmm0, dword [rdx] LONG $0x04528d48 // lea rdx, [rdx + 4] - LONG $0xd2940f41 // sete r10b - WORD $0xf641; BYTE $0xda // neg r10b - LONG $0x07788d48 // lea rdi, [rax + 7] - WORD $0x8548; BYTE $0xc0 // test rax, rax - LONG $0xf8490f48 // cmovns rdi, rax + WORD $0x9b0f; BYTE $0xd1 // setnp cl + WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0xcb20 // and bl, cl + WORD $0xdbf6 // neg bl + LONG $0x077a8d49 // lea rdi, [r10 + 7] + WORD $0x854d; BYTE $0xd2 // test r10, r10 + LONG $0xfa490f49 // cmovns rdi, r10 LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] - WORD $0x3045; BYTE $0xc2 // xor r10b, r8b + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] + WORD $0x3044; BYTE $0xc3 // xor bl, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] - WORD $0xc189 // mov ecx, eax + WORD $0x8944; BYTE $0xd1 // mov ecx, r10d WORD $0x2944; BYTE $0xc9 // sub ecx, r9d - LONG $0x000001bb; BYTE $0x00 // mov ebx, 1 - WORD $0xe3d3 // shl ebx, cl - WORD $0x2044; BYTE $0xd3 // and bl, r10b - WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl - LONG $0x01c08348 // add rax, 1 - LONG $0x08f88348 // cmp rax, 8 + LONG $0x000001b8; BYTE $0x00 // mov eax, 1 + WORD $0xe0d3 // shl eax, cl + WORD $0xd820 // and al, bl + WORD $0x3044; BYTE $0xc0 // xor al, r8b + LONG $0x3c048841 // mov byte [r12 + rdi], al + LONG $0x01c28349 // add r10, 1 + LONG $0x08fa8349 // cmp r10, 8 JNE LBB0_114 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_116: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_120 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 - LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 + LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 LBB0_118: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 LONG $0x0610fac5 // vmovss xmm0, dword [rsi] - LONG $0x4e10fac5; BYTE $0x04 // vmovss xmm1, dword [rsi + 4] LONG $0x022ef8c5 // vucomiss xmm0, dword [rdx] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] - LONG $0x4a2ef8c5; BYTE $0x04 // vucomiss xmm1, dword [rdx + 4] - WORD $0x940f; BYTE $0xd0 // sete al + LONG $0x4610fac5; BYTE $0x04 // vmovss xmm0, dword [rsi + 4] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x15244c88 // mov byte [rsp + 21], cl + LONG $0x422ef8c5; BYTE $0x04 // vucomiss xmm0, dword [rdx + 4] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0d244c88 // mov byte [rsp + 13], cl LONG $0x4610fac5; BYTE $0x08 // vmovss xmm0, dword [rsi + 8] LONG $0x422ef8c5; BYTE $0x08 // vucomiss xmm0, dword [rdx + 8] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x14244c88 // mov byte [rsp + 20], cl LONG $0x4610fac5; BYTE $0x0c // vmovss xmm0, dword [rsi + 12] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] LONG $0x422ef8c5; BYTE $0x0c // vucomiss xmm0, dword [rdx + 12] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x17244c88 // mov byte [rsp + 23], cl LONG $0x4610fac5; BYTE $0x10 // vmovss xmm0, dword [rsi + 16] LONG $0x422ef8c5; BYTE $0x10 // vucomiss xmm0, dword [rdx + 16] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x16244c88 // mov byte [rsp + 22], cl LONG $0x4610fac5; BYTE $0x14 // vmovss xmm0, dword [rsi + 20] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] LONG $0x422ef8c5; BYTE $0x14 // vucomiss xmm0, dword [rdx + 20] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f40 // sete dil + WORD $0x2040; BYTE $0xc7 // and dil, al LONG $0x4610fac5; BYTE $0x18 // vmovss xmm0, dword [rsi + 24] LONG $0x422ef8c5; BYTE $0x18 // vucomiss xmm0, dword [rdx + 24] - LONG $0x4610fac5; BYTE $0x1c // vmovss xmm0, dword [rsi + 28] + WORD $0x9b0f; BYTE $0xd0 // setnp al LONG $0xd5940f41 // sete r13b + WORD $0x2041; BYTE $0xc5 // and r13b, al + LONG $0x4610fac5; BYTE $0x1c // vmovss xmm0, dword [rsi + 28] LONG $0x422ef8c5; BYTE $0x1c // vucomiss xmm0, dword [rdx + 28] - LONG $0xd7940f41 // sete r15b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x03244c88 // mov byte [rsp + 3], cl LONG $0x4610fac5; BYTE $0x20 // vmovss xmm0, dword [rsi + 32] LONG $0x422ef8c5; BYTE $0x20 // vucomiss xmm0, dword [rdx + 32] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x13244c88 // mov byte [rsp + 19], cl LONG $0x4610fac5; BYTE $0x24 // vmovss xmm0, dword [rsi + 36] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0x422ef8c5; BYTE $0x24 // vucomiss xmm0, dword [rdx + 36] - WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0xc320 // and bl, al LONG $0x4610fac5; BYTE $0x28 // vmovss xmm0, dword [rsi + 40] LONG $0x422ef8c5; BYTE $0x28 // vucomiss xmm0, dword [rdx + 40] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x12244c88 // mov byte [rsp + 18], cl LONG $0x4610fac5; BYTE $0x2c // vmovss xmm0, dword [rsi + 44] - LONG $0xd1940f41 // sete r9b LONG $0x422ef8c5; BYTE $0x2c // vucomiss xmm0, dword [rdx + 44] - LONG $0xd3940f41 // sete r11b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x11244c88 // mov byte [rsp + 17], cl LONG $0x4610fac5; BYTE $0x30 // vmovss xmm0, dword [rsi + 48] LONG $0x422ef8c5; BYTE $0x30 // vucomiss xmm0, dword [rdx + 48] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x10244c88 // mov byte [rsp + 16], cl LONG $0x4610fac5; BYTE $0x34 // vmovss xmm0, dword [rsi + 52] - LONG $0xd2940f41 // sete r10b LONG $0x422ef8c5; BYTE $0x34 // vucomiss xmm0, dword [rdx + 52] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0f244c88 // mov byte [rsp + 15], cl LONG $0x4610fac5; BYTE $0x38 // vmovss xmm0, dword [rsi + 56] LONG $0x422ef8c5; BYTE $0x38 // vucomiss xmm0, dword [rdx + 56] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0c244c88 // mov byte [rsp + 12], cl LONG $0x4610fac5; BYTE $0x3c // vmovss xmm0, dword [rsi + 60] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] LONG $0x422ef8c5; BYTE $0x3c // vucomiss xmm0, dword [rdx + 60] - WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0b244c88 // mov byte [rsp + 11], cl LONG $0x4610fac5; BYTE $0x40 // vmovss xmm0, dword [rsi + 64] LONG $0x422ef8c5; BYTE $0x40 // vucomiss xmm0, dword [rdx + 64] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0e244c88 // mov byte [rsp + 14], cl LONG $0x4610fac5; BYTE $0x44 // vmovss xmm0, dword [rsi + 68] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] LONG $0x422ef8c5; BYTE $0x44 // vucomiss xmm0, dword [rdx + 68] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0a244c88 // mov byte [rsp + 10], cl LONG $0x4610fac5; BYTE $0x48 // vmovss xmm0, dword [rsi + 72] - LONG $0xd6940f41 // sete r14b LONG $0x422ef8c5; BYTE $0x48 // vucomiss xmm0, dword [rdx + 72] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x09244c88 // mov byte [rsp + 9], cl LONG $0x4610fac5; BYTE $0x4c // vmovss xmm0, dword [rsi + 76] - LONG $0xd4940f41 // sete r12b LONG $0x422ef8c5; BYTE $0x4c // vucomiss xmm0, dword [rdx + 76] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd3940f41 // sete r11b + WORD $0x2041; BYTE $0xc3 // and r11b, al LONG $0x4610fac5; BYTE $0x50 // vmovss xmm0, dword [rsi + 80] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] LONG $0x422ef8c5; BYTE $0x50 // vucomiss xmm0, dword [rdx + 80] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x08244c88 // mov byte [rsp + 8], cl LONG $0x4610fac5; BYTE $0x54 // vmovss xmm0, dword [rsi + 84] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] LONG $0x422ef8c5; BYTE $0x54 // vucomiss xmm0, dword [rdx + 84] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x07244c88 // mov byte [rsp + 7], cl LONG $0x4610fac5; BYTE $0x58 // vmovss xmm0, dword [rsi + 88] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] LONG $0x422ef8c5; BYTE $0x58 // vucomiss xmm0, dword [rdx + 88] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x05244c88 // mov byte [rsp + 5], cl LONG $0x4610fac5; BYTE $0x5c // vmovss xmm0, dword [rsi + 92] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] LONG $0x422ef8c5; BYTE $0x5c // vucomiss xmm0, dword [rdx + 92] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd2940f41 // sete r10b + WORD $0x2041; BYTE $0xc2 // and r10b, al LONG $0x4610fac5; BYTE $0x60 // vmovss xmm0, dword [rsi + 96] - LONG $0xd0940f41 // sete r8b LONG $0x422ef8c5; BYTE $0x60 // vucomiss xmm0, dword [rdx + 96] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x06244c88 // mov byte [rsp + 6], cl LONG $0x4610fac5; BYTE $0x64 // vmovss xmm0, dword [rsi + 100] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] LONG $0x422ef8c5; BYTE $0x64 // vucomiss xmm0, dword [rdx + 100] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl LONG $0x4610fac5; BYTE $0x68 // vmovss xmm0, dword [rsi + 104] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] LONG $0x422ef8c5; BYTE $0x68 // vucomiss xmm0, dword [rdx + 104] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f41 // sete r15b + WORD $0x2041; BYTE $0xc7 // and r15b, al LONG $0x4610fac5; BYTE $0x6c // vmovss xmm0, dword [rsi + 108] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] LONG $0x422ef8c5; BYTE $0x6c // vucomiss xmm0, dword [rdx + 108] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd6940f41 // sete r14b + WORD $0x2041; BYTE $0xc6 // and r14b, al LONG $0x4610fac5; BYTE $0x70 // vmovss xmm0, dword [rsi + 112] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0x422ef8c5; BYTE $0x70 // vucomiss xmm0, dword [rdx + 112] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x04244c88 // mov byte [rsp + 4], cl LONG $0x4610fac5; BYTE $0x74 // vmovss xmm0, dword [rsi + 116] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] LONG $0x422ef8c5; BYTE $0x74 // vucomiss xmm0, dword [rdx + 116] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl LONG $0x4610fac5; BYTE $0x78 // vmovss xmm0, dword [rsi + 120] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] LONG $0x422ef8c5; BYTE $0x78 // vucomiss xmm0, dword [rdx + 120] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd1940f41 // sete r9b + WORD $0x2041; BYTE $0xc1 // and r9b, al LONG $0x4610fac5; BYTE $0x7c // vmovss xmm0, dword [rsi + 124] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x80ee8348 // sub rsi, -128 LONG $0x422ef8c5; BYTE $0x7c // vucomiss xmm0, dword [rdx + 124] - LONG $0xd7940f40 // sete dil + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd0940f41 // sete r8b + WORD $0x2041; BYTE $0xc0 // and r8b, al + LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] WORD $0xc000 // add al, al - LONG $0x04244402 // add al, byte [rsp + 4] + LONG $0x15244402 // add al, byte [rsp + 21] + LONG $0x05e7c040 // shl dil, 5 LONG $0x06e5c041 // shl r13b, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0845; BYTE $0xef // or r15b, r13b - LONG $0x6cb60f44; WORD $0x0524 // movzx r13d, byte [rsp + 5] - LONG $0x02e5c041 // shl r13b, 2 - WORD $0x0841; BYTE $0xc5 // or r13b, al - WORD $0x8944; BYTE $0xe8 // mov eax, r13d - WORD $0xc900 // add cl, cl - LONG $0x08244c02 // add cl, byte [rsp + 8] + WORD $0x0841; BYTE $0xfd // or r13b, dil + WORD $0x8944; BYTE $0xef // mov edi, r13d + LONG $0x244cb60f; BYTE $0x14 // movzx ecx, byte [rsp + 20] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xc108 // or cl, al + WORD $0xd889 // mov eax, ebx + WORD $0xd800 // add al, bl + LONG $0x13244402 // add al, byte [rsp + 19] + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x2444b60f; BYTE $0x03 // movzx eax, byte [rsp + 3] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x03244488 // mov byte [rsp + 3], al + LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x17 // movzx eax, byte [rsp + 23] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + LONG $0x245cb60f; BYTE $0x11 // movzx ebx, byte [rsp + 17] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0840; BYTE $0xfb // or bl, dil LONG $0x6cb60f44; WORD $0x1624 // movzx r13d, byte [rsp + 22] - LONG $0x03e5c041 // shl r13b, 3 + LONG $0x04e5c041 // shl r13b, 4 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0x0844; BYTE $0xe9 // or cl, r13b - WORD $0x8941; BYTE $0xcd // mov r13d, ecx - LONG $0x03e3c041 // shl r11b, 3 - WORD $0x0845; BYTE $0xcb // or r11b, r9b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xe9 // or cl, r13b - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xda // or r10b, r11b - LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0844; BYTE $0xd0 // or al, r10b - LONG $0x4cb60f44; WORD $0x0624 // movzx r9d, byte [rsp + 6] - LONG $0x06e1c041 // shl r9b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xcb // or bl, r9b - WORD $0x0841; BYTE $0xcf // or r15b, cl - WORD $0xc308 // or bl, al - WORD $0x0045; BYTE $0xf6 // add r14b, r14b - LONG $0x24740244; BYTE $0x0e // add r14b, byte [rsp + 14] - LONG $0x02e4c041 // shl r12b, 2 - WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0a // movzx eax, byte [rsp + 10] + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc789 // mov edi, eax + LONG $0x245cb60f; BYTE $0x0f // movzx ebx, byte [rsp + 15] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x3e // mov byte [r14], r15b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x0a // movzx ebx, byte [rsp + 10] + WORD $0xdb00 // add bl, bl + LONG $0x0e245c02 // add bl, byte [rsp + 14] + LONG $0x244cb60f; BYTE $0x09 // movzx ecx, byte [rsp + 9] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xd908 // or cl, bl + LONG $0x03e3c041 // shl r11b, 3 + WORD $0x0841; BYTE $0xcb // or r11b, cl + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xdb // or bl, r11b + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x5cb60f44; WORD $0x0324 // movzx r11d, byte [rsp + 3] + WORD $0x0845; BYTE $0xeb // or r11b, r13b + LONG $0x6cb60f44; WORD $0x0724 // movzx r13d, byte [rsp + 7] + LONG $0x05e5c041 // shl r13b, 5 + LONG $0x244cb60f; BYTE $0x05 // movzx ecx, byte [rsp + 5] WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x0844; BYTE $0xe9 // or cl, r13b + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x07e2c041 // shl r10b, 7 + WORD $0x0841; BYTE $0xca // or r10b, cl + WORD $0x0841; BYTE $0xda // or r10b, bl + LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] + WORD $0xc900 // add cl, cl + LONG $0x06244c02 // add cl, byte [rsp + 6] + LONG $0x02e7c041 // shl r15b, 2 + WORD $0x0841; BYTE $0xcf // or r15b, cl + LONG $0x03e6c041 // shl r14b, 3 + WORD $0x0845; BYTE $0xfe // or r14b, r15b + LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0x0844; BYTE $0xf1 // or cl, r14b + LONG $0x241c8845 // mov byte [r12], r11b + LONG $0x245cb60f; BYTE $0x28 // movzx ebx, byte [rsp + 40] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e1c041 // shl r9b, 6 + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x24448841; BYTE $0x01 // mov byte [r12 + 1], al LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xc8 // or r8b, r9b WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl - WORD $0x0841; BYTE $0xc0 // or r8b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x14244402 // add al, byte [rsp + 20] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x13 // movzx ecx, byte [rsp + 19] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xc108 // or cl, al - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xc7 // or dil, al - WORD $0x0840; BYTE $0xcf // or dil, cl - LONG $0x02468845 // mov byte [r14 + 2], r8b - LONG $0x037e8841 // mov byte [r14 + 3], dil + LONG $0x24548845; BYTE $0x02 // mov byte [r12 + 2], r10b + LONG $0x24448845; BYTE $0x03 // mov byte [r12 + 3], r8b LONG $0x80c28148; WORD $0x0000; BYTE $0x00 // add rdx, 128 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff28 // add qword [rsp + 40], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 JNE LBB0_118 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] LBB0_120: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_122: + LONG $0x01498d4c // lea r9, [rcx + 1] LONG $0x0410fac5; BYTE $0x8e // vmovss xmm0, dword [rsi + 4*rcx] LONG $0x042ef8c5; BYTE $0x8a // vucomiss xmm0, dword [rdx + 4*rcx] - LONG $0x01418d4c // lea r8, [rcx + 1] - WORD $0x940f; BYTE $0xd3 // sete bl - WORD $0xdbf6 // neg bl + WORD $0x9b0f; BYTE $0xd3 // setnp bl + WORD $0x940f; BYTE $0xd0 // sete al + WORD $0xd820 // and al, bl + WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] - WORD $0x3044; BYTE $0xcb // xor bl, r9b + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] + WORD $0x3044; BYTE $0xc0 // xor al, r8b WORD $0xe180; BYTE $0x07 // and cl, 7 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0xd820 // and al, bl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al - WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xc3 // xor bl, r8b + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl + WORD $0x894c; BYTE $0xc9 // mov rcx, r9 + WORD $0x394d; BYTE $0xce // cmp r14, r9 JNE LBB0_122 JMP LBB0_123 LBB0_57: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_61 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB0_59: WORD $0xb60f; BYTE $0x0e // movzx ecx, byte [rsi] @@ -2197,7 +2388,7 @@ LBB0_59: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -2206,49 +2397,49 @@ LBB0_59: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB0_59 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_61: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_65 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 + LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 LBB0_63: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0xb60f; BYTE $0x06 // movzx eax, byte [rsi] LONG $0x014eb60f // movzx ecx, byte [rsi + 1] WORD $0x023a // cmp al, byte [rdx] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] WORD $0x4a3a; BYTE $0x01 // cmp cl, byte [rdx + 1] - WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x940f; BYTE $0xd3 // sete bl LONG $0x0246b60f // movzx eax, byte [rsi + 2] WORD $0x423a; BYTE $0x02 // cmp al, byte [rdx + 2] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] + LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] LONG $0x0346b60f // movzx eax, byte [rsi + 3] WORD $0x423a; BYTE $0x03 // cmp al, byte [rdx + 3] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] + LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] LONG $0x0446b60f // movzx eax, byte [rsi + 4] WORD $0x423a; BYTE $0x04 // cmp al, byte [rdx + 4] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] LONG $0x0546b60f // movzx eax, byte [rsi + 5] WORD $0x423a; BYTE $0x05 // cmp al, byte [rdx + 5] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + LONG $0x2454940f; BYTE $0x03 // sete byte [rsp + 3] LONG $0x0646b60f // movzx eax, byte [rsi + 6] WORD $0x423a; BYTE $0x06 // cmp al, byte [rdx + 6] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] + LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] LONG $0x0746b60f // movzx eax, byte [rsi + 7] WORD $0x423a; BYTE $0x07 // cmp al, byte [rdx + 7] LONG $0xd7940f41 // sete r15b LONG $0x0846b60f // movzx eax, byte [rsi + 8] WORD $0x423a; BYTE $0x08 // cmp al, byte [rdx + 8] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0x0946b60f // movzx eax, byte [rsi + 9] WORD $0x423a; BYTE $0x09 // cmp al, byte [rdx + 9] LONG $0xd7940f40 // sete dil @@ -2263,16 +2454,16 @@ LBB0_63: LONG $0xd6940f41 // sete r14b LONG $0x0d46b60f // movzx eax, byte [rsi + 13] WORD $0x423a; BYTE $0x0d // cmp al, byte [rdx + 13] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] + LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] LONG $0x0e46b60f // movzx eax, byte [rsi + 14] WORD $0x423a; BYTE $0x0e // cmp al, byte [rdx + 14] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] + LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] LONG $0x0f46b60f // movzx eax, byte [rsi + 15] WORD $0x423a; BYTE $0x0f // cmp al, byte [rdx + 15] - WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0xd0940f41 // sete r8b LONG $0x1046b60f // movzx eax, byte [rsi + 16] WORD $0x423a; BYTE $0x10 // cmp al, byte [rdx + 16] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] + LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] LONG $0x1146b60f // movzx eax, byte [rsi + 17] WORD $0x423a; BYTE $0x11 // cmp al, byte [rdx + 17] LONG $0xd4940f41 // sete r12b @@ -2281,144 +2472,144 @@ LBB0_63: LONG $0xd5940f41 // sete r13b LONG $0x1346b60f // movzx eax, byte [rsi + 19] WORD $0x423a; BYTE $0x13 // cmp al, byte [rdx + 19] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] + LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] LONG $0x1446b60f // movzx eax, byte [rsi + 20] WORD $0x423a; BYTE $0x14 // cmp al, byte [rdx + 20] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] LONG $0x1546b60f // movzx eax, byte [rsi + 21] WORD $0x423a; BYTE $0x15 // cmp al, byte [rdx + 21] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] + LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] LONG $0x1646b60f // movzx eax, byte [rsi + 22] WORD $0x423a; BYTE $0x16 // cmp al, byte [rdx + 22] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] LONG $0x1746b60f // movzx eax, byte [rsi + 23] WORD $0x423a; BYTE $0x17 // cmp al, byte [rdx + 23] LONG $0xd1940f41 // sete r9b LONG $0x1846b60f // movzx eax, byte [rsi + 24] WORD $0x423a; BYTE $0x18 // cmp al, byte [rdx + 24] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] + LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] LONG $0x1946b60f // movzx eax, byte [rsi + 25] WORD $0x423a; BYTE $0x19 // cmp al, byte [rdx + 25] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] + LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] LONG $0x1a46b60f // movzx eax, byte [rsi + 26] WORD $0x423a; BYTE $0x1a // cmp al, byte [rdx + 26] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] + LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] LONG $0x1b46b60f // movzx eax, byte [rsi + 27] WORD $0x423a; BYTE $0x1b // cmp al, byte [rdx + 27] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0x1c46b60f // movzx eax, byte [rsi + 28] WORD $0x423a; BYTE $0x1c // cmp al, byte [rdx + 28] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] LONG $0x1d46b60f // movzx eax, byte [rsi + 29] WORD $0x423a; BYTE $0x1d // cmp al, byte [rdx + 29] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] + LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x1e46b60f // movzx eax, byte [rsi + 30] WORD $0x423a; BYTE $0x1e // cmp al, byte [rdx + 30] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] + LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] LONG $0x1f46b60f // movzx eax, byte [rsi + 31] LONG $0x20c68348 // add rsi, 32 WORD $0x423a; BYTE $0x1f // cmp al, byte [rdx + 31] - LONG $0xd0940f41 // sete r8b - WORD $0xc900 // add cl, cl - LONG $0x28244c02 // add cl, byte [rsp + 40] - WORD $0xc889 // mov eax, ecx - LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xdb00 // add bl, bl + LONG $0x04245c02 // add bl, byte [rsp + 4] + WORD $0xd889 // mov eax, ebx + LONG $0x245cb60f; BYTE $0x05 // movzx ebx, byte [rsp + 5] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xcf // or r15b, cl - LONG $0x244cb60f; BYTE $0x14 // movzx ecx, byte [rsp + 20] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x245cb60f; BYTE $0x15 // movzx ebx, byte [rsp + 21] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx WORD $0x0040; BYTE $0xff // add dil, dil - LONG $0x247c0240; BYTE $0x07 // add dil, byte [rsp + 7] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x247c0240; BYTE $0x08 // add dil, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e2c041 // shl r10b, 2 WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0xcf89 // mov edi, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0xdf89 // mov edi, ebx LONG $0x03e3c041 // shl r11b, 3 WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0840; BYTE $0xf9 // or cl, dil + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xfb // or bl, dil LONG $0x04e6c041 // shl r14b, 4 WORD $0x0845; BYTE $0xde // or r14b, r11b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x247cb60f; BYTE $0x06 // movzx edi, byte [rsp + 6] + LONG $0x247cb60f; BYTE $0x07 // movzx edi, byte [rsp + 7] LONG $0x06e7c040 // shl dil, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0840; BYTE $0xfb // or bl, dil - WORD $0x0841; BYTE $0xcf // or r15b, cl - WORD $0xc308 // or bl, al + LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + WORD $0x0841; BYTE $0xdf // or r15b, bl + WORD $0x0841; BYTE $0xc0 // or r8b, al WORD $0x0045; BYTE $0xe4 // add r12b, r12b - LONG $0x24640244; BYTE $0x0d // add r12b, byte [rsp + 13] + LONG $0x24640244; BYTE $0x0e // add r12b, byte [rsp + 14] LONG $0x02e5c041 // shl r13b, 2 WORD $0x0845; BYTE $0xe5 // or r13b, r12b - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xe8 // or al, r13b - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0a // movzx eax, byte [rsp + 10] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x3e // mov byte [r14], r15b - LONG $0x244cb60f; BYTE $0x0b // movzx ecx, byte [rsp + 11] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x243c8845 // mov byte [r12], r15b + LONG $0x245cb60f; BYTE $0x0c // movzx ebx, byte [rsp + 12] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x24448845; BYTE $0x01 // mov byte [r12 + 1], r8b WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] + LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x12 // movzx ecx, byte [rsp + 18] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xc8 // or r8b, cl - WORD $0x0841; BYTE $0xc0 // or r8b, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x03468845 // mov byte [r14 + 3], r8b + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x13 // movzx ebx, byte [rsp + 19] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x20c28348 // add rdx, 32 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff28 // add qword [rsp + 40], -1 JNE LBB0_63 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] LBB0_65: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_67: @@ -2429,30 +2620,30 @@ LBB0_67: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB0_67 JMP LBB0_123 LBB0_90: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_94 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB0_92: WORD $0x0e8b // mov ecx, dword [rsi] @@ -2465,7 +2656,7 @@ LBB0_92: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -2474,49 +2665,49 @@ LBB0_92: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB0_92 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_94: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_98 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB0_96: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0x068b // mov eax, dword [rsi] WORD $0x4e8b; BYTE $0x04 // mov ecx, dword [rsi + 4] WORD $0x023b // cmp eax, dword [rdx] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] WORD $0x4a3b; BYTE $0x04 // cmp ecx, dword [rdx + 4] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] WORD $0x468b; BYTE $0x08 // mov eax, dword [rsi + 8] WORD $0x423b; BYTE $0x08 // cmp eax, dword [rdx + 8] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] + LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] WORD $0x468b; BYTE $0x0c // mov eax, dword [rsi + 12] WORD $0x423b; BYTE $0x0c // cmp eax, dword [rdx + 12] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] + LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] WORD $0x468b; BYTE $0x10 // mov eax, dword [rsi + 16] WORD $0x423b; BYTE $0x10 // cmp eax, dword [rdx + 16] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] WORD $0x468b; BYTE $0x14 // mov eax, dword [rsi + 20] WORD $0x423b; BYTE $0x14 // cmp eax, dword [rdx + 20] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + LONG $0x2454940f; BYTE $0x03 // sete byte [rsp + 3] WORD $0x468b; BYTE $0x18 // mov eax, dword [rsi + 24] WORD $0x423b; BYTE $0x18 // cmp eax, dword [rdx + 24] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] + LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] WORD $0x468b; BYTE $0x1c // mov eax, dword [rsi + 28] WORD $0x423b; BYTE $0x1c // cmp eax, dword [rdx + 28] LONG $0xd5940f41 // sete r13b WORD $0x468b; BYTE $0x20 // mov eax, dword [rsi + 32] WORD $0x423b; BYTE $0x20 // cmp eax, dword [rdx + 32] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] WORD $0x468b; BYTE $0x24 // mov eax, dword [rsi + 36] WORD $0x423b; BYTE $0x24 // cmp eax, dword [rdx + 36] LONG $0xd0940f41 // sete r8b @@ -2528,165 +2719,165 @@ LBB0_96: LONG $0xd7940f41 // sete r15b WORD $0x468b; BYTE $0x30 // mov eax, dword [rsi + 48] WORD $0x423b; BYTE $0x30 // cmp eax, dword [rdx + 48] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] + LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] WORD $0x468b; BYTE $0x34 // mov eax, dword [rsi + 52] WORD $0x423b; BYTE $0x34 // cmp eax, dword [rdx + 52] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] + LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] WORD $0x468b; BYTE $0x38 // mov eax, dword [rsi + 56] WORD $0x423b; BYTE $0x38 // cmp eax, dword [rdx + 56] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] WORD $0x468b; BYTE $0x3c // mov eax, dword [rsi + 60] WORD $0x423b; BYTE $0x3c // cmp eax, dword [rdx + 60] - WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0xd7940f40 // sete dil WORD $0x468b; BYTE $0x40 // mov eax, dword [rsi + 64] - WORD $0x4e8b; BYTE $0x44 // mov ecx, dword [rsi + 68] + WORD $0x5e8b; BYTE $0x44 // mov ebx, dword [rsi + 68] WORD $0x423b; BYTE $0x40 // cmp eax, dword [rdx + 64] WORD $0x468b; BYTE $0x48 // mov eax, dword [rsi + 72] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] - WORD $0x4a3b; BYTE $0x44 // cmp ecx, dword [rdx + 68] - WORD $0x4e8b; BYTE $0x4c // mov ecx, dword [rsi + 76] + LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + WORD $0x5a3b; BYTE $0x44 // cmp ebx, dword [rdx + 68] + WORD $0x5e8b; BYTE $0x4c // mov ebx, dword [rsi + 76] LONG $0xd2940f41 // sete r10b WORD $0x423b; BYTE $0x48 // cmp eax, dword [rdx + 72] WORD $0x468b; BYTE $0x50 // mov eax, dword [rsi + 80] LONG $0xd6940f41 // sete r14b - WORD $0x4a3b; BYTE $0x4c // cmp ecx, dword [rdx + 76] - WORD $0x4e8b; BYTE $0x54 // mov ecx, dword [rsi + 84] + WORD $0x5a3b; BYTE $0x4c // cmp ebx, dword [rdx + 76] + WORD $0x5e8b; BYTE $0x54 // mov ebx, dword [rsi + 84] LONG $0xd4940f41 // sete r12b WORD $0x423b; BYTE $0x50 // cmp eax, dword [rdx + 80] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] - WORD $0x4a3b; BYTE $0x54 // cmp ecx, dword [rdx + 84] + LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + WORD $0x5a3b; BYTE $0x54 // cmp ebx, dword [rdx + 84] WORD $0x468b; BYTE $0x58 // mov eax, dword [rsi + 88] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] WORD $0x423b; BYTE $0x58 // cmp eax, dword [rdx + 88] WORD $0x468b; BYTE $0x5c // mov eax, dword [rsi + 92] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] + LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] WORD $0x423b; BYTE $0x5c // cmp eax, dword [rdx + 92] WORD $0x468b; BYTE $0x60 // mov eax, dword [rsi + 96] LONG $0xd1940f41 // sete r9b WORD $0x423b; BYTE $0x60 // cmp eax, dword [rdx + 96] WORD $0x468b; BYTE $0x64 // mov eax, dword [rsi + 100] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] + LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] WORD $0x423b; BYTE $0x64 // cmp eax, dword [rdx + 100] WORD $0x468b; BYTE $0x68 // mov eax, dword [rsi + 104] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] + LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] WORD $0x423b; BYTE $0x68 // cmp eax, dword [rdx + 104] WORD $0x468b; BYTE $0x6c // mov eax, dword [rsi + 108] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] + LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] WORD $0x423b; BYTE $0x6c // cmp eax, dword [rdx + 108] WORD $0x468b; BYTE $0x70 // mov eax, dword [rsi + 112] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] WORD $0x423b; BYTE $0x70 // cmp eax, dword [rdx + 112] WORD $0x468b; BYTE $0x74 // mov eax, dword [rsi + 116] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] WORD $0x423b; BYTE $0x74 // cmp eax, dword [rdx + 116] WORD $0x468b; BYTE $0x78 // mov eax, dword [rsi + 120] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] + LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] WORD $0x423b; BYTE $0x78 // cmp eax, dword [rdx + 120] WORD $0x468b; BYTE $0x7c // mov eax, dword [rsi + 124] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] + LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x80ee8348 // sub rsi, -128 WORD $0x423b; BYTE $0x7c // cmp eax, dword [rdx + 124] - LONG $0xd7940f40 // sete dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x940f; BYTE $0xd1 // sete cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x80c28148; WORD $0x0000; BYTE $0x00 // add rdx, 128 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB0_96 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB0_98: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_100: @@ -2697,16 +2888,16 @@ LBB0_100: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB0_100 LBB0_123: @@ -2768,7 +2959,7 @@ TEXT ·_comparison_equal_arr_scalar_avx2(SB), $1320-48 WORD $0xff83; BYTE $0x05 // cmp edi, 5 JE LBB1_57 WORD $0xff83; BYTE $0x06 // cmp edi, 6 - JNE LBB1_164 + JNE LBB1_165 WORD $0x8b44; BYTE $0x2a // mov r13d, dword [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -2810,15 +3001,15 @@ LBB1_9: LONG $0x20fa8349 // cmp r10, 32 JL LBB1_101 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 + QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 LBB1_11: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d QUAD $0x000000982494940f // sete byte [rsp + 152] LONG $0x046e3944 // cmp dword [rsi + 4], r13d - LONG $0xd7940f40 // sete dil + LONG $0xd2940f41 // sete r10b LONG $0x086e3944 // cmp dword [rsi + 8], r13d LONG $0xd6940f41 // sete r14b LONG $0x0c6e3944 // cmp dword [rsi + 12], r13d @@ -2834,11 +3025,11 @@ LBB1_11: LONG $0x206e3944 // cmp dword [rsi + 32], r13d LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] LONG $0x246e3944 // cmp dword [rsi + 36], r13d - WORD $0x940f; BYTE $0xd2 // sete dl + LONG $0xd7940f40 // sete dil LONG $0x286e3944 // cmp dword [rsi + 40], r13d - LONG $0xd1940f41 // sete r9b + LONG $0xd0940f41 // sete r8b LONG $0x2c6e3944 // cmp dword [rsi + 44], r13d - LONG $0xd2940f41 // sete r10b + LONG $0xd1940f41 // sete r9b LONG $0x306e3944 // cmp dword [rsi + 48], r13d LONG $0xd3940f41 // sete r11b LONG $0x346e3944 // cmp dword [rsi + 52], r13d @@ -2878,67 +3069,68 @@ LBB1_11: LONG $0x786e3944 // cmp dword [rsi + 120], r13d LONG $0x2454940f; BYTE $0x1c // sete byte [rsp + 28] LONG $0x7c6e3944 // cmp dword [rsi + 124], r13d - LONG $0xd0940f41 // sete r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009824bc0240 // add dil, byte [rsp + 152] + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009824940244 // add r10b, byte [rsp + 152] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0x68245402 // add dl, byte [rsp + 104] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + LONG $0x247c0240; BYTE $0x68 // add dil, byte [rsp + 104] QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b LONG $0x247cb60f; BYTE $0x70 // movzx edi, byte [rsp + 112] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xd200 // add dl, dl - LONG $0x48245402 // add dl, byte [rsp + 72] - WORD $0xd789 // mov edi, edx - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x0000011024948b48 // mov rdx, qword [rsp + 272] - WORD $0x1a88 // mov byte [rdx], bl + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xc000 // add al, al + LONG $0x48244402 // add al, byte [rsp + 72] + WORD $0xc789 // mov edi, eax + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] + WORD $0x1888 // mov byte [rax], bl LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl + WORD $0x4888; BYTE $0x01 // mov byte [rax + 1], cl WORD $0x0841; BYTE $0xff // or r15b, dil LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] WORD $0xc900 // add cl, cl @@ -2961,23 +3153,23 @@ LBB1_11: WORD $0xd908 // or cl, bl LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xda08 // or dl, bl + WORD $0xca08 // or dl, cl + LONG $0x02788844 // mov byte [rax + 2], r15b + WORD $0x5088; BYTE $0x03 // mov byte [rax + 3], dl LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 - LONG $0x04c28348 // add rdx, 4 - QUAD $0x0000011024948948 // mov qword [rsp + 272], rdx - QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + LONG $0x04c08348 // add rax, 4 + QUAD $0x0000011024848948 // mov qword [rsp + 272], rax + QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 JNE LBB1_11 QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] + QUAD $0x000000a824bc8b4c // mov r15, qword [rsp + 168] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 JL LBB1_102 - JMP LBB1_164 + JMP LBB1_165 LBB1_13: WORD $0xff83; BYTE $0x08 // cmp edi, 8 @@ -2987,7 +3179,7 @@ LBB1_13: WORD $0xff83; BYTE $0x0b // cmp edi, 11 JE LBB1_73 WORD $0xff83; BYTE $0x0c // cmp edi, 12 - JNE LBB1_164 + JNE LBB1_165 LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 LONG $0xfa490f4d // cmovns r15, r10 @@ -3003,7 +3195,9 @@ LBB1_13: LBB1_19: LONG $0x062ef9c5 // vucomisd xmm0, qword [rsi] LONG $0x08768d48 // lea rsi, [rsi + 8] + WORD $0x9b0f; BYTE $0xd1 // setnp cl WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xca20 // and dl, cl WORD $0xdaf6 // neg dl LONG $0x07788d48 // lea rdi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax @@ -3030,163 +3224,248 @@ LBB1_21: JL LBB1_105 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 - QUAD $0x0000009824bc894c // mov qword [rsp + 152], r15 + QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 LBB1_23: LONG $0x062ef9c5 // vucomisd xmm0, qword [rsi] - QUAD $0x000000a02494940f // sete byte [rsp + 160] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl LONG $0x462ef9c5; BYTE $0x08 // vucomisd xmm0, qword [rsi + 8] - LONG $0xd1940f41 // sete r9b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0xc320 // and bl, al LONG $0x462ef9c5; BYTE $0x10 // vucomisd xmm0, qword [rsi + 16] - LONG $0xd6940f41 // sete r14b - LONG $0x462ef9c5; BYTE $0x18 // vucomisd xmm0, qword [rsi + 24] + WORD $0x9b0f; BYTE $0xd0 // setnp al LONG $0xd5940f41 // sete r13b + WORD $0x2041; BYTE $0xc5 // and r13b, al + LONG $0x462ef9c5; BYTE $0x18 // vucomisd xmm0, qword [rsi + 24] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x40248c88; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 320], cl LONG $0x462ef9c5; BYTE $0x20 // vucomisd xmm0, qword [rsi + 32] - QUAD $0x000000882494940f // sete byte [rsp + 136] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x20248c88; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 288], cl LONG $0x462ef9c5; BYTE $0x28 // vucomisd xmm0, qword [rsi + 40] - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f40 // sete dil + WORD $0x2040; BYTE $0xc7 // and dil, al LONG $0x462ef9c5; BYTE $0x30 // vucomisd xmm0, qword [rsi + 48] - WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x38244c88 // mov byte [rsp + 56], cl LONG $0x462ef9c5; BYTE $0x38 // vucomisd xmm0, qword [rsi + 56] - WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x1c244c88 // mov byte [rsp + 28], cl LONG $0x462ef9c5; BYTE $0x40 // vucomisd xmm0, qword [rsi + 64] - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl LONG $0x462ef9c5; BYTE $0x48 // vucomisd xmm0, qword [rsi + 72] - WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x30244c88 // mov byte [rsp + 48], cl LONG $0x462ef9c5; BYTE $0x50 // vucomisd xmm0, qword [rsi + 80] - LONG $0xd7940f40 // sete dil + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x40244c88 // mov byte [rsp + 64], cl LONG $0x462ef9c5; BYTE $0x58 // vucomisd xmm0, qword [rsi + 88] - LONG $0xd2940f41 // sete r10b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x60244c88 // mov byte [rsp + 96], cl LONG $0x462ef9c5; BYTE $0x60 // vucomisd xmm0, qword [rsi + 96] - LONG $0xd3940f41 // sete r11b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x58244c88 // mov byte [rsp + 88], cl LONG $0x462ef9c5; BYTE $0x68 // vucomisd xmm0, qword [rsi + 104] - LONG $0xd4940f41 // sete r12b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x50244c88 // mov byte [rsp + 80], cl LONG $0x462ef9c5; BYTE $0x70 // vucomisd xmm0, qword [rsi + 112] - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xc220 // and dl, al LONG $0x462ef9c5; BYTE $0x78 // vucomisd xmm0, qword [rsi + 120] + WORD $0x9b0f; BYTE $0xd0 // setnp al WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x48244c88 // mov byte [rsp + 72], cl QUAD $0x00000080862ef9c5 // vucomisd xmm0, qword [rsi + 128] - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x90248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 144], cl QUAD $0x00000088862ef9c5 // vucomisd xmm0, qword [rsi + 136] - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x88248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 136], cl QUAD $0x00000090862ef9c5 // vucomisd xmm0, qword [rsi + 144] - QUAD $0x000000802494940f // sete byte [rsp + 128] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al QUAD $0x00000098862ef9c5 // vucomisd xmm0, qword [rsi + 152] - QUAD $0x000000902494940f // sete byte [rsp + 144] + LONG $0xd09b0f41 // setnp r8b + WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x2044; BYTE $0xc0 // and al, r8b + LONG $0x80248488; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 128], al QUAD $0x000000a0862ef9c5 // vucomisd xmm0, qword [rsi + 160] - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] + LONG $0xd09b0f41 // setnp r8b + WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x2044; BYTE $0xc0 // and al, r8b + LONG $0x78244488 // mov byte [rsp + 120], al QUAD $0x000000a8862ef9c5 // vucomisd xmm0, qword [rsi + 168] - LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + LONG $0xd09b0f41 // setnp r8b + WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x2044; BYTE $0xc0 // and al, r8b + LONG $0x68244488 // mov byte [rsp + 104], al QUAD $0x000000b0862ef9c5 // vucomisd xmm0, qword [rsi + 176] - LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd4940f41 // sete r12b + WORD $0x2041; BYTE $0xc4 // and r12b, al QUAD $0x000000b8862ef9c5 // vucomisd xmm0, qword [rsi + 184] - LONG $0xd7940f41 // sete r15b + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd2940f41 // sete r10b + WORD $0x2041; BYTE $0xc2 // and r10b, al QUAD $0x000000c0862ef9c5 // vucomisd xmm0, qword [rsi + 192] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0xd09b0f41 // setnp r8b + WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x2044; BYTE $0xc0 // and al, r8b + LONG $0x70244488 // mov byte [rsp + 112], al QUAD $0x000000c8862ef9c5 // vucomisd xmm0, qword [rsi + 200] - LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f41 // sete r15b + WORD $0x2041; BYTE $0xc7 // and r15b, al QUAD $0x000000d0862ef9c5 // vucomisd xmm0, qword [rsi + 208] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd6940f41 // sete r14b + WORD $0x2041; BYTE $0xc6 // and r14b, al QUAD $0x000000d8862ef9c5 // vucomisd xmm0, qword [rsi + 216] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd3940f41 // sete r11b + WORD $0x2041; BYTE $0xc3 // and r11b, al QUAD $0x000000e0862ef9c5 // vucomisd xmm0, qword [rsi + 224] - QUAD $0x000001402494940f // sete byte [rsp + 320] + LONG $0xd09b0f41 // setnp r8b + WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x2044; BYTE $0xc0 // and al, r8b + LONG $0xa0248488; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 160], al QUAD $0x000000e8862ef9c5 // vucomisd xmm0, qword [rsi + 232] - QUAD $0x000001202494940f // sete byte [rsp + 288] + LONG $0xd09b0f41 // setnp r8b + WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x2044; BYTE $0xc0 // and al, r8b + LONG $0x98248488; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 152], al QUAD $0x000000f0862ef9c5 // vucomisd xmm0, qword [rsi + 240] - LONG $0x2454940f; BYTE $0x1c // sete byte [rsp + 28] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd1940f41 // sete r9b + WORD $0x2041; BYTE $0xc1 // and r9b, al QUAD $0x000000f8862ef9c5 // vucomisd xmm0, qword [rsi + 248] + WORD $0x9b0f; BYTE $0xd0 // setnp al LONG $0xd0940f41 // sete r8b - WORD $0x0045; BYTE $0xc9 // add r9b, r9b - QUAD $0x000000a0248c0244 // add r9b, byte [rsp + 160] + WORD $0x2041; BYTE $0xc0 // and r8b, al + WORD $0xdb00 // add bl, bl + LONG $0x20245c02 // add bl, byte [rsp + 32] + LONG $0x05e7c040 // shl dil, 5 + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0845; BYTE $0xce // or r14b, r9b - WORD $0xd200 // add dl, dl - LONG $0x70245402 // add dl, byte [rsp + 112] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xf5 // or r13b, r14b - LONG $0x02e7c040 // shl dil, 2 - WORD $0x0840; BYTE $0xd7 // or dil, dl - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0844; BYTE $0xea // or dl, r13b - WORD $0x8941; BYTE $0xd1 // mov r9d, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0844; BYTE $0xca // or dl, r9b - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b - LONG $0x247cb60f; BYTE $0x78 // movzx edi, byte [rsp + 120] - LONG $0x06e7c040 // shl dil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x02e5c041 // shl r13b, 2 + WORD $0x0841; BYTE $0xdd // or r13b, bl + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xc000 // add al, al - LONG $0x48244402 // add al, byte [rsp + 72] + LONG $0x28244402 // add al, byte [rsp + 40] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x1c // movzx eax, byte [rsp + 28] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x1c244488 // mov byte [rsp + 28], al + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc789 // mov edi, eax + QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xe8 // or al, r13b + LONG $0x245cb60f; BYTE $0x58 // movzx ebx, byte [rsp + 88] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0840; BYTE $0xfb // or bl, dil + LONG $0x247cb60f; BYTE $0x50 // movzx edi, byte [rsp + 80] + LONG $0x05e7c040 // shl dil, 5 + WORD $0xe2c0; BYTE $0x06 // shl dl, 6 + WORD $0x0840; BYTE $0xfa // or dl, dil + LONG $0x6cb60f44; WORD $0x4824 // movzx r13d, byte [rsp + 72] + LONG $0x07e5c041 // shl r13b, 7 + WORD $0x0841; BYTE $0xd5 // or r13b, dl + QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] + WORD $0xd200 // add dl, dl + LONG $0x90249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 144] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xd108 // or cl, dl QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] + WORD $0xca08 // or dl, cl + WORD $0xd189 // mov ecx, edx + LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] + WORD $0xca08 // or dl, cl + LONG $0x244cb60f; BYTE $0x1c // movzx ecx, byte [rsp + 28] + WORD $0xc108 // or cl, al + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + LONG $0x06e4c041 // shl r12b, 6 + WORD $0x0841; BYTE $0xc4 // or r12b, al + WORD $0x0841; BYTE $0xdd // or r13b, bl + LONG $0x07e2c041 // shl r10b, 7 + WORD $0x0845; BYTE $0xe2 // or r10b, r12b + WORD $0x0841; BYTE $0xd2 // or r10b, dl + WORD $0x0045; BYTE $0xff // add r15b, r15b + LONG $0x247c0244; BYTE $0x70 // add r15b, byte [rsp + 112] + LONG $0x02e6c041 // shl r14b, 2 + WORD $0x0845; BYTE $0xfe // or r14b, r15b + LONG $0x03e3c041 // shl r11b, 3 + WORD $0x0845; BYTE $0xf3 // or r11b, r14b + QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd8 // or al, r11b + WORD $0xc389 // mov ebx, eax + QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] + WORD $0x0888 // mov byte [rax], cl + QUAD $0x000000982494b60f // movzx edx, byte [rsp + 152] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x0000011024948b48 // mov rdx, qword [rsp + 272] - WORD $0x1a88 // mov byte [rdx], bl - LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl - WORD $0x0841; BYTE $0xff // or r15b, dil - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000140248cb60f // movzx ecx, byte [rsp + 320] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd908 // or cl, bl - LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + LONG $0x06e1c041 // shl r9b, 6 + WORD $0x0841; BYTE $0xd1 // or r9b, dl + LONG $0x01688844 // mov byte [rax + 1], r13b LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xc8 // or r8b, r9b WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b + LONG $0x02508844 // mov byte [rax + 2], r10b + LONG $0x03408844 // mov byte [rax + 3], r8b LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 - LONG $0x04c28348 // add rdx, 4 - QUAD $0x0000011024948948 // mov qword [rsp + 272], rdx - QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 + LONG $0x04c08348 // add rax, 4 + QUAD $0x0000011024848948 // mov qword [rsp + 272], rax + QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 JNE LBB1_23 QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] @@ -3194,13 +3473,13 @@ LBB1_23: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 JL LBB1_106 - JMP LBB1_164 + JMP LBB1_165 LBB1_25: WORD $0xff83; BYTE $0x02 // cmp edi, 2 JE LBB1_81 WORD $0xff83; BYTE $0x03 // cmp edi, 3 - JNE LBB1_164 + JNE LBB1_165 WORD $0x8a44; BYTE $0x32 // mov r14b, byte [rdx] LONG $0x1f6a8d4d // lea r13, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -3251,10 +3530,10 @@ LBB1_31: LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi WORD $0x3949; BYTE $0xc3 // cmp r11, rax - JAE LBB1_165 + JAE LBB1_166 LONG $0xab048d4b // lea rax, [r11 + 4*r13] WORD $0x3948; BYTE $0xc6 // cmp rsi, rax - JAE LBB1_165 + JAE LBB1_166 LBB1_35: WORD $0xc031 // xor eax, eax @@ -3438,7 +3717,7 @@ LBB1_39: WORD $0xff83; BYTE $0x07 // cmp edi, 7 JE LBB1_93 WORD $0xff83; BYTE $0x08 // cmp edi, 8 - JNE LBB1_164 + JNE LBB1_165 WORD $0x8b4c; BYTE $0x2a // mov r13, qword [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -3480,15 +3759,15 @@ LBB1_45: LONG $0x20fa8349 // cmp r10, 32 JL LBB1_112 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 + QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 LBB1_47: QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 QUAD $0x000000982494940f // sete byte [rsp + 152] LONG $0x086e394c // cmp qword [rsi + 8], r13 - LONG $0xd7940f40 // sete dil + LONG $0xd2940f41 // sete r10b LONG $0x106e394c // cmp qword [rsi + 16], r13 LONG $0xd6940f41 // sete r14b LONG $0x186e394c // cmp qword [rsi + 24], r13 @@ -3504,11 +3783,11 @@ LBB1_47: LONG $0x406e394c // cmp qword [rsi + 64], r13 LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] LONG $0x486e394c // cmp qword [rsi + 72], r13 - WORD $0x940f; BYTE $0xd2 // sete dl + LONG $0xd7940f40 // sete dil LONG $0x506e394c // cmp qword [rsi + 80], r13 - LONG $0xd1940f41 // sete r9b + LONG $0xd0940f41 // sete r8b LONG $0x586e394c // cmp qword [rsi + 88], r13 - LONG $0xd2940f41 // sete r10b + LONG $0xd1940f41 // sete r9b LONG $0x606e394c // cmp qword [rsi + 96], r13 LONG $0xd3940f41 // sete r11b LONG $0x686e394c // cmp qword [rsi + 104], r13 @@ -3548,32 +3827,33 @@ LBB1_47: LONG $0xf0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 240], r13 LONG $0x2454940f; BYTE $0x1c // sete byte [rsp + 28] LONG $0xf8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 248], r13 - LONG $0xd0940f41 // sete r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009824bc0240 // add dil, byte [rsp + 152] + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009824940244 // add r10b, byte [rsp + 152] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0x68245402 // add dl, byte [rsp + 104] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + LONG $0x247c0240; BYTE $0x68 // add dil, byte [rsp + 104] QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b QUAD $0x00000110249c8b4c // mov r11, qword [rsp + 272] @@ -3581,71 +3861,71 @@ LBB1_47: LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xd200 // add dl, dl - LONG $0x48245402 // add dl, byte [rsp + 72] - WORD $0xd789 // mov edi, edx - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xc000 // add al, al + LONG $0x48244402 // add al, byte [rsp + 72] + WORD $0xc789 // mov edi, eax + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil WORD $0x8841; BYTE $0x1b // mov byte [r11], bl LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl LONG $0x014b8841 // mov byte [r11 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - QUAD $0x00000140248cb60f // movzx ecx, byte [rsp + 320] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x1c // movzx edx, byte [rsp + 28] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0841; BYTE $0xc7 // or r15b, al + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xc000 // add al, al + LONG $0x20244402 // add al, byte [rsp + 32] + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xc808 // or al, cl + LONG $0x244cb60f; BYTE $0x1c // movzx ecx, byte [rsp + 28] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xca08 // or dl, cl + WORD $0xc208 // or dl, al LONG $0x027b8845 // mov byte [r11 + 2], r15b - LONG $0x03438845 // mov byte [r11 + 3], r8b + LONG $0x03538841 // mov byte [r11 + 3], dl LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 LONG $0x04c38349 // add r11, 4 - QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 JNE LBB1_47 WORD $0x894d; BYTE $0xde // mov r14, r11 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] + QUAD $0x000000a824bc8b4c // mov r15, qword [rsp + 168] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 JL LBB1_113 - JMP LBB1_164 + JMP LBB1_165 LBB1_49: LONG $0x2ab70f44 // movzx r13d, word [rdx] @@ -3689,15 +3969,15 @@ LBB1_53: LONG $0x20fa8349 // cmp r10, 32 JL LBB1_116 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 + QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 LBB1_55: LONG $0x2e394466 // cmp word [rsi], r13w WORD $0x940f; BYTE $0xd0 // sete al LONG $0x6e394466; BYTE $0x02 // cmp word [rsi + 2], r13w - LONG $0xd7940f40 // sete dil + LONG $0xd2940f41 // sete r10b LONG $0x6e394466; BYTE $0x04 // cmp word [rsi + 4], r13w LONG $0xd6940f41 // sete r14b LONG $0x6e394466; BYTE $0x06 // cmp word [rsi + 6], r13w @@ -3713,11 +3993,11 @@ LBB1_55: LONG $0x6e394466; BYTE $0x10 // cmp word [rsi + 16], r13w LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] LONG $0x6e394466; BYTE $0x12 // cmp word [rsi + 18], r13w - WORD $0x940f; BYTE $0xd2 // sete dl + LONG $0xd7940f40 // sete dil LONG $0x6e394466; BYTE $0x14 // cmp word [rsi + 20], r13w - LONG $0xd1940f41 // sete r9b + LONG $0xd0940f41 // sete r8b LONG $0x6e394466; BYTE $0x16 // cmp word [rsi + 22], r13w - LONG $0xd2940f41 // sete r10b + LONG $0xd1940f41 // sete r9b LONG $0x6e394466; BYTE $0x18 // cmp word [rsi + 24], r13w LONG $0xd3940f41 // sete r11b LONG $0x6e394466; BYTE $0x1a // cmp word [rsi + 26], r13w @@ -3757,68 +4037,69 @@ LBB1_55: LONG $0x6e394466; BYTE $0x3c // cmp word [rsi + 60], r13w LONG $0x2454940f; BYTE $0x1c // sete byte [rsp + 28] LONG $0x6e394466; BYTE $0x3e // cmp word [rsi + 62], r13w - LONG $0xd0940f41 // sete r8b - WORD $0x0040; BYTE $0xff // add dil, dil - WORD $0x0840; BYTE $0xc7 // or dil, al + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + WORD $0x0841; BYTE $0xc2 // or r10b, al QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0x70245402 // add dl, byte [rsp + 112] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + LONG $0x247c0240; BYTE $0x70 // add dil, byte [rsp + 112] QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b LONG $0x247cb60f; BYTE $0x68 // movzx edi, byte [rsp + 104] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xd200 // add dl, dl - LONG $0x48245402 // add dl, byte [rsp + 72] - WORD $0xd789 // mov edi, edx - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x0000011024948b48 // mov rdx, qword [rsp + 272] - WORD $0x1a88 // mov byte [rdx], bl + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xc000 // add al, al + LONG $0x48244402 // add al, byte [rsp + 72] + WORD $0xc789 // mov edi, eax + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] + WORD $0x1888 // mov byte [rax], bl LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl + WORD $0x4888; BYTE $0x01 // mov byte [rax + 1], cl WORD $0x0841; BYTE $0xff // or r15b, dil LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] WORD $0xc900 // add cl, cl @@ -3841,23 +4122,23 @@ LBB1_55: WORD $0xd908 // or cl, bl LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xda08 // or dl, bl + WORD $0xca08 // or dl, cl + LONG $0x02788844 // mov byte [rax + 2], r15b + WORD $0x5088; BYTE $0x03 // mov byte [rax + 3], dl LONG $0x40c68348 // add rsi, 64 - LONG $0x04c28348 // add rdx, 4 - QUAD $0x0000011024948948 // mov qword [rsp + 272], rdx - QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + LONG $0x04c08348 // add rax, 4 + QUAD $0x0000011024848948 // mov qword [rsp + 272], rax + QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 JNE LBB1_55 QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] + QUAD $0x000000a824bc8b4c // mov r15, qword [rsp + 168] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 JL LBB1_117 - JMP LBB1_164 + JMP LBB1_165 LBB1_57: LONG $0x2ab70f44 // movzx r13d, word [rdx] @@ -3901,15 +4182,15 @@ LBB1_61: LONG $0x20fa8349 // cmp r10, 32 JL LBB1_120 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 + QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 LBB1_63: LONG $0x2e394466 // cmp word [rsi], r13w QUAD $0x000000982494940f // sete byte [rsp + 152] LONG $0x6e394466; BYTE $0x02 // cmp word [rsi + 2], r13w - LONG $0xd7940f40 // sete dil + LONG $0xd2940f41 // sete r10b LONG $0x6e394466; BYTE $0x04 // cmp word [rsi + 4], r13w LONG $0xd6940f41 // sete r14b LONG $0x6e394466; BYTE $0x06 // cmp word [rsi + 6], r13w @@ -3925,11 +4206,11 @@ LBB1_63: LONG $0x6e394466; BYTE $0x10 // cmp word [rsi + 16], r13w LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] LONG $0x6e394466; BYTE $0x12 // cmp word [rsi + 18], r13w - WORD $0x940f; BYTE $0xd2 // sete dl + LONG $0xd7940f40 // sete dil LONG $0x6e394466; BYTE $0x14 // cmp word [rsi + 20], r13w - LONG $0xd1940f41 // sete r9b + LONG $0xd0940f41 // sete r8b LONG $0x6e394466; BYTE $0x16 // cmp word [rsi + 22], r13w - LONG $0xd2940f41 // sete r10b + LONG $0xd1940f41 // sete r9b LONG $0x6e394466; BYTE $0x18 // cmp word [rsi + 24], r13w LONG $0xd3940f41 // sete r11b LONG $0x6e394466; BYTE $0x1a // cmp word [rsi + 26], r13w @@ -3969,67 +4250,68 @@ LBB1_63: LONG $0x6e394466; BYTE $0x3c // cmp word [rsi + 60], r13w LONG $0x2454940f; BYTE $0x1c // sete byte [rsp + 28] LONG $0x6e394466; BYTE $0x3e // cmp word [rsi + 62], r13w - LONG $0xd0940f41 // sete r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009824bc0240 // add dil, byte [rsp + 152] + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009824940244 // add r10b, byte [rsp + 152] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0x68245402 // add dl, byte [rsp + 104] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + LONG $0x247c0240; BYTE $0x68 // add dil, byte [rsp + 104] QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b LONG $0x247cb60f; BYTE $0x70 // movzx edi, byte [rsp + 112] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xd200 // add dl, dl - LONG $0x48245402 // add dl, byte [rsp + 72] - WORD $0xd789 // mov edi, edx - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x0000011024948b48 // mov rdx, qword [rsp + 272] - WORD $0x1a88 // mov byte [rdx], bl + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xc000 // add al, al + LONG $0x48244402 // add al, byte [rsp + 72] + WORD $0xc789 // mov edi, eax + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] + WORD $0x1888 // mov byte [rax], bl LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl + WORD $0x4888; BYTE $0x01 // mov byte [rax + 1], cl WORD $0x0841; BYTE $0xff // or r15b, dil LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] WORD $0xc900 // add cl, cl @@ -4052,23 +4334,23 @@ LBB1_63: WORD $0xd908 // or cl, bl LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xda08 // or dl, bl + WORD $0xca08 // or dl, cl + LONG $0x02788844 // mov byte [rax + 2], r15b + WORD $0x5088; BYTE $0x03 // mov byte [rax + 3], dl LONG $0x40c68348 // add rsi, 64 - LONG $0x04c28348 // add rdx, 4 - QUAD $0x0000011024948948 // mov qword [rsp + 272], rdx - QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + LONG $0x04c08348 // add rax, 4 + QUAD $0x0000011024848948 // mov qword [rsp + 272], rax + QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 JNE LBB1_63 QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] + QUAD $0x000000a824bc8b4c // mov r15, qword [rsp + 168] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 JL LBB1_121 - JMP LBB1_164 + JMP LBB1_165 LBB1_65: WORD $0x8b4c; BYTE $0x2a // mov r13, qword [rdx] @@ -4112,15 +4394,15 @@ LBB1_69: LONG $0x20fa8349 // cmp r10, 32 JL LBB1_123 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 + QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 LBB1_71: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 QUAD $0x000000982494940f // sete byte [rsp + 152] LONG $0x086e394c // cmp qword [rsi + 8], r13 - LONG $0xd7940f40 // sete dil + LONG $0xd2940f41 // sete r10b LONG $0x106e394c // cmp qword [rsi + 16], r13 LONG $0xd6940f41 // sete r14b LONG $0x186e394c // cmp qword [rsi + 24], r13 @@ -4136,11 +4418,11 @@ LBB1_71: LONG $0x406e394c // cmp qword [rsi + 64], r13 LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] LONG $0x486e394c // cmp qword [rsi + 72], r13 - WORD $0x940f; BYTE $0xd2 // sete dl + LONG $0xd7940f40 // sete dil LONG $0x506e394c // cmp qword [rsi + 80], r13 - LONG $0xd1940f41 // sete r9b + LONG $0xd0940f41 // sete r8b LONG $0x586e394c // cmp qword [rsi + 88], r13 - LONG $0xd2940f41 // sete r10b + LONG $0xd1940f41 // sete r9b LONG $0x606e394c // cmp qword [rsi + 96], r13 LONG $0xd3940f41 // sete r11b LONG $0x686e394c // cmp qword [rsi + 104], r13 @@ -4180,67 +4462,68 @@ LBB1_71: LONG $0xf0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 240], r13 LONG $0x2454940f; BYTE $0x1c // sete byte [rsp + 28] LONG $0xf8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 248], r13 - LONG $0xd0940f41 // sete r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009824bc0240 // add dil, byte [rsp + 152] + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009824940244 // add r10b, byte [rsp + 152] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0x68245402 // add dl, byte [rsp + 104] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + LONG $0x247c0240; BYTE $0x68 // add dil, byte [rsp + 104] QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b LONG $0x247cb60f; BYTE $0x70 // movzx edi, byte [rsp + 112] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xd200 // add dl, dl - LONG $0x48245402 // add dl, byte [rsp + 72] - WORD $0xd789 // mov edi, edx - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x0000011024948b48 // mov rdx, qword [rsp + 272] - WORD $0x1a88 // mov byte [rdx], bl + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xc000 // add al, al + LONG $0x48244402 // add al, byte [rsp + 72] + WORD $0xc789 // mov edi, eax + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] + WORD $0x1888 // mov byte [rax], bl LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl + WORD $0x4888; BYTE $0x01 // mov byte [rax + 1], cl WORD $0x0841; BYTE $0xff // or r15b, dil LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] WORD $0xc900 // add cl, cl @@ -4263,23 +4546,23 @@ LBB1_71: WORD $0xd908 // or cl, bl LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xda08 // or dl, bl + WORD $0xca08 // or dl, cl + LONG $0x02788844 // mov byte [rax + 2], r15b + WORD $0x5088; BYTE $0x03 // mov byte [rax + 3], dl LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 - LONG $0x04c28348 // add rdx, 4 - QUAD $0x0000011024948948 // mov qword [rsp + 272], rdx - QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + LONG $0x04c08348 // add rax, 4 + QUAD $0x0000011024848948 // mov qword [rsp + 272], rax + QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 JNE LBB1_71 QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] + QUAD $0x000000a824bc8b4c // mov r15, qword [rsp + 168] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 JL LBB1_124 - JMP LBB1_164 + JMP LBB1_165 LBB1_73: LONG $0x1f7a8d4d // lea r15, [r10 + 31] @@ -4297,7 +4580,9 @@ LBB1_73: LBB1_75: LONG $0x062ef8c5 // vucomiss xmm0, dword [rsi] LONG $0x04768d48 // lea rsi, [rsi + 4] + WORD $0x9b0f; BYTE $0xd1 // setnp cl WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xca20 // and dl, cl WORD $0xdaf6 // neg dl LONG $0x07788d48 // lea rdi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax @@ -4324,163 +4609,248 @@ LBB1_77: JL LBB1_126 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 - QUAD $0x0000009824bc894c // mov qword [rsp + 152], r15 + QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 LBB1_79: LONG $0x062ef8c5 // vucomiss xmm0, dword [rsi] - QUAD $0x000000a02494940f // sete byte [rsp + 160] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl LONG $0x462ef8c5; BYTE $0x04 // vucomiss xmm0, dword [rsi + 4] - LONG $0xd1940f41 // sete r9b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0xc320 // and bl, al LONG $0x462ef8c5; BYTE $0x08 // vucomiss xmm0, dword [rsi + 8] - LONG $0xd6940f41 // sete r14b - LONG $0x462ef8c5; BYTE $0x0c // vucomiss xmm0, dword [rsi + 12] + WORD $0x9b0f; BYTE $0xd0 // setnp al LONG $0xd5940f41 // sete r13b + WORD $0x2041; BYTE $0xc5 // and r13b, al + LONG $0x462ef8c5; BYTE $0x0c // vucomiss xmm0, dword [rsi + 12] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x40248c88; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 320], cl LONG $0x462ef8c5; BYTE $0x10 // vucomiss xmm0, dword [rsi + 16] - QUAD $0x000000882494940f // sete byte [rsp + 136] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x20248c88; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 288], cl LONG $0x462ef8c5; BYTE $0x14 // vucomiss xmm0, dword [rsi + 20] - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f40 // sete dil + WORD $0x2040; BYTE $0xc7 // and dil, al LONG $0x462ef8c5; BYTE $0x18 // vucomiss xmm0, dword [rsi + 24] - WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x38244c88 // mov byte [rsp + 56], cl LONG $0x462ef8c5; BYTE $0x1c // vucomiss xmm0, dword [rsi + 28] - WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x1c244c88 // mov byte [rsp + 28], cl LONG $0x462ef8c5; BYTE $0x20 // vucomiss xmm0, dword [rsi + 32] - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl LONG $0x462ef8c5; BYTE $0x24 // vucomiss xmm0, dword [rsi + 36] - WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x30244c88 // mov byte [rsp + 48], cl LONG $0x462ef8c5; BYTE $0x28 // vucomiss xmm0, dword [rsi + 40] - LONG $0xd7940f40 // sete dil + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x40244c88 // mov byte [rsp + 64], cl LONG $0x462ef8c5; BYTE $0x2c // vucomiss xmm0, dword [rsi + 44] - LONG $0xd2940f41 // sete r10b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x60244c88 // mov byte [rsp + 96], cl LONG $0x462ef8c5; BYTE $0x30 // vucomiss xmm0, dword [rsi + 48] - LONG $0xd3940f41 // sete r11b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x58244c88 // mov byte [rsp + 88], cl LONG $0x462ef8c5; BYTE $0x34 // vucomiss xmm0, dword [rsi + 52] - LONG $0xd4940f41 // sete r12b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x50244c88 // mov byte [rsp + 80], cl LONG $0x462ef8c5; BYTE $0x38 // vucomiss xmm0, dword [rsi + 56] - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xc220 // and dl, al LONG $0x462ef8c5; BYTE $0x3c // vucomiss xmm0, dword [rsi + 60] + WORD $0x9b0f; BYTE $0xd0 // setnp al WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x48244c88 // mov byte [rsp + 72], cl LONG $0x462ef8c5; BYTE $0x40 // vucomiss xmm0, dword [rsi + 64] - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x90248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 144], cl LONG $0x462ef8c5; BYTE $0x44 // vucomiss xmm0, dword [rsi + 68] - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x88248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 136], cl LONG $0x462ef8c5; BYTE $0x48 // vucomiss xmm0, dword [rsi + 72] - QUAD $0x000000802494940f // sete byte [rsp + 128] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al LONG $0x462ef8c5; BYTE $0x4c // vucomiss xmm0, dword [rsi + 76] - QUAD $0x000000902494940f // sete byte [rsp + 144] + LONG $0xd09b0f41 // setnp r8b + WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x2044; BYTE $0xc0 // and al, r8b + LONG $0x80248488; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 128], al LONG $0x462ef8c5; BYTE $0x50 // vucomiss xmm0, dword [rsi + 80] - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] + LONG $0xd09b0f41 // setnp r8b + WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x2044; BYTE $0xc0 // and al, r8b + LONG $0x78244488 // mov byte [rsp + 120], al LONG $0x462ef8c5; BYTE $0x54 // vucomiss xmm0, dword [rsi + 84] - LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + LONG $0xd09b0f41 // setnp r8b + WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x2044; BYTE $0xc0 // and al, r8b + LONG $0x68244488 // mov byte [rsp + 104], al LONG $0x462ef8c5; BYTE $0x58 // vucomiss xmm0, dword [rsi + 88] - LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd4940f41 // sete r12b + WORD $0x2041; BYTE $0xc4 // and r12b, al LONG $0x462ef8c5; BYTE $0x5c // vucomiss xmm0, dword [rsi + 92] - LONG $0xd7940f41 // sete r15b + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd2940f41 // sete r10b + WORD $0x2041; BYTE $0xc2 // and r10b, al LONG $0x462ef8c5; BYTE $0x60 // vucomiss xmm0, dword [rsi + 96] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0xd09b0f41 // setnp r8b + WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x2044; BYTE $0xc0 // and al, r8b + LONG $0x70244488 // mov byte [rsp + 112], al LONG $0x462ef8c5; BYTE $0x64 // vucomiss xmm0, dword [rsi + 100] - LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f41 // sete r15b + WORD $0x2041; BYTE $0xc7 // and r15b, al LONG $0x462ef8c5; BYTE $0x68 // vucomiss xmm0, dword [rsi + 104] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd6940f41 // sete r14b + WORD $0x2041; BYTE $0xc6 // and r14b, al LONG $0x462ef8c5; BYTE $0x6c // vucomiss xmm0, dword [rsi + 108] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd3940f41 // sete r11b + WORD $0x2041; BYTE $0xc3 // and r11b, al LONG $0x462ef8c5; BYTE $0x70 // vucomiss xmm0, dword [rsi + 112] - QUAD $0x000001402494940f // sete byte [rsp + 320] + LONG $0xd09b0f41 // setnp r8b + WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x2044; BYTE $0xc0 // and al, r8b + LONG $0xa0248488; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 160], al LONG $0x462ef8c5; BYTE $0x74 // vucomiss xmm0, dword [rsi + 116] - QUAD $0x000001202494940f // sete byte [rsp + 288] + LONG $0xd09b0f41 // setnp r8b + WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x2044; BYTE $0xc0 // and al, r8b + LONG $0x98248488; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 152], al LONG $0x462ef8c5; BYTE $0x78 // vucomiss xmm0, dword [rsi + 120] - LONG $0x2454940f; BYTE $0x1c // sete byte [rsp + 28] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd1940f41 // sete r9b + WORD $0x2041; BYTE $0xc1 // and r9b, al LONG $0x462ef8c5; BYTE $0x7c // vucomiss xmm0, dword [rsi + 124] + WORD $0x9b0f; BYTE $0xd0 // setnp al LONG $0xd0940f41 // sete r8b - WORD $0x0045; BYTE $0xc9 // add r9b, r9b - QUAD $0x000000a0248c0244 // add r9b, byte [rsp + 160] + WORD $0x2041; BYTE $0xc0 // and r8b, al + WORD $0xdb00 // add bl, bl + LONG $0x20245c02 // add bl, byte [rsp + 32] + LONG $0x05e7c040 // shl dil, 5 + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0845; BYTE $0xce // or r14b, r9b - WORD $0xd200 // add dl, dl - LONG $0x70245402 // add dl, byte [rsp + 112] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xf5 // or r13b, r14b - LONG $0x02e7c040 // shl dil, 2 - WORD $0x0840; BYTE $0xd7 // or dil, dl - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0844; BYTE $0xea // or dl, r13b - WORD $0x8941; BYTE $0xd1 // mov r9d, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0844; BYTE $0xca // or dl, r9b - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b - LONG $0x247cb60f; BYTE $0x78 // movzx edi, byte [rsp + 120] - LONG $0x06e7c040 // shl dil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x02e5c041 // shl r13b, 2 + WORD $0x0841; BYTE $0xdd // or r13b, bl + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xc000 // add al, al - LONG $0x48244402 // add al, byte [rsp + 72] + LONG $0x28244402 // add al, byte [rsp + 40] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x1c // movzx eax, byte [rsp + 28] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x1c244488 // mov byte [rsp + 28], al + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc789 // mov edi, eax + QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xe8 // or al, r13b + LONG $0x245cb60f; BYTE $0x58 // movzx ebx, byte [rsp + 88] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0840; BYTE $0xfb // or bl, dil + LONG $0x247cb60f; BYTE $0x50 // movzx edi, byte [rsp + 80] + LONG $0x05e7c040 // shl dil, 5 + WORD $0xe2c0; BYTE $0x06 // shl dl, 6 + WORD $0x0840; BYTE $0xfa // or dl, dil + LONG $0x6cb60f44; WORD $0x4824 // movzx r13d, byte [rsp + 72] + LONG $0x07e5c041 // shl r13b, 7 + WORD $0x0841; BYTE $0xd5 // or r13b, dl + QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] + WORD $0xd200 // add dl, dl + LONG $0x90249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 144] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xd108 // or cl, dl QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] + WORD $0xca08 // or dl, cl + WORD $0xd189 // mov ecx, edx + LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] + WORD $0xca08 // or dl, cl + LONG $0x244cb60f; BYTE $0x1c // movzx ecx, byte [rsp + 28] + WORD $0xc108 // or cl, al + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + LONG $0x06e4c041 // shl r12b, 6 + WORD $0x0841; BYTE $0xc4 // or r12b, al + WORD $0x0841; BYTE $0xdd // or r13b, bl + LONG $0x07e2c041 // shl r10b, 7 + WORD $0x0845; BYTE $0xe2 // or r10b, r12b + WORD $0x0841; BYTE $0xd2 // or r10b, dl + WORD $0x0045; BYTE $0xff // add r15b, r15b + LONG $0x247c0244; BYTE $0x70 // add r15b, byte [rsp + 112] + LONG $0x02e6c041 // shl r14b, 2 + WORD $0x0845; BYTE $0xfe // or r14b, r15b + LONG $0x03e3c041 // shl r11b, 3 + WORD $0x0845; BYTE $0xf3 // or r11b, r14b + QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd8 // or al, r11b + WORD $0xc389 // mov ebx, eax + QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] + WORD $0x0888 // mov byte [rax], cl + QUAD $0x000000982494b60f // movzx edx, byte [rsp + 152] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x0000011024948b48 // mov rdx, qword [rsp + 272] - WORD $0x1a88 // mov byte [rdx], bl - LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl - WORD $0x0841; BYTE $0xff // or r15b, dil - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000140248cb60f // movzx ecx, byte [rsp + 320] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd908 // or cl, bl - LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + LONG $0x06e1c041 // shl r9b, 6 + WORD $0x0841; BYTE $0xd1 // or r9b, dl + LONG $0x01688844 // mov byte [rax + 1], r13b LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xc8 // or r8b, r9b WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b + LONG $0x02508844 // mov byte [rax + 2], r10b + LONG $0x03408844 // mov byte [rax + 3], r8b LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 - LONG $0x04c28348 // add rdx, 4 - QUAD $0x0000011024948948 // mov qword [rsp + 272], rdx - QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 + LONG $0x04c08348 // add rax, 4 + QUAD $0x0000011024848948 // mov qword [rsp + 272], rax + QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 JNE LBB1_79 QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] @@ -4488,7 +4858,7 @@ LBB1_79: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 JL LBB1_127 - JMP LBB1_164 + JMP LBB1_165 LBB1_81: WORD $0x8a44; BYTE $0x32 // mov r14b, byte [rdx] @@ -4540,10 +4910,10 @@ LBB1_85: LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi WORD $0x3949; BYTE $0xc3 // cmp r11, rax - JAE LBB1_168 + JAE LBB1_169 LONG $0xbb048d4b // lea rax, [r11 + 4*r15] WORD $0x3948; BYTE $0xc6 // cmp rsi, rax - JAE LBB1_168 + JAE LBB1_169 LBB1_89: WORD $0xc031 // xor eax, eax @@ -4765,15 +5135,15 @@ LBB1_97: LONG $0x20fa8349 // cmp r10, 32 JL LBB1_133 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 + QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 LBB1_99: QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d QUAD $0x000000982494940f // sete byte [rsp + 152] LONG $0x046e3944 // cmp dword [rsi + 4], r13d - LONG $0xd7940f40 // sete dil + LONG $0xd2940f41 // sete r10b LONG $0x086e3944 // cmp dword [rsi + 8], r13d LONG $0xd6940f41 // sete r14b LONG $0x0c6e3944 // cmp dword [rsi + 12], r13d @@ -4789,11 +5159,11 @@ LBB1_99: LONG $0x206e3944 // cmp dword [rsi + 32], r13d LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] LONG $0x246e3944 // cmp dword [rsi + 36], r13d - WORD $0x940f; BYTE $0xd2 // sete dl + LONG $0xd7940f40 // sete dil LONG $0x286e3944 // cmp dword [rsi + 40], r13d - LONG $0xd1940f41 // sete r9b + LONG $0xd0940f41 // sete r8b LONG $0x2c6e3944 // cmp dword [rsi + 44], r13d - LONG $0xd2940f41 // sete r10b + LONG $0xd1940f41 // sete r9b LONG $0x306e3944 // cmp dword [rsi + 48], r13d LONG $0xd3940f41 // sete r11b LONG $0x346e3944 // cmp dword [rsi + 52], r13d @@ -4833,32 +5203,33 @@ LBB1_99: LONG $0x786e3944 // cmp dword [rsi + 120], r13d LONG $0x2454940f; BYTE $0x1c // sete byte [rsp + 28] LONG $0x7c6e3944 // cmp dword [rsi + 124], r13d - LONG $0xd0940f41 // sete r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009824bc0240 // add dil, byte [rsp + 152] + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009824940244 // add r10b, byte [rsp + 152] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0x68245402 // add dl, byte [rsp + 104] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + LONG $0x247c0240; BYTE $0x68 // add dil, byte [rsp + 104] QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b QUAD $0x00000110249c8b4c // mov r11, qword [rsp + 272] @@ -4866,77 +5237,77 @@ LBB1_99: LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xd200 // add dl, dl - LONG $0x48245402 // add dl, byte [rsp + 72] - WORD $0xd789 // mov edi, edx - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xc000 // add al, al + LONG $0x48244402 // add al, byte [rsp + 72] + WORD $0xc789 // mov edi, eax + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil WORD $0x8841; BYTE $0x1b // mov byte [r11], bl LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl LONG $0x014b8841 // mov byte [r11 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - QUAD $0x00000140248cb60f // movzx ecx, byte [rsp + 320] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x1c // movzx edx, byte [rsp + 28] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0841; BYTE $0xc7 // or r15b, al + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xc000 // add al, al + LONG $0x20244402 // add al, byte [rsp + 32] + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xc808 // or al, cl + LONG $0x244cb60f; BYTE $0x1c // movzx ecx, byte [rsp + 28] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xca08 // or dl, cl + WORD $0xc208 // or dl, al LONG $0x027b8845 // mov byte [r11 + 2], r15b - LONG $0x03438845 // mov byte [r11 + 3], r8b + LONG $0x03538841 // mov byte [r11 + 3], dl LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 LONG $0x04c38349 // add r11, 4 - QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 JNE LBB1_99 WORD $0x894d; BYTE $0xde // mov r14, r11 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] + QUAD $0x000000a824bc8b4c // mov r15, qword [rsp + 168] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 JL LBB1_134 - JMP LBB1_164 + JMP LBB1_165 LBB1_101: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB1_164 + JGE LBB1_165 LBB1_102: WORD $0x894d; BYTE $0xd0 // mov r8, r10 @@ -4978,13 +5349,13 @@ LBB1_104: LONG $0x3f148841 // mov byte [r15 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 JNE LBB1_104 - JMP LBB1_161 + JMP LBB1_162 LBB1_105: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB1_164 + JGE LBB1_165 LBB1_106: WORD $0x894d; BYTE $0xd0 // mov r8, r10 @@ -5002,7 +5373,7 @@ LBB1_108: LBB1_109: LONG $0x05e5c149 // shl r13, 5 WORD $0x394d; BYTE $0xfd // cmp r13, r15 - JGE LBB1_164 + JGE LBB1_165 WORD $0x894d; BYTE $0xf8 // mov r8, r15 WORD $0x294d; BYTE $0xe8 // sub r8, r13 WORD $0xf749; BYTE $0xd5 // not r13 @@ -5041,13 +5412,13 @@ LBB1_141: LONG $0x3b048841 // mov byte [r11 + rdi], al WORD $0x3949; BYTE $0xf2 // cmp r10, rsi JNE LBB1_141 - JMP LBB1_156 + JMP LBB1_157 LBB1_112: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB1_164 + JGE LBB1_165 LBB1_113: WORD $0x894d; BYTE $0xd0 // mov r8, r10 @@ -5095,7 +5466,7 @@ LBB1_116: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB1_164 + JGE LBB1_165 LBB1_117: WORD $0x894d; BYTE $0xd0 // mov r8, r10 @@ -5143,7 +5514,7 @@ LBB1_120: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB1_164 + JGE LBB1_165 LBB1_121: WORD $0x894d; BYTE $0xd0 // mov r8, r10 @@ -5160,7 +5531,7 @@ LBB1_123: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB1_164 + JGE LBB1_165 LBB1_124: WORD $0x894d; BYTE $0xd0 // mov r8, r10 @@ -5177,7 +5548,7 @@ LBB1_126: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB1_164 + JGE LBB1_165 LBB1_127: WORD $0x894d; BYTE $0xd0 // mov r8, r10 @@ -5195,59 +5566,63 @@ LBB1_129: LBB1_130: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB1_164 + JGE LBB1_165 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB1_154 + JNE LBB1_155 LBB1_132: WORD $0xf631 // xor esi, esi - JMP LBB1_157 + JMP LBB1_158 LBB1_133: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB1_164 + JGE LBB1_165 LBB1_134: WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB1_159 + JNE LBB1_160 LBB1_135: WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB1_161 + JMP LBB1_162 LBB1_136: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 LBB1_137: LONG $0x062ef9c5 // vucomisd xmm0, qword [rsi] + WORD $0x9b0f; BYTE $0xd1 // setnp cl WORD $0x940f; BYTE $0xd0 // sete al + WORD $0xc820 // and al, cl WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xdf // mov rdi, r11 LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3f // movzx r9d, byte [r15 + rdi] - WORD $0x3044; BYTE $0xc8 // xor al, r9b + LONG $0x14b60f45; BYTE $0x3f // movzx r10d, byte [r15 + rdi] WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 WORD $0xe3d2 // shl bl, cl + WORD $0x3044; BYTE $0xd0 // xor al, r10b WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b + WORD $0x3044; BYTE $0xd3 // xor bl, r10b LONG $0x3f1c8841 // mov byte [r15 + rdi], bl LONG $0x02c38349 // add r11, 2 LONG $0x462ef9c5; BYTE $0x08 // vucomisd xmm0, qword [rsi + 8] LONG $0x10768d48 // lea rsi, [rsi + 16] + LONG $0xd29b0f41 // setnp r10b WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x2044; BYTE $0xd0 // and al, r10b WORD $0xd8f6 // neg al WORD $0xd830 // xor al, bl WORD $0xc980; BYTE $0x01 // or cl, 1 @@ -5256,14 +5631,14 @@ LBB1_137: WORD $0xc220 // and dl, al WORD $0xda30 // xor dl, bl LONG $0x3f148841 // mov byte [r15 + rdi], dl - WORD $0x394d; BYTE $0xda // cmp r10, r11 + WORD $0x394d; BYTE $0xd9 // cmp r9, r11 JNE LBB1_137 LBB1_138: LONG $0x01c0f641 // test r8b, 1 - JE LBB1_164 + JE LBB1_165 LONG $0x062ef9c5 // vucomisd xmm0, qword [rsi] - JMP LBB1_163 + JMP LBB1_154 LBB1_142: WORD $0x894d; BYTE $0xc2 // mov r10, r8 @@ -5303,9 +5678,9 @@ LBB1_143: LBB1_144: LONG $0x01c0f641 // test r8b, 1 - JE LBB1_164 + JE LBB1_165 LONG $0x2e394466 // cmp word [rsi], r13w - JMP LBB1_163 + JMP LBB1_164 LBB1_146: WORD $0x894d; BYTE $0xc2 // mov r10, r8 @@ -5345,35 +5720,39 @@ LBB1_147: LBB1_148: LONG $0x01c0f641 // test r8b, 1 - JE LBB1_164 + JE LBB1_165 WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 - JMP LBB1_163 + JMP LBB1_164 LBB1_150: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 LBB1_151: LONG $0x062ef8c5 // vucomiss xmm0, dword [rsi] + WORD $0x9b0f; BYTE $0xd1 // setnp cl WORD $0x940f; BYTE $0xd0 // sete al + WORD $0xc820 // and al, cl WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xdf // mov rdi, r11 LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3f // movzx r9d, byte [r15 + rdi] - WORD $0x3044; BYTE $0xc8 // xor al, r9b + LONG $0x14b60f45; BYTE $0x3f // movzx r10d, byte [r15 + rdi] WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 WORD $0xe3d2 // shl bl, cl + WORD $0x3044; BYTE $0xd0 // xor al, r10b WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b + WORD $0x3044; BYTE $0xd3 // xor bl, r10b LONG $0x3f1c8841 // mov byte [r15 + rdi], bl LONG $0x02c38349 // add r11, 2 LONG $0x462ef8c5; BYTE $0x04 // vucomiss xmm0, dword [rsi + 4] LONG $0x08768d48 // lea rsi, [rsi + 8] + LONG $0xd29b0f41 // setnp r10b WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x2044; BYTE $0xd0 // and al, r10b WORD $0xd8f6 // neg al WORD $0xd830 // xor al, bl WORD $0xc980; BYTE $0x01 // or cl, 1 @@ -5382,22 +5761,39 @@ LBB1_151: WORD $0xc220 // and dl, al WORD $0xda30 // xor dl, bl LONG $0x3f148841 // mov byte [r15 + rdi], dl - WORD $0x394d; BYTE $0xda // cmp r10, r11 + WORD $0x394d; BYTE $0xd9 // cmp r9, r11 JNE LBB1_151 LBB1_152: LONG $0x01c0f641 // test r8b, 1 - JE LBB1_164 + JE LBB1_165 LONG $0x062ef8c5 // vucomiss xmm0, dword [rsi] - JMP LBB1_163 LBB1_154: + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xc220 // and dl, al + WORD $0xdaf6 // neg dl + WORD $0x894c; BYTE $0xd8 // mov rax, r11 + LONG $0x03e8c148 // shr rax, 3 + LONG $0x06348a41 // mov sil, byte [r14 + rax] + LONG $0x07e38041 // and r11b, 7 + WORD $0x01b3 // mov bl, 1 + WORD $0x8944; BYTE $0xd9 // mov ecx, r11d + WORD $0xe3d2 // shl bl, cl + WORD $0x3040; BYTE $0xf2 // xor dl, sil + WORD $0xd320 // and bl, dl + WORD $0x3040; BYTE $0xf3 // xor bl, sil + LONG $0x061c8841 // mov byte [r14 + rax], bl + JMP LBB1_165 + +LBB1_155: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0xf631 // xor esi, esi QUAD $0x00000178249c8b4c // mov r11, qword [rsp + 376] -LBB1_155: +LBB1_156: LONG $0x34343845 // cmp byte [r12 + rsi], r14b WORD $0x940f; BYTE $0xd3 // sete bl WORD $0xdbf6 // neg bl @@ -5424,14 +5820,14 @@ LBB1_155: WORD $0xd030 // xor al, dl LONG $0x3b048841 // mov byte [r11 + rdi], al WORD $0x3949; BYTE $0xf2 // cmp r10, rsi - JNE LBB1_155 + JNE LBB1_156 -LBB1_156: +LBB1_157: WORD $0x0149; BYTE $0xf4 // add r12, rsi -LBB1_157: +LBB1_158: LONG $0x01c0f641 // test r8b, 1 - JE LBB1_164 + JE LBB1_165 LONG $0x24343845 // cmp byte [r12], r14b WORD $0x940f; BYTE $0xd0 // sete al WORD $0xd8f6 // neg al @@ -5447,15 +5843,15 @@ LBB1_157: WORD $0xc320 // and bl, al WORD $0x3040; BYTE $0xfb // xor bl, dil LONG $0x101c8841 // mov byte [r8 + rdx], bl - JMP LBB1_164 + JMP LBB1_165 -LBB1_159: +LBB1_160: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 -LBB1_160: +LBB1_161: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d WORD $0x940f; BYTE $0xd0 // sete al WORD $0xd8f6 // neg al @@ -5483,14 +5879,14 @@ LBB1_160: WORD $0xda30 // xor dl, bl LONG $0x3f148841 // mov byte [r15 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB1_160 + JNE LBB1_161 -LBB1_161: +LBB1_162: LONG $0x01c0f641 // test r8b, 1 - JE LBB1_164 + JE LBB1_165 WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d -LBB1_163: +LBB1_164: WORD $0x940f; BYTE $0xd0 // sete al WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xda // mov rdx, r11 @@ -5505,12 +5901,12 @@ LBB1_163: WORD $0x3040; BYTE $0xf3 // xor bl, sil LONG $0x161c8841 // mov byte [r14 + rdx], bl -LBB1_164: +LBB1_165: MOVQ 1280(SP), SP VZEROUPPER RET -LBB1_165: +LBB1_166: LONG $0xe0e58349 // and r13, -32 WORD $0x894c; BYTE $0xe8 // mov rax, r13 LONG $0x05e0c148 // shl rax, 5 @@ -5525,7 +5921,7 @@ LBB1_165: WORD $0xc031 // xor eax, eax QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 -LBB1_166: +LBB1_167: WORD $0x8948; BYTE $0xc3 // mov rbx, rax QUAD $0x0000019824848948 // mov qword [rsp + 408], rax LONG $0x05e3c148 // shl rbx, 5 @@ -5626,13 +6022,13 @@ LBB1_166: LONG $0x24448948; BYTE $0x68 // mov qword [rsp + 104], rax WORD $0x8949; BYTE $0xdf // mov r15, rbx LONG $0x80cf8149; WORD $0x0002; BYTE $0x00 // or r15, 640 - QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 + QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 WORD $0x8949; BYTE $0xdb // mov r11, rbx LONG $0xa0cb8149; WORD $0x0002; BYTE $0x00 // or r11, 672 QUAD $0x000000c8249c894c // mov qword [rsp + 200], r11 WORD $0x8949; BYTE $0xd8 // mov r8, rbx LONG $0xc0c88149; WORD $0x0002; BYTE $0x00 // or r8, 704 - QUAD $0x000000a82484894c // mov qword [rsp + 168], r8 + QUAD $0x000000b02484894c // mov qword [rsp + 176], r8 WORD $0x8948; BYTE $0xda // mov rdx, rbx LONG $0xe0ca8148; WORD $0x0002; BYTE $0x00 // or rdx, 736 QUAD $0x000000c024948948 // mov qword [rsp + 192], rdx @@ -5715,11 +6111,11 @@ LBB1_166: QUAD $0x020116642059e3c4 // vpinsrb xmm4, xmm4, byte [rsi + rdx + 1], 2 LONG $0x24548b48; BYTE $0x68 // mov rdx, qword [rsp + 104] QUAD $0x030116642059e3c4 // vpinsrb xmm4, xmm4, byte [rsi + rdx + 1], 3 - QUAD $0x000000b024948b48 // mov rdx, qword [rsp + 176] + QUAD $0x000000a824948b48 // mov rdx, qword [rsp + 168] QUAD $0x040116642059e3c4 // vpinsrb xmm4, xmm4, byte [rsi + rdx + 1], 4 QUAD $0x000000c824948b48 // mov rdx, qword [rsp + 200] QUAD $0x050116642059e3c4 // vpinsrb xmm4, xmm4, byte [rsi + rdx + 1], 5 - QUAD $0x000000a824948b48 // mov rdx, qword [rsp + 168] + QUAD $0x000000b024948b48 // mov rdx, qword [rsp + 176] QUAD $0x060116642059e3c4 // vpinsrb xmm4, xmm4, byte [rsi + rdx + 1], 6 QUAD $0x000000c024948b48 // mov rdx, qword [rsp + 192] QUAD $0x070116642059e3c4 // vpinsrb xmm4, xmm4, byte [rsi + rdx + 1], 7 @@ -5774,11 +6170,11 @@ LBB1_166: QUAD $0x02020e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rcx + 2], 2 LONG $0x24548b4c; BYTE $0x68 // mov r10, qword [rsp + 104] QUAD $0x030216442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r10 + 2], 3 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] QUAD $0x040206442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rax + 2], 4 QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] QUAD $0x050206442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rax + 2], 5 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x060206442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rax + 2], 6 QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] QUAD $0x070206442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rax + 2], 7 @@ -5831,11 +6227,11 @@ LBB1_166: QUAD $0x010316642021e3c4 // vpinsrb xmm4, xmm11, byte [rsi + rdx + 3], 1 QUAD $0x02030e642059e3c4 // vpinsrb xmm4, xmm4, byte [rsi + rcx + 3], 2 QUAD $0x030316642059a3c4 // vpinsrb xmm4, xmm4, byte [rsi + r10 + 3], 3 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] + QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] QUAD $0x04030e642059e3c4 // vpinsrb xmm4, xmm4, byte [rsi + rcx + 3], 4 QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] QUAD $0x05030e642059e3c4 // vpinsrb xmm4, xmm4, byte [rsi + rcx + 3], 5 - QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] + QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] QUAD $0x06030e642059e3c4 // vpinsrb xmm4, xmm4, byte [rsi + rcx + 3], 6 QUAD $0x000000c024848b4c // mov r8, qword [rsp + 192] QUAD $0x070306642059a3c4 // vpinsrb xmm4, xmm4, byte [rsi + r8 + 3], 7 @@ -5895,11 +6291,11 @@ LBB1_166: QUAD $0x020406442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rax + 4], 2 LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] QUAD $0x030406442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rax + 4], 3 - QUAD $0x000000b024ac8b4c // mov r13, qword [rsp + 176] + QUAD $0x000000a824ac8b4c // mov r13, qword [rsp + 168] QUAD $0x04042e442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r13 + 4], 4 QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] QUAD $0x05040e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rcx + 4], 5 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x060406442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rax + 4], 6 QUAD $0x070406442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r8 + 4], 7 QUAD $0x080426442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r12 + 4], 8 @@ -5949,7 +6345,7 @@ LBB1_166: QUAD $0x03050e642059a3c4 // vpinsrb xmm4, xmm4, byte [rsi + r9 + 5], 3 QUAD $0x04052e642059a3c4 // vpinsrb xmm4, xmm4, byte [rsi + r13 + 5], 4 QUAD $0x05050e642059e3c4 // vpinsrb xmm4, xmm4, byte [rsi + rcx + 5], 5 - QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] + QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] QUAD $0x06050e642059e3c4 // vpinsrb xmm4, xmm4, byte [rsi + rcx + 5], 6 QUAD $0x000000c0248c8b48 // mov rcx, qword [rsp + 192] QUAD $0x07050e642059e3c4 // vpinsrb xmm4, xmm4, byte [rsi + rcx + 5], 7 @@ -6007,11 +6403,11 @@ LBB1_166: QUAD $0x02063e442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r15 + 6], 2 LONG $0x244c8b4c; BYTE $0x68 // mov r9, qword [rsp + 104] QUAD $0x03060e442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r9 + 6], 3 - QUAD $0x000000b0249c8b48 // mov rbx, qword [rsp + 176] + QUAD $0x000000a8249c8b48 // mov rbx, qword [rsp + 168] QUAD $0x04061e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rbx + 6], 4 QUAD $0x000000c824948b48 // mov rdx, qword [rsp + 200] QUAD $0x050616442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdx + 6], 5 - QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] + QUAD $0x000000b0249c8b4c // mov r11, qword [rsp + 176] QUAD $0x06061e442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r11 + 6], 6 QUAD $0x07062e442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r13 + 6], 7 QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] @@ -6126,7 +6522,7 @@ LBB1_166: QUAD $0x04081e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rbx + 8], 4 WORD $0x894c; BYTE $0xf3 // mov rbx, r14 QUAD $0x050836442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r14 + 8], 5 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x060806442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rax + 8], 6 QUAD $0x000000c024948b48 // mov rdx, qword [rsp + 192] QUAD $0x070816442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdx + 8], 7 @@ -6175,7 +6571,7 @@ LBB1_166: QUAD $0x01092e742039a3c4 // vpinsrb xmm6, xmm8, byte [rsi + r13 + 9], 1 QUAD $0x020926742049a3c4 // vpinsrb xmm6, xmm6, byte [rsi + r12 + 9], 2 QUAD $0x03090e742049e3c4 // vpinsrb xmm6, xmm6, byte [rsi + rcx + 9], 3 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] + QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] QUAD $0x04090e742049e3c4 // vpinsrb xmm6, xmm6, byte [rsi + rcx + 9], 4 QUAD $0x05091e742049e3c4 // vpinsrb xmm6, xmm6, byte [rsi + rbx + 9], 5 QUAD $0x060906742049e3c4 // vpinsrb xmm6, xmm6, byte [rsi + rax + 9], 6 @@ -6236,11 +6632,11 @@ LBB1_166: QUAD $0x020a1e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rbx + 10], 2 LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] QUAD $0x030a065c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rax + 10], 3 - QUAD $0x000000b0248c8b4c // mov r9, qword [rsp + 176] + QUAD $0x000000a8248c8b4c // mov r9, qword [rsp + 168] QUAD $0x040a0e5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rsi + r9 + 10], 4 QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] QUAD $0x050a065c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rax + 10], 5 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x060a065c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rax + 10], 6 QUAD $0x070a165c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdx + 10], 7 QUAD $0x000000d824848b4c // mov r8, qword [rsp + 216] @@ -6291,7 +6687,7 @@ LBB1_166: QUAD $0x040b0e4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rsi + r9 + 11], 4 QUAD $0x000000c8249c8b48 // mov rbx, qword [rsp + 200] QUAD $0x050b1e4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rbx + 11], 5 - QUAD $0x000000a824ac8b4c // mov r13, qword [rsp + 168] + QUAD $0x000000b024ac8b4c // mov r13, qword [rsp + 176] QUAD $0x060b2e4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rsi + r13 + 11], 6 QUAD $0x070b164c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rdx + 11], 7 WORD $0x8949; BYTE $0xd1 // mov r9, rdx @@ -6350,7 +6746,7 @@ LBB1_166: QUAD $0x020c0e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rcx + 12], 2 LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] QUAD $0x030c0e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rcx + 12], 3 - QUAD $0x000000b024948b48 // mov rdx, qword [rsp + 176] + QUAD $0x000000a824948b48 // mov rdx, qword [rsp + 168] QUAD $0x040c16442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdx + 12], 4 QUAD $0x050c1e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rbx + 12], 5 WORD $0x894c; BYTE $0xeb // mov rbx, r13 @@ -6463,11 +6859,11 @@ LBB1_166: QUAD $0x020e164c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rdx + 14], 2 LONG $0x245c8b48; BYTE $0x68 // mov rbx, qword [rsp + 104] QUAD $0x030e1e4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rbx + 14], 3 - QUAD $0x000000b024848b4c // mov r8, qword [rsp + 176] + QUAD $0x000000a824848b4c // mov r8, qword [rsp + 168] QUAD $0x040e064c2071a3c4 // vpinsrb xmm1, xmm1, byte [rsi + r8 + 14], 4 QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] QUAD $0x050e064c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rax + 14], 5 - QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] + QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] QUAD $0x060e0e4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rcx + 14], 6 QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] QUAD $0x070e064c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rax + 14], 7 @@ -6582,10 +6978,10 @@ LBB1_166: QUAD $0x021006442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rax + 16], 2 LONG $0x245c8b4c; BYTE $0x68 // mov r11, qword [rsp + 104] QUAD $0x03101e442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r11 + 16], 3 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] QUAD $0x041006442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rax + 16], 4 QUAD $0x05101e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rbx + 16], 5 - QUAD $0x000000a8248c8b4c // mov r9, qword [rsp + 168] + QUAD $0x000000b0248c8b4c // mov r9, qword [rsp + 176] QUAD $0x06100e442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r9 + 16], 6 QUAD $0x071016442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdx + 16], 7 QUAD $0x000000d824948b48 // mov rdx, qword [rsp + 216] @@ -6638,7 +7034,7 @@ LBB1_166: QUAD $0x000000e824848b4c // mov r8, qword [rsp + 232] QUAD $0x021106542069a3c4 // vpinsrb xmm2, xmm2, byte [rsi + r8 + 17], 2 QUAD $0x03111e542069a3c4 // vpinsrb xmm2, xmm2, byte [rsi + r11 + 17], 3 - QUAD $0x000000b024948b4c // mov r10, qword [rsp + 176] + QUAD $0x000000a824948b4c // mov r10, qword [rsp + 168] QUAD $0x041116542069a3c4 // vpinsrb xmm2, xmm2, byte [rsi + r10 + 17], 4 QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] QUAD $0x05113e542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rdi + 17], 5 @@ -6703,7 +7099,7 @@ LBB1_166: QUAD $0x041216442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r10 + 18], 4 QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] QUAD $0x051206442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rax + 18], 5 - QUAD $0x000000a824848b4c // mov r8, qword [rsp + 168] + QUAD $0x000000b024848b4c // mov r8, qword [rsp + 176] QUAD $0x061206442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r8 + 18], 6 QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] QUAD $0x071206442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rax + 18], 7 @@ -6757,7 +7153,7 @@ LBB1_166: QUAD $0x02133e542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rdi + 19], 2 LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] QUAD $0x03133e542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rdi + 19], 3 - QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] + QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] QUAD $0x04133e542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rdi + 19], 4 QUAD $0x000000c824ac8b4c // mov r13, qword [rsp + 200] QUAD $0x05132e542069a3c4 // vpinsrb xmm2, xmm2, byte [rsi + r13 + 19], 5 @@ -6817,10 +7213,10 @@ LBB1_166: QUAD $0x021416442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdx + 20], 2 LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] QUAD $0x03143e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdi + 20], 3 - QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] + QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] QUAD $0x04143e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdi + 20], 4 QUAD $0x05142e442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r13 + 20], 5 - QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] + QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] QUAD $0x06143e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdi + 20], 6 QUAD $0x000000c024ac8b4c // mov r13, qword [rsp + 192] QUAD $0x07142e442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r13 + 20], 7 @@ -6876,11 +7272,11 @@ LBB1_166: QUAD $0x021516542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rdx + 21], 2 LONG $0x24548b48; BYTE $0x68 // mov rdx, qword [rsp + 104] QUAD $0x031516542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rdx + 21], 3 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] QUAD $0x041506542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rax + 21], 4 QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] QUAD $0x051506542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rax + 21], 5 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x061506542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rax + 21], 6 QUAD $0x07152e542069a3c4 // vpinsrb xmm2, xmm2, byte [rsi + r13 + 21], 7 QUAD $0x08153e542069a3c4 // vpinsrb xmm2, xmm2, byte [rsi + r15 + 21], 8 @@ -6936,11 +7332,11 @@ LBB1_166: QUAD $0x000000e824bc8b48 // mov rdi, qword [rsp + 232] QUAD $0x02163e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdi + 22], 2 QUAD $0x031616442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdx + 22], 3 - QUAD $0x000000b024948b48 // mov rdx, qword [rsp + 176] + QUAD $0x000000a824948b48 // mov rdx, qword [rsp + 168] QUAD $0x041616442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdx + 22], 4 QUAD $0x000000c824948b48 // mov rdx, qword [rsp + 200] QUAD $0x051616442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdx + 22], 5 - QUAD $0x000000a824948b48 // mov rdx, qword [rsp + 168] + QUAD $0x000000b024948b48 // mov rdx, qword [rsp + 176] QUAD $0x061616442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdx + 22], 6 QUAD $0x000000c024948b48 // mov rdx, qword [rsp + 192] QUAD $0x071616442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdx + 22], 7 @@ -6993,11 +7389,11 @@ LBB1_166: QUAD $0x021706542069a3c4 // vpinsrb xmm2, xmm2, byte [rsi + r8 + 23], 2 LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] QUAD $0x03173e542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rdi + 23], 3 - QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] + QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] QUAD $0x04173e542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rdi + 23], 4 QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] QUAD $0x05173e542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rdi + 23], 5 - QUAD $0x000000a824ac8b4c // mov r13, qword [rsp + 168] + QUAD $0x000000b024ac8b4c // mov r13, qword [rsp + 176] QUAD $0x06172e542069a3c4 // vpinsrb xmm2, xmm2, byte [rsi + r13 + 23], 6 QUAD $0x000000c024bc8b48 // mov rdi, qword [rsp + 192] QUAD $0x07173e542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rdi + 23], 7 @@ -7052,7 +7448,7 @@ LBB1_166: QUAD $0x021806442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r8 + 24], 2 LONG $0x24548b4c; BYTE $0x68 // mov r10, qword [rsp + 104] QUAD $0x031816442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r10 + 24], 3 - QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] + QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] QUAD $0x04183e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdi + 24], 4 QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] QUAD $0x05183e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdi + 24], 5 @@ -7107,11 +7503,11 @@ LBB1_166: QUAD $0x000000e8249c8b48 // mov rbx, qword [rsp + 232] QUAD $0x02191e542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rbx + 25], 2 QUAD $0x031916542069a3c4 // vpinsrb xmm2, xmm2, byte [rsi + r10 + 25], 3 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] QUAD $0x041906542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rax + 25], 4 QUAD $0x000000c824b48b4c // mov r14, qword [rsp + 200] QUAD $0x051936542069a3c4 // vpinsrb xmm2, xmm2, byte [rsi + r14 + 25], 5 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x061906542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rax + 25], 6 QUAD $0x071906542069a3c4 // vpinsrb xmm2, xmm2, byte [rsi + r8 + 25], 7 QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] @@ -7169,10 +7565,10 @@ LBB1_166: QUAD $0x021a1e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rbx + 26], 2 LONG $0x245c8b48; BYTE $0x68 // mov rbx, qword [rsp + 104] QUAD $0x031a1e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rbx + 26], 3 - QUAD $0x000000b024948b48 // mov rdx, qword [rsp + 176] + QUAD $0x000000a824948b48 // mov rdx, qword [rsp + 168] QUAD $0x041a16442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdx + 26], 4 QUAD $0x051a36442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r14 + 26], 5 - QUAD $0x000000a8248c8b4c // mov r9, qword [rsp + 168] + QUAD $0x000000b0248c8b4c // mov r9, qword [rsp + 176] QUAD $0x061a0e442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r9 + 26], 6 QUAD $0x000000c024bc8b48 // mov rdi, qword [rsp + 192] QUAD $0x071a3e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdi + 26], 7 @@ -7286,10 +7682,10 @@ LBB1_166: QUAD $0x021c0e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rcx + 28], 2 LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] QUAD $0x031c3e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdi + 28], 3 - QUAD $0x000000b0249c8b4c // mov r11, qword [rsp + 176] + QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] QUAD $0x041c1e442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r11 + 28], 4 QUAD $0x051c06442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r8 + 28], 5 - QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] + QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] QUAD $0x061c3e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdi + 28], 6 QUAD $0x071c06442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rax + 28], 7 QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] @@ -7346,7 +7742,7 @@ LBB1_166: QUAD $0x041d1e542069a3c4 // vpinsrb xmm2, xmm2, byte [rsi + r11 + 29], 4 QUAD $0x000000c8249c8b4c // mov r11, qword [rsp + 200] QUAD $0x051d1e542069a3c4 // vpinsrb xmm2, xmm2, byte [rsi + r11 + 29], 5 - QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] + QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] QUAD $0x061d3e542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rdi + 29], 6 QUAD $0x000000c024bc8b48 // mov rdi, qword [rsp + 192] QUAD $0x071d3e542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rdi + 29], 7 @@ -7407,12 +7803,12 @@ LBB1_166: QUAD $0x021f064c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rax + 31], 2 QUAD $0x031e0e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rcx + 30], 3 QUAD $0x031f0e4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rcx + 31], 3 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] QUAD $0x041e06442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rax + 30], 4 QUAD $0x041f064c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rax + 31], 4 QUAD $0x051e1e442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r11 + 30], 5 QUAD $0x051f1e4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rsi + r11 + 31], 5 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x061e06442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rax + 30], 6 QUAD $0x061f064c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rax + 31], 6 QUAD $0x00000110249c8b4c // mov r11, qword [rsp + 272] @@ -7624,7 +8020,7 @@ LBB1_166: LONG $0x20c18348 // add rcx, 32 WORD $0x8948; BYTE $0xc8 // mov rax, rcx QUAD $0x00000180248c3b48 // cmp rcx, qword [rsp + 384] - JNE LBB1_166 + JNE LBB1_167 QUAD $0x0000018824ac8b4c // mov r13, qword [rsp + 392] QUAD $0x0000018024ac3b4c // cmp r13, qword [rsp + 384] QUAD $0x0000011824bc8b4c // mov r15, qword [rsp + 280] @@ -7633,7 +8029,7 @@ LBB1_166: JNE LBB1_36 JMP LBB1_109 -LBB1_168: +LBB1_169: LONG $0xe0e78349 // and r15, -32 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 @@ -7648,7 +8044,7 @@ LBB1_168: WORD $0xc031 // xor eax, eax QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 -LBB1_169: +LBB1_170: WORD $0x8948; BYTE $0xc3 // mov rbx, rax QUAD $0x0000019824848948 // mov qword [rsp + 408], rax LONG $0x05e3c148 // shl rbx, 5 @@ -7660,13 +8056,13 @@ LBB1_169: QUAD $0x0000009824848948 // mov qword [rsp + 152], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x60c88348 // or rax, 96 - QUAD $0x000000b024848948 // mov qword [rsp + 176], rax + QUAD $0x000000a824848948 // mov qword [rsp + 168], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x00800d48; WORD $0x0000 // or rax, 128 LONG $0x24448948; BYTE $0x78 // mov qword [rsp + 120], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x00a00d48; WORD $0x0000 // or rax, 160 - QUAD $0x000000a824848948 // mov qword [rsp + 168], rax + QUAD $0x000000b024848948 // mov qword [rsp + 176], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x00c00d48; WORD $0x0000 // or rax, 192 QUAD $0x000000e824848948 // mov qword [rsp + 232], rax @@ -7805,11 +8201,11 @@ LBB1_169: LONG $0x2061a3c4; WORD $0x361c; BYTE $0x01 // vpinsrb xmm3, xmm3, byte [rsi + r14], 1 QUAD $0x0000009824948b4c // mov r10, qword [rsp + 152] LONG $0x2061a3c4; WORD $0x161c; BYTE $0x02 // vpinsrb xmm3, xmm3, byte [rsi + r10], 2 - QUAD $0x000000b024a48b4c // mov r12, qword [rsp + 176] + QUAD $0x000000a824a48b4c // mov r12, qword [rsp + 168] LONG $0x2061a3c4; WORD $0x261c; BYTE $0x03 // vpinsrb xmm3, xmm3, byte [rsi + r12], 3 LONG $0x24448b4c; BYTE $0x78 // mov r8, qword [rsp + 120] LONG $0x2061a3c4; WORD $0x061c; BYTE $0x04 // vpinsrb xmm3, xmm3, byte [rsi + r8], 4 - QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] + QUAD $0x000000b0249c8b4c // mov r11, qword [rsp + 176] LONG $0x2061a3c4; WORD $0x1e1c; BYTE $0x05 // vpinsrb xmm3, xmm3, byte [rsi + r11], 5 QUAD $0x000000e8248c8b4c // mov r9, qword [rsp + 232] LONG $0x2061a3c4; WORD $0x0e1c; BYTE $0x06 // vpinsrb xmm3, xmm3, byte [rsi + r9], 6 @@ -7924,11 +8320,11 @@ LBB1_169: QUAD $0x0102065c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rax + 2], 1 QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] QUAD $0x02023e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdi + 2], 2 - QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] + QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] QUAD $0x03023e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdi + 2], 3 LONG $0x247c8b48; BYTE $0x78 // mov rdi, qword [rsp + 120] QUAD $0x04023e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdi + 2], 4 - QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] + QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] QUAD $0x05023e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdi + 2], 5 QUAD $0x000000e824bc8b48 // mov rdi, qword [rsp + 232] QUAD $0x06023e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdi + 2], 6 @@ -7973,11 +8369,11 @@ LBB1_169: QUAD $0x0103066c2039e3c4 // vpinsrb xmm5, xmm8, byte [rsi + rax + 3], 1 QUAD $0x00000098249c8b48 // mov rbx, qword [rsp + 152] QUAD $0x02031e6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rsi + rbx + 3], 2 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] QUAD $0x0303066c2051e3c4 // vpinsrb xmm5, xmm5, byte [rsi + rax + 3], 3 LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] QUAD $0x0403066c2051e3c4 // vpinsrb xmm5, xmm5, byte [rsi + rax + 3], 4 - QUAD $0x000000a824948b4c // mov r10, qword [rsp + 168] + QUAD $0x000000b024948b4c // mov r10, qword [rsp + 176] QUAD $0x0503166c2051a3c4 // vpinsrb xmm5, xmm5, byte [rsi + r10 + 3], 5 QUAD $0x000000e824b48b4c // mov r14, qword [rsp + 232] QUAD $0x0603366c2051a3c4 // vpinsrb xmm5, xmm5, byte [rsi + r14 + 3], 6 @@ -8037,7 +8433,7 @@ LBB1_169: LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] QUAD $0x0104065c2011e3c4 // vpinsrb xmm3, xmm13, byte [rsi + rax + 4], 1 QUAD $0x02041e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rbx + 4], 2 - QUAD $0x000000b0249c8b4c // mov r11, qword [rsp + 176] + QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] QUAD $0x03041e5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rsi + r11 + 4], 3 LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] QUAD $0x0404065c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rax + 4], 4 @@ -8092,7 +8488,7 @@ LBB1_169: QUAD $0x0205166c2051e3c4 // vpinsrb xmm5, xmm5, byte [rsi + rdx + 5], 2 QUAD $0x03051e6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rsi + r11 + 5], 3 QUAD $0x0405066c2051e3c4 // vpinsrb xmm5, xmm5, byte [rsi + rax + 5], 4 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x0505066c2051e3c4 // vpinsrb xmm5, xmm5, byte [rsi + rax + 5], 5 QUAD $0x06053e6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rsi + rdi + 5], 6 QUAD $0x0705166c2051a3c4 // vpinsrb xmm5, xmm5, byte [rsi + r10 + 5], 7 @@ -8147,11 +8543,11 @@ LBB1_169: QUAD $0x0106266c2041a3c4 // vpinsrb xmm5, xmm7, byte [rsi + r12 + 6], 1 QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] QUAD $0x02060e6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rsi + rcx + 6], 2 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] + QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] QUAD $0x03060e6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rsi + rcx + 6], 3 LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] QUAD $0x04060e6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rsi + rcx + 6], 4 - QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] + QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] QUAD $0x05063e6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rsi + rdi + 6], 5 QUAD $0x000000e8249c8b48 // mov rbx, qword [rsp + 232] QUAD $0x06061e6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rsi + rbx + 6], 6 @@ -8200,7 +8596,7 @@ LBB1_169: QUAD $0x01070e4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rcx + 7], 1 QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] QUAD $0x02070e4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rcx + 7], 2 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] + QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] QUAD $0x03070e4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rcx + 7], 3 LONG $0x24548b48; BYTE $0x78 // mov rdx, qword [rsp + 120] QUAD $0x0407164c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rdx + 7], 4 @@ -8262,11 +8658,11 @@ LBB1_169: QUAD $0x0108066c2029e3c4 // vpinsrb xmm5, xmm10, byte [rsi + rax + 8], 1 QUAD $0x00000098248c8b4c // mov r9, qword [rsp + 152] QUAD $0x02080e6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rsi + r9 + 8], 2 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] QUAD $0x0308066c2051e3c4 // vpinsrb xmm5, xmm5, byte [rsi + rax + 8], 3 LONG $0x247c8b48; BYTE $0x78 // mov rdi, qword [rsp + 120] QUAD $0x04083e6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rsi + rdi + 8], 4 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x0508066c2051e3c4 // vpinsrb xmm5, xmm5, byte [rsi + rax + 8], 5 QUAD $0x000000e824bc8b4c // mov r15, qword [rsp + 232] QUAD $0x06083e6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rsi + r15 + 8], 6 @@ -8313,10 +8709,10 @@ LBB1_169: LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] QUAD $0x01090e7c2021e3c4 // vpinsrb xmm7, xmm11, byte [rsi + rcx + 9], 1 QUAD $0x02090e7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rsi + r9 + 9], 2 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] + QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] QUAD $0x03090e7c2041e3c4 // vpinsrb xmm7, xmm7, byte [rsi + rcx + 9], 3 QUAD $0x04093e7c2041e3c4 // vpinsrb xmm7, xmm7, byte [rsi + rdi + 9], 4 - QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] + QUAD $0x000000b0249c8b4c // mov r11, qword [rsp + 176] QUAD $0x05091e7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rsi + r11 + 9], 5 QUAD $0x06093e7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rsi + r15 + 9], 6 QUAD $0x000000d8249c8b48 // mov rbx, qword [rsp + 216] @@ -8376,7 +8772,7 @@ LBB1_169: QUAD $0x010a06642059e3c4 // vpinsrb xmm4, xmm4, byte [rsi + rax + 10], 1 QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] QUAD $0x020a06642059e3c4 // vpinsrb xmm4, xmm4, byte [rsi + rax + 10], 2 - QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] + QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] QUAD $0x030a3e642059e3c4 // vpinsrb xmm4, xmm4, byte [rsi + rdi + 10], 3 LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] QUAD $0x040a06642059e3c4 // vpinsrb xmm4, xmm4, byte [rsi + rax + 10], 4 @@ -8431,7 +8827,7 @@ LBB1_169: QUAD $0x030b3e542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rdi + 11], 3 LONG $0x247c8b48; BYTE $0x78 // mov rdi, qword [rsp + 120] QUAD $0x040b3e542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rdi + 11], 4 - QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] + QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] QUAD $0x050b3e542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rdi + 11], 5 QUAD $0x060b1e542069a3c4 // vpinsrb xmm2, xmm2, byte [rsi + r11 + 11], 6 QUAD $0x000000d8248c8b4c // mov r9, qword [rsp + 216] @@ -8489,11 +8885,11 @@ LBB1_169: QUAD $0x010c16542051e3c4 // vpinsrb xmm2, xmm5, byte [rsi + rdx + 12], 1 WORD $0x894c; BYTE $0xf7 // mov rdi, r14 QUAD $0x020c36542069a3c4 // vpinsrb xmm2, xmm2, byte [rsi + r14 + 12], 2 - QUAD $0x000000b0249c8b4c // mov r11, qword [rsp + 176] + QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] QUAD $0x030c1e542069a3c4 // vpinsrb xmm2, xmm2, byte [rsi + r11 + 12], 3 LONG $0x24548b48; BYTE $0x78 // mov rdx, qword [rsp + 120] QUAD $0x040c16542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rdx + 12], 4 - QUAD $0x000000a824b48b4c // mov r14, qword [rsp + 168] + QUAD $0x000000b024b48b4c // mov r14, qword [rsp + 176] QUAD $0x050c36542069a3c4 // vpinsrb xmm2, xmm2, byte [rsi + r14 + 12], 5 QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] QUAD $0x060c06542069e3c4 // vpinsrb xmm2, xmm2, byte [rsi + rax + 12], 6 @@ -8603,7 +8999,7 @@ LBB1_169: QUAD $0x010e16442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdx + 14], 1 QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] QUAD $0x020e3e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdi + 14], 2 - QUAD $0x000000b024a48b4c // mov r12, qword [rsp + 176] + QUAD $0x000000a824a48b4c // mov r12, qword [rsp + 168] QUAD $0x030e26442079a3c4 // vpinsrb xmm0, xmm0, byte [rsi + r12 + 14], 3 LONG $0x247c8b48; BYTE $0x78 // mov rdi, qword [rsp + 120] QUAD $0x040e3e442079e3c4 // vpinsrb xmm0, xmm0, byte [rsi + rdi + 14], 4 @@ -8662,7 +9058,7 @@ LBB1_169: QUAD $0x030f265c2061a3c4 // vpinsrb xmm3, xmm3, byte [rsi + r12 + 15], 3 LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] QUAD $0x040f065c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rax + 15], 4 - QUAD $0x000000a824948b48 // mov rdx, qword [rsp + 168] + QUAD $0x000000b024948b48 // mov rdx, qword [rsp + 176] QUAD $0x050f165c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdx + 15], 5 QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] QUAD $0x060f065c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rax + 15], 6 @@ -8722,7 +9118,7 @@ LBB1_169: QUAD $0x01103e4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rdi + 16], 1 QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] QUAD $0x02103e4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rdi + 16], 2 - QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] + QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] QUAD $0x03103e4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rdi + 16], 3 LONG $0x246c8b4c; BYTE $0x78 // mov r13, qword [rsp + 120] QUAD $0x04102e4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rsi + r13 + 16], 4 @@ -8778,10 +9174,10 @@ LBB1_169: QUAD $0x01110e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rcx + 17], 1 QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] QUAD $0x02110e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rcx + 17], 2 - QUAD $0x000000b024848b4c // mov r8, qword [rsp + 176] + QUAD $0x000000a824848b4c // mov r8, qword [rsp + 168] QUAD $0x0311065c2061a3c4 // vpinsrb xmm3, xmm3, byte [rsi + r8 + 17], 3 QUAD $0x04112e5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rsi + r13 + 17], 4 - QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] + QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] QUAD $0x05113e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdi + 17], 5 QUAD $0x000000e824bc8b48 // mov rdi, qword [rsp + 232] QUAD $0x06113e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdi + 17], 6 @@ -8841,7 +9237,7 @@ LBB1_169: QUAD $0x0312064c2071a3c4 // vpinsrb xmm1, xmm1, byte [rsi + r8 + 18], 3 LONG $0x24548b4c; BYTE $0x78 // mov r10, qword [rsp + 120] QUAD $0x0412164c2071a3c4 // vpinsrb xmm1, xmm1, byte [rsi + r10 + 18], 4 - QUAD $0x000000a824b48b4c // mov r14, qword [rsp + 168] + QUAD $0x000000b024b48b4c // mov r14, qword [rsp + 176] QUAD $0x0512364c2071a3c4 // vpinsrb xmm1, xmm1, byte [rsi + r14 + 18], 5 QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] QUAD $0x0612064c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rax + 18], 6 @@ -8898,7 +9294,7 @@ LBB1_169: QUAD $0x01132e5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rsi + r13 + 19], 1 QUAD $0x0000009824948b48 // mov rdx, qword [rsp + 152] QUAD $0x0213165c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdx + 19], 2 - QUAD $0x000000b024948b48 // mov rdx, qword [rsp + 176] + QUAD $0x000000a824948b48 // mov rdx, qword [rsp + 168] QUAD $0x0313165c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdx + 19], 3 QUAD $0x0413165c2061a3c4 // vpinsrb xmm3, xmm3, byte [rsi + r10 + 19], 4 QUAD $0x0513365c2061a3c4 // vpinsrb xmm3, xmm3, byte [rsi + r14 + 19], 5 @@ -8963,7 +9359,7 @@ LBB1_169: QUAD $0x0314164c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rdx + 20], 3 LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] QUAD $0x0414064c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rax + 20], 4 - QUAD $0x000000a824948b48 // mov rdx, qword [rsp + 168] + QUAD $0x000000b024948b48 // mov rdx, qword [rsp + 176] QUAD $0x0514164c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rdx + 20], 5 QUAD $0x06141e4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rbx + 20], 6 QUAD $0x000000d824948b48 // mov rdx, qword [rsp + 216] @@ -9016,10 +9412,10 @@ LBB1_169: LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] QUAD $0x01153e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdi + 21], 1 QUAD $0x0215065c2061a3c4 // vpinsrb xmm3, xmm3, byte [rsi + r8 + 21], 2 - QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] + QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] QUAD $0x03153e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdi + 21], 3 QUAD $0x0415065c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rax + 21], 4 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x0515065c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rax + 21], 5 QUAD $0x000000e824848b4c // mov r8, qword [rsp + 232] QUAD $0x0615065c2061a3c4 // vpinsrb xmm3, xmm3, byte [rsi + r8 + 21], 6 @@ -9076,11 +9472,11 @@ LBB1_169: QUAD $0x0116164c2071a3c4 // vpinsrb xmm1, xmm1, byte [rsi + r10 + 22], 1 QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] QUAD $0x02160e4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rcx + 22], 2 - QUAD $0x000000b024948b48 // mov rdx, qword [rsp + 176] + QUAD $0x000000a824948b48 // mov rdx, qword [rsp + 168] QUAD $0x0316164c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rdx + 22], 3 LONG $0x24548b48; BYTE $0x78 // mov rdx, qword [rsp + 120] QUAD $0x0416164c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rdx + 22], 4 - QUAD $0x000000a824948b48 // mov rdx, qword [rsp + 168] + QUAD $0x000000b024948b48 // mov rdx, qword [rsp + 176] QUAD $0x0516164c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rdx + 22], 5 QUAD $0x0616064c2071a3c4 // vpinsrb xmm1, xmm1, byte [rsi + r8 + 22], 6 QUAD $0x07163e4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rsi + r15 + 22], 7 @@ -9133,11 +9529,11 @@ LBB1_169: LONG $0xdf6ef9c5 // vmovd xmm3, edi QUAD $0x0117165c2061a3c4 // vpinsrb xmm3, xmm3, byte [rsi + r10 + 23], 1 QUAD $0x02170e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rcx + 23], 2 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] + QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] QUAD $0x03170e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rcx + 23], 3 LONG $0x245c8b48; BYTE $0x78 // mov rbx, qword [rsp + 120] QUAD $0x04171e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rbx + 23], 4 - QUAD $0x000000a824948b4c // mov r10, qword [rsp + 168] + QUAD $0x000000b024948b4c // mov r10, qword [rsp + 176] QUAD $0x0517165c2061a3c4 // vpinsrb xmm3, xmm3, byte [rsi + r10 + 23], 5 QUAD $0x0617065c2061a3c4 // vpinsrb xmm3, xmm3, byte [rsi + r8 + 23], 6 QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] @@ -9251,11 +9647,11 @@ LBB1_169: QUAD $0x0119165c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdx + 25], 1 QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] QUAD $0x02193e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdi + 25], 2 - QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] + QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] QUAD $0x03193e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdi + 25], 3 LONG $0x247c8b48; BYTE $0x78 // mov rdi, qword [rsp + 120] QUAD $0x04193e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdi + 25], 4 - QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] + QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] QUAD $0x05193e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdi + 25], 5 QUAD $0x0619165c2061a3c4 // vpinsrb xmm3, xmm3, byte [rsi + r10 + 25], 6 QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] @@ -9308,11 +9704,11 @@ LBB1_169: QUAD $0x011a164c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rdx + 26], 1 QUAD $0x0000009824b48b4c // mov r14, qword [rsp + 152] QUAD $0x021a364c2071a3c4 // vpinsrb xmm1, xmm1, byte [rsi + r14 + 26], 2 - QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] + QUAD $0x000000a824bc8b4c // mov r15, qword [rsp + 168] QUAD $0x031a3e4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rsi + r15 + 26], 3 LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] QUAD $0x041a064c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rax + 26], 4 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x051a064c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rax + 26], 5 QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] QUAD $0x061a064c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rax + 26], 6 @@ -9370,7 +9766,7 @@ LBB1_169: QUAD $0x031b3e5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rsi + r15 + 27], 3 LONG $0x247c8b48; BYTE $0x78 // mov rdi, qword [rsp + 120] QUAD $0x041b3e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdi + 27], 4 - QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] + QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] QUAD $0x051b3e5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rsi + rdi + 27], 5 QUAD $0x000000e824b48b4c // mov r14, qword [rsp + 232] QUAD $0x061b365c2061a3c4 // vpinsrb xmm3, xmm3, byte [rsi + r14 + 27], 6 @@ -9428,11 +9824,11 @@ LBB1_169: QUAD $0x011c064c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rax + 28], 1 QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] QUAD $0x021c064c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rax + 28], 2 - QUAD $0x000000b024ac8b4c // mov r13, qword [rsp + 176] + QUAD $0x000000a824ac8b4c // mov r13, qword [rsp + 168] QUAD $0x031c2e4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rsi + r13 + 28], 3 LONG $0x247c8b48; BYTE $0x78 // mov rdi, qword [rsp + 120] QUAD $0x041c3e4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rdi + 28], 4 - QUAD $0x000000a824948b4c // mov r10, qword [rsp + 168] + QUAD $0x000000b024948b4c // mov r10, qword [rsp + 176] QUAD $0x051c164c2071a3c4 // vpinsrb xmm1, xmm1, byte [rsi + r10 + 28], 5 QUAD $0x061c364c2071a3c4 // vpinsrb xmm1, xmm1, byte [rsi + r14 + 28], 6 WORD $0x894d; BYTE $0xfe // mov r14, r15 @@ -9569,12 +9965,12 @@ LBB1_169: QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] QUAD $0x021e064c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rax + 30], 2 QUAD $0x021f067c2041e3c4 // vpinsrb xmm7, xmm7, byte [rsi + rax + 31], 2 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] QUAD $0x031e064c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rax + 30], 3 QUAD $0x031f067c2041e3c4 // vpinsrb xmm7, xmm7, byte [rsi + rax + 31], 3 QUAD $0x041e2e4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rsi + r13 + 30], 4 QUAD $0x041f2e7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rsi + r13 + 31], 4 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x051e064c2071e3c4 // vpinsrb xmm1, xmm1, byte [rsi + rax + 30], 5 QUAD $0x051f067c2041e3c4 // vpinsrb xmm7, xmm7, byte [rsi + rax + 31], 5 QUAD $0x061e164c2071a3c4 // vpinsrb xmm1, xmm1, byte [rsi + r10 + 30], 6 @@ -9739,7 +10135,7 @@ LBB1_169: LONG $0x20c18348 // add rcx, 32 WORD $0x8948; BYTE $0xc8 // mov rax, rcx QUAD $0x00000180248c3b48 // cmp rcx, qword [rsp + 384] - JNE LBB1_169 + JNE LBB1_170 QUAD $0x0000018824bc8b4c // mov r15, qword [rsp + 392] QUAD $0x0000018024bc3b4c // cmp r15, qword [rsp + 384] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] @@ -9793,7 +10189,7 @@ TEXT ·_comparison_equal_scalar_arr_avx2(SB), $1320-48 LEAQ LCDATA2<>(SB), BP WORD $0x894d; BYTE $0xc2 // mov r10, r8 - WORD $0x8949; BYTE $0xcb // mov r11, rcx + WORD $0x8949; BYTE $0xce // mov r14, rcx WORD $0xff83; BYTE $0x06 // cmp edi, 6 JG LBB2_17 WORD $0xff83; BYTE $0x03 // cmp edi, 3 @@ -9803,11 +10199,11 @@ TEXT ·_comparison_equal_scalar_arr_avx2(SB), $1320-48 WORD $0xff83; BYTE $0x05 // cmp edi, 5 JE LBB2_72 WORD $0xff83; BYTE $0x06 // cmp edi, 6 - JNE LBB2_157 + JNE LBB2_165 WORD $0x8b44; BYTE $0x2e // mov r13d, dword [rsi] - LONG $0x1f728d4d // lea r14, [r10 + 31] + LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 - LONG $0xf2490f4d // cmovns r14, r10 + LONG $0xda490f4d // cmovns r11, r10 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d @@ -9825,8 +10221,8 @@ LBB2_7: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf0490f48 // cmovns rsi, rax LONG $0x03fec148 // sar rsi, 3 - WORD $0x894d; BYTE $0xd9 // mov r9, r11 - LONG $0x04b60f45; BYTE $0x33 // movzx r8d, byte [r11 + rsi] + WORD $0x894d; BYTE $0xf1 // mov r9, r14 + LONG $0x04b60f45; BYTE $0x36 // movzx r8d, byte [r14 + rsi] WORD $0x3044; BYTE $0xc3 // xor bl, r8b LONG $0x00f53c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rsi] WORD $0xc189 // mov ecx, eax @@ -9835,40 +10231,40 @@ LBB2_7: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xdf // and dil, bl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x333c8841 // mov byte [r11 + rsi], dil + LONG $0x363c8841 // mov byte [r14 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB2_7 - LONG $0x01c38349 // add r11, 1 + LONG $0x01c68349 // add r14, 1 LBB2_9: - LONG $0x05fec149 // sar r14, 5 + LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 JL LBB2_13 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b024b4894c // mov qword [rsp + 176], r14 - QUAD $0x000000a824b4894c // mov qword [rsp + 168], r14 + QUAD $0x000000a8249c894c // mov qword [rsp + 168], r11 + QUAD $0x000000b0249c894c // mov qword [rsp + 176], r11 LBB2_11: - QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 + QUAD $0x0000011024b4894c // mov qword [rsp + 272], r14 WORD $0x3b44; BYTE $0x2a // cmp r13d, dword [rdx] - QUAD $0x000000982494940f // sete byte [rsp + 152] + QUAD $0x000000a02494940f // sete byte [rsp + 160] LONG $0x046a3b44 // cmp r13d, dword [rdx + 4] - LONG $0xd7940f40 // sete dil + LONG $0xd2940f41 // sete r10b LONG $0x086a3b44 // cmp r13d, dword [rdx + 8] LONG $0xd6940f41 // sete r14b LONG $0x0c6a3b44 // cmp r13d, dword [rdx + 12] - QUAD $0x000000a02494940f // sete byte [rsp + 160] + QUAD $0x000000882494940f // sete byte [rsp + 136] LONG $0x106a3b44 // cmp r13d, dword [rdx + 16] - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] LONG $0x146a3b44 // cmp r13d, dword [rdx + 20] - QUAD $0x000000902494940f // sete byte [rsp + 144] + LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] LONG $0x186a3b44 // cmp r13d, dword [rdx + 24] - WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x940f; BYTE $0xd3 // sete bl LONG $0x1c6a3b44 // cmp r13d, dword [rdx + 28] - LONG $0xd3940f41 // sete r11b + LONG $0xd7940f40 // sete dil LONG $0x206a3b44 // cmp r13d, dword [rdx + 32] - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] + QUAD $0x000000902494940f // sete byte [rsp + 144] LONG $0x246a3b44 // cmp r13d, dword [rdx + 36] LONG $0xd6940f40 // sete sil LONG $0x286a3b44 // cmp r13d, dword [rdx + 40] @@ -9876,37 +10272,37 @@ LBB2_11: LONG $0x2c6a3b44 // cmp r13d, dword [rdx + 44] LONG $0xd1940f41 // sete r9b LONG $0x306a3b44 // cmp r13d, dword [rdx + 48] - LONG $0xd2940f41 // sete r10b + LONG $0xd3940f41 // sete r11b LONG $0x346a3b44 // cmp r13d, dword [rdx + 52] LONG $0xd4940f41 // sete r12b LONG $0x386a3b44 // cmp r13d, dword [rdx + 56] - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + QUAD $0x000000982494940f // sete byte [rsp + 152] LONG $0x3c6a3b44 // cmp r13d, dword [rdx + 60] - WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x940f; BYTE $0xd0 // sete al LONG $0x406a3b44 // cmp r13d, dword [rdx + 64] - QUAD $0x000000802494940f // sete byte [rsp + 128] - LONG $0x446a3b44 // cmp r13d, dword [rdx + 68] LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + LONG $0x446a3b44 // cmp r13d, dword [rdx + 68] + LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] LONG $0x486a3b44 // cmp r13d, dword [rdx + 72] - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] + LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] LONG $0x4c6a3b44 // cmp r13d, dword [rdx + 76] - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] LONG $0x506a3b44 // cmp r13d, dword [rdx + 80] - QUAD $0x000000882494940f // sete byte [rsp + 136] + LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] LONG $0x546a3b44 // cmp r13d, dword [rdx + 84] - LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] LONG $0x586a3b44 // cmp r13d, dword [rdx + 88] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + QUAD $0x000000802494940f // sete byte [rsp + 128] LONG $0x5c6a3b44 // cmp r13d, dword [rdx + 92] LONG $0xd7940f41 // sete r15b LONG $0x606a3b44 // cmp r13d, dword [rdx + 96] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] LONG $0x646a3b44 // cmp r13d, dword [rdx + 100] - LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] LONG $0x686a3b44 // cmp r13d, dword [rdx + 104] - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] LONG $0x6c6a3b44 // cmp r13d, dword [rdx + 108] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] LONG $0x706a3b44 // cmp r13d, dword [rdx + 112] QUAD $0x000001402494940f // sete byte [rsp + 320] LONG $0x746a3b44 // cmp r13d, dword [rdx + 116] @@ -9914,111 +10310,109 @@ LBB2_11: LONG $0x786a3b44 // cmp r13d, dword [rdx + 120] LONG $0x2454940f; BYTE $0x1c // sete byte [rsp + 28] LONG $0x7c6a3b44 // cmp r13d, dword [rdx + 124] - WORD $0x940f; BYTE $0xd3 // sete bl - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009824bc0240 // add dil, byte [rsp + 152] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e3c041 // shl r11b, 7 - WORD $0x0841; BYTE $0xc3 // or r11b, al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000a024940244 // add r10b, byte [rsp + 160] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0840; BYTE $0xdf // or dil, bl LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil + WORD $0x0845; BYTE $0xd6 // or r14b, r10b WORD $0x0040; BYTE $0xf6 // add sil, sil - LONG $0x24740240; BYTE $0x50 // add sil, byte [rsp + 80] - QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b - WORD $0xc789 // mov edi, eax + QUAD $0x0000009024b40240 // add sil, byte [rsp + 144] + QUAD $0x00000088249cb60f // movzx ebx, byte [rsp + 136] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0844; BYTE $0xf3 // or bl, r14b + WORD $0x8941; BYTE $0xda // mov r10d, ebx + QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] LONG $0x02e0c041 // shl r8b, 2 WORD $0x0841; BYTE $0xf0 // or r8b, sil - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf8 // or al, dil - WORD $0xc789 // mov edi, eax + LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xd3 // or bl, r10b + WORD $0xde89 // mov esi, ebx LONG $0x03e1c041 // shl r9b, 3 WORD $0x0845; BYTE $0xc1 // or r9b, r8b - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf8 // or al, dil - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xca // or r10b, r9b + LONG $0x245cb60f; BYTE $0x70 // movzx ebx, byte [rsp + 112] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xf3 // or bl, sil + LONG $0x04e3c041 // shl r11b, 4 + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - LONG $0x2474b60f; BYTE $0x58 // movzx esi, byte [rsp + 88] + WORD $0x0845; BYTE $0xdc // or r12b, r11b + QUAD $0x0000009824b4b60f // movzx esi, byte [rsp + 152] LONG $0x06e6c040 // shl sil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf1 // or cl, sil - WORD $0x0841; BYTE $0xc3 // or r11b, al - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] - WORD $0xc000 // add al, al - LONG $0x80248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 128] - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] - WORD $0x8844; BYTE $0x18 // mov byte [rax], r11b - QUAD $0x00000110249c8b4c // mov r11, qword [rsp + 272] - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0x0840; BYTE $0xdf // or dil, bl + WORD $0x0844; BYTE $0xe0 // or al, r12b + LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] + WORD $0xdb00 // add bl, bl + LONG $0x60245c02 // add bl, byte [rsp + 96] + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x48 // movzx ebx, byte [rsp + 72] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x58 // movzx ebx, byte [rsp + 88] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x68 // movzx ebx, byte [rsp + 104] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x78 // movzx ebx, byte [rsp + 120] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0x8841; BYTE $0x3e // mov byte [r14], dil + QUAD $0x0000008024b4b60f // movzx esi, byte [rsp + 128] + LONG $0x06e6c040 // shl sil, 6 LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xc7 // or r15b, al - LONG $0x014b8841 // mov byte [r11 + 1], cl WORD $0x0841; BYTE $0xf7 // or r15b, sil - LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + LONG $0x01468841 // mov byte [r14 + 1], al + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xc000 // add al, al - LONG $0x20244402 // add al, byte [rsp + 32] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + LONG $0x28244402 // add al, byte [rsp + 40] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x1c // movzx ecx, byte [rsp + 28] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xcb08 // or bl, cl - WORD $0xc308 // or bl, al - LONG $0x027b8845 // mov byte [r11 + 2], r15b - LONG $0x035b8841 // mov byte [r11 + 3], bl + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x027e8845 // mov byte [r14 + 2], r15b + LONG $0x034e8841 // mov byte [r14 + 3], cl LONG $0x80c28148; WORD $0x0000; BYTE $0x00 // add rdx, 128 - LONG $0x04c38349 // add r11, 4 - QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + LONG $0x04c68349 // add r14, 4 + QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 JNE LBB2_11 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b024b48b4c // mov r14, qword [rsp + 176] + QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] LBB2_13: - LONG $0x05e6c149 // shl r14, 5 - WORD $0x394d; BYTE $0xd6 // cmp r14, r10 - JGE LBB2_157 + LONG $0x05e3c149 // shl r11, 5 + WORD $0x394d; BYTE $0xd3 // cmp r11, r10 + JGE LBB2_165 WORD $0x894d; BYTE $0xd0 // mov r8, r10 - WORD $0x294d; BYTE $0xf0 // sub r8, r14 - WORD $0xf749; BYTE $0xd6 // not r14 - WORD $0x014d; BYTE $0xd6 // add r14, r10 + WORD $0x294d; BYTE $0xd8 // sub r8, r11 + WORD $0xf749; BYTE $0xd3 // not r11 + WORD $0x014d; BYTE $0xd3 // add r11, r10 JE LBB2_127 WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 @@ -10030,8 +10424,8 @@ LBB2_16: WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xfe // mov rsi, rdi LONG $0x03eec148 // shr rsi, 3 - WORD $0x894d; BYTE $0xde // mov r14, r11 - LONG $0x0cb60f45; BYTE $0x33 // movzx r9d, byte [r11 + rsi] + WORD $0x894d; BYTE $0xf3 // mov r11, r14 + LONG $0x0cb60f45; BYTE $0x36 // movzx r9d, byte [r14 + rsi] WORD $0xf989 // mov ecx, edi WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 @@ -10039,7 +10433,7 @@ LBB2_16: WORD $0x3044; BYTE $0xc8 // xor al, r9b WORD $0xc320 // and bl, al WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x331c8841 // mov byte [r11 + rsi], bl + LONG $0x361c8841 // mov byte [r14 + rsi], bl LONG $0x02c78348 // add rdi, 2 LONG $0x046a3b44 // cmp r13d, dword [rdx + 4] LONG $0x08528d48 // lea rdx, [rdx + 8] @@ -10051,10 +10445,10 @@ LBB2_16: WORD $0xe0d2 // shl al, cl WORD $0x2044; BYTE $0xc8 // and al, r9b WORD $0xd830 // xor al, bl - LONG $0x33048841 // mov byte [r11 + rsi], al + LONG $0x36048841 // mov byte [r14 + rsi], al WORD $0x3949; BYTE $0xfa // cmp r10, rdi JNE LBB2_16 - JMP LBB2_154 + JMP LBB2_155 LBB2_17: WORD $0xff83; BYTE $0x08 // cmp edi, 8 @@ -10064,10 +10458,10 @@ LBB2_17: WORD $0xff83; BYTE $0x0b // cmp edi, 11 JE LBB2_94 WORD $0xff83; BYTE $0x0c // cmp edi, 12 - JNE LBB2_157 - LONG $0x1f728d4d // lea r14, [r10 + 31] + JNE LBB2_165 + LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 - LONG $0xf2490f4d // cmovns r14, r10 + LONG $0xda490f4d // cmovns r11, r10 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d @@ -10080,14 +10474,16 @@ LBB2_17: LBB2_23: LONG $0x022ef9c5 // vucomisd xmm0, qword [rdx] LONG $0x08528d48 // lea rdx, [rdx + 8] + WORD $0x9b0f; BYTE $0xd1 // setnp cl WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0xcb20 // and bl, cl WORD $0xdbf6 // neg bl LONG $0x07708d48 // lea rsi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf0490f48 // cmovns rsi, rax LONG $0x03fec148 // sar rsi, 3 - WORD $0x894d; BYTE $0xdf // mov r15, r11 - LONG $0x0cb60f45; BYTE $0x33 // movzx r9d, byte [r11 + rsi] + WORD $0x894d; BYTE $0xf7 // mov r15, r14 + LONG $0x0cb60f45; BYTE $0x36 // movzx r9d, byte [r14 + rsi] WORD $0x3044; BYTE $0xcb // xor bl, r9b QUAD $0x00000000f5048d44 // lea r8d, [8*rsi] WORD $0xc189 // mov ecx, eax @@ -10096,197 +10492,286 @@ LBB2_23: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xdf // and dil, bl WORD $0x3044; BYTE $0xcf // xor dil, r9b - LONG $0x333c8841 // mov byte [r11 + rsi], dil + LONG $0x363c8841 // mov byte [r14 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB2_23 - LONG $0x01c38349 // add r11, 1 + LONG $0x01c68349 // add r14, 1 LBB2_25: - LONG $0x05fec149 // sar r14, 5 + LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 JL LBB2_29 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000a824b4894c // mov qword [rsp + 168], r14 - QUAD $0x0000009824b4894c // mov qword [rsp + 152], r14 + QUAD $0x000000c0249c894c // mov qword [rsp + 192], r11 + QUAD $0x000000b8249c894c // mov qword [rsp + 184], r11 LBB2_27: - QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 + QUAD $0x0000011024b4894c // mov qword [rsp + 272], r14 LONG $0x022ef9c5 // vucomisd xmm0, qword [rdx] - QUAD $0x000000a02494940f // sete byte [rsp + 160] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x38244c88 // mov byte [rsp + 56], cl LONG $0x422ef9c5; BYTE $0x08 // vucomisd xmm0, qword [rdx + 8] - LONG $0xd0940f41 // sete r8b + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd5940f41 // sete r13b + WORD $0x2041; BYTE $0xc5 // and r13b, al LONG $0x422ef9c5; BYTE $0x10 // vucomisd xmm0, qword [rdx + 16] - LONG $0xd6940f41 // sete r14b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl LONG $0x422ef9c5; BYTE $0x18 // vucomisd xmm0, qword [rdx + 24] - LONG $0xd5940f41 // sete r13b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x40248c88; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 320], cl LONG $0x422ef9c5; BYTE $0x20 // vucomisd xmm0, qword [rdx + 32] - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl LONG $0x422ef9c5; BYTE $0x28 // vucomisd xmm0, qword [rdx + 40] - QUAD $0x000000902494940f // sete byte [rsp + 144] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd4940f41 // sete r12b + WORD $0x2041; BYTE $0xc4 // and r12b, al LONG $0x422ef9c5; BYTE $0x30 // vucomisd xmm0, qword [rdx + 48] - WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x80248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 128], cl LONG $0x422ef9c5; BYTE $0x38 // vucomisd xmm0, qword [rdx + 56] - LONG $0xd3940f41 // sete r11b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x1c244c88 // mov byte [rsp + 28], cl LONG $0x422ef9c5; BYTE $0x40 // vucomisd xmm0, qword [rdx + 64] - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x30244c88 // mov byte [rsp + 48], cl LONG $0x422ef9c5; BYTE $0x48 // vucomisd xmm0, qword [rdx + 72] - LONG $0xd6940f40 // sete sil + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x78244c88 // mov byte [rsp + 120], cl LONG $0x422ef9c5; BYTE $0x50 // vucomisd xmm0, qword [rdx + 80] - LONG $0xd7940f40 // sete dil + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x70244c88 // mov byte [rsp + 112], cl LONG $0x422ef9c5; BYTE $0x58 // vucomisd xmm0, qword [rdx + 88] - LONG $0xd1940f41 // sete r9b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0xc320 // and bl, al LONG $0x422ef9c5; BYTE $0x60 // vucomisd xmm0, qword [rdx + 96] - LONG $0xd2940f41 // sete r10b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x20248c88; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 288], cl LONG $0x422ef9c5; BYTE $0x68 // vucomisd xmm0, qword [rdx + 104] - LONG $0xd4940f41 // sete r12b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x60244c88 // mov byte [rsp + 96], cl LONG $0x422ef9c5; BYTE $0x70 // vucomisd xmm0, qword [rdx + 112] - LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x58244c88 // mov byte [rsp + 88], cl LONG $0x422ef9c5; BYTE $0x78 // vucomisd xmm0, qword [rdx + 120] + WORD $0x9b0f; BYTE $0xd0 // setnp al WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x50244c88 // mov byte [rsp + 80], cl QUAD $0x00000080822ef9c5 // vucomisd xmm0, qword [rdx + 128] - QUAD $0x000000802494940f // sete byte [rsp + 128] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x68244c88 // mov byte [rsp + 104], cl QUAD $0x00000088822ef9c5 // vucomisd xmm0, qword [rdx + 136] - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x48244c88 // mov byte [rsp + 72], cl QUAD $0x00000090822ef9c5 // vucomisd xmm0, qword [rdx + 144] - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x40244c88 // mov byte [rsp + 64], cl QUAD $0x00000098822ef9c5 // vucomisd xmm0, qword [rdx + 152] - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x98248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 152], cl QUAD $0x000000a0822ef9c5 // vucomisd xmm0, qword [rdx + 160] - QUAD $0x000000882494940f // sete byte [rsp + 136] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x90248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 144], cl QUAD $0x000000a8822ef9c5 // vucomisd xmm0, qword [rdx + 168] - LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x88248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 136], cl QUAD $0x000000b0822ef9c5 // vucomisd xmm0, qword [rdx + 176] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] - QUAD $0x000000b8822ef9c5 // vucomisd xmm0, qword [rdx + 184] + WORD $0x9b0f; BYTE $0xd0 // setnp al LONG $0xd7940f41 // sete r15b + WORD $0x2041; BYTE $0xc7 // and r15b, al + QUAD $0x000000b8822ef9c5 // vucomisd xmm0, qword [rdx + 184] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd0940f41 // sete r8b + WORD $0x2041; BYTE $0xc0 // and r8b, al QUAD $0x000000c0822ef9c5 // vucomisd xmm0, qword [rdx + 192] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xa0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 160], cl QUAD $0x000000c8822ef9c5 // vucomisd xmm0, qword [rdx + 200] - LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd3940f41 // sete r11b + WORD $0x2041; BYTE $0xc3 // and r11b, al QUAD $0x000000d0822ef9c5 // vucomisd xmm0, qword [rdx + 208] - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd2940f41 // sete r10b + WORD $0x2041; BYTE $0xc2 // and r10b, al QUAD $0x000000d8822ef9c5 // vucomisd xmm0, qword [rdx + 216] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd1940f41 // sete r9b + WORD $0x2041; BYTE $0xc1 // and r9b, al QUAD $0x000000e0822ef9c5 // vucomisd xmm0, qword [rdx + 224] - QUAD $0x000001402494940f // sete byte [rsp + 320] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xa8248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 168], cl QUAD $0x000000e8822ef9c5 // vucomisd xmm0, qword [rdx + 232] - QUAD $0x000001202494940f // sete byte [rsp + 288] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xb0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 176], cl QUAD $0x000000f0822ef9c5 // vucomisd xmm0, qword [rdx + 240] - LONG $0x2454940f; BYTE $0x1c // sete byte [rsp + 28] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f40 // sete dil + WORD $0x2040; BYTE $0xc7 // and dil, al QUAD $0x000000f8822ef9c5 // vucomisd xmm0, qword [rdx + 248] - WORD $0x940f; BYTE $0xd3 // sete bl - WORD $0x0045; BYTE $0xc0 // add r8b, r8b - QUAD $0x000000a024840244 // add r8b, byte [rsp + 160] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e3c041 // shl r11b, 7 - WORD $0x0841; BYTE $0xc3 // or r11b, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0845; BYTE $0xc6 // or r14b, r8b - WORD $0x0040; BYTE $0xf6 // add sil, sil - LONG $0x24740240; BYTE $0x58 // add sil, byte [rsp + 88] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xf5 // or r13b, r14b - QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] - LONG $0x02e7c040 // shl dil, 2 - WORD $0x0840; BYTE $0xf7 // or dil, sil - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0844; BYTE $0xe8 // or al, r13b - WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x03e1c041 // shl r9b, 3 - WORD $0x0841; BYTE $0xf9 // or r9b, dil - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xca // or r10b, r9b + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd6940f40 // sete sil + WORD $0x2040; BYTE $0xc6 // and sil, al + WORD $0x0045; BYTE $0xed // add r13b, r13b + LONG $0x246c0244; BYTE $0x38 // add r13b, byte [rsp + 56] + WORD $0x8944; BYTE $0xe8 // mov eax, r13d LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - LONG $0x2474b60f; BYTE $0x60 // movzx esi, byte [rsp + 96] - LONG $0x06e6c040 // shl sil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf1 // or cl, sil - WORD $0x0841; BYTE $0xc3 // or r11b, al - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] - WORD $0xc000 // add al, al - LONG $0x80248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 128] - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0x8845; BYTE $0x1e // mov byte [r14], r11b - LONG $0x2474b60f; BYTE $0x38 // movzx esi, byte [rsp + 56] - LONG $0x06e6c040 // shl sil, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xf7 // or r15b, sil - LONG $0x014e8841 // mov byte [r14 + 1], cl - WORD $0x0841; BYTE $0xc7 // or r15b, al - LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] - WORD $0xc000 // add al, al - LONG $0x20244402 // add al, byte [rsp + 32] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + QUAD $0x00008024acb60f44; BYTE $0x00 // movzx r13d, byte [rsp + 128] + LONG $0x06e5c041 // shl r13b, 6 + WORD $0x0845; BYTE $0xe5 // or r13b, r12b + LONG $0x64b60f44; WORD $0x2024 // movzx r12d, byte [rsp + 32] + LONG $0x02e4c041 // shl r12b, 2 + WORD $0x0841; BYTE $0xc4 // or r12b, al + LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] + WORD $0xc900 // add cl, cl + LONG $0x30244c02 // add cl, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x1c // movzx eax, byte [rsp + 28] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0844; BYTE $0xe8 // or al, r13b + LONG $0x1c244488 // mov byte [rsp + 28], al + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0844; BYTE $0xe0 // or al, r12b + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xcb08 // or bl, cl + LONG $0x6cb60f44; WORD $0x2824 // movzx r13d, byte [rsp + 40] + LONG $0x04e5c041 // shl r13b, 4 + WORD $0x0841; BYTE $0xc5 // or r13b, al + QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + LONG $0x20248488; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 288], al + LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] + WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x1c // movzx ecx, byte [rsp + 28] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 + LONG $0x74b60f44; WORD $0x5024 // movzx r14d, byte [rsp + 80] + LONG $0x07e6c041 // shl r14b, 7 + WORD $0x0841; BYTE $0xc6 // or r14b, al + LONG $0x244cb60f; BYTE $0x48 // movzx ecx, byte [rsp + 72] + WORD $0xc900 // add cl, cl + LONG $0x68244c02 // add cl, byte [rsp + 104] + LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 WORD $0xcb08 // or bl, cl - WORD $0xc308 // or bl, al - LONG $0x027e8845 // mov byte [r14 + 2], r15b - LONG $0x035e8841 // mov byte [r14 + 3], bl - LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 - LONG $0x04c68349 // add r14, 4 - WORD $0x894d; BYTE $0xf3 // mov r11, r14 - QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 - JNE LBB2_27 - QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000a824b48b4c // mov r14, qword [rsp + 168] - -LBB2_29: - LONG $0x05e6c149 // shl r14, 5 - WORD $0x394d; BYTE $0xd6 // cmp r14, r10 - JGE LBB2_157 - WORD $0x894d; BYTE $0xd0 // mov r8, r10 - WORD $0x294d; BYTE $0xf0 // sub r8, r14 - WORD $0xf749; BYTE $0xd6 // not r14 - WORD $0x014d; BYTE $0xd6 // add r14, r10 - JNE LBB2_136 - WORD $0xff31 // xor edi, edi - JMP LBB2_138 - + QUAD $0x00000098248cb60f // movzx ecx, byte [rsp + 152] + WORD $0xe1c0; BYTE $0x03 // shl cl, 3 + WORD $0xd908 // or cl, bl + WORD $0xcb89 // mov ebx, ecx + QUAD $0x00000090248cb60f // movzx ecx, byte [rsp + 144] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0xd908 // or cl, bl + WORD $0x8941; BYTE $0xcc // mov r12d, ecx + QUAD $0x00000110248c8b48 // mov rcx, qword [rsp + 272] + LONG $0x2444b60f; BYTE $0x1c // movzx eax, byte [rsp + 28] + WORD $0x0844; BYTE $0xe8 // or al, r13b + QUAD $0x00000088249cb60f // movzx ebx, byte [rsp + 136] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e7c041 // shl r15b, 6 + WORD $0x0841; BYTE $0xdf // or r15b, bl + QUAD $0x0000012024b40a44 // or r14b, byte [rsp + 288] + LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xf8 // or r8b, r15b + WORD $0x0845; BYTE $0xe0 // or r8b, r12b + WORD $0x0045; BYTE $0xdb // add r11b, r11b + QUAD $0x000000a0249c0244 // add r11b, byte [rsp + 160] + LONG $0x02e2c041 // shl r10b, 2 + WORD $0x0845; BYTE $0xda // or r10b, r11b + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xd1 // or r9b, r10b + QUAD $0x000000a8249cb60f // movzx ebx, byte [rsp + 168] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xcb // or bl, r9b + WORD $0x8941; BYTE $0xd9 // mov r9d, ebx + WORD $0x0188 // mov byte [rcx], al + QUAD $0x000000b0249cb60f // movzx ebx, byte [rsp + 176] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e7c040 // shl dil, 6 + WORD $0x0840; BYTE $0xdf // or dil, bl + LONG $0x01718844 // mov byte [rcx + 1], r14b + LONG $0x07e6c040 // shl sil, 7 + WORD $0x0840; BYTE $0xfe // or sil, dil + WORD $0x0844; BYTE $0xce // or sil, r9b + LONG $0x02418844 // mov byte [rcx + 2], r8b + LONG $0x03718840 // mov byte [rcx + 3], sil + LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 + LONG $0x04c18348 // add rcx, 4 + WORD $0x8949; BYTE $0xce // mov r14, rcx + QUAD $0x000000b824848348; BYTE $0xff // add qword [rsp + 184], -1 + JNE LBB2_27 + QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] + QUAD $0x000000c0249c8b4c // mov r11, qword [rsp + 192] + +LBB2_29: + LONG $0x05e3c149 // shl r11, 5 + WORD $0x394d; BYTE $0xd3 // cmp r11, r10 + JGE LBB2_165 + WORD $0x894d; BYTE $0xd0 // mov r8, r10 + WORD $0x294d; BYTE $0xd8 // sub r8, r11 + WORD $0xf749; BYTE $0xd3 // not r11 + WORD $0x014d; BYTE $0xd3 // add r11, r10 + JNE LBB2_136 + WORD $0xff31 // xor edi, edi + JMP LBB2_138 + LBB2_32: WORD $0xff83; BYTE $0x02 // cmp edi, 2 JE LBB2_105 WORD $0xff83; BYTE $0x03 // cmp edi, 3 - JNE LBB2_157 - WORD $0x8a44; BYTE $0x36 // mov r14b, byte [rsi] + JNE LBB2_165 + WORD $0x8a44; BYTE $0x1e // mov r11b, byte [rsi] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 LONG $0xfa490f4d // cmovns r15, r10 @@ -10299,7 +10784,7 @@ LBB2_32: WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d LBB2_36: - WORD $0x3a44; BYTE $0x32 // cmp r14b, byte [rdx] + WORD $0x3a44; BYTE $0x1a // cmp r11b, byte [rdx] LONG $0x01528d48 // lea rdx, [rdx + 1] WORD $0x940f; BYTE $0xd3 // sete bl WORD $0xdbf6 // neg bl @@ -10307,8 +10792,8 @@ LBB2_36: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf0490f48 // cmovns rsi, rax LONG $0x03fec148 // sar rsi, 3 - WORD $0x894d; BYTE $0xdc // mov r12, r11 - LONG $0x0cb60f45; BYTE $0x33 // movzx r9d, byte [r11 + rsi] + WORD $0x894d; BYTE $0xf4 // mov r12, r14 + LONG $0x0cb60f45; BYTE $0x36 // movzx r9d, byte [r14 + rsi] WORD $0x3044; BYTE $0xcb // xor bl, r9b QUAD $0x00000000f5048d44 // lea r8d, [8*rsi] WORD $0xc189 // mov ecx, eax @@ -10317,189 +10802,212 @@ LBB2_36: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xdf // and dil, bl WORD $0x3044; BYTE $0xcf // xor dil, r9b - LONG $0x333c8841 // mov byte [r11 + rsi], dil + LONG $0x363c8841 // mov byte [r14 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB2_36 - LONG $0x01c38349 // add r11, 1 + LONG $0x01c68349 // add r14, 1 LBB2_38: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 JL LBB2_128 LONG $0x20ff8349 // cmp r15, 32 - LONG $0x24748944; BYTE $0x1c // mov dword [rsp + 28], r14d + LONG $0x245c8944; BYTE $0x1c // mov dword [rsp + 28], r11d QUAD $0x000001182494894c // mov qword [rsp + 280], r10 QUAD $0x0000018824bc894c // mov qword [rsp + 392], r15 JB LBB2_42 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xd0 // add rax, rdx - WORD $0x3949; BYTE $0xc3 // cmp r11, rax - JAE LBB2_165 - LONG $0xbb048d4b // lea rax, [r11 + 4*r15] + WORD $0x3949; BYTE $0xc6 // cmp r14, rax + JAE LBB2_166 + LONG $0xbe048d4b // lea rax, [r14 + 4*r15] WORD $0x3948; BYTE $0xc2 // cmp rdx, rax - JAE LBB2_165 + JAE LBB2_166 LBB2_42: WORD $0xc031 // xor eax, eax QUAD $0x0000018024848948 // mov qword [rsp + 384], rax WORD $0x8949; BYTE $0xd4 // mov r12, rdx - QUAD $0x00000178249c894c // mov qword [rsp + 376], r11 + QUAD $0x0000017824b4894c // mov qword [rsp + 376], r14 LBB2_43: QUAD $0x0000018024bc2b4c // sub r15, qword [rsp + 384] - QUAD $0x0000009824bc894c // mov qword [rsp + 152], r15 + QUAD $0x000000a024bc894c // mov qword [rsp + 160], r15 LBB2_44: WORD $0x894c; BYTE $0xe1 // mov rcx, r12 - LONG $0x24343a45 // cmp r14b, byte [r12] + LONG $0x241c3a45 // cmp r11b, byte [r12] QUAD $0x000001402494940f // sete byte [rsp + 320] - LONG $0x24743a45; BYTE $0x01 // cmp r14b, byte [r12 + 1] - LONG $0xd2940f41 // sete r10b - LONG $0x24743a45; BYTE $0x02 // cmp r14b, byte [r12 + 2] - WORD $0x940f; BYTE $0xd3 // sete bl - LONG $0x24743a45; BYTE $0x03 // cmp r14b, byte [r12 + 3] + LONG $0x245c3a45; BYTE $0x01 // cmp r11b, byte [r12 + 1] + LONG $0xd1940f41 // sete r9b + LONG $0x245c3a45; BYTE $0x02 // cmp r11b, byte [r12 + 2] + LONG $0xd3940f41 // sete r11b + LONG $0x1c24448b // mov eax, dword [rsp + 28] + LONG $0x24443a41; BYTE $0x03 // cmp al, byte [r12 + 3] LONG $0xd5940f41 // sete r13b - LONG $0x24743a45; BYTE $0x04 // cmp r14b, byte [r12 + 4] - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] - LONG $0x24743a45; BYTE $0x05 // cmp r14b, byte [r12 + 5] - LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] - LONG $0x24743a45; BYTE $0x06 // cmp r14b, byte [r12 + 6] - WORD $0x940f; BYTE $0xd0 // sete al - LONG $0x24743a45; BYTE $0x07 // cmp r14b, byte [r12 + 7] + LONG $0x1c24448b // mov eax, dword [rsp + 28] + LONG $0x24443a41; BYTE $0x04 // cmp al, byte [r12 + 4] + LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + LONG $0x1c24448b // mov eax, dword [rsp + 28] + LONG $0x24443a41; BYTE $0x05 // cmp al, byte [r12 + 5] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x1c24448b // mov eax, dword [rsp + 28] + LONG $0x24443a41; BYTE $0x06 // cmp al, byte [r12 + 6] + WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0x1c24448b // mov eax, dword [rsp + 28] + LONG $0x24443a41; BYTE $0x07 // cmp al, byte [r12 + 7] LONG $0xd4940f41 // sete r12b - LONG $0x08713a44 // cmp r14b, byte [rcx + 8] - QUAD $0x000000a02494940f // sete byte [rsp + 160] - LONG $0x09713a44 // cmp r14b, byte [rcx + 9] + LONG $0x1c24448b // mov eax, dword [rsp + 28] + WORD $0x413a; BYTE $0x08 // cmp al, byte [rcx + 8] + QUAD $0x000000882494940f // sete byte [rsp + 136] + LONG $0x1c24448b // mov eax, dword [rsp + 28] + WORD $0x413a; BYTE $0x09 // cmp al, byte [rcx + 9] LONG $0xd6940f40 // sete sil - LONG $0x0a713a44 // cmp r14b, byte [rcx + 10] + LONG $0x1c24448b // mov eax, dword [rsp + 28] + WORD $0x413a; BYTE $0x0a // cmp al, byte [rcx + 10] LONG $0xd7940f40 // sete dil - LONG $0x0b713a44 // cmp r14b, byte [rcx + 11] - LONG $0xd1940f41 // sete r9b - LONG $0x0c713a44 // cmp r14b, byte [rcx + 12] - LONG $0xd3940f41 // sete r11b - LONG $0x0d713a44 // cmp r14b, byte [rcx + 13] - LONG $0xd7940f41 // sete r15b - LONG $0x0e713a44 // cmp r14b, byte [rcx + 14] - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] - LONG $0x0f713a44 // cmp r14b, byte [rcx + 15] + LONG $0x1c24448b // mov eax, dword [rsp + 28] + WORD $0x413a; BYTE $0x0b // cmp al, byte [rcx + 11] LONG $0xd0940f41 // sete r8b - LONG $0x10713a44 // cmp r14b, byte [rcx + 16] + LONG $0x1c24448b // mov eax, dword [rsp + 28] + WORD $0x413a; BYTE $0x0c // cmp al, byte [rcx + 12] + LONG $0xd2940f41 // sete r10b + LONG $0x1c24448b // mov eax, dword [rsp + 28] + WORD $0x413a; BYTE $0x0d // cmp al, byte [rcx + 13] + LONG $0xd7940f41 // sete r15b + LONG $0x1c24448b // mov eax, dword [rsp + 28] + WORD $0x413a; BYTE $0x0e // cmp al, byte [rcx + 14] + QUAD $0x000000902494940f // sete byte [rsp + 144] + LONG $0x1c24448b // mov eax, dword [rsp + 28] + WORD $0x413a; BYTE $0x0f // cmp al, byte [rcx + 15] + WORD $0x940f; BYTE $0xd0 // sete al + LONG $0x1c24548b // mov edx, dword [rsp + 28] + WORD $0x513a; BYTE $0x10 // cmp dl, byte [rcx + 16] QUAD $0x000001202494940f // sete byte [rsp + 288] - LONG $0x11713a44 // cmp r14b, byte [rcx + 17] + LONG $0x1c24548b // mov edx, dword [rsp + 28] + WORD $0x513a; BYTE $0x11 // cmp dl, byte [rcx + 17] + LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] + LONG $0x1c24548b // mov edx, dword [rsp + 28] + WORD $0x513a; BYTE $0x12 // cmp dl, byte [rcx + 18] + QUAD $0x000000982494940f // sete byte [rsp + 152] + LONG $0x1c24548b // mov edx, dword [rsp + 28] + WORD $0x513a; BYTE $0x13 // cmp dl, byte [rcx + 19] + LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + LONG $0x1c24548b // mov edx, dword [rsp + 28] + WORD $0x513a; BYTE $0x14 // cmp dl, byte [rcx + 20] + LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + LONG $0x1c24548b // mov edx, dword [rsp + 28] + WORD $0x513a; BYTE $0x15 // cmp dl, byte [rcx + 21] + LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + LONG $0x1c24548b // mov edx, dword [rsp + 28] + WORD $0x513a; BYTE $0x16 // cmp dl, byte [rcx + 22] LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] - LONG $0x12713a44 // cmp r14b, byte [rcx + 18] - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] - LONG $0x13713a44 // cmp r14b, byte [rcx + 19] - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] - LONG $0x14713a44 // cmp r14b, byte [rcx + 20] - QUAD $0x000000802494940f // sete byte [rsp + 128] - LONG $0x15713a44 // cmp r14b, byte [rcx + 21] - QUAD $0x000000882494940f // sete byte [rsp + 136] - LONG $0x16713a44 // cmp r14b, byte [rcx + 22] - QUAD $0x000000902494940f // sete byte [rsp + 144] - LONG $0x17713a44 // cmp r14b, byte [rcx + 23] + LONG $0x1c24548b // mov edx, dword [rsp + 28] + WORD $0x513a; BYTE $0x17 // cmp dl, byte [rcx + 23] LONG $0xd6940f41 // sete r14b LONG $0x1c24548b // mov edx, dword [rsp + 28] WORD $0x513a; BYTE $0x18 // cmp dl, byte [rcx + 24] QUAD $0x000001102494940f // sete byte [rsp + 272] LONG $0x1c24548b // mov edx, dword [rsp + 28] WORD $0x513a; BYTE $0x19 // cmp dl, byte [rcx + 25] - LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] LONG $0x1c24548b // mov edx, dword [rsp + 28] WORD $0x513a; BYTE $0x1a // cmp dl, byte [rcx + 26] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] LONG $0x1c24548b // mov edx, dword [rsp + 28] WORD $0x513a; BYTE $0x1b // cmp dl, byte [rcx + 27] - LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] LONG $0x1c24548b // mov edx, dword [rsp + 28] WORD $0x513a; BYTE $0x1c // cmp dl, byte [rcx + 28] - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + QUAD $0x000000802494940f // sete byte [rsp + 128] LONG $0x1c24548b // mov edx, dword [rsp + 28] WORD $0x513a; BYTE $0x1d // cmp dl, byte [rcx + 29] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] LONG $0x1c24548b // mov edx, dword [rsp + 28] WORD $0x513a; BYTE $0x1e // cmp dl, byte [rcx + 30] LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] LONG $0x1c24548b // mov edx, dword [rsp + 28] WORD $0x513a; BYTE $0x1f // cmp dl, byte [rcx + 31] WORD $0x940f; BYTE $0xd2 // sete dl - WORD $0x0045; BYTE $0xd2 // add r10b, r10b - QUAD $0x0000014024940244 // add r10b, byte [rsp + 320] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0x0045; BYTE $0xc9 // add r9b, r9b + QUAD $0x00000140248c0244 // add r9b, byte [rsp + 320] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e4c041 // shl r12b, 7 - WORD $0x0841; BYTE $0xc4 // or r12b, al - WORD $0xe3c0; BYTE $0x02 // shl bl, 2 - WORD $0x0844; BYTE $0xd3 // or bl, r10b + WORD $0x0841; BYTE $0xdc // or r12b, bl + LONG $0x02e3c041 // shl r11b, 2 + WORD $0x0845; BYTE $0xcb // or r11b, r9b WORD $0x0040; BYTE $0xf6 // add sil, sil - QUAD $0x000000a024b40240 // add sil, byte [rsp + 160] + QUAD $0x0000008824b40240 // add sil, byte [rsp + 136] LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0845; BYTE $0xdd // or r13b, r11b + LONG $0x245c8b44; BYTE $0x1c // mov r11d, dword [rsp + 28] LONG $0x02e7c040 // shl dil, 2 WORD $0x0840; BYTE $0xf7 // or dil, sil - LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + LONG $0x245cb60f; BYTE $0x30 // movzx ebx, byte [rsp + 48] WORD $0xe3c0; BYTE $0x04 // shl bl, 4 WORD $0x0844; BYTE $0xeb // or bl, r13b WORD $0xde89 // mov esi, ebx - LONG $0x03e1c041 // shl r9b, 3 - WORD $0x0841; BYTE $0xf9 // or r9b, dil - LONG $0x245cb60f; BYTE $0x60 // movzx ebx, byte [rsp + 96] + LONG $0x03e0c041 // shl r8b, 3 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + LONG $0x245cb60f; BYTE $0x28 // movzx ebx, byte [rsp + 40] WORD $0xe3c0; BYTE $0x05 // shl bl, 5 WORD $0x0840; BYTE $0xf3 // or bl, sil - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xcb // or r11b, r9b + LONG $0x04e2c041 // shl r10b, 4 + WORD $0x0845; BYTE $0xc2 // or r10b, r8b LONG $0x05e7c041 // shl r15b, 5 - WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x2474b60f; BYTE $0x58 // movzx esi, byte [rsp + 88] + WORD $0x0845; BYTE $0xd7 // or r15b, r10b + QUAD $0x0000009024b4b60f // movzx esi, byte [rsp + 144] LONG $0x06e6c040 // shl sil, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xf0 // or r8b, sil + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0840; BYTE $0xf0 // or al, sil WORD $0x0841; BYTE $0xdc // or r12b, bl - WORD $0x0845; BYTE $0xf8 // or r8b, r15b - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] - WORD $0xc000 // add al, al - LONG $0x20248402; WORD $0x0001; BYTE $0x00 // add al, byte [rsp + 288] - LONG $0x245cb60f; BYTE $0x68 // movzx ebx, byte [rsp + 104] + WORD $0x0844; BYTE $0xf8 // or al, r15b + LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + WORD $0xdb00 // add bl, bl + LONG $0x20249c02; WORD $0x0001; BYTE $0x00 // add bl, byte [rsp + 288] + WORD $0xde89 // mov esi, ebx + QUAD $0x00000098249cb60f // movzx ebx, byte [rsp + 152] WORD $0xe3c0; BYTE $0x02 // shl bl, 2 - WORD $0xc308 // or bl, al + WORD $0x0840; BYTE $0xf3 // or bl, sil WORD $0xde89 // mov esi, ebx - LONG $0x245cb60f; BYTE $0x70 // movzx ebx, byte [rsp + 112] + LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x03 // shl bl, 3 WORD $0x0840; BYTE $0xf3 // or bl, sil WORD $0xde89 // mov esi, ebx - QUAD $0x00000080249cb60f // movzx ebx, byte [rsp + 128] + LONG $0x245cb60f; BYTE $0x48 // movzx ebx, byte [rsp + 72] WORD $0xe3c0; BYTE $0x04 // shl bl, 4 WORD $0x0840; BYTE $0xf3 // or bl, sil WORD $0xde89 // mov esi, ebx - QUAD $0x00000088249cb60f // movzx ebx, byte [rsp + 136] + LONG $0x245cb60f; BYTE $0x58 // movzx ebx, byte [rsp + 88] WORD $0xe3c0; BYTE $0x05 // shl bl, 5 WORD $0x0840; BYTE $0xf3 // or bl, sil QUAD $0x0000017824b48b48 // mov rsi, qword [rsp + 376] WORD $0x8844; BYTE $0x26 // mov byte [rsi], r12b - QUAD $0x0000009024bcb60f // movzx edi, byte [rsp + 144] + LONG $0x247cb60f; BYTE $0x78 // movzx edi, byte [rsp + 120] LONG $0x06e7c040 // shl dil, 6 LONG $0x07e6c041 // shl r14b, 7 WORD $0x0841; BYTE $0xfe // or r14b, dil - LONG $0x01468844 // mov byte [rsi + 1], r8b + WORD $0x4688; BYTE $0x01 // mov byte [rsi + 1], al WORD $0x0841; BYTE $0xde // or r14b, bl - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] WORD $0xc000 // add al, al LONG $0x10248402; WORD $0x0001; BYTE $0x00 // add al, byte [rsp + 272] WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xd808 // or al, bl LONG $0x245cb60f; BYTE $0x20 // movzx ebx, byte [rsp + 32] @@ -10508,12 +11016,11 @@ LBB2_44: WORD $0xda08 // or dl, bl WORD $0xc208 // or dl, al LONG $0x02768844 // mov byte [rsi + 2], r14b - LONG $0x24748b44; BYTE $0x1c // mov r14d, dword [rsp + 28] WORD $0x5688; BYTE $0x03 // mov byte [rsi + 3], dl LONG $0x20618d4c // lea r12, [rcx + 32] LONG $0x04c68348 // add rsi, 4 QUAD $0x0000017824b48948 // mov qword [rsp + 376], rsi - QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 + QUAD $0x000000a024848348; BYTE $0xff // add qword [rsp + 160], -1 JNE LBB2_44 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] QUAD $0x0000018824bc8b4c // mov r15, qword [rsp + 392] @@ -10523,11 +11030,11 @@ LBB2_46: WORD $0xff83; BYTE $0x07 // cmp edi, 7 JE LBB2_117 WORD $0xff83; BYTE $0x08 // cmp edi, 8 - JNE LBB2_157 + JNE LBB2_165 WORD $0x8b4c; BYTE $0x2e // mov r13, qword [rsi] - LONG $0x1f728d4d // lea r14, [r10 + 31] + LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 - LONG $0xf2490f4d // cmovns r14, r10 + LONG $0xda490f4d // cmovns r11, r10 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d @@ -10545,8 +11052,8 @@ LBB2_50: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf0490f48 // cmovns rsi, rax LONG $0x03fec148 // sar rsi, 3 - WORD $0x894d; BYTE $0xd9 // mov r9, r11 - LONG $0x04b60f45; BYTE $0x33 // movzx r8d, byte [r11 + rsi] + WORD $0x894d; BYTE $0xf1 // mov r9, r14 + LONG $0x04b60f45; BYTE $0x36 // movzx r8d, byte [r14 + rsi] WORD $0x3044; BYTE $0xc3 // xor bl, r8b LONG $0x00f53c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rsi] WORD $0xc189 // mov ecx, eax @@ -10555,40 +11062,40 @@ LBB2_50: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xdf // and dil, bl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x333c8841 // mov byte [r11 + rsi], dil + LONG $0x363c8841 // mov byte [r14 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB2_50 - LONG $0x01c38349 // add r11, 1 + LONG $0x01c68349 // add r14, 1 LBB2_52: - LONG $0x05fec149 // sar r14, 5 + LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 JL LBB2_56 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b024b4894c // mov qword [rsp + 176], r14 - QUAD $0x000000a824b4894c // mov qword [rsp + 168], r14 + QUAD $0x000000a8249c894c // mov qword [rsp + 168], r11 + QUAD $0x000000b0249c894c // mov qword [rsp + 176], r11 LBB2_54: - QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 + QUAD $0x0000011024b4894c // mov qword [rsp + 272], r14 WORD $0x3b4c; BYTE $0x2a // cmp r13, qword [rdx] - QUAD $0x000000982494940f // sete byte [rsp + 152] + QUAD $0x000000a02494940f // sete byte [rsp + 160] LONG $0x086a3b4c // cmp r13, qword [rdx + 8] - LONG $0xd7940f40 // sete dil + LONG $0xd2940f41 // sete r10b LONG $0x106a3b4c // cmp r13, qword [rdx + 16] LONG $0xd6940f41 // sete r14b LONG $0x186a3b4c // cmp r13, qword [rdx + 24] - QUAD $0x000000a02494940f // sete byte [rsp + 160] + QUAD $0x000000882494940f // sete byte [rsp + 136] LONG $0x206a3b4c // cmp r13, qword [rdx + 32] - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] LONG $0x286a3b4c // cmp r13, qword [rdx + 40] - QUAD $0x000000902494940f // sete byte [rsp + 144] + LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] LONG $0x306a3b4c // cmp r13, qword [rdx + 48] - WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x940f; BYTE $0xd3 // sete bl LONG $0x386a3b4c // cmp r13, qword [rdx + 56] - LONG $0xd3940f41 // sete r11b + LONG $0xd7940f40 // sete dil LONG $0x406a3b4c // cmp r13, qword [rdx + 64] - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] + QUAD $0x000000902494940f // sete byte [rsp + 144] LONG $0x486a3b4c // cmp r13, qword [rdx + 72] LONG $0xd6940f40 // sete sil LONG $0x506a3b4c // cmp r13, qword [rdx + 80] @@ -10596,37 +11103,37 @@ LBB2_54: LONG $0x586a3b4c // cmp r13, qword [rdx + 88] LONG $0xd1940f41 // sete r9b LONG $0x606a3b4c // cmp r13, qword [rdx + 96] - LONG $0xd2940f41 // sete r10b + LONG $0xd3940f41 // sete r11b LONG $0x686a3b4c // cmp r13, qword [rdx + 104] LONG $0xd4940f41 // sete r12b LONG $0x706a3b4c // cmp r13, qword [rdx + 112] - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + QUAD $0x000000982494940f // sete byte [rsp + 152] LONG $0x786a3b4c // cmp r13, qword [rdx + 120] - WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x940f; BYTE $0xd0 // sete al LONG $0x80aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 128] - QUAD $0x000000802494940f // sete byte [rsp + 128] - LONG $0x88aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 136] LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + LONG $0x88aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 136] + LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] LONG $0x90aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 144] - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] + LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] LONG $0x98aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 152] - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] LONG $0xa0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 160] - QUAD $0x000000882494940f // sete byte [rsp + 136] + LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] LONG $0xa8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 168] - LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] LONG $0xb0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 176] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + QUAD $0x000000802494940f // sete byte [rsp + 128] LONG $0xb8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 184] LONG $0xd7940f41 // sete r15b LONG $0xc0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 192] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] LONG $0xc8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 200] - LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] LONG $0xd0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 208] - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] LONG $0xd8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 216] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] LONG $0xe0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 224] QUAD $0x000001402494940f // sete byte [rsp + 320] LONG $0xe8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 232] @@ -10634,111 +11141,109 @@ LBB2_54: LONG $0xf0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 240] LONG $0x2454940f; BYTE $0x1c // sete byte [rsp + 28] LONG $0xf8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 248] - WORD $0x940f; BYTE $0xd3 // sete bl - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009824bc0240 // add dil, byte [rsp + 152] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e3c041 // shl r11b, 7 - WORD $0x0841; BYTE $0xc3 // or r11b, al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000a024940244 // add r10b, byte [rsp + 160] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0840; BYTE $0xdf // or dil, bl LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil + WORD $0x0845; BYTE $0xd6 // or r14b, r10b WORD $0x0040; BYTE $0xf6 // add sil, sil - LONG $0x24740240; BYTE $0x50 // add sil, byte [rsp + 80] - QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b - WORD $0xc789 // mov edi, eax + QUAD $0x0000009024b40240 // add sil, byte [rsp + 144] + QUAD $0x00000088249cb60f // movzx ebx, byte [rsp + 136] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0844; BYTE $0xf3 // or bl, r14b + WORD $0x8941; BYTE $0xda // mov r10d, ebx + QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] LONG $0x02e0c041 // shl r8b, 2 WORD $0x0841; BYTE $0xf0 // or r8b, sil - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf8 // or al, dil - WORD $0xc789 // mov edi, eax + LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xd3 // or bl, r10b + WORD $0xde89 // mov esi, ebx LONG $0x03e1c041 // shl r9b, 3 WORD $0x0845; BYTE $0xc1 // or r9b, r8b - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf8 // or al, dil - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xca // or r10b, r9b + LONG $0x245cb60f; BYTE $0x70 // movzx ebx, byte [rsp + 112] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xf3 // or bl, sil + LONG $0x04e3c041 // shl r11b, 4 + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - LONG $0x2474b60f; BYTE $0x58 // movzx esi, byte [rsp + 88] + WORD $0x0845; BYTE $0xdc // or r12b, r11b + QUAD $0x0000009824b4b60f // movzx esi, byte [rsp + 152] LONG $0x06e6c040 // shl sil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf1 // or cl, sil - WORD $0x0841; BYTE $0xc3 // or r11b, al - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] - WORD $0xc000 // add al, al - LONG $0x80248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 128] - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] - WORD $0x8844; BYTE $0x18 // mov byte [rax], r11b - QUAD $0x00000110249c8b4c // mov r11, qword [rsp + 272] - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0x0840; BYTE $0xdf // or dil, bl + WORD $0x0844; BYTE $0xe0 // or al, r12b + LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] + WORD $0xdb00 // add bl, bl + LONG $0x60245c02 // add bl, byte [rsp + 96] + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x48 // movzx ebx, byte [rsp + 72] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x58 // movzx ebx, byte [rsp + 88] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x68 // movzx ebx, byte [rsp + 104] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x78 // movzx ebx, byte [rsp + 120] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0x8841; BYTE $0x3e // mov byte [r14], dil + QUAD $0x0000008024b4b60f // movzx esi, byte [rsp + 128] + LONG $0x06e6c040 // shl sil, 6 LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xc7 // or r15b, al - LONG $0x014b8841 // mov byte [r11 + 1], cl WORD $0x0841; BYTE $0xf7 // or r15b, sil - LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + LONG $0x01468841 // mov byte [r14 + 1], al + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xc000 // add al, al - LONG $0x20244402 // add al, byte [rsp + 32] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + LONG $0x28244402 // add al, byte [rsp + 40] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x1c // movzx ecx, byte [rsp + 28] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xcb08 // or bl, cl - WORD $0xc308 // or bl, al - LONG $0x027b8845 // mov byte [r11 + 2], r15b - LONG $0x035b8841 // mov byte [r11 + 3], bl + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x027e8845 // mov byte [r14 + 2], r15b + LONG $0x034e8841 // mov byte [r14 + 3], cl LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 - LONG $0x04c38349 // add r11, 4 - QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + LONG $0x04c68349 // add r14, 4 + QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 JNE LBB2_54 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b024b48b4c // mov r14, qword [rsp + 176] + QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] LBB2_56: - LONG $0x05e6c149 // shl r14, 5 - WORD $0x394d; BYTE $0xd6 // cmp r14, r10 - JGE LBB2_157 + LONG $0x05e3c149 // shl r11, 5 + WORD $0x394d; BYTE $0xd3 // cmp r11, r10 + JGE LBB2_165 WORD $0x894d; BYTE $0xd0 // mov r8, r10 - WORD $0x294d; BYTE $0xf0 // sub r8, r14 - WORD $0xf749; BYTE $0xd6 // not r14 - WORD $0x014d; BYTE $0xd6 // add r14, r10 + WORD $0x294d; BYTE $0xd8 // sub r8, r11 + WORD $0xf749; BYTE $0xd3 // not r11 + WORD $0x014d; BYTE $0xd3 // add r11, r10 JE LBB2_93 WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 @@ -10750,8 +11255,8 @@ LBB2_59: WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xfe // mov rsi, rdi LONG $0x03eec148 // shr rsi, 3 - WORD $0x894d; BYTE $0xde // mov r14, r11 - LONG $0x0cb60f45; BYTE $0x33 // movzx r9d, byte [r11 + rsi] + WORD $0x894d; BYTE $0xf3 // mov r11, r14 + LONG $0x0cb60f45; BYTE $0x36 // movzx r9d, byte [r14 + rsi] WORD $0xf989 // mov ecx, edi WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 @@ -10759,7 +11264,7 @@ LBB2_59: WORD $0x3044; BYTE $0xc8 // xor al, r9b WORD $0xc320 // and bl, al WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x331c8841 // mov byte [r11 + rsi], bl + LONG $0x361c8841 // mov byte [r14 + rsi], bl LONG $0x02c78348 // add rdi, 2 LONG $0x086a3b4c // cmp r13, qword [rdx + 8] LONG $0x10528d48 // lea rdx, [rdx + 16] @@ -10771,16 +11276,16 @@ LBB2_59: WORD $0xe0d2 // shl al, cl WORD $0x2044; BYTE $0xc8 // and al, r9b WORD $0xd830 // xor al, bl - LONG $0x33048841 // mov byte [r11 + rsi], al + LONG $0x36048841 // mov byte [r14 + rsi], al WORD $0x3949; BYTE $0xfa // cmp r10, rdi JNE LBB2_59 JMP LBB2_146 LBB2_60: LONG $0x2eb70f44 // movzx r13d, word [rsi] - LONG $0x1f728d4d // lea r14, [r10 + 31] + LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 - LONG $0xf2490f4d // cmovns r14, r10 + LONG $0xda490f4d // cmovns r11, r10 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d @@ -10798,8 +11303,8 @@ LBB2_62: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf0490f48 // cmovns rsi, rax LONG $0x03fec148 // sar rsi, 3 - WORD $0x894d; BYTE $0xd9 // mov r9, r11 - LONG $0x04b60f45; BYTE $0x33 // movzx r8d, byte [r11 + rsi] + WORD $0x894d; BYTE $0xf1 // mov r9, r14 + LONG $0x04b60f45; BYTE $0x36 // movzx r8d, byte [r14 + rsi] WORD $0x3044; BYTE $0xc3 // xor bl, r8b LONG $0x00f53c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rsi] WORD $0xc189 // mov ecx, eax @@ -10808,191 +11313,188 @@ LBB2_62: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xdf // and dil, bl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x333c8841 // mov byte [r11 + rsi], dil + LONG $0x363c8841 // mov byte [r14 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB2_62 - LONG $0x01c38349 // add r11, 1 + LONG $0x01c68349 // add r14, 1 LBB2_64: - LONG $0x05fec149 // sar r14, 5 + LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 JL LBB2_68 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b024b4894c // mov qword [rsp + 176], r14 - QUAD $0x000000a824b4894c // mov qword [rsp + 168], r14 + QUAD $0x000000a8249c894c // mov qword [rsp + 168], r11 + QUAD $0x000000b0249c894c // mov qword [rsp + 176], r11 LBB2_66: - QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 - LONG $0x2a3b4466 // cmp r13w, word [rdx] - WORD $0x940f; BYTE $0xd0 // sete al - LONG $0x6a3b4466; BYTE $0x02 // cmp r13w, word [rdx + 2] - LONG $0xd7940f40 // sete dil - LONG $0x6a3b4466; BYTE $0x04 // cmp r13w, word [rdx + 4] - LONG $0xd6940f41 // sete r14b - LONG $0x6a3b4466; BYTE $0x06 // cmp r13w, word [rdx + 6] - QUAD $0x000000982494940f // sete byte [rsp + 152] - LONG $0x6a3b4466; BYTE $0x08 // cmp r13w, word [rdx + 8] - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] - LONG $0x6a3b4466; BYTE $0x0a // cmp r13w, word [rdx + 10] - QUAD $0x000000902494940f // sete byte [rsp + 144] - LONG $0x6a3b4466; BYTE $0x0c // cmp r13w, word [rdx + 12] - QUAD $0x000000a02494940f // sete byte [rsp + 160] - LONG $0x6a3b4466; BYTE $0x0e // cmp r13w, word [rdx + 14] - LONG $0xd3940f41 // sete r11b - LONG $0x6a3b4466; BYTE $0x10 // cmp r13w, word [rdx + 16] - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] - LONG $0x6a3b4466; BYTE $0x12 // cmp r13w, word [rdx + 18] - LONG $0xd6940f40 // sete sil - LONG $0x6a3b4466; BYTE $0x14 // cmp r13w, word [rdx + 20] - LONG $0xd0940f41 // sete r8b - LONG $0x6a3b4466; BYTE $0x16 // cmp r13w, word [rdx + 22] - LONG $0xd1940f41 // sete r9b - LONG $0x6a3b4466; BYTE $0x18 // cmp r13w, word [rdx + 24] - LONG $0xd2940f41 // sete r10b - LONG $0x6a3b4466; BYTE $0x1a // cmp r13w, word [rdx + 26] - LONG $0xd4940f41 // sete r12b - LONG $0x6a3b4466; BYTE $0x1c // cmp r13w, word [rdx + 28] - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] - LONG $0x6a3b4466; BYTE $0x1e // cmp r13w, word [rdx + 30] - WORD $0x940f; BYTE $0xd1 // sete cl - LONG $0x6a3b4466; BYTE $0x20 // cmp r13w, word [rdx + 32] - QUAD $0x000000802494940f // sete byte [rsp + 128] - LONG $0x6a3b4466; BYTE $0x22 // cmp r13w, word [rdx + 34] - LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] - LONG $0x6a3b4466; BYTE $0x24 // cmp r13w, word [rdx + 36] - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] - LONG $0x6a3b4466; BYTE $0x26 // cmp r13w, word [rdx + 38] - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] - LONG $0x6a3b4466; BYTE $0x28 // cmp r13w, word [rdx + 40] - QUAD $0x000000882494940f // sete byte [rsp + 136] - LONG $0x6a3b4466; BYTE $0x2a // cmp r13w, word [rdx + 42] - LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] - LONG $0x6a3b4466; BYTE $0x2c // cmp r13w, word [rdx + 44] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] - LONG $0x6a3b4466; BYTE $0x2e // cmp r13w, word [rdx + 46] - LONG $0xd7940f41 // sete r15b - LONG $0x6a3b4466; BYTE $0x30 // cmp r13w, word [rdx + 48] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] - LONG $0x6a3b4466; BYTE $0x32 // cmp r13w, word [rdx + 50] - LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] - LONG $0x6a3b4466; BYTE $0x34 // cmp r13w, word [rdx + 52] - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] - LONG $0x6a3b4466; BYTE $0x36 // cmp r13w, word [rdx + 54] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] - LONG $0x6a3b4466; BYTE $0x38 // cmp r13w, word [rdx + 56] - QUAD $0x000001402494940f // sete byte [rsp + 320] - LONG $0x6a3b4466; BYTE $0x3a // cmp r13w, word [rdx + 58] - QUAD $0x000001202494940f // sete byte [rsp + 288] - LONG $0x6a3b4466; BYTE $0x3c // cmp r13w, word [rdx + 60] - LONG $0x2454940f; BYTE $0x1c // sete byte [rsp + 28] - LONG $0x6a3b4466; BYTE $0x3e // cmp r13w, word [rdx + 62] - WORD $0x940f; BYTE $0xd3 // sete bl - WORD $0x0040; BYTE $0xff // add dil, dil - WORD $0x0840; BYTE $0xc7 // or dil, al - QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e3c041 // shl r11b, 7 - WORD $0x0841; BYTE $0xc3 // or r11b, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0x0040; BYTE $0xf6 // add sil, sil - LONG $0x24740240; BYTE $0x58 // add sil, byte [rsp + 88] - QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b - WORD $0xc789 // mov edi, eax - LONG $0x02e0c041 // shl r8b, 2 - WORD $0x0841; BYTE $0xf0 // or r8b, sil - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf8 // or al, dil - WORD $0xc789 // mov edi, eax - LONG $0x03e1c041 // shl r9b, 3 - WORD $0x0845; BYTE $0xc1 // or r9b, r8b - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf8 // or al, dil - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - LONG $0x2474b60f; BYTE $0x50 // movzx esi, byte [rsp + 80] - LONG $0x06e6c040 // shl sil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf1 // or cl, sil - WORD $0x0841; BYTE $0xc3 // or r11b, al - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] - WORD $0xc000 // add al, al - LONG $0x80248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 128] - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] - WORD $0x8844; BYTE $0x18 // mov byte [rax], r11b - QUAD $0x00000110249c8b4c // mov r11, qword [rsp + 272] - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xc7 // or r15b, al - LONG $0x014b8841 // mov byte [r11 + 1], cl - WORD $0x0841; BYTE $0xf7 // or r15b, sil - LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] - WORD $0xc000 // add al, al - LONG $0x20244402 // add al, byte [rsp + 32] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x1c // movzx ecx, byte [rsp + 28] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xcb08 // or bl, cl - WORD $0xc308 // or bl, al - LONG $0x027b8845 // mov byte [r11 + 2], r15b - LONG $0x035b8841 // mov byte [r11 + 3], bl - LONG $0x40c28348 // add rdx, 64 - LONG $0x04c38349 // add r11, 4 - QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + QUAD $0x0000011024b4894c // mov qword [rsp + 272], r14 + LONG $0x2a3b4466 // cmp r13w, word [rdx] + QUAD $0x000000902494940f // sete byte [rsp + 144] + LONG $0x6a3b4466; BYTE $0x02 // cmp r13w, word [rdx + 2] + LONG $0xd2940f41 // sete r10b + LONG $0x6a3b4466; BYTE $0x04 // cmp r13w, word [rdx + 4] + LONG $0xd6940f41 // sete r14b + LONG $0x6a3b4466; BYTE $0x06 // cmp r13w, word [rdx + 6] + QUAD $0x000000a02494940f // sete byte [rsp + 160] + LONG $0x6a3b4466; BYTE $0x08 // cmp r13w, word [rdx + 8] + LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + LONG $0x6a3b4466; BYTE $0x0a // cmp r13w, word [rdx + 10] + LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + LONG $0x6a3b4466; BYTE $0x0c // cmp r13w, word [rdx + 12] + WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0x6a3b4466; BYTE $0x0e // cmp r13w, word [rdx + 14] + LONG $0xd7940f40 // sete dil + LONG $0x6a3b4466; BYTE $0x10 // cmp r13w, word [rdx + 16] + QUAD $0x000000982494940f // sete byte [rsp + 152] + LONG $0x6a3b4466; BYTE $0x12 // cmp r13w, word [rdx + 18] + LONG $0xd6940f40 // sete sil + LONG $0x6a3b4466; BYTE $0x14 // cmp r13w, word [rdx + 20] + LONG $0xd0940f41 // sete r8b + LONG $0x6a3b4466; BYTE $0x16 // cmp r13w, word [rdx + 22] + LONG $0xd1940f41 // sete r9b + LONG $0x6a3b4466; BYTE $0x18 // cmp r13w, word [rdx + 24] + LONG $0xd3940f41 // sete r11b + LONG $0x6a3b4466; BYTE $0x1a // cmp r13w, word [rdx + 26] + LONG $0xd4940f41 // sete r12b + LONG $0x6a3b4466; BYTE $0x1c // cmp r13w, word [rdx + 28] + QUAD $0x000000882494940f // sete byte [rsp + 136] + LONG $0x6a3b4466; BYTE $0x1e // cmp r13w, word [rdx + 30] + WORD $0x940f; BYTE $0xd0 // sete al + LONG $0x6a3b4466; BYTE $0x20 // cmp r13w, word [rdx + 32] + LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + LONG $0x6a3b4466; BYTE $0x22 // cmp r13w, word [rdx + 34] + LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + LONG $0x6a3b4466; BYTE $0x24 // cmp r13w, word [rdx + 36] + LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] + LONG $0x6a3b4466; BYTE $0x26 // cmp r13w, word [rdx + 38] + LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + LONG $0x6a3b4466; BYTE $0x28 // cmp r13w, word [rdx + 40] + LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] + LONG $0x6a3b4466; BYTE $0x2a // cmp r13w, word [rdx + 42] + LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + LONG $0x6a3b4466; BYTE $0x2c // cmp r13w, word [rdx + 44] + QUAD $0x000000802494940f // sete byte [rsp + 128] + LONG $0x6a3b4466; BYTE $0x2e // cmp r13w, word [rdx + 46] + LONG $0xd7940f41 // sete r15b + LONG $0x6a3b4466; BYTE $0x30 // cmp r13w, word [rdx + 48] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x6a3b4466; BYTE $0x32 // cmp r13w, word [rdx + 50] + LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + LONG $0x6a3b4466; BYTE $0x34 // cmp r13w, word [rdx + 52] + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + LONG $0x6a3b4466; BYTE $0x36 // cmp r13w, word [rdx + 54] + LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x6a3b4466; BYTE $0x38 // cmp r13w, word [rdx + 56] + QUAD $0x000001402494940f // sete byte [rsp + 320] + LONG $0x6a3b4466; BYTE $0x3a // cmp r13w, word [rdx + 58] + QUAD $0x000001202494940f // sete byte [rsp + 288] + LONG $0x6a3b4466; BYTE $0x3c // cmp r13w, word [rdx + 60] + LONG $0x2454940f; BYTE $0x1c // sete byte [rsp + 28] + LONG $0x6a3b4466; BYTE $0x3e // cmp r13w, word [rdx + 62] + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009024940244 // add r10b, byte [rsp + 144] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0840; BYTE $0xdf // or dil, bl + LONG $0x02e6c041 // shl r14b, 2 + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xf6 // add sil, sil + QUAD $0x0000009824b40240 // add sil, byte [rsp + 152] + QUAD $0x000000a0249cb60f // movzx ebx, byte [rsp + 160] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0844; BYTE $0xf3 // or bl, r14b + WORD $0x8941; BYTE $0xda // mov r10d, ebx + QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf0 // or r8b, sil + LONG $0x245cb60f; BYTE $0x48 // movzx ebx, byte [rsp + 72] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xd3 // or bl, r10b + WORD $0xde89 // mov esi, ebx + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x245cb60f; BYTE $0x70 // movzx ebx, byte [rsp + 112] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xf3 // or bl, sil + LONG $0x04e3c041 // shl r11b, 4 + WORD $0x0845; BYTE $0xcb // or r11b, r9b + LONG $0x05e4c041 // shl r12b, 5 + WORD $0x0845; BYTE $0xdc // or r12b, r11b + QUAD $0x0000008824b4b60f // movzx esi, byte [rsp + 136] + LONG $0x06e6c040 // shl sil, 6 + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0840; BYTE $0xf0 // or al, sil + WORD $0x0840; BYTE $0xdf // or dil, bl + WORD $0x0844; BYTE $0xe0 // or al, r12b + LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] + WORD $0xdb00 // add bl, bl + LONG $0x60245c02 // add bl, byte [rsp + 96] + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x58 // movzx ebx, byte [rsp + 88] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x68 // movzx ebx, byte [rsp + 104] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x78 // movzx ebx, byte [rsp + 120] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0x8841; BYTE $0x3e // mov byte [r14], dil + QUAD $0x0000008024b4b60f // movzx esi, byte [rsp + 128] + LONG $0x06e6c040 // shl sil, 6 + LONG $0x07e7c041 // shl r15b, 7 + WORD $0x0841; BYTE $0xf7 // or r15b, sil + LONG $0x01468841 // mov byte [r14 + 1], al + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xc000 // add al, al + LONG $0x28244402 // add al, byte [rsp + 40] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x027e8845 // mov byte [r14 + 2], r15b + LONG $0x034e8841 // mov byte [r14 + 3], cl + LONG $0x40c28348 // add rdx, 64 + LONG $0x04c68349 // add r14, 4 + QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 JNE LBB2_66 - QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b024b48b4c // mov r14, qword [rsp + 176] + QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] + QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] LBB2_68: - LONG $0x05e6c149 // shl r14, 5 - WORD $0x394d; BYTE $0xd6 // cmp r14, r10 - JGE LBB2_157 + LONG $0x05e3c149 // shl r11, 5 + WORD $0x394d; BYTE $0xd3 // cmp r11, r10 + JGE LBB2_165 WORD $0x894d; BYTE $0xd0 // mov r8, r10 - WORD $0x294d; BYTE $0xf0 // sub r8, r14 - WORD $0xf749; BYTE $0xd6 // not r14 - WORD $0x014d; BYTE $0xd6 // add r14, r10 + WORD $0x294d; BYTE $0xd8 // sub r8, r11 + WORD $0xf749; BYTE $0xd3 // not r11 + WORD $0x014d; BYTE $0xd3 // add r11, r10 JE LBB2_82 WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 @@ -11004,8 +11506,8 @@ LBB2_71: WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xfe // mov rsi, rdi LONG $0x03eec148 // shr rsi, 3 - WORD $0x894d; BYTE $0xde // mov r14, r11 - LONG $0x0cb60f45; BYTE $0x33 // movzx r9d, byte [r11 + rsi] + WORD $0x894d; BYTE $0xf3 // mov r11, r14 + LONG $0x0cb60f45; BYTE $0x36 // movzx r9d, byte [r14 + rsi] WORD $0xf989 // mov ecx, edi WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 @@ -11013,7 +11515,7 @@ LBB2_71: WORD $0x3044; BYTE $0xc8 // xor al, r9b WORD $0xc320 // and bl, al WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x331c8841 // mov byte [r11 + rsi], bl + LONG $0x361c8841 // mov byte [r14 + rsi], bl LONG $0x02c78348 // add rdi, 2 LONG $0x6a3b4466; BYTE $0x02 // cmp r13w, word [rdx + 2] LONG $0x04528d48 // lea rdx, [rdx + 4] @@ -11025,16 +11527,16 @@ LBB2_71: WORD $0xe0d2 // shl al, cl WORD $0x2044; BYTE $0xc8 // and al, r9b WORD $0xd830 // xor al, bl - LONG $0x33048841 // mov byte [r11 + rsi], al + LONG $0x36048841 // mov byte [r14 + rsi], al WORD $0x3949; BYTE $0xfa // cmp r10, rdi JNE LBB2_71 JMP LBB2_142 LBB2_72: LONG $0x2eb70f44 // movzx r13d, word [rsi] - LONG $0x1f728d4d // lea r14, [r10 + 31] + LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 - LONG $0xf2490f4d // cmovns r14, r10 + LONG $0xda490f4d // cmovns r11, r10 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d @@ -11052,8 +11554,8 @@ LBB2_74: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf0490f48 // cmovns rsi, rax LONG $0x03fec148 // sar rsi, 3 - WORD $0x894d; BYTE $0xd9 // mov r9, r11 - LONG $0x04b60f45; BYTE $0x33 // movzx r8d, byte [r11 + rsi] + WORD $0x894d; BYTE $0xf1 // mov r9, r14 + LONG $0x04b60f45; BYTE $0x36 // movzx r8d, byte [r14 + rsi] WORD $0x3044; BYTE $0xc3 // xor bl, r8b LONG $0x00f53c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rsi] WORD $0xc189 // mov ecx, eax @@ -11062,190 +11564,188 @@ LBB2_74: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xdf // and dil, bl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x333c8841 // mov byte [r11 + rsi], dil + LONG $0x363c8841 // mov byte [r14 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB2_74 - LONG $0x01c38349 // add r11, 1 + LONG $0x01c68349 // add r14, 1 LBB2_76: - LONG $0x05fec149 // sar r14, 5 + LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 JL LBB2_80 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b024b4894c // mov qword [rsp + 176], r14 - QUAD $0x000000a824b4894c // mov qword [rsp + 168], r14 + QUAD $0x000000a8249c894c // mov qword [rsp + 168], r11 + QUAD $0x000000b0249c894c // mov qword [rsp + 176], r11 LBB2_78: - QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 - LONG $0x2a3b4466 // cmp r13w, word [rdx] - QUAD $0x000000982494940f // sete byte [rsp + 152] - LONG $0x6a3b4466; BYTE $0x02 // cmp r13w, word [rdx + 2] - LONG $0xd7940f40 // sete dil - LONG $0x6a3b4466; BYTE $0x04 // cmp r13w, word [rdx + 4] - LONG $0xd6940f41 // sete r14b - LONG $0x6a3b4466; BYTE $0x06 // cmp r13w, word [rdx + 6] - QUAD $0x000000a02494940f // sete byte [rsp + 160] - LONG $0x6a3b4466; BYTE $0x08 // cmp r13w, word [rdx + 8] - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] - LONG $0x6a3b4466; BYTE $0x0a // cmp r13w, word [rdx + 10] - QUAD $0x000000902494940f // sete byte [rsp + 144] - LONG $0x6a3b4466; BYTE $0x0c // cmp r13w, word [rdx + 12] - WORD $0x940f; BYTE $0xd0 // sete al - LONG $0x6a3b4466; BYTE $0x0e // cmp r13w, word [rdx + 14] - LONG $0xd3940f41 // sete r11b - LONG $0x6a3b4466; BYTE $0x10 // cmp r13w, word [rdx + 16] - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] - LONG $0x6a3b4466; BYTE $0x12 // cmp r13w, word [rdx + 18] - LONG $0xd6940f40 // sete sil - LONG $0x6a3b4466; BYTE $0x14 // cmp r13w, word [rdx + 20] - LONG $0xd0940f41 // sete r8b - LONG $0x6a3b4466; BYTE $0x16 // cmp r13w, word [rdx + 22] - LONG $0xd1940f41 // sete r9b - LONG $0x6a3b4466; BYTE $0x18 // cmp r13w, word [rdx + 24] - LONG $0xd2940f41 // sete r10b - LONG $0x6a3b4466; BYTE $0x1a // cmp r13w, word [rdx + 26] - LONG $0xd4940f41 // sete r12b - LONG $0x6a3b4466; BYTE $0x1c // cmp r13w, word [rdx + 28] - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] - LONG $0x6a3b4466; BYTE $0x1e // cmp r13w, word [rdx + 30] - WORD $0x940f; BYTE $0xd1 // sete cl - LONG $0x6a3b4466; BYTE $0x20 // cmp r13w, word [rdx + 32] - QUAD $0x000000802494940f // sete byte [rsp + 128] - LONG $0x6a3b4466; BYTE $0x22 // cmp r13w, word [rdx + 34] - LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] - LONG $0x6a3b4466; BYTE $0x24 // cmp r13w, word [rdx + 36] - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] - LONG $0x6a3b4466; BYTE $0x26 // cmp r13w, word [rdx + 38] - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] - LONG $0x6a3b4466; BYTE $0x28 // cmp r13w, word [rdx + 40] - QUAD $0x000000882494940f // sete byte [rsp + 136] - LONG $0x6a3b4466; BYTE $0x2a // cmp r13w, word [rdx + 42] - LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] - LONG $0x6a3b4466; BYTE $0x2c // cmp r13w, word [rdx + 44] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] - LONG $0x6a3b4466; BYTE $0x2e // cmp r13w, word [rdx + 46] - LONG $0xd7940f41 // sete r15b - LONG $0x6a3b4466; BYTE $0x30 // cmp r13w, word [rdx + 48] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] - LONG $0x6a3b4466; BYTE $0x32 // cmp r13w, word [rdx + 50] - LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] - LONG $0x6a3b4466; BYTE $0x34 // cmp r13w, word [rdx + 52] - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] - LONG $0x6a3b4466; BYTE $0x36 // cmp r13w, word [rdx + 54] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] - LONG $0x6a3b4466; BYTE $0x38 // cmp r13w, word [rdx + 56] - QUAD $0x000001402494940f // sete byte [rsp + 320] - LONG $0x6a3b4466; BYTE $0x3a // cmp r13w, word [rdx + 58] - QUAD $0x000001202494940f // sete byte [rsp + 288] - LONG $0x6a3b4466; BYTE $0x3c // cmp r13w, word [rdx + 60] - LONG $0x2454940f; BYTE $0x1c // sete byte [rsp + 28] - LONG $0x6a3b4466; BYTE $0x3e // cmp r13w, word [rdx + 62] - WORD $0x940f; BYTE $0xd3 // sete bl - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009824bc0240 // add dil, byte [rsp + 152] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e3c041 // shl r11b, 7 - WORD $0x0841; BYTE $0xc3 // or r11b, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0x0040; BYTE $0xf6 // add sil, sil - LONG $0x24740240; BYTE $0x50 // add sil, byte [rsp + 80] - QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b - WORD $0xc789 // mov edi, eax - LONG $0x02e0c041 // shl r8b, 2 - WORD $0x0841; BYTE $0xf0 // or r8b, sil - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf8 // or al, dil - WORD $0xc789 // mov edi, eax - LONG $0x03e1c041 // shl r9b, 3 - WORD $0x0845; BYTE $0xc1 // or r9b, r8b - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf8 // or al, dil - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - LONG $0x2474b60f; BYTE $0x58 // movzx esi, byte [rsp + 88] - LONG $0x06e6c040 // shl sil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf1 // or cl, sil - WORD $0x0841; BYTE $0xc3 // or r11b, al - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] - WORD $0xc000 // add al, al - LONG $0x80248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 128] - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] - WORD $0x8844; BYTE $0x18 // mov byte [rax], r11b - QUAD $0x00000110249c8b4c // mov r11, qword [rsp + 272] - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xc7 // or r15b, al - LONG $0x014b8841 // mov byte [r11 + 1], cl - WORD $0x0841; BYTE $0xf7 // or r15b, sil - LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] - WORD $0xc000 // add al, al - LONG $0x20244402 // add al, byte [rsp + 32] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x1c // movzx ecx, byte [rsp + 28] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xcb08 // or bl, cl - WORD $0xc308 // or bl, al - LONG $0x027b8845 // mov byte [r11 + 2], r15b - LONG $0x035b8841 // mov byte [r11 + 3], bl - LONG $0x40c28348 // add rdx, 64 - LONG $0x04c38349 // add r11, 4 - QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + QUAD $0x0000011024b4894c // mov qword [rsp + 272], r14 + LONG $0x2a3b4466 // cmp r13w, word [rdx] + QUAD $0x000000a02494940f // sete byte [rsp + 160] + LONG $0x6a3b4466; BYTE $0x02 // cmp r13w, word [rdx + 2] + LONG $0xd2940f41 // sete r10b + LONG $0x6a3b4466; BYTE $0x04 // cmp r13w, word [rdx + 4] + LONG $0xd6940f41 // sete r14b + LONG $0x6a3b4466; BYTE $0x06 // cmp r13w, word [rdx + 6] + QUAD $0x000000882494940f // sete byte [rsp + 136] + LONG $0x6a3b4466; BYTE $0x08 // cmp r13w, word [rdx + 8] + LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] + LONG $0x6a3b4466; BYTE $0x0a // cmp r13w, word [rdx + 10] + LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + LONG $0x6a3b4466; BYTE $0x0c // cmp r13w, word [rdx + 12] + WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0x6a3b4466; BYTE $0x0e // cmp r13w, word [rdx + 14] + LONG $0xd7940f40 // sete dil + LONG $0x6a3b4466; BYTE $0x10 // cmp r13w, word [rdx + 16] + QUAD $0x000000902494940f // sete byte [rsp + 144] + LONG $0x6a3b4466; BYTE $0x12 // cmp r13w, word [rdx + 18] + LONG $0xd6940f40 // sete sil + LONG $0x6a3b4466; BYTE $0x14 // cmp r13w, word [rdx + 20] + LONG $0xd0940f41 // sete r8b + LONG $0x6a3b4466; BYTE $0x16 // cmp r13w, word [rdx + 22] + LONG $0xd1940f41 // sete r9b + LONG $0x6a3b4466; BYTE $0x18 // cmp r13w, word [rdx + 24] + LONG $0xd3940f41 // sete r11b + LONG $0x6a3b4466; BYTE $0x1a // cmp r13w, word [rdx + 26] + LONG $0xd4940f41 // sete r12b + LONG $0x6a3b4466; BYTE $0x1c // cmp r13w, word [rdx + 28] + QUAD $0x000000982494940f // sete byte [rsp + 152] + LONG $0x6a3b4466; BYTE $0x1e // cmp r13w, word [rdx + 30] + WORD $0x940f; BYTE $0xd0 // sete al + LONG $0x6a3b4466; BYTE $0x20 // cmp r13w, word [rdx + 32] + LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + LONG $0x6a3b4466; BYTE $0x22 // cmp r13w, word [rdx + 34] + LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + LONG $0x6a3b4466; BYTE $0x24 // cmp r13w, word [rdx + 36] + LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + LONG $0x6a3b4466; BYTE $0x26 // cmp r13w, word [rdx + 38] + LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + LONG $0x6a3b4466; BYTE $0x28 // cmp r13w, word [rdx + 40] + LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] + LONG $0x6a3b4466; BYTE $0x2a // cmp r13w, word [rdx + 42] + LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + LONG $0x6a3b4466; BYTE $0x2c // cmp r13w, word [rdx + 44] + QUAD $0x000000802494940f // sete byte [rsp + 128] + LONG $0x6a3b4466; BYTE $0x2e // cmp r13w, word [rdx + 46] + LONG $0xd7940f41 // sete r15b + LONG $0x6a3b4466; BYTE $0x30 // cmp r13w, word [rdx + 48] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x6a3b4466; BYTE $0x32 // cmp r13w, word [rdx + 50] + LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + LONG $0x6a3b4466; BYTE $0x34 // cmp r13w, word [rdx + 52] + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + LONG $0x6a3b4466; BYTE $0x36 // cmp r13w, word [rdx + 54] + LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x6a3b4466; BYTE $0x38 // cmp r13w, word [rdx + 56] + QUAD $0x000001402494940f // sete byte [rsp + 320] + LONG $0x6a3b4466; BYTE $0x3a // cmp r13w, word [rdx + 58] + QUAD $0x000001202494940f // sete byte [rsp + 288] + LONG $0x6a3b4466; BYTE $0x3c // cmp r13w, word [rdx + 60] + LONG $0x2454940f; BYTE $0x1c // sete byte [rsp + 28] + LONG $0x6a3b4466; BYTE $0x3e // cmp r13w, word [rdx + 62] + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000a024940244 // add r10b, byte [rsp + 160] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0840; BYTE $0xdf // or dil, bl + LONG $0x02e6c041 // shl r14b, 2 + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xf6 // add sil, sil + QUAD $0x0000009024b40240 // add sil, byte [rsp + 144] + QUAD $0x00000088249cb60f // movzx ebx, byte [rsp + 136] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0844; BYTE $0xf3 // or bl, r14b + WORD $0x8941; BYTE $0xda // mov r10d, ebx + QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf0 // or r8b, sil + LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xd3 // or bl, r10b + WORD $0xde89 // mov esi, ebx + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x245cb60f; BYTE $0x70 // movzx ebx, byte [rsp + 112] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xf3 // or bl, sil + LONG $0x04e3c041 // shl r11b, 4 + WORD $0x0845; BYTE $0xcb // or r11b, r9b + LONG $0x05e4c041 // shl r12b, 5 + WORD $0x0845; BYTE $0xdc // or r12b, r11b + QUAD $0x0000009824b4b60f // movzx esi, byte [rsp + 152] + LONG $0x06e6c040 // shl sil, 6 + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0840; BYTE $0xf0 // or al, sil + WORD $0x0840; BYTE $0xdf // or dil, bl + WORD $0x0844; BYTE $0xe0 // or al, r12b + LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] + WORD $0xdb00 // add bl, bl + LONG $0x60245c02 // add bl, byte [rsp + 96] + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x48 // movzx ebx, byte [rsp + 72] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x58 // movzx ebx, byte [rsp + 88] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x68 // movzx ebx, byte [rsp + 104] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x78 // movzx ebx, byte [rsp + 120] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0x8841; BYTE $0x3e // mov byte [r14], dil + QUAD $0x0000008024b4b60f // movzx esi, byte [rsp + 128] + LONG $0x06e6c040 // shl sil, 6 + LONG $0x07e7c041 // shl r15b, 7 + WORD $0x0841; BYTE $0xf7 // or r15b, sil + LONG $0x01468841 // mov byte [r14 + 1], al + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xc000 // add al, al + LONG $0x28244402 // add al, byte [rsp + 40] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x027e8845 // mov byte [r14 + 2], r15b + LONG $0x034e8841 // mov byte [r14 + 3], cl + LONG $0x40c28348 // add rdx, 64 + LONG $0x04c68349 // add r14, 4 + QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 JNE LBB2_78 - QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b024b48b4c // mov r14, qword [rsp + 176] + QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] + QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] LBB2_80: - LONG $0x05e6c149 // shl r14, 5 - WORD $0x394d; BYTE $0xd6 // cmp r14, r10 - JGE LBB2_157 + LONG $0x05e3c149 // shl r11, 5 + WORD $0x394d; BYTE $0xd3 // cmp r11, r10 + JGE LBB2_165 WORD $0x894d; BYTE $0xd0 // mov r8, r10 - WORD $0x294d; BYTE $0xf0 // sub r8, r14 - WORD $0xf749; BYTE $0xd6 // not r14 - WORD $0x014d; BYTE $0xd6 // add r14, r10 + WORD $0x294d; BYTE $0xd8 // sub r8, r11 + WORD $0xf749; BYTE $0xd3 // not r11 + WORD $0x014d; BYTE $0xd3 // add r11, r10 JNE LBB2_140 LBB2_82: @@ -11254,9 +11754,9 @@ LBB2_82: LBB2_83: WORD $0x8b4c; BYTE $0x2e // mov r13, qword [rsi] - LONG $0x1f728d4d // lea r14, [r10 + 31] + LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 - LONG $0xf2490f4d // cmovns r14, r10 + LONG $0xda490f4d // cmovns r11, r10 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d @@ -11274,8 +11774,8 @@ LBB2_85: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf0490f48 // cmovns rsi, rax LONG $0x03fec148 // sar rsi, 3 - WORD $0x894d; BYTE $0xd9 // mov r9, r11 - LONG $0x04b60f45; BYTE $0x33 // movzx r8d, byte [r11 + rsi] + WORD $0x894d; BYTE $0xf1 // mov r9, r14 + LONG $0x04b60f45; BYTE $0x36 // movzx r8d, byte [r14 + rsi] WORD $0x3044; BYTE $0xc3 // xor bl, r8b LONG $0x00f53c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rsi] WORD $0xc189 // mov ecx, eax @@ -11284,40 +11784,40 @@ LBB2_85: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xdf // and dil, bl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x333c8841 // mov byte [r11 + rsi], dil + LONG $0x363c8841 // mov byte [r14 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB2_85 - LONG $0x01c38349 // add r11, 1 + LONG $0x01c68349 // add r14, 1 LBB2_87: - LONG $0x05fec149 // sar r14, 5 + LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 JL LBB2_91 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b024b4894c // mov qword [rsp + 176], r14 - QUAD $0x000000a824b4894c // mov qword [rsp + 168], r14 + QUAD $0x000000a8249c894c // mov qword [rsp + 168], r11 + QUAD $0x000000b0249c894c // mov qword [rsp + 176], r11 LBB2_89: - QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 + QUAD $0x0000011024b4894c // mov qword [rsp + 272], r14 WORD $0x3b4c; BYTE $0x2a // cmp r13, qword [rdx] - QUAD $0x000000982494940f // sete byte [rsp + 152] + QUAD $0x000000a02494940f // sete byte [rsp + 160] LONG $0x086a3b4c // cmp r13, qword [rdx + 8] - LONG $0xd7940f40 // sete dil + LONG $0xd2940f41 // sete r10b LONG $0x106a3b4c // cmp r13, qword [rdx + 16] LONG $0xd6940f41 // sete r14b LONG $0x186a3b4c // cmp r13, qword [rdx + 24] - QUAD $0x000000a02494940f // sete byte [rsp + 160] + QUAD $0x000000882494940f // sete byte [rsp + 136] LONG $0x206a3b4c // cmp r13, qword [rdx + 32] - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] LONG $0x286a3b4c // cmp r13, qword [rdx + 40] - QUAD $0x000000902494940f // sete byte [rsp + 144] + LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] LONG $0x306a3b4c // cmp r13, qword [rdx + 48] - WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x940f; BYTE $0xd3 // sete bl LONG $0x386a3b4c // cmp r13, qword [rdx + 56] - LONG $0xd3940f41 // sete r11b + LONG $0xd7940f40 // sete dil LONG $0x406a3b4c // cmp r13, qword [rdx + 64] - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] + QUAD $0x000000902494940f // sete byte [rsp + 144] LONG $0x486a3b4c // cmp r13, qword [rdx + 72] LONG $0xd6940f40 // sete sil LONG $0x506a3b4c // cmp r13, qword [rdx + 80] @@ -11325,37 +11825,37 @@ LBB2_89: LONG $0x586a3b4c // cmp r13, qword [rdx + 88] LONG $0xd1940f41 // sete r9b LONG $0x606a3b4c // cmp r13, qword [rdx + 96] - LONG $0xd2940f41 // sete r10b + LONG $0xd3940f41 // sete r11b LONG $0x686a3b4c // cmp r13, qword [rdx + 104] LONG $0xd4940f41 // sete r12b LONG $0x706a3b4c // cmp r13, qword [rdx + 112] - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + QUAD $0x000000982494940f // sete byte [rsp + 152] LONG $0x786a3b4c // cmp r13, qword [rdx + 120] - WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x940f; BYTE $0xd0 // sete al LONG $0x80aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 128] - QUAD $0x000000802494940f // sete byte [rsp + 128] - LONG $0x88aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 136] LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + LONG $0x88aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 136] + LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] LONG $0x90aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 144] - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] + LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] LONG $0x98aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 152] - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] LONG $0xa0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 160] - QUAD $0x000000882494940f // sete byte [rsp + 136] + LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] LONG $0xa8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 168] - LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] LONG $0xb0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 176] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + QUAD $0x000000802494940f // sete byte [rsp + 128] LONG $0xb8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 184] LONG $0xd7940f41 // sete r15b LONG $0xc0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 192] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] LONG $0xc8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 200] - LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] LONG $0xd0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 208] - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] LONG $0xd8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 216] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] LONG $0xe0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 224] QUAD $0x000001402494940f // sete byte [rsp + 320] LONG $0xe8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 232] @@ -11363,111 +11863,109 @@ LBB2_89: LONG $0xf0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 240] LONG $0x2454940f; BYTE $0x1c // sete byte [rsp + 28] LONG $0xf8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 248] - WORD $0x940f; BYTE $0xd3 // sete bl - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009824bc0240 // add dil, byte [rsp + 152] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e3c041 // shl r11b, 7 - WORD $0x0841; BYTE $0xc3 // or r11b, al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000a024940244 // add r10b, byte [rsp + 160] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0840; BYTE $0xdf // or dil, bl LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil + WORD $0x0845; BYTE $0xd6 // or r14b, r10b WORD $0x0040; BYTE $0xf6 // add sil, sil - LONG $0x24740240; BYTE $0x50 // add sil, byte [rsp + 80] - QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b - WORD $0xc789 // mov edi, eax + QUAD $0x0000009024b40240 // add sil, byte [rsp + 144] + QUAD $0x00000088249cb60f // movzx ebx, byte [rsp + 136] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0844; BYTE $0xf3 // or bl, r14b + WORD $0x8941; BYTE $0xda // mov r10d, ebx + QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] LONG $0x02e0c041 // shl r8b, 2 WORD $0x0841; BYTE $0xf0 // or r8b, sil - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf8 // or al, dil - WORD $0xc789 // mov edi, eax + LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xd3 // or bl, r10b + WORD $0xde89 // mov esi, ebx LONG $0x03e1c041 // shl r9b, 3 WORD $0x0845; BYTE $0xc1 // or r9b, r8b - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf8 // or al, dil - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xca // or r10b, r9b + LONG $0x245cb60f; BYTE $0x70 // movzx ebx, byte [rsp + 112] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xf3 // or bl, sil + LONG $0x04e3c041 // shl r11b, 4 + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - LONG $0x2474b60f; BYTE $0x58 // movzx esi, byte [rsp + 88] + WORD $0x0845; BYTE $0xdc // or r12b, r11b + QUAD $0x0000009824b4b60f // movzx esi, byte [rsp + 152] LONG $0x06e6c040 // shl sil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf1 // or cl, sil - WORD $0x0841; BYTE $0xc3 // or r11b, al - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0840; BYTE $0xf0 // or al, sil + WORD $0x0840; BYTE $0xdf // or dil, bl + WORD $0x0844; BYTE $0xe0 // or al, r12b + LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] + WORD $0xdb00 // add bl, bl + LONG $0x60245c02 // add bl, byte [rsp + 96] + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x48 // movzx ebx, byte [rsp + 72] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x58 // movzx ebx, byte [rsp + 88] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x68 // movzx ebx, byte [rsp + 104] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x78 // movzx ebx, byte [rsp + 120] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0x8841; BYTE $0x3e // mov byte [r14], dil + QUAD $0x0000008024b4b60f // movzx esi, byte [rsp + 128] + LONG $0x06e6c040 // shl sil, 6 + LONG $0x07e7c041 // shl r15b, 7 + WORD $0x0841; BYTE $0xf7 // or r15b, sil + LONG $0x01468841 // mov byte [r14 + 1], al + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xc000 // add al, al - LONG $0x80248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 128] - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + LONG $0x28244402 // add al, byte [rsp + 40] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] - WORD $0x8844; BYTE $0x18 // mov byte [rax], r11b - QUAD $0x00000110249c8b4c // mov r11, qword [rsp + 272] - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xc7 // or r15b, al - LONG $0x014b8841 // mov byte [r11 + 1], cl - WORD $0x0841; BYTE $0xf7 // or r15b, sil - LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] - WORD $0xc000 // add al, al - LONG $0x20244402 // add al, byte [rsp + 32] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x1c // movzx ecx, byte [rsp + 28] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xcb08 // or bl, cl - WORD $0xc308 // or bl, al - LONG $0x027b8845 // mov byte [r11 + 2], r15b - LONG $0x035b8841 // mov byte [r11 + 3], bl + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x027e8845 // mov byte [r14 + 2], r15b + LONG $0x034e8841 // mov byte [r14 + 3], cl LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 - LONG $0x04c38349 // add r11, 4 - QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + LONG $0x04c68349 // add r14, 4 + QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 JNE LBB2_89 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b024b48b4c // mov r14, qword [rsp + 176] + QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] LBB2_91: - LONG $0x05e6c149 // shl r14, 5 - WORD $0x394d; BYTE $0xd6 // cmp r14, r10 - JGE LBB2_157 + LONG $0x05e3c149 // shl r11, 5 + WORD $0x394d; BYTE $0xd3 // cmp r11, r10 + JGE LBB2_165 WORD $0x894d; BYTE $0xd0 // mov r8, r10 - WORD $0x294d; BYTE $0xf0 // sub r8, r14 - WORD $0xf749; BYTE $0xd6 // not r14 - WORD $0x014d; BYTE $0xd6 // add r14, r10 + WORD $0x294d; BYTE $0xd8 // sub r8, r11 + WORD $0xf749; BYTE $0xd3 // not r11 + WORD $0x014d; BYTE $0xd3 // add r11, r10 JNE LBB2_144 LBB2_93: @@ -11475,9 +11973,9 @@ LBB2_93: JMP LBB2_146 LBB2_94: - LONG $0x1f728d4d // lea r14, [r10 + 31] + LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 - LONG $0xf2490f4d // cmovns r14, r10 + LONG $0xda490f4d // cmovns r11, r10 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d @@ -11490,14 +11988,16 @@ LBB2_94: LBB2_96: LONG $0x022ef8c5 // vucomiss xmm0, dword [rdx] LONG $0x04528d48 // lea rdx, [rdx + 4] + WORD $0x9b0f; BYTE $0xd1 // setnp cl WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0xcb20 // and bl, cl WORD $0xdbf6 // neg bl LONG $0x07708d48 // lea rsi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf0490f48 // cmovns rsi, rax LONG $0x03fec148 // sar rsi, 3 - WORD $0x894d; BYTE $0xdf // mov r15, r11 - LONG $0x0cb60f45; BYTE $0x33 // movzx r9d, byte [r11 + rsi] + WORD $0x894d; BYTE $0xf7 // mov r15, r14 + LONG $0x0cb60f45; BYTE $0x36 // movzx r9d, byte [r14 + rsi] WORD $0x3044; BYTE $0xcb // xor bl, r9b QUAD $0x00000000f5048d44 // lea r8d, [8*rsi] WORD $0xc189 // mov ecx, eax @@ -11506,192 +12006,276 @@ LBB2_96: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xdf // and dil, bl WORD $0x3044; BYTE $0xcf // xor dil, r9b - LONG $0x333c8841 // mov byte [r11 + rsi], dil + LONG $0x363c8841 // mov byte [r14 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB2_96 - LONG $0x01c38349 // add r11, 1 + LONG $0x01c68349 // add r14, 1 LBB2_98: - LONG $0x05fec149 // sar r14, 5 + LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 JL LBB2_102 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000a824b4894c // mov qword [rsp + 168], r14 - QUAD $0x0000009824b4894c // mov qword [rsp + 152], r14 + QUAD $0x000000b8249c894c // mov qword [rsp + 184], r11 + QUAD $0x000000a8249c894c // mov qword [rsp + 168], r11 LBB2_100: - QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 + QUAD $0x0000011024b4894c // mov qword [rsp + 272], r14 LONG $0x022ef8c5 // vucomiss xmm0, dword [rdx] - QUAD $0x000000a02494940f // sete byte [rsp + 160] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x38244c88 // mov byte [rsp + 56], cl LONG $0x422ef8c5; BYTE $0x04 // vucomiss xmm0, dword [rdx + 4] - LONG $0xd0940f41 // sete r8b + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd5940f41 // sete r13b + WORD $0x2041; BYTE $0xc5 // and r13b, al LONG $0x422ef8c5; BYTE $0x08 // vucomiss xmm0, dword [rdx + 8] - LONG $0xd3940f41 // sete r11b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl LONG $0x422ef8c5; BYTE $0x0c // vucomiss xmm0, dword [rdx + 12] - LONG $0xd5940f41 // sete r13b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x40248c88; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 320], cl LONG $0x422ef8c5; BYTE $0x10 // vucomiss xmm0, dword [rdx + 16] - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl LONG $0x422ef8c5; BYTE $0x14 // vucomiss xmm0, dword [rdx + 20] - QUAD $0x000000902494940f // sete byte [rsp + 144] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd4940f41 // sete r12b + WORD $0x2041; BYTE $0xc4 // and r12b, al LONG $0x422ef8c5; BYTE $0x18 // vucomiss xmm0, dword [rdx + 24] - WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x80248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 128], cl LONG $0x422ef8c5; BYTE $0x1c // vucomiss xmm0, dword [rdx + 28] - LONG $0xd6940f41 // sete r14b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x1c244c88 // mov byte [rsp + 28], cl LONG $0x422ef8c5; BYTE $0x20 // vucomiss xmm0, dword [rdx + 32] - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x30244c88 // mov byte [rsp + 48], cl LONG $0x422ef8c5; BYTE $0x24 // vucomiss xmm0, dword [rdx + 36] - LONG $0xd6940f40 // sete sil + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x78244c88 // mov byte [rsp + 120], cl LONG $0x422ef8c5; BYTE $0x28 // vucomiss xmm0, dword [rdx + 40] - LONG $0xd7940f40 // sete dil + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x70244c88 // mov byte [rsp + 112], cl LONG $0x422ef8c5; BYTE $0x2c // vucomiss xmm0, dword [rdx + 44] - LONG $0xd1940f41 // sete r9b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0xc320 // and bl, al LONG $0x422ef8c5; BYTE $0x30 // vucomiss xmm0, dword [rdx + 48] - LONG $0xd2940f41 // sete r10b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x20248c88; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 288], cl LONG $0x422ef8c5; BYTE $0x34 // vucomiss xmm0, dword [rdx + 52] - LONG $0xd4940f41 // sete r12b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x60244c88 // mov byte [rsp + 96], cl LONG $0x422ef8c5; BYTE $0x38 // vucomiss xmm0, dword [rdx + 56] - LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x58244c88 // mov byte [rsp + 88], cl LONG $0x422ef8c5; BYTE $0x3c // vucomiss xmm0, dword [rdx + 60] + WORD $0x9b0f; BYTE $0xd0 // setnp al WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x50244c88 // mov byte [rsp + 80], cl LONG $0x422ef8c5; BYTE $0x40 // vucomiss xmm0, dword [rdx + 64] - QUAD $0x000000802494940f // sete byte [rsp + 128] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x68244c88 // mov byte [rsp + 104], cl LONG $0x422ef8c5; BYTE $0x44 // vucomiss xmm0, dword [rdx + 68] - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x48244c88 // mov byte [rsp + 72], cl LONG $0x422ef8c5; BYTE $0x48 // vucomiss xmm0, dword [rdx + 72] - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x40244c88 // mov byte [rsp + 64], cl LONG $0x422ef8c5; BYTE $0x4c // vucomiss xmm0, dword [rdx + 76] - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd6940f41 // sete r14b + WORD $0x2041; BYTE $0xc6 // and r14b, al LONG $0x422ef8c5; BYTE $0x50 // vucomiss xmm0, dword [rdx + 80] - QUAD $0x000000882494940f // sete byte [rsp + 136] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x98248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 152], cl LONG $0x422ef8c5; BYTE $0x54 // vucomiss xmm0, dword [rdx + 84] - LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x90248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 144], cl LONG $0x422ef8c5; BYTE $0x58 // vucomiss xmm0, dword [rdx + 88] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] - LONG $0x422ef8c5; BYTE $0x5c // vucomiss xmm0, dword [rdx + 92] + WORD $0x9b0f; BYTE $0xd0 // setnp al LONG $0xd7940f41 // sete r15b + WORD $0x2041; BYTE $0xc7 // and r15b, al + LONG $0x422ef8c5; BYTE $0x5c // vucomiss xmm0, dword [rdx + 92] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd0940f41 // sete r8b + WORD $0x2041; BYTE $0xc0 // and r8b, al LONG $0x422ef8c5; BYTE $0x60 // vucomiss xmm0, dword [rdx + 96] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x88248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 136], cl LONG $0x422ef8c5; BYTE $0x64 // vucomiss xmm0, dword [rdx + 100] - LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd3940f41 // sete r11b + WORD $0x2041; BYTE $0xc3 // and r11b, al LONG $0x422ef8c5; BYTE $0x68 // vucomiss xmm0, dword [rdx + 104] - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd2940f41 // sete r10b + WORD $0x2041; BYTE $0xc2 // and r10b, al LONG $0x422ef8c5; BYTE $0x6c // vucomiss xmm0, dword [rdx + 108] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd1940f41 // sete r9b + WORD $0x2041; BYTE $0xc1 // and r9b, al LONG $0x422ef8c5; BYTE $0x70 // vucomiss xmm0, dword [rdx + 112] - QUAD $0x000001402494940f // sete byte [rsp + 320] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xa0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 160], cl LONG $0x422ef8c5; BYTE $0x74 // vucomiss xmm0, dword [rdx + 116] - QUAD $0x000001202494940f // sete byte [rsp + 288] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xb0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 176], cl LONG $0x422ef8c5; BYTE $0x78 // vucomiss xmm0, dword [rdx + 120] - LONG $0x2454940f; BYTE $0x1c // sete byte [rsp + 28] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f40 // sete dil + WORD $0x2040; BYTE $0xc7 // and dil, al LONG $0x422ef8c5; BYTE $0x7c // vucomiss xmm0, dword [rdx + 124] - WORD $0x940f; BYTE $0xd3 // sete bl - WORD $0x0045; BYTE $0xc0 // add r8b, r8b - QUAD $0x000000a024840244 // add r8b, byte [rsp + 160] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e6c041 // shl r14b, 7 - WORD $0x0841; BYTE $0xc6 // or r14b, al - LONG $0x02e3c041 // shl r11b, 2 - WORD $0x0845; BYTE $0xc3 // or r11b, r8b - WORD $0x0040; BYTE $0xf6 // add sil, sil - LONG $0x24740240; BYTE $0x58 // add sil, byte [rsp + 88] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xdd // or r13b, r11b - QUAD $0x00000110249c8b4c // mov r11, qword [rsp + 272] - LONG $0x02e7c040 // shl dil, 2 - WORD $0x0840; BYTE $0xf7 // or dil, sil - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0844; BYTE $0xe8 // or al, r13b - WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x03e1c041 // shl r9b, 3 - WORD $0x0841; BYTE $0xf9 // or r9b, dil - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xca // or r10b, r9b + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd6940f40 // sete sil + WORD $0x2040; BYTE $0xc6 // and sil, al + WORD $0x0045; BYTE $0xed // add r13b, r13b + LONG $0x246c0244; BYTE $0x38 // add r13b, byte [rsp + 56] + WORD $0x8944; BYTE $0xe8 // mov eax, r13d LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - LONG $0x2474b60f; BYTE $0x60 // movzx esi, byte [rsp + 96] - LONG $0x06e6c040 // shl sil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf1 // or cl, sil - WORD $0x0841; BYTE $0xc6 // or r14b, al - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] - WORD $0xc000 // add al, al - LONG $0x80248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 128] - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0x8845; BYTE $0x33 // mov byte [r11], r14b - LONG $0x2474b60f; BYTE $0x38 // movzx esi, byte [rsp + 56] - LONG $0x06e6c040 // shl sil, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xf7 // or r15b, sil - LONG $0x014b8841 // mov byte [r11 + 1], cl - WORD $0x0841; BYTE $0xc7 // or r15b, al - LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] - WORD $0xc000 // add al, al - LONG $0x20244402 // add al, byte [rsp + 32] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + QUAD $0x00008024acb60f44; BYTE $0x00 // movzx r13d, byte [rsp + 128] + LONG $0x06e5c041 // shl r13b, 6 + WORD $0x0845; BYTE $0xe5 // or r13b, r12b + LONG $0x64b60f44; WORD $0x2024 // movzx r12d, byte [rsp + 32] + LONG $0x02e4c041 // shl r12b, 2 + WORD $0x0841; BYTE $0xc4 // or r12b, al + LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] + WORD $0xc900 // add cl, cl + LONG $0x30244c02 // add cl, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x1c // movzx eax, byte [rsp + 28] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0844; BYTE $0xe8 // or al, r13b + LONG $0x1c244488 // mov byte [rsp + 28], al + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0844; BYTE $0xe0 // or al, r12b + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xcb08 // or bl, cl + LONG $0x6cb60f44; WORD $0x2824 // movzx r13d, byte [rsp + 40] + LONG $0x04e5c041 // shl r13b, 4 + WORD $0x0841; BYTE $0xc5 // or r13b, al + QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + LONG $0x20248488; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 288], al + LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] + WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x1c // movzx ecx, byte [rsp + 28] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 + LONG $0x244cb60f; BYTE $0x48 // movzx ecx, byte [rsp + 72] + WORD $0xc900 // add cl, cl + LONG $0x68244c02 // add cl, byte [rsp + 104] + LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 WORD $0xcb08 // or bl, cl - WORD $0xc308 // or bl, al - LONG $0x027b8845 // mov byte [r11 + 2], r15b - LONG $0x035b8841 // mov byte [r11 + 3], bl + LONG $0x03e6c041 // shl r14b, 3 + WORD $0x0841; BYTE $0xde // or r14b, bl + QUAD $0x00000098248cb60f // movzx ecx, byte [rsp + 152] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0x0844; BYTE $0xf1 // or cl, r14b + QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] + LONG $0x64b60f44; WORD $0x1c24 // movzx r12d, byte [rsp + 28] + WORD $0x0845; BYTE $0xec // or r12b, r13b + QUAD $0x00000090249cb60f // movzx ebx, byte [rsp + 144] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e7c041 // shl r15b, 6 + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x2024840a; WORD $0x0001; BYTE $0x00 // or al, byte [rsp + 288] + LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xf8 // or r8b, r15b + WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0045; BYTE $0xdb // add r11b, r11b + QUAD $0x00000088249c0244 // add r11b, byte [rsp + 136] + LONG $0x02e2c041 // shl r10b, 2 + WORD $0x0845; BYTE $0xda // or r10b, r11b + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xd1 // or r9b, r10b + QUAD $0x000000a0248cb60f // movzx ecx, byte [rsp + 160] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0x0844; BYTE $0xc9 // or cl, r9b + WORD $0x8845; BYTE $0x26 // mov byte [r14], r12b + QUAD $0x000000b0249cb60f // movzx ebx, byte [rsp + 176] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e7c040 // shl dil, 6 + WORD $0x0840; BYTE $0xdf // or dil, bl + LONG $0x01468841 // mov byte [r14 + 1], al + LONG $0x07e6c040 // shl sil, 7 + WORD $0x0840; BYTE $0xfe // or sil, dil + WORD $0x0840; BYTE $0xce // or sil, cl + LONG $0x02468845 // mov byte [r14 + 2], r8b + LONG $0x03768841 // mov byte [r14 + 3], sil LONG $0x80c28148; WORD $0x0000; BYTE $0x00 // add rdx, 128 - LONG $0x04c38349 // add r11, 4 - QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 + LONG $0x04c68349 // add r14, 4 + QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 JNE LBB2_100 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000a824b48b4c // mov r14, qword [rsp + 168] + QUAD $0x000000b8249c8b4c // mov r11, qword [rsp + 184] LBB2_102: - LONG $0x05e6c149 // shl r14, 5 - WORD $0x394d; BYTE $0xd6 // cmp r14, r10 - JGE LBB2_157 + LONG $0x05e3c149 // shl r11, 5 + WORD $0x394d; BYTE $0xd3 // cmp r11, r10 + JGE LBB2_165 WORD $0x894d; BYTE $0xd0 // mov r8, r10 - WORD $0x294d; BYTE $0xf0 // sub r8, r14 - WORD $0xf749; BYTE $0xd6 // not r14 - WORD $0x014d; BYTE $0xd6 // add r14, r10 + WORD $0x294d; BYTE $0xd8 // sub r8, r11 + WORD $0xf749; BYTE $0xd3 // not r11 + WORD $0x014d; BYTE $0xd3 // add r11, r10 JNE LBB2_148 WORD $0xff31 // xor edi, edi JMP LBB2_150 LBB2_105: - WORD $0x8a44; BYTE $0x36 // mov r14b, byte [rsi] + WORD $0x8a44; BYTE $0x1e // mov r11b, byte [rsi] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 LONG $0xfa490f4d // cmovns r15, r10 @@ -11704,7 +12288,7 @@ LBB2_105: WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d LBB2_107: - WORD $0x3a44; BYTE $0x32 // cmp r14b, byte [rdx] + WORD $0x3a44; BYTE $0x1a // cmp r11b, byte [rdx] LONG $0x01528d48 // lea rdx, [rdx + 1] WORD $0x940f; BYTE $0xd3 // sete bl WORD $0xdbf6 // neg bl @@ -11712,8 +12296,8 @@ LBB2_107: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf0490f48 // cmovns rsi, rax LONG $0x03fec148 // sar rsi, 3 - WORD $0x894d; BYTE $0xdc // mov r12, r11 - LONG $0x0cb60f45; BYTE $0x33 // movzx r9d, byte [r11 + rsi] + WORD $0x894d; BYTE $0xf4 // mov r12, r14 + LONG $0x0cb60f45; BYTE $0x36 // movzx r9d, byte [r14 + rsi] WORD $0x3044; BYTE $0xcb // xor bl, r9b QUAD $0x00000000f5048d44 // lea r8d, [8*rsi] WORD $0xc189 // mov ecx, eax @@ -11722,189 +12306,212 @@ LBB2_107: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xdf // and dil, bl WORD $0x3044; BYTE $0xcf // xor dil, r9b - LONG $0x333c8841 // mov byte [r11 + rsi], dil + LONG $0x363c8841 // mov byte [r14 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB2_107 - LONG $0x01c38349 // add r11, 1 + LONG $0x01c68349 // add r14, 1 LBB2_109: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 JL LBB2_132 LONG $0x20ff8349 // cmp r15, 32 - LONG $0x24748944; BYTE $0x1c // mov dword [rsp + 28], r14d + LONG $0x245c8944; BYTE $0x1c // mov dword [rsp + 28], r11d QUAD $0x000001182494894c // mov qword [rsp + 280], r10 QUAD $0x0000018824bc894c // mov qword [rsp + 392], r15 JB LBB2_113 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xd0 // add rax, rdx - WORD $0x3949; BYTE $0xc3 // cmp r11, rax - JAE LBB2_168 - LONG $0xbb048d4b // lea rax, [r11 + 4*r15] + WORD $0x3949; BYTE $0xc6 // cmp r14, rax + JAE LBB2_169 + LONG $0xbe048d4b // lea rax, [r14 + 4*r15] WORD $0x3948; BYTE $0xc2 // cmp rdx, rax - JAE LBB2_168 + JAE LBB2_169 LBB2_113: WORD $0xc031 // xor eax, eax QUAD $0x0000018024848948 // mov qword [rsp + 384], rax WORD $0x8949; BYTE $0xd4 // mov r12, rdx - QUAD $0x00000178249c894c // mov qword [rsp + 376], r11 + QUAD $0x0000017824b4894c // mov qword [rsp + 376], r14 LBB2_114: QUAD $0x0000018024bc2b4c // sub r15, qword [rsp + 384] - QUAD $0x0000009824bc894c // mov qword [rsp + 152], r15 + QUAD $0x000000a024bc894c // mov qword [rsp + 160], r15 LBB2_115: WORD $0x894c; BYTE $0xe1 // mov rcx, r12 - LONG $0x24343a45 // cmp r14b, byte [r12] + LONG $0x241c3a45 // cmp r11b, byte [r12] QUAD $0x000001402494940f // sete byte [rsp + 320] - LONG $0x24743a45; BYTE $0x01 // cmp r14b, byte [r12 + 1] - LONG $0xd2940f41 // sete r10b - LONG $0x24743a45; BYTE $0x02 // cmp r14b, byte [r12 + 2] - WORD $0x940f; BYTE $0xd3 // sete bl - LONG $0x24743a45; BYTE $0x03 // cmp r14b, byte [r12 + 3] + LONG $0x245c3a45; BYTE $0x01 // cmp r11b, byte [r12 + 1] + LONG $0xd1940f41 // sete r9b + LONG $0x245c3a45; BYTE $0x02 // cmp r11b, byte [r12 + 2] + LONG $0xd3940f41 // sete r11b + LONG $0x1c24448b // mov eax, dword [rsp + 28] + LONG $0x24443a41; BYTE $0x03 // cmp al, byte [r12 + 3] LONG $0xd5940f41 // sete r13b - LONG $0x24743a45; BYTE $0x04 // cmp r14b, byte [r12 + 4] - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] - LONG $0x24743a45; BYTE $0x05 // cmp r14b, byte [r12 + 5] - LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] - LONG $0x24743a45; BYTE $0x06 // cmp r14b, byte [r12 + 6] - WORD $0x940f; BYTE $0xd0 // sete al - LONG $0x24743a45; BYTE $0x07 // cmp r14b, byte [r12 + 7] + LONG $0x1c24448b // mov eax, dword [rsp + 28] + LONG $0x24443a41; BYTE $0x04 // cmp al, byte [r12 + 4] + LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + LONG $0x1c24448b // mov eax, dword [rsp + 28] + LONG $0x24443a41; BYTE $0x05 // cmp al, byte [r12 + 5] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x1c24448b // mov eax, dword [rsp + 28] + LONG $0x24443a41; BYTE $0x06 // cmp al, byte [r12 + 6] + WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0x1c24448b // mov eax, dword [rsp + 28] + LONG $0x24443a41; BYTE $0x07 // cmp al, byte [r12 + 7] LONG $0xd4940f41 // sete r12b - LONG $0x08713a44 // cmp r14b, byte [rcx + 8] - QUAD $0x000000a02494940f // sete byte [rsp + 160] - LONG $0x09713a44 // cmp r14b, byte [rcx + 9] + LONG $0x1c24448b // mov eax, dword [rsp + 28] + WORD $0x413a; BYTE $0x08 // cmp al, byte [rcx + 8] + QUAD $0x000000882494940f // sete byte [rsp + 136] + LONG $0x1c24448b // mov eax, dword [rsp + 28] + WORD $0x413a; BYTE $0x09 // cmp al, byte [rcx + 9] LONG $0xd6940f40 // sete sil - LONG $0x0a713a44 // cmp r14b, byte [rcx + 10] + LONG $0x1c24448b // mov eax, dword [rsp + 28] + WORD $0x413a; BYTE $0x0a // cmp al, byte [rcx + 10] LONG $0xd7940f40 // sete dil - LONG $0x0b713a44 // cmp r14b, byte [rcx + 11] - LONG $0xd1940f41 // sete r9b - LONG $0x0c713a44 // cmp r14b, byte [rcx + 12] - LONG $0xd3940f41 // sete r11b - LONG $0x0d713a44 // cmp r14b, byte [rcx + 13] - LONG $0xd7940f41 // sete r15b - LONG $0x0e713a44 // cmp r14b, byte [rcx + 14] - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] - LONG $0x0f713a44 // cmp r14b, byte [rcx + 15] + LONG $0x1c24448b // mov eax, dword [rsp + 28] + WORD $0x413a; BYTE $0x0b // cmp al, byte [rcx + 11] LONG $0xd0940f41 // sete r8b - LONG $0x10713a44 // cmp r14b, byte [rcx + 16] + LONG $0x1c24448b // mov eax, dword [rsp + 28] + WORD $0x413a; BYTE $0x0c // cmp al, byte [rcx + 12] + LONG $0xd2940f41 // sete r10b + LONG $0x1c24448b // mov eax, dword [rsp + 28] + WORD $0x413a; BYTE $0x0d // cmp al, byte [rcx + 13] + LONG $0xd7940f41 // sete r15b + LONG $0x1c24448b // mov eax, dword [rsp + 28] + WORD $0x413a; BYTE $0x0e // cmp al, byte [rcx + 14] + QUAD $0x000000902494940f // sete byte [rsp + 144] + LONG $0x1c24448b // mov eax, dword [rsp + 28] + WORD $0x413a; BYTE $0x0f // cmp al, byte [rcx + 15] + WORD $0x940f; BYTE $0xd0 // sete al + LONG $0x1c24548b // mov edx, dword [rsp + 28] + WORD $0x513a; BYTE $0x10 // cmp dl, byte [rcx + 16] QUAD $0x000001202494940f // sete byte [rsp + 288] - LONG $0x11713a44 // cmp r14b, byte [rcx + 17] + LONG $0x1c24548b // mov edx, dword [rsp + 28] + WORD $0x513a; BYTE $0x11 // cmp dl, byte [rcx + 17] + LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] + LONG $0x1c24548b // mov edx, dword [rsp + 28] + WORD $0x513a; BYTE $0x12 // cmp dl, byte [rcx + 18] + QUAD $0x000000982494940f // sete byte [rsp + 152] + LONG $0x1c24548b // mov edx, dword [rsp + 28] + WORD $0x513a; BYTE $0x13 // cmp dl, byte [rcx + 19] + LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + LONG $0x1c24548b // mov edx, dword [rsp + 28] + WORD $0x513a; BYTE $0x14 // cmp dl, byte [rcx + 20] + LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + LONG $0x1c24548b // mov edx, dword [rsp + 28] + WORD $0x513a; BYTE $0x15 // cmp dl, byte [rcx + 21] + LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + LONG $0x1c24548b // mov edx, dword [rsp + 28] + WORD $0x513a; BYTE $0x16 // cmp dl, byte [rcx + 22] LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] - LONG $0x12713a44 // cmp r14b, byte [rcx + 18] - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] - LONG $0x13713a44 // cmp r14b, byte [rcx + 19] - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] - LONG $0x14713a44 // cmp r14b, byte [rcx + 20] - QUAD $0x000000802494940f // sete byte [rsp + 128] - LONG $0x15713a44 // cmp r14b, byte [rcx + 21] - QUAD $0x000000882494940f // sete byte [rsp + 136] - LONG $0x16713a44 // cmp r14b, byte [rcx + 22] - QUAD $0x000000902494940f // sete byte [rsp + 144] - LONG $0x17713a44 // cmp r14b, byte [rcx + 23] + LONG $0x1c24548b // mov edx, dword [rsp + 28] + WORD $0x513a; BYTE $0x17 // cmp dl, byte [rcx + 23] LONG $0xd6940f41 // sete r14b LONG $0x1c24548b // mov edx, dword [rsp + 28] WORD $0x513a; BYTE $0x18 // cmp dl, byte [rcx + 24] QUAD $0x000001102494940f // sete byte [rsp + 272] LONG $0x1c24548b // mov edx, dword [rsp + 28] WORD $0x513a; BYTE $0x19 // cmp dl, byte [rcx + 25] - LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] LONG $0x1c24548b // mov edx, dword [rsp + 28] WORD $0x513a; BYTE $0x1a // cmp dl, byte [rcx + 26] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] LONG $0x1c24548b // mov edx, dword [rsp + 28] WORD $0x513a; BYTE $0x1b // cmp dl, byte [rcx + 27] - LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] LONG $0x1c24548b // mov edx, dword [rsp + 28] WORD $0x513a; BYTE $0x1c // cmp dl, byte [rcx + 28] - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + QUAD $0x000000802494940f // sete byte [rsp + 128] LONG $0x1c24548b // mov edx, dword [rsp + 28] WORD $0x513a; BYTE $0x1d // cmp dl, byte [rcx + 29] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] LONG $0x1c24548b // mov edx, dword [rsp + 28] WORD $0x513a; BYTE $0x1e // cmp dl, byte [rcx + 30] LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] LONG $0x1c24548b // mov edx, dword [rsp + 28] WORD $0x513a; BYTE $0x1f // cmp dl, byte [rcx + 31] WORD $0x940f; BYTE $0xd2 // sete dl - WORD $0x0045; BYTE $0xd2 // add r10b, r10b - QUAD $0x0000014024940244 // add r10b, byte [rsp + 320] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0x0045; BYTE $0xc9 // add r9b, r9b + QUAD $0x00000140248c0244 // add r9b, byte [rsp + 320] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e4c041 // shl r12b, 7 - WORD $0x0841; BYTE $0xc4 // or r12b, al - WORD $0xe3c0; BYTE $0x02 // shl bl, 2 - WORD $0x0844; BYTE $0xd3 // or bl, r10b + WORD $0x0841; BYTE $0xdc // or r12b, bl + LONG $0x02e3c041 // shl r11b, 2 + WORD $0x0845; BYTE $0xcb // or r11b, r9b WORD $0x0040; BYTE $0xf6 // add sil, sil - QUAD $0x000000a024b40240 // add sil, byte [rsp + 160] + QUAD $0x0000008824b40240 // add sil, byte [rsp + 136] LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0845; BYTE $0xdd // or r13b, r11b + LONG $0x245c8b44; BYTE $0x1c // mov r11d, dword [rsp + 28] LONG $0x02e7c040 // shl dil, 2 WORD $0x0840; BYTE $0xf7 // or dil, sil - LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + LONG $0x245cb60f; BYTE $0x30 // movzx ebx, byte [rsp + 48] WORD $0xe3c0; BYTE $0x04 // shl bl, 4 WORD $0x0844; BYTE $0xeb // or bl, r13b WORD $0xde89 // mov esi, ebx - LONG $0x03e1c041 // shl r9b, 3 - WORD $0x0841; BYTE $0xf9 // or r9b, dil - LONG $0x245cb60f; BYTE $0x60 // movzx ebx, byte [rsp + 96] + LONG $0x03e0c041 // shl r8b, 3 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + LONG $0x245cb60f; BYTE $0x28 // movzx ebx, byte [rsp + 40] WORD $0xe3c0; BYTE $0x05 // shl bl, 5 WORD $0x0840; BYTE $0xf3 // or bl, sil - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xcb // or r11b, r9b + LONG $0x04e2c041 // shl r10b, 4 + WORD $0x0845; BYTE $0xc2 // or r10b, r8b LONG $0x05e7c041 // shl r15b, 5 - WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x2474b60f; BYTE $0x58 // movzx esi, byte [rsp + 88] + WORD $0x0845; BYTE $0xd7 // or r15b, r10b + QUAD $0x0000009024b4b60f // movzx esi, byte [rsp + 144] LONG $0x06e6c040 // shl sil, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xf0 // or r8b, sil + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0840; BYTE $0xf0 // or al, sil WORD $0x0841; BYTE $0xdc // or r12b, bl - WORD $0x0845; BYTE $0xf8 // or r8b, r15b - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] - WORD $0xc000 // add al, al - LONG $0x20248402; WORD $0x0001; BYTE $0x00 // add al, byte [rsp + 288] - LONG $0x245cb60f; BYTE $0x68 // movzx ebx, byte [rsp + 104] + WORD $0x0844; BYTE $0xf8 // or al, r15b + LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + WORD $0xdb00 // add bl, bl + LONG $0x20249c02; WORD $0x0001; BYTE $0x00 // add bl, byte [rsp + 288] + WORD $0xde89 // mov esi, ebx + QUAD $0x00000098249cb60f // movzx ebx, byte [rsp + 152] WORD $0xe3c0; BYTE $0x02 // shl bl, 2 - WORD $0xc308 // or bl, al + WORD $0x0840; BYTE $0xf3 // or bl, sil WORD $0xde89 // mov esi, ebx - LONG $0x245cb60f; BYTE $0x70 // movzx ebx, byte [rsp + 112] + LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x03 // shl bl, 3 WORD $0x0840; BYTE $0xf3 // or bl, sil WORD $0xde89 // mov esi, ebx - QUAD $0x00000080249cb60f // movzx ebx, byte [rsp + 128] + LONG $0x245cb60f; BYTE $0x48 // movzx ebx, byte [rsp + 72] WORD $0xe3c0; BYTE $0x04 // shl bl, 4 WORD $0x0840; BYTE $0xf3 // or bl, sil WORD $0xde89 // mov esi, ebx - QUAD $0x00000088249cb60f // movzx ebx, byte [rsp + 136] + LONG $0x245cb60f; BYTE $0x58 // movzx ebx, byte [rsp + 88] WORD $0xe3c0; BYTE $0x05 // shl bl, 5 WORD $0x0840; BYTE $0xf3 // or bl, sil QUAD $0x0000017824b48b48 // mov rsi, qword [rsp + 376] WORD $0x8844; BYTE $0x26 // mov byte [rsi], r12b - QUAD $0x0000009024bcb60f // movzx edi, byte [rsp + 144] + LONG $0x247cb60f; BYTE $0x78 // movzx edi, byte [rsp + 120] LONG $0x06e7c040 // shl dil, 6 LONG $0x07e6c041 // shl r14b, 7 WORD $0x0841; BYTE $0xfe // or r14b, dil - LONG $0x01468844 // mov byte [rsi + 1], r8b + WORD $0x4688; BYTE $0x01 // mov byte [rsi + 1], al WORD $0x0841; BYTE $0xde // or r14b, bl - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] WORD $0xc000 // add al, al LONG $0x10248402; WORD $0x0001; BYTE $0x00 // add al, byte [rsp + 272] WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xd808 // or al, bl LONG $0x245cb60f; BYTE $0x20 // movzx ebx, byte [rsp + 32] @@ -11913,12 +12520,11 @@ LBB2_115: WORD $0xda08 // or dl, bl WORD $0xc208 // or dl, al LONG $0x02768844 // mov byte [rsi + 2], r14b - LONG $0x24748b44; BYTE $0x1c // mov r14d, dword [rsp + 28] WORD $0x5688; BYTE $0x03 // mov byte [rsi + 3], dl LONG $0x20618d4c // lea r12, [rcx + 32] LONG $0x04c68348 // add rsi, 4 QUAD $0x0000017824b48948 // mov qword [rsp + 376], rsi - QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 + QUAD $0x000000a024848348; BYTE $0xff // add qword [rsp + 160], -1 JNE LBB2_115 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] QUAD $0x0000018824bc8b4c // mov r15, qword [rsp + 392] @@ -11926,9 +12532,9 @@ LBB2_115: LBB2_117: WORD $0x8b44; BYTE $0x2e // mov r13d, dword [rsi] - LONG $0x1f728d4d // lea r14, [r10 + 31] + LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 - LONG $0xf2490f4d // cmovns r14, r10 + LONG $0xda490f4d // cmovns r11, r10 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d @@ -11946,8 +12552,8 @@ LBB2_119: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf0490f48 // cmovns rsi, rax LONG $0x03fec148 // sar rsi, 3 - WORD $0x894d; BYTE $0xd9 // mov r9, r11 - LONG $0x04b60f45; BYTE $0x33 // movzx r8d, byte [r11 + rsi] + WORD $0x894d; BYTE $0xf1 // mov r9, r14 + LONG $0x04b60f45; BYTE $0x36 // movzx r8d, byte [r14 + rsi] WORD $0x3044; BYTE $0xc3 // xor bl, r8b LONG $0x00f53c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rsi] WORD $0xc189 // mov ecx, eax @@ -11956,40 +12562,40 @@ LBB2_119: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xdf // and dil, bl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x333c8841 // mov byte [r11 + rsi], dil + LONG $0x363c8841 // mov byte [r14 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB2_119 - LONG $0x01c38349 // add r11, 1 + LONG $0x01c68349 // add r14, 1 LBB2_121: - LONG $0x05fec149 // sar r14, 5 + LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 JL LBB2_125 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b024b4894c // mov qword [rsp + 176], r14 - QUAD $0x000000a824b4894c // mov qword [rsp + 168], r14 + QUAD $0x000000a8249c894c // mov qword [rsp + 168], r11 + QUAD $0x000000b0249c894c // mov qword [rsp + 176], r11 LBB2_123: - QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 + QUAD $0x0000011024b4894c // mov qword [rsp + 272], r14 WORD $0x3b44; BYTE $0x2a // cmp r13d, dword [rdx] - QUAD $0x000000982494940f // sete byte [rsp + 152] + QUAD $0x000000a02494940f // sete byte [rsp + 160] LONG $0x046a3b44 // cmp r13d, dword [rdx + 4] - LONG $0xd7940f40 // sete dil + LONG $0xd2940f41 // sete r10b LONG $0x086a3b44 // cmp r13d, dword [rdx + 8] LONG $0xd6940f41 // sete r14b LONG $0x0c6a3b44 // cmp r13d, dword [rdx + 12] - QUAD $0x000000a02494940f // sete byte [rsp + 160] + QUAD $0x000000882494940f // sete byte [rsp + 136] LONG $0x106a3b44 // cmp r13d, dword [rdx + 16] - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] LONG $0x146a3b44 // cmp r13d, dword [rdx + 20] - QUAD $0x000000902494940f // sete byte [rsp + 144] + LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] LONG $0x186a3b44 // cmp r13d, dword [rdx + 24] - WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x940f; BYTE $0xd3 // sete bl LONG $0x1c6a3b44 // cmp r13d, dword [rdx + 28] - LONG $0xd3940f41 // sete r11b + LONG $0xd7940f40 // sete dil LONG $0x206a3b44 // cmp r13d, dword [rdx + 32] - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] + QUAD $0x000000902494940f // sete byte [rsp + 144] LONG $0x246a3b44 // cmp r13d, dword [rdx + 36] LONG $0xd6940f40 // sete sil LONG $0x286a3b44 // cmp r13d, dword [rdx + 40] @@ -11997,37 +12603,37 @@ LBB2_123: LONG $0x2c6a3b44 // cmp r13d, dword [rdx + 44] LONG $0xd1940f41 // sete r9b LONG $0x306a3b44 // cmp r13d, dword [rdx + 48] - LONG $0xd2940f41 // sete r10b + LONG $0xd3940f41 // sete r11b LONG $0x346a3b44 // cmp r13d, dword [rdx + 52] LONG $0xd4940f41 // sete r12b LONG $0x386a3b44 // cmp r13d, dword [rdx + 56] - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + QUAD $0x000000982494940f // sete byte [rsp + 152] LONG $0x3c6a3b44 // cmp r13d, dword [rdx + 60] - WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x940f; BYTE $0xd0 // sete al LONG $0x406a3b44 // cmp r13d, dword [rdx + 64] - QUAD $0x000000802494940f // sete byte [rsp + 128] - LONG $0x446a3b44 // cmp r13d, dword [rdx + 68] LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + LONG $0x446a3b44 // cmp r13d, dword [rdx + 68] + LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] LONG $0x486a3b44 // cmp r13d, dword [rdx + 72] - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] + LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] LONG $0x4c6a3b44 // cmp r13d, dword [rdx + 76] - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] LONG $0x506a3b44 // cmp r13d, dword [rdx + 80] - QUAD $0x000000882494940f // sete byte [rsp + 136] + LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] LONG $0x546a3b44 // cmp r13d, dword [rdx + 84] - LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] LONG $0x586a3b44 // cmp r13d, dword [rdx + 88] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + QUAD $0x000000802494940f // sete byte [rsp + 128] LONG $0x5c6a3b44 // cmp r13d, dword [rdx + 92] LONG $0xd7940f41 // sete r15b LONG $0x606a3b44 // cmp r13d, dword [rdx + 96] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] LONG $0x646a3b44 // cmp r13d, dword [rdx + 100] - LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] LONG $0x686a3b44 // cmp r13d, dword [rdx + 104] - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] LONG $0x6c6a3b44 // cmp r13d, dword [rdx + 108] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] LONG $0x706a3b44 // cmp r13d, dword [rdx + 112] QUAD $0x000001402494940f // sete byte [rsp + 320] LONG $0x746a3b44 // cmp r13d, dword [rdx + 116] @@ -12035,125 +12641,123 @@ LBB2_123: LONG $0x786a3b44 // cmp r13d, dword [rdx + 120] LONG $0x2454940f; BYTE $0x1c // sete byte [rsp + 28] LONG $0x7c6a3b44 // cmp r13d, dword [rdx + 124] - WORD $0x940f; BYTE $0xd3 // sete bl - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009824bc0240 // add dil, byte [rsp + 152] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e3c041 // shl r11b, 7 - WORD $0x0841; BYTE $0xc3 // or r11b, al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000a024940244 // add r10b, byte [rsp + 160] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0840; BYTE $0xdf // or dil, bl LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil + WORD $0x0845; BYTE $0xd6 // or r14b, r10b WORD $0x0040; BYTE $0xf6 // add sil, sil - LONG $0x24740240; BYTE $0x50 // add sil, byte [rsp + 80] - QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b - WORD $0xc789 // mov edi, eax + QUAD $0x0000009024b40240 // add sil, byte [rsp + 144] + QUAD $0x00000088249cb60f // movzx ebx, byte [rsp + 136] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0844; BYTE $0xf3 // or bl, r14b + WORD $0x8941; BYTE $0xda // mov r10d, ebx + QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] LONG $0x02e0c041 // shl r8b, 2 WORD $0x0841; BYTE $0xf0 // or r8b, sil - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf8 // or al, dil - WORD $0xc789 // mov edi, eax + LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xd3 // or bl, r10b + WORD $0xde89 // mov esi, ebx LONG $0x03e1c041 // shl r9b, 3 WORD $0x0845; BYTE $0xc1 // or r9b, r8b - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf8 // or al, dil - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xca // or r10b, r9b + LONG $0x245cb60f; BYTE $0x70 // movzx ebx, byte [rsp + 112] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xf3 // or bl, sil + LONG $0x04e3c041 // shl r11b, 4 + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - LONG $0x2474b60f; BYTE $0x58 // movzx esi, byte [rsp + 88] + WORD $0x0845; BYTE $0xdc // or r12b, r11b + QUAD $0x0000009824b4b60f // movzx esi, byte [rsp + 152] LONG $0x06e6c040 // shl sil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf1 // or cl, sil - WORD $0x0841; BYTE $0xc3 // or r11b, al - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] - WORD $0xc000 // add al, al - LONG $0x80248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 128] - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] - WORD $0x8844; BYTE $0x18 // mov byte [rax], r11b - QUAD $0x00000110249c8b4c // mov r11, qword [rsp + 272] - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0x0840; BYTE $0xdf // or dil, bl + WORD $0x0844; BYTE $0xe0 // or al, r12b + LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] + WORD $0xdb00 // add bl, bl + LONG $0x60245c02 // add bl, byte [rsp + 96] + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x48 // movzx ebx, byte [rsp + 72] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x58 // movzx ebx, byte [rsp + 88] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x68 // movzx ebx, byte [rsp + 104] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0xde89 // mov esi, ebx + LONG $0x245cb60f; BYTE $0x78 // movzx ebx, byte [rsp + 120] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0x8841; BYTE $0x3e // mov byte [r14], dil + QUAD $0x0000008024b4b60f // movzx esi, byte [rsp + 128] + LONG $0x06e6c040 // shl sil, 6 LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xc7 // or r15b, al - LONG $0x014b8841 // mov byte [r11 + 1], cl WORD $0x0841; BYTE $0xf7 // or r15b, sil - LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + LONG $0x01468841 // mov byte [r14 + 1], al + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xc000 // add al, al - LONG $0x20244402 // add al, byte [rsp + 32] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + LONG $0x28244402 // add al, byte [rsp + 40] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x1c // movzx ecx, byte [rsp + 28] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xcb08 // or bl, cl - WORD $0xc308 // or bl, al - LONG $0x027b8845 // mov byte [r11 + 2], r15b - LONG $0x035b8841 // mov byte [r11 + 3], bl + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x027e8845 // mov byte [r14 + 2], r15b + LONG $0x034e8841 // mov byte [r14 + 3], cl LONG $0x80c28148; WORD $0x0000; BYTE $0x00 // add rdx, 128 - LONG $0x04c38349 // add r11, 4 - QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + LONG $0x04c68349 // add r14, 4 + QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 JNE LBB2_123 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b024b48b4c // mov r14, qword [rsp + 176] + QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] LBB2_125: - LONG $0x05e6c149 // shl r14, 5 - WORD $0x394d; BYTE $0xd6 // cmp r14, r10 - JGE LBB2_157 + LONG $0x05e3c149 // shl r11, 5 + WORD $0x394d; BYTE $0xd3 // cmp r11, r10 + JGE LBB2_165 WORD $0x894d; BYTE $0xd0 // mov r8, r10 - WORD $0x294d; BYTE $0xf0 // sub r8, r14 - WORD $0xf749; BYTE $0xd6 // not r14 - WORD $0x014d; BYTE $0xd6 // add r14, r10 - JNE LBB2_152 + WORD $0x294d; BYTE $0xd8 // sub r8, r11 + WORD $0xf749; BYTE $0xd3 // not r11 + WORD $0x014d; BYTE $0xd3 // add r11, r10 + JNE LBB2_153 LBB2_127: WORD $0xff31 // xor edi, edi - JMP LBB2_154 + JMP LBB2_155 LBB2_128: - QUAD $0x00000178249c894c // mov qword [rsp + 376], r11 + QUAD $0x0000017824b4894c // mov qword [rsp + 376], r14 WORD $0x8949; BYTE $0xd4 // mov r12, rdx LBB2_129: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB2_157 + JGE LBB2_165 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 @@ -12162,10 +12766,10 @@ LBB2_129: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0xf631 // xor esi, esi - QUAD $0x00000178249c8b4c // mov r11, qword [rsp + 376] + QUAD $0x0000017824b48b4c // mov r14, qword [rsp + 376] LBB2_159: - LONG $0x34343a45 // cmp r14b, byte [r12 + rsi] + LONG $0x341c3a45 // cmp r11b, byte [r12 + rsi] WORD $0x940f; BYTE $0xd3 // sete bl WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xf7 // mov rdi, rsi @@ -12174,12 +12778,12 @@ LBB2_159: WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b2 // mov dl, 1 WORD $0xe2d2 // shl dl, cl - LONG $0x0cb60f45; BYTE $0x3b // movzx r9d, byte [r11 + rdi] + LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xda20 // and dl, bl WORD $0x3044; BYTE $0xca // xor dl, r9b - LONG $0x3b148841 // mov byte [r11 + rdi], dl - LONG $0x34743a45; BYTE $0x01 // cmp r14b, byte [r12 + rsi + 1] + LONG $0x3e148841 // mov byte [r14 + rdi], dl + LONG $0x345c3a45; BYTE $0x01 // cmp r11b, byte [r12 + rsi + 1] LONG $0x02768d48 // lea rsi, [rsi + 2] WORD $0x940f; BYTE $0xd3 // sete bl WORD $0xdbf6 // neg bl @@ -12189,19 +12793,19 @@ LBB2_159: WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0xd030 // xor al, dl - LONG $0x3b048841 // mov byte [r11 + rdi], al + LONG $0x3e048841 // mov byte [r14 + rdi], al WORD $0x3949; BYTE $0xf2 // cmp r10, rsi JNE LBB2_159 JMP LBB2_162 LBB2_132: - QUAD $0x00000178249c894c // mov qword [rsp + 376], r11 + QUAD $0x0000017824b4894c // mov qword [rsp + 376], r14 WORD $0x8949; BYTE $0xd4 // mov r12, rdx LBB2_133: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB2_157 + JGE LBB2_165 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 @@ -12213,46 +12817,50 @@ LBB2_135: JMP LBB2_163 LBB2_136: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 WORD $0xff31 // xor edi, edi LBB2_137: LONG $0x022ef9c5 // vucomisd xmm0, qword [rdx] + WORD $0x9b0f; BYTE $0xd1 // setnp cl WORD $0x940f; BYTE $0xd0 // sete al + WORD $0xc820 // and al, cl WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xfe // mov rsi, rdi LONG $0x03eec148 // shr rsi, 3 - WORD $0x894d; BYTE $0xde // mov r14, r11 - LONG $0x0cb60f45; BYTE $0x33 // movzx r9d, byte [r11 + rsi] - WORD $0x3044; BYTE $0xc8 // xor al, r9b + WORD $0x894d; BYTE $0xf7 // mov r15, r14 + LONG $0x14b60f45; BYTE $0x36 // movzx r10d, byte [r14 + rsi] WORD $0xf989 // mov ecx, edi WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b3 // mov bl, 1 - WORD $0xe3d2 // shl bl, cl - WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x331c8841 // mov byte [r11 + rsi], bl + WORD $0xb341; BYTE $0x01 // mov r11b, 1 + WORD $0xd241; BYTE $0xe3 // shl r11b, cl + WORD $0x3044; BYTE $0xd0 // xor al, r10b + WORD $0x2041; BYTE $0xc3 // and r11b, al + WORD $0x3045; BYTE $0xd3 // xor r11b, r10b + LONG $0x361c8845 // mov byte [r14 + rsi], r11b LONG $0x02c78348 // add rdi, 2 LONG $0x422ef9c5; BYTE $0x08 // vucomisd xmm0, qword [rdx + 8] LONG $0x10528d48 // lea rdx, [rdx + 16] - LONG $0xd1940f41 // sete r9b - WORD $0xf641; BYTE $0xd9 // neg r9b - WORD $0x3041; BYTE $0xd9 // xor r9b, bl + LONG $0xd29b0f41 // setnp r10b + WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x2044; BYTE $0xd0 // and al, r10b + WORD $0xd8f6 // neg al + WORD $0x3044; BYTE $0xd8 // xor al, r11b WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0x2044; BYTE $0xc8 // and al, r9b - WORD $0xd830 // xor al, bl - LONG $0x33048841 // mov byte [r11 + rsi], al - WORD $0x3949; BYTE $0xfa // cmp r10, rdi + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xdb // xor bl, r11b + LONG $0x361c8841 // mov byte [r14 + rsi], bl + WORD $0x3949; BYTE $0xf9 // cmp r9, rdi JNE LBB2_137 LBB2_138: LONG $0x01c0f641 // test r8b, 1 - JE LBB2_157 + JE LBB2_165 LONG $0x022ef9c5 // vucomisd xmm0, qword [rdx] - JMP LBB2_156 + JMP LBB2_152 LBB2_140: WORD $0x894d; BYTE $0xc2 // mov r10, r8 @@ -12265,8 +12873,8 @@ LBB2_141: WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xfe // mov rsi, rdi LONG $0x03eec148 // shr rsi, 3 - WORD $0x894d; BYTE $0xde // mov r14, r11 - LONG $0x0cb60f45; BYTE $0x33 // movzx r9d, byte [r11 + rsi] + WORD $0x894d; BYTE $0xf3 // mov r11, r14 + LONG $0x0cb60f45; BYTE $0x36 // movzx r9d, byte [r14 + rsi] WORD $0xf989 // mov ecx, edi WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 @@ -12274,7 +12882,7 @@ LBB2_141: WORD $0x3044; BYTE $0xc8 // xor al, r9b WORD $0xc320 // and bl, al WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x331c8841 // mov byte [r11 + rsi], bl + LONG $0x361c8841 // mov byte [r14 + rsi], bl LONG $0x02c78348 // add rdi, 2 LONG $0x6a3b4466; BYTE $0x02 // cmp r13w, word [rdx + 2] LONG $0x04528d48 // lea rdx, [rdx + 4] @@ -12286,15 +12894,15 @@ LBB2_141: WORD $0xe0d2 // shl al, cl WORD $0x2044; BYTE $0xc8 // and al, r9b WORD $0xd830 // xor al, bl - LONG $0x33048841 // mov byte [r11 + rsi], al + LONG $0x36048841 // mov byte [r14 + rsi], al WORD $0x3949; BYTE $0xfa // cmp r10, rdi JNE LBB2_141 LBB2_142: LONG $0x01c0f641 // test r8b, 1 - JE LBB2_157 + JE LBB2_165 LONG $0x2a3b4466 // cmp r13w, word [rdx] - JMP LBB2_156 + JMP LBB2_157 LBB2_144: WORD $0x894d; BYTE $0xc2 // mov r10, r8 @@ -12307,8 +12915,8 @@ LBB2_145: WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xfe // mov rsi, rdi LONG $0x03eec148 // shr rsi, 3 - WORD $0x894d; BYTE $0xde // mov r14, r11 - LONG $0x0cb60f45; BYTE $0x33 // movzx r9d, byte [r11 + rsi] + WORD $0x894d; BYTE $0xf3 // mov r11, r14 + LONG $0x0cb60f45; BYTE $0x36 // movzx r9d, byte [r14 + rsi] WORD $0xf989 // mov ecx, edi WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 @@ -12316,7 +12924,7 @@ LBB2_145: WORD $0x3044; BYTE $0xc8 // xor al, r9b WORD $0xc320 // and bl, al WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x331c8841 // mov byte [r11 + rsi], bl + LONG $0x361c8841 // mov byte [r14 + rsi], bl LONG $0x02c78348 // add rdi, 2 LONG $0x086a3b4c // cmp r13, qword [rdx + 8] LONG $0x10528d48 // lea rdx, [rdx + 16] @@ -12328,71 +12936,92 @@ LBB2_145: WORD $0xe0d2 // shl al, cl WORD $0x2044; BYTE $0xc8 // and al, r9b WORD $0xd830 // xor al, bl - LONG $0x33048841 // mov byte [r11 + rsi], al + LONG $0x36048841 // mov byte [r14 + rsi], al WORD $0x3949; BYTE $0xfa // cmp r10, rdi JNE LBB2_145 LBB2_146: LONG $0x01c0f641 // test r8b, 1 - JE LBB2_157 + JE LBB2_165 WORD $0x3b4c; BYTE $0x2a // cmp r13, qword [rdx] - JMP LBB2_156 + JMP LBB2_157 LBB2_148: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 WORD $0xff31 // xor edi, edi LBB2_149: LONG $0x022ef8c5 // vucomiss xmm0, dword [rdx] + WORD $0x9b0f; BYTE $0xd1 // setnp cl WORD $0x940f; BYTE $0xd0 // sete al + WORD $0xc820 // and al, cl WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xfe // mov rsi, rdi LONG $0x03eec148 // shr rsi, 3 - WORD $0x894d; BYTE $0xde // mov r14, r11 - LONG $0x0cb60f45; BYTE $0x33 // movzx r9d, byte [r11 + rsi] - WORD $0x3044; BYTE $0xc8 // xor al, r9b + WORD $0x894d; BYTE $0xf7 // mov r15, r14 + LONG $0x14b60f45; BYTE $0x36 // movzx r10d, byte [r14 + rsi] WORD $0xf989 // mov ecx, edi WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b3 // mov bl, 1 - WORD $0xe3d2 // shl bl, cl - WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x331c8841 // mov byte [r11 + rsi], bl + WORD $0xb341; BYTE $0x01 // mov r11b, 1 + WORD $0xd241; BYTE $0xe3 // shl r11b, cl + WORD $0x3044; BYTE $0xd0 // xor al, r10b + WORD $0x2041; BYTE $0xc3 // and r11b, al + WORD $0x3045; BYTE $0xd3 // xor r11b, r10b + LONG $0x361c8845 // mov byte [r14 + rsi], r11b LONG $0x02c78348 // add rdi, 2 LONG $0x422ef8c5; BYTE $0x04 // vucomiss xmm0, dword [rdx + 4] LONG $0x08528d48 // lea rdx, [rdx + 8] - LONG $0xd1940f41 // sete r9b - WORD $0xf641; BYTE $0xd9 // neg r9b - WORD $0x3041; BYTE $0xd9 // xor r9b, bl + LONG $0xd29b0f41 // setnp r10b + WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x2044; BYTE $0xd0 // and al, r10b + WORD $0xd8f6 // neg al + WORD $0x3044; BYTE $0xd8 // xor al, r11b WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0x2044; BYTE $0xc8 // and al, r9b - WORD $0xd830 // xor al, bl - LONG $0x33048841 // mov byte [r11 + rsi], al - WORD $0x3949; BYTE $0xfa // cmp r10, rdi + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xdb // xor bl, r11b + LONG $0x361c8841 // mov byte [r14 + rsi], bl + WORD $0x3949; BYTE $0xf9 // cmp r9, rdi JNE LBB2_149 LBB2_150: LONG $0x01c0f641 // test r8b, 1 - JE LBB2_157 + JE LBB2_165 LONG $0x022ef8c5 // vucomiss xmm0, dword [rdx] - JMP LBB2_156 LBB2_152: + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xc220 // and dl, al + WORD $0xdaf6 // neg dl + WORD $0x8948; BYTE $0xf8 // mov rax, rdi + LONG $0x03e8c148 // shr rax, 3 + LONG $0x06348a41 // mov sil, byte [r14 + rax] + LONG $0x07e78040 // and dil, 7 + WORD $0x01b3 // mov bl, 1 + WORD $0xf989 // mov ecx, edi + WORD $0xe3d2 // shl bl, cl + WORD $0x3040; BYTE $0xf2 // xor dl, sil + WORD $0xd320 // and bl, dl + WORD $0x3040; BYTE $0xf3 // xor bl, sil + LONG $0x061c8841 // mov byte [r14 + rax], bl + JMP LBB2_165 + +LBB2_153: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0xff31 // xor edi, edi -LBB2_153: +LBB2_154: WORD $0x3b44; BYTE $0x2a // cmp r13d, dword [rdx] WORD $0x940f; BYTE $0xd0 // sete al WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xfe // mov rsi, rdi LONG $0x03eec148 // shr rsi, 3 - WORD $0x894d; BYTE $0xde // mov r14, r11 - LONG $0x0cb60f45; BYTE $0x33 // movzx r9d, byte [r11 + rsi] + WORD $0x894d; BYTE $0xf3 // mov r11, r14 + LONG $0x0cb60f45; BYTE $0x36 // movzx r9d, byte [r14 + rsi] WORD $0xf989 // mov ecx, edi WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 @@ -12400,7 +13029,7 @@ LBB2_153: WORD $0x3044; BYTE $0xc8 // xor al, r9b WORD $0xc320 // and bl, al WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x331c8841 // mov byte [r11 + rsi], bl + LONG $0x361c8841 // mov byte [r14 + rsi], bl LONG $0x02c78348 // add rdi, 2 LONG $0x046a3b44 // cmp r13d, dword [rdx + 4] LONG $0x08528d48 // lea rdx, [rdx + 8] @@ -12412,21 +13041,21 @@ LBB2_153: WORD $0xe0d2 // shl al, cl WORD $0x2044; BYTE $0xc8 // and al, r9b WORD $0xd830 // xor al, bl - LONG $0x33048841 // mov byte [r11 + rsi], al + LONG $0x36048841 // mov byte [r14 + rsi], al WORD $0x3949; BYTE $0xfa // cmp r10, rdi - JNE LBB2_153 + JNE LBB2_154 -LBB2_154: +LBB2_155: LONG $0x01c0f641 // test r8b, 1 - JE LBB2_157 + JE LBB2_165 WORD $0x3b44; BYTE $0x2a // cmp r13d, dword [rdx] -LBB2_156: +LBB2_157: WORD $0x940f; BYTE $0xd0 // sete al WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xfa // mov rdx, rdi LONG $0x03eac148 // shr rdx, 3 - LONG $0x13348a41 // mov sil, byte [r11 + rdx] + LONG $0x16348a41 // mov sil, byte [r14 + rdx] LONG $0x07e78040 // and dil, 7 WORD $0x01b3 // mov bl, 1 WORD $0xf989 // mov ecx, edi @@ -12434,21 +13063,17 @@ LBB2_156: WORD $0x3040; BYTE $0xf0 // xor al, sil WORD $0xc320 // and bl, al WORD $0x3040; BYTE $0xf3 // xor bl, sil - LONG $0x131c8841 // mov byte [r11 + rdx], bl - -LBB2_157: - MOVQ 1280(SP), SP - VZEROUPPER - RET + LONG $0x161c8841 // mov byte [r14 + rdx], bl + JMP LBB2_165 LBB2_160: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0xf631 // xor esi, esi - QUAD $0x00000178249c8b4c // mov r11, qword [rsp + 376] + QUAD $0x0000017824b48b4c // mov r14, qword [rsp + 376] LBB2_161: - LONG $0x34343a45 // cmp r14b, byte [r12 + rsi] + LONG $0x341c3a45 // cmp r11b, byte [r12 + rsi] WORD $0x940f; BYTE $0xd3 // sete bl WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xf7 // mov rdi, rsi @@ -12457,12 +13082,12 @@ LBB2_161: WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b2 // mov dl, 1 WORD $0xe2d2 // shl dl, cl - LONG $0x0cb60f45; BYTE $0x3b // movzx r9d, byte [r11 + rdi] + LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xda20 // and dl, bl WORD $0x3044; BYTE $0xca // xor dl, r9b - LONG $0x3b148841 // mov byte [r11 + rdi], dl - LONG $0x34743a45; BYTE $0x01 // cmp r14b, byte [r12 + rsi + 1] + LONG $0x3e148841 // mov byte [r14 + rdi], dl + LONG $0x345c3a45; BYTE $0x01 // cmp r11b, byte [r12 + rsi + 1] LONG $0x02768d48 // lea rsi, [rsi + 2] WORD $0x940f; BYTE $0xd3 // sete bl WORD $0xdbf6 // neg bl @@ -12472,7 +13097,7 @@ LBB2_161: WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0xd030 // xor al, dl - LONG $0x3b048841 // mov byte [r11 + rdi], al + LONG $0x3e048841 // mov byte [r14 + rdi], al WORD $0x3949; BYTE $0xf2 // cmp r10, rsi JNE LBB2_161 @@ -12481,8 +13106,8 @@ LBB2_162: LBB2_163: LONG $0x01c0f641 // test r8b, 1 - JE LBB2_157 - LONG $0x24343a45 // cmp r14b, byte [r12] + JE LBB2_165 + LONG $0x241c3a45 // cmp r11b, byte [r12] WORD $0x940f; BYTE $0xd0 // sete al WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xf2 // mov rdx, rsi @@ -12497,57 +13122,61 @@ LBB2_163: WORD $0xc320 // and bl, al WORD $0x3040; BYTE $0xfb // xor bl, dil LONG $0x101c8841 // mov byte [r8 + rdx], bl - JMP LBB2_157 LBB2_165: + MOVQ 1280(SP), SP + VZEROUPPER + RET + +LBB2_166: LONG $0xe0e78349 // and r15, -32 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xd0 // add rax, rdx QUAD $0x0000019024848948 // mov qword [rsp + 400], rax QUAD $0x0000018024bc894c // mov qword [rsp + 384], r15 - LONG $0xbb048d4b // lea rax, [r11 + 4*r15] + LONG $0xbe048d4b // lea rax, [r14 + 4*r15] QUAD $0x0000017824848948 // mov qword [rsp + 376], rax - LONG $0x6e79c1c4; BYTE $0xc6 // vmovd xmm0, r14d + LONG $0x6e79c1c4; BYTE $0xc3 // vmovd xmm0, r11d LONG $0x787de2c4; BYTE $0xc0 // vpbroadcastb ymm0, xmm0 QUAD $0x00020024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 512], ymm0 WORD $0xc031 // xor eax, eax - QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 + QUAD $0x0000011024b4894c // mov qword [rsp + 272], r14 -LBB2_166: +LBB2_167: WORD $0x8948; BYTE $0xc3 // mov rbx, rax QUAD $0x0000019824848948 // mov qword [rsp + 408], rax LONG $0x05e3c148 // shl rbx, 5 WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x20c88348 // or rax, 32 - LONG $0x24448948; BYTE $0x78 // mov qword [rsp + 120], rax + QUAD $0x000000c024848948 // mov qword [rsp + 192], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x40c88348 // or rax, 64 - LONG $0x24448948; BYTE $0x40 // mov qword [rsp + 64], rax + LONG $0x24448948; BYTE $0x78 // mov qword [rsp + 120], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x60c88348 // or rax, 96 - QUAD $0x000000b024848948 // mov qword [rsp + 176], rax + LONG $0x24448948; BYTE $0x38 // mov qword [rsp + 56], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x00800d48; WORD $0x0000 // or rax, 128 - LONG $0x24448948; BYTE $0x68 // mov qword [rsp + 104], rax + QUAD $0x000000a824848948 // mov qword [rsp + 168], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x00a00d48; WORD $0x0000 // or rax, 160 - LONG $0x24448948; BYTE $0x60 // mov qword [rsp + 96], rax + QUAD $0x0000008824848948 // mov qword [rsp + 136], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x00c00d48; WORD $0x0000 // or rax, 192 - QUAD $0x000000a024848948 // mov qword [rsp + 160], rax + QUAD $0x0000009824848948 // mov qword [rsp + 152], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x00e00d48; WORD $0x0000 // or rax, 224 - QUAD $0x0000009024848948 // mov qword [rsp + 144], rax + QUAD $0x000000f824848948 // mov qword [rsp + 248], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01000d48; WORD $0x0000 // or rax, 256 - QUAD $0x0000008824848948 // mov qword [rsp + 136], rax + QUAD $0x000000a024848948 // mov qword [rsp + 160], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01200d48; WORD $0x0000 // or rax, 288 - QUAD $0x0000009824848948 // mov qword [rsp + 152], rax + QUAD $0x000000b024848948 // mov qword [rsp + 176], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01400d48; WORD $0x0000 // or rax, 320 - QUAD $0x0000014024848948 // mov qword [rsp + 320], rax + LONG $0x24448948; BYTE $0x28 // mov qword [rsp + 40], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x02000d48; WORD $0x0000 // or rax, 512 WORD $0x8948; BYTE $0xc1 // mov rcx, rax @@ -12556,1918 +13185,1931 @@ LBB2_166: LONG $0x1a04b60f // movzx eax, byte [rdx + rbx] LONG $0xd86ef9c5 // vmovd xmm3, eax LONG $0x0a44b60f; BYTE $0x01 // movzx eax, byte [rdx + rcx + 1] + WORD $0x8948; BYTE $0xce // mov rsi, rcx LONG $0xe06ef9c5 // vmovd xmm4, eax + WORD $0x8948; BYTE $0xd9 // mov rcx, rbx LONG $0x1a44b60f; BYTE $0x01 // movzx eax, byte [rdx + rbx + 1] LONG $0xd06e79c5 // vmovd xmm10, eax - LONG $0x0a44b60f; BYTE $0x02 // movzx eax, byte [rdx + rcx + 2] - WORD $0x8948; BYTE $0xcf // mov rdi, rcx + LONG $0x3244b60f; BYTE $0x02 // movzx eax, byte [rdx + rsi + 2] LONG $0xc86ef9c5 // vmovd xmm1, eax QUAD $0x0001e0248c7ff9c5; BYTE $0x00 // vmovdqa oword [rsp + 480], xmm1 - WORD $0x8948; BYTE $0xd9 // mov rcx, rbx LONG $0x1a44b60f; BYTE $0x02 // movzx eax, byte [rdx + rbx + 2] LONG $0xc86ef9c5 // vmovd xmm1, eax QUAD $0x0001c0248c7ff9c5; BYTE $0x00 // vmovdqa oword [rsp + 448], xmm1 - LONG $0x3a44b60f; BYTE $0x03 // movzx eax, byte [rdx + rdi + 3] + LONG $0x3244b60f; BYTE $0x03 // movzx eax, byte [rdx + rsi + 3] LONG $0xd86e79c5 // vmovd xmm11, eax LONG $0x1a44b60f; BYTE $0x03 // movzx eax, byte [rdx + rbx + 3] LONG $0xc06e79c5 // vmovd xmm8, eax - LONG $0x3a44b60f; BYTE $0x04 // movzx eax, byte [rdx + rdi + 4] + LONG $0x3244b60f; BYTE $0x04 // movzx eax, byte [rdx + rsi + 4] LONG $0xc86ef9c5 // vmovd xmm1, eax QUAD $0x0001a0248c7ff9c5; BYTE $0x00 // vmovdqa oword [rsp + 416], xmm1 LONG $0x1a44b60f; BYTE $0x04 // movzx eax, byte [rdx + rbx + 4] LONG $0xe86e79c5 // vmovd xmm13, eax - LONG $0x3a44b60f; BYTE $0x05 // movzx eax, byte [rdx + rdi + 5] + LONG $0x3244b60f; BYTE $0x05 // movzx eax, byte [rdx + rsi + 5] LONG $0xf06e79c5 // vmovd xmm14, eax LONG $0x1a44b60f; BYTE $0x05 // movzx eax, byte [rdx + rbx + 5] LONG $0xf06ef9c5 // vmovd xmm6, eax - LONG $0x3a44b60f; BYTE $0x06 // movzx eax, byte [rdx + rdi + 6] - QUAD $0x0000010024bc8948 // mov qword [rsp + 256], rdi + LONG $0x3244b60f; BYTE $0x06 // movzx eax, byte [rdx + rsi + 6] + QUAD $0x000000f024b48948 // mov qword [rsp + 240], rsi LONG $0xe06e79c5 // vmovd xmm12, eax LONG $0x1a44b60f; BYTE $0x06 // movzx eax, byte [rdx + rbx + 6] LONG $0xf86ef9c5 // vmovd xmm7, eax - LONG $0x3a44b60f; BYTE $0x07 // movzx eax, byte [rdx + rdi + 7] + LONG $0x3244b60f; BYTE $0x07 // movzx eax, byte [rdx + rsi + 7] LONG $0xd06ef9c5 // vmovd xmm2, eax LONG $0x1a44b60f; BYTE $0x07 // movzx eax, byte [rdx + rbx + 7] LONG $0xc86ef9c5 // vmovd xmm1, eax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01600d48; WORD $0x0000 // or rax, 352 - QUAD $0x000000d824848948 // mov qword [rsp + 216], rax + QUAD $0x0000008024848948 // mov qword [rsp + 128], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01800d48; WORD $0x0000 // or rax, 384 - QUAD $0x0000012024848948 // mov qword [rsp + 288], rax + LONG $0x24448948; BYTE $0x30 // mov qword [rsp + 48], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01a00d48; WORD $0x0000 // or rax, 416 LONG $0x24448948; BYTE $0x20 // mov qword [rsp + 32], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01c00d48; WORD $0x0000 // or rax, 448 - LONG $0x24448948; BYTE $0x48 // mov qword [rsp + 72], rax + QUAD $0x0000012024848948 // mov qword [rsp + 288], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01e00d48; WORD $0x0000 // or rax, 480 - LONG $0x24448948; BYTE $0x38 // mov qword [rsp + 56], rax + QUAD $0x0000014024848948 // mov qword [rsp + 320], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x02200d48; WORD $0x0000 // or rax, 544 - QUAD $0x000000e824848948 // mov qword [rsp + 232], rax - LONG $0x40cb8148; WORD $0x0002; BYTE $0x00 // or rbx, 576 - QUAD $0x000000a8249c8948 // mov qword [rsp + 168], rbx - WORD $0x8948; BYTE $0xc8 // mov rax, rcx + LONG $0x24448948; BYTE $0x68 // mov qword [rsp + 104], rax + WORD $0x8948; BYTE $0xd8 // mov rax, rbx + LONG $0x02400d48; WORD $0x0000 // or rax, 576 + QUAD $0x0000010824848948 // mov qword [rsp + 264], rax + WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x02600d48; WORD $0x0000 // or rax, 608 - LONG $0x24448948; BYTE $0x70 // mov qword [rsp + 112], rax - WORD $0x8949; BYTE $0xcc // mov r12, rcx - LONG $0x80cc8149; WORD $0x0002; BYTE $0x00 // or r12, 640 - QUAD $0x000000f024a4894c // mov qword [rsp + 240], r12 - WORD $0x8949; BYTE $0xce // mov r14, rcx - LONG $0xa0ce8149; WORD $0x0002; BYTE $0x00 // or r14, 672 - QUAD $0x000000f824b4894c // mov qword [rsp + 248], r14 - WORD $0x8948; BYTE $0xc8 // mov rax, rcx - LONG $0x02c00d48; WORD $0x0000 // or rax, 704 - LONG $0x24448948; BYTE $0x28 // mov qword [rsp + 40], rax - WORD $0x8948; BYTE $0xc8 // mov rax, rcx - LONG $0x02e00d48; WORD $0x0000 // or rax, 736 - WORD $0x8948; BYTE $0xc7 // mov rdi, rax - WORD $0x8949; BYTE $0xc9 // mov r9, rcx - LONG $0x00c98149; WORD $0x0003; BYTE $0x00 // or r9, 768 - QUAD $0x000000c0248c894c // mov qword [rsp + 192], r9 - WORD $0x8949; BYTE $0xcf // mov r15, rcx - LONG $0x20cf8149; WORD $0x0003; BYTE $0x00 // or r15, 800 - QUAD $0x000000b824bc894c // mov qword [rsp + 184], r15 - WORD $0x8949; BYTE $0xcb // mov r11, rcx - LONG $0x40cb8149; WORD $0x0003; BYTE $0x00 // or r11, 832 - QUAD $0x000000e0249c894c // mov qword [rsp + 224], r11 - WORD $0x8949; BYTE $0xca // mov r10, rcx - LONG $0x60ca8149; WORD $0x0003; BYTE $0x00 // or r10, 864 - LONG $0x2454894c; BYTE $0x58 // mov qword [rsp + 88], r10 - WORD $0x8949; BYTE $0xc8 // mov r8, rcx - LONG $0x80c88149; WORD $0x0003; BYTE $0x00 // or r8, 896 - QUAD $0x000000802484894c // mov qword [rsp + 128], r8 - WORD $0x8948; BYTE $0xce // mov rsi, rcx - LONG $0xa0ce8148; WORD $0x0003; BYTE $0x00 // or rsi, 928 + QUAD $0x000000c824848948 // mov qword [rsp + 200], rax + WORD $0x8949; BYTE $0xdb // mov r11, rbx + LONG $0x80cb8149; WORD $0x0002; BYTE $0x00 // or r11, 640 + LONG $0x245c894c; BYTE $0x70 // mov qword [rsp + 112], r11 + WORD $0x8948; BYTE $0xd8 // mov rax, rbx + LONG $0x02a00d48; WORD $0x0000 // or rax, 672 + QUAD $0x000000b824848948 // mov qword [rsp + 184], rax + WORD $0x8949; BYTE $0xdc // mov r12, rbx + LONG $0xc0cc8149; WORD $0x0002; BYTE $0x00 // or r12, 704 + QUAD $0x0000009024a4894c // mov qword [rsp + 144], r12 + WORD $0x8948; BYTE $0xde // mov rsi, rbx + LONG $0xe0ce8148; WORD $0x0002; BYTE $0x00 // or rsi, 736 QUAD $0x000000d024b48948 // mov qword [rsp + 208], rsi - WORD $0x8948; BYTE $0xc8 // mov rax, rcx - QUAD $0x00000108248c8948 // mov qword [rsp + 264], rcx + WORD $0x8949; BYTE $0xdf // mov r15, rbx + LONG $0x00cf8149; WORD $0x0003; BYTE $0x00 // or r15, 768 + QUAD $0x000000e024bc894c // mov qword [rsp + 224], r15 + WORD $0x8949; BYTE $0xd9 // mov r9, rbx + LONG $0x20c98149; WORD $0x0003; BYTE $0x00 // or r9, 800 + QUAD $0x000000e8248c894c // mov qword [rsp + 232], r9 + WORD $0x8949; BYTE $0xd8 // mov r8, rbx + LONG $0x40c88149; WORD $0x0003; BYTE $0x00 // or r8, 832 + LONG $0x2444894c; BYTE $0x58 // mov qword [rsp + 88], r8 + WORD $0x8948; BYTE $0xdf // mov rdi, rbx + LONG $0x60cf8148; WORD $0x0003; BYTE $0x00 // or rdi, 864 + QUAD $0x000000d824bc8948 // mov qword [rsp + 216], rdi + WORD $0x8949; BYTE $0xde // mov r14, rbx + LONG $0x80ce8149; WORD $0x0003; BYTE $0x00 // or r14, 896 + LONG $0x2474894c; BYTE $0x50 // mov qword [rsp + 80], r14 + WORD $0x8949; BYTE $0xda // mov r10, rbx + LONG $0xa0ca8149; WORD $0x0003; BYTE $0x00 // or r10, 928 + LONG $0x2454894c; BYTE $0x48 // mov qword [rsp + 72], r10 + WORD $0x8948; BYTE $0xd8 // mov rax, rbx + QUAD $0x00000100249c8948 // mov qword [rsp + 256], rbx LONG $0x03c00d48; WORD $0x0000 // or rax, 960 - LONG $0x24448948; BYTE $0x30 // mov qword [rsp + 48], rax + LONG $0x24448948; BYTE $0x40 // mov qword [rsp + 64], rax LONG $0xe0c98148; WORD $0x0003; BYTE $0x00 // or rcx, 992 - LONG $0x244c8948; BYTE $0x50 // mov qword [rsp + 80], rcx - QUAD $0x000000e824ac8b4c // mov r13, qword [rsp + 232] + LONG $0x244c8948; BYTE $0x60 // mov qword [rsp + 96], rcx + LONG $0x246c8b4c; BYTE $0x68 // mov r13, qword [rsp + 104] LONG $0x207923c4; WORD $0x2a0c; BYTE $0x01 // vpinsrb xmm9, xmm0, byte [rdx + r13], 1 + QUAD $0x00000108249c8b48 // mov rbx, qword [rsp + 264] LONG $0x2031e3c4; WORD $0x1a04; BYTE $0x02 // vpinsrb xmm0, xmm9, byte [rdx + rbx], 2 - LONG $0x245c8b48; BYTE $0x70 // mov rbx, qword [rsp + 112] + QUAD $0x000000c8249c8b48 // mov rbx, qword [rsp + 200] LONG $0x2079e3c4; WORD $0x1a04; BYTE $0x03 // vpinsrb xmm0, xmm0, byte [rdx + rbx], 3 - LONG $0x2079a3c4; WORD $0x2204; BYTE $0x04 // vpinsrb xmm0, xmm0, byte [rdx + r12], 4 - LONG $0x2079a3c4; WORD $0x3204; BYTE $0x05 // vpinsrb xmm0, xmm0, byte [rdx + r14], 5 - LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] - LONG $0x2079e3c4; WORD $0x1a04; BYTE $0x06 // vpinsrb xmm0, xmm0, byte [rdx + rbx], 6 - LONG $0x2079e3c4; WORD $0x3a04; BYTE $0x07 // vpinsrb xmm0, xmm0, byte [rdx + rdi], 7 - WORD $0x8949; BYTE $0xfd // mov r13, rdi - QUAD $0x000000c824bc8948 // mov qword [rsp + 200], rdi - LONG $0x2079a3c4; WORD $0x0a04; BYTE $0x08 // vpinsrb xmm0, xmm0, byte [rdx + r9], 8 - LONG $0x2079a3c4; WORD $0x3a04; BYTE $0x09 // vpinsrb xmm0, xmm0, byte [rdx + r15], 9 - LONG $0x2079a3c4; WORD $0x1a04; BYTE $0x0a // vpinsrb xmm0, xmm0, byte [rdx + r11], 10 - LONG $0x2079a3c4; WORD $0x1204; BYTE $0x0b // vpinsrb xmm0, xmm0, byte [rdx + r10], 11 - LONG $0x2079a3c4; WORD $0x0204; BYTE $0x0c // vpinsrb xmm0, xmm0, byte [rdx + r8], 12 - LONG $0x2079e3c4; WORD $0x3204; BYTE $0x0d // vpinsrb xmm0, xmm0, byte [rdx + rsi], 13 + LONG $0x2079a3c4; WORD $0x1a04; BYTE $0x04 // vpinsrb xmm0, xmm0, byte [rdx + r11], 4 + QUAD $0x000000b8249c8b48 // mov rbx, qword [rsp + 184] + LONG $0x2079e3c4; WORD $0x1a04; BYTE $0x05 // vpinsrb xmm0, xmm0, byte [rdx + rbx], 5 + LONG $0x2079a3c4; WORD $0x2204; BYTE $0x06 // vpinsrb xmm0, xmm0, byte [rdx + r12], 6 + LONG $0x2079e3c4; WORD $0x3204; BYTE $0x07 // vpinsrb xmm0, xmm0, byte [rdx + rsi], 7 + LONG $0x2079a3c4; WORD $0x3a04; BYTE $0x08 // vpinsrb xmm0, xmm0, byte [rdx + r15], 8 + LONG $0x2079a3c4; WORD $0x0a04; BYTE $0x09 // vpinsrb xmm0, xmm0, byte [rdx + r9], 9 + LONG $0x2079a3c4; WORD $0x0204; BYTE $0x0a // vpinsrb xmm0, xmm0, byte [rdx + r8], 10 + LONG $0x2079e3c4; WORD $0x3a04; BYTE $0x0b // vpinsrb xmm0, xmm0, byte [rdx + rdi], 11 + LONG $0x2079a3c4; WORD $0x3204; BYTE $0x0c // vpinsrb xmm0, xmm0, byte [rdx + r14], 12 + LONG $0x2079a3c4; WORD $0x1204; BYTE $0x0d // vpinsrb xmm0, xmm0, byte [rdx + r10], 13 LONG $0x2079e3c4; WORD $0x0204; BYTE $0x0e // vpinsrb xmm0, xmm0, byte [rdx + rax], 14 LONG $0x2079e3c4; WORD $0x0a04; BYTE $0x0f // vpinsrb xmm0, xmm0, byte [rdx + rcx], 15 - LONG $0x24748b4c; BYTE $0x78 // mov r14, qword [rsp + 120] + QUAD $0x000000c024b48b4c // mov r14, qword [rsp + 192] LONG $0x2061a3c4; WORD $0x321c; BYTE $0x01 // vpinsrb xmm3, xmm3, byte [rdx + r14], 1 - LONG $0x24548b4c; BYTE $0x40 // mov r10, qword [rsp + 64] - LONG $0x2061a3c4; WORD $0x121c; BYTE $0x02 // vpinsrb xmm3, xmm3, byte [rdx + r10], 2 - QUAD $0x000000b024a48b4c // mov r12, qword [rsp + 176] - LONG $0x2061a3c4; WORD $0x221c; BYTE $0x03 // vpinsrb xmm3, xmm3, byte [rdx + r12], 3 - LONG $0x24448b4c; BYTE $0x68 // mov r8, qword [rsp + 104] - LONG $0x2061a3c4; WORD $0x021c; BYTE $0x04 // vpinsrb xmm3, xmm3, byte [rdx + r8], 4 - LONG $0x245c8b4c; BYTE $0x60 // mov r11, qword [rsp + 96] + LONG $0x24648b4c; BYTE $0x78 // mov r12, qword [rsp + 120] + LONG $0x2061a3c4; WORD $0x221c; BYTE $0x02 // vpinsrb xmm3, xmm3, byte [rdx + r12], 2 + LONG $0x24448b4c; BYTE $0x38 // mov r8, qword [rsp + 56] + LONG $0x2061a3c4; WORD $0x021c; BYTE $0x03 // vpinsrb xmm3, xmm3, byte [rdx + r8], 3 + QUAD $0x000000a8248c8b4c // mov r9, qword [rsp + 168] + LONG $0x2061a3c4; WORD $0x0a1c; BYTE $0x04 // vpinsrb xmm3, xmm3, byte [rdx + r9], 4 + QUAD $0x00000088249c8b4c // mov r11, qword [rsp + 136] LONG $0x2061a3c4; WORD $0x1a1c; BYTE $0x05 // vpinsrb xmm3, xmm3, byte [rdx + r11], 5 - QUAD $0x000000a0248c8b4c // mov r9, qword [rsp + 160] - LONG $0x2061a3c4; WORD $0x0a1c; BYTE $0x06 // vpinsrb xmm3, xmm3, byte [rdx + r9], 6 - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] + QUAD $0x0000009824948b4c // mov r10, qword [rsp + 152] + LONG $0x2061a3c4; WORD $0x121c; BYTE $0x06 // vpinsrb xmm3, xmm3, byte [rdx + r10], 6 + QUAD $0x000000f824bc8b4c // mov r15, qword [rsp + 248] LONG $0x2061a3c4; WORD $0x3a1c; BYTE $0x07 // vpinsrb xmm3, xmm3, byte [rdx + r15], 7 - QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] + QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] LONG $0x2061e3c4; WORD $0x321c; BYTE $0x08 // vpinsrb xmm3, xmm3, byte [rdx + rsi], 8 - QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] LONG $0x2061e3c4; WORD $0x021c; BYTE $0x09 // vpinsrb xmm3, xmm3, byte [rdx + rax], 9 - QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] + LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] LONG $0x2061e3c4; WORD $0x1a1c; BYTE $0x0a // vpinsrb xmm3, xmm3, byte [rdx + rbx], 10 - QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] + QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] LONG $0x2061e3c4; WORD $0x0a1c; BYTE $0x0b // vpinsrb xmm3, xmm3, byte [rdx + rcx], 11 - QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] + LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] LONG $0x2061e3c4; WORD $0x3a1c; BYTE $0x0c // vpinsrb xmm3, xmm3, byte [rdx + rdi], 12 LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] LONG $0x2061e3c4; WORD $0x3a1c; BYTE $0x0d // vpinsrb xmm3, xmm3, byte [rdx + rdi], 13 - LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] + QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] LONG $0x2061e3c4; WORD $0x3a1c; BYTE $0x0e // vpinsrb xmm3, xmm3, byte [rdx + rdi], 14 - LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] + QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] LONG $0x2061e3c4; WORD $0x3a1c; BYTE $0x0f // vpinsrb xmm3, xmm3, byte [rdx + rdi], 15 - QUAD $0x000000e824bc8b48 // mov rdi, qword [rsp + 232] + LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] QUAD $0x01013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 1 - QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] - QUAD $0x02013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 2 - LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] + QUAD $0x0000010824ac8b4c // mov r13, qword [rsp + 264] + QUAD $0x02012a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 1], 2 + QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] QUAD $0x03013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 3 - QUAD $0x000000f024bc8b48 // mov rdi, qword [rsp + 240] - QUAD $0x04013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 4 - QUAD $0x000000f824bc8b48 // mov rdi, qword [rsp + 248] + LONG $0x246c8b4c; BYTE $0x70 // mov r13, qword [rsp + 112] + QUAD $0x04012a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 1], 4 + QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] QUAD $0x05013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 5 - LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] - QUAD $0x06013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 6 + QUAD $0x0000009024ac8b4c // mov r13, qword [rsp + 144] + QUAD $0x06012a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 1], 6 + QUAD $0x000000d024ac8b4c // mov r13, qword [rsp + 208] QUAD $0x07012a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 1], 7 - QUAD $0x000000c024ac8b4c // mov r13, qword [rsp + 192] - QUAD $0x08012a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 1], 8 - QUAD $0x000000b824ac8b4c // mov r13, qword [rsp + 184] - QUAD $0x09012a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 1], 9 QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] - QUAD $0x0a013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 10 + QUAD $0x08013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 8 + QUAD $0x000000e824bc8b48 // mov rdi, qword [rsp + 232] + QUAD $0x09013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 9 LONG $0x247c8b48; BYTE $0x58 // mov rdi, qword [rsp + 88] + QUAD $0x0a013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 10 + QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] QUAD $0x0b013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 11 - QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] + LONG $0x247c8b48; BYTE $0x50 // mov rdi, qword [rsp + 80] QUAD $0x0c013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 12 - QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] + LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] QUAD $0x0d013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 13 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] QUAD $0x0e013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 14 - LONG $0x247c8b48; BYTE $0x50 // mov rdi, qword [rsp + 80] + LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] QUAD $0x0f013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 15 QUAD $0x0101326c2029a3c4 // vpinsrb xmm5, xmm10, byte [rdx + r14 + 1], 1 - QUAD $0x0201126c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r10 + 1], 2 - QUAD $0x0301226c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r12 + 1], 3 - QUAD $0x0401026c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r8 + 1], 4 + QUAD $0x0201226c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r12 + 1], 2 + WORD $0x894c; BYTE $0xe7 // mov rdi, r12 + QUAD $0x0301026c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r8 + 1], 3 + QUAD $0x04010a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 1], 4 QUAD $0x05011a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r11 + 1], 5 - QUAD $0x06010a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 1], 6 + QUAD $0x0601126c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r10 + 1], 6 QUAD $0x07013a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r15 + 1], 7 QUAD $0x0801326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 1], 8 QUAD $0x0901026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 1], 9 QUAD $0x0a011a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 1], 10 QUAD $0x0b010a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 1], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x0c01026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 1], 12 LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0d01026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 1], 13 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0e01026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 1], 14 LONG $0x386563c4; WORD $0x01f8 // vinserti128 ymm15, ymm3, xmm0, 1 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] QUAD $0x0f0102442051e3c4 // vpinsrb xmm0, xmm5, byte [rdx + rax + 1], 15 - QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] LONG $0x0274b60f; BYTE $0x08 // movzx esi, byte [rdx + rax + 8] LONG $0xce6e79c5 // vmovd xmm9, esi LONG $0x387de3c4; WORD $0x01c4 // vinserti128 ymm0, ymm0, xmm4, 1 QUAD $0x0004c024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 1216], ymm0 - QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] + QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] LONG $0x0274b60f; BYTE $0x08 // movzx esi, byte [rdx + rax + 8] LONG $0xd66e79c5 // vmovd xmm10, esi - QUAD $0x000000e824848b4c // mov r8, qword [rsp + 232] + LONG $0x24448b4c; BYTE $0x68 // mov r8, qword [rsp + 104] QUAD $0x0001e024846ff9c5; BYTE $0x00 // vmovdqa xmm0, oword [rsp + 480] QUAD $0x010202442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 2], 1 - QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] - QUAD $0x02020a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 2], 2 - LONG $0x24548b4c; BYTE $0x70 // mov r10, qword [rsp + 112] + QUAD $0x00000108248c8b4c // mov r9, qword [rsp + 264] + QUAD $0x02020a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 2], 2 + QUAD $0x000000c824948b4c // mov r10, qword [rsp + 200] QUAD $0x030212442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 2], 3 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] QUAD $0x040202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 4 - QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] + QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] QUAD $0x050202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 5 - LONG $0x244c8b4c; BYTE $0x28 // mov r9, qword [rsp + 40] - QUAD $0x06020a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 2], 6 - QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] - QUAD $0x07023a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 2], 7 - QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] - QUAD $0x080202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 8 - WORD $0x894d; BYTE $0xec // mov r12, r13 - QUAD $0x09022a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 2], 9 - QUAD $0x000000e024ac8b4c // mov r13, qword [rsp + 224] + QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] + QUAD $0x060202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 6 + QUAD $0x07022a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 2], 7 + QUAD $0x000000e0248c8b48 // mov rcx, qword [rsp + 224] + QUAD $0x08020a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 2], 8 + QUAD $0x000000e824a48b4c // mov r12, qword [rsp + 232] + QUAD $0x090222442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 2], 9 + LONG $0x246c8b4c; BYTE $0x58 // mov r13, qword [rsp + 88] QUAD $0x0a022a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 2], 10 - LONG $0x245c8b4c; BYTE $0x58 // mov r11, qword [rsp + 88] + QUAD $0x000000d8249c8b4c // mov r11, qword [rsp + 216] QUAD $0x0b021a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 2], 11 - QUAD $0x0000008024b48b4c // mov r14, qword [rsp + 128] + LONG $0x24748b4c; BYTE $0x50 // mov r14, qword [rsp + 80] QUAD $0x0c0232442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 2], 12 - QUAD $0x000000d024bc8b4c // mov r15, qword [rsp + 208] + LONG $0x247c8b4c; BYTE $0x48 // mov r15, qword [rsp + 72] QUAD $0x0d023a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 2], 13 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] QUAD $0x0e0202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 14 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] QUAD $0x0f0202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 15 - LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] + QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] QUAD $0x0001c0249c6ff9c5; BYTE $0x00 // vmovdqa xmm3, oword [rsp + 448] QUAD $0x0102025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 2], 1 - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] - QUAD $0x0202325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 2], 2 - QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] + QUAD $0x02023a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 2], 2 + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] QUAD $0x0302325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 2], 3 - LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] + QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] QUAD $0x0402325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 2], 4 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] QUAD $0x0502325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 2], 5 - QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] + QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] QUAD $0x0602325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 2], 6 - QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] + QUAD $0x000000f824b48b48 // mov rsi, qword [rsp + 248] QUAD $0x0702325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 2], 7 - QUAD $0x00000088249c8b48 // mov rbx, qword [rsp + 136] + QUAD $0x000000a0249c8b48 // mov rbx, qword [rsp + 160] QUAD $0x08021a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 2], 8 - QUAD $0x00000098249c8b48 // mov rbx, qword [rsp + 152] - QUAD $0x09021a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 2], 9 - QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] - QUAD $0x0a021a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 2], 10 - QUAD $0x000000d8249c8b48 // mov rbx, qword [rsp + 216] - QUAD $0x0b021a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 2], 11 - QUAD $0x00000120249c8b48 // mov rbx, qword [rsp + 288] - QUAD $0x0c021a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 2], 12 - LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] - QUAD $0x0d021a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 2], 13 - LONG $0x245c8b48; BYTE $0x48 // mov rbx, qword [rsp + 72] - QUAD $0x0e021a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 2], 14 - LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] - QUAD $0x0f021a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 2], 15 + QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] + QUAD $0x09023a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 2], 9 + LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] + QUAD $0x0a023a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 2], 10 + QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] + QUAD $0x0b023a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 2], 11 + LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + QUAD $0x0c023a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 2], 12 + LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] + QUAD $0x0d023a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 2], 13 + QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] + QUAD $0x0e023a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 2], 14 + QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] + QUAD $0x0f023a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 2], 15 QUAD $0x010302642021a3c4 // vpinsrb xmm4, xmm11, byte [rdx + r8 + 3], 1 - QUAD $0x02030a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 3], 2 + QUAD $0x02030a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r9 + 3], 2 QUAD $0x030312642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r10 + 3], 3 - QUAD $0x000000f0249c8b48 // mov rbx, qword [rsp + 240] - QUAD $0x04031a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 3], 4 - QUAD $0x000000f8248c8b48 // mov rcx, qword [rsp + 248] - QUAD $0x05030a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 3], 5 - QUAD $0x06030a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r9 + 3], 6 - QUAD $0x07033a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 3], 7 - QUAD $0x000000c024bc8b48 // mov rdi, qword [rsp + 192] - QUAD $0x08033a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 3], 8 + LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] + QUAD $0x04033a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 3], 4 + QUAD $0x000000b824848b4c // mov r8, qword [rsp + 184] + QUAD $0x050302642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r8 + 3], 5 + QUAD $0x0000009024bc8b48 // mov rdi, qword [rsp + 144] + QUAD $0x06033a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 3], 6 + QUAD $0x000000d0248c8b4c // mov r9, qword [rsp + 208] + QUAD $0x07030a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r9 + 3], 7 + QUAD $0x08030a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 3], 8 QUAD $0x090322642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r12 + 3], 9 QUAD $0x0a032a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 3], 10 QUAD $0x0b031a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r11 + 3], 11 + WORD $0x894d; BYTE $0xdc // mov r12, r11 QUAD $0x0c0332642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r14 + 3], 12 QUAD $0x0d033a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r15 + 3], 13 - LONG $0x244c8b4c; BYTE $0x30 // mov r9, qword [rsp + 48] - QUAD $0x0e030a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r9 + 3], 14 - LONG $0x247c8b4c; BYTE $0x50 // mov r15, qword [rsp + 80] - QUAD $0x0f033a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r15 + 3], 15 - QUAD $0x0103026c2039e3c4 // vpinsrb xmm5, xmm8, byte [rdx + rax + 3], 1 LONG $0x245c8b4c; BYTE $0x40 // mov r11, qword [rsp + 64] - QUAD $0x02031a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r11 + 3], 2 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x0e031a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r11 + 3], 14 + LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] + QUAD $0x0f030a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 3], 15 + QUAD $0x0103026c2039e3c4 // vpinsrb xmm5, xmm8, byte [rdx + rax + 3], 1 + WORD $0x8949; BYTE $0xc5 // mov r13, rax + LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] + QUAD $0x0203026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 2 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] QUAD $0x0303026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 3 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] QUAD $0x0403026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 4 - LONG $0x24548b4c; BYTE $0x60 // mov r10, qword [rsp + 96] - QUAD $0x0503126c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r10 + 3], 5 - QUAD $0x000000a024b48b4c // mov r14, qword [rsp + 160] - QUAD $0x0603326c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r14 + 3], 6 - QUAD $0x0703326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 3], 7 QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] - QUAD $0x0803026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 8 - QUAD $0x00000098249c8b48 // mov rbx, qword [rsp + 152] - QUAD $0x09031a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 3], 9 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0503026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 5 + QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] + QUAD $0x0603026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 6 + QUAD $0x0703326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 3], 7 + QUAD $0x08031a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 3], 8 + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x0903026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 9 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0a03026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 10 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x0b03026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x0c03026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 12 LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0d03026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 13 LONG $0x3865e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm3, xmm0, 1 QUAD $0x0001e024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 480], ymm0 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0e0302442051e3c4 // vpinsrb xmm0, xmm5, byte [rdx + rax + 3], 14 - QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] - LONG $0x0274b60f; BYTE $0x09 // movzx esi, byte [rdx + rax + 9] + QUAD $0x000000f0248c8b48 // mov rcx, qword [rsp + 240] + LONG $0x0a74b60f; BYTE $0x09 // movzx esi, byte [rdx + rcx + 9] LONG $0xc66e79c5 // vmovd xmm8, esi - LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] - QUAD $0x0f0322442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 3], 15 + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0f0302442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 3], 15 LONG $0x387de3c4; WORD $0x01c4 // vinserti128 ymm0, ymm0, xmm4, 1 QUAD $0x0001c024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 448], ymm0 - QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] - LONG $0x0274b60f; BYTE $0x09 // movzx esi, byte [rdx + rax + 9] + QUAD $0x00000100248c8b48 // mov rcx, qword [rsp + 256] + LONG $0x0a74b60f; BYTE $0x09 // movzx esi, byte [rdx + rcx + 9] LONG $0xde6e79c5 // vmovd xmm11, esi + LONG $0x24748b4c; BYTE $0x68 // mov r14, qword [rsp + 104] QUAD $0x0001a024846ff9c5; BYTE $0x00 // vmovdqa xmm0, oword [rsp + 416] - QUAD $0x010402442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 4], 1 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] - QUAD $0x020402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 2 - LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] - QUAD $0x030402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 3 - QUAD $0x000000f024ac8b4c // mov r13, qword [rsp + 240] - QUAD $0x04042a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 4], 4 - QUAD $0x05040a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 4], 5 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] - QUAD $0x060402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 6 - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] - QUAD $0x070402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 7 - QUAD $0x08043a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 4], 8 - QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] - QUAD $0x090402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 9 - QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] - QUAD $0x0a0402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 10 + QUAD $0x010432442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 4], 1 + QUAD $0x0000010824bc8b4c // mov r15, qword [rsp + 264] + QUAD $0x02043a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 4], 2 + QUAD $0x030412442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 4], 3 + LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] + QUAD $0x04043a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 4], 4 + WORD $0x894c; BYTE $0xc1 // mov rcx, r8 + QUAD $0x050402442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 4], 5 + QUAD $0x00000090249c8b48 // mov rbx, qword [rsp + 144] + QUAD $0x06041a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 4], 6 + QUAD $0x07040a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 4], 7 + QUAD $0x000000e0248c8b4c // mov r9, qword [rsp + 224] + QUAD $0x08040a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 4], 8 + QUAD $0x000000e824848b4c // mov r8, qword [rsp + 232] + QUAD $0x090402442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 4], 9 LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] - QUAD $0x0b0402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 11 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] - QUAD $0x0c0402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 12 - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] - QUAD $0x0d0402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 13 - QUAD $0x0e040a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 4], 14 - QUAD $0x0f043a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 4], 15 - LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] - QUAD $0x0104025c2011e3c4 // vpinsrb xmm3, xmm13, byte [rdx + rax + 4], 1 - QUAD $0x02041a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 4], 2 - QUAD $0x000000b0249c8b4c // mov r11, qword [rsp + 176] - QUAD $0x03041a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 4], 3 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] - QUAD $0x0404025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 4 - QUAD $0x0504125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 4], 5 - WORD $0x894c; BYTE $0xf6 // mov rsi, r14 - QUAD $0x0604325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 4], 6 - QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] - QUAD $0x0704125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 4], 7 - QUAD $0x00000088248c8b4c // mov r9, qword [rsp + 136] - QUAD $0x08040a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 4], 8 - QUAD $0x09041a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 4], 9 - QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] - QUAD $0x0a041a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 4], 10 - QUAD $0x000000d824b48b4c // mov r14, qword [rsp + 216] - QUAD $0x0b04325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 4], 11 - QUAD $0x00000120249c8b48 // mov rbx, qword [rsp + 288] - QUAD $0x0c041a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 4], 12 - LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] - QUAD $0x0d041a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 4], 13 - LONG $0x247c8b4c; BYTE $0x48 // mov r15, qword [rsp + 72] - QUAD $0x0e043a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 4], 14 - QUAD $0x0f04225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 4], 15 - QUAD $0x010502642009a3c4 // vpinsrb xmm4, xmm14, byte [rdx + r8 + 5], 1 - QUAD $0x000000a824bc8b4c // mov r15, qword [rsp + 168] + QUAD $0x0a0402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 10 + QUAD $0x0b0422442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 4], 11 + LONG $0x24748b48; BYTE $0x50 // mov rsi, qword [rsp + 80] + QUAD $0x0c0432442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 4], 12 + LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] + QUAD $0x0d0432442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 4], 13 + QUAD $0x0e041a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 4], 14 + LONG $0x24648b4c; BYTE $0x60 // mov r12, qword [rsp + 96] + QUAD $0x0f0422442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 4], 15 + QUAD $0x01042a5c2011a3c4 // vpinsrb xmm3, xmm13, byte [rdx + r13 + 4], 1 + LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] + QUAD $0x0204325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 4], 2 + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + QUAD $0x0304325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 4], 3 + QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] + QUAD $0x0404325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 4], 4 + QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] + QUAD $0x0504025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 5 + QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] + QUAD $0x0604325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 4], 6 + QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] + QUAD $0x0704025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 7 + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] + QUAD $0x0804025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 8 + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x0904025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 9 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x0a04025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 10 + QUAD $0x00000080249c8b4c // mov r11, qword [rsp + 128] + QUAD $0x0b041a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 4], 11 + LONG $0x245c8b4c; BYTE $0x30 // mov r11, qword [rsp + 48] + QUAD $0x0c041a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 4], 12 + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x0d04025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 13 + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + QUAD $0x0e04025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 14 + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0f04025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 15 + QUAD $0x010532642009a3c4 // vpinsrb xmm4, xmm14, byte [rdx + r14 + 5], 1 QUAD $0x02053a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r15 + 5], 2 - LONG $0x245c8b48; BYTE $0x70 // mov rbx, qword [rsp + 112] - QUAD $0x03051a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 5], 3 - QUAD $0x04052a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 5], 4 + WORD $0x894d; BYTE $0xfe // mov r14, r15 + QUAD $0x030512642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r10 + 5], 3 + QUAD $0x04053a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 5], 4 QUAD $0x05050a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 5], 5 - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] - QUAD $0x06050a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 5], 6 - QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] - QUAD $0x07050a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 5], 7 - QUAD $0x08053a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 5], 8 - QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] - QUAD $0x09050a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 5], 9 - QUAD $0x000000e0248c8b48 // mov rcx, qword [rsp + 224] - QUAD $0x0a050a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 5], 10 - LONG $0x247c8b48; BYTE $0x58 // mov rdi, qword [rsp + 88] - QUAD $0x0b053a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 5], 11 - QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] - QUAD $0x0c053a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 5], 12 - QUAD $0x000000d024ac8b4c // mov r13, qword [rsp + 208] - QUAD $0x0d052a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 5], 13 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] - QUAD $0x0e053a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 5], 14 - LONG $0x247c8b48; BYTE $0x50 // mov rdi, qword [rsp + 80] - QUAD $0x0f053a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 5], 15 - LONG $0x247c8b48; BYTE $0x78 // mov rdi, qword [rsp + 120] - QUAD $0x01053a6c2049e3c4 // vpinsrb xmm5, xmm6, byte [rdx + rdi + 5], 1 - LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] - QUAD $0x02053a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 5], 2 - QUAD $0x03051a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r11 + 5], 3 + WORD $0x8949; BYTE $0xca // mov r10, rcx + QUAD $0x06051a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 5], 6 + QUAD $0x000000d024bc8b4c // mov r15, qword [rsp + 208] + QUAD $0x07053a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r15 + 5], 7 + QUAD $0x08050a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r9 + 5], 8 + QUAD $0x090502642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r8 + 5], 9 + LONG $0x24448b4c; BYTE $0x58 // mov r8, qword [rsp + 88] + QUAD $0x0a0502642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r8 + 5], 10 + QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] + QUAD $0x0b050a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 5], 11 + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0c0502642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 5], 12 + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0d0502642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 5], 13 + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x0e0502642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 5], 14 + QUAD $0x0f0522642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r12 + 5], 15 + QUAD $0x01052a6c2049a3c4 // vpinsrb xmm5, xmm6, byte [rdx + r13 + 5], 1 + LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] + QUAD $0x0205026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 2 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x0305026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 3 + QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] QUAD $0x0405026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 4 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] QUAD $0x0505026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 5 QUAD $0x0605326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 5], 6 - QUAD $0x0705126c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r10 + 5], 7 - QUAD $0x08050a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 5], 8 - QUAD $0x00000098248c8b4c // mov r9, qword [rsp + 152] - QUAD $0x09050a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 5], 9 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x000000f8249c8b48 // mov rbx, qword [rsp + 248] + QUAD $0x07051a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 5], 7 + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] + QUAD $0x0805026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 8 + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x0905026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 9 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0a05026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 10 - QUAD $0x0b05326c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r14 + 5], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] - QUAD $0x0c05026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 12 + QUAD $0x0000008024ac8b4c // mov r13, qword [rsp + 128] + QUAD $0x0b052a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r13 + 5], 11 + QUAD $0x0c051a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r11 + 5], 12 + WORD $0x894d; BYTE $0xdc // mov r12, r11 LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0d05026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 13 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0e05026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 14 LONG $0x386563c4; WORD $0x01f0 // vinserti128 ymm14, ymm3, xmm0, 1 - QUAD $0x0f0522442051a3c4 // vpinsrb xmm0, xmm5, byte [rdx + r12 + 5], 15 - QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0f0502442051e3c4 // vpinsrb xmm0, xmm5, byte [rdx + rax + 5], 15 + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] LONG $0x0274b60f; BYTE $0x0a // movzx esi, byte [rdx + rax + 10] LONG $0xde6ef9c5 // vmovd xmm3, esi LONG $0x387de3c4; WORD $0x01c4 // vinserti128 ymm0, ymm0, xmm4, 1 QUAD $0x0001a024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 416], ymm0 - QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] - LONG $0x0274b60f; BYTE $0x0a // movzx esi, byte [rdx + rax + 10] + QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] + LONG $0x3274b60f; BYTE $0x0a // movzx esi, byte [rdx + rsi + 10] LONG $0xe66ef9c5 // vmovd xmm4, esi - WORD $0x894d; BYTE $0xc6 // mov r14, r8 - QUAD $0x010602442019a3c4 // vpinsrb xmm0, xmm12, byte [rdx + r8 + 6], 1 - QUAD $0x02063a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 6], 2 - QUAD $0x03061a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 6], 3 - QUAD $0x000000f0249c8b4c // mov r11, qword [rsp + 240] - QUAD $0x04061a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 6], 4 - QUAD $0x000000f824848b4c // mov r8, qword [rsp + 248] - QUAD $0x050602442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 6], 5 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] + QUAD $0x01063a442019e3c4 // vpinsrb xmm0, xmm12, byte [rdx + rdi + 6], 1 + QUAD $0x020632442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 6], 2 + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] + QUAD $0x030602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 3 + LONG $0x24748b4c; BYTE $0x70 // mov r14, qword [rsp + 112] + QUAD $0x040632442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 6], 4 + QUAD $0x050612442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 6], 5 + QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] QUAD $0x060602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 6 - QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] - QUAD $0x07063a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 6], 7 - QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] - QUAD $0x080602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 8 - QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] - QUAD $0x090602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 9 - QUAD $0x0a060a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 6], 10 - LONG $0x24548b4c; BYTE $0x58 // mov r10, qword [rsp + 88] - QUAD $0x0b0612442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 6], 11 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] - QUAD $0x0c0602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 12 - QUAD $0x0d062a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 6], 13 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] - QUAD $0x0e060a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 6], 14 - LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] - QUAD $0x0f060a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 6], 15 - LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] + QUAD $0x07063a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 6], 7 + QUAD $0x08060a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 6], 8 + QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] + QUAD $0x090632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 6], 9 + QUAD $0x0a0602442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 6], 10 + QUAD $0x0b060a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 6], 11 + LONG $0x24448b4c; BYTE $0x50 // mov r8, qword [rsp + 80] + QUAD $0x0c0602442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 6], 12 + LONG $0x244c8b4c; BYTE $0x48 // mov r9, qword [rsp + 72] + QUAD $0x0d060a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 6], 13 + LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] + QUAD $0x0e0632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 6], 14 + LONG $0x24548b4c; BYTE $0x60 // mov r10, qword [rsp + 96] + QUAD $0x0f0612442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 6], 15 + QUAD $0x000000c0248c8b48 // mov rcx, qword [rsp + 192] QUAD $0x01060a6c2041e3c4 // vpinsrb xmm5, xmm7, byte [rdx + rcx + 6], 1 - LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] - QUAD $0x02060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 2 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] - QUAD $0x03060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 3 - LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] - QUAD $0x04060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 4 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] + QUAD $0x0206326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 6], 2 + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + QUAD $0x0306326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 6], 3 + QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] + QUAD $0x0406326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 6], 4 + QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] QUAD $0x0506326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 6], 5 - QUAD $0x000000a0249c8b48 // mov rbx, qword [rsp + 160] - QUAD $0x06061a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 6], 6 - QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] - QUAD $0x07060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 7 - QUAD $0x00000088248c8b48 // mov rcx, qword [rsp + 136] - QUAD $0x08060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 8 - QUAD $0x09060a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 6], 9 - QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] + QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] + QUAD $0x06060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 6 + QUAD $0x07061a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 6], 7 + QUAD $0x000000a0249c8b4c // mov r11, qword [rsp + 160] + QUAD $0x08061a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r11 + 6], 8 + QUAD $0x000000b0249c8b48 // mov rbx, qword [rsp + 176] + QUAD $0x09061a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 6], 9 + LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] QUAD $0x0a060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 10 - QUAD $0x000000d824a48b4c // mov r12, qword [rsp + 216] - QUAD $0x0b06226c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r12 + 6], 11 - QUAD $0x00000120248c8b4c // mov r9, qword [rsp + 288] - QUAD $0x0c060a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 6], 12 - LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] - QUAD $0x0d062a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r13 + 6], 13 - LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] + WORD $0x894d; BYTE $0xef // mov r15, r13 + QUAD $0x0b062a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r13 + 6], 11 + QUAD $0x0c06226c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r12 + 6], 12 + LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + QUAD $0x0d060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 13 + QUAD $0x00000120248c8b48 // mov rcx, qword [rsp + 288] QUAD $0x0e060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 14 - LONG $0x246c8b4c; BYTE $0x38 // mov r13, qword [rsp + 56] + QUAD $0x0000014024ac8b4c // mov r13, qword [rsp + 320] QUAD $0x0f062a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r13 + 6], 15 - QUAD $0x010732542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 7], 1 - QUAD $0x02073a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 7], 2 - LONG $0x246c8b4c; BYTE $0x70 // mov r13, qword [rsp + 112] - QUAD $0x03072a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 7], 3 - QUAD $0x04071a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 7], 4 - QUAD $0x050702542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 7], 5 - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] - QUAD $0x06070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 6 - QUAD $0x07073a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 7], 7 - QUAD $0x000000c024b48b4c // mov r14, qword [rsp + 192] - QUAD $0x080732542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 7], 8 - QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] - QUAD $0x09070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 9 - QUAD $0x000000e0248c8b48 // mov rcx, qword [rsp + 224] - QUAD $0x0a070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 10 - QUAD $0x0b0712542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 7], 11 - QUAD $0x0c0702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 7], 12 + QUAD $0x01073a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 7], 1 + QUAD $0x0000010824ac8b4c // mov r13, qword [rsp + 264] + QUAD $0x02072a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 7], 2 + QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] + QUAD $0x03073a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 7], 3 + QUAD $0x040732542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 7], 4 + QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] + QUAD $0x05073a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 7], 5 + QUAD $0x060702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 7], 6 QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] - QUAD $0x0d0702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 7], 13 - LONG $0x247c8b4c; BYTE $0x30 // mov r15, qword [rsp + 48] - QUAD $0x0e073a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 7], 14 - LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] - QUAD $0x0f070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 15 + QUAD $0x070702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 7], 7 + QUAD $0x000000e0248c8b48 // mov rcx, qword [rsp + 224] + QUAD $0x08070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 8 + QUAD $0x000000e8248c8b48 // mov rcx, qword [rsp + 232] + QUAD $0x09070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 9 + LONG $0x247c8b48; BYTE $0x58 // mov rdi, qword [rsp + 88] + QUAD $0x0a073a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 7], 10 + QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] + QUAD $0x0b073a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 7], 11 + QUAD $0x0c0702542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 7], 12 + QUAD $0x0d070a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 7], 13 + LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] + QUAD $0x0e070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 14 + QUAD $0x0f0712542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 7], 15 + QUAD $0x000000c024b48b4c // mov r14, qword [rsp + 192] + QUAD $0x0107324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 7], 1 LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] - QUAD $0x01070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 1 - LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] - QUAD $0x02073a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 7], 2 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] + QUAD $0x02070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 2 + LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] QUAD $0x03070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 3 - LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] - QUAD $0x04073a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 7], 4 + QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] + QUAD $0x04070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 4 QUAD $0x0507324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 7], 5 - QUAD $0x06071a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 7], 6 - QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] - QUAD $0x0707324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 7], 7 - QUAD $0x00000088248c8b48 // mov rcx, qword [rsp + 136] - QUAD $0x08070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 8 - QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] - QUAD $0x09073a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 7], 9 - QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] + QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] + QUAD $0x06070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 6 + QUAD $0x000000f8248c8b48 // mov rcx, qword [rsp + 248] + QUAD $0x07070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 7 + QUAD $0x08071a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 7], 8 + QUAD $0x09071a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 7], 9 + LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] QUAD $0x0a070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 10 - QUAD $0x0b07224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 7], 11 - QUAD $0x0c070a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 7], 12 + QUAD $0x0b073a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 7], 11 + QUAD $0x0c07224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 7], 12 LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] QUAD $0x0d070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 13 LONG $0x3855e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm5, xmm0, 1 QUAD $0x0004a024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 1184], ymm0 - LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] + QUAD $0x00000120248c8b48 // mov rcx, qword [rsp + 288] QUAD $0x0e070a442071e3c4 // vpinsrb xmm0, xmm1, byte [rdx + rcx + 7], 14 - QUAD $0x00000100248c8b48 // mov rcx, qword [rsp + 256] + QUAD $0x000000f0248c8b48 // mov rcx, qword [rsp + 240] LONG $0x0a74b60f; BYTE $0x0b // movzx esi, byte [rdx + rcx + 11] LONG $0xce6ef9c5 // vmovd xmm1, esi - LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] - QUAD $0x0f0722442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 7], 15 + QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] + QUAD $0x0f070a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 7], 15 LONG $0x387de3c4; WORD $0x01c2 // vinserti128 ymm0, ymm0, xmm2, 1 QUAD $0x00048024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 1152], ymm0 - QUAD $0x00000108248c8b48 // mov rcx, qword [rsp + 264] + QUAD $0x00000100248c8b48 // mov rcx, qword [rsp + 256] LONG $0x0a74b60f; BYTE $0x0b // movzx esi, byte [rdx + rcx + 11] LONG $0xd66ef9c5 // vmovd xmm2, esi - QUAD $0x000000e8248c8b48 // mov rcx, qword [rsp + 232] + LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] QUAD $0x01080a442031e3c4 // vpinsrb xmm0, xmm9, byte [rdx + rcx + 8], 1 - QUAD $0x000000a824848b4c // mov r8, qword [rsp + 168] - QUAD $0x020802442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 8], 2 - QUAD $0x03082a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 8], 3 - WORD $0x894d; BYTE $0xdd // mov r13, r11 - QUAD $0x04081a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 8], 4 - QUAD $0x000000f8249c8b4c // mov r11, qword [rsp + 248] - QUAD $0x05081a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 8], 5 - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] - QUAD $0x06080a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 8], 6 - QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] - QUAD $0x070832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 8], 7 - QUAD $0x080832442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 8], 8 - QUAD $0x000000b824948b4c // mov r10, qword [rsp + 184] - QUAD $0x090812442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 8], 9 - QUAD $0x000000e0249c8b48 // mov rbx, qword [rsp + 224] + WORD $0x894d; BYTE $0xef // mov r15, r13 + QUAD $0x02082a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 8], 2 + QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] + QUAD $0x03080a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 8], 3 + LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] + QUAD $0x040832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 8], 4 + QUAD $0x000000b824ac8b4c // mov r13, qword [rsp + 184] + QUAD $0x05082a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 8], 5 + QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] + QUAD $0x060832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 8], 6 + WORD $0x8949; BYTE $0xc0 // mov r8, rax + QUAD $0x070802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 8], 7 + QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] + QUAD $0x08083a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 8], 8 + QUAD $0x000000e824a48b4c // mov r12, qword [rsp + 232] + QUAD $0x090822442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 8], 9 + LONG $0x245c8b48; BYTE $0x58 // mov rbx, qword [rsp + 88] QUAD $0x0a081a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 8], 10 - LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] - QUAD $0x0b0832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 8], 11 - QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] - QUAD $0x0c0832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 8], 12 + QUAD $0x000000d8248c8b4c // mov r9, qword [rsp + 216] + QUAD $0x0b080a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 8], 11 + LONG $0x24548b4c; BYTE $0x50 // mov r10, qword [rsp + 80] + QUAD $0x0c0812442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 8], 12 + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] QUAD $0x0d0802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 8], 13 - QUAD $0x0e083a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 8], 14 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x0e0802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 8], 14 + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] QUAD $0x0f0802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 8], 15 + QUAD $0x0108326c2029a3c4 // vpinsrb xmm5, xmm10, byte [rdx + r14 + 8], 1 LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] - QUAD $0x0108026c2029e3c4 // vpinsrb xmm5, xmm10, byte [rdx + rax + 8], 1 - LONG $0x244c8b4c; BYTE $0x40 // mov r9, qword [rsp + 64] - QUAD $0x02080a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 8], 2 - QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] - QUAD $0x03083a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r15 + 8], 3 - LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] + QUAD $0x0208026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 2 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x0308026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 3 + QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] QUAD $0x0408326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 8], 4 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] - QUAD $0x0508026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 5 - QUAD $0x000000a024b48b4c // mov r14, qword [rsp + 160] - QUAD $0x0608326c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r14 + 8], 6 - QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] - QUAD $0x0708026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 7 QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] - QUAD $0x0808026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 8 - QUAD $0x09083a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 8], 9 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0508026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 5 + QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] + QUAD $0x0608026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 6 + QUAD $0x000000f824b48b4c // mov r14, qword [rsp + 248] + QUAD $0x0708326c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r14 + 8], 7 + QUAD $0x08081a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r11 + 8], 8 + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x0908026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 9 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0a08026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 10 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x0b08026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 11 - QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] - QUAD $0x0c083a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 8], 12 - LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] - QUAD $0x0d083a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 8], 13 - LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] - QUAD $0x0e083a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 8], 14 - QUAD $0x0f08226c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r12 + 8], 15 - QUAD $0x000000e824a48b4c // mov r12, qword [rsp + 232] - QUAD $0x010922742039a3c4 // vpinsrb xmm6, xmm8, byte [rdx + r12 + 9], 1 - QUAD $0x020902742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r8 + 9], 2 - LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] - QUAD $0x03093a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rdi + 9], 3 - QUAD $0x04092a742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r13 + 9], 4 - QUAD $0x05091a742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r11 + 9], 5 - QUAD $0x06090a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rcx + 9], 6 - QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] - QUAD $0x07090a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rcx + 9], 7 - QUAD $0x000000c0248c8b48 // mov rcx, qword [rsp + 192] - QUAD $0x08090a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rcx + 9], 8 - QUAD $0x090912742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r10 + 9], 9 + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + QUAD $0x0c08026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 12 + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x0d08026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 13 + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + QUAD $0x0e08026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 14 + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0f08026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 15 + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + QUAD $0x010902742039e3c4 // vpinsrb xmm6, xmm8, byte [rdx + rax + 9], 1 + QUAD $0x02093a742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r15 + 9], 2 + QUAD $0x03090a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rcx + 9], 3 + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] + QUAD $0x040902742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rax + 9], 4 + QUAD $0x05092a742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r13 + 9], 5 + QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] + QUAD $0x060902742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rax + 9], 6 + QUAD $0x070902742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r8 + 9], 7 + QUAD $0x08093a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rdi + 9], 8 + QUAD $0x090922742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r12 + 9], 9 QUAD $0x0a091a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rbx + 9], 10 - LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] - QUAD $0x0b090a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rcx + 9], 11 - QUAD $0x00000080249c8b4c // mov r11, qword [rsp + 128] - QUAD $0x0c091a742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r11 + 9], 12 - QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] - QUAD $0x0d090a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rcx + 9], 13 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] - QUAD $0x0e090a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rcx + 9], 14 - LONG $0x24648b4c; BYTE $0x50 // mov r12, qword [rsp + 80] - QUAD $0x0f0922742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r12 + 9], 15 - LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] - QUAD $0x01090a7c2021e3c4 // vpinsrb xmm7, xmm11, byte [rdx + rcx + 9], 1 - QUAD $0x02090a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r9 + 9], 2 - QUAD $0x03093a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r15 + 9], 3 + QUAD $0x0b090a742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r9 + 9], 11 + QUAD $0x0c0912742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r10 + 9], 12 + LONG $0x24548b4c; BYTE $0x48 // mov r10, qword [rsp + 72] + QUAD $0x0d0912742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r10 + 9], 13 + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x0e0902742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rax + 9], 14 + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + QUAD $0x0f0902742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rax + 9], 15 + QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] + QUAD $0x0109027c2021e3c4 // vpinsrb xmm7, xmm11, byte [rdx + rax + 9], 1 + LONG $0x246c8b4c; BYTE $0x78 // mov r13, qword [rsp + 120] + QUAD $0x02092a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r13 + 9], 2 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x0309027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 3 QUAD $0x0409327c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rsi + 9], 4 - LONG $0x246c8b4c; BYTE $0x60 // mov r13, qword [rsp + 96] - QUAD $0x05092a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r13 + 9], 5 - QUAD $0x0609327c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r14 + 9], 6 - QUAD $0x00000090249c8b48 // mov rbx, qword [rsp + 144] - QUAD $0x07091a7c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rbx + 9], 7 - QUAD $0x0000008824bc8b4c // mov r15, qword [rsp + 136] - QUAD $0x08093a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r15 + 9], 8 - QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] - QUAD $0x09090a7c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rcx + 9], 9 - QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] - QUAD $0x0a090a7c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rcx + 9], 10 + QUAD $0x00000088249c8b48 // mov rbx, qword [rsp + 136] + QUAD $0x05091a7c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rbx + 9], 5 + QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] + QUAD $0x0609027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 6 + QUAD $0x0709327c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r14 + 9], 7 + QUAD $0x08091a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r11 + 9], 8 + WORD $0x894d; BYTE $0xde // mov r14, r11 + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x0909027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 9 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x0a09027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 10 + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x0b09027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x0c09027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 12 LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0d09027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 13 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0e09027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 14 LONG $0x3855e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm5, xmm0, 1 QUAD $0x00046024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 1120], ymm0 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] QUAD $0x0f09026c2041e3c4 // vpinsrb xmm5, xmm7, byte [rdx + rax + 9], 15 - QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] LONG $0x0274b60f; BYTE $0x0c // movzx esi, byte [rdx + rax + 12] LONG $0xc66ef9c5 // vmovd xmm0, esi LONG $0x3855e3c4; WORD $0x01ee // vinserti128 ymm5, ymm5, xmm6, 1 QUAD $0x00044024ac7ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 1088], ymm5 - QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] + QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] LONG $0x0274b60f; BYTE $0x0c // movzx esi, byte [rdx + rax + 12] LONG $0xee6ef9c5 // vmovd xmm5, esi - QUAD $0x000000e824bc8b48 // mov rdi, qword [rsp + 232] - QUAD $0x010a3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 10], 1 - QUAD $0x020a025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 10], 2 - LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + QUAD $0x010a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 1 + QUAD $0x020a3a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 10], 2 QUAD $0x030a0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 10], 3 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] - QUAD $0x040a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 4 - QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] - QUAD $0x050a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 5 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] - QUAD $0x060a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 6 - QUAD $0x000000c8248c8b4c // mov r9, qword [rsp + 200] - QUAD $0x070a0a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 10], 7 - QUAD $0x000000c024b48b4c // mov r14, qword [rsp + 192] - QUAD $0x080a325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 10], 8 - QUAD $0x090a125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 10], 9 - QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] - QUAD $0x0a0a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 10 - LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] + LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] + QUAD $0x040a3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 10], 4 + QUAD $0x000000b824848b4c // mov r8, qword [rsp + 184] + QUAD $0x050a025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 10], 5 + QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] + QUAD $0x060a325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 10], 6 + QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] + QUAD $0x070a325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 10], 7 + QUAD $0x000000e0248c8b4c // mov r9, qword [rsp + 224] + QUAD $0x080a0a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 10], 8 + QUAD $0x090a225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 10], 9 + LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] + QUAD $0x0a0a325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 10], 10 + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] QUAD $0x0b0a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 11 - QUAD $0x0c0a1a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 10], 12 - QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0c0a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 12 QUAD $0x0d0a125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 10], 13 - LONG $0x245c8b4c; BYTE $0x30 // mov r11, qword [rsp + 48] - QUAD $0x0e0a1a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 10], 14 - QUAD $0x0f0a225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 10], 15 - LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] - QUAD $0x010a02642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 10], 1 LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] - QUAD $0x020a02642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 10], 2 - QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] + QUAD $0x0e0a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 14 + LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + QUAD $0x0f0a325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 10], 15 + QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] + QUAD $0x010a02642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 10], 1 + QUAD $0x020a2a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 10], 2 + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] QUAD $0x030a32642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rsi + 10], 3 - LONG $0x24648b4c; BYTE $0x68 // mov r12, qword [rsp + 104] - QUAD $0x040a22642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r12 + 10], 4 - QUAD $0x050a2a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 10], 5 - QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] - QUAD $0x060a02642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 10], 6 + QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] + QUAD $0x040a1a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r11 + 10], 4 + QUAD $0x050a1a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 10], 5 + QUAD $0x0000009824948b4c // mov r10, qword [rsp + 152] + QUAD $0x060a12642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r10 + 10], 6 + QUAD $0x000000f8249c8b48 // mov rbx, qword [rsp + 248] QUAD $0x070a1a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 10], 7 - QUAD $0x080a3a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r15 + 10], 8 - QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] - QUAD $0x090a02642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 10], 9 - QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] - QUAD $0x0a0a1a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 10], 10 - QUAD $0x000000d824bc8b4c // mov r15, qword [rsp + 216] - QUAD $0x0b0a3a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r15 + 10], 11 + QUAD $0x080a32642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r14 + 10], 8 + QUAD $0x000000b024ac8b4c // mov r13, qword [rsp + 176] + QUAD $0x090a2a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 10], 9 + LONG $0x24748b4c; BYTE $0x28 // mov r14, qword [rsp + 40] + QUAD $0x0a0a32642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r14 + 10], 10 + QUAD $0x00000080249c8b48 // mov rbx, qword [rsp + 128] + QUAD $0x0b0a1a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 10], 11 + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + QUAD $0x0c0a02642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 10], 12 + LONG $0x24648b4c; BYTE $0x20 // mov r12, qword [rsp + 32] + QUAD $0x0d0a22642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r12 + 10], 13 QUAD $0x00000120249c8b48 // mov rbx, qword [rsp + 288] - QUAD $0x0c0a1a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 10], 12 - LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] - QUAD $0x0d0a1a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 10], 13 - LONG $0x246c8b4c; BYTE $0x48 // mov r13, qword [rsp + 72] - QUAD $0x0e0a2a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 10], 14 - LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] + QUAD $0x0e0a1a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 10], 14 + QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] QUAD $0x0f0a1a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 10], 15 - QUAD $0x010b3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 11], 1 - QUAD $0x020b024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 11], 2 + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + QUAD $0x010b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 1 + QUAD $0x020b3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 11], 2 QUAD $0x030b0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 11], 3 - QUAD $0x000000f0248c8b48 // mov rcx, qword [rsp + 240] - QUAD $0x040b0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 11], 4 - QUAD $0x000000f824bc8b48 // mov rdi, qword [rsp + 248] - QUAD $0x050b3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 11], 5 - LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] - QUAD $0x060b3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 11], 6 - QUAD $0x070b0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 11], 7 - QUAD $0x080b324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 11], 8 - QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] - QUAD $0x090b3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 11], 9 - QUAD $0x000000e024b48b4c // mov r14, qword [rsp + 224] - QUAD $0x0a0b324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 11], 10 - LONG $0x244c8b4c; BYTE $0x58 // mov r9, qword [rsp + 88] - QUAD $0x0b0b0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 11], 11 - QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] - QUAD $0x0c0b3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 11], 12 - QUAD $0x0d0b124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 11], 13 - QUAD $0x0e0b1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 11], 14 - LONG $0x245c8b4c; BYTE $0x50 // mov r11, qword [rsp + 80] - QUAD $0x0f0b1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 11], 15 + QUAD $0x040b3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 11], 4 + QUAD $0x050b024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 11], 5 + QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] + QUAD $0x060b0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 11], 6 + QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x070b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 7 + QUAD $0x080b0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 11], 8 + QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] + QUAD $0x090b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 9 + LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] + QUAD $0x0a0b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 10 + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x0b0b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 11 + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0c0b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 12 + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0d0b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 13 + LONG $0x24448b4c; BYTE $0x40 // mov r8, qword [rsp + 64] + QUAD $0x0e0b024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 11], 14 + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + QUAD $0x0f0b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 15 + QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] + QUAD $0x010b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 11], 1 LONG $0x247c8b48; BYTE $0x78 // mov rdi, qword [rsp + 120] - QUAD $0x010b3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 11], 1 - LONG $0x245c8b48; BYTE $0x40 // mov rbx, qword [rsp + 64] - QUAD $0x020b1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 11], 2 + QUAD $0x020b3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 11], 2 QUAD $0x030b32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 11], 3 - QUAD $0x040b22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 11], 4 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + QUAD $0x040b1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 11], 4 + QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] QUAD $0x050b32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 11], 5 - QUAD $0x000000a0249c8b48 // mov rbx, qword [rsp + 160] - QUAD $0x060b1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 11], 6 - QUAD $0x0000009024848b4c // mov r8, qword [rsp + 144] - QUAD $0x070b02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 11], 7 - QUAD $0x0000008824a48b4c // mov r12, qword [rsp + 136] - QUAD $0x080b22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 11], 8 - QUAD $0x090b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 11], 9 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] - QUAD $0x0a0b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 11], 10 - QUAD $0x0b0b3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 11], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] - QUAD $0x0c0b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 11], 12 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - QUAD $0x0d0b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 11], 13 + QUAD $0x060b12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 11], 6 + QUAD $0x000000f824bc8b4c // mov r15, qword [rsp + 248] + QUAD $0x070b3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 11], 7 + QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] + QUAD $0x080b32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 11], 8 + QUAD $0x090b2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 11], 9 + QUAD $0x0a0b32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 11], 10 + QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] + QUAD $0x0b0b32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 11], 11 + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + QUAD $0x0c0b32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 11], 12 + QUAD $0x0d0b22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 11], 13 LONG $0x385de3c4; WORD $0x01db // vinserti128 ymm3, ymm4, xmm3, 1 QUAD $0x000420249c7ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 1056], ymm3 + QUAD $0x0000012024ac8b4c // mov r13, qword [rsp + 288] QUAD $0x0e0b2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 11], 14 - QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] - LONG $0x0274b60f; BYTE $0x0d // movzx esi, byte [rdx + rax + 13] + QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] + LONG $0x3274b60f; BYTE $0x0d // movzx esi, byte [rdx + rsi + 13] LONG $0xde6ef9c5 // vmovd xmm3, esi - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] - QUAD $0x0f0b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 11], 15 + QUAD $0x0f0b1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 11], 15 LONG $0x386de3c4; WORD $0x01c9 // vinserti128 ymm1, ymm2, xmm1, 1 QUAD $0x000400248c7ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 1024], ymm1 - QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] - LONG $0x0274b60f; BYTE $0x0d // movzx esi, byte [rdx + rax + 13] + QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] + LONG $0x3274b60f; BYTE $0x0d // movzx esi, byte [rdx + rsi + 13] LONG $0xce6ef9c5 // vmovd xmm1, esi - QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] - QUAD $0x010c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 1 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] - QUAD $0x020c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 2 - LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] - QUAD $0x030c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 3 - QUAD $0x040c0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 12], 4 - QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] - QUAD $0x050c12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 12], 5 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] - QUAD $0x060c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 6 - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] - QUAD $0x070c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 7 - QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] - QUAD $0x080c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 8 - QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] - QUAD $0x090c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 9 + LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] + QUAD $0x010c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 12], 1 + QUAD $0x0000010824a48b4c // mov r12, qword [rsp + 264] + QUAD $0x020c22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 12], 2 + QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] + QUAD $0x030c3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 12], 3 + LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] + QUAD $0x040c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 12], 4 + QUAD $0x000000b824b48b48 // mov rsi, qword [rsp + 184] + QUAD $0x050c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 12], 5 + QUAD $0x060c0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 12], 6 + QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] + QUAD $0x070c0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 12], 7 + QUAD $0x000000e024b48b48 // mov rsi, qword [rsp + 224] + QUAD $0x080c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 12], 8 + QUAD $0x000000e8248c8b4c // mov r9, qword [rsp + 232] + QUAD $0x090c0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 12], 9 + LONG $0x24748b4c; BYTE $0x58 // mov r14, qword [rsp + 88] QUAD $0x0a0c32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 12], 10 - QUAD $0x0b0c0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 12], 11 - QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] - QUAD $0x0c0c0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 12], 12 - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] - QUAD $0x0d0c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 13 - LONG $0x246c8b4c; BYTE $0x30 // mov r13, qword [rsp + 48] - QUAD $0x0e0c2a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 12], 14 - QUAD $0x0f0c1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 12], 15 - QUAD $0x010c3a542051e3c4 // vpinsrb xmm2, xmm5, byte [rdx + rdi + 12], 1 - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] - QUAD $0x020c32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 12], 2 - QUAD $0x000000b024b48b4c // mov r14, qword [rsp + 176] - QUAD $0x030c32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 12], 3 - LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] - QUAD $0x040c3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 12], 4 - LONG $0x247c8b4c; BYTE $0x60 // mov r15, qword [rsp + 96] - QUAD $0x050c3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 12], 5 - QUAD $0x060c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 6 - QUAD $0x070c02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 12], 7 - WORD $0x894c; BYTE $0xe0 // mov rax, r12 - QUAD $0x080c22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 12], 8 - QUAD $0x00000098249c8b4c // mov r11, qword [rsp + 152] - QUAD $0x090c1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 12], 9 - QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] - QUAD $0x0a0c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 10 QUAD $0x000000d8249c8b48 // mov rbx, qword [rsp + 216] - QUAD $0x0b0c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 11 - QUAD $0x00000120249c8b48 // mov rbx, qword [rsp + 288] - QUAD $0x0c0c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 12 - LONG $0x244c8b4c; BYTE $0x20 // mov r9, qword [rsp + 32] - QUAD $0x0d0c0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 12], 13 - LONG $0x24448b4c; BYTE $0x48 // mov r8, qword [rsp + 72] - QUAD $0x0e0c02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 12], 14 - LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] - QUAD $0x0f0c22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 12], 15 - QUAD $0x000000e8249c8b48 // mov rbx, qword [rsp + 232] - QUAD $0x010d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 1 - QUAD $0x000000a8249c8b48 // mov rbx, qword [rsp + 168] - QUAD $0x020d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 2 - LONG $0x245c8b48; BYTE $0x70 // mov rbx, qword [rsp + 112] - QUAD $0x030d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 3 - QUAD $0x000000f0249c8b48 // mov rbx, qword [rsp + 240] - QUAD $0x040d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 4 - QUAD $0x050d125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 13], 5 - LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] - QUAD $0x060d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 6 - QUAD $0x000000c8249c8b48 // mov rbx, qword [rsp + 200] - QUAD $0x070d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 7 - QUAD $0x000000c0249c8b48 // mov rbx, qword [rsp + 192] - QUAD $0x080d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 8 - QUAD $0x000000b824a48b4c // mov r12, qword [rsp + 184] - QUAD $0x090d225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 13], 9 - QUAD $0x000000e0249c8b48 // mov rbx, qword [rsp + 224] - QUAD $0x0a0d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 10 - LONG $0x245c8b48; BYTE $0x58 // mov rbx, qword [rsp + 88] + QUAD $0x0b0c1a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 12], 11 + LONG $0x24748b48; BYTE $0x50 // mov rsi, qword [rsp + 80] + QUAD $0x0c0c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 12], 12 + LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] + QUAD $0x0d0c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 12], 13 + QUAD $0x0e0c02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 12], 14 + LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + QUAD $0x0f0c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 12], 15 + QUAD $0x010c02542051e3c4 // vpinsrb xmm2, xmm5, byte [rdx + rax + 12], 1 + LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] + QUAD $0x020c32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 12], 2 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x030c02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 12], 3 + QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x040c02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 12], 4 + QUAD $0x0000008824948b4c // mov r10, qword [rsp + 136] + QUAD $0x050c12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 12], 5 + QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] + QUAD $0x060c02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 12], 6 + QUAD $0x070c3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 12], 7 + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] + QUAD $0x080c02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 12], 8 + QUAD $0x000000b024848b4c // mov r8, qword [rsp + 176] + QUAD $0x090c02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 12], 9 + LONG $0x245c8b4c; BYTE $0x28 // mov r11, qword [rsp + 40] + QUAD $0x0a0c1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 12], 10 + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] + QUAD $0x0b0c02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 12], 11 + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + QUAD $0x0c0c02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 12], 12 + LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] + QUAD $0x0d0c3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 12], 13 + QUAD $0x0e0c2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 12], 14 + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0f0c02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 12], 15 + LONG $0x246c8b4c; BYTE $0x68 // mov r13, qword [rsp + 104] + QUAD $0x010d2a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 13], 1 + QUAD $0x020d225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 13], 2 + QUAD $0x030d3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 13], 3 + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] + QUAD $0x040d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 13], 4 + QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] + QUAD $0x050d3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 13], 5 + QUAD $0x0000009024a48b4c // mov r12, qword [rsp + 144] + QUAD $0x060d225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 13], 6 + QUAD $0x070d0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 13], 7 + QUAD $0x000000e024ac8b4c // mov r13, qword [rsp + 224] + QUAD $0x080d2a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 13], 8 + QUAD $0x090d0a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 13], 9 + QUAD $0x0a0d325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 13], 10 QUAD $0x0b0d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 11 + LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] QUAD $0x0c0d0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 13], 12 - QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] - QUAD $0x0d0d125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 13], 13 - QUAD $0x0e0d2a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 13], 14 - LONG $0x245c8b48; BYTE $0x50 // mov rbx, qword [rsp + 80] - QUAD $0x0f0d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 15 - LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] + LONG $0x245c8b48; BYTE $0x48 // mov rbx, qword [rsp + 72] + QUAD $0x0d0d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 13 + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x0e0d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 13], 14 + LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] + QUAD $0x0f0d0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 13], 15 + QUAD $0x000000c0248c8b48 // mov rcx, qword [rsp + 192] QUAD $0x010d0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 13], 1 QUAD $0x020d324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 13], 2 - QUAD $0x030d324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 13], 3 - QUAD $0x040d3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 13], 4 - QUAD $0x050d3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 13], 5 - QUAD $0x000000a024b48b4c // mov r14, qword [rsp + 160] - QUAD $0x060d324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 13], 6 - QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] - QUAD $0x070d0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 13], 7 - QUAD $0x080d024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 13], 8 - QUAD $0x090d1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 13], 9 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] - QUAD $0x0a0d024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 13], 10 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] + QUAD $0x030d3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 13], 3 + QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] + QUAD $0x040d0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 13], 4 + QUAD $0x050d124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 13], 5 + QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] + QUAD $0x060d0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 13], 6 + QUAD $0x000000f824b48b48 // mov rsi, qword [rsp + 248] + QUAD $0x070d324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 13], 7 + QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] + QUAD $0x080d324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 13], 8 + QUAD $0x090d024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 13], 9 + QUAD $0x0a0d1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 13], 10 + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x0b0d024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 13], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x0c0d024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 13], 12 - QUAD $0x0d0d0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 13], 13 - QUAD $0x0e0d024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 13], 14 + QUAD $0x0d0d3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 13], 13 + QUAD $0x0000012024b48b4c // mov r14, qword [rsp + 288] + QUAD $0x0e0d324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 13], 14 LONG $0x386de3c4; WORD $0x01c0 // vinserti128 ymm0, ymm2, xmm0, 1 QUAD $0x0003e024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 992], ymm0 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] QUAD $0x0f0d02442071e3c4 // vpinsrb xmm0, xmm1, byte [rdx + rax + 13], 15 - QUAD $0x0000010024ac8b4c // mov r13, qword [rsp + 256] - LONG $0x74b60f42; WORD $0x0e2a // movzx esi, byte [rdx + r13 + 14] + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + LONG $0x0274b60f; BYTE $0x0e // movzx esi, byte [rdx + rax + 14] LONG $0xce6ef9c5 // vmovd xmm1, esi LONG $0x387de3c4; WORD $0x01c3 // vinserti128 ymm0, ymm0, xmm3, 1 QUAD $0x0003c024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 960], ymm0 - QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] + QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] LONG $0x0274b60f; BYTE $0x0e // movzx esi, byte [rdx + rax + 14] LONG $0xc66ef9c5 // vmovd xmm0, esi - QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] QUAD $0x010e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 1 - QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] - QUAD $0x020e0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 14], 2 - LONG $0x24448b4c; BYTE $0x70 // mov r8, qword [rsp + 112] - QUAD $0x030e024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 14], 3 - QUAD $0x000000f0248c8b4c // mov r9, qword [rsp + 240] - QUAD $0x040e0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 14], 4 - QUAD $0x000000f824bc8b48 // mov rdi, qword [rsp + 248] - QUAD $0x050e3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 14], 5 - LONG $0x247c8b4c; BYTE $0x28 // mov r15, qword [rsp + 40] - QUAD $0x060e3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 14], 6 - QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] - QUAD $0x070e0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 14], 7 - QUAD $0x000000c0248c8b48 // mov rcx, qword [rsp + 192] - QUAD $0x080e0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 14], 8 - QUAD $0x090e224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 14], 9 - QUAD $0x000000e0248c8b48 // mov rcx, qword [rsp + 224] - QUAD $0x0a0e0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 14], 10 - LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] - QUAD $0x0b0e0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 14], 11 - QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] - QUAD $0x0c0e324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 14], 12 - QUAD $0x0d0e124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 14], 13 + QUAD $0x0000010824948b4c // mov r10, qword [rsp + 264] + QUAD $0x020e124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 14], 2 + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] + QUAD $0x030e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 3 + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] + QUAD $0x040e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 4 + QUAD $0x000000b824bc8b4c // mov r15, qword [rsp + 184] + QUAD $0x050e3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 14], 5 + QUAD $0x060e224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 14], 6 + QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x070e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 7 + QUAD $0x080e2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 14], 8 + QUAD $0x000000e824ac8b4c // mov r13, qword [rsp + 232] + QUAD $0x090e2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 14], 9 + LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] + QUAD $0x0a0e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 10 + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x0b0e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 11 + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0c0e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 12 + QUAD $0x0d0e1a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 14], 13 + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x0e0e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 14 + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + QUAD $0x0f0e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 15 + QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] + QUAD $0x010e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 14], 1 + LONG $0x245c8b4c; BYTE $0x78 // mov r11, qword [rsp + 120] + QUAD $0x020e1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 14], 2 + QUAD $0x030e3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 14], 3 + QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x040e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 14], 4 + QUAD $0x00000088248c8b4c // mov r9, qword [rsp + 136] + QUAD $0x050e0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 14], 5 + QUAD $0x060e0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 14], 6 + QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] + QUAD $0x070e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 14], 7 + QUAD $0x000000a0249c8b48 // mov rbx, qword [rsp + 160] + QUAD $0x080e1a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 14], 8 + QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] + QUAD $0x090e0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 14], 9 + LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] + QUAD $0x0a0e0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 14], 10 + QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] + QUAD $0x0b0e0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 14], 11 LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] - QUAD $0x0e0e324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 14], 14 - QUAD $0x0f0e1a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 14], 15 - LONG $0x245c8b48; BYTE $0x78 // mov rbx, qword [rsp + 120] - QUAD $0x010e1a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 14], 1 - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] - QUAD $0x020e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 2 - QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] - QUAD $0x030e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 3 - LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] - QUAD $0x040e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 4 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] - QUAD $0x050e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 5 - QUAD $0x060e32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 14], 6 - QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] - QUAD $0x070e12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 14], 7 - QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] - QUAD $0x080e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 8 - QUAD $0x0000009824a48b4c // mov r12, qword [rsp + 152] - QUAD $0x090e22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 14], 9 - QUAD $0x0000014024b48b4c // mov r14, qword [rsp + 320] - QUAD $0x0a0e32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 14], 10 - QUAD $0x000000d824b48b48 // mov rsi, qword [rsp + 216] - QUAD $0x0b0e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 11 - QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] QUAD $0x0c0e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 12 - LONG $0x245c8b4c; BYTE $0x20 // mov r11, qword [rsp + 32] - QUAD $0x0d0e1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 14], 13 - LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] - QUAD $0x0e0e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 14 - LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] - QUAD $0x0f0e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 15 - LONG $0x74b60f42; WORD $0x0f2a // movzx esi, byte [rdx + r13 + 15] + LONG $0x24448b4c; BYTE $0x20 // mov r8, qword [rsp + 32] + QUAD $0x0d0e02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 14], 13 + QUAD $0x0e0e32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 14], 14 + QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] + QUAD $0x0f0e3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 14], 15 + QUAD $0x000000f024b48b4c // mov r14, qword [rsp + 240] + LONG $0x74b60f42; WORD $0x0f32 // movzx esi, byte [rdx + r14 + 15] LONG $0xd66ef9c5 // vmovd xmm2, esi - QUAD $0x010f02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 15], 1 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] - QUAD $0x020f02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 15], 2 - QUAD $0x030f02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 15], 3 - QUAD $0x040f0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 15], 4 - QUAD $0x050f3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 15], 5 - QUAD $0x060f3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 15], 6 - QUAD $0x000000c824ac8b4c // mov r13, qword [rsp + 200] - QUAD $0x070f2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 15], 7 - QUAD $0x000000c024848b4c // mov r8, qword [rsp + 192] - QUAD $0x080f02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 15], 8 - QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] - QUAD $0x090f02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 15], 9 - QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] - QUAD $0x0a0f3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 15], 10 - QUAD $0x0b0f0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 15], 11 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] - QUAD $0x0c0f02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 15], 12 - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] + QUAD $0x010f32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 15], 1 + QUAD $0x020f12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 15], 2 + QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] + QUAD $0x030f32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 15], 3 + LONG $0x24548b4c; BYTE $0x70 // mov r10, qword [rsp + 112] + QUAD $0x040f12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 15], 4 + QUAD $0x050f3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 15], 5 + QUAD $0x060f22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 15], 6 + QUAD $0x000000d024bc8b4c // mov r15, qword [rsp + 208] + QUAD $0x070f3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 15], 7 + QUAD $0x000000e024b48b48 // mov rsi, qword [rsp + 224] + QUAD $0x080f32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 15], 8 + QUAD $0x090f2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 15], 9 + LONG $0x24648b4c; BYTE $0x58 // mov r12, qword [rsp + 88] + QUAD $0x0a0f22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 15], 10 + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x0b0f02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 15], 11 + LONG $0x24748b48; BYTE $0x50 // mov rsi, qword [rsp + 80] + QUAD $0x0c0f32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 15], 12 + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] QUAD $0x0d0f02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 15], 13 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] - QUAD $0x0e0f0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 15], 14 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] - QUAD $0x0f0f02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 15], 15 - QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] + LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] + QUAD $0x0e0f32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 15], 14 + LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + QUAD $0x0f0f32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 15], 15 + QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] LONG $0x0274b60f; BYTE $0x0f // movzx esi, byte [rdx + rax + 15] LONG $0xde6ef9c5 // vmovd xmm3, esi - QUAD $0x010f1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 15], 1 - LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] - QUAD $0x020f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 2 + QUAD $0x000000c024b48b48 // mov rsi, qword [rsp + 192] + QUAD $0x010f325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 15], 1 + QUAD $0x020f1a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 15], 2 + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + QUAD $0x030f325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 15], 3 + QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] + QUAD $0x040f325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 15], 4 + QUAD $0x050f0a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 15], 5 + QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] + QUAD $0x060f325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 15], 6 + QUAD $0x000000f824b48b48 // mov rsi, qword [rsp + 248] + QUAD $0x070f325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 15], 7 + QUAD $0x080f1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 15], 8 QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] - QUAD $0x030f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 3 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] - QUAD $0x040f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 4 - LONG $0x247c8b4c; BYTE $0x60 // mov r15, qword [rsp + 96] - QUAD $0x050f3a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 15], 5 - QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] - QUAD $0x060f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 6 - QUAD $0x070f125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 15], 7 - QUAD $0x0000008824948b4c // mov r10, qword [rsp + 136] - QUAD $0x080f125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 15], 8 - QUAD $0x090f225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 15], 9 - QUAD $0x0a0f325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 15], 10 - QUAD $0x000000d824b48b4c // mov r14, qword [rsp + 216] - QUAD $0x0b0f325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 15], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + QUAD $0x090f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 9 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x0a0f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 10 + QUAD $0x0b0f0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 15], 11 + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x0c0f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 12 - QUAD $0x0d0f1a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 15], 13 - LONG $0x245c8b4c; BYTE $0x48 // mov r11, qword [rsp + 72] - QUAD $0x0e0f1a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 15], 14 - LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] - QUAD $0x0f0f225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 15], 15 + QUAD $0x0d0f025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 15], 13 + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + QUAD $0x0e0f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 14 + QUAD $0x0f0f3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 15], 15 LONG $0x387de3c4; WORD $0x01c1 // vinserti128 ymm0, ymm0, xmm1, 1 QUAD $0x00038024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 896], ymm0 LONG $0x3865e3c4; WORD $0x01c2 // vinserti128 ymm0, ymm3, xmm2, 1 QUAD $0x0003a024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 928], ymm0 - QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] - LONG $0x3274b60f; BYTE $0x10 // movzx esi, byte [rdx + rsi + 16] + LONG $0x74b60f42; WORD $0x1032 // movzx esi, byte [rdx + r14 + 16] LONG $0xc66ef9c5 // vmovd xmm0, esi - QUAD $0x000000e8248c8b4c // mov r9, qword [rsp + 232] - QUAD $0x01100a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 16], 1 - QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] - QUAD $0x021032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 2 - LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] - QUAD $0x031032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 3 - QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] - QUAD $0x041032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 4 - QUAD $0x000000f824b48b48 // mov rsi, qword [rsp + 248] - QUAD $0x051032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 5 - LONG $0x24748b48; BYTE $0x28 // mov rsi, qword [rsp + 40] - QUAD $0x061032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 6 - QUAD $0x07102a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 16], 7 - QUAD $0x081002442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 16], 8 - QUAD $0x000000b824b48b48 // mov rsi, qword [rsp + 184] - QUAD $0x091032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 9 - QUAD $0x0a103a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 16], 10 - LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] - QUAD $0x0b1032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 11 - QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] - QUAD $0x0c1032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 12 - QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] + LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] + QUAD $0x01100a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 16], 1 + QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] + QUAD $0x021002442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 16], 2 + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] + QUAD $0x031002442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 16], 3 + QUAD $0x041012442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 16], 4 + QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] + QUAD $0x051002442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 16], 5 + QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] + QUAD $0x061002442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 16], 6 + QUAD $0x07103a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 16], 7 + QUAD $0x000000e0249c8b4c // mov r11, qword [rsp + 224] + QUAD $0x08101a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 16], 8 + QUAD $0x09102a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 16], 9 + QUAD $0x0a1022442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 16], 10 + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x0b1002442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 16], 11 + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0c1002442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 16], 12 + LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] QUAD $0x0d1032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 13 - QUAD $0x0e100a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 16], 14 - LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] - QUAD $0x0f100a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 16], 15 - QUAD $0x00000108249c8b48 // mov rbx, qword [rsp + 264] + LONG $0x24748b4c; BYTE $0x40 // mov r14, qword [rsp + 64] + QUAD $0x0e1032442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 16], 14 + LONG $0x24448b4c; BYTE $0x60 // mov r8, qword [rsp + 96] + QUAD $0x0f1002442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 16], 15 + QUAD $0x00000100249c8b48 // mov rbx, qword [rsp + 256] LONG $0x1a74b60f; BYTE $0x10 // movzx esi, byte [rdx + rbx + 16] LONG $0xce6ef9c5 // vmovd xmm1, esi - LONG $0x24448b4c; BYTE $0x78 // mov r8, qword [rsp + 120] - QUAD $0x0110024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 16], 1 - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] + QUAD $0x000000c024948b4c // mov r10, qword [rsp + 192] + QUAD $0x0110124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 16], 1 + LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] QUAD $0x0210324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 2 - QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] - QUAD $0x0310324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 3 - LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] + LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] + QUAD $0x03103a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 16], 3 + QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] QUAD $0x0410324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 4 + QUAD $0x0000008824bc8b4c // mov r15, qword [rsp + 136] QUAD $0x05103a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 16], 5 - QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] + QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] QUAD $0x0610324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 6 - QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] - QUAD $0x0710324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 7 - QUAD $0x0810124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 16], 8 - QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] - QUAD $0x09103a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 16], 9 - QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] + QUAD $0x000000f8248c8b4c // mov r9, qword [rsp + 248] + QUAD $0x07100a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 16], 7 + QUAD $0x000000a024ac8b4c // mov r13, qword [rsp + 160] + QUAD $0x08102a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 16], 8 + QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] + QUAD $0x0910324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 9 + LONG $0x24748b48; BYTE $0x28 // mov rsi, qword [rsp + 40] QUAD $0x0a10324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 10 - QUAD $0x0b10324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 16], 11 - QUAD $0x0c10024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 16], 12 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - QUAD $0x0d10024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 16], 13 - QUAD $0x0e101a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 16], 14 - QUAD $0x0f10224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 16], 15 - QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] - LONG $0x0274b60f; BYTE $0x11 // movzx esi, byte [rdx + rax + 17] - LONG $0xd66ef9c5 // vmovd xmm2, esi - QUAD $0x01110a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 17], 1 - QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] - QUAD $0x02111a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 17], 2 - LONG $0x24548b4c; BYTE $0x70 // mov r10, qword [rsp + 112] - QUAD $0x031112542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 17], 3 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] - QUAD $0x041102542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 17], 4 - QUAD $0x000000f824ac8b4c // mov r13, qword [rsp + 248] - QUAD $0x05112a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 17], 5 - LONG $0x244c8b4c; BYTE $0x28 // mov r9, qword [rsp + 40] - QUAD $0x06110a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 17], 6 - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] - QUAD $0x071102542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 17], 7 - QUAD $0x000000c024b48b4c // mov r14, qword [rsp + 192] - QUAD $0x081132542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 17], 8 - QUAD $0x000000b824bc8b4c // mov r15, qword [rsp + 184] - QUAD $0x09113a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 17], 9 - QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] - QUAD $0x0a1102542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 17], 10 - LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] - QUAD $0x0b1102542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 17], 11 QUAD $0x0000008024a48b4c // mov r12, qword [rsp + 128] - QUAD $0x0c1122542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 17], 12 - QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] - QUAD $0x0d1132542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 17], 13 + QUAD $0x0b10224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 16], 11 LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] - QUAD $0x0e1132542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 17], 14 - QUAD $0x0f110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 15 + QUAD $0x0c10324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 12 + LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] + QUAD $0x0d10324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 13 + QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] + QUAD $0x0e10324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 14 + QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] + QUAD $0x0f10324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 15 + QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] + LONG $0x3274b60f; BYTE $0x11 // movzx esi, byte [rdx + rsi + 17] + LONG $0xd66ef9c5 // vmovd xmm2, esi + QUAD $0x01110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 1 + QUAD $0x00000108248c8b48 // mov rcx, qword [rsp + 264] + QUAD $0x02110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 2 + QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] + QUAD $0x03110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 3 + LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] + QUAD $0x04110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 4 + QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] + QUAD $0x05110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 5 + QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] + QUAD $0x06110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 6 + QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] + QUAD $0x07110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 7 + QUAD $0x08111a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 17], 8 + QUAD $0x000000e8248c8b48 // mov rcx, qword [rsp + 232] + QUAD $0x09110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 9 + LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] + QUAD $0x0a110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 10 + QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] + QUAD $0x0b110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 11 + QUAD $0x0c1102542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 17], 12 + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0d1102542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 17], 13 + QUAD $0x0e1132542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 17], 14 + QUAD $0x0f1102542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 17], 15 LONG $0x1a74b60f; BYTE $0x11 // movzx esi, byte [rdx + rbx + 17] LONG $0xde6ef9c5 // vmovd xmm3, esi - QUAD $0x0111025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 17], 1 - LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] - QUAD $0x02110a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 17], 2 + QUAD $0x0111125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 17], 1 + LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] + QUAD $0x0211025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 17], 2 + QUAD $0x03113a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 17], 3 + QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] + QUAD $0x04113a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 17], 4 + QUAD $0x05113a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 17], 5 + QUAD $0x0000009824bc8b4c // mov r15, qword [rsp + 152] + QUAD $0x06113a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 17], 6 + QUAD $0x07110a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 17], 7 + QUAD $0x08112a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 17], 8 QUAD $0x000000b024848b4c // mov r8, qword [rsp + 176] - QUAD $0x0311025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 17], 3 - LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] - QUAD $0x0411325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 4 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] - QUAD $0x0511325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 5 - QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] - QUAD $0x0611325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 6 - QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] - QUAD $0x0711325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 7 - QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] - QUAD $0x0811325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 8 - QUAD $0x09113a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 17], 9 - QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] - QUAD $0x0a113a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 17], 10 - QUAD $0x000000d824b48b48 // mov rsi, qword [rsp + 216] - QUAD $0x0b11325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 11 - QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] - QUAD $0x0c11325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 12 - LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] - QUAD $0x0d11325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 13 - LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] - QUAD $0x0e11325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 14 + QUAD $0x0911025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 17], 9 + LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] + QUAD $0x0a110a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 17], 10 + QUAD $0x0b11225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 17], 11 + LONG $0x244c8b4c; BYTE $0x30 // mov r9, qword [rsp + 48] + QUAD $0x0c110a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 17], 12 + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x0d11025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 17], 13 + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + QUAD $0x0e11025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 17], 14 LONG $0x3875e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm1, xmm0, 1 QUAD $0x00036024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 864], ymm0 - LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] - QUAD $0x0f1132442061e3c4 // vpinsrb xmm0, xmm3, byte [rdx + rsi + 17], 15 + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0f1102442061e3c4 // vpinsrb xmm0, xmm3, byte [rdx + rax + 17], 15 LONG $0x387de3c4; WORD $0x01c2 // vinserti128 ymm0, ymm0, xmm2, 1 QUAD $0x00034024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 832], ymm0 - QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] - LONG $0x3274b60f; BYTE $0x12 // movzx esi, byte [rdx + rsi + 18] + QUAD $0x000000f0249c8b48 // mov rbx, qword [rsp + 240] + LONG $0x1a74b60f; BYTE $0x12 // movzx esi, byte [rdx + rbx + 18] LONG $0xc66ef9c5 // vmovd xmm0, esi - QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] - QUAD $0x011232442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 18], 1 - QUAD $0x02121a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 18], 2 + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + QUAD $0x011202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 1 + QUAD $0x0000010824b48b4c // mov r14, qword [rsp + 264] + QUAD $0x021232442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 18], 2 + QUAD $0x000000c824948b4c // mov r10, qword [rsp + 200] QUAD $0x031212442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 18], 3 - QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] - QUAD $0x041232442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 18], 4 - QUAD $0x05122a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 18], 5 - QUAD $0x06120a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 18], 6 - QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] - QUAD $0x071232442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 18], 7 - QUAD $0x081232442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 18], 8 - QUAD $0x09123a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 18], 9 - QUAD $0x000000e024ac8b4c // mov r13, qword [rsp + 224] - QUAD $0x0a122a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 18], 10 + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] + QUAD $0x041202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 4 + QUAD $0x000000b8249c8b4c // mov r11, qword [rsp + 184] + QUAD $0x05121a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 18], 5 + QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] + QUAD $0x061202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 6 + QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x071202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 7 + QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] + QUAD $0x081202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 8 + QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] + QUAD $0x091202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 9 + LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] + QUAD $0x0a1202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 10 + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] QUAD $0x0b1202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 11 - QUAD $0x0c1222442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 18], 12 - QUAD $0x000000d0248c8b4c // mov r9, qword [rsp + 208] - QUAD $0x0d120a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 18], 13 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] - QUAD $0x0e1202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 14 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] - QUAD $0x0f1202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 15 - LONG $0x1a74b60f; BYTE $0x12 // movzx esi, byte [rdx + rbx + 18] - LONG $0xce6ef9c5 // vmovd xmm1, esi - LONG $0x24748b4c; BYTE $0x78 // mov r14, qword [rsp + 120] - QUAD $0x0112324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 18], 1 - QUAD $0x02120a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 18], 2 - QUAD $0x0312024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 18], 3 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] - QUAD $0x0412024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 18], 4 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] - QUAD $0x0512024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 18], 5 - QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] - QUAD $0x0612024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 18], 6 - QUAD $0x00000090249c8b4c // mov r11, qword [rsp + 144] - QUAD $0x07121a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 18], 7 - QUAD $0x00000088248c8b48 // mov rcx, qword [rsp + 136] - QUAD $0x08120a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 18], 8 - QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] - QUAD $0x0912024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 18], 9 - QUAD $0x0a123a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 18], 10 - QUAD $0x000000d824b48b48 // mov rsi, qword [rsp + 216] - QUAD $0x0b12324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 18], 11 - QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] - QUAD $0x0c12324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 18], 12 - LONG $0x24648b4c; BYTE $0x20 // mov r12, qword [rsp + 32] - QUAD $0x0d12224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 18], 13 + LONG $0x24748b48; BYTE $0x50 // mov rsi, qword [rsp + 80] + QUAD $0x0c1232442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 18], 12 LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] - QUAD $0x0e12324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 18], 14 - LONG $0x24548b4c; BYTE $0x38 // mov r10, qword [rsp + 56] - QUAD $0x0f12124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 18], 15 - QUAD $0x0000010024bc8b4c // mov r15, qword [rsp + 256] - LONG $0x74b60f42; WORD $0x133a // movzx esi, byte [rdx + r15 + 19] - LONG $0xd66ef9c5 // vmovd xmm2, esi - QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] - QUAD $0x011332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 1 - QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] - QUAD $0x021332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 2 - LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] - QUAD $0x031332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 3 - QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] - QUAD $0x041332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 4 - QUAD $0x000000f824b48b48 // mov rsi, qword [rsp + 248] - QUAD $0x051332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 5 - LONG $0x24748b48; BYTE $0x28 // mov rsi, qword [rsp + 40] - QUAD $0x061332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 6 - QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] - QUAD $0x071332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 7 + QUAD $0x0d1232442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 18], 13 + LONG $0x24648b4c; BYTE $0x40 // mov r12, qword [rsp + 64] + QUAD $0x0e1222442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 18], 14 + LONG $0x246c8b4c; BYTE $0x60 // mov r13, qword [rsp + 96] + QUAD $0x0f122a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 18], 15 + QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] + LONG $0x3274b60f; BYTE $0x12 // movzx esi, byte [rdx + rsi + 18] + LONG $0xce6ef9c5 // vmovd xmm1, esi QUAD $0x000000c024b48b48 // mov rsi, qword [rsp + 192] - QUAD $0x081332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 8 - QUAD $0x000000b824b48b48 // mov rsi, qword [rsp + 184] - QUAD $0x091332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 9 - QUAD $0x0a132a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 19], 10 - LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] - QUAD $0x0b1332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 11 - QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] - QUAD $0x0c1332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 12 - QUAD $0x0d130a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 19], 13 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] - QUAD $0x0e133a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 19], 14 - LONG $0x24448b4c; BYTE $0x50 // mov r8, qword [rsp + 80] - QUAD $0x0f1302542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 19], 15 + QUAD $0x0112324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 18], 1 + LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] + QUAD $0x0212324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 18], 2 + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + QUAD $0x0312324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 18], 3 + QUAD $0x04123a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 18], 4 + QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] + QUAD $0x0512324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 18], 5 + QUAD $0x06123a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 18], 6 + QUAD $0x000000f824bc8b4c // mov r15, qword [rsp + 248] + QUAD $0x07123a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 18], 7 + QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] + QUAD $0x0812324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 18], 8 + QUAD $0x0912024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 18], 9 + QUAD $0x0a120a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 18], 10 + QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] + QUAD $0x0b120a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 18], 11 + QUAD $0x0c120a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 18], 12 + LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + QUAD $0x0d120a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 18], 13 + QUAD $0x00000120248c8b48 // mov rcx, qword [rsp + 288] + QUAD $0x0e120a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 18], 14 + QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] + QUAD $0x0f120a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 18], 15 LONG $0x1a74b60f; BYTE $0x13 // movzx esi, byte [rdx + rbx + 19] + LONG $0xd66ef9c5 // vmovd xmm2, esi + LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] + QUAD $0x01130a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 19], 1 + QUAD $0x021332542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 19], 2 + QUAD $0x031312542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 19], 3 + LONG $0x244c8b4c; BYTE $0x70 // mov r9, qword [rsp + 112] + QUAD $0x04130a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 19], 4 + QUAD $0x05131a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 19], 5 + QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] + QUAD $0x06130a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 19], 6 + QUAD $0x000000d024848b4c // mov r8, qword [rsp + 208] + QUAD $0x071302542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 19], 7 + QUAD $0x000000e024b48b4c // mov r14, qword [rsp + 224] + QUAD $0x081332542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 19], 8 + QUAD $0x000000e824948b4c // mov r10, qword [rsp + 232] + QUAD $0x091312542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 19], 9 + LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] + QUAD $0x0a1332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 10 + QUAD $0x0b1302542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 19], 11 + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0c1302542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 19], 12 + LONG $0x245c8b48; BYTE $0x48 // mov rbx, qword [rsp + 72] + QUAD $0x0d131a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 19], 13 + QUAD $0x0e1322542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 19], 14 + QUAD $0x0f132a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 19], 15 + QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] + LONG $0x0274b60f; BYTE $0x13 // movzx esi, byte [rdx + rax + 19] LONG $0xde6ef9c5 // vmovd xmm3, esi - QUAD $0x0113325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 19], 1 - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] - QUAD $0x0213325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 19], 2 - QUAD $0x000000b0249c8b48 // mov rbx, qword [rsp + 176] - QUAD $0x03131a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 19], 3 - LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] - QUAD $0x0413325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 19], 4 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] - QUAD $0x0513325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 19], 5 - QUAD $0x000000a024ac8b4c // mov r13, qword [rsp + 160] - QUAD $0x06132a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 19], 6 - QUAD $0x07131a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 19], 7 - QUAD $0x08130a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 19], 8 + QUAD $0x000000c0249c8b4c // mov r11, qword [rsp + 192] + QUAD $0x01131a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 19], 1 + LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] + QUAD $0x0213025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 2 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x0313025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 3 + QUAD $0x04133a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 19], 4 + QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] + QUAD $0x0513025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 5 + QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] + QUAD $0x06133a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 19], 6 + QUAD $0x07133a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 19], 7 + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] + QUAD $0x0813025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 8 + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x0913025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 9 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0a13025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 10 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x0b13025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 11 - QUAD $0x00000120248c8b4c // mov r9, qword [rsp + 288] - QUAD $0x0c130a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 19], 12 - QUAD $0x0d13225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 19], 13 - LONG $0x24748b4c; BYTE $0x48 // mov r14, qword [rsp + 72] - QUAD $0x0e13325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 19], 14 - QUAD $0x0f13125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 19], 15 + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + QUAD $0x0c13025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 12 + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x0d13025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 13 + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + QUAD $0x0e13025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 14 + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0f13025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 15 LONG $0x3875e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm1, xmm0, 1 QUAD $0x00030024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 768], ymm0 LONG $0x3865e3c4; WORD $0x01c2 // vinserti128 ymm0, ymm3, xmm2, 1 QUAD $0x00032024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 800], ymm0 - LONG $0x74b60f42; WORD $0x143a // movzx esi, byte [rdx + r15 + 20] + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + LONG $0x0274b60f; BYTE $0x14 // movzx esi, byte [rdx + rax + 20] LONG $0xc66ef9c5 // vmovd xmm0, esi - QUAD $0x000000e8249c8b4c // mov r11, qword [rsp + 232] - QUAD $0x01141a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 20], 1 - QUAD $0x000000a824a48b4c // mov r12, qword [rsp + 168] - QUAD $0x021422442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 20], 2 - LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] - QUAD $0x031402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 3 - QUAD $0x000000f0248c8b48 // mov rcx, qword [rsp + 240] - QUAD $0x04140a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 20], 4 - QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] - QUAD $0x051412442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 20], 5 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] - QUAD $0x061402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 6 + LONG $0x24648b4c; BYTE $0x68 // mov r12, qword [rsp + 104] + QUAD $0x011422442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 20], 1 + QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] + QUAD $0x021402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 2 QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] - QUAD $0x071402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 7 - QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] - QUAD $0x081402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 8 + QUAD $0x031402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 3 + QUAD $0x04140a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 20], 4 QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] - QUAD $0x091402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 9 - QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] - QUAD $0x0a1402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 10 + QUAD $0x051402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 5 + QUAD $0x06140a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 20], 6 + QUAD $0x071402442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 20], 7 + QUAD $0x081432442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 20], 8 + QUAD $0x091412442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 20], 9 LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] - QUAD $0x0b1402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 11 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] - QUAD $0x0c1402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 12 - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] - QUAD $0x0d1402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 13 - QUAD $0x0e143a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 20], 14 - QUAD $0x0f1402442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 20], 15 - QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] - LONG $0x0274b60f; BYTE $0x14 // movzx esi, byte [rdx + rax + 20] + QUAD $0x0a1402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 10 + QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] + QUAD $0x0b140a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 20], 11 + LONG $0x246c8b4c; BYTE $0x50 // mov r13, qword [rsp + 80] + QUAD $0x0c142a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 20], 12 + QUAD $0x0d141a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 20], 13 + LONG $0x245c8b48; BYTE $0x40 // mov rbx, qword [rsp + 64] + QUAD $0x0e141a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 20], 14 + LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] + QUAD $0x0f140a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 20], 15 + QUAD $0x00000100248c8b4c // mov r9, qword [rsp + 256] + LONG $0x74b60f42; WORD $0x140a // movzx esi, byte [rdx + r9 + 20] LONG $0xce6ef9c5 // vmovd xmm1, esi - LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] - QUAD $0x0114024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 20], 1 - LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] - QUAD $0x0214024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 20], 2 - QUAD $0x03141a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 20], 3 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] - QUAD $0x0414024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 20], 4 - LONG $0x247c8b4c; BYTE $0x60 // mov r15, qword [rsp + 96] - QUAD $0x05143a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 20], 5 - QUAD $0x06142a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 20], 6 - QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] + QUAD $0x01141a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 20], 1 + LONG $0x24448b4c; BYTE $0x78 // mov r8, qword [rsp + 120] + QUAD $0x0214024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 20], 2 + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] + QUAD $0x03143a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 20], 3 + QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] + QUAD $0x04140a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 20], 4 + QUAD $0x00000088248c8b48 // mov rcx, qword [rsp + 136] + QUAD $0x05140a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 20], 5 + QUAD $0x06143a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 20], 6 + QUAD $0x000000f824b48b48 // mov rsi, qword [rsp + 248] QUAD $0x0714324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 20], 7 - QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] + QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] QUAD $0x0814324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 20], 8 - QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] + QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] QUAD $0x0914324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 20], 9 - QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] - QUAD $0x0a14324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 20], 10 - QUAD $0x000000d824848b4c // mov r8, qword [rsp + 216] - QUAD $0x0b14024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 20], 11 - QUAD $0x0c140a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 20], 12 - LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] - QUAD $0x0d142a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 20], 13 - QUAD $0x0e14324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 20], 14 - LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] - QUAD $0x0f14324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 20], 15 - QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] + LONG $0x24548b4c; BYTE $0x28 // mov r10, qword [rsp + 40] + QUAD $0x0a14124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 20], 10 + QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] + QUAD $0x0b14324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 20], 11 + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + QUAD $0x0c14324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 20], 12 + LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] + QUAD $0x0d143a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 20], 13 + QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] + QUAD $0x0e14324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 20], 14 + QUAD $0x0000014024b48b4c // mov r14, qword [rsp + 320] + QUAD $0x0f14324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 20], 15 + QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] LONG $0x3274b60f; BYTE $0x15 // movzx esi, byte [rdx + rsi + 21] LONG $0xd66ef9c5 // vmovd xmm2, esi - QUAD $0x01151a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 21], 1 - QUAD $0x021522542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 21], 2 - LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] - QUAD $0x031532542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 21], 3 - QUAD $0x04150a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 21], 4 - QUAD $0x051512542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 21], 5 - LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] - QUAD $0x06153a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 21], 6 + QUAD $0x011522542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 21], 1 + QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] + QUAD $0x021532542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 21], 2 QUAD $0x000000c8249c8b4c // mov r11, qword [rsp + 200] - QUAD $0x07151a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 21], 7 - QUAD $0x000000c024a48b4c // mov r12, qword [rsp + 192] - QUAD $0x081522542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 21], 8 - QUAD $0x000000b824948b4c // mov r10, qword [rsp + 184] - QUAD $0x091512542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 21], 9 - QUAD $0x000000e0248c8b48 // mov rcx, qword [rsp + 224] - QUAD $0x0a150a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 21], 10 - LONG $0x24748b4c; BYTE $0x58 // mov r14, qword [rsp + 88] - QUAD $0x0b1532542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 21], 11 - QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] - QUAD $0x0c150a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 21], 12 - QUAD $0x000000d0249c8b48 // mov rbx, qword [rsp + 208] - QUAD $0x0d151a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 21], 13 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] - QUAD $0x0e150a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 21], 14 - LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] - QUAD $0x0f150a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 21], 15 - QUAD $0x00000108248c8b48 // mov rcx, qword [rsp + 264] - LONG $0x0a74b60f; BYTE $0x15 // movzx esi, byte [rdx + rcx + 21] + QUAD $0x03151a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 21], 3 + LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] + QUAD $0x041532542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 21], 4 + QUAD $0x000000b824b48b48 // mov rsi, qword [rsp + 184] + QUAD $0x051532542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 21], 5 + QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] + QUAD $0x061532542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 21], 6 + QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] + QUAD $0x071532542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 21], 7 + QUAD $0x000000e024b48b48 // mov rsi, qword [rsp + 224] + QUAD $0x081532542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 21], 8 + QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] + QUAD $0x091532542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 21], 9 + QUAD $0x0a1502542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 21], 10 + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x0b1502542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 21], 11 + QUAD $0x0c152a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 21], 12 + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0d1502542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 21], 13 + QUAD $0x0e151a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 21], 14 + LONG $0x246c8b4c; BYTE $0x60 // mov r13, qword [rsp + 96] + QUAD $0x0f152a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 21], 15 + LONG $0x74b60f42; WORD $0x150a // movzx esi, byte [rdx + r9 + 21] LONG $0xde6ef9c5 // vmovd xmm3, esi - LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] - QUAD $0x01150a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 21], 1 - LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] - QUAD $0x02150a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 21], 2 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] - QUAD $0x03150a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 21], 3 - QUAD $0x0415025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 4 - QUAD $0x05153a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 21], 5 - QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] - QUAD $0x0615025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 6 - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] - QUAD $0x07153a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 21], 7 - QUAD $0x00000088248c8b48 // mov rcx, qword [rsp + 136] - QUAD $0x08150a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 21], 8 + QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] + QUAD $0x0115025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 1 + QUAD $0x0215025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 21], 2 + QUAD $0x03153a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 21], 3 + QUAD $0x000000a8248c8b4c // mov r9, qword [rsp + 168] + QUAD $0x04150a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 21], 4 + QUAD $0x05150a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 21], 5 QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] - QUAD $0x0915025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 9 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] - QUAD $0x0a15025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 10 - QUAD $0x0b15025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 21], 11 - QUAD $0x0c150a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 21], 12 - QUAD $0x0d152a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 21], 13 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] - QUAD $0x0e15025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 14 + QUAD $0x0615025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 6 + QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] + QUAD $0x0715025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 7 + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] + QUAD $0x0815025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 8 + QUAD $0x000000b024a48b4c // mov r12, qword [rsp + 176] + QUAD $0x0915225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 21], 9 + QUAD $0x0a15125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 21], 10 + QUAD $0x00000080249c8b48 // mov rbx, qword [rsp + 128] + QUAD $0x0b151a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 21], 11 + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] + QUAD $0x0c150a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 21], 12 + QUAD $0x0d153a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 21], 13 + QUAD $0x00000120248c8b48 // mov rcx, qword [rsp + 288] + QUAD $0x0e150a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 21], 14 LONG $0x3875e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm1, xmm0, 1 QUAD $0x0002c024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 704], ymm0 - LONG $0x24448b4c; BYTE $0x38 // mov r8, qword [rsp + 56] - QUAD $0x0f1502442061a3c4 // vpinsrb xmm0, xmm3, byte [rdx + r8 + 21], 15 + QUAD $0x0f1532442061a3c4 // vpinsrb xmm0, xmm3, byte [rdx + r14 + 21], 15 LONG $0x387de3c4; WORD $0x01c2 // vinserti128 ymm0, ymm0, xmm2, 1 QUAD $0x0002e024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 736], ymm0 - QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] - LONG $0x0274b60f; BYTE $0x16 // movzx esi, byte [rdx + rax + 22] + QUAD $0x000000f024948b4c // mov r10, qword [rsp + 240] + LONG $0x74b60f42; WORD $0x1612 // movzx esi, byte [rdx + r10 + 22] LONG $0xc66ef9c5 // vmovd xmm0, esi - QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] - QUAD $0x011632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 1 - QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] - QUAD $0x021632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 2 - LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] - QUAD $0x031632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 3 - QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] - QUAD $0x041632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 4 - QUAD $0x000000f824ac8b4c // mov r13, qword [rsp + 248] - QUAD $0x05162a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 22], 5 - QUAD $0x06163a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 22], 6 + LONG $0x247c8b4c; BYTE $0x68 // mov r15, qword [rsp + 104] + QUAD $0x01163a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 22], 1 + QUAD $0x0000010824848b4c // mov r8, qword [rsp + 264] + QUAD $0x021602442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 22], 2 + QUAD $0x03161a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 22], 3 + LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] + QUAD $0x04160a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 22], 4 + QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] + QUAD $0x05160a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 22], 5 + QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] + QUAD $0x061632442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 22], 6 + QUAD $0x000000d0249c8b4c // mov r11, qword [rsp + 208] QUAD $0x07161a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 22], 7 - QUAD $0x081622442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 22], 8 - QUAD $0x091612442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 22], 9 - QUAD $0x000000e024a48b4c // mov r12, qword [rsp + 224] - QUAD $0x0a1622442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 22], 10 - QUAD $0x0b1632442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 22], 11 - QUAD $0x00000080249c8b4c // mov r11, qword [rsp + 128] - QUAD $0x0c161a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 22], 12 - QUAD $0x0d161a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 22], 13 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] - QUAD $0x0e1632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 14 + QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] + QUAD $0x08163a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 22], 8 + QUAD $0x000000e8248c8b48 // mov rcx, qword [rsp + 232] + QUAD $0x09160a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 22], 9 + LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] + QUAD $0x0a160a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 22], 10 + QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] + QUAD $0x0b160a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 22], 11 LONG $0x24748b48; BYTE $0x50 // mov rsi, qword [rsp + 80] - QUAD $0x0f1632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 15 - QUAD $0x0000010824948b4c // mov r10, qword [rsp + 264] - LONG $0x74b60f42; WORD $0x1612 // movzx esi, byte [rdx + r10 + 22] + QUAD $0x0c1632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 12 + LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] + QUAD $0x0d1632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 13 + LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] + QUAD $0x0e1632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 14 + QUAD $0x0f162a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 22], 15 + QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] + LONG $0x3274b60f; BYTE $0x16 // movzx esi, byte [rdx + rsi + 22] LONG $0xce6ef9c5 // vmovd xmm1, esi - LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] + QUAD $0x000000c024b48b48 // mov rsi, qword [rsp + 192] QUAD $0x0116324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 22], 1 - LONG $0x245c8b48; BYTE $0x40 // mov rbx, qword [rsp + 64] - QUAD $0x02161a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 22], 2 - QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] + LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] + QUAD $0x0216324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 22], 2 + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] QUAD $0x0316324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 22], 3 - LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] - QUAD $0x0416324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 22], 4 - LONG $0x24748b4c; BYTE $0x60 // mov r14, qword [rsp + 96] - QUAD $0x0516324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 22], 5 - QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] + QUAD $0x04160a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 22], 4 + QUAD $0x0000008824ac8b4c // mov r13, qword [rsp + 136] + QUAD $0x05162a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 22], 5 + QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] QUAD $0x0616324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 22], 6 - QUAD $0x07163a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 22], 7 - QUAD $0x08160a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 22], 8 - QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] - QUAD $0x09160a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 22], 9 - QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] - QUAD $0x0a160a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 22], 10 - QUAD $0x000000d8248c8b4c // mov r9, qword [rsp + 216] - QUAD $0x0b160a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 22], 11 - QUAD $0x00000120248c8b48 // mov rcx, qword [rsp + 288] - QUAD $0x0c160a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 22], 12 - LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] - QUAD $0x0d160a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 22], 13 - LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] - QUAD $0x0e163a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 22], 14 - QUAD $0x0f16024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 22], 15 - LONG $0x0274b60f; BYTE $0x17 // movzx esi, byte [rdx + rax + 23] + QUAD $0x000000f8248c8b4c // mov r9, qword [rsp + 248] + QUAD $0x07160a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 22], 7 + QUAD $0x0816024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 22], 8 + QUAD $0x0916224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 22], 9 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x0a16024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 22], 10 + QUAD $0x0b161a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 22], 11 + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + QUAD $0x0c16224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 22], 12 + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x0d16024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 22], 13 + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + QUAD $0x0e16024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 22], 14 + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0f16024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 22], 15 + LONG $0x74b60f42; WORD $0x1712 // movzx esi, byte [rdx + r10 + 23] LONG $0xd66ef9c5 // vmovd xmm2, esi - QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] - QUAD $0x011702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 23], 1 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] - QUAD $0x021702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 23], 2 - LONG $0x247c8b4c; BYTE $0x70 // mov r15, qword [rsp + 112] - QUAD $0x03173a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 23], 3 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + QUAD $0x01173a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 23], 1 + QUAD $0x021702542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 23], 2 + QUAD $0x000000c824948b4c // mov r10, qword [rsp + 200] + QUAD $0x031712542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 23], 3 + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] QUAD $0x041702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 23], 4 - QUAD $0x05172a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 23], 5 - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] - QUAD $0x06170a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 23], 6 - QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] - QUAD $0x07170a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 23], 7 - QUAD $0x000000c0248c8b48 // mov rcx, qword [rsp + 192] - QUAD $0x08170a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 23], 8 - QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] - QUAD $0x09170a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 23], 9 - QUAD $0x0a1722542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 23], 10 - LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] + QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] + QUAD $0x051702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 23], 5 + QUAD $0x061732542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 23], 6 + QUAD $0x07171a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 23], 7 + QUAD $0x08173a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 23], 8 + QUAD $0x000000e824b48b4c // mov r14, qword [rsp + 232] + QUAD $0x091732542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 23], 9 + LONG $0x247c8b48; BYTE $0x58 // mov rdi, qword [rsp + 88] + QUAD $0x0a173a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 23], 10 QUAD $0x0b170a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 23], 11 - QUAD $0x0c171a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 23], 12 - QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] - QUAD $0x0d170a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 23], 13 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] - QUAD $0x0e170a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 23], 14 - LONG $0x24648b4c; BYTE $0x50 // mov r12, qword [rsp + 80] - QUAD $0x0f1722542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 23], 15 - LONG $0x74b60f42; WORD $0x1712 // movzx esi, byte [rdx + r10 + 23] + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0c1702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 23], 12 + LONG $0x245c8b48; BYTE $0x48 // mov rbx, qword [rsp + 72] + QUAD $0x0d171a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 23], 13 + LONG $0x245c8b4c; BYTE $0x40 // mov r11, qword [rsp + 64] + QUAD $0x0e171a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 23], 14 + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + QUAD $0x0f1702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 23], 15 + QUAD $0x0000010024bc8b4c // mov r15, qword [rsp + 256] + LONG $0x74b60f42; WORD $0x173a // movzx esi, byte [rdx + r15 + 23] LONG $0xde6ef9c5 // vmovd xmm3, esi - LONG $0x245c8b4c; BYTE $0x78 // mov r11, qword [rsp + 120] - QUAD $0x01171a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 23], 1 - QUAD $0x02171a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 23], 2 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] - QUAD $0x03170a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 23], 3 - LONG $0x245c8b48; BYTE $0x68 // mov rbx, qword [rsp + 104] - QUAD $0x04171a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 23], 4 - QUAD $0x0517325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 23], 5 - QUAD $0x000000a024ac8b4c // mov r13, qword [rsp + 160] + QUAD $0x000000c0248c8b48 // mov rcx, qword [rsp + 192] + QUAD $0x01170a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 23], 1 + LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] + QUAD $0x0217025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 23], 2 + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + QUAD $0x0317325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 3 + QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] + QUAD $0x0417325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 4 + QUAD $0x05172a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 23], 5 + QUAD $0x0000009824ac8b4c // mov r13, qword [rsp + 152] QUAD $0x06172a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 23], 6 - QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] - QUAD $0x0717325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 7 - QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] + QUAD $0x07170a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 23], 7 + QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] QUAD $0x0817325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 8 - QUAD $0x0000009824848b4c // mov r8, qword [rsp + 152] + QUAD $0x000000b024848b4c // mov r8, qword [rsp + 176] QUAD $0x0917025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 23], 9 - QUAD $0x0000014024948b4c // mov r10, qword [rsp + 320] - QUAD $0x0a17125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 23], 10 - QUAD $0x0b170a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 23], 11 + LONG $0x24748b48; BYTE $0x28 // mov rsi, qword [rsp + 40] + QUAD $0x0a17325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 10 + QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] + QUAD $0x0b17325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 11 + QUAD $0x0c17225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 23], 12 + LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] + QUAD $0x0d17325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 13 QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] - QUAD $0x0c17325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 12 - LONG $0x24748b4c; BYTE $0x20 // mov r14, qword [rsp + 32] - QUAD $0x0d17325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 23], 13 - QUAD $0x0e173a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 23], 14 - LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + QUAD $0x0e17325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 14 + QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] QUAD $0x0f17325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 15 LONG $0x387563c4; WORD $0x01d0 // vinserti128 ymm10, ymm1, xmm0, 1 LONG $0x3865e3c4; WORD $0x01c2 // vinserti128 ymm0, ymm3, xmm2, 1 QUAD $0x0002a024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 672], ymm0 - QUAD $0x00000100248c8b4c // mov r9, qword [rsp + 256] - LONG $0x74b60f42; WORD $0x180a // movzx esi, byte [rdx + r9 + 24] + QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] + LONG $0x3274b60f; BYTE $0x18 // movzx esi, byte [rdx + rsi + 24] LONG $0xc66ef9c5 // vmovd xmm0, esi - QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] + LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] QUAD $0x011832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 1 - QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] + QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] QUAD $0x021832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 2 - QUAD $0x03183a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 24], 3 - QUAD $0x041802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 24], 4 - QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] - QUAD $0x051802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 24], 5 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] - QUAD $0x061802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 24], 6 - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] - QUAD $0x071802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 24], 7 - QUAD $0x000000c024bc8b48 // mov rdi, qword [rsp + 192] - QUAD $0x08183a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 24], 8 + QUAD $0x031812442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 24], 3 + LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] + QUAD $0x041832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 4 QUAD $0x000000b824b48b48 // mov rsi, qword [rsp + 184] - QUAD $0x091832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 9 + QUAD $0x051832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 5 + QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] + QUAD $0x061832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 6 + QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] + QUAD $0x071832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 7 QUAD $0x000000e024b48b48 // mov rsi, qword [rsp + 224] - QUAD $0x0a1832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 10 - LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] - QUAD $0x0b1832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 11 - QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] + QUAD $0x081832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 8 + QUAD $0x091832442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 24], 9 + QUAD $0x0a183a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 24], 10 + QUAD $0x000000d824b48b4c // mov r14, qword [rsp + 216] + QUAD $0x0b1832442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 24], 11 + LONG $0x24748b48; BYTE $0x50 // mov rsi, qword [rsp + 80] QUAD $0x0c1832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 12 - QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] - QUAD $0x0d1832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 13 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] - QUAD $0x0e1832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 14 - QUAD $0x0f1822442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 24], 15 - QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] - LONG $0x3274b60f; BYTE $0x18 // movzx esi, byte [rdx + rsi + 24] + QUAD $0x0d181a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 24], 13 + QUAD $0x0e181a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 24], 14 + LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + QUAD $0x0f1832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 15 + LONG $0x74b60f42; WORD $0x183a // movzx esi, byte [rdx + r15 + 24] LONG $0xce6ef9c5 // vmovd xmm1, esi - QUAD $0x01181a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 24], 1 - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] - QUAD $0x0218324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 24], 2 - QUAD $0x03180a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 24], 3 - QUAD $0x04181a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 24], 4 - LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] - QUAD $0x05180a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 24], 5 + QUAD $0x01180a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 24], 1 + QUAD $0x0218024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 24], 2 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x0318024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 24], 3 + QUAD $0x000000a824a48b4c // mov r12, qword [rsp + 168] + QUAD $0x0418224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 24], 4 + QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] + QUAD $0x0518024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 24], 5 QUAD $0x06182a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 24], 6 - QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] - QUAD $0x07180a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 24], 7 - QUAD $0x0000008824bc8b4c // mov r15, qword [rsp + 136] + QUAD $0x07180a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 24], 7 + QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] QUAD $0x08183a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 24], 8 QUAD $0x0918024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 24], 9 - QUAD $0x0a18124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 24], 10 - QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] - QUAD $0x0b180a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 24], 11 - QUAD $0x00000120248c8b48 // mov rcx, qword [rsp + 288] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x0a18024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 24], 10 + QUAD $0x0000008024848b4c // mov r8, qword [rsp + 128] + QUAD $0x0b18024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 24], 11 + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] QUAD $0x0c180a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 24], 12 - QUAD $0x0d18324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 24], 13 - LONG $0x24448b4c; BYTE $0x48 // mov r8, qword [rsp + 72] - QUAD $0x0e18024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 24], 14 - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] - QUAD $0x0f180a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 24], 15 - LONG $0x74b60f42; WORD $0x190a // movzx esi, byte [rdx + r9 + 25] - LONG $0xd66ef9c5 // vmovd xmm2, esi - QUAD $0x000000e8248c8b48 // mov rcx, qword [rsp + 232] - QUAD $0x01190a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 25], 1 - QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] - QUAD $0x02190a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 25], 2 - LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] - QUAD $0x03190a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 25], 3 - QUAD $0x000000f0249c8b4c // mov r11, qword [rsp + 240] - QUAD $0x04191a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 25], 4 - QUAD $0x000000f8248c8b4c // mov r9, qword [rsp + 248] - QUAD $0x05190a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 25], 5 - LONG $0x24648b4c; BYTE $0x28 // mov r12, qword [rsp + 40] - QUAD $0x061922542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 25], 6 - QUAD $0x071902542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 25], 7 - QUAD $0x08193a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 25], 8 - QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] - QUAD $0x091902542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 25], 9 - QUAD $0x000000e024ac8b4c // mov r13, qword [rsp + 224] - QUAD $0x0a192a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 25], 10 - LONG $0x245c8b48; BYTE $0x58 // mov rbx, qword [rsp + 88] - QUAD $0x0b191a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 25], 11 - QUAD $0x0000008024b48b4c // mov r14, qword [rsp + 128] - QUAD $0x0c1932542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 25], 12 - QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] - QUAD $0x0d190a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 25], 13 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] - QUAD $0x0e1902542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 25], 14 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] - QUAD $0x0f1902542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 25], 15 - QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] + LONG $0x24548b4c; BYTE $0x20 // mov r10, qword [rsp + 32] + QUAD $0x0d18124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 24], 13 + QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] + QUAD $0x0e183a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 24], 14 + QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] + QUAD $0x0f181a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 24], 15 + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] LONG $0x0274b60f; BYTE $0x19 // movzx esi, byte [rdx + rax + 25] + LONG $0xd66ef9c5 // vmovd xmm2, esi + LONG $0x246c8b4c; BYTE $0x68 // mov r13, qword [rsp + 104] + QUAD $0x01192a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 25], 1 + QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] + QUAD $0x021932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 2 + QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] + QUAD $0x031932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 3 + LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] + QUAD $0x041932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 4 + QUAD $0x000000b8249c8b4c // mov r11, qword [rsp + 184] + QUAD $0x05191a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 25], 5 + QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] + QUAD $0x061932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 6 + QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] + QUAD $0x071932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 7 + QUAD $0x000000e024b48b48 // mov rsi, qword [rsp + 224] + QUAD $0x081932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 8 + QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] + QUAD $0x091932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 9 + LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] + QUAD $0x0a1932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 10 + QUAD $0x0b1932542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 25], 11 + LONG $0x24748b48; BYTE $0x50 // mov rsi, qword [rsp + 80] + QUAD $0x0c1932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 12 + LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] + QUAD $0x0d1932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 13 + LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] + QUAD $0x0e1932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 14 + LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + QUAD $0x0f1932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 15 + QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] + LONG $0x3274b60f; BYTE $0x19 // movzx esi, byte [rdx + rsi + 25] LONG $0xde6ef9c5 // vmovd xmm3, esi - LONG $0x247c8b48; BYTE $0x78 // mov rdi, qword [rsp + 120] - QUAD $0x01193a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 25], 1 - LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] - QUAD $0x0219025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 25], 2 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] - QUAD $0x0319025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 25], 3 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] - QUAD $0x0419025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 25], 4 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] - QUAD $0x0519025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 25], 5 - QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] - QUAD $0x0619025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 25], 6 - QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] - QUAD $0x0719025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 25], 7 + QUAD $0x000000c024b48b48 // mov rsi, qword [rsp + 192] + QUAD $0x0119325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 25], 1 + LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] + QUAD $0x0219325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 25], 2 + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + QUAD $0x0319325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 25], 3 + QUAD $0x0419225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 25], 4 + QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] + QUAD $0x0519325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 25], 5 + QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] + QUAD $0x0619325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 25], 6 + QUAD $0x07190a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 25], 7 QUAD $0x08193a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 25], 8 - QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] - QUAD $0x0919025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 25], 9 - QUAD $0x0a19125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 25], 10 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] - QUAD $0x0b19025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 25], 11 - QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] - QUAD $0x0c19325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 25], 12 - LONG $0x24548b4c; BYTE $0x20 // mov r10, qword [rsp + 32] + QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] + QUAD $0x09193a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 25], 9 + LONG $0x244c8b4c; BYTE $0x28 // mov r9, qword [rsp + 40] + QUAD $0x0a190a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 25], 10 + QUAD $0x0b19025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 25], 11 + QUAD $0x0c190a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 25], 12 QUAD $0x0d19125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 25], 13 - QUAD $0x0e19025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 25], 14 + QUAD $0x0e193a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 25], 14 LONG $0x387563c4; WORD $0x01c8 // vinserti128 ymm9, ymm1, xmm0, 1 - LONG $0x24448b4c; BYTE $0x38 // mov r8, qword [rsp + 56] - QUAD $0x0f1902442061a3c4 // vpinsrb xmm0, xmm3, byte [rdx + r8 + 25], 15 + QUAD $0x0f191a442061e3c4 // vpinsrb xmm0, xmm3, byte [rdx + rbx + 25], 15 LONG $0x387d63c4; WORD $0x01c2 // vinserti128 ymm8, ymm0, xmm2, 1 - QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] - LONG $0x3274b60f; BYTE $0x1a // movzx esi, byte [rdx + rsi + 26] + LONG $0x0274b60f; BYTE $0x1a // movzx esi, byte [rdx + rax + 26] LONG $0xc66ef9c5 // vmovd xmm0, esi - QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] - QUAD $0x011a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 1 - QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] - QUAD $0x021a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 2 - LONG $0x247c8b4c; BYTE $0x70 // mov r15, qword [rsp + 112] - QUAD $0x031a3a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 26], 3 - QUAD $0x041a1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 26], 4 - QUAD $0x051a0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 26], 5 - QUAD $0x061a22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 26], 6 - QUAD $0x000000c8249c8b4c // mov r11, qword [rsp + 200] - QUAD $0x071a1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 26], 7 - QUAD $0x000000c0248c8b4c // mov r9, qword [rsp + 192] - QUAD $0x081a0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 26], 8 - QUAD $0x000000b824b48b48 // mov rsi, qword [rsp + 184] - QUAD $0x091a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 9 - QUAD $0x0a1a2a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 26], 10 - QUAD $0x0b1a1a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 26], 11 - QUAD $0x0c1a32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 26], 12 - QUAD $0x0d1a0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 26], 13 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] - QUAD $0x0e1a0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 26], 14 - LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] - QUAD $0x0f1a0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 26], 15 - QUAD $0x00000108249c8b48 // mov rbx, qword [rsp + 264] - LONG $0x1a74b60f; BYTE $0x1a // movzx esi, byte [rdx + rbx + 26] + QUAD $0x011a2a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 26], 1 + QUAD $0x0000010824948b4c // mov r10, qword [rsp + 264] + QUAD $0x021a12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 26], 2 + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] + QUAD $0x031a02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 26], 3 + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] + QUAD $0x041a02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 26], 4 + QUAD $0x051a1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 26], 5 + QUAD $0x00000090249c8b4c // mov r11, qword [rsp + 144] + QUAD $0x061a1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 26], 6 + QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] + QUAD $0x071a0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 26], 7 + QUAD $0x000000e024b48b4c // mov r14, qword [rsp + 224] + QUAD $0x081a32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 26], 8 + QUAD $0x000000e8248c8b48 // mov rcx, qword [rsp + 232] + QUAD $0x091a0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 26], 9 + LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] + QUAD $0x0a1a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 10 + QUAD $0x000000d824b48b48 // mov rsi, qword [rsp + 216] + QUAD $0x0b1a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 11 + LONG $0x24748b48; BYTE $0x50 // mov rsi, qword [rsp + 80] + QUAD $0x0c1a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 12 + LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] + QUAD $0x0d1a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 13 + LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] + QUAD $0x0e1a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 14 + LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + QUAD $0x0f1a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 15 + QUAD $0x0000010024bc8b48 // mov rdi, qword [rsp + 256] + LONG $0x3a74b60f; BYTE $0x1a // movzx esi, byte [rdx + rdi + 26] LONG $0xce6ef9c5 // vmovd xmm1, esi - QUAD $0x011a3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 26], 1 - LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] - QUAD $0x021a3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 26], 2 - QUAD $0x000000b024a48b4c // mov r12, qword [rsp + 176] - QUAD $0x031a224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 26], 3 - LONG $0x246c8b4c; BYTE $0x68 // mov r13, qword [rsp + 104] - QUAD $0x041a2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 26], 4 - LONG $0x24748b4c; BYTE $0x60 // mov r14, qword [rsp + 96] - QUAD $0x051a324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 26], 5 - QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] - QUAD $0x061a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 6 - QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] - QUAD $0x071a0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 26], 7 - QUAD $0x00000088248c8b48 // mov rcx, qword [rsp + 136] - QUAD $0x081a0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 26], 8 + QUAD $0x000000c024b48b48 // mov rsi, qword [rsp + 192] + QUAD $0x011a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 1 + LONG $0x24448b4c; BYTE $0x78 // mov r8, qword [rsp + 120] + QUAD $0x021a024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 26], 2 + LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] + QUAD $0x031a1a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 26], 3 + QUAD $0x041a224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 26], 4 + QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] + QUAD $0x051a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 5 QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] - QUAD $0x091a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 9 - QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] - QUAD $0x0a1a0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 26], 10 - QUAD $0x0b1a024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 26], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] - QUAD $0x0c1a024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 26], 12 - QUAD $0x0d1a124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 26], 13 - LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] - QUAD $0x0e1a0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 26], 14 - QUAD $0x0f1a024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 26], 15 - QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] - LONG $0x0274b60f; BYTE $0x1b // movzx esi, byte [rdx + rax + 27] + QUAD $0x061a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 6 + QUAD $0x000000f824a48b4c // mov r12, qword [rsp + 248] + QUAD $0x071a224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 26], 7 + QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] + QUAD $0x081a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 8 + QUAD $0x091a3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 26], 9 + QUAD $0x0a1a0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 26], 10 + QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] + QUAD $0x0b1a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 11 + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + QUAD $0x0c1a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 12 + LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] + QUAD $0x0d1a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 13 + QUAD $0x00000120248c8b4c // mov r9, qword [rsp + 288] + QUAD $0x0e1a0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 26], 14 + QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] + QUAD $0x0f1a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 15 + QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] + LONG $0x3274b60f; BYTE $0x1b // movzx esi, byte [rdx + rsi + 27] LONG $0xd66ef9c5 // vmovd xmm2, esi - QUAD $0x000000e824848b4c // mov r8, qword [rsp + 232] - QUAD $0x011b02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 27], 1 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] - QUAD $0x021b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 2 - QUAD $0x031b3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 27], 3 - QUAD $0x000000f024948b4c // mov r10, qword [rsp + 240] - QUAD $0x041b12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 27], 4 - QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] - QUAD $0x051b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 5 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] - QUAD $0x061b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 6 - QUAD $0x071b1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 27], 7 - QUAD $0x081b0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 27], 8 - QUAD $0x000000b824bc8b4c // mov r15, qword [rsp + 184] - QUAD $0x091b3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 27], 9 - QUAD $0x000000e0248c8b4c // mov r9, qword [rsp + 224] - QUAD $0x0a1b0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 27], 10 - LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] - QUAD $0x0b1b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 11 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] - QUAD $0x0c1b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 12 + QUAD $0x011b2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 27], 1 + QUAD $0x021b12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 27], 2 + WORD $0x894d; BYTE $0xd5 // mov r13, r10 + QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] + QUAD $0x031b32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 27], 3 + QUAD $0x041b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 4 + QUAD $0x000000b824948b4c // mov r10, qword [rsp + 184] + QUAD $0x051b12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 27], 5 + QUAD $0x061b1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 27], 6 QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x071b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 7 + QUAD $0x081b32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 27], 8 + QUAD $0x091b0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 27], 9 + LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] + QUAD $0x0a1b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 10 + QUAD $0x000000d824b48b4c // mov r14, qword [rsp + 216] + QUAD $0x0b1b32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 27], 11 + LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] + QUAD $0x0c1b0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 27], 12 + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] QUAD $0x0d1b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 13 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] QUAD $0x0e1b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 14 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] - QUAD $0x0f1b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 15 - LONG $0x1a74b60f; BYTE $0x1b // movzx esi, byte [rdx + rbx + 27] + LONG $0x245c8b4c; BYTE $0x60 // mov r11, qword [rsp + 96] + QUAD $0x0f1b1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 27], 15 + LONG $0x3a74b60f; BYTE $0x1b // movzx esi, byte [rdx + rdi + 27] LONG $0xde6ef9c5 // vmovd xmm3, esi - LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] - QUAD $0x011b025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 27], 1 - QUAD $0x021b3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 27], 2 - QUAD $0x031b225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 27], 3 - QUAD $0x041b2a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 27], 4 - QUAD $0x051b325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 27], 5 - QUAD $0x000000a024a48b4c // mov r12, qword [rsp + 160] - QUAD $0x061b225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 27], 6 - QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] - QUAD $0x071b025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 27], 7 - QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] + QUAD $0x000000c024b48b48 // mov rsi, qword [rsp + 192] + QUAD $0x011b325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 27], 1 + QUAD $0x021b025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 27], 2 + QUAD $0x031b1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 27], 3 + QUAD $0x000000a8249c8b48 // mov rbx, qword [rsp + 168] + QUAD $0x041b1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 27], 4 + QUAD $0x0000008824bc8b48 // mov rdi, qword [rsp + 136] + QUAD $0x051b3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 27], 5 + QUAD $0x0000009824bc8b4c // mov r15, qword [rsp + 152] + QUAD $0x061b3a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 27], 6 + QUAD $0x071b225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 27], 7 + QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] QUAD $0x081b325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 27], 8 - QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] + QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] QUAD $0x091b325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 27], 9 - QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] + LONG $0x24748b48; BYTE $0x28 // mov rsi, qword [rsp + 40] QUAD $0x0a1b325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 27], 10 - QUAD $0x000000d824b48b48 // mov rsi, qword [rsp + 216] + QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] QUAD $0x0b1b325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 27], 11 - QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] QUAD $0x0c1b325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 27], 12 LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] QUAD $0x0d1b325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 27], 13 - QUAD $0x0e1b0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 27], 14 - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] - QUAD $0x0f1b0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 27], 15 + QUAD $0x0e1b0a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 27], 14 + QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] + QUAD $0x0f1b325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 27], 15 LONG $0x3875e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm1, xmm0, 1 QUAD $0x00022024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 544], ymm0 LONG $0x3865e3c4; WORD $0x01c2 // vinserti128 ymm0, ymm3, xmm2, 1 QUAD $0x00024024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 576], ymm0 - QUAD $0x0000010024ac8b4c // mov r13, qword [rsp + 256] - LONG $0x74b60f42; WORD $0x1c2a // movzx esi, byte [rdx + r13 + 28] + QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] + LONG $0x3274b60f; BYTE $0x1c // movzx esi, byte [rdx + rsi + 28] LONG $0xc66ef9c5 // vmovd xmm0, esi - QUAD $0x011c02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 28], 1 - QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] - QUAD $0x021c0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 28], 2 - LONG $0x245c8b4c; BYTE $0x70 // mov r11, qword [rsp + 112] - QUAD $0x031c1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 28], 3 - QUAD $0x041c12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 28], 4 - QUAD $0x000000f824b48b4c // mov r14, qword [rsp + 248] - QUAD $0x051c32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 28], 5 - LONG $0x24748b48; BYTE $0x28 // mov rsi, qword [rsp + 40] + LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] + QUAD $0x011c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 28], 1 + QUAD $0x021c2a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 28], 2 + QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] + QUAD $0x031c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 28], 3 + LONG $0x244c8b4c; BYTE $0x70 // mov r9, qword [rsp + 112] + QUAD $0x041c0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 28], 4 + QUAD $0x051c12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 28], 5 + QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] QUAD $0x061c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 28], 6 - QUAD $0x000000c8249c8b48 // mov rbx, qword [rsp + 200] - QUAD $0x071c1a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 28], 7 - QUAD $0x000000c024b48b48 // mov rsi, qword [rsp + 192] - QUAD $0x081c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 28], 8 - QUAD $0x091c3a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 28], 9 - QUAD $0x0a1c0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 28], 10 - LONG $0x24548b4c; BYTE $0x58 // mov r10, qword [rsp + 88] - QUAD $0x0b1c12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 28], 11 - QUAD $0x0000008024bc8b4c // mov r15, qword [rsp + 128] - QUAD $0x0c1c3a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 28], 12 - QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] - QUAD $0x0d1c3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 28], 13 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] - QUAD $0x0e1c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 28], 14 - LONG $0x24448b4c; BYTE $0x50 // mov r8, qword [rsp + 80] - QUAD $0x0f1c02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 28], 15 - QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] - LONG $0x3274b60f; BYTE $0x1c // movzx esi, byte [rdx + rsi + 28] + QUAD $0x000000d024ac8b4c // mov r13, qword [rsp + 208] + QUAD $0x071c2a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 28], 7 + QUAD $0x000000e024a48b4c // mov r12, qword [rsp + 224] + QUAD $0x081c22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 28], 8 + QUAD $0x000000e824848b4c // mov r8, qword [rsp + 232] + QUAD $0x091c02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 28], 9 + LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] + QUAD $0x0a1c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 28], 10 + QUAD $0x0b1c32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 28], 11 + QUAD $0x0c1c0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 28], 12 + LONG $0x24748b4c; BYTE $0x48 // mov r14, qword [rsp + 72] + QUAD $0x0d1c32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 28], 13 + QUAD $0x0e1c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 28], 14 + QUAD $0x0f1c1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 28], 15 + QUAD $0x00000100249c8b4c // mov r11, qword [rsp + 256] + LONG $0x74b60f42; WORD $0x1c1a // movzx esi, byte [rdx + r11 + 28] LONG $0xce6ef9c5 // vmovd xmm1, esi - LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] - QUAD $0x011c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 1 - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] - QUAD $0x021c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 2 - QUAD $0x000000b0248c8b4c // mov r9, qword [rsp + 176] - QUAD $0x031c0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 28], 3 - LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] - QUAD $0x041c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 4 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] - QUAD $0x051c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 5 - QUAD $0x061c224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 28], 6 - QUAD $0x071c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 7 - QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] - QUAD $0x081c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 8 - QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] - QUAD $0x091c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 9 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] - QUAD $0x0a1c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 10 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] - QUAD $0x0b1c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 11 - QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] - QUAD $0x0c1c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 12 + QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] + QUAD $0x011c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 1 + LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] + QUAD $0x021c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 2 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x031c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 3 + QUAD $0x041c1a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 28], 4 + QUAD $0x051c3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 28], 5 + QUAD $0x061c3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 28], 6 + QUAD $0x000000f824bc8b48 // mov rdi, qword [rsp + 248] + QUAD $0x071c3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 28], 7 + QUAD $0x000000a0248c8b48 // mov rcx, qword [rsp + 160] + QUAD $0x081c0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 28], 8 + QUAD $0x000000b0249c8b48 // mov rbx, qword [rsp + 176] + QUAD $0x091c1a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 28], 9 + LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] + QUAD $0x0a1c0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 28], 10 + QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] + QUAD $0x0b1c0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 28], 11 + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] + QUAD $0x0c1c0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 28], 12 LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] QUAD $0x0d1c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 13 - LONG $0x24648b4c; BYTE $0x48 // mov r12, qword [rsp + 72] - QUAD $0x0e1c224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 28], 14 - LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + QUAD $0x0000012024948b4c // mov r10, qword [rsp + 288] + QUAD $0x0e1c124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 28], 14 + QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] QUAD $0x0f1c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 15 - LONG $0x74b60f42; WORD $0x1d2a // movzx esi, byte [rdx + r13 + 29] + QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] + LONG $0x3274b60f; BYTE $0x1d // movzx esi, byte [rdx + rsi + 29] LONG $0xd66ef9c5 // vmovd xmm2, esi - QUAD $0x000000e824ac8b4c // mov r13, qword [rsp + 232] - QUAD $0x011d2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 29], 1 - QUAD $0x021d0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 29], 2 - QUAD $0x031d1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 29], 3 - QUAD $0x000000f0248c8b48 // mov rcx, qword [rsp + 240] - QUAD $0x041d0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 29], 4 - QUAD $0x051d32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 29], 5 - LONG $0x245c8b4c; BYTE $0x28 // mov r11, qword [rsp + 40] - QUAD $0x061d1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 29], 6 - QUAD $0x071d1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 29], 7 - QUAD $0x000000c0248c8b48 // mov rcx, qword [rsp + 192] - QUAD $0x081d0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 29], 8 - QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] - QUAD $0x091d0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 29], 9 - QUAD $0x000000e024b48b4c // mov r14, qword [rsp + 224] - QUAD $0x0a1d32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 29], 10 - QUAD $0x0b1d12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 29], 11 - QUAD $0x0c1d3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 29], 12 - QUAD $0x0d1d3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 29], 13 - LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] - QUAD $0x0e1d1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 29], 14 - QUAD $0x0f1d02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 29], 15 - QUAD $0x0000010824848b4c // mov r8, qword [rsp + 264] - LONG $0x74b60f42; WORD $0x1d02 // movzx esi, byte [rdx + r8 + 29] - LONG $0xde6ef9c5 // vmovd xmm3, esi - LONG $0x247c8b4c; BYTE $0x78 // mov r15, qword [rsp + 120] - QUAD $0x011d3a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 29], 1 - LONG $0x24548b4c; BYTE $0x40 // mov r10, qword [rsp + 64] - QUAD $0x021d125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 29], 2 - QUAD $0x031d0a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 29], 3 - LONG $0x244c8b4c; BYTE $0x68 // mov r9, qword [rsp + 104] - QUAD $0x041d0a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 29], 4 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] - QUAD $0x051d325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 29], 5 - QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] - QUAD $0x061d325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 29], 6 + LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] + QUAD $0x011d32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 29], 1 + QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] + QUAD $0x021d32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 29], 2 + QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] + QUAD $0x031d32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 29], 3 + QUAD $0x041d0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 29], 4 + QUAD $0x000000b8248c8b4c // mov r9, qword [rsp + 184] + QUAD $0x051d0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 29], 5 QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] - QUAD $0x071d325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 29], 7 - QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] - QUAD $0x081d325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 29], 8 - QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] - QUAD $0x091d325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 29], 9 - QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] - QUAD $0x0a1d325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 29], 10 - QUAD $0x0b1d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] - QUAD $0x0c1d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 12 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - QUAD $0x0d1d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 13 - QUAD $0x0e1d22642061a3c4 // vpinsrb xmm4, xmm3, byte [rdx + r12 + 29], 14 + QUAD $0x061d32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 29], 6 + QUAD $0x071d2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 29], 7 + QUAD $0x081d22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 29], 8 + QUAD $0x091d02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 29], 9 + LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] + QUAD $0x0a1d32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 29], 10 + QUAD $0x000000d824848b4c // mov r8, qword [rsp + 216] + QUAD $0x0b1d02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 29], 11 + LONG $0x24648b4c; BYTE $0x50 // mov r12, qword [rsp + 80] + QUAD $0x0c1d22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 29], 12 + QUAD $0x0d1d32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 29], 13 + LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] + QUAD $0x0e1d32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 29], 14 + LONG $0x24748b4c; BYTE $0x60 // mov r14, qword [rsp + 96] + QUAD $0x0f1d32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 29], 15 + LONG $0x74b60f42; WORD $0x1d1a // movzx esi, byte [rdx + r11 + 29] + LONG $0xde6ef9c5 // vmovd xmm3, esi + QUAD $0x000000c0249c8b4c // mov r11, qword [rsp + 192] + QUAD $0x011d1a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 29], 1 + LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] + QUAD $0x021d325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 29], 2 + QUAD $0x031d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 3 + QUAD $0x000000a824ac8b4c // mov r13, qword [rsp + 168] + QUAD $0x041d2a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 29], 4 + QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] + QUAD $0x051d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 5 + QUAD $0x061d3a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 29], 6 + QUAD $0x071d3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 29], 7 + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] + QUAD $0x081d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 8 + QUAD $0x091d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 29], 9 + WORD $0x8949; BYTE $0xdf // mov r15, rbx + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x0a1d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 10 + QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] + QUAD $0x0b1d3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 29], 11 + QUAD $0x0c1d0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 29], 12 + LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + QUAD $0x0d1d0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 29], 13 + QUAD $0x0e1d12642061a3c4 // vpinsrb xmm4, xmm3, byte [rdx + r10 + 29], 14 LONG $0x3875e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm1, xmm0, 1 QUAD $0x00028024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 640], ymm0 - LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] - QUAD $0x0f1d22442059a3c4 // vpinsrb xmm0, xmm4, byte [rdx + r12 + 29], 15 + QUAD $0x0000014024948b4c // mov r10, qword [rsp + 320] + QUAD $0x0f1d12442059a3c4 // vpinsrb xmm0, xmm4, byte [rdx + r10 + 29], 15 LONG $0x387de3c4; WORD $0x01c2 // vinserti128 ymm0, ymm0, xmm2, 1 QUAD $0x00026024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 608], ymm0 - QUAD $0x0000010024bc8b48 // mov rdi, qword [rsp + 256] - LONG $0x3a74b60f; BYTE $0x1e // movzx esi, byte [rdx + rdi + 30] + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + LONG $0x0274b60f; BYTE $0x1e // movzx esi, byte [rdx + rax + 30] LONG $0xc66ef9c5 // vmovd xmm0, esi - QUAD $0x011e2a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 30], 1 - LONG $0x3a74b60f; BYTE $0x1f // movzx esi, byte [rdx + rdi + 31] + LONG $0x245c8b48; BYTE $0x68 // mov rbx, qword [rsp + 104] + QUAD $0x011e1a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 30], 1 + LONG $0x0274b60f; BYTE $0x1f // movzx esi, byte [rdx + rax + 31] LONG $0xce6ef9c5 // vmovd xmm1, esi - QUAD $0x011f2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 31], 1 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x011f1a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 31], 1 + QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] QUAD $0x021e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 2 QUAD $0x021f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 2 - LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] QUAD $0x031e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 3 QUAD $0x031f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 3 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] QUAD $0x041e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 4 QUAD $0x041f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 4 - QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] - QUAD $0x051e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 5 - QUAD $0x051f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 5 - QUAD $0x061e1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 30], 6 - QUAD $0x061f1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 31], 6 - QUAD $0x0000011024bc8b48 // mov rdi, qword [rsp + 272] - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] + WORD $0x894c; BYTE $0xc8 // mov rax, r9 + QUAD $0x051e0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 30], 5 + QUAD $0x051f0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 31], 5 + QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] + QUAD $0x061e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 6 + QUAD $0x061f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 6 + QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] QUAD $0x071e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 7 QUAD $0x071f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 7 - QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] + QUAD $0x00000110249c8b48 // mov rbx, qword [rsp + 272] + QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] QUAD $0x081e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 8 QUAD $0x081f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 8 - QUAD $0x091e0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 30], 9 - QUAD $0x091f0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 31], 9 - QUAD $0x0a1e32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 30], 10 - QUAD $0x0a1f324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 31], 10 + QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] + QUAD $0x091e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 9 + QUAD $0x091f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 9 LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] - QUAD $0x0b1e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 11 - QUAD $0x0b1f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 11 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] - QUAD $0x0c1e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 12 - QUAD $0x0c1f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 12 - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x0a1e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 10 + QUAD $0x0a1f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 10 + WORD $0x894c; BYTE $0xc0 // mov rax, r8 + QUAD $0x0b1e02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 30], 11 + QUAD $0x0b1f024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 31], 11 + QUAD $0x0c1e22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 30], 12 + QUAD $0x0c1f224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 31], 12 + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] QUAD $0x0d1e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 13 QUAD $0x0d1f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 13 - WORD $0x8948; BYTE $0xd8 // mov rax, rbx - QUAD $0x0e1e1a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 30], 14 - QUAD $0x0e1f1a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 31], 14 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] - QUAD $0x0f1e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 15 - QUAD $0x0f1f02542071e3c4 // vpinsrb xmm2, xmm1, byte [rdx + rax + 31], 15 - WORD $0x894c; BYTE $0xc6 // mov rsi, r8 - LONG $0x44b60f42; WORD $0x1e02 // movzx eax, byte [rdx + r8 + 30] + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x0e1e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 14 + QUAD $0x0e1f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 14 + QUAD $0x0f1e32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 30], 15 + QUAD $0x0f1f32542071a3c4 // vpinsrb xmm2, xmm1, byte [rdx + r14 + 31], 15 + QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] + LONG $0x3244b60f; BYTE $0x1e // movzx eax, byte [rdx + rsi + 30] LONG $0xc86ef9c5 // vmovd xmm1, eax - QUAD $0x011e3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 30], 1 - LONG $0x44b60f42; WORD $0x1f02 // movzx eax, byte [rdx + r8 + 31] + QUAD $0x011e1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 30], 1 + LONG $0x3244b60f; BYTE $0x1f // movzx eax, byte [rdx + rsi + 31] LONG $0xf86ef9c5 // vmovd xmm7, eax - QUAD $0x011f3a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r15 + 31], 1 - QUAD $0x021e124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 30], 2 - QUAD $0x021f127c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r10 + 31], 2 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x011f1a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r11 + 31], 1 + LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] + QUAD $0x021e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 2 + QUAD $0x021f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 2 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] QUAD $0x031e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 3 QUAD $0x031f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 3 - QUAD $0x041e0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 30], 4 - QUAD $0x041f0a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r9 + 31], 4 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + QUAD $0x041e2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 30], 4 + QUAD $0x041f2a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r13 + 31], 4 + QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] QUAD $0x051e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 5 QUAD $0x051f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 5 - QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] + QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] QUAD $0x061e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 6 QUAD $0x061f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 6 - QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] + QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] QUAD $0x071e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 7 QUAD $0x071f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 7 - QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] QUAD $0x081e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 8 QUAD $0x081f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 8 - QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] - QUAD $0x091e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 9 - QUAD $0x091f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 9 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x091e3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 30], 9 + QUAD $0x091f3a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r15 + 31], 9 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0a1e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 10 QUAD $0x0a1f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 10 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] - QUAD $0x0b1e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 11 - QUAD $0x0b1f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + QUAD $0x0b1e3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 30], 11 + QUAD $0x0b1f3a7c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rdi + 31], 11 + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x0c1e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 12 QUAD $0x0c1f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 12 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - QUAD $0x0d1e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 13 - QUAD $0x0d1f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 13 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + WORD $0x8948; BYTE $0xc8 // mov rax, rcx + QUAD $0x0d1e0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 30], 13 + QUAD $0x0d1f0a7c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rcx + 31], 13 + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0e1e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 14 QUAD $0x0e1f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 14 - WORD $0x894c; BYTE $0xe0 // mov rax, r12 - QUAD $0x0f1e224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 30], 15 - QUAD $0x0f1f227c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r12 + 31], 15 + QUAD $0x0f1e124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 30], 15 + QUAD $0x0f1f127c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r10 + 31], 15 LONG $0x3875e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm1, xmm0, 1 QUAD $0x00014024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 320], ymm0 LONG $0x3845e3c4; WORD $0x01c2 // vinserti128 ymm0, ymm7, xmm2, 1 @@ -14596,71 +15238,71 @@ LBB2_166: LONG $0x3865e3c4; WORD $0x01e0 // vinserti128 ymm4, ymm3, xmm0, 1 LONG $0x4665e3c4; WORD $0x31c0 // vperm2i128 ymm0, ymm3, ymm0, 49 QUAD $0x00000198248c8b48 // mov rcx, qword [rsp + 408] - LONG $0x447ffec5; WORD $0x608f // vmovdqu yword [rdi + 4*rcx + 96], ymm0 - LONG $0x547ffec5; WORD $0x408f // vmovdqu yword [rdi + 4*rcx + 64], ymm2 - LONG $0x647ffec5; WORD $0x208f // vmovdqu yword [rdi + 4*rcx + 32], ymm4 - LONG $0x0c7ffec5; BYTE $0x8f // vmovdqu yword [rdi + 4*rcx], ymm1 + LONG $0x447ffec5; WORD $0x608b // vmovdqu yword [rbx + 4*rcx + 96], ymm0 + LONG $0x547ffec5; WORD $0x408b // vmovdqu yword [rbx + 4*rcx + 64], ymm2 + LONG $0x647ffec5; WORD $0x208b // vmovdqu yword [rbx + 4*rcx + 32], ymm4 + LONG $0x0c7ffec5; BYTE $0x8b // vmovdqu yword [rbx + 4*rcx], ymm1 LONG $0x20c18348 // add rcx, 32 WORD $0x8948; BYTE $0xc8 // mov rax, rcx QUAD $0x00000180248c3b48 // cmp rcx, qword [rsp + 384] - JNE LBB2_166 + JNE LBB2_167 QUAD $0x0000018824bc8b4c // mov r15, qword [rsp + 392] QUAD $0x0000018024bc3b4c // cmp r15, qword [rsp + 384] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - LONG $0x24748b44; BYTE $0x1c // mov r14d, dword [rsp + 28] + LONG $0x245c8b44; BYTE $0x1c // mov r11d, dword [rsp + 28] QUAD $0x0000019024a48b4c // mov r12, qword [rsp + 400] JNE LBB2_43 JMP LBB2_129 -LBB2_168: +LBB2_169: LONG $0xe0e78349 // and r15, -32 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xd0 // add rax, rdx QUAD $0x0000019024848948 // mov qword [rsp + 400], rax QUAD $0x0000018024bc894c // mov qword [rsp + 384], r15 - LONG $0xbb048d4b // lea rax, [r11 + 4*r15] + LONG $0xbe048d4b // lea rax, [r14 + 4*r15] QUAD $0x0000017824848948 // mov qword [rsp + 376], rax - LONG $0x6e79c1c4; BYTE $0xc6 // vmovd xmm0, r14d + LONG $0x6e79c1c4; BYTE $0xc3 // vmovd xmm0, r11d LONG $0x787de2c4; BYTE $0xc0 // vpbroadcastb ymm0, xmm0 QUAD $0x00020024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 512], ymm0 WORD $0xc031 // xor eax, eax - QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 + QUAD $0x0000011024b4894c // mov qword [rsp + 272], r14 -LBB2_169: +LBB2_170: WORD $0x8948; BYTE $0xc3 // mov rbx, rax QUAD $0x0000019824848948 // mov qword [rsp + 408], rax LONG $0x05e3c148 // shl rbx, 5 WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x20c88348 // or rax, 32 - LONG $0x24448948; BYTE $0x78 // mov qword [rsp + 120], rax + QUAD $0x000000c024848948 // mov qword [rsp + 192], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x40c88348 // or rax, 64 - LONG $0x24448948; BYTE $0x40 // mov qword [rsp + 64], rax + LONG $0x24448948; BYTE $0x78 // mov qword [rsp + 120], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x60c88348 // or rax, 96 - QUAD $0x000000b024848948 // mov qword [rsp + 176], rax + LONG $0x24448948; BYTE $0x38 // mov qword [rsp + 56], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x00800d48; WORD $0x0000 // or rax, 128 - LONG $0x24448948; BYTE $0x68 // mov qword [rsp + 104], rax + QUAD $0x000000a824848948 // mov qword [rsp + 168], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x00a00d48; WORD $0x0000 // or rax, 160 - LONG $0x24448948; BYTE $0x60 // mov qword [rsp + 96], rax + QUAD $0x0000008824848948 // mov qword [rsp + 136], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x00c00d48; WORD $0x0000 // or rax, 192 - QUAD $0x000000a024848948 // mov qword [rsp + 160], rax + QUAD $0x0000009824848948 // mov qword [rsp + 152], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x00e00d48; WORD $0x0000 // or rax, 224 - QUAD $0x0000009024848948 // mov qword [rsp + 144], rax + QUAD $0x000000f824848948 // mov qword [rsp + 248], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01000d48; WORD $0x0000 // or rax, 256 - QUAD $0x0000008824848948 // mov qword [rsp + 136], rax + QUAD $0x000000a024848948 // mov qword [rsp + 160], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01200d48; WORD $0x0000 // or rax, 288 - QUAD $0x0000009824848948 // mov qword [rsp + 152], rax + QUAD $0x000000b024848948 // mov qword [rsp + 176], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01400d48; WORD $0x0000 // or rax, 320 - QUAD $0x0000014024848948 // mov qword [rsp + 320], rax + LONG $0x24448948; BYTE $0x28 // mov qword [rsp + 40], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x02000d48; WORD $0x0000 // or rax, 512 WORD $0x8948; BYTE $0xc1 // mov rcx, rax @@ -14669,1918 +15311,1929 @@ LBB2_169: LONG $0x1a04b60f // movzx eax, byte [rdx + rbx] LONG $0xd86ef9c5 // vmovd xmm3, eax LONG $0x0a44b60f; BYTE $0x01 // movzx eax, byte [rdx + rcx + 1] + WORD $0x8948; BYTE $0xce // mov rsi, rcx LONG $0xe06ef9c5 // vmovd xmm4, eax + WORD $0x8948; BYTE $0xd9 // mov rcx, rbx LONG $0x1a44b60f; BYTE $0x01 // movzx eax, byte [rdx + rbx + 1] LONG $0xd06e79c5 // vmovd xmm10, eax - LONG $0x0a44b60f; BYTE $0x02 // movzx eax, byte [rdx + rcx + 2] - WORD $0x8948; BYTE $0xcf // mov rdi, rcx + LONG $0x3244b60f; BYTE $0x02 // movzx eax, byte [rdx + rsi + 2] LONG $0xc86ef9c5 // vmovd xmm1, eax QUAD $0x0001e0248c7ff9c5; BYTE $0x00 // vmovdqa oword [rsp + 480], xmm1 - WORD $0x8948; BYTE $0xd9 // mov rcx, rbx LONG $0x1a44b60f; BYTE $0x02 // movzx eax, byte [rdx + rbx + 2] LONG $0xc86ef9c5 // vmovd xmm1, eax QUAD $0x0001c0248c7ff9c5; BYTE $0x00 // vmovdqa oword [rsp + 448], xmm1 - LONG $0x3a44b60f; BYTE $0x03 // movzx eax, byte [rdx + rdi + 3] + LONG $0x3244b60f; BYTE $0x03 // movzx eax, byte [rdx + rsi + 3] LONG $0xd86e79c5 // vmovd xmm11, eax LONG $0x1a44b60f; BYTE $0x03 // movzx eax, byte [rdx + rbx + 3] LONG $0xc06e79c5 // vmovd xmm8, eax - LONG $0x3a44b60f; BYTE $0x04 // movzx eax, byte [rdx + rdi + 4] + LONG $0x3244b60f; BYTE $0x04 // movzx eax, byte [rdx + rsi + 4] LONG $0xc86ef9c5 // vmovd xmm1, eax QUAD $0x0001a0248c7ff9c5; BYTE $0x00 // vmovdqa oword [rsp + 416], xmm1 LONG $0x1a44b60f; BYTE $0x04 // movzx eax, byte [rdx + rbx + 4] LONG $0xe86e79c5 // vmovd xmm13, eax - LONG $0x3a44b60f; BYTE $0x05 // movzx eax, byte [rdx + rdi + 5] + LONG $0x3244b60f; BYTE $0x05 // movzx eax, byte [rdx + rsi + 5] LONG $0xf06e79c5 // vmovd xmm14, eax LONG $0x1a44b60f; BYTE $0x05 // movzx eax, byte [rdx + rbx + 5] LONG $0xf06ef9c5 // vmovd xmm6, eax - LONG $0x3a44b60f; BYTE $0x06 // movzx eax, byte [rdx + rdi + 6] - QUAD $0x0000010024bc8948 // mov qword [rsp + 256], rdi + LONG $0x3244b60f; BYTE $0x06 // movzx eax, byte [rdx + rsi + 6] + QUAD $0x000000f024b48948 // mov qword [rsp + 240], rsi LONG $0xe06e79c5 // vmovd xmm12, eax LONG $0x1a44b60f; BYTE $0x06 // movzx eax, byte [rdx + rbx + 6] LONG $0xf86ef9c5 // vmovd xmm7, eax - LONG $0x3a44b60f; BYTE $0x07 // movzx eax, byte [rdx + rdi + 7] + LONG $0x3244b60f; BYTE $0x07 // movzx eax, byte [rdx + rsi + 7] LONG $0xd06ef9c5 // vmovd xmm2, eax LONG $0x1a44b60f; BYTE $0x07 // movzx eax, byte [rdx + rbx + 7] LONG $0xc86ef9c5 // vmovd xmm1, eax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01600d48; WORD $0x0000 // or rax, 352 - QUAD $0x000000d824848948 // mov qword [rsp + 216], rax + QUAD $0x0000008024848948 // mov qword [rsp + 128], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01800d48; WORD $0x0000 // or rax, 384 - QUAD $0x0000012024848948 // mov qword [rsp + 288], rax + LONG $0x24448948; BYTE $0x30 // mov qword [rsp + 48], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01a00d48; WORD $0x0000 // or rax, 416 LONG $0x24448948; BYTE $0x20 // mov qword [rsp + 32], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01c00d48; WORD $0x0000 // or rax, 448 - LONG $0x24448948; BYTE $0x48 // mov qword [rsp + 72], rax + QUAD $0x0000012024848948 // mov qword [rsp + 288], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01e00d48; WORD $0x0000 // or rax, 480 - LONG $0x24448948; BYTE $0x38 // mov qword [rsp + 56], rax + QUAD $0x0000014024848948 // mov qword [rsp + 320], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x02200d48; WORD $0x0000 // or rax, 544 - QUAD $0x000000e824848948 // mov qword [rsp + 232], rax + LONG $0x24448948; BYTE $0x68 // mov qword [rsp + 104], rax LONG $0x40cb8148; WORD $0x0002; BYTE $0x00 // or rbx, 576 - QUAD $0x000000a8249c8948 // mov qword [rsp + 168], rbx + QUAD $0x00000108249c8948 // mov qword [rsp + 264], rbx WORD $0x8948; BYTE $0xc8 // mov rax, rcx LONG $0x02600d48; WORD $0x0000 // or rax, 608 - LONG $0x24448948; BYTE $0x70 // mov qword [rsp + 112], rax - WORD $0x8949; BYTE $0xcc // mov r12, rcx - LONG $0x80cc8149; WORD $0x0002; BYTE $0x00 // or r12, 640 - QUAD $0x000000f024a4894c // mov qword [rsp + 240], r12 + QUAD $0x000000c824848948 // mov qword [rsp + 200], rax WORD $0x8949; BYTE $0xce // mov r14, rcx - LONG $0xa0ce8149; WORD $0x0002; BYTE $0x00 // or r14, 672 - QUAD $0x000000f824b4894c // mov qword [rsp + 248], r14 - WORD $0x8948; BYTE $0xc8 // mov rax, rcx - LONG $0x02c00d48; WORD $0x0000 // or rax, 704 - LONG $0x24448948; BYTE $0x28 // mov qword [rsp + 40], rax + LONG $0x80ce8149; WORD $0x0002; BYTE $0x00 // or r14, 640 + LONG $0x2474894c; BYTE $0x70 // mov qword [rsp + 112], r14 WORD $0x8948; BYTE $0xc8 // mov rax, rcx - LONG $0x02e00d48; WORD $0x0000 // or rax, 736 - WORD $0x8948; BYTE $0xc7 // mov rdi, rax - WORD $0x8949; BYTE $0xc9 // mov r9, rcx - LONG $0x00c98149; WORD $0x0003; BYTE $0x00 // or r9, 768 - QUAD $0x000000c0248c894c // mov qword [rsp + 192], r9 + LONG $0x02a00d48; WORD $0x0000 // or rax, 672 + QUAD $0x000000b824848948 // mov qword [rsp + 184], rax + WORD $0x8949; BYTE $0xcc // mov r12, rcx + LONG $0xc0cc8149; WORD $0x0002; BYTE $0x00 // or r12, 704 + QUAD $0x0000009024a4894c // mov qword [rsp + 144], r12 + WORD $0x8948; BYTE $0xcf // mov rdi, rcx + LONG $0xe0cf8148; WORD $0x0002; BYTE $0x00 // or rdi, 736 + QUAD $0x000000d024bc8948 // mov qword [rsp + 208], rdi WORD $0x8949; BYTE $0xcf // mov r15, rcx - LONG $0x20cf8149; WORD $0x0003; BYTE $0x00 // or r15, 800 - QUAD $0x000000b824bc894c // mov qword [rsp + 184], r15 + LONG $0x00cf8149; WORD $0x0003; BYTE $0x00 // or r15, 768 + QUAD $0x000000e024bc894c // mov qword [rsp + 224], r15 WORD $0x8949; BYTE $0xcb // mov r11, rcx - LONG $0x40cb8149; WORD $0x0003; BYTE $0x00 // or r11, 832 - QUAD $0x000000e0249c894c // mov qword [rsp + 224], r11 + LONG $0x20cb8149; WORD $0x0003; BYTE $0x00 // or r11, 800 + QUAD $0x000000e8249c894c // mov qword [rsp + 232], r11 WORD $0x8949; BYTE $0xca // mov r10, rcx - LONG $0x60ca8149; WORD $0x0003; BYTE $0x00 // or r10, 864 + LONG $0x40ca8149; WORD $0x0003; BYTE $0x00 // or r10, 832 LONG $0x2454894c; BYTE $0x58 // mov qword [rsp + 88], r10 + WORD $0x8949; BYTE $0xc9 // mov r9, rcx + LONG $0x60c98149; WORD $0x0003; BYTE $0x00 // or r9, 864 + QUAD $0x000000d8248c894c // mov qword [rsp + 216], r9 WORD $0x8949; BYTE $0xc8 // mov r8, rcx LONG $0x80c88149; WORD $0x0003; BYTE $0x00 // or r8, 896 - QUAD $0x000000802484894c // mov qword [rsp + 128], r8 + LONG $0x2444894c; BYTE $0x50 // mov qword [rsp + 80], r8 WORD $0x8948; BYTE $0xce // mov rsi, rcx LONG $0xa0ce8148; WORD $0x0003; BYTE $0x00 // or rsi, 928 - QUAD $0x000000d024b48948 // mov qword [rsp + 208], rsi + LONG $0x24748948; BYTE $0x48 // mov qword [rsp + 72], rsi WORD $0x8948; BYTE $0xc8 // mov rax, rcx - QUAD $0x00000108248c8948 // mov qword [rsp + 264], rcx + QUAD $0x00000100248c8948 // mov qword [rsp + 256], rcx LONG $0x03c00d48; WORD $0x0000 // or rax, 960 - LONG $0x24448948; BYTE $0x30 // mov qword [rsp + 48], rax + LONG $0x24448948; BYTE $0x40 // mov qword [rsp + 64], rax LONG $0xe0c98148; WORD $0x0003; BYTE $0x00 // or rcx, 992 - LONG $0x244c8948; BYTE $0x50 // mov qword [rsp + 80], rcx - QUAD $0x000000e824ac8b4c // mov r13, qword [rsp + 232] + LONG $0x244c8948; BYTE $0x60 // mov qword [rsp + 96], rcx + LONG $0x246c8b4c; BYTE $0x68 // mov r13, qword [rsp + 104] LONG $0x207923c4; WORD $0x2a0c; BYTE $0x01 // vpinsrb xmm9, xmm0, byte [rdx + r13], 1 LONG $0x2031e3c4; WORD $0x1a04; BYTE $0x02 // vpinsrb xmm0, xmm9, byte [rdx + rbx], 2 - LONG $0x245c8b48; BYTE $0x70 // mov rbx, qword [rsp + 112] + QUAD $0x000000c8249c8b48 // mov rbx, qword [rsp + 200] LONG $0x2079e3c4; WORD $0x1a04; BYTE $0x03 // vpinsrb xmm0, xmm0, byte [rdx + rbx], 3 - LONG $0x2079a3c4; WORD $0x2204; BYTE $0x04 // vpinsrb xmm0, xmm0, byte [rdx + r12], 4 - LONG $0x2079a3c4; WORD $0x3204; BYTE $0x05 // vpinsrb xmm0, xmm0, byte [rdx + r14], 5 - LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] - LONG $0x2079e3c4; WORD $0x1a04; BYTE $0x06 // vpinsrb xmm0, xmm0, byte [rdx + rbx], 6 + LONG $0x2079a3c4; WORD $0x3204; BYTE $0x04 // vpinsrb xmm0, xmm0, byte [rdx + r14], 4 + QUAD $0x000000b8249c8b48 // mov rbx, qword [rsp + 184] + LONG $0x2079e3c4; WORD $0x1a04; BYTE $0x05 // vpinsrb xmm0, xmm0, byte [rdx + rbx], 5 + LONG $0x2079a3c4; WORD $0x2204; BYTE $0x06 // vpinsrb xmm0, xmm0, byte [rdx + r12], 6 LONG $0x2079e3c4; WORD $0x3a04; BYTE $0x07 // vpinsrb xmm0, xmm0, byte [rdx + rdi], 7 - WORD $0x8949; BYTE $0xfd // mov r13, rdi - QUAD $0x000000c824bc8948 // mov qword [rsp + 200], rdi - LONG $0x2079a3c4; WORD $0x0a04; BYTE $0x08 // vpinsrb xmm0, xmm0, byte [rdx + r9], 8 - LONG $0x2079a3c4; WORD $0x3a04; BYTE $0x09 // vpinsrb xmm0, xmm0, byte [rdx + r15], 9 - LONG $0x2079a3c4; WORD $0x1a04; BYTE $0x0a // vpinsrb xmm0, xmm0, byte [rdx + r11], 10 - LONG $0x2079a3c4; WORD $0x1204; BYTE $0x0b // vpinsrb xmm0, xmm0, byte [rdx + r10], 11 + LONG $0x2079a3c4; WORD $0x3a04; BYTE $0x08 // vpinsrb xmm0, xmm0, byte [rdx + r15], 8 + LONG $0x2079a3c4; WORD $0x1a04; BYTE $0x09 // vpinsrb xmm0, xmm0, byte [rdx + r11], 9 + LONG $0x2079a3c4; WORD $0x1204; BYTE $0x0a // vpinsrb xmm0, xmm0, byte [rdx + r10], 10 + LONG $0x2079a3c4; WORD $0x0a04; BYTE $0x0b // vpinsrb xmm0, xmm0, byte [rdx + r9], 11 LONG $0x2079a3c4; WORD $0x0204; BYTE $0x0c // vpinsrb xmm0, xmm0, byte [rdx + r8], 12 LONG $0x2079e3c4; WORD $0x3204; BYTE $0x0d // vpinsrb xmm0, xmm0, byte [rdx + rsi], 13 LONG $0x2079e3c4; WORD $0x0204; BYTE $0x0e // vpinsrb xmm0, xmm0, byte [rdx + rax], 14 LONG $0x2079e3c4; WORD $0x0a04; BYTE $0x0f // vpinsrb xmm0, xmm0, byte [rdx + rcx], 15 - LONG $0x24748b4c; BYTE $0x78 // mov r14, qword [rsp + 120] + QUAD $0x000000c024b48b4c // mov r14, qword [rsp + 192] LONG $0x2061a3c4; WORD $0x321c; BYTE $0x01 // vpinsrb xmm3, xmm3, byte [rdx + r14], 1 - LONG $0x24548b4c; BYTE $0x40 // mov r10, qword [rsp + 64] - LONG $0x2061a3c4; WORD $0x121c; BYTE $0x02 // vpinsrb xmm3, xmm3, byte [rdx + r10], 2 - QUAD $0x000000b024a48b4c // mov r12, qword [rsp + 176] - LONG $0x2061a3c4; WORD $0x221c; BYTE $0x03 // vpinsrb xmm3, xmm3, byte [rdx + r12], 3 - LONG $0x24448b4c; BYTE $0x68 // mov r8, qword [rsp + 104] - LONG $0x2061a3c4; WORD $0x021c; BYTE $0x04 // vpinsrb xmm3, xmm3, byte [rdx + r8], 4 - LONG $0x245c8b4c; BYTE $0x60 // mov r11, qword [rsp + 96] + LONG $0x24648b4c; BYTE $0x78 // mov r12, qword [rsp + 120] + LONG $0x2061a3c4; WORD $0x221c; BYTE $0x02 // vpinsrb xmm3, xmm3, byte [rdx + r12], 2 + LONG $0x24448b4c; BYTE $0x38 // mov r8, qword [rsp + 56] + LONG $0x2061a3c4; WORD $0x021c; BYTE $0x03 // vpinsrb xmm3, xmm3, byte [rdx + r8], 3 + QUAD $0x000000a8248c8b4c // mov r9, qword [rsp + 168] + LONG $0x2061a3c4; WORD $0x0a1c; BYTE $0x04 // vpinsrb xmm3, xmm3, byte [rdx + r9], 4 + QUAD $0x00000088249c8b4c // mov r11, qword [rsp + 136] LONG $0x2061a3c4; WORD $0x1a1c; BYTE $0x05 // vpinsrb xmm3, xmm3, byte [rdx + r11], 5 - QUAD $0x000000a0248c8b4c // mov r9, qword [rsp + 160] - LONG $0x2061a3c4; WORD $0x0a1c; BYTE $0x06 // vpinsrb xmm3, xmm3, byte [rdx + r9], 6 - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] + QUAD $0x0000009824948b4c // mov r10, qword [rsp + 152] + LONG $0x2061a3c4; WORD $0x121c; BYTE $0x06 // vpinsrb xmm3, xmm3, byte [rdx + r10], 6 + QUAD $0x000000f824bc8b4c // mov r15, qword [rsp + 248] LONG $0x2061a3c4; WORD $0x3a1c; BYTE $0x07 // vpinsrb xmm3, xmm3, byte [rdx + r15], 7 - QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] + QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] LONG $0x2061e3c4; WORD $0x321c; BYTE $0x08 // vpinsrb xmm3, xmm3, byte [rdx + rsi], 8 - QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] LONG $0x2061e3c4; WORD $0x021c; BYTE $0x09 // vpinsrb xmm3, xmm3, byte [rdx + rax], 9 - QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] + LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] LONG $0x2061e3c4; WORD $0x1a1c; BYTE $0x0a // vpinsrb xmm3, xmm3, byte [rdx + rbx], 10 - QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] + QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] LONG $0x2061e3c4; WORD $0x0a1c; BYTE $0x0b // vpinsrb xmm3, xmm3, byte [rdx + rcx], 11 - QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] + LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] LONG $0x2061e3c4; WORD $0x3a1c; BYTE $0x0c // vpinsrb xmm3, xmm3, byte [rdx + rdi], 12 LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] LONG $0x2061e3c4; WORD $0x3a1c; BYTE $0x0d // vpinsrb xmm3, xmm3, byte [rdx + rdi], 13 - LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] + QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] LONG $0x2061e3c4; WORD $0x3a1c; BYTE $0x0e // vpinsrb xmm3, xmm3, byte [rdx + rdi], 14 - LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] + QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] LONG $0x2061e3c4; WORD $0x3a1c; BYTE $0x0f // vpinsrb xmm3, xmm3, byte [rdx + rdi], 15 - QUAD $0x000000e824bc8b48 // mov rdi, qword [rsp + 232] + LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] QUAD $0x01013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 1 - QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] - QUAD $0x02013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 2 - LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] + QUAD $0x0000010824ac8b4c // mov r13, qword [rsp + 264] + QUAD $0x02012a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 1], 2 + QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] QUAD $0x03013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 3 - QUAD $0x000000f024bc8b48 // mov rdi, qword [rsp + 240] - QUAD $0x04013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 4 - QUAD $0x000000f824bc8b48 // mov rdi, qword [rsp + 248] + LONG $0x246c8b4c; BYTE $0x70 // mov r13, qword [rsp + 112] + QUAD $0x04012a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 1], 4 + QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] QUAD $0x05013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 5 - LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] - QUAD $0x06013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 6 + QUAD $0x0000009024ac8b4c // mov r13, qword [rsp + 144] + QUAD $0x06012a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 1], 6 + QUAD $0x000000d024ac8b4c // mov r13, qword [rsp + 208] QUAD $0x07012a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 1], 7 - QUAD $0x000000c024ac8b4c // mov r13, qword [rsp + 192] - QUAD $0x08012a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 1], 8 - QUAD $0x000000b824ac8b4c // mov r13, qword [rsp + 184] - QUAD $0x09012a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 1], 9 QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] - QUAD $0x0a013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 10 + QUAD $0x08013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 8 + QUAD $0x000000e824bc8b48 // mov rdi, qword [rsp + 232] + QUAD $0x09013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 9 LONG $0x247c8b48; BYTE $0x58 // mov rdi, qword [rsp + 88] + QUAD $0x0a013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 10 + QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] QUAD $0x0b013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 11 - QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] + LONG $0x247c8b48; BYTE $0x50 // mov rdi, qword [rsp + 80] QUAD $0x0c013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 12 - QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] + LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] QUAD $0x0d013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 13 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] QUAD $0x0e013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 14 - LONG $0x247c8b48; BYTE $0x50 // mov rdi, qword [rsp + 80] + LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] QUAD $0x0f013a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 1], 15 QUAD $0x0101326c2029a3c4 // vpinsrb xmm5, xmm10, byte [rdx + r14 + 1], 1 - QUAD $0x0201126c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r10 + 1], 2 - QUAD $0x0301226c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r12 + 1], 3 - QUAD $0x0401026c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r8 + 1], 4 + QUAD $0x0201226c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r12 + 1], 2 + WORD $0x894c; BYTE $0xe7 // mov rdi, r12 + QUAD $0x0301026c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r8 + 1], 3 + QUAD $0x04010a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 1], 4 QUAD $0x05011a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r11 + 1], 5 - QUAD $0x06010a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 1], 6 + QUAD $0x0601126c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r10 + 1], 6 QUAD $0x07013a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r15 + 1], 7 QUAD $0x0801326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 1], 8 QUAD $0x0901026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 1], 9 QUAD $0x0a011a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 1], 10 QUAD $0x0b010a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 1], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x0c01026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 1], 12 LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0d01026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 1], 13 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0e01026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 1], 14 LONG $0x386563c4; WORD $0x01f8 // vinserti128 ymm15, ymm3, xmm0, 1 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] QUAD $0x0f0102442051e3c4 // vpinsrb xmm0, xmm5, byte [rdx + rax + 1], 15 - QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] LONG $0x0274b60f; BYTE $0x08 // movzx esi, byte [rdx + rax + 8] LONG $0xce6e79c5 // vmovd xmm9, esi LONG $0x387de3c4; WORD $0x01c4 // vinserti128 ymm0, ymm0, xmm4, 1 QUAD $0x0004c024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 1216], ymm0 - QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] + QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] LONG $0x0274b60f; BYTE $0x08 // movzx esi, byte [rdx + rax + 8] LONG $0xd66e79c5 // vmovd xmm10, esi - QUAD $0x000000e824848b4c // mov r8, qword [rsp + 232] + LONG $0x24448b4c; BYTE $0x68 // mov r8, qword [rsp + 104] QUAD $0x0001e024846ff9c5; BYTE $0x00 // vmovdqa xmm0, oword [rsp + 480] QUAD $0x010202442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 2], 1 - QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] - QUAD $0x02020a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 2], 2 - LONG $0x24548b4c; BYTE $0x70 // mov r10, qword [rsp + 112] + QUAD $0x00000108248c8b4c // mov r9, qword [rsp + 264] + QUAD $0x02020a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 2], 2 + QUAD $0x000000c824948b4c // mov r10, qword [rsp + 200] QUAD $0x030212442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 2], 3 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] QUAD $0x040202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 4 - QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] + QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] QUAD $0x050202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 5 - LONG $0x244c8b4c; BYTE $0x28 // mov r9, qword [rsp + 40] - QUAD $0x06020a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 2], 6 - QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] - QUAD $0x07023a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 2], 7 - QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] - QUAD $0x080202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 8 - WORD $0x894d; BYTE $0xec // mov r12, r13 - QUAD $0x09022a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 2], 9 - QUAD $0x000000e024ac8b4c // mov r13, qword [rsp + 224] + QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] + QUAD $0x060202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 6 + QUAD $0x07022a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 2], 7 + QUAD $0x000000e0248c8b48 // mov rcx, qword [rsp + 224] + QUAD $0x08020a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 2], 8 + QUAD $0x000000e824a48b4c // mov r12, qword [rsp + 232] + QUAD $0x090222442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 2], 9 + LONG $0x246c8b4c; BYTE $0x58 // mov r13, qword [rsp + 88] QUAD $0x0a022a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 2], 10 - LONG $0x245c8b4c; BYTE $0x58 // mov r11, qword [rsp + 88] + QUAD $0x000000d8249c8b4c // mov r11, qword [rsp + 216] QUAD $0x0b021a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 2], 11 - QUAD $0x0000008024b48b4c // mov r14, qword [rsp + 128] + LONG $0x24748b4c; BYTE $0x50 // mov r14, qword [rsp + 80] QUAD $0x0c0232442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 2], 12 - QUAD $0x000000d024bc8b4c // mov r15, qword [rsp + 208] + LONG $0x247c8b4c; BYTE $0x48 // mov r15, qword [rsp + 72] QUAD $0x0d023a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 2], 13 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] QUAD $0x0e0202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 14 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] QUAD $0x0f0202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 15 - LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] + QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] QUAD $0x0001c0249c6ff9c5; BYTE $0x00 // vmovdqa xmm3, oword [rsp + 448] QUAD $0x0102025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 2], 1 - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] - QUAD $0x0202325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 2], 2 - QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] + QUAD $0x02023a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 2], 2 + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] QUAD $0x0302325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 2], 3 - LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] + QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] QUAD $0x0402325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 2], 4 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] QUAD $0x0502325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 2], 5 - QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] + QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] QUAD $0x0602325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 2], 6 - QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] + QUAD $0x000000f824b48b48 // mov rsi, qword [rsp + 248] QUAD $0x0702325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 2], 7 - QUAD $0x00000088249c8b48 // mov rbx, qword [rsp + 136] + QUAD $0x000000a0249c8b48 // mov rbx, qword [rsp + 160] QUAD $0x08021a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 2], 8 - QUAD $0x00000098249c8b48 // mov rbx, qword [rsp + 152] - QUAD $0x09021a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 2], 9 - QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] - QUAD $0x0a021a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 2], 10 - QUAD $0x000000d8249c8b48 // mov rbx, qword [rsp + 216] - QUAD $0x0b021a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 2], 11 - QUAD $0x00000120249c8b48 // mov rbx, qword [rsp + 288] - QUAD $0x0c021a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 2], 12 - LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] - QUAD $0x0d021a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 2], 13 - LONG $0x245c8b48; BYTE $0x48 // mov rbx, qword [rsp + 72] - QUAD $0x0e021a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 2], 14 - LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] - QUAD $0x0f021a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 2], 15 + QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] + QUAD $0x09023a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 2], 9 + LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] + QUAD $0x0a023a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 2], 10 + QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] + QUAD $0x0b023a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 2], 11 + LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + QUAD $0x0c023a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 2], 12 + LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] + QUAD $0x0d023a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 2], 13 + QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] + QUAD $0x0e023a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 2], 14 + QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] + QUAD $0x0f023a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 2], 15 QUAD $0x010302642021a3c4 // vpinsrb xmm4, xmm11, byte [rdx + r8 + 3], 1 - QUAD $0x02030a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 3], 2 + QUAD $0x02030a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r9 + 3], 2 QUAD $0x030312642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r10 + 3], 3 - QUAD $0x000000f0249c8b48 // mov rbx, qword [rsp + 240] - QUAD $0x04031a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 3], 4 - QUAD $0x000000f8248c8b48 // mov rcx, qword [rsp + 248] - QUAD $0x05030a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 3], 5 - QUAD $0x06030a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r9 + 3], 6 - QUAD $0x07033a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 3], 7 - QUAD $0x000000c024bc8b48 // mov rdi, qword [rsp + 192] - QUAD $0x08033a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 3], 8 + LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] + QUAD $0x04033a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 3], 4 + QUAD $0x000000b824848b4c // mov r8, qword [rsp + 184] + QUAD $0x050302642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r8 + 3], 5 + QUAD $0x0000009024bc8b48 // mov rdi, qword [rsp + 144] + QUAD $0x06033a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 3], 6 + QUAD $0x000000d0248c8b4c // mov r9, qword [rsp + 208] + QUAD $0x07030a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r9 + 3], 7 + QUAD $0x08030a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 3], 8 QUAD $0x090322642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r12 + 3], 9 QUAD $0x0a032a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 3], 10 QUAD $0x0b031a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r11 + 3], 11 + WORD $0x894d; BYTE $0xdc // mov r12, r11 QUAD $0x0c0332642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r14 + 3], 12 QUAD $0x0d033a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r15 + 3], 13 - LONG $0x244c8b4c; BYTE $0x30 // mov r9, qword [rsp + 48] - QUAD $0x0e030a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r9 + 3], 14 - LONG $0x247c8b4c; BYTE $0x50 // mov r15, qword [rsp + 80] - QUAD $0x0f033a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r15 + 3], 15 - QUAD $0x0103026c2039e3c4 // vpinsrb xmm5, xmm8, byte [rdx + rax + 3], 1 LONG $0x245c8b4c; BYTE $0x40 // mov r11, qword [rsp + 64] - QUAD $0x02031a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r11 + 3], 2 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x0e031a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r11 + 3], 14 + LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] + QUAD $0x0f030a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 3], 15 + QUAD $0x0103026c2039e3c4 // vpinsrb xmm5, xmm8, byte [rdx + rax + 3], 1 + WORD $0x8949; BYTE $0xc5 // mov r13, rax + LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] + QUAD $0x0203026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 2 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] QUAD $0x0303026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 3 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] QUAD $0x0403026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 4 - LONG $0x24548b4c; BYTE $0x60 // mov r10, qword [rsp + 96] - QUAD $0x0503126c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r10 + 3], 5 - QUAD $0x000000a024b48b4c // mov r14, qword [rsp + 160] - QUAD $0x0603326c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r14 + 3], 6 - QUAD $0x0703326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 3], 7 QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] - QUAD $0x0803026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 8 - QUAD $0x00000098249c8b48 // mov rbx, qword [rsp + 152] - QUAD $0x09031a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 3], 9 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0503026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 5 + QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] + QUAD $0x0603026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 6 + QUAD $0x0703326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 3], 7 + QUAD $0x08031a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 3], 8 + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x0903026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 9 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0a03026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 10 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x0b03026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x0c03026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 12 LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0d03026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 13 LONG $0x3865e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm3, xmm0, 1 QUAD $0x0001e024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 480], ymm0 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0e0302442051e3c4 // vpinsrb xmm0, xmm5, byte [rdx + rax + 3], 14 - QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] - LONG $0x0274b60f; BYTE $0x09 // movzx esi, byte [rdx + rax + 9] + QUAD $0x000000f0248c8b48 // mov rcx, qword [rsp + 240] + LONG $0x0a74b60f; BYTE $0x09 // movzx esi, byte [rdx + rcx + 9] LONG $0xc66e79c5 // vmovd xmm8, esi - LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] - QUAD $0x0f0322442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 3], 15 + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0f0302442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 3], 15 LONG $0x387de3c4; WORD $0x01c4 // vinserti128 ymm0, ymm0, xmm4, 1 QUAD $0x0001c024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 448], ymm0 - QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] - LONG $0x0274b60f; BYTE $0x09 // movzx esi, byte [rdx + rax + 9] + QUAD $0x00000100248c8b48 // mov rcx, qword [rsp + 256] + LONG $0x0a74b60f; BYTE $0x09 // movzx esi, byte [rdx + rcx + 9] LONG $0xde6e79c5 // vmovd xmm11, esi + LONG $0x24748b4c; BYTE $0x68 // mov r14, qword [rsp + 104] QUAD $0x0001a024846ff9c5; BYTE $0x00 // vmovdqa xmm0, oword [rsp + 416] - QUAD $0x010402442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 4], 1 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] - QUAD $0x020402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 2 - LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] - QUAD $0x030402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 3 - QUAD $0x000000f024ac8b4c // mov r13, qword [rsp + 240] - QUAD $0x04042a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 4], 4 - QUAD $0x05040a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 4], 5 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] - QUAD $0x060402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 6 - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] - QUAD $0x070402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 7 - QUAD $0x08043a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 4], 8 - QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] - QUAD $0x090402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 9 - QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] - QUAD $0x0a0402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 10 + QUAD $0x010432442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 4], 1 + QUAD $0x0000010824bc8b4c // mov r15, qword [rsp + 264] + QUAD $0x02043a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 4], 2 + QUAD $0x030412442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 4], 3 + LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] + QUAD $0x04043a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 4], 4 + WORD $0x894c; BYTE $0xc1 // mov rcx, r8 + QUAD $0x050402442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 4], 5 + QUAD $0x00000090249c8b48 // mov rbx, qword [rsp + 144] + QUAD $0x06041a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 4], 6 + QUAD $0x07040a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 4], 7 + QUAD $0x000000e0248c8b4c // mov r9, qword [rsp + 224] + QUAD $0x08040a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 4], 8 + QUAD $0x000000e824848b4c // mov r8, qword [rsp + 232] + QUAD $0x090402442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 4], 9 LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] - QUAD $0x0b0402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 11 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] - QUAD $0x0c0402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 12 - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] - QUAD $0x0d0402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 13 - QUAD $0x0e040a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 4], 14 - QUAD $0x0f043a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 4], 15 - LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] - QUAD $0x0104025c2011e3c4 // vpinsrb xmm3, xmm13, byte [rdx + rax + 4], 1 - QUAD $0x02041a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 4], 2 - QUAD $0x000000b0249c8b4c // mov r11, qword [rsp + 176] - QUAD $0x03041a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 4], 3 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] - QUAD $0x0404025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 4 - QUAD $0x0504125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 4], 5 - WORD $0x894c; BYTE $0xf6 // mov rsi, r14 - QUAD $0x0604325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 4], 6 - QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] - QUAD $0x0704125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 4], 7 - QUAD $0x00000088248c8b4c // mov r9, qword [rsp + 136] - QUAD $0x08040a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 4], 8 - QUAD $0x09041a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 4], 9 - QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] - QUAD $0x0a041a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 4], 10 - QUAD $0x000000d824b48b4c // mov r14, qword [rsp + 216] - QUAD $0x0b04325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 4], 11 - QUAD $0x00000120249c8b48 // mov rbx, qword [rsp + 288] - QUAD $0x0c041a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 4], 12 - LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] - QUAD $0x0d041a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 4], 13 - LONG $0x247c8b4c; BYTE $0x48 // mov r15, qword [rsp + 72] - QUAD $0x0e043a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 4], 14 - QUAD $0x0f04225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 4], 15 - QUAD $0x010502642009a3c4 // vpinsrb xmm4, xmm14, byte [rdx + r8 + 5], 1 - QUAD $0x000000a824bc8b4c // mov r15, qword [rsp + 168] + QUAD $0x0a0402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 10 + QUAD $0x0b0422442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 4], 11 + LONG $0x24748b48; BYTE $0x50 // mov rsi, qword [rsp + 80] + QUAD $0x0c0432442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 4], 12 + LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] + QUAD $0x0d0432442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 4], 13 + QUAD $0x0e041a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 4], 14 + LONG $0x24648b4c; BYTE $0x60 // mov r12, qword [rsp + 96] + QUAD $0x0f0422442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 4], 15 + QUAD $0x01042a5c2011a3c4 // vpinsrb xmm3, xmm13, byte [rdx + r13 + 4], 1 + LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] + QUAD $0x0204325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 4], 2 + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + QUAD $0x0304325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 4], 3 + QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] + QUAD $0x0404325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 4], 4 + QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] + QUAD $0x0504025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 5 + QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] + QUAD $0x0604325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 4], 6 + QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] + QUAD $0x0704025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 7 + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] + QUAD $0x0804025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 8 + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x0904025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 9 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x0a04025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 10 + QUAD $0x00000080249c8b4c // mov r11, qword [rsp + 128] + QUAD $0x0b041a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 4], 11 + LONG $0x245c8b4c; BYTE $0x30 // mov r11, qword [rsp + 48] + QUAD $0x0c041a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 4], 12 + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x0d04025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 13 + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + QUAD $0x0e04025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 14 + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0f04025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 15 + QUAD $0x010532642009a3c4 // vpinsrb xmm4, xmm14, byte [rdx + r14 + 5], 1 QUAD $0x02053a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r15 + 5], 2 - LONG $0x245c8b48; BYTE $0x70 // mov rbx, qword [rsp + 112] - QUAD $0x03051a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 5], 3 - QUAD $0x04052a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 5], 4 + WORD $0x894d; BYTE $0xfe // mov r14, r15 + QUAD $0x030512642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r10 + 5], 3 + QUAD $0x04053a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 5], 4 QUAD $0x05050a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 5], 5 - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] - QUAD $0x06050a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 5], 6 - QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] - QUAD $0x07050a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 5], 7 - QUAD $0x08053a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 5], 8 - QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] - QUAD $0x09050a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 5], 9 - QUAD $0x000000e0248c8b48 // mov rcx, qword [rsp + 224] - QUAD $0x0a050a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 5], 10 - LONG $0x247c8b48; BYTE $0x58 // mov rdi, qword [rsp + 88] - QUAD $0x0b053a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 5], 11 - QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] - QUAD $0x0c053a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 5], 12 - QUAD $0x000000d024ac8b4c // mov r13, qword [rsp + 208] - QUAD $0x0d052a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 5], 13 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] - QUAD $0x0e053a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 5], 14 - LONG $0x247c8b48; BYTE $0x50 // mov rdi, qword [rsp + 80] - QUAD $0x0f053a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 5], 15 - LONG $0x247c8b48; BYTE $0x78 // mov rdi, qword [rsp + 120] - QUAD $0x01053a6c2049e3c4 // vpinsrb xmm5, xmm6, byte [rdx + rdi + 5], 1 - LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] - QUAD $0x02053a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 5], 2 - QUAD $0x03051a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r11 + 5], 3 + WORD $0x8949; BYTE $0xca // mov r10, rcx + QUAD $0x06051a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 5], 6 + QUAD $0x000000d024bc8b4c // mov r15, qword [rsp + 208] + QUAD $0x07053a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r15 + 5], 7 + QUAD $0x08050a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r9 + 5], 8 + QUAD $0x090502642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r8 + 5], 9 + LONG $0x24448b4c; BYTE $0x58 // mov r8, qword [rsp + 88] + QUAD $0x0a0502642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r8 + 5], 10 + QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] + QUAD $0x0b050a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 5], 11 + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0c0502642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 5], 12 + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0d0502642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 5], 13 + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x0e0502642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 5], 14 + QUAD $0x0f0522642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r12 + 5], 15 + QUAD $0x01052a6c2049a3c4 // vpinsrb xmm5, xmm6, byte [rdx + r13 + 5], 1 + LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] + QUAD $0x0205026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 2 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x0305026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 3 + QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] QUAD $0x0405026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 4 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] QUAD $0x0505026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 5 QUAD $0x0605326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 5], 6 - QUAD $0x0705126c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r10 + 5], 7 - QUAD $0x08050a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 5], 8 - QUAD $0x00000098248c8b4c // mov r9, qword [rsp + 152] - QUAD $0x09050a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 5], 9 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x000000f8249c8b48 // mov rbx, qword [rsp + 248] + QUAD $0x07051a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 5], 7 + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] + QUAD $0x0805026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 8 + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x0905026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 9 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0a05026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 10 - QUAD $0x0b05326c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r14 + 5], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] - QUAD $0x0c05026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 12 + QUAD $0x0000008024ac8b4c // mov r13, qword [rsp + 128] + QUAD $0x0b052a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r13 + 5], 11 + QUAD $0x0c051a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r11 + 5], 12 + WORD $0x894d; BYTE $0xdc // mov r12, r11 LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0d05026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 13 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0e05026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 14 LONG $0x386563c4; WORD $0x01f0 // vinserti128 ymm14, ymm3, xmm0, 1 - QUAD $0x0f0522442051a3c4 // vpinsrb xmm0, xmm5, byte [rdx + r12 + 5], 15 - QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0f0502442051e3c4 // vpinsrb xmm0, xmm5, byte [rdx + rax + 5], 15 + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] LONG $0x0274b60f; BYTE $0x0a // movzx esi, byte [rdx + rax + 10] LONG $0xde6ef9c5 // vmovd xmm3, esi LONG $0x387de3c4; WORD $0x01c4 // vinserti128 ymm0, ymm0, xmm4, 1 QUAD $0x0001a024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 416], ymm0 - QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] - LONG $0x0274b60f; BYTE $0x0a // movzx esi, byte [rdx + rax + 10] + QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] + LONG $0x3274b60f; BYTE $0x0a // movzx esi, byte [rdx + rsi + 10] LONG $0xe66ef9c5 // vmovd xmm4, esi - WORD $0x894d; BYTE $0xc6 // mov r14, r8 - QUAD $0x010602442019a3c4 // vpinsrb xmm0, xmm12, byte [rdx + r8 + 6], 1 - QUAD $0x02063a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 6], 2 - QUAD $0x03061a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 6], 3 - QUAD $0x000000f0249c8b4c // mov r11, qword [rsp + 240] - QUAD $0x04061a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 6], 4 - QUAD $0x000000f824848b4c // mov r8, qword [rsp + 248] - QUAD $0x050602442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 6], 5 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] + QUAD $0x01063a442019e3c4 // vpinsrb xmm0, xmm12, byte [rdx + rdi + 6], 1 + QUAD $0x020632442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 6], 2 + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] + QUAD $0x030602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 3 + LONG $0x24748b4c; BYTE $0x70 // mov r14, qword [rsp + 112] + QUAD $0x040632442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 6], 4 + QUAD $0x050612442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 6], 5 + QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] QUAD $0x060602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 6 - QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] - QUAD $0x07063a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 6], 7 - QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] - QUAD $0x080602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 8 - QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] - QUAD $0x090602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 9 - QUAD $0x0a060a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 6], 10 - LONG $0x24548b4c; BYTE $0x58 // mov r10, qword [rsp + 88] - QUAD $0x0b0612442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 6], 11 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] - QUAD $0x0c0602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 12 - QUAD $0x0d062a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 6], 13 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] - QUAD $0x0e060a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 6], 14 - LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] - QUAD $0x0f060a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 6], 15 - LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] + QUAD $0x07063a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 6], 7 + QUAD $0x08060a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 6], 8 + QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] + QUAD $0x090632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 6], 9 + QUAD $0x0a0602442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 6], 10 + QUAD $0x0b060a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 6], 11 + LONG $0x24448b4c; BYTE $0x50 // mov r8, qword [rsp + 80] + QUAD $0x0c0602442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 6], 12 + LONG $0x244c8b4c; BYTE $0x48 // mov r9, qword [rsp + 72] + QUAD $0x0d060a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 6], 13 + LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] + QUAD $0x0e0632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 6], 14 + LONG $0x24548b4c; BYTE $0x60 // mov r10, qword [rsp + 96] + QUAD $0x0f0612442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 6], 15 + QUAD $0x000000c0248c8b48 // mov rcx, qword [rsp + 192] QUAD $0x01060a6c2041e3c4 // vpinsrb xmm5, xmm7, byte [rdx + rcx + 6], 1 - LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] - QUAD $0x02060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 2 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] - QUAD $0x03060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 3 - LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] - QUAD $0x04060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 4 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] + QUAD $0x0206326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 6], 2 + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + QUAD $0x0306326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 6], 3 + QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] + QUAD $0x0406326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 6], 4 + QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] QUAD $0x0506326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 6], 5 - QUAD $0x000000a0249c8b48 // mov rbx, qword [rsp + 160] - QUAD $0x06061a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 6], 6 - QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] - QUAD $0x07060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 7 - QUAD $0x00000088248c8b48 // mov rcx, qword [rsp + 136] - QUAD $0x08060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 8 - QUAD $0x09060a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 6], 9 - QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] + QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] + QUAD $0x06060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 6 + QUAD $0x07061a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 6], 7 + QUAD $0x000000a0249c8b4c // mov r11, qword [rsp + 160] + QUAD $0x08061a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r11 + 6], 8 + QUAD $0x000000b0249c8b48 // mov rbx, qword [rsp + 176] + QUAD $0x09061a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 6], 9 + LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] QUAD $0x0a060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 10 - QUAD $0x000000d824a48b4c // mov r12, qword [rsp + 216] - QUAD $0x0b06226c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r12 + 6], 11 - QUAD $0x00000120248c8b4c // mov r9, qword [rsp + 288] - QUAD $0x0c060a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 6], 12 - LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] - QUAD $0x0d062a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r13 + 6], 13 - LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] + WORD $0x894d; BYTE $0xef // mov r15, r13 + QUAD $0x0b062a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r13 + 6], 11 + QUAD $0x0c06226c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r12 + 6], 12 + LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + QUAD $0x0d060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 13 + QUAD $0x00000120248c8b48 // mov rcx, qword [rsp + 288] QUAD $0x0e060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 14 - LONG $0x246c8b4c; BYTE $0x38 // mov r13, qword [rsp + 56] + QUAD $0x0000014024ac8b4c // mov r13, qword [rsp + 320] QUAD $0x0f062a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r13 + 6], 15 - QUAD $0x010732542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 7], 1 - QUAD $0x02073a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 7], 2 - LONG $0x246c8b4c; BYTE $0x70 // mov r13, qword [rsp + 112] - QUAD $0x03072a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 7], 3 - QUAD $0x04071a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 7], 4 - QUAD $0x050702542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 7], 5 - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] - QUAD $0x06070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 6 - QUAD $0x07073a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 7], 7 - QUAD $0x000000c024b48b4c // mov r14, qword [rsp + 192] - QUAD $0x080732542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 7], 8 - QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] - QUAD $0x09070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 9 - QUAD $0x000000e0248c8b48 // mov rcx, qword [rsp + 224] - QUAD $0x0a070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 10 - QUAD $0x0b0712542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 7], 11 - QUAD $0x0c0702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 7], 12 + QUAD $0x01073a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 7], 1 + QUAD $0x0000010824ac8b4c // mov r13, qword [rsp + 264] + QUAD $0x02072a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 7], 2 + QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] + QUAD $0x03073a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 7], 3 + QUAD $0x040732542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 7], 4 + QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] + QUAD $0x05073a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 7], 5 + QUAD $0x060702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 7], 6 QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] - QUAD $0x0d0702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 7], 13 - LONG $0x247c8b4c; BYTE $0x30 // mov r15, qword [rsp + 48] - QUAD $0x0e073a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 7], 14 - LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] - QUAD $0x0f070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 15 + QUAD $0x070702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 7], 7 + QUAD $0x000000e0248c8b48 // mov rcx, qword [rsp + 224] + QUAD $0x08070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 8 + QUAD $0x000000e8248c8b48 // mov rcx, qword [rsp + 232] + QUAD $0x09070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 9 + LONG $0x247c8b48; BYTE $0x58 // mov rdi, qword [rsp + 88] + QUAD $0x0a073a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 7], 10 + QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] + QUAD $0x0b073a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 7], 11 + QUAD $0x0c0702542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 7], 12 + QUAD $0x0d070a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 7], 13 + LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] + QUAD $0x0e070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 14 + QUAD $0x0f0712542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 7], 15 + QUAD $0x000000c024b48b4c // mov r14, qword [rsp + 192] + QUAD $0x0107324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 7], 1 LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] - QUAD $0x01070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 1 - LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] - QUAD $0x02073a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 7], 2 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] + QUAD $0x02070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 2 + LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] QUAD $0x03070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 3 - LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] - QUAD $0x04073a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 7], 4 + QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] + QUAD $0x04070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 4 QUAD $0x0507324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 7], 5 - QUAD $0x06071a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 7], 6 - QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] - QUAD $0x0707324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 7], 7 - QUAD $0x00000088248c8b48 // mov rcx, qword [rsp + 136] - QUAD $0x08070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 8 - QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] - QUAD $0x09073a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 7], 9 - QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] + QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] + QUAD $0x06070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 6 + QUAD $0x000000f8248c8b48 // mov rcx, qword [rsp + 248] + QUAD $0x07070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 7 + QUAD $0x08071a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 7], 8 + QUAD $0x09071a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 7], 9 + LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] QUAD $0x0a070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 10 - QUAD $0x0b07224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 7], 11 - QUAD $0x0c070a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 7], 12 + QUAD $0x0b073a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 7], 11 + QUAD $0x0c07224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 7], 12 LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] QUAD $0x0d070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 13 LONG $0x3855e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm5, xmm0, 1 QUAD $0x0004a024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 1184], ymm0 - LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] + QUAD $0x00000120248c8b48 // mov rcx, qword [rsp + 288] QUAD $0x0e070a442071e3c4 // vpinsrb xmm0, xmm1, byte [rdx + rcx + 7], 14 - QUAD $0x00000100248c8b48 // mov rcx, qword [rsp + 256] + QUAD $0x000000f0248c8b48 // mov rcx, qword [rsp + 240] LONG $0x0a74b60f; BYTE $0x0b // movzx esi, byte [rdx + rcx + 11] LONG $0xce6ef9c5 // vmovd xmm1, esi - LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] - QUAD $0x0f0722442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 7], 15 + QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] + QUAD $0x0f070a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 7], 15 LONG $0x387de3c4; WORD $0x01c2 // vinserti128 ymm0, ymm0, xmm2, 1 QUAD $0x00048024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 1152], ymm0 - QUAD $0x00000108248c8b48 // mov rcx, qword [rsp + 264] + QUAD $0x00000100248c8b48 // mov rcx, qword [rsp + 256] LONG $0x0a74b60f; BYTE $0x0b // movzx esi, byte [rdx + rcx + 11] LONG $0xd66ef9c5 // vmovd xmm2, esi - QUAD $0x000000e8248c8b48 // mov rcx, qword [rsp + 232] + LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] QUAD $0x01080a442031e3c4 // vpinsrb xmm0, xmm9, byte [rdx + rcx + 8], 1 - QUAD $0x000000a824848b4c // mov r8, qword [rsp + 168] - QUAD $0x020802442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 8], 2 - QUAD $0x03082a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 8], 3 - WORD $0x894d; BYTE $0xdd // mov r13, r11 - QUAD $0x04081a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 8], 4 - QUAD $0x000000f8249c8b4c // mov r11, qword [rsp + 248] - QUAD $0x05081a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 8], 5 - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] - QUAD $0x06080a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 8], 6 - QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] - QUAD $0x070832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 8], 7 - QUAD $0x080832442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 8], 8 - QUAD $0x000000b824948b4c // mov r10, qword [rsp + 184] - QUAD $0x090812442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 8], 9 - QUAD $0x000000e0249c8b48 // mov rbx, qword [rsp + 224] + WORD $0x894d; BYTE $0xef // mov r15, r13 + QUAD $0x02082a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 8], 2 + QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] + QUAD $0x03080a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 8], 3 + LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] + QUAD $0x040832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 8], 4 + QUAD $0x000000b824ac8b4c // mov r13, qword [rsp + 184] + QUAD $0x05082a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 8], 5 + QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] + QUAD $0x060832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 8], 6 + WORD $0x8949; BYTE $0xc0 // mov r8, rax + QUAD $0x070802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 8], 7 + QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] + QUAD $0x08083a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 8], 8 + QUAD $0x000000e824a48b4c // mov r12, qword [rsp + 232] + QUAD $0x090822442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 8], 9 + LONG $0x245c8b48; BYTE $0x58 // mov rbx, qword [rsp + 88] QUAD $0x0a081a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 8], 10 - LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] - QUAD $0x0b0832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 8], 11 - QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] - QUAD $0x0c0832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 8], 12 + QUAD $0x000000d8248c8b4c // mov r9, qword [rsp + 216] + QUAD $0x0b080a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 8], 11 + LONG $0x24548b4c; BYTE $0x50 // mov r10, qword [rsp + 80] + QUAD $0x0c0812442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 8], 12 + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] QUAD $0x0d0802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 8], 13 - QUAD $0x0e083a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 8], 14 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x0e0802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 8], 14 + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] QUAD $0x0f0802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 8], 15 + QUAD $0x0108326c2029a3c4 // vpinsrb xmm5, xmm10, byte [rdx + r14 + 8], 1 LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] - QUAD $0x0108026c2029e3c4 // vpinsrb xmm5, xmm10, byte [rdx + rax + 8], 1 - LONG $0x244c8b4c; BYTE $0x40 // mov r9, qword [rsp + 64] - QUAD $0x02080a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 8], 2 - QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] - QUAD $0x03083a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r15 + 8], 3 - LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] + QUAD $0x0208026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 2 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x0308026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 3 + QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] QUAD $0x0408326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 8], 4 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] - QUAD $0x0508026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 5 - QUAD $0x000000a024b48b4c // mov r14, qword [rsp + 160] - QUAD $0x0608326c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r14 + 8], 6 - QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] - QUAD $0x0708026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 7 QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] - QUAD $0x0808026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 8 - QUAD $0x09083a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 8], 9 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0508026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 5 + QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] + QUAD $0x0608026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 6 + QUAD $0x000000f824b48b4c // mov r14, qword [rsp + 248] + QUAD $0x0708326c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r14 + 8], 7 + QUAD $0x08081a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r11 + 8], 8 + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x0908026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 9 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0a08026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 10 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x0b08026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 11 - QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] - QUAD $0x0c083a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 8], 12 - LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] - QUAD $0x0d083a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 8], 13 - LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] - QUAD $0x0e083a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 8], 14 - QUAD $0x0f08226c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r12 + 8], 15 - QUAD $0x000000e824a48b4c // mov r12, qword [rsp + 232] - QUAD $0x010922742039a3c4 // vpinsrb xmm6, xmm8, byte [rdx + r12 + 9], 1 - QUAD $0x020902742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r8 + 9], 2 - LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] - QUAD $0x03093a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rdi + 9], 3 - QUAD $0x04092a742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r13 + 9], 4 - QUAD $0x05091a742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r11 + 9], 5 - QUAD $0x06090a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rcx + 9], 6 - QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] - QUAD $0x07090a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rcx + 9], 7 - QUAD $0x000000c0248c8b48 // mov rcx, qword [rsp + 192] - QUAD $0x08090a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rcx + 9], 8 - QUAD $0x090912742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r10 + 9], 9 + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + QUAD $0x0c08026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 12 + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x0d08026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 13 + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + QUAD $0x0e08026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 14 + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0f08026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 15 + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + QUAD $0x010902742039e3c4 // vpinsrb xmm6, xmm8, byte [rdx + rax + 9], 1 + QUAD $0x02093a742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r15 + 9], 2 + QUAD $0x03090a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rcx + 9], 3 + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] + QUAD $0x040902742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rax + 9], 4 + QUAD $0x05092a742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r13 + 9], 5 + QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] + QUAD $0x060902742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rax + 9], 6 + QUAD $0x070902742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r8 + 9], 7 + QUAD $0x08093a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rdi + 9], 8 + QUAD $0x090922742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r12 + 9], 9 QUAD $0x0a091a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rbx + 9], 10 - LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] - QUAD $0x0b090a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rcx + 9], 11 - QUAD $0x00000080249c8b4c // mov r11, qword [rsp + 128] - QUAD $0x0c091a742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r11 + 9], 12 - QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] - QUAD $0x0d090a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rcx + 9], 13 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] - QUAD $0x0e090a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rcx + 9], 14 - LONG $0x24648b4c; BYTE $0x50 // mov r12, qword [rsp + 80] - QUAD $0x0f0922742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r12 + 9], 15 - LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] - QUAD $0x01090a7c2021e3c4 // vpinsrb xmm7, xmm11, byte [rdx + rcx + 9], 1 - QUAD $0x02090a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r9 + 9], 2 - QUAD $0x03093a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r15 + 9], 3 + QUAD $0x0b090a742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r9 + 9], 11 + QUAD $0x0c0912742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r10 + 9], 12 + LONG $0x24548b4c; BYTE $0x48 // mov r10, qword [rsp + 72] + QUAD $0x0d0912742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r10 + 9], 13 + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x0e0902742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rax + 9], 14 + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + QUAD $0x0f0902742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rax + 9], 15 + QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] + QUAD $0x0109027c2021e3c4 // vpinsrb xmm7, xmm11, byte [rdx + rax + 9], 1 + LONG $0x246c8b4c; BYTE $0x78 // mov r13, qword [rsp + 120] + QUAD $0x02092a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r13 + 9], 2 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x0309027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 3 QUAD $0x0409327c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rsi + 9], 4 - LONG $0x246c8b4c; BYTE $0x60 // mov r13, qword [rsp + 96] - QUAD $0x05092a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r13 + 9], 5 - QUAD $0x0609327c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r14 + 9], 6 - QUAD $0x00000090249c8b48 // mov rbx, qword [rsp + 144] - QUAD $0x07091a7c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rbx + 9], 7 - QUAD $0x0000008824bc8b4c // mov r15, qword [rsp + 136] - QUAD $0x08093a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r15 + 9], 8 - QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] - QUAD $0x09090a7c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rcx + 9], 9 - QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] - QUAD $0x0a090a7c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rcx + 9], 10 + QUAD $0x00000088249c8b48 // mov rbx, qword [rsp + 136] + QUAD $0x05091a7c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rbx + 9], 5 + QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] + QUAD $0x0609027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 6 + QUAD $0x0709327c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r14 + 9], 7 + QUAD $0x08091a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r11 + 9], 8 + WORD $0x894d; BYTE $0xde // mov r14, r11 + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x0909027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 9 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x0a09027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 10 + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x0b09027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x0c09027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 12 LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0d09027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 13 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0e09027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 14 LONG $0x3855e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm5, xmm0, 1 QUAD $0x00046024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 1120], ymm0 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] QUAD $0x0f09026c2041e3c4 // vpinsrb xmm5, xmm7, byte [rdx + rax + 9], 15 - QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] LONG $0x0274b60f; BYTE $0x0c // movzx esi, byte [rdx + rax + 12] LONG $0xc66ef9c5 // vmovd xmm0, esi LONG $0x3855e3c4; WORD $0x01ee // vinserti128 ymm5, ymm5, xmm6, 1 QUAD $0x00044024ac7ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 1088], ymm5 - QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] + QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] LONG $0x0274b60f; BYTE $0x0c // movzx esi, byte [rdx + rax + 12] LONG $0xee6ef9c5 // vmovd xmm5, esi - QUAD $0x000000e824bc8b48 // mov rdi, qword [rsp + 232] - QUAD $0x010a3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 10], 1 - QUAD $0x020a025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 10], 2 - LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + QUAD $0x010a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 1 + QUAD $0x020a3a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 10], 2 QUAD $0x030a0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 10], 3 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] - QUAD $0x040a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 4 - QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] - QUAD $0x050a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 5 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] - QUAD $0x060a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 6 - QUAD $0x000000c8248c8b4c // mov r9, qword [rsp + 200] - QUAD $0x070a0a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 10], 7 - QUAD $0x000000c024b48b4c // mov r14, qword [rsp + 192] - QUAD $0x080a325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 10], 8 - QUAD $0x090a125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 10], 9 - QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] - QUAD $0x0a0a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 10 - LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] + LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] + QUAD $0x040a3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 10], 4 + QUAD $0x000000b824848b4c // mov r8, qword [rsp + 184] + QUAD $0x050a025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 10], 5 + QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] + QUAD $0x060a325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 10], 6 + QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] + QUAD $0x070a325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 10], 7 + QUAD $0x000000e0248c8b4c // mov r9, qword [rsp + 224] + QUAD $0x080a0a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 10], 8 + QUAD $0x090a225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 10], 9 + LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] + QUAD $0x0a0a325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 10], 10 + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] QUAD $0x0b0a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 11 - QUAD $0x0c0a1a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 10], 12 - QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0c0a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 12 QUAD $0x0d0a125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 10], 13 - LONG $0x245c8b4c; BYTE $0x30 // mov r11, qword [rsp + 48] - QUAD $0x0e0a1a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 10], 14 - QUAD $0x0f0a225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 10], 15 - LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] - QUAD $0x010a02642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 10], 1 LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] - QUAD $0x020a02642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 10], 2 - QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] + QUAD $0x0e0a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 14 + LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + QUAD $0x0f0a325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 10], 15 + QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] + QUAD $0x010a02642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 10], 1 + QUAD $0x020a2a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 10], 2 + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] QUAD $0x030a32642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rsi + 10], 3 - LONG $0x24648b4c; BYTE $0x68 // mov r12, qword [rsp + 104] - QUAD $0x040a22642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r12 + 10], 4 - QUAD $0x050a2a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 10], 5 - QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] - QUAD $0x060a02642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 10], 6 + QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] + QUAD $0x040a1a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r11 + 10], 4 + QUAD $0x050a1a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 10], 5 + QUAD $0x0000009824948b4c // mov r10, qword [rsp + 152] + QUAD $0x060a12642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r10 + 10], 6 + QUAD $0x000000f8249c8b48 // mov rbx, qword [rsp + 248] QUAD $0x070a1a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 10], 7 - QUAD $0x080a3a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r15 + 10], 8 - QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] - QUAD $0x090a02642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 10], 9 - QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] - QUAD $0x0a0a1a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 10], 10 - QUAD $0x000000d824bc8b4c // mov r15, qword [rsp + 216] - QUAD $0x0b0a3a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r15 + 10], 11 + QUAD $0x080a32642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r14 + 10], 8 + QUAD $0x000000b024ac8b4c // mov r13, qword [rsp + 176] + QUAD $0x090a2a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 10], 9 + LONG $0x24748b4c; BYTE $0x28 // mov r14, qword [rsp + 40] + QUAD $0x0a0a32642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r14 + 10], 10 + QUAD $0x00000080249c8b48 // mov rbx, qword [rsp + 128] + QUAD $0x0b0a1a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 10], 11 + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + QUAD $0x0c0a02642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 10], 12 + LONG $0x24648b4c; BYTE $0x20 // mov r12, qword [rsp + 32] + QUAD $0x0d0a22642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r12 + 10], 13 QUAD $0x00000120249c8b48 // mov rbx, qword [rsp + 288] - QUAD $0x0c0a1a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 10], 12 - LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] - QUAD $0x0d0a1a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 10], 13 - LONG $0x246c8b4c; BYTE $0x48 // mov r13, qword [rsp + 72] - QUAD $0x0e0a2a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 10], 14 - LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] + QUAD $0x0e0a1a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 10], 14 + QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] QUAD $0x0f0a1a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 10], 15 - QUAD $0x010b3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 11], 1 - QUAD $0x020b024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 11], 2 + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + QUAD $0x010b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 1 + QUAD $0x020b3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 11], 2 QUAD $0x030b0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 11], 3 - QUAD $0x000000f0248c8b48 // mov rcx, qword [rsp + 240] - QUAD $0x040b0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 11], 4 - QUAD $0x000000f824bc8b48 // mov rdi, qword [rsp + 248] - QUAD $0x050b3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 11], 5 - LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] - QUAD $0x060b3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 11], 6 - QUAD $0x070b0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 11], 7 - QUAD $0x080b324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 11], 8 - QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] - QUAD $0x090b3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 11], 9 - QUAD $0x000000e024b48b4c // mov r14, qword [rsp + 224] - QUAD $0x0a0b324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 11], 10 - LONG $0x244c8b4c; BYTE $0x58 // mov r9, qword [rsp + 88] - QUAD $0x0b0b0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 11], 11 - QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] - QUAD $0x0c0b3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 11], 12 - QUAD $0x0d0b124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 11], 13 - QUAD $0x0e0b1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 11], 14 - LONG $0x245c8b4c; BYTE $0x50 // mov r11, qword [rsp + 80] - QUAD $0x0f0b1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 11], 15 + QUAD $0x040b3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 11], 4 + QUAD $0x050b024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 11], 5 + QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] + QUAD $0x060b0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 11], 6 + QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x070b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 7 + QUAD $0x080b0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 11], 8 + QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] + QUAD $0x090b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 9 + LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] + QUAD $0x0a0b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 10 + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x0b0b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 11 + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0c0b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 12 + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0d0b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 13 + LONG $0x24448b4c; BYTE $0x40 // mov r8, qword [rsp + 64] + QUAD $0x0e0b024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 11], 14 + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + QUAD $0x0f0b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 15 + QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] + QUAD $0x010b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 11], 1 LONG $0x247c8b48; BYTE $0x78 // mov rdi, qword [rsp + 120] - QUAD $0x010b3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 11], 1 - LONG $0x245c8b48; BYTE $0x40 // mov rbx, qword [rsp + 64] - QUAD $0x020b1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 11], 2 + QUAD $0x020b3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 11], 2 QUAD $0x030b32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 11], 3 - QUAD $0x040b22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 11], 4 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + QUAD $0x040b1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 11], 4 + QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] QUAD $0x050b32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 11], 5 - QUAD $0x000000a0249c8b48 // mov rbx, qword [rsp + 160] - QUAD $0x060b1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 11], 6 - QUAD $0x0000009024848b4c // mov r8, qword [rsp + 144] - QUAD $0x070b02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 11], 7 - QUAD $0x0000008824a48b4c // mov r12, qword [rsp + 136] - QUAD $0x080b22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 11], 8 - QUAD $0x090b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 11], 9 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] - QUAD $0x0a0b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 11], 10 - QUAD $0x0b0b3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 11], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] - QUAD $0x0c0b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 11], 12 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - QUAD $0x0d0b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 11], 13 + QUAD $0x060b12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 11], 6 + QUAD $0x000000f824bc8b4c // mov r15, qword [rsp + 248] + QUAD $0x070b3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 11], 7 + QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] + QUAD $0x080b32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 11], 8 + QUAD $0x090b2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 11], 9 + QUAD $0x0a0b32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 11], 10 + QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] + QUAD $0x0b0b32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 11], 11 + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + QUAD $0x0c0b32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 11], 12 + QUAD $0x0d0b22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 11], 13 LONG $0x385de3c4; WORD $0x01db // vinserti128 ymm3, ymm4, xmm3, 1 QUAD $0x000420249c7ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 1056], ymm3 + QUAD $0x0000012024ac8b4c // mov r13, qword [rsp + 288] QUAD $0x0e0b2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 11], 14 - QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] - LONG $0x0274b60f; BYTE $0x0d // movzx esi, byte [rdx + rax + 13] + QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] + LONG $0x3274b60f; BYTE $0x0d // movzx esi, byte [rdx + rsi + 13] LONG $0xde6ef9c5 // vmovd xmm3, esi - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] - QUAD $0x0f0b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 11], 15 + QUAD $0x0f0b1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 11], 15 LONG $0x386de3c4; WORD $0x01c9 // vinserti128 ymm1, ymm2, xmm1, 1 QUAD $0x000400248c7ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 1024], ymm1 - QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] - LONG $0x0274b60f; BYTE $0x0d // movzx esi, byte [rdx + rax + 13] + QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] + LONG $0x3274b60f; BYTE $0x0d // movzx esi, byte [rdx + rsi + 13] LONG $0xce6ef9c5 // vmovd xmm1, esi - QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] - QUAD $0x010c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 1 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] - QUAD $0x020c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 2 - LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] - QUAD $0x030c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 3 - QUAD $0x040c0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 12], 4 - QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] - QUAD $0x050c12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 12], 5 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] - QUAD $0x060c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 6 - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] - QUAD $0x070c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 7 - QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] - QUAD $0x080c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 8 - QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] - QUAD $0x090c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 9 + LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] + QUAD $0x010c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 12], 1 + QUAD $0x0000010824a48b4c // mov r12, qword [rsp + 264] + QUAD $0x020c22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 12], 2 + QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] + QUAD $0x030c3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 12], 3 + LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] + QUAD $0x040c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 12], 4 + QUAD $0x000000b824b48b48 // mov rsi, qword [rsp + 184] + QUAD $0x050c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 12], 5 + QUAD $0x060c0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 12], 6 + QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] + QUAD $0x070c0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 12], 7 + QUAD $0x000000e024b48b48 // mov rsi, qword [rsp + 224] + QUAD $0x080c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 12], 8 + QUAD $0x000000e8248c8b4c // mov r9, qword [rsp + 232] + QUAD $0x090c0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 12], 9 + LONG $0x24748b4c; BYTE $0x58 // mov r14, qword [rsp + 88] QUAD $0x0a0c32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 12], 10 - QUAD $0x0b0c0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 12], 11 - QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] - QUAD $0x0c0c0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 12], 12 - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] - QUAD $0x0d0c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 13 - LONG $0x246c8b4c; BYTE $0x30 // mov r13, qword [rsp + 48] - QUAD $0x0e0c2a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 12], 14 - QUAD $0x0f0c1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 12], 15 - QUAD $0x010c3a542051e3c4 // vpinsrb xmm2, xmm5, byte [rdx + rdi + 12], 1 - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] - QUAD $0x020c32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 12], 2 - QUAD $0x000000b024b48b4c // mov r14, qword [rsp + 176] - QUAD $0x030c32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 12], 3 - LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] - QUAD $0x040c3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 12], 4 - LONG $0x247c8b4c; BYTE $0x60 // mov r15, qword [rsp + 96] - QUAD $0x050c3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 12], 5 - QUAD $0x060c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 6 - QUAD $0x070c02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 12], 7 - WORD $0x894c; BYTE $0xe0 // mov rax, r12 - QUAD $0x080c22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 12], 8 - QUAD $0x00000098249c8b4c // mov r11, qword [rsp + 152] - QUAD $0x090c1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 12], 9 - QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] - QUAD $0x0a0c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 10 QUAD $0x000000d8249c8b48 // mov rbx, qword [rsp + 216] - QUAD $0x0b0c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 11 - QUAD $0x00000120249c8b48 // mov rbx, qword [rsp + 288] - QUAD $0x0c0c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 12 - LONG $0x244c8b4c; BYTE $0x20 // mov r9, qword [rsp + 32] - QUAD $0x0d0c0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 12], 13 - LONG $0x24448b4c; BYTE $0x48 // mov r8, qword [rsp + 72] - QUAD $0x0e0c02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 12], 14 - LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] - QUAD $0x0f0c22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 12], 15 - QUAD $0x000000e8249c8b48 // mov rbx, qword [rsp + 232] - QUAD $0x010d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 1 - QUAD $0x000000a8249c8b48 // mov rbx, qword [rsp + 168] - QUAD $0x020d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 2 - LONG $0x245c8b48; BYTE $0x70 // mov rbx, qword [rsp + 112] - QUAD $0x030d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 3 - QUAD $0x000000f0249c8b48 // mov rbx, qword [rsp + 240] - QUAD $0x040d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 4 - QUAD $0x050d125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 13], 5 - LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] - QUAD $0x060d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 6 - QUAD $0x000000c8249c8b48 // mov rbx, qword [rsp + 200] - QUAD $0x070d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 7 - QUAD $0x000000c0249c8b48 // mov rbx, qword [rsp + 192] - QUAD $0x080d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 8 - QUAD $0x000000b824a48b4c // mov r12, qword [rsp + 184] - QUAD $0x090d225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 13], 9 - QUAD $0x000000e0249c8b48 // mov rbx, qword [rsp + 224] - QUAD $0x0a0d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 10 - LONG $0x245c8b48; BYTE $0x58 // mov rbx, qword [rsp + 88] + QUAD $0x0b0c1a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 12], 11 + LONG $0x24748b48; BYTE $0x50 // mov rsi, qword [rsp + 80] + QUAD $0x0c0c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 12], 12 + LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] + QUAD $0x0d0c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 12], 13 + QUAD $0x0e0c02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 12], 14 + LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + QUAD $0x0f0c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 12], 15 + QUAD $0x010c02542051e3c4 // vpinsrb xmm2, xmm5, byte [rdx + rax + 12], 1 + LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] + QUAD $0x020c32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 12], 2 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x030c02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 12], 3 + QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x040c02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 12], 4 + QUAD $0x0000008824948b4c // mov r10, qword [rsp + 136] + QUAD $0x050c12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 12], 5 + QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] + QUAD $0x060c02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 12], 6 + QUAD $0x070c3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 12], 7 + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] + QUAD $0x080c02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 12], 8 + QUAD $0x000000b024848b4c // mov r8, qword [rsp + 176] + QUAD $0x090c02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 12], 9 + LONG $0x245c8b4c; BYTE $0x28 // mov r11, qword [rsp + 40] + QUAD $0x0a0c1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 12], 10 + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] + QUAD $0x0b0c02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 12], 11 + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + QUAD $0x0c0c02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 12], 12 + LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] + QUAD $0x0d0c3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 12], 13 + QUAD $0x0e0c2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 12], 14 + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0f0c02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 12], 15 + LONG $0x246c8b4c; BYTE $0x68 // mov r13, qword [rsp + 104] + QUAD $0x010d2a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 13], 1 + QUAD $0x020d225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 13], 2 + QUAD $0x030d3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 13], 3 + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] + QUAD $0x040d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 13], 4 + QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] + QUAD $0x050d3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 13], 5 + QUAD $0x0000009024a48b4c // mov r12, qword [rsp + 144] + QUAD $0x060d225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 13], 6 + QUAD $0x070d0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 13], 7 + QUAD $0x000000e024ac8b4c // mov r13, qword [rsp + 224] + QUAD $0x080d2a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 13], 8 + QUAD $0x090d0a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 13], 9 + QUAD $0x0a0d325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 13], 10 QUAD $0x0b0d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 11 + LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] QUAD $0x0c0d0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 13], 12 - QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] - QUAD $0x0d0d125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 13], 13 - QUAD $0x0e0d2a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 13], 14 - LONG $0x245c8b48; BYTE $0x50 // mov rbx, qword [rsp + 80] - QUAD $0x0f0d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 15 - LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] + LONG $0x245c8b48; BYTE $0x48 // mov rbx, qword [rsp + 72] + QUAD $0x0d0d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 13 + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x0e0d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 13], 14 + LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] + QUAD $0x0f0d0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 13], 15 + QUAD $0x000000c0248c8b48 // mov rcx, qword [rsp + 192] QUAD $0x010d0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 13], 1 QUAD $0x020d324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 13], 2 - QUAD $0x030d324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 13], 3 - QUAD $0x040d3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 13], 4 - QUAD $0x050d3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 13], 5 - QUAD $0x000000a024b48b4c // mov r14, qword [rsp + 160] - QUAD $0x060d324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 13], 6 - QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] - QUAD $0x070d0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 13], 7 - QUAD $0x080d024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 13], 8 - QUAD $0x090d1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 13], 9 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] - QUAD $0x0a0d024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 13], 10 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] + QUAD $0x030d3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 13], 3 + QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] + QUAD $0x040d0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 13], 4 + QUAD $0x050d124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 13], 5 + QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] + QUAD $0x060d0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 13], 6 + QUAD $0x000000f824b48b48 // mov rsi, qword [rsp + 248] + QUAD $0x070d324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 13], 7 + QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] + QUAD $0x080d324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 13], 8 + QUAD $0x090d024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 13], 9 + QUAD $0x0a0d1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 13], 10 + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x0b0d024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 13], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x0c0d024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 13], 12 - QUAD $0x0d0d0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 13], 13 - QUAD $0x0e0d024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 13], 14 + QUAD $0x0d0d3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 13], 13 + QUAD $0x0000012024b48b4c // mov r14, qword [rsp + 288] + QUAD $0x0e0d324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 13], 14 LONG $0x386de3c4; WORD $0x01c0 // vinserti128 ymm0, ymm2, xmm0, 1 QUAD $0x0003e024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 992], ymm0 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] QUAD $0x0f0d02442071e3c4 // vpinsrb xmm0, xmm1, byte [rdx + rax + 13], 15 - QUAD $0x0000010024ac8b4c // mov r13, qword [rsp + 256] - LONG $0x74b60f42; WORD $0x0e2a // movzx esi, byte [rdx + r13 + 14] + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + LONG $0x0274b60f; BYTE $0x0e // movzx esi, byte [rdx + rax + 14] LONG $0xce6ef9c5 // vmovd xmm1, esi LONG $0x387de3c4; WORD $0x01c3 // vinserti128 ymm0, ymm0, xmm3, 1 QUAD $0x0003c024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 960], ymm0 - QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] + QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] LONG $0x0274b60f; BYTE $0x0e // movzx esi, byte [rdx + rax + 14] LONG $0xc66ef9c5 // vmovd xmm0, esi - QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] QUAD $0x010e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 1 - QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] - QUAD $0x020e0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 14], 2 - LONG $0x24448b4c; BYTE $0x70 // mov r8, qword [rsp + 112] - QUAD $0x030e024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 14], 3 - QUAD $0x000000f0248c8b4c // mov r9, qword [rsp + 240] - QUAD $0x040e0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 14], 4 - QUAD $0x000000f824bc8b48 // mov rdi, qword [rsp + 248] - QUAD $0x050e3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 14], 5 - LONG $0x247c8b4c; BYTE $0x28 // mov r15, qword [rsp + 40] - QUAD $0x060e3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 14], 6 - QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] - QUAD $0x070e0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 14], 7 - QUAD $0x000000c0248c8b48 // mov rcx, qword [rsp + 192] - QUAD $0x080e0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 14], 8 - QUAD $0x090e224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 14], 9 - QUAD $0x000000e0248c8b48 // mov rcx, qword [rsp + 224] - QUAD $0x0a0e0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 14], 10 - LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] - QUAD $0x0b0e0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 14], 11 - QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] - QUAD $0x0c0e324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 14], 12 - QUAD $0x0d0e124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 14], 13 + QUAD $0x0000010824948b4c // mov r10, qword [rsp + 264] + QUAD $0x020e124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 14], 2 + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] + QUAD $0x030e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 3 + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] + QUAD $0x040e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 4 + QUAD $0x000000b824bc8b4c // mov r15, qword [rsp + 184] + QUAD $0x050e3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 14], 5 + QUAD $0x060e224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 14], 6 + QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x070e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 7 + QUAD $0x080e2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 14], 8 + QUAD $0x000000e824ac8b4c // mov r13, qword [rsp + 232] + QUAD $0x090e2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 14], 9 + LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] + QUAD $0x0a0e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 10 + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x0b0e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 11 + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0c0e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 12 + QUAD $0x0d0e1a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 14], 13 + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x0e0e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 14 + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + QUAD $0x0f0e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 15 + QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] + QUAD $0x010e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 14], 1 + LONG $0x245c8b4c; BYTE $0x78 // mov r11, qword [rsp + 120] + QUAD $0x020e1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 14], 2 + QUAD $0x030e3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 14], 3 + QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x040e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 14], 4 + QUAD $0x00000088248c8b4c // mov r9, qword [rsp + 136] + QUAD $0x050e0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 14], 5 + QUAD $0x060e0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 14], 6 + QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] + QUAD $0x070e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 14], 7 + QUAD $0x000000a0249c8b48 // mov rbx, qword [rsp + 160] + QUAD $0x080e1a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 14], 8 + QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] + QUAD $0x090e0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 14], 9 + LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] + QUAD $0x0a0e0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 14], 10 + QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] + QUAD $0x0b0e0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 14], 11 LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] - QUAD $0x0e0e324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 14], 14 - QUAD $0x0f0e1a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 14], 15 - LONG $0x245c8b48; BYTE $0x78 // mov rbx, qword [rsp + 120] - QUAD $0x010e1a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 14], 1 - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] - QUAD $0x020e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 2 - QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] - QUAD $0x030e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 3 - LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] - QUAD $0x040e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 4 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] - QUAD $0x050e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 5 - QUAD $0x060e32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 14], 6 - QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] - QUAD $0x070e12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 14], 7 - QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] - QUAD $0x080e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 8 - QUAD $0x0000009824a48b4c // mov r12, qword [rsp + 152] - QUAD $0x090e22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 14], 9 - QUAD $0x0000014024b48b4c // mov r14, qword [rsp + 320] - QUAD $0x0a0e32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 14], 10 - QUAD $0x000000d824b48b48 // mov rsi, qword [rsp + 216] - QUAD $0x0b0e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 11 - QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] QUAD $0x0c0e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 12 - LONG $0x245c8b4c; BYTE $0x20 // mov r11, qword [rsp + 32] - QUAD $0x0d0e1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 14], 13 - LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] - QUAD $0x0e0e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 14 - LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] - QUAD $0x0f0e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 15 - LONG $0x74b60f42; WORD $0x0f2a // movzx esi, byte [rdx + r13 + 15] + LONG $0x24448b4c; BYTE $0x20 // mov r8, qword [rsp + 32] + QUAD $0x0d0e02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 14], 13 + QUAD $0x0e0e32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 14], 14 + QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] + QUAD $0x0f0e3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 14], 15 + QUAD $0x000000f024b48b4c // mov r14, qword [rsp + 240] + LONG $0x74b60f42; WORD $0x0f32 // movzx esi, byte [rdx + r14 + 15] LONG $0xd66ef9c5 // vmovd xmm2, esi - QUAD $0x010f02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 15], 1 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] - QUAD $0x020f02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 15], 2 - QUAD $0x030f02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 15], 3 - QUAD $0x040f0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 15], 4 - QUAD $0x050f3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 15], 5 - QUAD $0x060f3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 15], 6 - QUAD $0x000000c824ac8b4c // mov r13, qword [rsp + 200] - QUAD $0x070f2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 15], 7 - QUAD $0x000000c024848b4c // mov r8, qword [rsp + 192] - QUAD $0x080f02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 15], 8 - QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] - QUAD $0x090f02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 15], 9 - QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] - QUAD $0x0a0f3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 15], 10 - QUAD $0x0b0f0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 15], 11 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] - QUAD $0x0c0f02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 15], 12 - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] + QUAD $0x010f32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 15], 1 + QUAD $0x020f12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 15], 2 + QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] + QUAD $0x030f32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 15], 3 + LONG $0x24548b4c; BYTE $0x70 // mov r10, qword [rsp + 112] + QUAD $0x040f12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 15], 4 + QUAD $0x050f3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 15], 5 + QUAD $0x060f22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 15], 6 + QUAD $0x000000d024bc8b4c // mov r15, qword [rsp + 208] + QUAD $0x070f3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 15], 7 + QUAD $0x000000e024b48b48 // mov rsi, qword [rsp + 224] + QUAD $0x080f32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 15], 8 + QUAD $0x090f2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 15], 9 + LONG $0x24648b4c; BYTE $0x58 // mov r12, qword [rsp + 88] + QUAD $0x0a0f22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 15], 10 + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x0b0f02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 15], 11 + LONG $0x24748b48; BYTE $0x50 // mov rsi, qword [rsp + 80] + QUAD $0x0c0f32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 15], 12 + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] QUAD $0x0d0f02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 15], 13 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] - QUAD $0x0e0f0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 15], 14 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] - QUAD $0x0f0f02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 15], 15 - QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] + LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] + QUAD $0x0e0f32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 15], 14 + LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + QUAD $0x0f0f32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 15], 15 + QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] LONG $0x0274b60f; BYTE $0x0f // movzx esi, byte [rdx + rax + 15] LONG $0xde6ef9c5 // vmovd xmm3, esi - QUAD $0x010f1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 15], 1 - LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] - QUAD $0x020f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 2 + QUAD $0x000000c024b48b48 // mov rsi, qword [rsp + 192] + QUAD $0x010f325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 15], 1 + QUAD $0x020f1a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 15], 2 + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + QUAD $0x030f325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 15], 3 + QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] + QUAD $0x040f325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 15], 4 + QUAD $0x050f0a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 15], 5 + QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] + QUAD $0x060f325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 15], 6 + QUAD $0x000000f824b48b48 // mov rsi, qword [rsp + 248] + QUAD $0x070f325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 15], 7 + QUAD $0x080f1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 15], 8 QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] - QUAD $0x030f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 3 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] - QUAD $0x040f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 4 - LONG $0x247c8b4c; BYTE $0x60 // mov r15, qword [rsp + 96] - QUAD $0x050f3a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 15], 5 - QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] - QUAD $0x060f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 6 - QUAD $0x070f125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 15], 7 - QUAD $0x0000008824948b4c // mov r10, qword [rsp + 136] - QUAD $0x080f125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 15], 8 - QUAD $0x090f225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 15], 9 - QUAD $0x0a0f325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 15], 10 - QUAD $0x000000d824b48b4c // mov r14, qword [rsp + 216] - QUAD $0x0b0f325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 15], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + QUAD $0x090f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 9 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x0a0f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 10 + QUAD $0x0b0f0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 15], 11 + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x0c0f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 12 - QUAD $0x0d0f1a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 15], 13 - LONG $0x245c8b4c; BYTE $0x48 // mov r11, qword [rsp + 72] - QUAD $0x0e0f1a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 15], 14 - LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] - QUAD $0x0f0f225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 15], 15 + QUAD $0x0d0f025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 15], 13 + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + QUAD $0x0e0f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 14 + QUAD $0x0f0f3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 15], 15 LONG $0x387de3c4; WORD $0x01c1 // vinserti128 ymm0, ymm0, xmm1, 1 QUAD $0x00038024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 896], ymm0 LONG $0x3865e3c4; WORD $0x01c2 // vinserti128 ymm0, ymm3, xmm2, 1 QUAD $0x0003a024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 928], ymm0 - QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] - LONG $0x3274b60f; BYTE $0x10 // movzx esi, byte [rdx + rsi + 16] + LONG $0x74b60f42; WORD $0x1032 // movzx esi, byte [rdx + r14 + 16] LONG $0xc66ef9c5 // vmovd xmm0, esi - QUAD $0x000000e8248c8b4c // mov r9, qword [rsp + 232] - QUAD $0x01100a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 16], 1 - QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] - QUAD $0x021032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 2 - LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] - QUAD $0x031032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 3 - QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] - QUAD $0x041032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 4 - QUAD $0x000000f824b48b48 // mov rsi, qword [rsp + 248] - QUAD $0x051032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 5 - LONG $0x24748b48; BYTE $0x28 // mov rsi, qword [rsp + 40] - QUAD $0x061032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 6 - QUAD $0x07102a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 16], 7 - QUAD $0x081002442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 16], 8 - QUAD $0x000000b824b48b48 // mov rsi, qword [rsp + 184] - QUAD $0x091032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 9 - QUAD $0x0a103a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 16], 10 - LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] - QUAD $0x0b1032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 11 - QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] - QUAD $0x0c1032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 12 - QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] + LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] + QUAD $0x01100a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 16], 1 + QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] + QUAD $0x021002442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 16], 2 + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] + QUAD $0x031002442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 16], 3 + QUAD $0x041012442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 16], 4 + QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] + QUAD $0x051002442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 16], 5 + QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] + QUAD $0x061002442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 16], 6 + QUAD $0x07103a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 16], 7 + QUAD $0x000000e0249c8b4c // mov r11, qword [rsp + 224] + QUAD $0x08101a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 16], 8 + QUAD $0x09102a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 16], 9 + QUAD $0x0a1022442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 16], 10 + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x0b1002442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 16], 11 + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0c1002442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 16], 12 + LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] QUAD $0x0d1032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 13 - QUAD $0x0e100a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 16], 14 - LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] - QUAD $0x0f100a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 16], 15 - QUAD $0x00000108249c8b48 // mov rbx, qword [rsp + 264] + LONG $0x24748b4c; BYTE $0x40 // mov r14, qword [rsp + 64] + QUAD $0x0e1032442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 16], 14 + LONG $0x24448b4c; BYTE $0x60 // mov r8, qword [rsp + 96] + QUAD $0x0f1002442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 16], 15 + QUAD $0x00000100249c8b48 // mov rbx, qword [rsp + 256] LONG $0x1a74b60f; BYTE $0x10 // movzx esi, byte [rdx + rbx + 16] LONG $0xce6ef9c5 // vmovd xmm1, esi - LONG $0x24448b4c; BYTE $0x78 // mov r8, qword [rsp + 120] - QUAD $0x0110024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 16], 1 - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] + QUAD $0x000000c024948b4c // mov r10, qword [rsp + 192] + QUAD $0x0110124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 16], 1 + LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] QUAD $0x0210324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 2 - QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] - QUAD $0x0310324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 3 - LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] + LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] + QUAD $0x03103a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 16], 3 + QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] QUAD $0x0410324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 4 + QUAD $0x0000008824bc8b4c // mov r15, qword [rsp + 136] QUAD $0x05103a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 16], 5 - QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] + QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] QUAD $0x0610324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 6 - QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] - QUAD $0x0710324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 7 - QUAD $0x0810124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 16], 8 - QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] - QUAD $0x09103a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 16], 9 - QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] + QUAD $0x000000f8248c8b4c // mov r9, qword [rsp + 248] + QUAD $0x07100a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 16], 7 + QUAD $0x000000a024ac8b4c // mov r13, qword [rsp + 160] + QUAD $0x08102a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 16], 8 + QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] + QUAD $0x0910324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 9 + LONG $0x24748b48; BYTE $0x28 // mov rsi, qword [rsp + 40] QUAD $0x0a10324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 10 - QUAD $0x0b10324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 16], 11 - QUAD $0x0c10024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 16], 12 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - QUAD $0x0d10024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 16], 13 - QUAD $0x0e101a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 16], 14 - QUAD $0x0f10224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 16], 15 - QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] - LONG $0x0274b60f; BYTE $0x11 // movzx esi, byte [rdx + rax + 17] - LONG $0xd66ef9c5 // vmovd xmm2, esi - QUAD $0x01110a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 17], 1 - QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] - QUAD $0x02111a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 17], 2 - LONG $0x24548b4c; BYTE $0x70 // mov r10, qword [rsp + 112] - QUAD $0x031112542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 17], 3 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] - QUAD $0x041102542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 17], 4 - QUAD $0x000000f824ac8b4c // mov r13, qword [rsp + 248] - QUAD $0x05112a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 17], 5 - LONG $0x244c8b4c; BYTE $0x28 // mov r9, qword [rsp + 40] - QUAD $0x06110a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 17], 6 - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] - QUAD $0x071102542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 17], 7 - QUAD $0x000000c024b48b4c // mov r14, qword [rsp + 192] - QUAD $0x081132542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 17], 8 - QUAD $0x000000b824bc8b4c // mov r15, qword [rsp + 184] - QUAD $0x09113a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 17], 9 - QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] - QUAD $0x0a1102542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 17], 10 - LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] - QUAD $0x0b1102542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 17], 11 QUAD $0x0000008024a48b4c // mov r12, qword [rsp + 128] - QUAD $0x0c1122542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 17], 12 - QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] - QUAD $0x0d1132542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 17], 13 + QUAD $0x0b10224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 16], 11 LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] - QUAD $0x0e1132542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 17], 14 - QUAD $0x0f110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 15 + QUAD $0x0c10324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 12 + LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] + QUAD $0x0d10324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 13 + QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] + QUAD $0x0e10324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 14 + QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] + QUAD $0x0f10324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 15 + QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] + LONG $0x3274b60f; BYTE $0x11 // movzx esi, byte [rdx + rsi + 17] + LONG $0xd66ef9c5 // vmovd xmm2, esi + QUAD $0x01110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 1 + QUAD $0x00000108248c8b48 // mov rcx, qword [rsp + 264] + QUAD $0x02110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 2 + QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] + QUAD $0x03110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 3 + LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] + QUAD $0x04110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 4 + QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] + QUAD $0x05110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 5 + QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] + QUAD $0x06110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 6 + QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] + QUAD $0x07110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 7 + QUAD $0x08111a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 17], 8 + QUAD $0x000000e8248c8b48 // mov rcx, qword [rsp + 232] + QUAD $0x09110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 9 + LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] + QUAD $0x0a110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 10 + QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] + QUAD $0x0b110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 11 + QUAD $0x0c1102542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 17], 12 + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0d1102542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 17], 13 + QUAD $0x0e1132542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 17], 14 + QUAD $0x0f1102542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 17], 15 LONG $0x1a74b60f; BYTE $0x11 // movzx esi, byte [rdx + rbx + 17] LONG $0xde6ef9c5 // vmovd xmm3, esi - QUAD $0x0111025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 17], 1 - LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] - QUAD $0x02110a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 17], 2 + QUAD $0x0111125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 17], 1 + LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] + QUAD $0x0211025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 17], 2 + QUAD $0x03113a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 17], 3 + QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] + QUAD $0x04113a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 17], 4 + QUAD $0x05113a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 17], 5 + QUAD $0x0000009824bc8b4c // mov r15, qword [rsp + 152] + QUAD $0x06113a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 17], 6 + QUAD $0x07110a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 17], 7 + QUAD $0x08112a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 17], 8 QUAD $0x000000b024848b4c // mov r8, qword [rsp + 176] - QUAD $0x0311025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 17], 3 - LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] - QUAD $0x0411325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 4 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] - QUAD $0x0511325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 5 - QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] - QUAD $0x0611325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 6 - QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] - QUAD $0x0711325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 7 - QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] - QUAD $0x0811325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 8 - QUAD $0x09113a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 17], 9 - QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] - QUAD $0x0a113a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 17], 10 - QUAD $0x000000d824b48b48 // mov rsi, qword [rsp + 216] - QUAD $0x0b11325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 11 - QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] - QUAD $0x0c11325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 12 - LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] - QUAD $0x0d11325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 13 - LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] - QUAD $0x0e11325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 14 + QUAD $0x0911025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 17], 9 + LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] + QUAD $0x0a110a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 17], 10 + QUAD $0x0b11225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 17], 11 + LONG $0x244c8b4c; BYTE $0x30 // mov r9, qword [rsp + 48] + QUAD $0x0c110a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 17], 12 + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x0d11025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 17], 13 + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + QUAD $0x0e11025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 17], 14 LONG $0x3875e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm1, xmm0, 1 QUAD $0x00036024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 864], ymm0 - LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] - QUAD $0x0f1132442061e3c4 // vpinsrb xmm0, xmm3, byte [rdx + rsi + 17], 15 + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0f1102442061e3c4 // vpinsrb xmm0, xmm3, byte [rdx + rax + 17], 15 LONG $0x387de3c4; WORD $0x01c2 // vinserti128 ymm0, ymm0, xmm2, 1 QUAD $0x00034024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 832], ymm0 - QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] - LONG $0x3274b60f; BYTE $0x12 // movzx esi, byte [rdx + rsi + 18] - LONG $0xc66ef9c5 // vmovd xmm0, esi - QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] - QUAD $0x011232442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 18], 1 - QUAD $0x02121a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 18], 2 - QUAD $0x031212442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 18], 3 - QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] - QUAD $0x041232442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 18], 4 - QUAD $0x05122a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 18], 5 - QUAD $0x06120a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 18], 6 - QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] - QUAD $0x071232442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 18], 7 - QUAD $0x081232442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 18], 8 - QUAD $0x09123a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 18], 9 - QUAD $0x000000e024ac8b4c // mov r13, qword [rsp + 224] - QUAD $0x0a122a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 18], 10 - QUAD $0x0b1202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 11 - QUAD $0x0c1222442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 18], 12 - QUAD $0x000000d0248c8b4c // mov r9, qword [rsp + 208] - QUAD $0x0d120a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 18], 13 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] - QUAD $0x0e1202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 14 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] - QUAD $0x0f1202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 15 + QUAD $0x000000f0249c8b48 // mov rbx, qword [rsp + 240] LONG $0x1a74b60f; BYTE $0x12 // movzx esi, byte [rdx + rbx + 18] - LONG $0xce6ef9c5 // vmovd xmm1, esi - LONG $0x24748b4c; BYTE $0x78 // mov r14, qword [rsp + 120] - QUAD $0x0112324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 18], 1 - QUAD $0x02120a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 18], 2 - QUAD $0x0312024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 18], 3 + LONG $0xc66ef9c5 // vmovd xmm0, esi LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] - QUAD $0x0412024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 18], 4 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] - QUAD $0x0512024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 18], 5 - QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] - QUAD $0x0612024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 18], 6 - QUAD $0x00000090249c8b4c // mov r11, qword [rsp + 144] - QUAD $0x07121a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 18], 7 - QUAD $0x00000088248c8b48 // mov rcx, qword [rsp + 136] - QUAD $0x08120a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 18], 8 - QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] - QUAD $0x0912024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 18], 9 - QUAD $0x0a123a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 18], 10 - QUAD $0x000000d824b48b48 // mov rsi, qword [rsp + 216] - QUAD $0x0b12324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 18], 11 - QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] - QUAD $0x0c12324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 18], 12 - LONG $0x24648b4c; BYTE $0x20 // mov r12, qword [rsp + 32] - QUAD $0x0d12224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 18], 13 - LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] - QUAD $0x0e12324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 18], 14 - LONG $0x24548b4c; BYTE $0x38 // mov r10, qword [rsp + 56] - QUAD $0x0f12124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 18], 15 - QUAD $0x0000010024bc8b4c // mov r15, qword [rsp + 256] - LONG $0x74b60f42; WORD $0x133a // movzx esi, byte [rdx + r15 + 19] - LONG $0xd66ef9c5 // vmovd xmm2, esi - QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] - QUAD $0x011332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 1 - QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] - QUAD $0x021332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 2 - LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] - QUAD $0x031332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 3 - QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] - QUAD $0x041332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 4 - QUAD $0x000000f824b48b48 // mov rsi, qword [rsp + 248] - QUAD $0x051332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 5 - LONG $0x24748b48; BYTE $0x28 // mov rsi, qword [rsp + 40] - QUAD $0x061332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 6 - QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] - QUAD $0x071332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 7 + QUAD $0x011202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 1 + QUAD $0x0000010824b48b4c // mov r14, qword [rsp + 264] + QUAD $0x021232442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 18], 2 + QUAD $0x000000c824948b4c // mov r10, qword [rsp + 200] + QUAD $0x031212442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 18], 3 + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] + QUAD $0x041202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 4 + QUAD $0x000000b8249c8b4c // mov r11, qword [rsp + 184] + QUAD $0x05121a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 18], 5 + QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] + QUAD $0x061202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 6 + QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x071202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 7 + QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] + QUAD $0x081202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 8 + QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] + QUAD $0x091202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 9 + LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] + QUAD $0x0a1202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 10 + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x0b1202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 11 + LONG $0x24748b48; BYTE $0x50 // mov rsi, qword [rsp + 80] + QUAD $0x0c1232442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 18], 12 + LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] + QUAD $0x0d1232442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 18], 13 + LONG $0x24648b4c; BYTE $0x40 // mov r12, qword [rsp + 64] + QUAD $0x0e1222442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 18], 14 + LONG $0x246c8b4c; BYTE $0x60 // mov r13, qword [rsp + 96] + QUAD $0x0f122a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 18], 15 + QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] + LONG $0x3274b60f; BYTE $0x12 // movzx esi, byte [rdx + rsi + 18] + LONG $0xce6ef9c5 // vmovd xmm1, esi QUAD $0x000000c024b48b48 // mov rsi, qword [rsp + 192] - QUAD $0x081332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 8 - QUAD $0x000000b824b48b48 // mov rsi, qword [rsp + 184] - QUAD $0x091332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 9 - QUAD $0x0a132a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 19], 10 - LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] - QUAD $0x0b1332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 11 - QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] - QUAD $0x0c1332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 12 - QUAD $0x0d130a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 19], 13 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] - QUAD $0x0e133a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 19], 14 - LONG $0x24448b4c; BYTE $0x50 // mov r8, qword [rsp + 80] - QUAD $0x0f1302542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 19], 15 + QUAD $0x0112324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 18], 1 + LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] + QUAD $0x0212324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 18], 2 + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + QUAD $0x0312324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 18], 3 + QUAD $0x04123a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 18], 4 + QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] + QUAD $0x0512324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 18], 5 + QUAD $0x06123a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 18], 6 + QUAD $0x000000f824bc8b4c // mov r15, qword [rsp + 248] + QUAD $0x07123a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 18], 7 + QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] + QUAD $0x0812324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 18], 8 + QUAD $0x0912024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 18], 9 + QUAD $0x0a120a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 18], 10 + QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] + QUAD $0x0b120a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 18], 11 + QUAD $0x0c120a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 18], 12 + LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + QUAD $0x0d120a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 18], 13 + QUAD $0x00000120248c8b48 // mov rcx, qword [rsp + 288] + QUAD $0x0e120a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 18], 14 + QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] + QUAD $0x0f120a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 18], 15 LONG $0x1a74b60f; BYTE $0x13 // movzx esi, byte [rdx + rbx + 19] + LONG $0xd66ef9c5 // vmovd xmm2, esi + LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] + QUAD $0x01130a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 19], 1 + QUAD $0x021332542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 19], 2 + QUAD $0x031312542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 19], 3 + LONG $0x244c8b4c; BYTE $0x70 // mov r9, qword [rsp + 112] + QUAD $0x04130a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 19], 4 + QUAD $0x05131a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 19], 5 + QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] + QUAD $0x06130a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 19], 6 + QUAD $0x000000d024848b4c // mov r8, qword [rsp + 208] + QUAD $0x071302542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 19], 7 + QUAD $0x000000e024b48b4c // mov r14, qword [rsp + 224] + QUAD $0x081332542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 19], 8 + QUAD $0x000000e824948b4c // mov r10, qword [rsp + 232] + QUAD $0x091312542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 19], 9 + LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] + QUAD $0x0a1332542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 19], 10 + QUAD $0x0b1302542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 19], 11 + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0c1302542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 19], 12 + LONG $0x245c8b48; BYTE $0x48 // mov rbx, qword [rsp + 72] + QUAD $0x0d131a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 19], 13 + QUAD $0x0e1322542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 19], 14 + QUAD $0x0f132a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 19], 15 + QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] + LONG $0x0274b60f; BYTE $0x13 // movzx esi, byte [rdx + rax + 19] LONG $0xde6ef9c5 // vmovd xmm3, esi - QUAD $0x0113325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 19], 1 - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] - QUAD $0x0213325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 19], 2 - QUAD $0x000000b0249c8b48 // mov rbx, qword [rsp + 176] - QUAD $0x03131a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 19], 3 - LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] - QUAD $0x0413325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 19], 4 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] - QUAD $0x0513325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 19], 5 - QUAD $0x000000a024ac8b4c // mov r13, qword [rsp + 160] - QUAD $0x06132a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 19], 6 - QUAD $0x07131a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 19], 7 - QUAD $0x08130a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 19], 8 + QUAD $0x000000c0249c8b4c // mov r11, qword [rsp + 192] + QUAD $0x01131a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 19], 1 + LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] + QUAD $0x0213025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 2 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x0313025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 3 + QUAD $0x04133a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 19], 4 + QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] + QUAD $0x0513025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 5 + QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] + QUAD $0x06133a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 19], 6 + QUAD $0x07133a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 19], 7 + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] + QUAD $0x0813025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 8 + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x0913025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 9 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0a13025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 10 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x0b13025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 11 - QUAD $0x00000120248c8b4c // mov r9, qword [rsp + 288] - QUAD $0x0c130a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 19], 12 - QUAD $0x0d13225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 19], 13 - LONG $0x24748b4c; BYTE $0x48 // mov r14, qword [rsp + 72] - QUAD $0x0e13325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 19], 14 - QUAD $0x0f13125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 19], 15 + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + QUAD $0x0c13025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 12 + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x0d13025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 13 + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + QUAD $0x0e13025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 14 + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0f13025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 15 LONG $0x3875e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm1, xmm0, 1 QUAD $0x00030024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 768], ymm0 LONG $0x3865e3c4; WORD $0x01c2 // vinserti128 ymm0, ymm3, xmm2, 1 QUAD $0x00032024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 800], ymm0 - LONG $0x74b60f42; WORD $0x143a // movzx esi, byte [rdx + r15 + 20] + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + LONG $0x0274b60f; BYTE $0x14 // movzx esi, byte [rdx + rax + 20] LONG $0xc66ef9c5 // vmovd xmm0, esi - QUAD $0x000000e8249c8b4c // mov r11, qword [rsp + 232] - QUAD $0x01141a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 20], 1 - QUAD $0x000000a824a48b4c // mov r12, qword [rsp + 168] - QUAD $0x021422442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 20], 2 - LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] - QUAD $0x031402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 3 - QUAD $0x000000f0248c8b48 // mov rcx, qword [rsp + 240] - QUAD $0x04140a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 20], 4 - QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] - QUAD $0x051412442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 20], 5 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] - QUAD $0x061402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 6 + LONG $0x24648b4c; BYTE $0x68 // mov r12, qword [rsp + 104] + QUAD $0x011422442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 20], 1 + QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] + QUAD $0x021402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 2 QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] - QUAD $0x071402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 7 - QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] - QUAD $0x081402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 8 + QUAD $0x031402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 3 + QUAD $0x04140a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 20], 4 QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] - QUAD $0x091402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 9 - QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] - QUAD $0x0a1402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 10 + QUAD $0x051402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 5 + QUAD $0x06140a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 20], 6 + QUAD $0x071402442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 20], 7 + QUAD $0x081432442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 20], 8 + QUAD $0x091412442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 20], 9 LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] - QUAD $0x0b1402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 11 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] - QUAD $0x0c1402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 12 - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] - QUAD $0x0d1402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 13 - QUAD $0x0e143a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 20], 14 - QUAD $0x0f1402442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 20], 15 - QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] - LONG $0x0274b60f; BYTE $0x14 // movzx esi, byte [rdx + rax + 20] + QUAD $0x0a1402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 10 + QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] + QUAD $0x0b140a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 20], 11 + LONG $0x246c8b4c; BYTE $0x50 // mov r13, qword [rsp + 80] + QUAD $0x0c142a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 20], 12 + QUAD $0x0d141a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 20], 13 + LONG $0x245c8b48; BYTE $0x40 // mov rbx, qword [rsp + 64] + QUAD $0x0e141a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 20], 14 + LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] + QUAD $0x0f140a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 20], 15 + QUAD $0x00000100248c8b4c // mov r9, qword [rsp + 256] + LONG $0x74b60f42; WORD $0x140a // movzx esi, byte [rdx + r9 + 20] LONG $0xce6ef9c5 // vmovd xmm1, esi - LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] - QUAD $0x0114024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 20], 1 - LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] - QUAD $0x0214024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 20], 2 - QUAD $0x03141a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 20], 3 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] - QUAD $0x0414024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 20], 4 - LONG $0x247c8b4c; BYTE $0x60 // mov r15, qword [rsp + 96] - QUAD $0x05143a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 20], 5 - QUAD $0x06142a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 20], 6 - QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] + QUAD $0x01141a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 20], 1 + LONG $0x24448b4c; BYTE $0x78 // mov r8, qword [rsp + 120] + QUAD $0x0214024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 20], 2 + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] + QUAD $0x03143a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 20], 3 + QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] + QUAD $0x04140a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 20], 4 + QUAD $0x00000088248c8b48 // mov rcx, qword [rsp + 136] + QUAD $0x05140a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 20], 5 + QUAD $0x06143a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 20], 6 + QUAD $0x000000f824b48b48 // mov rsi, qword [rsp + 248] QUAD $0x0714324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 20], 7 - QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] + QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] QUAD $0x0814324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 20], 8 - QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] + QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] QUAD $0x0914324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 20], 9 - QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] - QUAD $0x0a14324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 20], 10 - QUAD $0x000000d824848b4c // mov r8, qword [rsp + 216] - QUAD $0x0b14024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 20], 11 - QUAD $0x0c140a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 20], 12 - LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] - QUAD $0x0d142a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 20], 13 - QUAD $0x0e14324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 20], 14 - LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] - QUAD $0x0f14324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 20], 15 - QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] + LONG $0x24548b4c; BYTE $0x28 // mov r10, qword [rsp + 40] + QUAD $0x0a14124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 20], 10 + QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] + QUAD $0x0b14324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 20], 11 + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + QUAD $0x0c14324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 20], 12 + LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] + QUAD $0x0d143a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 20], 13 + QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] + QUAD $0x0e14324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 20], 14 + QUAD $0x0000014024b48b4c // mov r14, qword [rsp + 320] + QUAD $0x0f14324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 20], 15 + QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] LONG $0x3274b60f; BYTE $0x15 // movzx esi, byte [rdx + rsi + 21] LONG $0xd66ef9c5 // vmovd xmm2, esi - QUAD $0x01151a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 21], 1 - QUAD $0x021522542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 21], 2 - LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] - QUAD $0x031532542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 21], 3 - QUAD $0x04150a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 21], 4 - QUAD $0x051512542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 21], 5 - LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] - QUAD $0x06153a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 21], 6 + QUAD $0x011522542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 21], 1 + QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] + QUAD $0x021532542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 21], 2 QUAD $0x000000c8249c8b4c // mov r11, qword [rsp + 200] - QUAD $0x07151a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 21], 7 - QUAD $0x000000c024a48b4c // mov r12, qword [rsp + 192] - QUAD $0x081522542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 21], 8 - QUAD $0x000000b824948b4c // mov r10, qword [rsp + 184] - QUAD $0x091512542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 21], 9 - QUAD $0x000000e0248c8b48 // mov rcx, qword [rsp + 224] - QUAD $0x0a150a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 21], 10 - LONG $0x24748b4c; BYTE $0x58 // mov r14, qword [rsp + 88] - QUAD $0x0b1532542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 21], 11 - QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] - QUAD $0x0c150a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 21], 12 - QUAD $0x000000d0249c8b48 // mov rbx, qword [rsp + 208] - QUAD $0x0d151a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 21], 13 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] - QUAD $0x0e150a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 21], 14 - LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] - QUAD $0x0f150a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 21], 15 - QUAD $0x00000108248c8b48 // mov rcx, qword [rsp + 264] - LONG $0x0a74b60f; BYTE $0x15 // movzx esi, byte [rdx + rcx + 21] + QUAD $0x03151a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 21], 3 + LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] + QUAD $0x041532542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 21], 4 + QUAD $0x000000b824b48b48 // mov rsi, qword [rsp + 184] + QUAD $0x051532542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 21], 5 + QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] + QUAD $0x061532542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 21], 6 + QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] + QUAD $0x071532542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 21], 7 + QUAD $0x000000e024b48b48 // mov rsi, qword [rsp + 224] + QUAD $0x081532542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 21], 8 + QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] + QUAD $0x091532542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 21], 9 + QUAD $0x0a1502542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 21], 10 + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x0b1502542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 21], 11 + QUAD $0x0c152a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 21], 12 + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0d1502542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 21], 13 + QUAD $0x0e151a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 21], 14 + LONG $0x246c8b4c; BYTE $0x60 // mov r13, qword [rsp + 96] + QUAD $0x0f152a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 21], 15 + LONG $0x74b60f42; WORD $0x150a // movzx esi, byte [rdx + r9 + 21] LONG $0xde6ef9c5 // vmovd xmm3, esi - LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] - QUAD $0x01150a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 21], 1 - LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] - QUAD $0x02150a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 21], 2 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] - QUAD $0x03150a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 21], 3 - QUAD $0x0415025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 4 - QUAD $0x05153a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 21], 5 - QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] - QUAD $0x0615025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 6 - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] - QUAD $0x07153a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 21], 7 - QUAD $0x00000088248c8b48 // mov rcx, qword [rsp + 136] - QUAD $0x08150a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 21], 8 + QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] + QUAD $0x0115025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 1 + QUAD $0x0215025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 21], 2 + QUAD $0x03153a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 21], 3 + QUAD $0x000000a8248c8b4c // mov r9, qword [rsp + 168] + QUAD $0x04150a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 21], 4 + QUAD $0x05150a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 21], 5 QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] - QUAD $0x0915025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 9 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] - QUAD $0x0a15025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 10 - QUAD $0x0b15025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 21], 11 - QUAD $0x0c150a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 21], 12 - QUAD $0x0d152a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 21], 13 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] - QUAD $0x0e15025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 14 + QUAD $0x0615025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 6 + QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] + QUAD $0x0715025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 7 + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] + QUAD $0x0815025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 8 + QUAD $0x000000b024a48b4c // mov r12, qword [rsp + 176] + QUAD $0x0915225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 21], 9 + QUAD $0x0a15125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 21], 10 + QUAD $0x00000080249c8b48 // mov rbx, qword [rsp + 128] + QUAD $0x0b151a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 21], 11 + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] + QUAD $0x0c150a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 21], 12 + QUAD $0x0d153a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 21], 13 + QUAD $0x00000120248c8b48 // mov rcx, qword [rsp + 288] + QUAD $0x0e150a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 21], 14 LONG $0x3875e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm1, xmm0, 1 QUAD $0x0002c024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 704], ymm0 - LONG $0x24448b4c; BYTE $0x38 // mov r8, qword [rsp + 56] - QUAD $0x0f1502442061a3c4 // vpinsrb xmm0, xmm3, byte [rdx + r8 + 21], 15 + QUAD $0x0f1532442061a3c4 // vpinsrb xmm0, xmm3, byte [rdx + r14 + 21], 15 LONG $0x387de3c4; WORD $0x01c2 // vinserti128 ymm0, ymm0, xmm2, 1 QUAD $0x0002e024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 736], ymm0 - QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] - LONG $0x0274b60f; BYTE $0x16 // movzx esi, byte [rdx + rax + 22] + QUAD $0x000000f024948b4c // mov r10, qword [rsp + 240] + LONG $0x74b60f42; WORD $0x1612 // movzx esi, byte [rdx + r10 + 22] LONG $0xc66ef9c5 // vmovd xmm0, esi - QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] - QUAD $0x011632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 1 - QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] - QUAD $0x021632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 2 - LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] - QUAD $0x031632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 3 - QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] - QUAD $0x041632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 4 - QUAD $0x000000f824ac8b4c // mov r13, qword [rsp + 248] - QUAD $0x05162a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 22], 5 - QUAD $0x06163a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 22], 6 + LONG $0x247c8b4c; BYTE $0x68 // mov r15, qword [rsp + 104] + QUAD $0x01163a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 22], 1 + QUAD $0x0000010824848b4c // mov r8, qword [rsp + 264] + QUAD $0x021602442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 22], 2 + QUAD $0x03161a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 22], 3 + LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] + QUAD $0x04160a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 22], 4 + QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] + QUAD $0x05160a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 22], 5 + QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] + QUAD $0x061632442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 22], 6 + QUAD $0x000000d0249c8b4c // mov r11, qword [rsp + 208] QUAD $0x07161a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 22], 7 - QUAD $0x081622442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 22], 8 - QUAD $0x091612442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 22], 9 - QUAD $0x000000e024a48b4c // mov r12, qword [rsp + 224] - QUAD $0x0a1622442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 22], 10 - QUAD $0x0b1632442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 22], 11 - QUAD $0x00000080249c8b4c // mov r11, qword [rsp + 128] - QUAD $0x0c161a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 22], 12 - QUAD $0x0d161a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 22], 13 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] - QUAD $0x0e1632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 14 + QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] + QUAD $0x08163a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 22], 8 + QUAD $0x000000e8248c8b48 // mov rcx, qword [rsp + 232] + QUAD $0x09160a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 22], 9 + LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] + QUAD $0x0a160a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 22], 10 + QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] + QUAD $0x0b160a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 22], 11 LONG $0x24748b48; BYTE $0x50 // mov rsi, qword [rsp + 80] - QUAD $0x0f1632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 15 - QUAD $0x0000010824948b4c // mov r10, qword [rsp + 264] - LONG $0x74b60f42; WORD $0x1612 // movzx esi, byte [rdx + r10 + 22] + QUAD $0x0c1632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 12 + LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] + QUAD $0x0d1632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 13 + LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] + QUAD $0x0e1632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 14 + QUAD $0x0f162a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 22], 15 + QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] + LONG $0x3274b60f; BYTE $0x16 // movzx esi, byte [rdx + rsi + 22] LONG $0xce6ef9c5 // vmovd xmm1, esi - LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] + QUAD $0x000000c024b48b48 // mov rsi, qword [rsp + 192] QUAD $0x0116324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 22], 1 - LONG $0x245c8b48; BYTE $0x40 // mov rbx, qword [rsp + 64] - QUAD $0x02161a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 22], 2 - QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] + LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] + QUAD $0x0216324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 22], 2 + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] QUAD $0x0316324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 22], 3 - LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] - QUAD $0x0416324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 22], 4 - LONG $0x24748b4c; BYTE $0x60 // mov r14, qword [rsp + 96] - QUAD $0x0516324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 22], 5 - QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] + QUAD $0x04160a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 22], 4 + QUAD $0x0000008824ac8b4c // mov r13, qword [rsp + 136] + QUAD $0x05162a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 22], 5 + QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] QUAD $0x0616324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 22], 6 - QUAD $0x07163a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 22], 7 - QUAD $0x08160a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 22], 8 - QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] - QUAD $0x09160a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 22], 9 - QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] - QUAD $0x0a160a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 22], 10 - QUAD $0x000000d8248c8b4c // mov r9, qword [rsp + 216] - QUAD $0x0b160a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 22], 11 - QUAD $0x00000120248c8b48 // mov rcx, qword [rsp + 288] - QUAD $0x0c160a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 22], 12 - LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] - QUAD $0x0d160a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 22], 13 - LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] - QUAD $0x0e163a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 22], 14 - QUAD $0x0f16024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 22], 15 - LONG $0x0274b60f; BYTE $0x17 // movzx esi, byte [rdx + rax + 23] + QUAD $0x000000f8248c8b4c // mov r9, qword [rsp + 248] + QUAD $0x07160a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 22], 7 + QUAD $0x0816024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 22], 8 + QUAD $0x0916224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 22], 9 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x0a16024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 22], 10 + QUAD $0x0b161a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 22], 11 + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + QUAD $0x0c16224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 22], 12 + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x0d16024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 22], 13 + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + QUAD $0x0e16024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 22], 14 + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0f16024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 22], 15 + LONG $0x74b60f42; WORD $0x1712 // movzx esi, byte [rdx + r10 + 23] LONG $0xd66ef9c5 // vmovd xmm2, esi - QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] - QUAD $0x011702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 23], 1 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] - QUAD $0x021702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 23], 2 - LONG $0x247c8b4c; BYTE $0x70 // mov r15, qword [rsp + 112] - QUAD $0x03173a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 23], 3 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + QUAD $0x01173a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 23], 1 + QUAD $0x021702542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 23], 2 + QUAD $0x000000c824948b4c // mov r10, qword [rsp + 200] + QUAD $0x031712542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 23], 3 + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] QUAD $0x041702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 23], 4 - QUAD $0x05172a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 23], 5 - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] - QUAD $0x06170a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 23], 6 - QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] - QUAD $0x07170a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 23], 7 - QUAD $0x000000c0248c8b48 // mov rcx, qword [rsp + 192] - QUAD $0x08170a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 23], 8 - QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] - QUAD $0x09170a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 23], 9 - QUAD $0x0a1722542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 23], 10 - LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] + QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] + QUAD $0x051702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 23], 5 + QUAD $0x061732542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 23], 6 + QUAD $0x07171a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 23], 7 + QUAD $0x08173a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 23], 8 + QUAD $0x000000e824b48b4c // mov r14, qword [rsp + 232] + QUAD $0x091732542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 23], 9 + LONG $0x247c8b48; BYTE $0x58 // mov rdi, qword [rsp + 88] + QUAD $0x0a173a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 23], 10 QUAD $0x0b170a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 23], 11 - QUAD $0x0c171a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 23], 12 - QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] - QUAD $0x0d170a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 23], 13 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] - QUAD $0x0e170a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 23], 14 - LONG $0x24648b4c; BYTE $0x50 // mov r12, qword [rsp + 80] - QUAD $0x0f1722542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 23], 15 - LONG $0x74b60f42; WORD $0x1712 // movzx esi, byte [rdx + r10 + 23] + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0c1702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 23], 12 + LONG $0x245c8b48; BYTE $0x48 // mov rbx, qword [rsp + 72] + QUAD $0x0d171a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 23], 13 + LONG $0x245c8b4c; BYTE $0x40 // mov r11, qword [rsp + 64] + QUAD $0x0e171a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 23], 14 + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + QUAD $0x0f1702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 23], 15 + QUAD $0x0000010024bc8b4c // mov r15, qword [rsp + 256] + LONG $0x74b60f42; WORD $0x173a // movzx esi, byte [rdx + r15 + 23] LONG $0xde6ef9c5 // vmovd xmm3, esi - LONG $0x245c8b4c; BYTE $0x78 // mov r11, qword [rsp + 120] - QUAD $0x01171a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 23], 1 - QUAD $0x02171a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 23], 2 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] - QUAD $0x03170a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 23], 3 - LONG $0x245c8b48; BYTE $0x68 // mov rbx, qword [rsp + 104] - QUAD $0x04171a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 23], 4 - QUAD $0x0517325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 23], 5 - QUAD $0x000000a024ac8b4c // mov r13, qword [rsp + 160] + QUAD $0x000000c0248c8b48 // mov rcx, qword [rsp + 192] + QUAD $0x01170a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 23], 1 + LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] + QUAD $0x0217025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 23], 2 + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + QUAD $0x0317325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 3 + QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] + QUAD $0x0417325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 4 + QUAD $0x05172a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 23], 5 + QUAD $0x0000009824ac8b4c // mov r13, qword [rsp + 152] QUAD $0x06172a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 23], 6 - QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] - QUAD $0x0717325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 7 - QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] + QUAD $0x07170a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 23], 7 + QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] QUAD $0x0817325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 8 - QUAD $0x0000009824848b4c // mov r8, qword [rsp + 152] + QUAD $0x000000b024848b4c // mov r8, qword [rsp + 176] QUAD $0x0917025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 23], 9 - QUAD $0x0000014024948b4c // mov r10, qword [rsp + 320] - QUAD $0x0a17125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 23], 10 - QUAD $0x0b170a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 23], 11 + LONG $0x24748b48; BYTE $0x28 // mov rsi, qword [rsp + 40] + QUAD $0x0a17325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 10 + QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] + QUAD $0x0b17325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 11 + QUAD $0x0c17225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 23], 12 + LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] + QUAD $0x0d17325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 13 QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] - QUAD $0x0c17325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 12 - LONG $0x24748b4c; BYTE $0x20 // mov r14, qword [rsp + 32] - QUAD $0x0d17325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 23], 13 - QUAD $0x0e173a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 23], 14 - LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + QUAD $0x0e17325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 14 + QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] QUAD $0x0f17325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 15 LONG $0x387563c4; WORD $0x01d0 // vinserti128 ymm10, ymm1, xmm0, 1 LONG $0x3865e3c4; WORD $0x01c2 // vinserti128 ymm0, ymm3, xmm2, 1 QUAD $0x0002a024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 672], ymm0 - QUAD $0x00000100248c8b4c // mov r9, qword [rsp + 256] - LONG $0x74b60f42; WORD $0x180a // movzx esi, byte [rdx + r9 + 24] + QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] + LONG $0x3274b60f; BYTE $0x18 // movzx esi, byte [rdx + rsi + 24] LONG $0xc66ef9c5 // vmovd xmm0, esi - QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] + LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] QUAD $0x011832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 1 - QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] + QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] QUAD $0x021832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 2 - QUAD $0x03183a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 24], 3 - QUAD $0x041802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 24], 4 - QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] - QUAD $0x051802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 24], 5 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] - QUAD $0x061802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 24], 6 - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] - QUAD $0x071802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 24], 7 - QUAD $0x000000c024bc8b48 // mov rdi, qword [rsp + 192] - QUAD $0x08183a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 24], 8 + QUAD $0x031812442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 24], 3 + LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] + QUAD $0x041832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 4 QUAD $0x000000b824b48b48 // mov rsi, qword [rsp + 184] - QUAD $0x091832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 9 + QUAD $0x051832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 5 + QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] + QUAD $0x061832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 6 + QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] + QUAD $0x071832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 7 QUAD $0x000000e024b48b48 // mov rsi, qword [rsp + 224] - QUAD $0x0a1832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 10 - LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] - QUAD $0x0b1832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 11 - QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] + QUAD $0x081832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 8 + QUAD $0x091832442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 24], 9 + QUAD $0x0a183a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 24], 10 + QUAD $0x000000d824b48b4c // mov r14, qword [rsp + 216] + QUAD $0x0b1832442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 24], 11 + LONG $0x24748b48; BYTE $0x50 // mov rsi, qword [rsp + 80] QUAD $0x0c1832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 12 - QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] - QUAD $0x0d1832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 13 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] - QUAD $0x0e1832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 14 - QUAD $0x0f1822442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 24], 15 - QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] - LONG $0x3274b60f; BYTE $0x18 // movzx esi, byte [rdx + rsi + 24] + QUAD $0x0d181a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 24], 13 + QUAD $0x0e181a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 24], 14 + LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + QUAD $0x0f1832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 24], 15 + LONG $0x74b60f42; WORD $0x183a // movzx esi, byte [rdx + r15 + 24] LONG $0xce6ef9c5 // vmovd xmm1, esi - QUAD $0x01181a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 24], 1 - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] - QUAD $0x0218324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 24], 2 - QUAD $0x03180a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 24], 3 - QUAD $0x04181a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 24], 4 - LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] - QUAD $0x05180a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 24], 5 + QUAD $0x01180a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 24], 1 + QUAD $0x0218024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 24], 2 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x0318024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 24], 3 + QUAD $0x000000a824a48b4c // mov r12, qword [rsp + 168] + QUAD $0x0418224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 24], 4 + QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] + QUAD $0x0518024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 24], 5 QUAD $0x06182a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 24], 6 - QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] - QUAD $0x07180a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 24], 7 - QUAD $0x0000008824bc8b4c // mov r15, qword [rsp + 136] + QUAD $0x07180a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 24], 7 + QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] QUAD $0x08183a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 24], 8 QUAD $0x0918024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 24], 9 - QUAD $0x0a18124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 24], 10 - QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] - QUAD $0x0b180a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 24], 11 - QUAD $0x00000120248c8b48 // mov rcx, qword [rsp + 288] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x0a18024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 24], 10 + QUAD $0x0000008024848b4c // mov r8, qword [rsp + 128] + QUAD $0x0b18024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 24], 11 + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] QUAD $0x0c180a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 24], 12 - QUAD $0x0d18324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 24], 13 - LONG $0x24448b4c; BYTE $0x48 // mov r8, qword [rsp + 72] - QUAD $0x0e18024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 24], 14 - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] - QUAD $0x0f180a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 24], 15 - LONG $0x74b60f42; WORD $0x190a // movzx esi, byte [rdx + r9 + 25] - LONG $0xd66ef9c5 // vmovd xmm2, esi - QUAD $0x000000e8248c8b48 // mov rcx, qword [rsp + 232] - QUAD $0x01190a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 25], 1 - QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] - QUAD $0x02190a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 25], 2 - LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] - QUAD $0x03190a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 25], 3 - QUAD $0x000000f0249c8b4c // mov r11, qword [rsp + 240] - QUAD $0x04191a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 25], 4 - QUAD $0x000000f8248c8b4c // mov r9, qword [rsp + 248] - QUAD $0x05190a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 25], 5 - LONG $0x24648b4c; BYTE $0x28 // mov r12, qword [rsp + 40] - QUAD $0x061922542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 25], 6 - QUAD $0x071902542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 25], 7 - QUAD $0x08193a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 25], 8 - QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] - QUAD $0x091902542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 25], 9 - QUAD $0x000000e024ac8b4c // mov r13, qword [rsp + 224] - QUAD $0x0a192a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 25], 10 - LONG $0x245c8b48; BYTE $0x58 // mov rbx, qword [rsp + 88] - QUAD $0x0b191a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 25], 11 - QUAD $0x0000008024b48b4c // mov r14, qword [rsp + 128] - QUAD $0x0c1932542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 25], 12 - QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] - QUAD $0x0d190a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 25], 13 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] - QUAD $0x0e1902542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 25], 14 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] - QUAD $0x0f1902542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 25], 15 - QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] + LONG $0x24548b4c; BYTE $0x20 // mov r10, qword [rsp + 32] + QUAD $0x0d18124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 24], 13 + QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] + QUAD $0x0e183a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 24], 14 + QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] + QUAD $0x0f181a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 24], 15 + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] LONG $0x0274b60f; BYTE $0x19 // movzx esi, byte [rdx + rax + 25] + LONG $0xd66ef9c5 // vmovd xmm2, esi + LONG $0x246c8b4c; BYTE $0x68 // mov r13, qword [rsp + 104] + QUAD $0x01192a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 25], 1 + QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] + QUAD $0x021932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 2 + QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] + QUAD $0x031932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 3 + LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] + QUAD $0x041932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 4 + QUAD $0x000000b8249c8b4c // mov r11, qword [rsp + 184] + QUAD $0x05191a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 25], 5 + QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] + QUAD $0x061932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 6 + QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] + QUAD $0x071932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 7 + QUAD $0x000000e024b48b48 // mov rsi, qword [rsp + 224] + QUAD $0x081932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 8 + QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] + QUAD $0x091932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 9 + LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] + QUAD $0x0a1932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 10 + QUAD $0x0b1932542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 25], 11 + LONG $0x24748b48; BYTE $0x50 // mov rsi, qword [rsp + 80] + QUAD $0x0c1932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 12 + LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] + QUAD $0x0d1932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 13 + LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] + QUAD $0x0e1932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 14 + LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + QUAD $0x0f1932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 15 + QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] + LONG $0x3274b60f; BYTE $0x19 // movzx esi, byte [rdx + rsi + 25] LONG $0xde6ef9c5 // vmovd xmm3, esi - LONG $0x247c8b48; BYTE $0x78 // mov rdi, qword [rsp + 120] - QUAD $0x01193a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 25], 1 - LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] - QUAD $0x0219025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 25], 2 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] - QUAD $0x0319025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 25], 3 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] - QUAD $0x0419025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 25], 4 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] - QUAD $0x0519025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 25], 5 - QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] - QUAD $0x0619025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 25], 6 - QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] - QUAD $0x0719025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 25], 7 + QUAD $0x000000c024b48b48 // mov rsi, qword [rsp + 192] + QUAD $0x0119325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 25], 1 + LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] + QUAD $0x0219325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 25], 2 + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + QUAD $0x0319325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 25], 3 + QUAD $0x0419225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 25], 4 + QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] + QUAD $0x0519325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 25], 5 + QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] + QUAD $0x0619325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 25], 6 + QUAD $0x07190a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 25], 7 QUAD $0x08193a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 25], 8 - QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] - QUAD $0x0919025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 25], 9 - QUAD $0x0a19125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 25], 10 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] - QUAD $0x0b19025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 25], 11 - QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] - QUAD $0x0c19325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 25], 12 - LONG $0x24548b4c; BYTE $0x20 // mov r10, qword [rsp + 32] + QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] + QUAD $0x09193a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 25], 9 + LONG $0x244c8b4c; BYTE $0x28 // mov r9, qword [rsp + 40] + QUAD $0x0a190a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 25], 10 + QUAD $0x0b19025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 25], 11 + QUAD $0x0c190a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 25], 12 QUAD $0x0d19125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 25], 13 - QUAD $0x0e19025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 25], 14 + QUAD $0x0e193a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 25], 14 LONG $0x387563c4; WORD $0x01c8 // vinserti128 ymm9, ymm1, xmm0, 1 - LONG $0x24448b4c; BYTE $0x38 // mov r8, qword [rsp + 56] - QUAD $0x0f1902442061a3c4 // vpinsrb xmm0, xmm3, byte [rdx + r8 + 25], 15 + QUAD $0x0f191a442061e3c4 // vpinsrb xmm0, xmm3, byte [rdx + rbx + 25], 15 LONG $0x387d63c4; WORD $0x01c2 // vinserti128 ymm8, ymm0, xmm2, 1 - QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] - LONG $0x3274b60f; BYTE $0x1a // movzx esi, byte [rdx + rsi + 26] + LONG $0x0274b60f; BYTE $0x1a // movzx esi, byte [rdx + rax + 26] LONG $0xc66ef9c5 // vmovd xmm0, esi - QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] - QUAD $0x011a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 1 - QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] - QUAD $0x021a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 2 - LONG $0x247c8b4c; BYTE $0x70 // mov r15, qword [rsp + 112] - QUAD $0x031a3a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 26], 3 - QUAD $0x041a1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 26], 4 - QUAD $0x051a0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 26], 5 - QUAD $0x061a22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 26], 6 - QUAD $0x000000c8249c8b4c // mov r11, qword [rsp + 200] - QUAD $0x071a1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 26], 7 - QUAD $0x000000c0248c8b4c // mov r9, qword [rsp + 192] - QUAD $0x081a0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 26], 8 - QUAD $0x000000b824b48b48 // mov rsi, qword [rsp + 184] - QUAD $0x091a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 9 - QUAD $0x0a1a2a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 26], 10 - QUAD $0x0b1a1a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 26], 11 - QUAD $0x0c1a32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 26], 12 - QUAD $0x0d1a0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 26], 13 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] - QUAD $0x0e1a0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 26], 14 - LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] - QUAD $0x0f1a0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 26], 15 - QUAD $0x00000108249c8b48 // mov rbx, qword [rsp + 264] - LONG $0x1a74b60f; BYTE $0x1a // movzx esi, byte [rdx + rbx + 26] + QUAD $0x011a2a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 26], 1 + QUAD $0x0000010824948b4c // mov r10, qword [rsp + 264] + QUAD $0x021a12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 26], 2 + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] + QUAD $0x031a02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 26], 3 + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] + QUAD $0x041a02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 26], 4 + QUAD $0x051a1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 26], 5 + QUAD $0x00000090249c8b4c // mov r11, qword [rsp + 144] + QUAD $0x061a1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 26], 6 + QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] + QUAD $0x071a0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 26], 7 + QUAD $0x000000e024b48b4c // mov r14, qword [rsp + 224] + QUAD $0x081a32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 26], 8 + QUAD $0x000000e8248c8b48 // mov rcx, qword [rsp + 232] + QUAD $0x091a0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 26], 9 + LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] + QUAD $0x0a1a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 10 + QUAD $0x000000d824b48b48 // mov rsi, qword [rsp + 216] + QUAD $0x0b1a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 11 + LONG $0x24748b48; BYTE $0x50 // mov rsi, qword [rsp + 80] + QUAD $0x0c1a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 12 + LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] + QUAD $0x0d1a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 13 + LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] + QUAD $0x0e1a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 14 + LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + QUAD $0x0f1a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 15 + QUAD $0x0000010024bc8b48 // mov rdi, qword [rsp + 256] + LONG $0x3a74b60f; BYTE $0x1a // movzx esi, byte [rdx + rdi + 26] LONG $0xce6ef9c5 // vmovd xmm1, esi - QUAD $0x011a3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 26], 1 - LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] - QUAD $0x021a3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 26], 2 - QUAD $0x000000b024a48b4c // mov r12, qword [rsp + 176] - QUAD $0x031a224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 26], 3 - LONG $0x246c8b4c; BYTE $0x68 // mov r13, qword [rsp + 104] - QUAD $0x041a2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 26], 4 - LONG $0x24748b4c; BYTE $0x60 // mov r14, qword [rsp + 96] - QUAD $0x051a324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 26], 5 - QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] - QUAD $0x061a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 6 - QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] - QUAD $0x071a0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 26], 7 - QUAD $0x00000088248c8b48 // mov rcx, qword [rsp + 136] - QUAD $0x081a0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 26], 8 - QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] - QUAD $0x091a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 9 - QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] - QUAD $0x0a1a0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 26], 10 - QUAD $0x0b1a024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 26], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] - QUAD $0x0c1a024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 26], 12 - QUAD $0x0d1a124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 26], 13 - LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] - QUAD $0x0e1a0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 26], 14 - QUAD $0x0f1a024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 26], 15 - QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] - LONG $0x0274b60f; BYTE $0x1b // movzx esi, byte [rdx + rax + 27] + QUAD $0x000000c024b48b48 // mov rsi, qword [rsp + 192] + QUAD $0x011a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 1 + LONG $0x24448b4c; BYTE $0x78 // mov r8, qword [rsp + 120] + QUAD $0x021a024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 26], 2 + LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] + QUAD $0x031a1a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 26], 3 + QUAD $0x041a224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 26], 4 + QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] + QUAD $0x051a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 5 + QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] + QUAD $0x061a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 6 + QUAD $0x000000f824a48b4c // mov r12, qword [rsp + 248] + QUAD $0x071a224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 26], 7 + QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] + QUAD $0x081a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 8 + QUAD $0x091a3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 26], 9 + QUAD $0x0a1a0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 26], 10 + QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] + QUAD $0x0b1a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 11 + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + QUAD $0x0c1a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 12 + LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] + QUAD $0x0d1a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 13 + QUAD $0x00000120248c8b4c // mov r9, qword [rsp + 288] + QUAD $0x0e1a0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 26], 14 + QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] + QUAD $0x0f1a324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 26], 15 + QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] + LONG $0x3274b60f; BYTE $0x1b // movzx esi, byte [rdx + rsi + 27] LONG $0xd66ef9c5 // vmovd xmm2, esi - QUAD $0x000000e824848b4c // mov r8, qword [rsp + 232] - QUAD $0x011b02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 27], 1 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] - QUAD $0x021b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 2 - QUAD $0x031b3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 27], 3 - QUAD $0x000000f024948b4c // mov r10, qword [rsp + 240] - QUAD $0x041b12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 27], 4 - QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] - QUAD $0x051b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 5 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] - QUAD $0x061b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 6 - QUAD $0x071b1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 27], 7 - QUAD $0x081b0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 27], 8 - QUAD $0x000000b824bc8b4c // mov r15, qword [rsp + 184] - QUAD $0x091b3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 27], 9 - QUAD $0x000000e0248c8b4c // mov r9, qword [rsp + 224] - QUAD $0x0a1b0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 27], 10 - LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] - QUAD $0x0b1b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 11 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] - QUAD $0x0c1b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 12 + QUAD $0x011b2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 27], 1 + QUAD $0x021b12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 27], 2 + WORD $0x894d; BYTE $0xd5 // mov r13, r10 + QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] + QUAD $0x031b32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 27], 3 + QUAD $0x041b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 4 + QUAD $0x000000b824948b4c // mov r10, qword [rsp + 184] + QUAD $0x051b12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 27], 5 + QUAD $0x061b1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 27], 6 QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x071b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 7 + QUAD $0x081b32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 27], 8 + QUAD $0x091b0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 27], 9 + LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] + QUAD $0x0a1b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 10 + QUAD $0x000000d824b48b4c // mov r14, qword [rsp + 216] + QUAD $0x0b1b32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 27], 11 + LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] + QUAD $0x0c1b0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 27], 12 + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] QUAD $0x0d1b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 13 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] QUAD $0x0e1b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 14 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] - QUAD $0x0f1b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 15 - LONG $0x1a74b60f; BYTE $0x1b // movzx esi, byte [rdx + rbx + 27] + LONG $0x245c8b4c; BYTE $0x60 // mov r11, qword [rsp + 96] + QUAD $0x0f1b1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 27], 15 + LONG $0x3a74b60f; BYTE $0x1b // movzx esi, byte [rdx + rdi + 27] LONG $0xde6ef9c5 // vmovd xmm3, esi - LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] - QUAD $0x011b025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 27], 1 - QUAD $0x021b3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 27], 2 - QUAD $0x031b225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 27], 3 - QUAD $0x041b2a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 27], 4 - QUAD $0x051b325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 27], 5 - QUAD $0x000000a024a48b4c // mov r12, qword [rsp + 160] - QUAD $0x061b225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 27], 6 - QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] - QUAD $0x071b025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 27], 7 - QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] + QUAD $0x000000c024b48b48 // mov rsi, qword [rsp + 192] + QUAD $0x011b325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 27], 1 + QUAD $0x021b025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 27], 2 + QUAD $0x031b1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 27], 3 + QUAD $0x000000a8249c8b48 // mov rbx, qword [rsp + 168] + QUAD $0x041b1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 27], 4 + QUAD $0x0000008824bc8b48 // mov rdi, qword [rsp + 136] + QUAD $0x051b3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 27], 5 + QUAD $0x0000009824bc8b4c // mov r15, qword [rsp + 152] + QUAD $0x061b3a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 27], 6 + QUAD $0x071b225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 27], 7 + QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] QUAD $0x081b325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 27], 8 - QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] + QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] QUAD $0x091b325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 27], 9 - QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] + LONG $0x24748b48; BYTE $0x28 // mov rsi, qword [rsp + 40] QUAD $0x0a1b325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 27], 10 - QUAD $0x000000d824b48b48 // mov rsi, qword [rsp + 216] + QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] QUAD $0x0b1b325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 27], 11 - QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] QUAD $0x0c1b325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 27], 12 LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] QUAD $0x0d1b325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 27], 13 - QUAD $0x0e1b0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 27], 14 - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] - QUAD $0x0f1b0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 27], 15 + QUAD $0x0e1b0a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 27], 14 + QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] + QUAD $0x0f1b325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 27], 15 LONG $0x3875e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm1, xmm0, 1 QUAD $0x00022024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 544], ymm0 LONG $0x3865e3c4; WORD $0x01c2 // vinserti128 ymm0, ymm3, xmm2, 1 QUAD $0x00024024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 576], ymm0 - QUAD $0x0000010024ac8b4c // mov r13, qword [rsp + 256] - LONG $0x74b60f42; WORD $0x1c2a // movzx esi, byte [rdx + r13 + 28] + QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] + LONG $0x3274b60f; BYTE $0x1c // movzx esi, byte [rdx + rsi + 28] LONG $0xc66ef9c5 // vmovd xmm0, esi - QUAD $0x011c02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 28], 1 - QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] - QUAD $0x021c0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 28], 2 - LONG $0x245c8b4c; BYTE $0x70 // mov r11, qword [rsp + 112] - QUAD $0x031c1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 28], 3 - QUAD $0x041c12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 28], 4 - QUAD $0x000000f824b48b4c // mov r14, qword [rsp + 248] - QUAD $0x051c32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 28], 5 - LONG $0x24748b48; BYTE $0x28 // mov rsi, qword [rsp + 40] + LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] + QUAD $0x011c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 28], 1 + QUAD $0x021c2a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 28], 2 + QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] + QUAD $0x031c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 28], 3 + LONG $0x244c8b4c; BYTE $0x70 // mov r9, qword [rsp + 112] + QUAD $0x041c0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 28], 4 + QUAD $0x051c12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 28], 5 + QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] QUAD $0x061c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 28], 6 - QUAD $0x000000c8249c8b48 // mov rbx, qword [rsp + 200] - QUAD $0x071c1a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 28], 7 - QUAD $0x000000c024b48b48 // mov rsi, qword [rsp + 192] - QUAD $0x081c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 28], 8 - QUAD $0x091c3a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 28], 9 - QUAD $0x0a1c0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 28], 10 - LONG $0x24548b4c; BYTE $0x58 // mov r10, qword [rsp + 88] - QUAD $0x0b1c12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 28], 11 - QUAD $0x0000008024bc8b4c // mov r15, qword [rsp + 128] - QUAD $0x0c1c3a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 28], 12 - QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] - QUAD $0x0d1c3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 28], 13 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] - QUAD $0x0e1c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 28], 14 - LONG $0x24448b4c; BYTE $0x50 // mov r8, qword [rsp + 80] - QUAD $0x0f1c02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 28], 15 - QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] - LONG $0x3274b60f; BYTE $0x1c // movzx esi, byte [rdx + rsi + 28] + QUAD $0x000000d024ac8b4c // mov r13, qword [rsp + 208] + QUAD $0x071c2a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 28], 7 + QUAD $0x000000e024a48b4c // mov r12, qword [rsp + 224] + QUAD $0x081c22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 28], 8 + QUAD $0x000000e824848b4c // mov r8, qword [rsp + 232] + QUAD $0x091c02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 28], 9 + LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] + QUAD $0x0a1c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 28], 10 + QUAD $0x0b1c32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 28], 11 + QUAD $0x0c1c0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 28], 12 + LONG $0x24748b4c; BYTE $0x48 // mov r14, qword [rsp + 72] + QUAD $0x0d1c32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 28], 13 + QUAD $0x0e1c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 28], 14 + QUAD $0x0f1c1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 28], 15 + QUAD $0x00000100249c8b4c // mov r11, qword [rsp + 256] + LONG $0x74b60f42; WORD $0x1c1a // movzx esi, byte [rdx + r11 + 28] LONG $0xce6ef9c5 // vmovd xmm1, esi - LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] - QUAD $0x011c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 1 - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] - QUAD $0x021c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 2 - QUAD $0x000000b0248c8b4c // mov r9, qword [rsp + 176] - QUAD $0x031c0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 28], 3 - LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] - QUAD $0x041c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 4 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] - QUAD $0x051c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 5 - QUAD $0x061c224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 28], 6 - QUAD $0x071c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 7 - QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] - QUAD $0x081c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 8 - QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] - QUAD $0x091c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 9 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] - QUAD $0x0a1c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 10 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] - QUAD $0x0b1c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 11 - QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] - QUAD $0x0c1c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 12 + QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] + QUAD $0x011c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 1 + LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] + QUAD $0x021c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 2 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x031c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 3 + QUAD $0x041c1a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 28], 4 + QUAD $0x051c3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 28], 5 + QUAD $0x061c3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 28], 6 + QUAD $0x000000f824bc8b48 // mov rdi, qword [rsp + 248] + QUAD $0x071c3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 28], 7 + QUAD $0x000000a0248c8b48 // mov rcx, qword [rsp + 160] + QUAD $0x081c0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 28], 8 + QUAD $0x000000b0249c8b48 // mov rbx, qword [rsp + 176] + QUAD $0x091c1a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 28], 9 + LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] + QUAD $0x0a1c0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 28], 10 + QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] + QUAD $0x0b1c0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 28], 11 + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] + QUAD $0x0c1c0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 28], 12 LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] QUAD $0x0d1c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 13 - LONG $0x24648b4c; BYTE $0x48 // mov r12, qword [rsp + 72] - QUAD $0x0e1c224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 28], 14 - LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + QUAD $0x0000012024948b4c // mov r10, qword [rsp + 288] + QUAD $0x0e1c124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 28], 14 + QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] QUAD $0x0f1c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 15 - LONG $0x74b60f42; WORD $0x1d2a // movzx esi, byte [rdx + r13 + 29] + QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] + LONG $0x3274b60f; BYTE $0x1d // movzx esi, byte [rdx + rsi + 29] LONG $0xd66ef9c5 // vmovd xmm2, esi - QUAD $0x000000e824ac8b4c // mov r13, qword [rsp + 232] - QUAD $0x011d2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 29], 1 - QUAD $0x021d0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 29], 2 - QUAD $0x031d1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 29], 3 - QUAD $0x000000f0248c8b48 // mov rcx, qword [rsp + 240] - QUAD $0x041d0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 29], 4 - QUAD $0x051d32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 29], 5 - LONG $0x245c8b4c; BYTE $0x28 // mov r11, qword [rsp + 40] - QUAD $0x061d1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 29], 6 - QUAD $0x071d1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 29], 7 - QUAD $0x000000c0248c8b48 // mov rcx, qword [rsp + 192] - QUAD $0x081d0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 29], 8 - QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] - QUAD $0x091d0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 29], 9 - QUAD $0x000000e024b48b4c // mov r14, qword [rsp + 224] - QUAD $0x0a1d32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 29], 10 - QUAD $0x0b1d12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 29], 11 - QUAD $0x0c1d3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 29], 12 - QUAD $0x0d1d3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 29], 13 - LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] - QUAD $0x0e1d1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 29], 14 - QUAD $0x0f1d02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 29], 15 - QUAD $0x0000010824848b4c // mov r8, qword [rsp + 264] - LONG $0x74b60f42; WORD $0x1d02 // movzx esi, byte [rdx + r8 + 29] - LONG $0xde6ef9c5 // vmovd xmm3, esi - LONG $0x247c8b4c; BYTE $0x78 // mov r15, qword [rsp + 120] - QUAD $0x011d3a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 29], 1 - LONG $0x24548b4c; BYTE $0x40 // mov r10, qword [rsp + 64] - QUAD $0x021d125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 29], 2 - QUAD $0x031d0a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 29], 3 - LONG $0x244c8b4c; BYTE $0x68 // mov r9, qword [rsp + 104] - QUAD $0x041d0a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 29], 4 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] - QUAD $0x051d325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 29], 5 - QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] - QUAD $0x061d325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 29], 6 + LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] + QUAD $0x011d32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 29], 1 + QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] + QUAD $0x021d32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 29], 2 + QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] + QUAD $0x031d32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 29], 3 + QUAD $0x041d0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 29], 4 + QUAD $0x000000b8248c8b4c // mov r9, qword [rsp + 184] + QUAD $0x051d0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 29], 5 QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] - QUAD $0x071d325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 29], 7 - QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] - QUAD $0x081d325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 29], 8 - QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] - QUAD $0x091d325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 29], 9 - QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] - QUAD $0x0a1d325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 29], 10 - QUAD $0x0b1d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] - QUAD $0x0c1d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 12 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - QUAD $0x0d1d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 13 - QUAD $0x0e1d22642061a3c4 // vpinsrb xmm4, xmm3, byte [rdx + r12 + 29], 14 + QUAD $0x061d32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 29], 6 + QUAD $0x071d2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 29], 7 + QUAD $0x081d22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 29], 8 + QUAD $0x091d02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 29], 9 + LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] + QUAD $0x0a1d32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 29], 10 + QUAD $0x000000d824848b4c // mov r8, qword [rsp + 216] + QUAD $0x0b1d02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 29], 11 + LONG $0x24648b4c; BYTE $0x50 // mov r12, qword [rsp + 80] + QUAD $0x0c1d22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 29], 12 + QUAD $0x0d1d32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 29], 13 + LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] + QUAD $0x0e1d32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 29], 14 + LONG $0x24748b4c; BYTE $0x60 // mov r14, qword [rsp + 96] + QUAD $0x0f1d32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 29], 15 + LONG $0x74b60f42; WORD $0x1d1a // movzx esi, byte [rdx + r11 + 29] + LONG $0xde6ef9c5 // vmovd xmm3, esi + QUAD $0x000000c0249c8b4c // mov r11, qword [rsp + 192] + QUAD $0x011d1a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 29], 1 + LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] + QUAD $0x021d325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 29], 2 + QUAD $0x031d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 3 + QUAD $0x000000a824ac8b4c // mov r13, qword [rsp + 168] + QUAD $0x041d2a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 29], 4 + QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] + QUAD $0x051d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 5 + QUAD $0x061d3a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 29], 6 + QUAD $0x071d3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 29], 7 + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] + QUAD $0x081d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 8 + QUAD $0x091d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 29], 9 + WORD $0x8949; BYTE $0xdf // mov r15, rbx + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x0a1d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 10 + QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] + QUAD $0x0b1d3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 29], 11 + QUAD $0x0c1d0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 29], 12 + LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + QUAD $0x0d1d0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 29], 13 + QUAD $0x0e1d12642061a3c4 // vpinsrb xmm4, xmm3, byte [rdx + r10 + 29], 14 LONG $0x3875e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm1, xmm0, 1 QUAD $0x00028024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 640], ymm0 - LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] - QUAD $0x0f1d22442059a3c4 // vpinsrb xmm0, xmm4, byte [rdx + r12 + 29], 15 + QUAD $0x0000014024948b4c // mov r10, qword [rsp + 320] + QUAD $0x0f1d12442059a3c4 // vpinsrb xmm0, xmm4, byte [rdx + r10 + 29], 15 LONG $0x387de3c4; WORD $0x01c2 // vinserti128 ymm0, ymm0, xmm2, 1 QUAD $0x00026024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 608], ymm0 - QUAD $0x0000010024bc8b48 // mov rdi, qword [rsp + 256] - LONG $0x3a74b60f; BYTE $0x1e // movzx esi, byte [rdx + rdi + 30] + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + LONG $0x0274b60f; BYTE $0x1e // movzx esi, byte [rdx + rax + 30] LONG $0xc66ef9c5 // vmovd xmm0, esi - QUAD $0x011e2a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 30], 1 - LONG $0x3a74b60f; BYTE $0x1f // movzx esi, byte [rdx + rdi + 31] + LONG $0x245c8b48; BYTE $0x68 // mov rbx, qword [rsp + 104] + QUAD $0x011e1a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 30], 1 + LONG $0x0274b60f; BYTE $0x1f // movzx esi, byte [rdx + rax + 31] LONG $0xce6ef9c5 // vmovd xmm1, esi - QUAD $0x011f2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 31], 1 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x011f1a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 31], 1 + QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] QUAD $0x021e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 2 QUAD $0x021f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 2 - LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] QUAD $0x031e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 3 QUAD $0x031f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 3 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] QUAD $0x041e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 4 QUAD $0x041f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 4 - QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] - QUAD $0x051e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 5 - QUAD $0x051f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 5 - QUAD $0x061e1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 30], 6 - QUAD $0x061f1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 31], 6 - QUAD $0x0000011024bc8b48 // mov rdi, qword [rsp + 272] - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] + WORD $0x894c; BYTE $0xc8 // mov rax, r9 + QUAD $0x051e0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 30], 5 + QUAD $0x051f0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 31], 5 + QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] + QUAD $0x061e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 6 + QUAD $0x061f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 6 + QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] QUAD $0x071e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 7 QUAD $0x071f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 7 - QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] + QUAD $0x00000110249c8b48 // mov rbx, qword [rsp + 272] + QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] QUAD $0x081e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 8 QUAD $0x081f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 8 - QUAD $0x091e0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 30], 9 - QUAD $0x091f0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 31], 9 - QUAD $0x0a1e32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 30], 10 - QUAD $0x0a1f324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 31], 10 + QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] + QUAD $0x091e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 9 + QUAD $0x091f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 9 LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] - QUAD $0x0b1e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 11 - QUAD $0x0b1f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 11 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] - QUAD $0x0c1e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 12 - QUAD $0x0c1f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 12 - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x0a1e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 10 + QUAD $0x0a1f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 10 + WORD $0x894c; BYTE $0xc0 // mov rax, r8 + QUAD $0x0b1e02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 30], 11 + QUAD $0x0b1f024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 31], 11 + QUAD $0x0c1e22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 30], 12 + QUAD $0x0c1f224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 31], 12 + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] QUAD $0x0d1e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 13 QUAD $0x0d1f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 13 - WORD $0x8948; BYTE $0xd8 // mov rax, rbx - QUAD $0x0e1e1a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 30], 14 - QUAD $0x0e1f1a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 31], 14 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] - QUAD $0x0f1e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 15 - QUAD $0x0f1f02542071e3c4 // vpinsrb xmm2, xmm1, byte [rdx + rax + 31], 15 - WORD $0x894c; BYTE $0xc6 // mov rsi, r8 - LONG $0x44b60f42; WORD $0x1e02 // movzx eax, byte [rdx + r8 + 30] + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x0e1e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 14 + QUAD $0x0e1f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 14 + QUAD $0x0f1e32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 30], 15 + QUAD $0x0f1f32542071a3c4 // vpinsrb xmm2, xmm1, byte [rdx + r14 + 31], 15 + QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] + LONG $0x3244b60f; BYTE $0x1e // movzx eax, byte [rdx + rsi + 30] LONG $0xc86ef9c5 // vmovd xmm1, eax - QUAD $0x011e3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 30], 1 - LONG $0x44b60f42; WORD $0x1f02 // movzx eax, byte [rdx + r8 + 31] + QUAD $0x011e1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 30], 1 + LONG $0x3244b60f; BYTE $0x1f // movzx eax, byte [rdx + rsi + 31] LONG $0xf86ef9c5 // vmovd xmm7, eax - QUAD $0x011f3a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r15 + 31], 1 - QUAD $0x021e124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 30], 2 - QUAD $0x021f127c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r10 + 31], 2 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x011f1a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r11 + 31], 1 + LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] + QUAD $0x021e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 2 + QUAD $0x021f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 2 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] QUAD $0x031e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 3 QUAD $0x031f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 3 - QUAD $0x041e0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 30], 4 - QUAD $0x041f0a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r9 + 31], 4 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + QUAD $0x041e2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 30], 4 + QUAD $0x041f2a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r13 + 31], 4 + QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] QUAD $0x051e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 5 QUAD $0x051f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 5 - QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] + QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] QUAD $0x061e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 6 QUAD $0x061f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 6 - QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] + QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] QUAD $0x071e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 7 QUAD $0x071f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 7 - QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] QUAD $0x081e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 8 QUAD $0x081f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 8 - QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] - QUAD $0x091e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 9 - QUAD $0x091f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 9 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x091e3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 30], 9 + QUAD $0x091f3a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r15 + 31], 9 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0a1e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 10 QUAD $0x0a1f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 10 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] - QUAD $0x0b1e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 11 - QUAD $0x0b1f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 11 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + QUAD $0x0b1e3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 30], 11 + QUAD $0x0b1f3a7c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rdi + 31], 11 + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x0c1e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 12 QUAD $0x0c1f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 12 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - QUAD $0x0d1e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 13 - QUAD $0x0d1f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 13 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + WORD $0x8948; BYTE $0xc8 // mov rax, rcx + QUAD $0x0d1e0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 30], 13 + QUAD $0x0d1f0a7c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rcx + 31], 13 + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0e1e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 14 QUAD $0x0e1f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 14 - WORD $0x894c; BYTE $0xe0 // mov rax, r12 - QUAD $0x0f1e224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 30], 15 - QUAD $0x0f1f227c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r12 + 31], 15 + QUAD $0x0f1e124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 30], 15 + QUAD $0x0f1f127c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r10 + 31], 15 LONG $0x3875e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm1, xmm0, 1 QUAD $0x00014024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 320], ymm0 LONG $0x3845e3c4; WORD $0x01c2 // vinserti128 ymm0, ymm7, xmm2, 1 @@ -16709,18 +17362,18 @@ LBB2_169: LONG $0x3865e3c4; WORD $0x01e0 // vinserti128 ymm4, ymm3, xmm0, 1 LONG $0x4665e3c4; WORD $0x31c0 // vperm2i128 ymm0, ymm3, ymm0, 49 QUAD $0x00000198248c8b48 // mov rcx, qword [rsp + 408] - LONG $0x447ffec5; WORD $0x608f // vmovdqu yword [rdi + 4*rcx + 96], ymm0 - LONG $0x547ffec5; WORD $0x408f // vmovdqu yword [rdi + 4*rcx + 64], ymm2 - LONG $0x647ffec5; WORD $0x208f // vmovdqu yword [rdi + 4*rcx + 32], ymm4 - LONG $0x0c7ffec5; BYTE $0x8f // vmovdqu yword [rdi + 4*rcx], ymm1 + LONG $0x447ffec5; WORD $0x608b // vmovdqu yword [rbx + 4*rcx + 96], ymm0 + LONG $0x547ffec5; WORD $0x408b // vmovdqu yword [rbx + 4*rcx + 64], ymm2 + LONG $0x647ffec5; WORD $0x208b // vmovdqu yword [rbx + 4*rcx + 32], ymm4 + LONG $0x0c7ffec5; BYTE $0x8b // vmovdqu yword [rbx + 4*rcx], ymm1 LONG $0x20c18348 // add rcx, 32 WORD $0x8948; BYTE $0xc8 // mov rax, rcx QUAD $0x00000180248c3b48 // cmp rcx, qword [rsp + 384] - JNE LBB2_169 + JNE LBB2_170 QUAD $0x0000018824bc8b4c // mov r15, qword [rsp + 392] QUAD $0x0000018024bc3b4c // cmp r15, qword [rsp + 384] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - LONG $0x24748b44; BYTE $0x1c // mov r14d, dword [rsp + 28] + LONG $0x245c8b44; BYTE $0x1c // mov r11d, dword [rsp + 28] QUAD $0x0000019024a48b4c // mov r12, qword [rsp + 400] JNE LBB2_114 JMP LBB2_133 @@ -16735,8 +17388,9 @@ TEXT ·_comparison_not_equal_arr_arr_avx2(SB), $80-48 MOVQ offset+40(FP), R9 ADDQ $8, SP - WORD $0x894d; BYTE $0xc3 // mov r11, r8 - WORD $0x8949; BYTE $0xce // mov r14, rcx + WORD $0x8944; BYTE $0xc8 // mov eax, r9d + WORD $0x894d; BYTE $0xc6 // mov r14, r8 + WORD $0x8949; BYTE $0xcc // mov r12, rcx WORD $0xff83; BYTE $0x06 // cmp edi, 6 JG LBB3_29 WORD $0xff83; BYTE $0x03 // cmp edi, 3 @@ -16747,16 +17401,16 @@ TEXT ·_comparison_not_equal_arr_arr_avx2(SB), $80-48 JE LBB3_79 WORD $0xff83; BYTE $0x06 // cmp edi, 6 JNE LBB3_123 - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_22 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB3_20: WORD $0x0e8b // mov ecx, dword [rsi] @@ -16769,7 +17423,7 @@ LBB3_20: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -16778,49 +17432,49 @@ LBB3_20: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB3_20 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_22: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_26 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB3_24: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0x068b // mov eax, dword [rsi] WORD $0x4e8b; BYTE $0x04 // mov ecx, dword [rsi + 4] WORD $0x023b // cmp eax, dword [rdx] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] WORD $0x4a3b; BYTE $0x04 // cmp ecx, dword [rdx + 4] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] WORD $0x468b; BYTE $0x08 // mov eax, dword [rsi + 8] WORD $0x423b; BYTE $0x08 // cmp eax, dword [rdx + 8] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] + LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] WORD $0x468b; BYTE $0x0c // mov eax, dword [rsi + 12] WORD $0x423b; BYTE $0x0c // cmp eax, dword [rdx + 12] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] + LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] WORD $0x468b; BYTE $0x10 // mov eax, dword [rsi + 16] WORD $0x423b; BYTE $0x10 // cmp eax, dword [rdx + 16] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] WORD $0x468b; BYTE $0x14 // mov eax, dword [rsi + 20] WORD $0x423b; BYTE $0x14 // cmp eax, dword [rdx + 20] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + LONG $0x2454950f; BYTE $0x03 // setne byte [rsp + 3] WORD $0x468b; BYTE $0x18 // mov eax, dword [rsi + 24] WORD $0x423b; BYTE $0x18 // cmp eax, dword [rdx + 24] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] + LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] WORD $0x468b; BYTE $0x1c // mov eax, dword [rsi + 28] WORD $0x423b; BYTE $0x1c // cmp eax, dword [rdx + 28] LONG $0xd5950f41 // setne r13b WORD $0x468b; BYTE $0x20 // mov eax, dword [rsi + 32] WORD $0x423b; BYTE $0x20 // cmp eax, dword [rdx + 32] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] WORD $0x468b; BYTE $0x24 // mov eax, dword [rsi + 36] WORD $0x423b; BYTE $0x24 // cmp eax, dword [rdx + 36] LONG $0xd0950f41 // setne r8b @@ -16832,165 +17486,165 @@ LBB3_24: LONG $0xd7950f41 // setne r15b WORD $0x468b; BYTE $0x30 // mov eax, dword [rsi + 48] WORD $0x423b; BYTE $0x30 // cmp eax, dword [rdx + 48] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] + LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] WORD $0x468b; BYTE $0x34 // mov eax, dword [rsi + 52] WORD $0x423b; BYTE $0x34 // cmp eax, dword [rdx + 52] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] + LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] WORD $0x468b; BYTE $0x38 // mov eax, dword [rsi + 56] WORD $0x423b; BYTE $0x38 // cmp eax, dword [rdx + 56] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] WORD $0x468b; BYTE $0x3c // mov eax, dword [rsi + 60] WORD $0x423b; BYTE $0x3c // cmp eax, dword [rdx + 60] - WORD $0x950f; BYTE $0xd3 // setne bl + LONG $0xd7950f40 // setne dil WORD $0x468b; BYTE $0x40 // mov eax, dword [rsi + 64] - WORD $0x4e8b; BYTE $0x44 // mov ecx, dword [rsi + 68] + WORD $0x5e8b; BYTE $0x44 // mov ebx, dword [rsi + 68] WORD $0x423b; BYTE $0x40 // cmp eax, dword [rdx + 64] WORD $0x468b; BYTE $0x48 // mov eax, dword [rsi + 72] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] - WORD $0x4a3b; BYTE $0x44 // cmp ecx, dword [rdx + 68] - WORD $0x4e8b; BYTE $0x4c // mov ecx, dword [rsi + 76] + LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + WORD $0x5a3b; BYTE $0x44 // cmp ebx, dword [rdx + 68] + WORD $0x5e8b; BYTE $0x4c // mov ebx, dword [rsi + 76] LONG $0xd2950f41 // setne r10b WORD $0x423b; BYTE $0x48 // cmp eax, dword [rdx + 72] WORD $0x468b; BYTE $0x50 // mov eax, dword [rsi + 80] LONG $0xd6950f41 // setne r14b - WORD $0x4a3b; BYTE $0x4c // cmp ecx, dword [rdx + 76] - WORD $0x4e8b; BYTE $0x54 // mov ecx, dword [rsi + 84] + WORD $0x5a3b; BYTE $0x4c // cmp ebx, dword [rdx + 76] + WORD $0x5e8b; BYTE $0x54 // mov ebx, dword [rsi + 84] LONG $0xd4950f41 // setne r12b WORD $0x423b; BYTE $0x50 // cmp eax, dword [rdx + 80] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] - WORD $0x4a3b; BYTE $0x54 // cmp ecx, dword [rdx + 84] + LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + WORD $0x5a3b; BYTE $0x54 // cmp ebx, dword [rdx + 84] WORD $0x468b; BYTE $0x58 // mov eax, dword [rsi + 88] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] WORD $0x423b; BYTE $0x58 // cmp eax, dword [rdx + 88] WORD $0x468b; BYTE $0x5c // mov eax, dword [rsi + 92] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] + LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] WORD $0x423b; BYTE $0x5c // cmp eax, dword [rdx + 92] WORD $0x468b; BYTE $0x60 // mov eax, dword [rsi + 96] LONG $0xd1950f41 // setne r9b WORD $0x423b; BYTE $0x60 // cmp eax, dword [rdx + 96] WORD $0x468b; BYTE $0x64 // mov eax, dword [rsi + 100] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] + LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] WORD $0x423b; BYTE $0x64 // cmp eax, dword [rdx + 100] WORD $0x468b; BYTE $0x68 // mov eax, dword [rsi + 104] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] + LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] WORD $0x423b; BYTE $0x68 // cmp eax, dword [rdx + 104] WORD $0x468b; BYTE $0x6c // mov eax, dword [rsi + 108] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] + LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] WORD $0x423b; BYTE $0x6c // cmp eax, dword [rdx + 108] WORD $0x468b; BYTE $0x70 // mov eax, dword [rsi + 112] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] + LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] WORD $0x423b; BYTE $0x70 // cmp eax, dword [rdx + 112] WORD $0x468b; BYTE $0x74 // mov eax, dword [rsi + 116] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] WORD $0x423b; BYTE $0x74 // cmp eax, dword [rdx + 116] WORD $0x468b; BYTE $0x78 // mov eax, dword [rsi + 120] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] + LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] WORD $0x423b; BYTE $0x78 // cmp eax, dword [rdx + 120] WORD $0x468b; BYTE $0x7c // mov eax, dword [rsi + 124] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] + LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x80ee8348 // sub rsi, -128 WORD $0x423b; BYTE $0x7c // cmp eax, dword [rdx + 124] - LONG $0xd7950f40 // setne dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x950f; BYTE $0xd1 // setne cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x80c28148; WORD $0x0000; BYTE $0x00 // add rdx, 128 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB3_24 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB3_26: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_28: @@ -17001,16 +17655,16 @@ LBB3_28: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB3_28 JMP LBB3_123 @@ -17023,266 +17677,361 @@ LBB3_29: JE LBB3_112 WORD $0xff83; BYTE $0x0c // cmp edi, 12 JNE LBB3_123 - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_50 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x634c; BYTE $0xd0 // movsxd r10, eax LBB3_48: LONG $0x0610fbc5 // vmovsd xmm0, qword [rsi] LONG $0x08c68348 // add rsi, 8 LONG $0x022ef9c5 // vucomisd xmm0, qword [rdx] LONG $0x08528d48 // lea rdx, [rdx + 8] - LONG $0xd2950f41 // setne r10b - WORD $0xf641; BYTE $0xda // neg r10b - LONG $0x07788d48 // lea rdi, [rax + 7] - WORD $0x8548; BYTE $0xc0 // test rax, rax - LONG $0xf8490f48 // cmovns rdi, rax + WORD $0x9a0f; BYTE $0xd1 // setp cl + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xcb08 // or bl, cl + WORD $0xdbf6 // neg bl + LONG $0x077a8d49 // lea rdi, [r10 + 7] + WORD $0x854d; BYTE $0xd2 // test r10, r10 + LONG $0xfa490f49 // cmovns rdi, r10 LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] - WORD $0x3045; BYTE $0xc2 // xor r10b, r8b + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] + WORD $0x3044; BYTE $0xc3 // xor bl, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] - WORD $0xc189 // mov ecx, eax + WORD $0x8944; BYTE $0xd1 // mov ecx, r10d WORD $0x2944; BYTE $0xc9 // sub ecx, r9d - LONG $0x000001bb; BYTE $0x00 // mov ebx, 1 - WORD $0xe3d3 // shl ebx, cl - WORD $0x2044; BYTE $0xd3 // and bl, r10b - WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl - LONG $0x01c08348 // add rax, 1 - LONG $0x08f88348 // cmp rax, 8 + LONG $0x000001b8; BYTE $0x00 // mov eax, 1 + WORD $0xe0d3 // shl eax, cl + WORD $0xd820 // and al, bl + WORD $0x3044; BYTE $0xc0 // xor al, r8b + LONG $0x3c048841 // mov byte [r12 + rdi], al + LONG $0x01c28349 // add r10, 1 + LONG $0x08fa8349 // cmp r10, 8 JNE LBB3_48 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_50: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_54 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 - LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 + LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 LBB3_52: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 LONG $0x0610fbc5 // vmovsd xmm0, qword [rsi] - LONG $0x4e10fbc5; BYTE $0x08 // vmovsd xmm1, qword [rsi + 8] LONG $0x022ef9c5 // vucomisd xmm0, qword [rdx] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] - LONG $0x4a2ef9c5; BYTE $0x08 // vucomisd xmm1, qword [rdx + 8] - WORD $0x950f; BYTE $0xd0 // setne al + LONG $0x4610fbc5; BYTE $0x08 // vmovsd xmm0, qword [rsi + 8] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x15244c88 // mov byte [rsp + 21], cl + LONG $0x422ef9c5; BYTE $0x08 // vucomisd xmm0, qword [rdx + 8] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0d244c88 // mov byte [rsp + 13], cl LONG $0x4610fbc5; BYTE $0x10 // vmovsd xmm0, qword [rsi + 16] LONG $0x422ef9c5; BYTE $0x10 // vucomisd xmm0, qword [rdx + 16] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x14244c88 // mov byte [rsp + 20], cl LONG $0x4610fbc5; BYTE $0x18 // vmovsd xmm0, qword [rsi + 24] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] LONG $0x422ef9c5; BYTE $0x18 // vucomisd xmm0, qword [rdx + 24] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x17244c88 // mov byte [rsp + 23], cl LONG $0x4610fbc5; BYTE $0x20 // vmovsd xmm0, qword [rsi + 32] LONG $0x422ef9c5; BYTE $0x20 // vucomisd xmm0, qword [rdx + 32] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x16244c88 // mov byte [rsp + 22], cl LONG $0x4610fbc5; BYTE $0x28 // vmovsd xmm0, qword [rsi + 40] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] LONG $0x422ef9c5; BYTE $0x28 // vucomisd xmm0, qword [rdx + 40] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f40 // setne dil + WORD $0x0840; BYTE $0xc7 // or dil, al LONG $0x4610fbc5; BYTE $0x30 // vmovsd xmm0, qword [rsi + 48] LONG $0x422ef9c5; BYTE $0x30 // vucomisd xmm0, qword [rdx + 48] - LONG $0x4610fbc5; BYTE $0x38 // vmovsd xmm0, qword [rsi + 56] + WORD $0x9a0f; BYTE $0xd0 // setp al LONG $0xd5950f41 // setne r13b + WORD $0x0841; BYTE $0xc5 // or r13b, al + LONG $0x4610fbc5; BYTE $0x38 // vmovsd xmm0, qword [rsi + 56] LONG $0x422ef9c5; BYTE $0x38 // vucomisd xmm0, qword [rdx + 56] - LONG $0xd7950f41 // setne r15b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x03244c88 // mov byte [rsp + 3], cl LONG $0x4610fbc5; BYTE $0x40 // vmovsd xmm0, qword [rsi + 64] LONG $0x422ef9c5; BYTE $0x40 // vucomisd xmm0, qword [rdx + 64] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x13244c88 // mov byte [rsp + 19], cl LONG $0x4610fbc5; BYTE $0x48 // vmovsd xmm0, qword [rsi + 72] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x422ef9c5; BYTE $0x48 // vucomisd xmm0, qword [rdx + 72] - WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xc308 // or bl, al LONG $0x4610fbc5; BYTE $0x50 // vmovsd xmm0, qword [rsi + 80] LONG $0x422ef9c5; BYTE $0x50 // vucomisd xmm0, qword [rdx + 80] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x12244c88 // mov byte [rsp + 18], cl LONG $0x4610fbc5; BYTE $0x58 // vmovsd xmm0, qword [rsi + 88] - LONG $0xd1950f41 // setne r9b LONG $0x422ef9c5; BYTE $0x58 // vucomisd xmm0, qword [rdx + 88] - LONG $0xd3950f41 // setne r11b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x11244c88 // mov byte [rsp + 17], cl LONG $0x4610fbc5; BYTE $0x60 // vmovsd xmm0, qword [rsi + 96] LONG $0x422ef9c5; BYTE $0x60 // vucomisd xmm0, qword [rdx + 96] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x10244c88 // mov byte [rsp + 16], cl LONG $0x4610fbc5; BYTE $0x68 // vmovsd xmm0, qword [rsi + 104] - LONG $0xd2950f41 // setne r10b LONG $0x422ef9c5; BYTE $0x68 // vucomisd xmm0, qword [rdx + 104] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0f244c88 // mov byte [rsp + 15], cl LONG $0x4610fbc5; BYTE $0x70 // vmovsd xmm0, qword [rsi + 112] LONG $0x422ef9c5; BYTE $0x70 // vucomisd xmm0, qword [rdx + 112] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0c244c88 // mov byte [rsp + 12], cl LONG $0x4610fbc5; BYTE $0x78 // vmovsd xmm0, qword [rsi + 120] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] LONG $0x422ef9c5; BYTE $0x78 // vucomisd xmm0, qword [rdx + 120] - WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0b244c88 // mov byte [rsp + 11], cl QUAD $0x000000808610fbc5 // vmovsd xmm0, qword [rsi + 128] QUAD $0x00000080822ef9c5 // vucomisd xmm0, qword [rdx + 128] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0e244c88 // mov byte [rsp + 14], cl QUAD $0x000000888610fbc5 // vmovsd xmm0, qword [rsi + 136] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] QUAD $0x00000088822ef9c5 // vucomisd xmm0, qword [rdx + 136] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0a244c88 // mov byte [rsp + 10], cl QUAD $0x000000908610fbc5 // vmovsd xmm0, qword [rsi + 144] - LONG $0xd6950f41 // setne r14b QUAD $0x00000090822ef9c5 // vucomisd xmm0, qword [rdx + 144] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x09244c88 // mov byte [rsp + 9], cl QUAD $0x000000988610fbc5 // vmovsd xmm0, qword [rsi + 152] - LONG $0xd4950f41 // setne r12b QUAD $0x00000098822ef9c5 // vucomisd xmm0, qword [rdx + 152] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd6950f41 // setne r14b + WORD $0x0841; BYTE $0xc6 // or r14b, al QUAD $0x000000a08610fbc5 // vmovsd xmm0, qword [rsi + 160] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] QUAD $0x000000a0822ef9c5 // vucomisd xmm0, qword [rdx + 160] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x08244c88 // mov byte [rsp + 8], cl QUAD $0x000000a88610fbc5 // vmovsd xmm0, qword [rsi + 168] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] QUAD $0x000000a8822ef9c5 // vucomisd xmm0, qword [rdx + 168] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x07244c88 // mov byte [rsp + 7], cl QUAD $0x000000b08610fbc5 // vmovsd xmm0, qword [rsi + 176] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] QUAD $0x000000b0822ef9c5 // vucomisd xmm0, qword [rdx + 176] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x05244c88 // mov byte [rsp + 5], cl QUAD $0x000000b88610fbc5 // vmovsd xmm0, qword [rsi + 184] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] QUAD $0x000000b8822ef9c5 // vucomisd xmm0, qword [rdx + 184] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f41 // setne r15b + WORD $0x0841; BYTE $0xc7 // or r15b, al QUAD $0x000000c08610fbc5 // vmovsd xmm0, qword [rsi + 192] - LONG $0xd0950f41 // setne r8b QUAD $0x000000c0822ef9c5 // vucomisd xmm0, qword [rdx + 192] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x06244c88 // mov byte [rsp + 6], cl QUAD $0x000000c88610fbc5 // vmovsd xmm0, qword [rsi + 200] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] QUAD $0x000000c8822ef9c5 // vucomisd xmm0, qword [rdx + 200] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl QUAD $0x000000d08610fbc5 // vmovsd xmm0, qword [rsi + 208] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] QUAD $0x000000d0822ef9c5 // vucomisd xmm0, qword [rdx + 208] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd3950f41 // setne r11b + WORD $0x0841; BYTE $0xc3 // or r11b, al QUAD $0x000000d88610fbc5 // vmovsd xmm0, qword [rsi + 216] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] QUAD $0x000000d8822ef9c5 // vucomisd xmm0, qword [rdx + 216] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd2950f41 // setne r10b + WORD $0x0841; BYTE $0xc2 // or r10b, al QUAD $0x000000e08610fbc5 // vmovsd xmm0, qword [rsi + 224] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] QUAD $0x000000e0822ef9c5 // vucomisd xmm0, qword [rdx + 224] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x04244c88 // mov byte [rsp + 4], cl QUAD $0x000000e88610fbc5 // vmovsd xmm0, qword [rsi + 232] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] QUAD $0x000000e8822ef9c5 // vucomisd xmm0, qword [rdx + 232] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl QUAD $0x000000f08610fbc5 // vmovsd xmm0, qword [rsi + 240] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] QUAD $0x000000f0822ef9c5 // vucomisd xmm0, qword [rdx + 240] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd1950f41 // setne r9b + WORD $0x0841; BYTE $0xc1 // or r9b, al QUAD $0x000000f88610fbc5 // vmovsd xmm0, qword [rsi + 248] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 QUAD $0x000000f8822ef9c5 // vucomisd xmm0, qword [rdx + 248] - LONG $0xd7950f40 // setne dil + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd0950f41 // setne r8b + WORD $0x0841; BYTE $0xc0 // or r8b, al + LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] WORD $0xc000 // add al, al - LONG $0x04244402 // add al, byte [rsp + 4] + LONG $0x15244402 // add al, byte [rsp + 21] + LONG $0x05e7c040 // shl dil, 5 LONG $0x06e5c041 // shl r13b, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0845; BYTE $0xef // or r15b, r13b - LONG $0x6cb60f44; WORD $0x0524 // movzx r13d, byte [rsp + 5] - LONG $0x02e5c041 // shl r13b, 2 - WORD $0x0841; BYTE $0xc5 // or r13b, al - WORD $0x8944; BYTE $0xe8 // mov eax, r13d - WORD $0xc900 // add cl, cl - LONG $0x08244c02 // add cl, byte [rsp + 8] + WORD $0x0841; BYTE $0xfd // or r13b, dil + WORD $0x8944; BYTE $0xef // mov edi, r13d + LONG $0x244cb60f; BYTE $0x14 // movzx ecx, byte [rsp + 20] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xc108 // or cl, al + WORD $0xd889 // mov eax, ebx + WORD $0xd800 // add al, bl + LONG $0x13244402 // add al, byte [rsp + 19] + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x2444b60f; BYTE $0x03 // movzx eax, byte [rsp + 3] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x03244488 // mov byte [rsp + 3], al + LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x17 // movzx eax, byte [rsp + 23] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + LONG $0x245cb60f; BYTE $0x11 // movzx ebx, byte [rsp + 17] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0840; BYTE $0xfb // or bl, dil LONG $0x6cb60f44; WORD $0x1624 // movzx r13d, byte [rsp + 22] - LONG $0x03e5c041 // shl r13b, 3 + LONG $0x04e5c041 // shl r13b, 4 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0x0844; BYTE $0xe9 // or cl, r13b - WORD $0x8941; BYTE $0xcd // mov r13d, ecx - LONG $0x03e3c041 // shl r11b, 3 - WORD $0x0845; BYTE $0xcb // or r11b, r9b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xe9 // or cl, r13b - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xda // or r10b, r11b - LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0844; BYTE $0xd0 // or al, r10b - LONG $0x4cb60f44; WORD $0x0624 // movzx r9d, byte [rsp + 6] - LONG $0x06e1c041 // shl r9b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xcb // or bl, r9b - WORD $0x0841; BYTE $0xcf // or r15b, cl - WORD $0xc308 // or bl, al - WORD $0x0045; BYTE $0xf6 // add r14b, r14b - LONG $0x24740244; BYTE $0x0e // add r14b, byte [rsp + 14] - LONG $0x02e4c041 // shl r12b, 2 - WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0a // movzx eax, byte [rsp + 10] + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc789 // mov edi, eax + LONG $0x245cb60f; BYTE $0x0f // movzx ebx, byte [rsp + 15] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x3e // mov byte [r14], r15b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x0a // movzx ebx, byte [rsp + 10] + WORD $0xdb00 // add bl, bl + LONG $0x0e245c02 // add bl, byte [rsp + 14] + LONG $0x244cb60f; BYTE $0x09 // movzx ecx, byte [rsp + 9] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xd908 // or cl, bl + LONG $0x03e6c041 // shl r14b, 3 + WORD $0x0841; BYTE $0xce // or r14b, cl + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xf3 // or bl, r14b + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x74b60f44; WORD $0x0324 // movzx r14d, byte [rsp + 3] + WORD $0x0845; BYTE $0xee // or r14b, r13b + LONG $0x6cb60f44; WORD $0x0724 // movzx r13d, byte [rsp + 7] + LONG $0x05e5c041 // shl r13b, 5 + LONG $0x244cb60f; BYTE $0x05 // movzx ecx, byte [rsp + 5] WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x0844; BYTE $0xe9 // or cl, r13b + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x07e7c041 // shl r15b, 7 + WORD $0x0841; BYTE $0xcf // or r15b, cl + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] + WORD $0xc900 // add cl, cl + LONG $0x06244c02 // add cl, byte [rsp + 6] + LONG $0x02e3c041 // shl r11b, 2 + WORD $0x0841; BYTE $0xcb // or r11b, cl + LONG $0x03e2c041 // shl r10b, 3 + WORD $0x0845; BYTE $0xda // or r10b, r11b + LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0x0844; BYTE $0xd1 // or cl, r10b + LONG $0x24348845 // mov byte [r12], r14b + LONG $0x245cb60f; BYTE $0x28 // movzx ebx, byte [rsp + 40] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e1c041 // shl r9b, 6 + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x24448841; BYTE $0x01 // mov byte [r12 + 1], al LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xc8 // or r8b, r9b WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl - WORD $0x0841; BYTE $0xc0 // or r8b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x14244402 // add al, byte [rsp + 20] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x13 // movzx ecx, byte [rsp + 19] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xc108 // or cl, al - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xc7 // or dil, al - WORD $0x0840; BYTE $0xcf // or dil, cl - LONG $0x02468845 // mov byte [r14 + 2], r8b - LONG $0x037e8841 // mov byte [r14 + 3], dil + LONG $0x247c8845; BYTE $0x02 // mov byte [r12 + 2], r15b + LONG $0x24448845; BYTE $0x03 // mov byte [r12 + 3], r8b LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff28 // add qword [rsp + 40], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 JNE LBB3_52 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] LBB3_54: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_56: + LONG $0x01498d4c // lea r9, [rcx + 1] LONG $0x0410fbc5; BYTE $0xce // vmovsd xmm0, qword [rsi + 8*rcx] LONG $0x042ef9c5; BYTE $0xca // vucomisd xmm0, qword [rdx + 8*rcx] - LONG $0x01418d4c // lea r8, [rcx + 1] - WORD $0x950f; BYTE $0xd3 // setne bl - WORD $0xdbf6 // neg bl + WORD $0x9a0f; BYTE $0xd3 // setp bl + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xd808 // or al, bl + WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] - WORD $0x3044; BYTE $0xcb // xor bl, r9b + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] + WORD $0x3044; BYTE $0xc0 // xor al, r8b WORD $0xe180; BYTE $0x07 // and cl, 7 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0xd820 // and al, bl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al - WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xc3 // xor bl, r8b + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl + WORD $0x894c; BYTE $0xc9 // mov rcx, r9 + WORD $0x394d; BYTE $0xce // cmp r14, r9 JNE LBB3_56 JMP LBB3_123 @@ -17291,16 +18040,16 @@ LBB3_2: JE LBB3_57 WORD $0xff83; BYTE $0x03 // cmp edi, 3 JNE LBB3_123 - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_8 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB3_6: WORD $0xb60f; BYTE $0x0e // movzx ecx, byte [rsi] @@ -17313,7 +18062,7 @@ LBB3_6: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -17322,49 +18071,49 @@ LBB3_6: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB3_6 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_8: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_12 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 + LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 LBB3_10: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0xb60f; BYTE $0x06 // movzx eax, byte [rsi] LONG $0x014eb60f // movzx ecx, byte [rsi + 1] WORD $0x023a // cmp al, byte [rdx] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] WORD $0x4a3a; BYTE $0x01 // cmp cl, byte [rdx + 1] - WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0x950f; BYTE $0xd3 // setne bl LONG $0x0246b60f // movzx eax, byte [rsi + 2] WORD $0x423a; BYTE $0x02 // cmp al, byte [rdx + 2] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] + LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] LONG $0x0346b60f // movzx eax, byte [rsi + 3] WORD $0x423a; BYTE $0x03 // cmp al, byte [rdx + 3] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] + LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] LONG $0x0446b60f // movzx eax, byte [rsi + 4] WORD $0x423a; BYTE $0x04 // cmp al, byte [rdx + 4] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] LONG $0x0546b60f // movzx eax, byte [rsi + 5] WORD $0x423a; BYTE $0x05 // cmp al, byte [rdx + 5] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + LONG $0x2454950f; BYTE $0x03 // setne byte [rsp + 3] LONG $0x0646b60f // movzx eax, byte [rsi + 6] WORD $0x423a; BYTE $0x06 // cmp al, byte [rdx + 6] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] + LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] LONG $0x0746b60f // movzx eax, byte [rsi + 7] WORD $0x423a; BYTE $0x07 // cmp al, byte [rdx + 7] LONG $0xd7950f41 // setne r15b LONG $0x0846b60f // movzx eax, byte [rsi + 8] WORD $0x423a; BYTE $0x08 // cmp al, byte [rdx + 8] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x0946b60f // movzx eax, byte [rsi + 9] WORD $0x423a; BYTE $0x09 // cmp al, byte [rdx + 9] LONG $0xd7950f40 // setne dil @@ -17379,16 +18128,16 @@ LBB3_10: LONG $0xd6950f41 // setne r14b LONG $0x0d46b60f // movzx eax, byte [rsi + 13] WORD $0x423a; BYTE $0x0d // cmp al, byte [rdx + 13] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] + LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] LONG $0x0e46b60f // movzx eax, byte [rsi + 14] WORD $0x423a; BYTE $0x0e // cmp al, byte [rdx + 14] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] + LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] LONG $0x0f46b60f // movzx eax, byte [rsi + 15] WORD $0x423a; BYTE $0x0f // cmp al, byte [rdx + 15] - WORD $0x950f; BYTE $0xd3 // setne bl + LONG $0xd0950f41 // setne r8b LONG $0x1046b60f // movzx eax, byte [rsi + 16] WORD $0x423a; BYTE $0x10 // cmp al, byte [rdx + 16] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] + LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] LONG $0x1146b60f // movzx eax, byte [rsi + 17] WORD $0x423a; BYTE $0x11 // cmp al, byte [rdx + 17] LONG $0xd4950f41 // setne r12b @@ -17397,144 +18146,144 @@ LBB3_10: LONG $0xd5950f41 // setne r13b LONG $0x1346b60f // movzx eax, byte [rsi + 19] WORD $0x423a; BYTE $0x13 // cmp al, byte [rdx + 19] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] + LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] LONG $0x1446b60f // movzx eax, byte [rsi + 20] WORD $0x423a; BYTE $0x14 // cmp al, byte [rdx + 20] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] LONG $0x1546b60f // movzx eax, byte [rsi + 21] WORD $0x423a; BYTE $0x15 // cmp al, byte [rdx + 21] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] + LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] LONG $0x1646b60f // movzx eax, byte [rsi + 22] WORD $0x423a; BYTE $0x16 // cmp al, byte [rdx + 22] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] LONG $0x1746b60f // movzx eax, byte [rsi + 23] WORD $0x423a; BYTE $0x17 // cmp al, byte [rdx + 23] LONG $0xd1950f41 // setne r9b LONG $0x1846b60f // movzx eax, byte [rsi + 24] WORD $0x423a; BYTE $0x18 // cmp al, byte [rdx + 24] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] + LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] LONG $0x1946b60f // movzx eax, byte [rsi + 25] WORD $0x423a; BYTE $0x19 // cmp al, byte [rdx + 25] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] + LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] LONG $0x1a46b60f // movzx eax, byte [rsi + 26] WORD $0x423a; BYTE $0x1a // cmp al, byte [rdx + 26] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] + LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] LONG $0x1b46b60f // movzx eax, byte [rsi + 27] WORD $0x423a; BYTE $0x1b // cmp al, byte [rdx + 27] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] + LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0x1c46b60f // movzx eax, byte [rsi + 28] WORD $0x423a; BYTE $0x1c // cmp al, byte [rdx + 28] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] LONG $0x1d46b60f // movzx eax, byte [rsi + 29] WORD $0x423a; BYTE $0x1d // cmp al, byte [rdx + 29] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] + LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x1e46b60f // movzx eax, byte [rsi + 30] WORD $0x423a; BYTE $0x1e // cmp al, byte [rdx + 30] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] + LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] LONG $0x1f46b60f // movzx eax, byte [rsi + 31] LONG $0x20c68348 // add rsi, 32 WORD $0x423a; BYTE $0x1f // cmp al, byte [rdx + 31] - LONG $0xd0950f41 // setne r8b - WORD $0xc900 // add cl, cl - LONG $0x28244c02 // add cl, byte [rsp + 40] - WORD $0xc889 // mov eax, ecx - LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xdb00 // add bl, bl + LONG $0x04245c02 // add bl, byte [rsp + 4] + WORD $0xd889 // mov eax, ebx + LONG $0x245cb60f; BYTE $0x05 // movzx ebx, byte [rsp + 5] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xcf // or r15b, cl - LONG $0x244cb60f; BYTE $0x14 // movzx ecx, byte [rsp + 20] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x245cb60f; BYTE $0x15 // movzx ebx, byte [rsp + 21] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx WORD $0x0040; BYTE $0xff // add dil, dil - LONG $0x247c0240; BYTE $0x07 // add dil, byte [rsp + 7] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x247c0240; BYTE $0x08 // add dil, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e2c041 // shl r10b, 2 WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0xcf89 // mov edi, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0xdf89 // mov edi, ebx LONG $0x03e3c041 // shl r11b, 3 WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0840; BYTE $0xf9 // or cl, dil + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xfb // or bl, dil LONG $0x04e6c041 // shl r14b, 4 WORD $0x0845; BYTE $0xde // or r14b, r11b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x247cb60f; BYTE $0x06 // movzx edi, byte [rsp + 6] + LONG $0x247cb60f; BYTE $0x07 // movzx edi, byte [rsp + 7] LONG $0x06e7c040 // shl dil, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0840; BYTE $0xfb // or bl, dil - WORD $0x0841; BYTE $0xcf // or r15b, cl - WORD $0xc308 // or bl, al + LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + WORD $0x0841; BYTE $0xdf // or r15b, bl + WORD $0x0841; BYTE $0xc0 // or r8b, al WORD $0x0045; BYTE $0xe4 // add r12b, r12b - LONG $0x24640244; BYTE $0x0d // add r12b, byte [rsp + 13] + LONG $0x24640244; BYTE $0x0e // add r12b, byte [rsp + 14] LONG $0x02e5c041 // shl r13b, 2 WORD $0x0845; BYTE $0xe5 // or r13b, r12b - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xe8 // or al, r13b - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0a // movzx eax, byte [rsp + 10] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x3e // mov byte [r14], r15b - LONG $0x244cb60f; BYTE $0x0b // movzx ecx, byte [rsp + 11] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x243c8845 // mov byte [r12], r15b + LONG $0x245cb60f; BYTE $0x0c // movzx ebx, byte [rsp + 12] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x24448845; BYTE $0x01 // mov byte [r12 + 1], r8b WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] + LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x12 // movzx ecx, byte [rsp + 18] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xc8 // or r8b, cl - WORD $0x0841; BYTE $0xc0 // or r8b, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x03468845 // mov byte [r14 + 3], r8b + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x13 // movzx ebx, byte [rsp + 19] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x20c28348 // add rdx, 32 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff28 // add qword [rsp + 40], -1 JNE LBB3_10 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] LBB3_12: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_14: @@ -17545,16 +18294,16 @@ LBB3_14: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB3_14 JMP LBB3_123 @@ -17563,16 +18312,16 @@ LBB3_30: JE LBB3_90 WORD $0xff83; BYTE $0x08 // cmp edi, 8 JNE LBB3_123 - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_36 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB3_34: WORD $0x8b48; BYTE $0x0e // mov rcx, qword [rsi] @@ -17585,7 +18334,7 @@ LBB3_34: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -17594,49 +18343,49 @@ LBB3_34: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB3_34 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_36: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_40 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB3_38: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0x8b48; BYTE $0x06 // mov rax, qword [rsi] LONG $0x084e8b48 // mov rcx, qword [rsi + 8] WORD $0x3b48; BYTE $0x02 // cmp rax, qword [rdx] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] LONG $0x084a3b48 // cmp rcx, qword [rdx + 8] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x10468b48 // mov rax, qword [rsi + 16] LONG $0x10423b48 // cmp rax, qword [rdx + 16] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] + LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] LONG $0x18468b48 // mov rax, qword [rsi + 24] LONG $0x18423b48 // cmp rax, qword [rdx + 24] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] + LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] LONG $0x20468b48 // mov rax, qword [rsi + 32] LONG $0x20423b48 // cmp rax, qword [rdx + 32] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] LONG $0x28468b48 // mov rax, qword [rsi + 40] LONG $0x28423b48 // cmp rax, qword [rdx + 40] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + LONG $0x2454950f; BYTE $0x03 // setne byte [rsp + 3] LONG $0x30468b48 // mov rax, qword [rsi + 48] LONG $0x30423b48 // cmp rax, qword [rdx + 48] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] + LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] LONG $0x38468b48 // mov rax, qword [rsi + 56] LONG $0x38423b48 // cmp rax, qword [rdx + 56] LONG $0xd5950f41 // setne r13b LONG $0x40468b48 // mov rax, qword [rsi + 64] LONG $0x40423b48 // cmp rax, qword [rdx + 64] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] LONG $0x48468b48 // mov rax, qword [rsi + 72] LONG $0x48423b48 // cmp rax, qword [rdx + 72] LONG $0xd0950f41 // setne r8b @@ -17648,165 +18397,165 @@ LBB3_38: LONG $0xd7950f41 // setne r15b LONG $0x60468b48 // mov rax, qword [rsi + 96] LONG $0x60423b48 // cmp rax, qword [rdx + 96] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] + LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] LONG $0x68468b48 // mov rax, qword [rsi + 104] LONG $0x68423b48 // cmp rax, qword [rdx + 104] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] + LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] LONG $0x70468b48 // mov rax, qword [rsi + 112] LONG $0x70423b48 // cmp rax, qword [rdx + 112] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x78468b48 // mov rax, qword [rsi + 120] LONG $0x78423b48 // cmp rax, qword [rdx + 120] - WORD $0x950f; BYTE $0xd3 // setne bl + LONG $0xd7950f40 // setne dil LONG $0x80868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 128] - LONG $0x888e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 136] + LONG $0x889e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 136] LONG $0x80823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 128] LONG $0x90868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 144] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] - LONG $0x888a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 136] - LONG $0x988e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 152] + LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x889a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 136] + LONG $0x989e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 152] LONG $0xd2950f41 // setne r10b LONG $0x90823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 144] LONG $0xa0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 160] LONG $0xd6950f41 // setne r14b - LONG $0x988a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 152] - LONG $0xa88e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 168] + LONG $0x989a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 152] + LONG $0xa89e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 168] LONG $0xd4950f41 // setne r12b LONG $0xa0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 160] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] - LONG $0xa88a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 168] + LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0xa89a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 168] LONG $0xb0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 176] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] LONG $0xb0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 176] LONG $0xb8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 184] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] + LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] LONG $0xb8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 184] LONG $0xc0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 192] LONG $0xd1950f41 // setne r9b LONG $0xc0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 192] LONG $0xc8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 200] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] + LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] LONG $0xc8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 200] LONG $0xd0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 208] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] + LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] LONG $0xd0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 208] LONG $0xd8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 216] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] + LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] LONG $0xd8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 216] LONG $0xe0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 224] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] + LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0xe0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 224] LONG $0xe8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 232] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] LONG $0xe8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 232] LONG $0xf0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 240] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] + LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] LONG $0xf0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 240] LONG $0xf8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 248] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] + LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 LONG $0xf8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 248] - LONG $0xd7950f40 // setne dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x950f; BYTE $0xd1 // setne cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB3_38 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB3_40: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_42: @@ -17817,30 +18566,30 @@ LBB3_42: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB3_42 JMP LBB3_123 LBB3_68: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_72 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB3_70: WORD $0xb70f; BYTE $0x0e // movzx ecx, word [rsi] @@ -17853,7 +18602,7 @@ LBB3_70: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -17862,49 +18611,49 @@ LBB3_70: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB3_70 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_72: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_76 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB3_74: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0xb70f; BYTE $0x06 // movzx eax, word [rsi] LONG $0x024eb70f // movzx ecx, word [rsi + 2] WORD $0x3b66; BYTE $0x02 // cmp ax, word [rdx] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] LONG $0x024a3b66 // cmp cx, word [rdx + 2] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x0446b70f // movzx eax, word [rsi + 4] LONG $0x04423b66 // cmp ax, word [rdx + 4] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] + LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] LONG $0x0646b70f // movzx eax, word [rsi + 6] LONG $0x06423b66 // cmp ax, word [rdx + 6] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] + LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] LONG $0x0846b70f // movzx eax, word [rsi + 8] LONG $0x08423b66 // cmp ax, word [rdx + 8] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] LONG $0x0a46b70f // movzx eax, word [rsi + 10] LONG $0x0a423b66 // cmp ax, word [rdx + 10] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + LONG $0x2454950f; BYTE $0x03 // setne byte [rsp + 3] LONG $0x0c46b70f // movzx eax, word [rsi + 12] LONG $0x0c423b66 // cmp ax, word [rdx + 12] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] + LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] LONG $0x0e46b70f // movzx eax, word [rsi + 14] LONG $0x0e423b66 // cmp ax, word [rdx + 14] LONG $0xd5950f41 // setne r13b LONG $0x1046b70f // movzx eax, word [rsi + 16] LONG $0x10423b66 // cmp ax, word [rdx + 16] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] LONG $0x1246b70f // movzx eax, word [rsi + 18] LONG $0x12423b66 // cmp ax, word [rdx + 18] LONG $0xd0950f41 // setne r8b @@ -17916,165 +18665,165 @@ LBB3_74: LONG $0xd7950f41 // setne r15b LONG $0x1846b70f // movzx eax, word [rsi + 24] LONG $0x18423b66 // cmp ax, word [rdx + 24] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] + LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] LONG $0x1a46b70f // movzx eax, word [rsi + 26] LONG $0x1a423b66 // cmp ax, word [rdx + 26] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] + LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] LONG $0x1c46b70f // movzx eax, word [rsi + 28] LONG $0x1c423b66 // cmp ax, word [rdx + 28] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x1e46b70f // movzx eax, word [rsi + 30] LONG $0x1e423b66 // cmp ax, word [rdx + 30] - WORD $0x950f; BYTE $0xd3 // setne bl + LONG $0xd7950f40 // setne dil LONG $0x2046b70f // movzx eax, word [rsi + 32] - LONG $0x224eb70f // movzx ecx, word [rsi + 34] + LONG $0x225eb70f // movzx ebx, word [rsi + 34] LONG $0x20423b66 // cmp ax, word [rdx + 32] LONG $0x2446b70f // movzx eax, word [rsi + 36] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] - LONG $0x224a3b66 // cmp cx, word [rdx + 34] - LONG $0x264eb70f // movzx ecx, word [rsi + 38] + LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x225a3b66 // cmp bx, word [rdx + 34] + LONG $0x265eb70f // movzx ebx, word [rsi + 38] LONG $0xd2950f41 // setne r10b LONG $0x24423b66 // cmp ax, word [rdx + 36] LONG $0x2846b70f // movzx eax, word [rsi + 40] LONG $0xd6950f41 // setne r14b - LONG $0x264a3b66 // cmp cx, word [rdx + 38] - LONG $0x2a4eb70f // movzx ecx, word [rsi + 42] + LONG $0x265a3b66 // cmp bx, word [rdx + 38] + LONG $0x2a5eb70f // movzx ebx, word [rsi + 42] LONG $0xd4950f41 // setne r12b LONG $0x28423b66 // cmp ax, word [rdx + 40] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] - LONG $0x2a4a3b66 // cmp cx, word [rdx + 42] + LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2a5a3b66 // cmp bx, word [rdx + 42] LONG $0x2c46b70f // movzx eax, word [rsi + 44] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] LONG $0x2c423b66 // cmp ax, word [rdx + 44] LONG $0x2e46b70f // movzx eax, word [rsi + 46] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] + LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] LONG $0x2e423b66 // cmp ax, word [rdx + 46] LONG $0x3046b70f // movzx eax, word [rsi + 48] LONG $0xd1950f41 // setne r9b LONG $0x30423b66 // cmp ax, word [rdx + 48] LONG $0x3246b70f // movzx eax, word [rsi + 50] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] + LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] LONG $0x32423b66 // cmp ax, word [rdx + 50] LONG $0x3446b70f // movzx eax, word [rsi + 52] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] + LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] LONG $0x34423b66 // cmp ax, word [rdx + 52] LONG $0x3646b70f // movzx eax, word [rsi + 54] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] + LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] LONG $0x36423b66 // cmp ax, word [rdx + 54] LONG $0x3846b70f // movzx eax, word [rsi + 56] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] + LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0x38423b66 // cmp ax, word [rdx + 56] LONG $0x3a46b70f // movzx eax, word [rsi + 58] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] LONG $0x3a423b66 // cmp ax, word [rdx + 58] LONG $0x3c46b70f // movzx eax, word [rsi + 60] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] + LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] LONG $0x3c423b66 // cmp ax, word [rdx + 60] LONG $0x3e46b70f // movzx eax, word [rsi + 62] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] + LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x40c68348 // add rsi, 64 LONG $0x3e423b66 // cmp ax, word [rdx + 62] - LONG $0xd7950f40 // setne dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x950f; BYTE $0xd1 // setne cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x40c28348 // add rdx, 64 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB3_74 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB3_76: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_78: @@ -18085,30 +18834,30 @@ LBB3_78: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB3_78 JMP LBB3_123 LBB3_79: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_83 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB3_81: WORD $0xb70f; BYTE $0x0e // movzx ecx, word [rsi] @@ -18121,7 +18870,7 @@ LBB3_81: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -18130,49 +18879,49 @@ LBB3_81: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB3_81 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_83: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_87 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB3_85: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0xb70f; BYTE $0x06 // movzx eax, word [rsi] LONG $0x024eb70f // movzx ecx, word [rsi + 2] WORD $0x3b66; BYTE $0x02 // cmp ax, word [rdx] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] LONG $0x024a3b66 // cmp cx, word [rdx + 2] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x0446b70f // movzx eax, word [rsi + 4] LONG $0x04423b66 // cmp ax, word [rdx + 4] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] + LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] LONG $0x0646b70f // movzx eax, word [rsi + 6] LONG $0x06423b66 // cmp ax, word [rdx + 6] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] + LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] LONG $0x0846b70f // movzx eax, word [rsi + 8] LONG $0x08423b66 // cmp ax, word [rdx + 8] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] LONG $0x0a46b70f // movzx eax, word [rsi + 10] LONG $0x0a423b66 // cmp ax, word [rdx + 10] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + LONG $0x2454950f; BYTE $0x03 // setne byte [rsp + 3] LONG $0x0c46b70f // movzx eax, word [rsi + 12] LONG $0x0c423b66 // cmp ax, word [rdx + 12] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] + LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] LONG $0x0e46b70f // movzx eax, word [rsi + 14] LONG $0x0e423b66 // cmp ax, word [rdx + 14] LONG $0xd5950f41 // setne r13b LONG $0x1046b70f // movzx eax, word [rsi + 16] LONG $0x10423b66 // cmp ax, word [rdx + 16] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] LONG $0x1246b70f // movzx eax, word [rsi + 18] LONG $0x12423b66 // cmp ax, word [rdx + 18] LONG $0xd0950f41 // setne r8b @@ -18184,165 +18933,165 @@ LBB3_85: LONG $0xd7950f41 // setne r15b LONG $0x1846b70f // movzx eax, word [rsi + 24] LONG $0x18423b66 // cmp ax, word [rdx + 24] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] + LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] LONG $0x1a46b70f // movzx eax, word [rsi + 26] LONG $0x1a423b66 // cmp ax, word [rdx + 26] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] + LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] LONG $0x1c46b70f // movzx eax, word [rsi + 28] LONG $0x1c423b66 // cmp ax, word [rdx + 28] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x1e46b70f // movzx eax, word [rsi + 30] LONG $0x1e423b66 // cmp ax, word [rdx + 30] - WORD $0x950f; BYTE $0xd3 // setne bl + LONG $0xd7950f40 // setne dil LONG $0x2046b70f // movzx eax, word [rsi + 32] - LONG $0x224eb70f // movzx ecx, word [rsi + 34] + LONG $0x225eb70f // movzx ebx, word [rsi + 34] LONG $0x20423b66 // cmp ax, word [rdx + 32] LONG $0x2446b70f // movzx eax, word [rsi + 36] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] - LONG $0x224a3b66 // cmp cx, word [rdx + 34] - LONG $0x264eb70f // movzx ecx, word [rsi + 38] + LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x225a3b66 // cmp bx, word [rdx + 34] + LONG $0x265eb70f // movzx ebx, word [rsi + 38] LONG $0xd2950f41 // setne r10b LONG $0x24423b66 // cmp ax, word [rdx + 36] LONG $0x2846b70f // movzx eax, word [rsi + 40] LONG $0xd6950f41 // setne r14b - LONG $0x264a3b66 // cmp cx, word [rdx + 38] - LONG $0x2a4eb70f // movzx ecx, word [rsi + 42] + LONG $0x265a3b66 // cmp bx, word [rdx + 38] + LONG $0x2a5eb70f // movzx ebx, word [rsi + 42] LONG $0xd4950f41 // setne r12b LONG $0x28423b66 // cmp ax, word [rdx + 40] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] - LONG $0x2a4a3b66 // cmp cx, word [rdx + 42] + LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2a5a3b66 // cmp bx, word [rdx + 42] LONG $0x2c46b70f // movzx eax, word [rsi + 44] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] LONG $0x2c423b66 // cmp ax, word [rdx + 44] LONG $0x2e46b70f // movzx eax, word [rsi + 46] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] + LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] LONG $0x2e423b66 // cmp ax, word [rdx + 46] LONG $0x3046b70f // movzx eax, word [rsi + 48] LONG $0xd1950f41 // setne r9b LONG $0x30423b66 // cmp ax, word [rdx + 48] LONG $0x3246b70f // movzx eax, word [rsi + 50] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] + LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] LONG $0x32423b66 // cmp ax, word [rdx + 50] LONG $0x3446b70f // movzx eax, word [rsi + 52] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] + LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] LONG $0x34423b66 // cmp ax, word [rdx + 52] LONG $0x3646b70f // movzx eax, word [rsi + 54] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] + LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] LONG $0x36423b66 // cmp ax, word [rdx + 54] LONG $0x3846b70f // movzx eax, word [rsi + 56] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] + LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0x38423b66 // cmp ax, word [rdx + 56] LONG $0x3a46b70f // movzx eax, word [rsi + 58] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] LONG $0x3a423b66 // cmp ax, word [rdx + 58] LONG $0x3c46b70f // movzx eax, word [rsi + 60] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] + LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] LONG $0x3c423b66 // cmp ax, word [rdx + 60] LONG $0x3e46b70f // movzx eax, word [rsi + 62] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] + LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x40c68348 // add rsi, 64 LONG $0x3e423b66 // cmp ax, word [rdx + 62] - LONG $0xd7950f40 // setne dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x950f; BYTE $0xd1 // setne cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x40c28348 // add rdx, 64 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB3_85 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB3_87: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_89: @@ -18353,30 +19102,30 @@ LBB3_89: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB3_89 JMP LBB3_123 LBB3_101: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_105 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB3_103: WORD $0x8b48; BYTE $0x0e // mov rcx, qword [rsi] @@ -18389,7 +19138,7 @@ LBB3_103: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -18398,49 +19147,49 @@ LBB3_103: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB3_103 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_105: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_109 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB3_107: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0x8b48; BYTE $0x06 // mov rax, qword [rsi] LONG $0x084e8b48 // mov rcx, qword [rsi + 8] WORD $0x3b48; BYTE $0x02 // cmp rax, qword [rdx] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] LONG $0x084a3b48 // cmp rcx, qword [rdx + 8] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x10468b48 // mov rax, qword [rsi + 16] LONG $0x10423b48 // cmp rax, qword [rdx + 16] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] + LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] LONG $0x18468b48 // mov rax, qword [rsi + 24] LONG $0x18423b48 // cmp rax, qword [rdx + 24] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] + LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] LONG $0x20468b48 // mov rax, qword [rsi + 32] LONG $0x20423b48 // cmp rax, qword [rdx + 32] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] LONG $0x28468b48 // mov rax, qword [rsi + 40] LONG $0x28423b48 // cmp rax, qword [rdx + 40] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + LONG $0x2454950f; BYTE $0x03 // setne byte [rsp + 3] LONG $0x30468b48 // mov rax, qword [rsi + 48] LONG $0x30423b48 // cmp rax, qword [rdx + 48] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] + LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] LONG $0x38468b48 // mov rax, qword [rsi + 56] LONG $0x38423b48 // cmp rax, qword [rdx + 56] LONG $0xd5950f41 // setne r13b LONG $0x40468b48 // mov rax, qword [rsi + 64] LONG $0x40423b48 // cmp rax, qword [rdx + 64] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] LONG $0x48468b48 // mov rax, qword [rsi + 72] LONG $0x48423b48 // cmp rax, qword [rdx + 72] LONG $0xd0950f41 // setne r8b @@ -18452,165 +19201,165 @@ LBB3_107: LONG $0xd7950f41 // setne r15b LONG $0x60468b48 // mov rax, qword [rsi + 96] LONG $0x60423b48 // cmp rax, qword [rdx + 96] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] + LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] LONG $0x68468b48 // mov rax, qword [rsi + 104] LONG $0x68423b48 // cmp rax, qword [rdx + 104] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] + LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] LONG $0x70468b48 // mov rax, qword [rsi + 112] LONG $0x70423b48 // cmp rax, qword [rdx + 112] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x78468b48 // mov rax, qword [rsi + 120] LONG $0x78423b48 // cmp rax, qword [rdx + 120] - WORD $0x950f; BYTE $0xd3 // setne bl + LONG $0xd7950f40 // setne dil LONG $0x80868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 128] - LONG $0x888e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 136] + LONG $0x889e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 136] LONG $0x80823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 128] LONG $0x90868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 144] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] - LONG $0x888a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 136] - LONG $0x988e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 152] + LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x889a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 136] + LONG $0x989e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 152] LONG $0xd2950f41 // setne r10b LONG $0x90823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 144] LONG $0xa0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 160] LONG $0xd6950f41 // setne r14b - LONG $0x988a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 152] - LONG $0xa88e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 168] + LONG $0x989a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 152] + LONG $0xa89e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 168] LONG $0xd4950f41 // setne r12b LONG $0xa0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 160] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] - LONG $0xa88a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 168] + LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0xa89a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 168] LONG $0xb0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 176] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] LONG $0xb0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 176] LONG $0xb8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 184] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] + LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] LONG $0xb8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 184] LONG $0xc0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 192] LONG $0xd1950f41 // setne r9b LONG $0xc0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 192] LONG $0xc8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 200] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] + LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] LONG $0xc8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 200] LONG $0xd0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 208] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] + LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] LONG $0xd0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 208] LONG $0xd8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 216] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] + LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] LONG $0xd8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 216] LONG $0xe0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 224] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] + LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0xe0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 224] LONG $0xe8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 232] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] LONG $0xe8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 232] LONG $0xf0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 240] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] + LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] LONG $0xf0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 240] LONG $0xf8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 248] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] + LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 LONG $0xf8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 248] - LONG $0xd7950f40 // setne dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x950f; BYTE $0xd1 // setne cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB3_107 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB3_109: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_111: @@ -18621,294 +19370,389 @@ LBB3_111: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB3_111 JMP LBB3_123 LBB3_112: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_116 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x634c; BYTE $0xd0 // movsxd r10, eax LBB3_114: LONG $0x0610fac5 // vmovss xmm0, dword [rsi] LONG $0x04c68348 // add rsi, 4 LONG $0x022ef8c5 // vucomiss xmm0, dword [rdx] LONG $0x04528d48 // lea rdx, [rdx + 4] - LONG $0xd2950f41 // setne r10b - WORD $0xf641; BYTE $0xda // neg r10b - LONG $0x07788d48 // lea rdi, [rax + 7] - WORD $0x8548; BYTE $0xc0 // test rax, rax - LONG $0xf8490f48 // cmovns rdi, rax + WORD $0x9a0f; BYTE $0xd1 // setp cl + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xcb08 // or bl, cl + WORD $0xdbf6 // neg bl + LONG $0x077a8d49 // lea rdi, [r10 + 7] + WORD $0x854d; BYTE $0xd2 // test r10, r10 + LONG $0xfa490f49 // cmovns rdi, r10 LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] - WORD $0x3045; BYTE $0xc2 // xor r10b, r8b + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] + WORD $0x3044; BYTE $0xc3 // xor bl, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] - WORD $0xc189 // mov ecx, eax + WORD $0x8944; BYTE $0xd1 // mov ecx, r10d WORD $0x2944; BYTE $0xc9 // sub ecx, r9d - LONG $0x000001bb; BYTE $0x00 // mov ebx, 1 - WORD $0xe3d3 // shl ebx, cl - WORD $0x2044; BYTE $0xd3 // and bl, r10b - WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl - LONG $0x01c08348 // add rax, 1 - LONG $0x08f88348 // cmp rax, 8 + LONG $0x000001b8; BYTE $0x00 // mov eax, 1 + WORD $0xe0d3 // shl eax, cl + WORD $0xd820 // and al, bl + WORD $0x3044; BYTE $0xc0 // xor al, r8b + LONG $0x3c048841 // mov byte [r12 + rdi], al + LONG $0x01c28349 // add r10, 1 + LONG $0x08fa8349 // cmp r10, 8 JNE LBB3_114 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_116: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_120 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 - LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 + LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 LBB3_118: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 LONG $0x0610fac5 // vmovss xmm0, dword [rsi] - LONG $0x4e10fac5; BYTE $0x04 // vmovss xmm1, dword [rsi + 4] LONG $0x022ef8c5 // vucomiss xmm0, dword [rdx] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] - LONG $0x4a2ef8c5; BYTE $0x04 // vucomiss xmm1, dword [rdx + 4] - WORD $0x950f; BYTE $0xd0 // setne al + LONG $0x4610fac5; BYTE $0x04 // vmovss xmm0, dword [rsi + 4] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x15244c88 // mov byte [rsp + 21], cl + LONG $0x422ef8c5; BYTE $0x04 // vucomiss xmm0, dword [rdx + 4] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0d244c88 // mov byte [rsp + 13], cl LONG $0x4610fac5; BYTE $0x08 // vmovss xmm0, dword [rsi + 8] LONG $0x422ef8c5; BYTE $0x08 // vucomiss xmm0, dword [rdx + 8] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x14244c88 // mov byte [rsp + 20], cl LONG $0x4610fac5; BYTE $0x0c // vmovss xmm0, dword [rsi + 12] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] LONG $0x422ef8c5; BYTE $0x0c // vucomiss xmm0, dword [rdx + 12] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x17244c88 // mov byte [rsp + 23], cl LONG $0x4610fac5; BYTE $0x10 // vmovss xmm0, dword [rsi + 16] LONG $0x422ef8c5; BYTE $0x10 // vucomiss xmm0, dword [rdx + 16] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x16244c88 // mov byte [rsp + 22], cl LONG $0x4610fac5; BYTE $0x14 // vmovss xmm0, dword [rsi + 20] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] LONG $0x422ef8c5; BYTE $0x14 // vucomiss xmm0, dword [rdx + 20] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f40 // setne dil + WORD $0x0840; BYTE $0xc7 // or dil, al LONG $0x4610fac5; BYTE $0x18 // vmovss xmm0, dword [rsi + 24] LONG $0x422ef8c5; BYTE $0x18 // vucomiss xmm0, dword [rdx + 24] - LONG $0x4610fac5; BYTE $0x1c // vmovss xmm0, dword [rsi + 28] + WORD $0x9a0f; BYTE $0xd0 // setp al LONG $0xd5950f41 // setne r13b + WORD $0x0841; BYTE $0xc5 // or r13b, al + LONG $0x4610fac5; BYTE $0x1c // vmovss xmm0, dword [rsi + 28] LONG $0x422ef8c5; BYTE $0x1c // vucomiss xmm0, dword [rdx + 28] - LONG $0xd7950f41 // setne r15b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x03244c88 // mov byte [rsp + 3], cl LONG $0x4610fac5; BYTE $0x20 // vmovss xmm0, dword [rsi + 32] LONG $0x422ef8c5; BYTE $0x20 // vucomiss xmm0, dword [rdx + 32] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x13244c88 // mov byte [rsp + 19], cl LONG $0x4610fac5; BYTE $0x24 // vmovss xmm0, dword [rsi + 36] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x422ef8c5; BYTE $0x24 // vucomiss xmm0, dword [rdx + 36] - WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xc308 // or bl, al LONG $0x4610fac5; BYTE $0x28 // vmovss xmm0, dword [rsi + 40] LONG $0x422ef8c5; BYTE $0x28 // vucomiss xmm0, dword [rdx + 40] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x12244c88 // mov byte [rsp + 18], cl LONG $0x4610fac5; BYTE $0x2c // vmovss xmm0, dword [rsi + 44] - LONG $0xd1950f41 // setne r9b LONG $0x422ef8c5; BYTE $0x2c // vucomiss xmm0, dword [rdx + 44] - LONG $0xd3950f41 // setne r11b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x11244c88 // mov byte [rsp + 17], cl LONG $0x4610fac5; BYTE $0x30 // vmovss xmm0, dword [rsi + 48] LONG $0x422ef8c5; BYTE $0x30 // vucomiss xmm0, dword [rdx + 48] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x10244c88 // mov byte [rsp + 16], cl LONG $0x4610fac5; BYTE $0x34 // vmovss xmm0, dword [rsi + 52] - LONG $0xd2950f41 // setne r10b LONG $0x422ef8c5; BYTE $0x34 // vucomiss xmm0, dword [rdx + 52] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0f244c88 // mov byte [rsp + 15], cl LONG $0x4610fac5; BYTE $0x38 // vmovss xmm0, dword [rsi + 56] LONG $0x422ef8c5; BYTE $0x38 // vucomiss xmm0, dword [rdx + 56] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0c244c88 // mov byte [rsp + 12], cl LONG $0x4610fac5; BYTE $0x3c // vmovss xmm0, dword [rsi + 60] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] LONG $0x422ef8c5; BYTE $0x3c // vucomiss xmm0, dword [rdx + 60] - WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0b244c88 // mov byte [rsp + 11], cl LONG $0x4610fac5; BYTE $0x40 // vmovss xmm0, dword [rsi + 64] LONG $0x422ef8c5; BYTE $0x40 // vucomiss xmm0, dword [rdx + 64] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0e244c88 // mov byte [rsp + 14], cl LONG $0x4610fac5; BYTE $0x44 // vmovss xmm0, dword [rsi + 68] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] LONG $0x422ef8c5; BYTE $0x44 // vucomiss xmm0, dword [rdx + 68] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0a244c88 // mov byte [rsp + 10], cl LONG $0x4610fac5; BYTE $0x48 // vmovss xmm0, dword [rsi + 72] - LONG $0xd6950f41 // setne r14b LONG $0x422ef8c5; BYTE $0x48 // vucomiss xmm0, dword [rdx + 72] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x09244c88 // mov byte [rsp + 9], cl LONG $0x4610fac5; BYTE $0x4c // vmovss xmm0, dword [rsi + 76] - LONG $0xd4950f41 // setne r12b LONG $0x422ef8c5; BYTE $0x4c // vucomiss xmm0, dword [rdx + 76] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd3950f41 // setne r11b + WORD $0x0841; BYTE $0xc3 // or r11b, al LONG $0x4610fac5; BYTE $0x50 // vmovss xmm0, dword [rsi + 80] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] LONG $0x422ef8c5; BYTE $0x50 // vucomiss xmm0, dword [rdx + 80] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x08244c88 // mov byte [rsp + 8], cl LONG $0x4610fac5; BYTE $0x54 // vmovss xmm0, dword [rsi + 84] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] LONG $0x422ef8c5; BYTE $0x54 // vucomiss xmm0, dword [rdx + 84] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x07244c88 // mov byte [rsp + 7], cl LONG $0x4610fac5; BYTE $0x58 // vmovss xmm0, dword [rsi + 88] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] LONG $0x422ef8c5; BYTE $0x58 // vucomiss xmm0, dword [rdx + 88] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x05244c88 // mov byte [rsp + 5], cl LONG $0x4610fac5; BYTE $0x5c // vmovss xmm0, dword [rsi + 92] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] LONG $0x422ef8c5; BYTE $0x5c // vucomiss xmm0, dword [rdx + 92] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd2950f41 // setne r10b + WORD $0x0841; BYTE $0xc2 // or r10b, al LONG $0x4610fac5; BYTE $0x60 // vmovss xmm0, dword [rsi + 96] - LONG $0xd0950f41 // setne r8b LONG $0x422ef8c5; BYTE $0x60 // vucomiss xmm0, dword [rdx + 96] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x06244c88 // mov byte [rsp + 6], cl LONG $0x4610fac5; BYTE $0x64 // vmovss xmm0, dword [rsi + 100] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] LONG $0x422ef8c5; BYTE $0x64 // vucomiss xmm0, dword [rdx + 100] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl LONG $0x4610fac5; BYTE $0x68 // vmovss xmm0, dword [rsi + 104] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] LONG $0x422ef8c5; BYTE $0x68 // vucomiss xmm0, dword [rdx + 104] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f41 // setne r15b + WORD $0x0841; BYTE $0xc7 // or r15b, al LONG $0x4610fac5; BYTE $0x6c // vmovss xmm0, dword [rsi + 108] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] LONG $0x422ef8c5; BYTE $0x6c // vucomiss xmm0, dword [rdx + 108] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd6950f41 // setne r14b + WORD $0x0841; BYTE $0xc6 // or r14b, al LONG $0x4610fac5; BYTE $0x70 // vmovss xmm0, dword [rsi + 112] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0x422ef8c5; BYTE $0x70 // vucomiss xmm0, dword [rdx + 112] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x04244c88 // mov byte [rsp + 4], cl LONG $0x4610fac5; BYTE $0x74 // vmovss xmm0, dword [rsi + 116] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] LONG $0x422ef8c5; BYTE $0x74 // vucomiss xmm0, dword [rdx + 116] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl LONG $0x4610fac5; BYTE $0x78 // vmovss xmm0, dword [rsi + 120] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] LONG $0x422ef8c5; BYTE $0x78 // vucomiss xmm0, dword [rdx + 120] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd1950f41 // setne r9b + WORD $0x0841; BYTE $0xc1 // or r9b, al LONG $0x4610fac5; BYTE $0x7c // vmovss xmm0, dword [rsi + 124] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x80ee8348 // sub rsi, -128 LONG $0x422ef8c5; BYTE $0x7c // vucomiss xmm0, dword [rdx + 124] - LONG $0xd7950f40 // setne dil + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd0950f41 // setne r8b + WORD $0x0841; BYTE $0xc0 // or r8b, al + LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] WORD $0xc000 // add al, al - LONG $0x04244402 // add al, byte [rsp + 4] + LONG $0x15244402 // add al, byte [rsp + 21] + LONG $0x05e7c040 // shl dil, 5 LONG $0x06e5c041 // shl r13b, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0845; BYTE $0xef // or r15b, r13b - LONG $0x6cb60f44; WORD $0x0524 // movzx r13d, byte [rsp + 5] - LONG $0x02e5c041 // shl r13b, 2 - WORD $0x0841; BYTE $0xc5 // or r13b, al - WORD $0x8944; BYTE $0xe8 // mov eax, r13d - WORD $0xc900 // add cl, cl - LONG $0x08244c02 // add cl, byte [rsp + 8] + WORD $0x0841; BYTE $0xfd // or r13b, dil + WORD $0x8944; BYTE $0xef // mov edi, r13d + LONG $0x244cb60f; BYTE $0x14 // movzx ecx, byte [rsp + 20] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xc108 // or cl, al + WORD $0xd889 // mov eax, ebx + WORD $0xd800 // add al, bl + LONG $0x13244402 // add al, byte [rsp + 19] + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x2444b60f; BYTE $0x03 // movzx eax, byte [rsp + 3] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x03244488 // mov byte [rsp + 3], al + LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x17 // movzx eax, byte [rsp + 23] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + LONG $0x245cb60f; BYTE $0x11 // movzx ebx, byte [rsp + 17] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0840; BYTE $0xfb // or bl, dil LONG $0x6cb60f44; WORD $0x1624 // movzx r13d, byte [rsp + 22] - LONG $0x03e5c041 // shl r13b, 3 + LONG $0x04e5c041 // shl r13b, 4 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0x0844; BYTE $0xe9 // or cl, r13b - WORD $0x8941; BYTE $0xcd // mov r13d, ecx - LONG $0x03e3c041 // shl r11b, 3 - WORD $0x0845; BYTE $0xcb // or r11b, r9b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xe9 // or cl, r13b - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xda // or r10b, r11b - LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0844; BYTE $0xd0 // or al, r10b - LONG $0x4cb60f44; WORD $0x0624 // movzx r9d, byte [rsp + 6] - LONG $0x06e1c041 // shl r9b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xcb // or bl, r9b - WORD $0x0841; BYTE $0xcf // or r15b, cl - WORD $0xc308 // or bl, al - WORD $0x0045; BYTE $0xf6 // add r14b, r14b - LONG $0x24740244; BYTE $0x0e // add r14b, byte [rsp + 14] - LONG $0x02e4c041 // shl r12b, 2 - WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0a // movzx eax, byte [rsp + 10] + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc789 // mov edi, eax + LONG $0x245cb60f; BYTE $0x0f // movzx ebx, byte [rsp + 15] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x3e // mov byte [r14], r15b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x0a // movzx ebx, byte [rsp + 10] + WORD $0xdb00 // add bl, bl + LONG $0x0e245c02 // add bl, byte [rsp + 14] + LONG $0x244cb60f; BYTE $0x09 // movzx ecx, byte [rsp + 9] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xd908 // or cl, bl + LONG $0x03e3c041 // shl r11b, 3 + WORD $0x0841; BYTE $0xcb // or r11b, cl + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xdb // or bl, r11b + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x5cb60f44; WORD $0x0324 // movzx r11d, byte [rsp + 3] + WORD $0x0845; BYTE $0xeb // or r11b, r13b + LONG $0x6cb60f44; WORD $0x0724 // movzx r13d, byte [rsp + 7] + LONG $0x05e5c041 // shl r13b, 5 + LONG $0x244cb60f; BYTE $0x05 // movzx ecx, byte [rsp + 5] WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x0844; BYTE $0xe9 // or cl, r13b + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x07e2c041 // shl r10b, 7 + WORD $0x0841; BYTE $0xca // or r10b, cl + WORD $0x0841; BYTE $0xda // or r10b, bl + LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] + WORD $0xc900 // add cl, cl + LONG $0x06244c02 // add cl, byte [rsp + 6] + LONG $0x02e7c041 // shl r15b, 2 + WORD $0x0841; BYTE $0xcf // or r15b, cl + LONG $0x03e6c041 // shl r14b, 3 + WORD $0x0845; BYTE $0xfe // or r14b, r15b + LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0x0844; BYTE $0xf1 // or cl, r14b + LONG $0x241c8845 // mov byte [r12], r11b + LONG $0x245cb60f; BYTE $0x28 // movzx ebx, byte [rsp + 40] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e1c041 // shl r9b, 6 + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x24448841; BYTE $0x01 // mov byte [r12 + 1], al LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xc8 // or r8b, r9b WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl - WORD $0x0841; BYTE $0xc0 // or r8b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x14244402 // add al, byte [rsp + 20] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x13 // movzx ecx, byte [rsp + 19] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xc108 // or cl, al - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xc7 // or dil, al - WORD $0x0840; BYTE $0xcf // or dil, cl - LONG $0x02468845 // mov byte [r14 + 2], r8b - LONG $0x037e8841 // mov byte [r14 + 3], dil + LONG $0x24548845; BYTE $0x02 // mov byte [r12 + 2], r10b + LONG $0x24448845; BYTE $0x03 // mov byte [r12 + 3], r8b LONG $0x80c28148; WORD $0x0000; BYTE $0x00 // add rdx, 128 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff28 // add qword [rsp + 40], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 JNE LBB3_118 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] LBB3_120: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_122: + LONG $0x01498d4c // lea r9, [rcx + 1] LONG $0x0410fac5; BYTE $0x8e // vmovss xmm0, dword [rsi + 4*rcx] LONG $0x042ef8c5; BYTE $0x8a // vucomiss xmm0, dword [rdx + 4*rcx] - LONG $0x01418d4c // lea r8, [rcx + 1] - WORD $0x950f; BYTE $0xd3 // setne bl - WORD $0xdbf6 // neg bl + WORD $0x9a0f; BYTE $0xd3 // setp bl + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xd808 // or al, bl + WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] - WORD $0x3044; BYTE $0xcb // xor bl, r9b + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] + WORD $0x3044; BYTE $0xc0 // xor al, r8b WORD $0xe180; BYTE $0x07 // and cl, 7 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0xd820 // and al, bl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al - WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xc3 // xor bl, r8b + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl + WORD $0x894c; BYTE $0xc9 // mov rcx, r9 + WORD $0x394d; BYTE $0xce // cmp r14, r9 JNE LBB3_122 JMP LBB3_123 LBB3_57: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_61 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB3_59: WORD $0xb60f; BYTE $0x0e // movzx ecx, byte [rsi] @@ -18921,7 +19765,7 @@ LBB3_59: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -18930,49 +19774,49 @@ LBB3_59: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB3_59 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_61: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_65 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 + LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 LBB3_63: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0xb60f; BYTE $0x06 // movzx eax, byte [rsi] LONG $0x014eb60f // movzx ecx, byte [rsi + 1] WORD $0x023a // cmp al, byte [rdx] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] WORD $0x4a3a; BYTE $0x01 // cmp cl, byte [rdx + 1] - WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0x950f; BYTE $0xd3 // setne bl LONG $0x0246b60f // movzx eax, byte [rsi + 2] WORD $0x423a; BYTE $0x02 // cmp al, byte [rdx + 2] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] + LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] LONG $0x0346b60f // movzx eax, byte [rsi + 3] WORD $0x423a; BYTE $0x03 // cmp al, byte [rdx + 3] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] + LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] LONG $0x0446b60f // movzx eax, byte [rsi + 4] WORD $0x423a; BYTE $0x04 // cmp al, byte [rdx + 4] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] LONG $0x0546b60f // movzx eax, byte [rsi + 5] WORD $0x423a; BYTE $0x05 // cmp al, byte [rdx + 5] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + LONG $0x2454950f; BYTE $0x03 // setne byte [rsp + 3] LONG $0x0646b60f // movzx eax, byte [rsi + 6] WORD $0x423a; BYTE $0x06 // cmp al, byte [rdx + 6] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] + LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] LONG $0x0746b60f // movzx eax, byte [rsi + 7] WORD $0x423a; BYTE $0x07 // cmp al, byte [rdx + 7] LONG $0xd7950f41 // setne r15b LONG $0x0846b60f // movzx eax, byte [rsi + 8] WORD $0x423a; BYTE $0x08 // cmp al, byte [rdx + 8] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x0946b60f // movzx eax, byte [rsi + 9] WORD $0x423a; BYTE $0x09 // cmp al, byte [rdx + 9] LONG $0xd7950f40 // setne dil @@ -18987,16 +19831,16 @@ LBB3_63: LONG $0xd6950f41 // setne r14b LONG $0x0d46b60f // movzx eax, byte [rsi + 13] WORD $0x423a; BYTE $0x0d // cmp al, byte [rdx + 13] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] + LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] LONG $0x0e46b60f // movzx eax, byte [rsi + 14] WORD $0x423a; BYTE $0x0e // cmp al, byte [rdx + 14] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] + LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] LONG $0x0f46b60f // movzx eax, byte [rsi + 15] WORD $0x423a; BYTE $0x0f // cmp al, byte [rdx + 15] - WORD $0x950f; BYTE $0xd3 // setne bl + LONG $0xd0950f41 // setne r8b LONG $0x1046b60f // movzx eax, byte [rsi + 16] WORD $0x423a; BYTE $0x10 // cmp al, byte [rdx + 16] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] + LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] LONG $0x1146b60f // movzx eax, byte [rsi + 17] WORD $0x423a; BYTE $0x11 // cmp al, byte [rdx + 17] LONG $0xd4950f41 // setne r12b @@ -19005,144 +19849,144 @@ LBB3_63: LONG $0xd5950f41 // setne r13b LONG $0x1346b60f // movzx eax, byte [rsi + 19] WORD $0x423a; BYTE $0x13 // cmp al, byte [rdx + 19] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] + LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] LONG $0x1446b60f // movzx eax, byte [rsi + 20] WORD $0x423a; BYTE $0x14 // cmp al, byte [rdx + 20] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] LONG $0x1546b60f // movzx eax, byte [rsi + 21] WORD $0x423a; BYTE $0x15 // cmp al, byte [rdx + 21] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] + LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] LONG $0x1646b60f // movzx eax, byte [rsi + 22] WORD $0x423a; BYTE $0x16 // cmp al, byte [rdx + 22] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] LONG $0x1746b60f // movzx eax, byte [rsi + 23] WORD $0x423a; BYTE $0x17 // cmp al, byte [rdx + 23] LONG $0xd1950f41 // setne r9b LONG $0x1846b60f // movzx eax, byte [rsi + 24] WORD $0x423a; BYTE $0x18 // cmp al, byte [rdx + 24] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] + LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] LONG $0x1946b60f // movzx eax, byte [rsi + 25] WORD $0x423a; BYTE $0x19 // cmp al, byte [rdx + 25] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] + LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] LONG $0x1a46b60f // movzx eax, byte [rsi + 26] WORD $0x423a; BYTE $0x1a // cmp al, byte [rdx + 26] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] + LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] LONG $0x1b46b60f // movzx eax, byte [rsi + 27] WORD $0x423a; BYTE $0x1b // cmp al, byte [rdx + 27] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] + LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0x1c46b60f // movzx eax, byte [rsi + 28] WORD $0x423a; BYTE $0x1c // cmp al, byte [rdx + 28] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] LONG $0x1d46b60f // movzx eax, byte [rsi + 29] WORD $0x423a; BYTE $0x1d // cmp al, byte [rdx + 29] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] + LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x1e46b60f // movzx eax, byte [rsi + 30] WORD $0x423a; BYTE $0x1e // cmp al, byte [rdx + 30] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] + LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] LONG $0x1f46b60f // movzx eax, byte [rsi + 31] LONG $0x20c68348 // add rsi, 32 WORD $0x423a; BYTE $0x1f // cmp al, byte [rdx + 31] - LONG $0xd0950f41 // setne r8b - WORD $0xc900 // add cl, cl - LONG $0x28244c02 // add cl, byte [rsp + 40] - WORD $0xc889 // mov eax, ecx - LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xdb00 // add bl, bl + LONG $0x04245c02 // add bl, byte [rsp + 4] + WORD $0xd889 // mov eax, ebx + LONG $0x245cb60f; BYTE $0x05 // movzx ebx, byte [rsp + 5] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xcf // or r15b, cl - LONG $0x244cb60f; BYTE $0x14 // movzx ecx, byte [rsp + 20] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x245cb60f; BYTE $0x15 // movzx ebx, byte [rsp + 21] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx WORD $0x0040; BYTE $0xff // add dil, dil - LONG $0x247c0240; BYTE $0x07 // add dil, byte [rsp + 7] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x247c0240; BYTE $0x08 // add dil, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e2c041 // shl r10b, 2 WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0xcf89 // mov edi, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0xdf89 // mov edi, ebx LONG $0x03e3c041 // shl r11b, 3 WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0840; BYTE $0xf9 // or cl, dil + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xfb // or bl, dil LONG $0x04e6c041 // shl r14b, 4 WORD $0x0845; BYTE $0xde // or r14b, r11b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x247cb60f; BYTE $0x06 // movzx edi, byte [rsp + 6] + LONG $0x247cb60f; BYTE $0x07 // movzx edi, byte [rsp + 7] LONG $0x06e7c040 // shl dil, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0840; BYTE $0xfb // or bl, dil - WORD $0x0841; BYTE $0xcf // or r15b, cl - WORD $0xc308 // or bl, al + LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + WORD $0x0841; BYTE $0xdf // or r15b, bl + WORD $0x0841; BYTE $0xc0 // or r8b, al WORD $0x0045; BYTE $0xe4 // add r12b, r12b - LONG $0x24640244; BYTE $0x0d // add r12b, byte [rsp + 13] + LONG $0x24640244; BYTE $0x0e // add r12b, byte [rsp + 14] LONG $0x02e5c041 // shl r13b, 2 WORD $0x0845; BYTE $0xe5 // or r13b, r12b - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xe8 // or al, r13b - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0a // movzx eax, byte [rsp + 10] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x3e // mov byte [r14], r15b - LONG $0x244cb60f; BYTE $0x0b // movzx ecx, byte [rsp + 11] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x243c8845 // mov byte [r12], r15b + LONG $0x245cb60f; BYTE $0x0c // movzx ebx, byte [rsp + 12] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x24448845; BYTE $0x01 // mov byte [r12 + 1], r8b WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] + LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x12 // movzx ecx, byte [rsp + 18] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xc8 // or r8b, cl - WORD $0x0841; BYTE $0xc0 // or r8b, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x03468845 // mov byte [r14 + 3], r8b + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x13 // movzx ebx, byte [rsp + 19] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x20c28348 // add rdx, 32 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff28 // add qword [rsp + 40], -1 JNE LBB3_63 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] LBB3_65: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_67: @@ -19153,30 +19997,30 @@ LBB3_67: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB3_67 JMP LBB3_123 LBB3_90: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_94 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB3_92: WORD $0x0e8b // mov ecx, dword [rsi] @@ -19189,7 +20033,7 @@ LBB3_92: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -19198,49 +20042,49 @@ LBB3_92: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB3_92 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_94: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_98 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB3_96: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0x068b // mov eax, dword [rsi] WORD $0x4e8b; BYTE $0x04 // mov ecx, dword [rsi + 4] WORD $0x023b // cmp eax, dword [rdx] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] WORD $0x4a3b; BYTE $0x04 // cmp ecx, dword [rdx + 4] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] WORD $0x468b; BYTE $0x08 // mov eax, dword [rsi + 8] WORD $0x423b; BYTE $0x08 // cmp eax, dword [rdx + 8] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] + LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] WORD $0x468b; BYTE $0x0c // mov eax, dword [rsi + 12] WORD $0x423b; BYTE $0x0c // cmp eax, dword [rdx + 12] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] + LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] WORD $0x468b; BYTE $0x10 // mov eax, dword [rsi + 16] WORD $0x423b; BYTE $0x10 // cmp eax, dword [rdx + 16] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] WORD $0x468b; BYTE $0x14 // mov eax, dword [rsi + 20] WORD $0x423b; BYTE $0x14 // cmp eax, dword [rdx + 20] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + LONG $0x2454950f; BYTE $0x03 // setne byte [rsp + 3] WORD $0x468b; BYTE $0x18 // mov eax, dword [rsi + 24] WORD $0x423b; BYTE $0x18 // cmp eax, dword [rdx + 24] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] + LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] WORD $0x468b; BYTE $0x1c // mov eax, dword [rsi + 28] WORD $0x423b; BYTE $0x1c // cmp eax, dword [rdx + 28] LONG $0xd5950f41 // setne r13b WORD $0x468b; BYTE $0x20 // mov eax, dword [rsi + 32] WORD $0x423b; BYTE $0x20 // cmp eax, dword [rdx + 32] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] WORD $0x468b; BYTE $0x24 // mov eax, dword [rsi + 36] WORD $0x423b; BYTE $0x24 // cmp eax, dword [rdx + 36] LONG $0xd0950f41 // setne r8b @@ -19252,165 +20096,165 @@ LBB3_96: LONG $0xd7950f41 // setne r15b WORD $0x468b; BYTE $0x30 // mov eax, dword [rsi + 48] WORD $0x423b; BYTE $0x30 // cmp eax, dword [rdx + 48] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] + LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] WORD $0x468b; BYTE $0x34 // mov eax, dword [rsi + 52] WORD $0x423b; BYTE $0x34 // cmp eax, dword [rdx + 52] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] + LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] WORD $0x468b; BYTE $0x38 // mov eax, dword [rsi + 56] WORD $0x423b; BYTE $0x38 // cmp eax, dword [rdx + 56] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] WORD $0x468b; BYTE $0x3c // mov eax, dword [rsi + 60] WORD $0x423b; BYTE $0x3c // cmp eax, dword [rdx + 60] - WORD $0x950f; BYTE $0xd3 // setne bl + LONG $0xd7950f40 // setne dil WORD $0x468b; BYTE $0x40 // mov eax, dword [rsi + 64] - WORD $0x4e8b; BYTE $0x44 // mov ecx, dword [rsi + 68] + WORD $0x5e8b; BYTE $0x44 // mov ebx, dword [rsi + 68] WORD $0x423b; BYTE $0x40 // cmp eax, dword [rdx + 64] WORD $0x468b; BYTE $0x48 // mov eax, dword [rsi + 72] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] - WORD $0x4a3b; BYTE $0x44 // cmp ecx, dword [rdx + 68] - WORD $0x4e8b; BYTE $0x4c // mov ecx, dword [rsi + 76] + LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + WORD $0x5a3b; BYTE $0x44 // cmp ebx, dword [rdx + 68] + WORD $0x5e8b; BYTE $0x4c // mov ebx, dword [rsi + 76] LONG $0xd2950f41 // setne r10b WORD $0x423b; BYTE $0x48 // cmp eax, dword [rdx + 72] WORD $0x468b; BYTE $0x50 // mov eax, dword [rsi + 80] LONG $0xd6950f41 // setne r14b - WORD $0x4a3b; BYTE $0x4c // cmp ecx, dword [rdx + 76] - WORD $0x4e8b; BYTE $0x54 // mov ecx, dword [rsi + 84] + WORD $0x5a3b; BYTE $0x4c // cmp ebx, dword [rdx + 76] + WORD $0x5e8b; BYTE $0x54 // mov ebx, dword [rsi + 84] LONG $0xd4950f41 // setne r12b WORD $0x423b; BYTE $0x50 // cmp eax, dword [rdx + 80] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] - WORD $0x4a3b; BYTE $0x54 // cmp ecx, dword [rdx + 84] + LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + WORD $0x5a3b; BYTE $0x54 // cmp ebx, dword [rdx + 84] WORD $0x468b; BYTE $0x58 // mov eax, dword [rsi + 88] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] WORD $0x423b; BYTE $0x58 // cmp eax, dword [rdx + 88] WORD $0x468b; BYTE $0x5c // mov eax, dword [rsi + 92] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] + LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] WORD $0x423b; BYTE $0x5c // cmp eax, dword [rdx + 92] WORD $0x468b; BYTE $0x60 // mov eax, dword [rsi + 96] LONG $0xd1950f41 // setne r9b WORD $0x423b; BYTE $0x60 // cmp eax, dword [rdx + 96] WORD $0x468b; BYTE $0x64 // mov eax, dword [rsi + 100] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] + LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] WORD $0x423b; BYTE $0x64 // cmp eax, dword [rdx + 100] WORD $0x468b; BYTE $0x68 // mov eax, dword [rsi + 104] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] + LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] WORD $0x423b; BYTE $0x68 // cmp eax, dword [rdx + 104] WORD $0x468b; BYTE $0x6c // mov eax, dword [rsi + 108] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] + LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] WORD $0x423b; BYTE $0x6c // cmp eax, dword [rdx + 108] WORD $0x468b; BYTE $0x70 // mov eax, dword [rsi + 112] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] + LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] WORD $0x423b; BYTE $0x70 // cmp eax, dword [rdx + 112] WORD $0x468b; BYTE $0x74 // mov eax, dword [rsi + 116] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] WORD $0x423b; BYTE $0x74 // cmp eax, dword [rdx + 116] WORD $0x468b; BYTE $0x78 // mov eax, dword [rsi + 120] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] + LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] WORD $0x423b; BYTE $0x78 // cmp eax, dword [rdx + 120] WORD $0x468b; BYTE $0x7c // mov eax, dword [rsi + 124] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] + LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x80ee8348 // sub rsi, -128 WORD $0x423b; BYTE $0x7c // cmp eax, dword [rdx + 124] - LONG $0xd7950f40 // setne dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x950f; BYTE $0xd1 // setne cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x80c28148; WORD $0x0000; BYTE $0x00 // add rdx, 128 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB3_96 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB3_98: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_100: @@ -19421,16 +20265,16 @@ LBB3_100: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB3_100 LBB3_123: @@ -19492,7 +20336,7 @@ TEXT ·_comparison_not_equal_arr_scalar_avx2(SB), $1320-48 WORD $0xff83; BYTE $0x05 // cmp edi, 5 JE LBB4_56 WORD $0xff83; BYTE $0x06 // cmp edi, 6 - JNE LBB4_159 + JNE LBB4_165 WORD $0x8b44; BYTE $0x2a // mov r13d, dword [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -19542,7 +20386,7 @@ LBB4_11: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d QUAD $0x000000902494950f // setne byte [rsp + 144] LONG $0x046e3944 // cmp dword [rsi + 4], r13d - LONG $0xd7950f40 // setne dil + LONG $0xd2950f41 // setne r10b LONG $0x086e3944 // cmp dword [rsi + 8], r13d LONG $0xd6950f41 // setne r14b LONG $0x0c6e3944 // cmp dword [rsi + 12], r13d @@ -19558,11 +20402,11 @@ LBB4_11: LONG $0x206e3944 // cmp dword [rsi + 32], r13d QUAD $0x000000a02494950f // setne byte [rsp + 160] LONG $0x246e3944 // cmp dword [rsi + 36], r13d - WORD $0x950f; BYTE $0xd2 // setne dl + LONG $0xd7950f40 // setne dil LONG $0x286e3944 // cmp dword [rsi + 40], r13d - LONG $0xd1950f41 // setne r9b + LONG $0xd0950f41 // setne r8b LONG $0x2c6e3944 // cmp dword [rsi + 44], r13d - LONG $0xd2950f41 // setne r10b + LONG $0xd1950f41 // setne r9b LONG $0x306e3944 // cmp dword [rsi + 48], r13d LONG $0xd3950f41 // setne r11b LONG $0x346e3944 // cmp dword [rsi + 52], r13d @@ -19602,67 +20446,68 @@ LBB4_11: LONG $0x786e3944 // cmp dword [rsi + 120], r13d LONG $0x2454950f; BYTE $0x1c // setne byte [rsp + 28] LONG $0x7c6e3944 // cmp dword [rsi + 124], r13d - LONG $0xd0950f41 // setne r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009024bc0240 // add dil, byte [rsp + 144] + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009024940244 // add r10b, byte [rsp + 144] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0xa0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 160] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + QUAD $0x000000a024bc0240 // add dil, byte [rsp + 160] QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b LONG $0x247cb60f; BYTE $0x70 // movzx edi, byte [rsp + 112] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xd200 // add dl, dl - LONG $0x50245402 // add dl, byte [rsp + 80] - WORD $0xd789 // mov edi, edx - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x0000011024948b48 // mov rdx, qword [rsp + 272] - WORD $0x1a88 // mov byte [rdx], bl + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xc000 // add al, al + LONG $0x50244402 // add al, byte [rsp + 80] + WORD $0xc789 // mov edi, eax + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] + WORD $0x1888 // mov byte [rax], bl LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl + WORD $0x4888; BYTE $0x01 // mov byte [rax + 1], cl WORD $0x0841; BYTE $0xff // or r15b, dil LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] WORD $0xc900 // add cl, cl @@ -19685,14 +20530,14 @@ LBB4_11: WORD $0xd908 // or cl, bl LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xda08 // or dl, bl + WORD $0xca08 // or dl, cl + LONG $0x02788844 // mov byte [rax + 2], r15b + WORD $0x5088; BYTE $0x03 // mov byte [rax + 3], dl LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 - LONG $0x04c28348 // add rdx, 4 - QUAD $0x0000011024948948 // mov qword [rsp + 272], rdx + LONG $0x04c08348 // add rax, 4 + QUAD $0x0000011024848948 // mov qword [rsp + 272], rax QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 JNE LBB4_11 QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] @@ -19701,7 +20546,7 @@ LBB4_11: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 JL LBB4_101 - JMP LBB4_159 + JMP LBB4_165 LBB4_13: WORD $0xff83; BYTE $0x08 // cmp edi, 8 @@ -19711,7 +20556,7 @@ LBB4_13: WORD $0xff83; BYTE $0x0b // cmp edi, 11 JE LBB4_72 WORD $0xff83; BYTE $0x0c // cmp edi, 12 - JNE LBB4_159 + JNE LBB4_165 LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 LONG $0xfa490f4d // cmovns r15, r10 @@ -19727,7 +20572,9 @@ LBB4_13: LBB4_19: LONG $0x062ef9c5 // vucomisd xmm0, qword [rsi] LONG $0x08768d48 // lea rsi, [rsi + 8] + WORD $0x9a0f; BYTE $0xd1 // setp cl WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xca08 // or dl, cl WORD $0xdaf6 // neg dl LONG $0x07788d48 // lea rdi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax @@ -19753,178 +20600,263 @@ LBB4_21: LONG $0x20fa8349 // cmp r10, 32 JL LBB4_104 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 + QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 - QUAD $0x0000009024bc894c // mov qword [rsp + 144], r15 QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 LBB4_23: LONG $0x062ef9c5 // vucomisd xmm0, qword [rsi] - QUAD $0x000000982494950f // setne byte [rsp + 152] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl LONG $0x462ef9c5; BYTE $0x08 // vucomisd xmm0, qword [rsi + 8] - LONG $0xd1950f41 // setne r9b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xc308 // or bl, al LONG $0x462ef9c5; BYTE $0x10 // vucomisd xmm0, qword [rsi + 16] - LONG $0xd6950f41 // setne r14b - LONG $0x462ef9c5; BYTE $0x18 // vucomisd xmm0, qword [rsi + 24] + WORD $0x9a0f; BYTE $0xd0 // setp al LONG $0xd5950f41 // setne r13b + WORD $0x0841; BYTE $0xc5 // or r13b, al + LONG $0x462ef9c5; BYTE $0x18 // vucomisd xmm0, qword [rsi + 24] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x20248c88; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 288], cl LONG $0x462ef9c5; BYTE $0x20 // vucomisd xmm0, qword [rsi + 32] - QUAD $0x000000882494950f // setne byte [rsp + 136] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x40248c88; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 320], cl LONG $0x462ef9c5; BYTE $0x28 // vucomisd xmm0, qword [rsi + 40] - LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f40 // setne dil + WORD $0x0840; BYTE $0xc7 // or dil, al LONG $0x462ef9c5; BYTE $0x30 // vucomisd xmm0, qword [rsi + 48] - WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x30244c88 // mov byte [rsp + 48], cl LONG $0x462ef9c5; BYTE $0x38 // vucomisd xmm0, qword [rsi + 56] - WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x1c244c88 // mov byte [rsp + 28], cl LONG $0x462ef9c5; BYTE $0x40 // vucomisd xmm0, qword [rsi + 64] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x38244c88 // mov byte [rsp + 56], cl LONG $0x462ef9c5; BYTE $0x48 // vucomisd xmm0, qword [rsi + 72] - WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl LONG $0x462ef9c5; BYTE $0x50 // vucomisd xmm0, qword [rsi + 80] - LONG $0xd7950f40 // setne dil + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x40244c88 // mov byte [rsp + 64], cl LONG $0x462ef9c5; BYTE $0x58 // vucomisd xmm0, qword [rsi + 88] - LONG $0xd2950f41 // setne r10b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x68244c88 // mov byte [rsp + 104], cl LONG $0x462ef9c5; BYTE $0x60 // vucomisd xmm0, qword [rsi + 96] - LONG $0xd3950f41 // setne r11b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x60244c88 // mov byte [rsp + 96], cl LONG $0x462ef9c5; BYTE $0x68 // vucomisd xmm0, qword [rsi + 104] - LONG $0xd4950f41 // setne r12b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x58244c88 // mov byte [rsp + 88], cl LONG $0x462ef9c5; BYTE $0x70 // vucomisd xmm0, qword [rsi + 112] - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xc208 // or dl, al LONG $0x462ef9c5; BYTE $0x78 // vucomisd xmm0, qword [rsi + 120] + WORD $0x9a0f; BYTE $0xd0 // setp al WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x50244c88 // mov byte [rsp + 80], cl QUAD $0x00000080862ef9c5 // vucomisd xmm0, qword [rsi + 128] - LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x48244c88 // mov byte [rsp + 72], cl QUAD $0x00000088862ef9c5 // vucomisd xmm0, qword [rsi + 136] - QUAD $0x000000a02494950f // setne byte [rsp + 160] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x88248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 136], cl QUAD $0x00000090862ef9c5 // vucomisd xmm0, qword [rsi + 144] - QUAD $0x000000802494950f // setne byte [rsp + 128] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al QUAD $0x00000098862ef9c5 // vucomisd xmm0, qword [rsi + 152] - LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] + LONG $0xd09a0f41 // setp r8b + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x0844; BYTE $0xc0 // or al, r8b + LONG $0x80248488; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 128], al QUAD $0x000000a0862ef9c5 // vucomisd xmm0, qword [rsi + 160] - LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] + LONG $0xd09a0f41 // setp r8b + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x0844; BYTE $0xc0 // or al, r8b + LONG $0x78244488 // mov byte [rsp + 120], al QUAD $0x000000a8862ef9c5 // vucomisd xmm0, qword [rsi + 168] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] + LONG $0xd09a0f41 // setp r8b + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x0844; BYTE $0xc0 // or al, r8b + LONG $0xa0248488; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 160], al QUAD $0x000000b0862ef9c5 // vucomisd xmm0, qword [rsi + 176] - LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd4950f41 // setne r12b + WORD $0x0841; BYTE $0xc4 // or r12b, al QUAD $0x000000b8862ef9c5 // vucomisd xmm0, qword [rsi + 184] - LONG $0xd7950f41 // setne r15b + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd2950f41 // setne r10b + WORD $0x0841; BYTE $0xc2 // or r10b, al QUAD $0x000000c0862ef9c5 // vucomisd xmm0, qword [rsi + 192] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0xd09a0f41 // setp r8b + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x0844; BYTE $0xc0 // or al, r8b + LONG $0x70244488 // mov byte [rsp + 112], al QUAD $0x000000c8862ef9c5 // vucomisd xmm0, qword [rsi + 200] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f41 // setne r15b + WORD $0x0841; BYTE $0xc7 // or r15b, al QUAD $0x000000d0862ef9c5 // vucomisd xmm0, qword [rsi + 208] - LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd6950f41 // setne r14b + WORD $0x0841; BYTE $0xc6 // or r14b, al QUAD $0x000000d8862ef9c5 // vucomisd xmm0, qword [rsi + 216] - LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd3950f41 // setne r11b + WORD $0x0841; BYTE $0xc3 // or r11b, al QUAD $0x000000e0862ef9c5 // vucomisd xmm0, qword [rsi + 224] - QUAD $0x000001202494950f // setne byte [rsp + 288] + LONG $0xd09a0f41 // setp r8b + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x0844; BYTE $0xc0 // or al, r8b + LONG $0x98248488; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 152], al QUAD $0x000000e8862ef9c5 // vucomisd xmm0, qword [rsi + 232] - QUAD $0x000001402494950f // setne byte [rsp + 320] + LONG $0xd09a0f41 // setp r8b + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x0844; BYTE $0xc0 // or al, r8b + LONG $0x90248488; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 144], al QUAD $0x000000f0862ef9c5 // vucomisd xmm0, qword [rsi + 240] - LONG $0x2454950f; BYTE $0x1c // setne byte [rsp + 28] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd1950f41 // setne r9b + WORD $0x0841; BYTE $0xc1 // or r9b, al QUAD $0x000000f8862ef9c5 // vucomisd xmm0, qword [rsi + 248] + WORD $0x9a0f; BYTE $0xd0 // setp al LONG $0xd0950f41 // setne r8b - WORD $0x0045; BYTE $0xc9 // add r9b, r9b - QUAD $0x00000098248c0244 // add r9b, byte [rsp + 152] + WORD $0x0841; BYTE $0xc0 // or r8b, al + WORD $0xdb00 // add bl, bl + LONG $0x20245c02 // add bl, byte [rsp + 32] + LONG $0x05e7c040 // shl dil, 5 + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0845; BYTE $0xce // or r14b, r9b - WORD $0xd200 // add dl, dl - LONG $0x70245402 // add dl, byte [rsp + 112] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xf5 // or r13b, r14b - LONG $0x02e7c040 // shl dil, 2 - WORD $0x0840; BYTE $0xd7 // or dil, dl - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0844; BYTE $0xea // or dl, r13b - WORD $0x8941; BYTE $0xd1 // mov r9d, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0844; BYTE $0xca // or dl, r9b - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b - LONG $0x247cb60f; BYTE $0x78 // movzx edi, byte [rsp + 120] - LONG $0x06e7c040 // shl dil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl - WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x02e5c041 // shl r13b, 2 + WORD $0x0841; BYTE $0xdd // or r13b, bl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x50244402 // add al, byte [rsp + 80] + LONG $0x38244402 // add al, byte [rsp + 56] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x1c // movzx eax, byte [rsp + 28] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x1c244488 // mov byte [rsp + 28], al + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc789 // mov edi, eax + QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xe8 // or al, r13b + LONG $0x245cb60f; BYTE $0x60 // movzx ebx, byte [rsp + 96] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0840; BYTE $0xfb // or bl, dil + LONG $0x247cb60f; BYTE $0x58 // movzx edi, byte [rsp + 88] + LONG $0x05e7c040 // shl dil, 5 + WORD $0xe2c0; BYTE $0x06 // shl dl, 6 + WORD $0x0840; BYTE $0xfa // or dl, dil + LONG $0x6cb60f44; WORD $0x5024 // movzx r13d, byte [rsp + 80] + LONG $0x07e5c041 // shl r13b, 7 + WORD $0x0841; BYTE $0xd5 // or r13b, dl + QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] + WORD $0xd200 // add dl, dl + LONG $0x48245402 // add dl, byte [rsp + 72] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xd108 // or cl, dl QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] + WORD $0xca08 // or dl, cl + WORD $0xd189 // mov ecx, edx + LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x0000011024948b48 // mov rdx, qword [rsp + 272] - WORD $0x1a88 // mov byte [rdx], bl - LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl - WORD $0x0841; BYTE $0xff // or r15b, dil - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000140248cb60f // movzx ecx, byte [rsp + 320] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd908 // or cl, bl - LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xca08 // or dl, cl + LONG $0x244cb60f; BYTE $0x1c // movzx ecx, byte [rsp + 28] + WORD $0xc108 // or cl, al + QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + LONG $0x06e4c041 // shl r12b, 6 + WORD $0x0841; BYTE $0xc4 // or r12b, al + WORD $0x0841; BYTE $0xdd // or r13b, bl + LONG $0x07e2c041 // shl r10b, 7 + WORD $0x0845; BYTE $0xe2 // or r10b, r12b + WORD $0x0841; BYTE $0xd2 // or r10b, dl + WORD $0x0045; BYTE $0xff // add r15b, r15b + LONG $0x247c0244; BYTE $0x70 // add r15b, byte [rsp + 112] + LONG $0x02e6c041 // shl r14b, 2 + WORD $0x0845; BYTE $0xfe // or r14b, r15b + LONG $0x03e3c041 // shl r11b, 3 + WORD $0x0845; BYTE $0xf3 // or r11b, r14b + QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd8 // or al, r11b + WORD $0xc389 // mov ebx, eax + QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] + WORD $0x0888 // mov byte [rax], cl + QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] + WORD $0xe2c0; BYTE $0x05 // shl dl, 5 + LONG $0x06e1c041 // shl r9b, 6 + WORD $0x0841; BYTE $0xd1 // or r9b, dl + LONG $0x01688844 // mov byte [rax + 1], r13b LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xc8 // or r8b, r9b WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b + LONG $0x02508844 // mov byte [rax + 2], r10b + LONG $0x03408844 // mov byte [rax + 3], r8b LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 - LONG $0x04c28348 // add rdx, 4 - QUAD $0x0000011024948948 // mov qword [rsp + 272], rdx - QUAD $0x0000009024848348; BYTE $0xff // add qword [rsp + 144], -1 + LONG $0x04c08348 // add rax, 4 + QUAD $0x0000011024848948 // mov qword [rsp + 272], rax + QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 JNE LBB4_23 QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000a824bc8b4c // mov r15, qword [rsp + 168] + QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 JL LBB4_105 - JMP LBB4_159 + JMP LBB4_165 LBB4_25: WORD $0xff83; BYTE $0x02 // cmp edi, 2 JE LBB4_80 WORD $0xff83; BYTE $0x03 // cmp edi, 3 - JNE LBB4_159 + JNE LBB4_165 WORD $0x8a44; BYTE $0x32 // mov r14b, byte [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -19975,11 +20907,11 @@ LBB4_31: LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi WORD $0x3949; BYTE $0xc5 // cmp r13, rax - JAE LBB4_165 + JAE LBB4_166 QUAD $0x00000000bd048d4a // lea rax, [4*r15] WORD $0x014c; BYTE $0xe8 // add rax, r13 WORD $0x3948; BYTE $0xc6 // cmp rsi, rax - JAE LBB4_165 + JAE LBB4_166 LBB4_34: WORD $0xc031 // xor eax, eax @@ -20164,7 +21096,7 @@ LBB4_38: WORD $0xff83; BYTE $0x07 // cmp edi, 7 JE LBB4_92 WORD $0xff83; BYTE $0x08 // cmp edi, 8 - JNE LBB4_159 + JNE LBB4_165 WORD $0x8b4c; BYTE $0x2a // mov r13, qword [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -20214,7 +21146,7 @@ LBB4_46: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 QUAD $0x000000902494950f // setne byte [rsp + 144] LONG $0x086e394c // cmp qword [rsi + 8], r13 - LONG $0xd7950f40 // setne dil + LONG $0xd2950f41 // setne r10b LONG $0x106e394c // cmp qword [rsi + 16], r13 LONG $0xd6950f41 // setne r14b LONG $0x186e394c // cmp qword [rsi + 24], r13 @@ -20230,11 +21162,11 @@ LBB4_46: LONG $0x406e394c // cmp qword [rsi + 64], r13 QUAD $0x000000a02494950f // setne byte [rsp + 160] LONG $0x486e394c // cmp qword [rsi + 72], r13 - WORD $0x950f; BYTE $0xd2 // setne dl + LONG $0xd7950f40 // setne dil LONG $0x506e394c // cmp qword [rsi + 80], r13 - LONG $0xd1950f41 // setne r9b + LONG $0xd0950f41 // setne r8b LONG $0x586e394c // cmp qword [rsi + 88], r13 - LONG $0xd2950f41 // setne r10b + LONG $0xd1950f41 // setne r9b LONG $0x606e394c // cmp qword [rsi + 96], r13 LONG $0xd3950f41 // setne r11b LONG $0x686e394c // cmp qword [rsi + 104], r13 @@ -20274,32 +21206,33 @@ LBB4_46: LONG $0xf0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 240], r13 LONG $0x2454950f; BYTE $0x1c // setne byte [rsp + 28] LONG $0xf8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 248], r13 - LONG $0xd0950f41 // setne r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009024bc0240 // add dil, byte [rsp + 144] + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009024940244 // add r10b, byte [rsp + 144] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0xa0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 160] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + QUAD $0x000000a024bc0240 // add dil, byte [rsp + 160] QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b QUAD $0x00000110249c8b4c // mov r11, qword [rsp + 272] @@ -20307,60 +21240,60 @@ LBB4_46: LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xd200 // add dl, dl - LONG $0x50245402 // add dl, byte [rsp + 80] - WORD $0xd789 // mov edi, edx - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xc000 // add al, al + LONG $0x50244402 // add al, byte [rsp + 80] + WORD $0xc789 // mov edi, eax + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil WORD $0x8841; BYTE $0x1b // mov byte [r11], bl LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl LONG $0x014b8841 // mov byte [r11 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - QUAD $0x00000140248cb60f // movzx ecx, byte [rsp + 320] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x1c // movzx edx, byte [rsp + 28] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0841; BYTE $0xc7 // or r15b, al + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0xc000 // add al, al + LONG $0x20244402 // add al, byte [rsp + 32] + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xc808 // or al, cl + LONG $0x244cb60f; BYTE $0x1c // movzx ecx, byte [rsp + 28] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xca08 // or dl, cl + WORD $0xc208 // or dl, al LONG $0x027b8845 // mov byte [r11 + 2], r15b - LONG $0x03438845 // mov byte [r11 + 3], r8b + LONG $0x03538841 // mov byte [r11 + 3], dl LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 LONG $0x04c38349 // add r11, 4 QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 @@ -20371,7 +21304,7 @@ LBB4_46: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 JL LBB4_108 - JMP LBB4_159 + JMP LBB4_165 LBB4_48: LONG $0x2ab70f44 // movzx r13d, word [rdx] @@ -20414,387 +21347,389 @@ LBB4_52: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 JL LBB4_111 - QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 - QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 - QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 - -LBB4_54: - LONG $0x2e394466 // cmp word [rsi], r13w - WORD $0x950f; BYTE $0xd0 // setne al - LONG $0x6e394466; BYTE $0x02 // cmp word [rsi + 2], r13w - LONG $0xd7950f40 // setne dil - LONG $0x6e394466; BYTE $0x04 // cmp word [rsi + 4], r13w - LONG $0xd6950f41 // setne r14b - LONG $0x6e394466; BYTE $0x06 // cmp word [rsi + 6], r13w - QUAD $0x000000982494950f // setne byte [rsp + 152] - LONG $0x6e394466; BYTE $0x08 // cmp word [rsi + 8], r13w - QUAD $0x000000882494950f // setne byte [rsp + 136] - LONG $0x6e394466; BYTE $0x0a // cmp word [rsi + 10], r13w - LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] - LONG $0x6e394466; BYTE $0x0c // cmp word [rsi + 12], r13w - QUAD $0x000000902494950f // setne byte [rsp + 144] - LONG $0x6e394466; BYTE $0x0e // cmp word [rsi + 14], r13w - WORD $0x950f; BYTE $0xd3 // setne bl - LONG $0x6e394466; BYTE $0x10 // cmp word [rsi + 16], r13w - QUAD $0x000000a02494950f // setne byte [rsp + 160] - LONG $0x6e394466; BYTE $0x12 // cmp word [rsi + 18], r13w - WORD $0x950f; BYTE $0xd2 // setne dl - LONG $0x6e394466; BYTE $0x14 // cmp word [rsi + 20], r13w - LONG $0xd1950f41 // setne r9b - LONG $0x6e394466; BYTE $0x16 // cmp word [rsi + 22], r13w - LONG $0xd2950f41 // setne r10b - LONG $0x6e394466; BYTE $0x18 // cmp word [rsi + 24], r13w - LONG $0xd3950f41 // setne r11b - LONG $0x6e394466; BYTE $0x1a // cmp word [rsi + 26], r13w - LONG $0xd4950f41 // setne r12b - LONG $0x6e394466; BYTE $0x1c // cmp word [rsi + 28], r13w - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] - LONG $0x6e394466; BYTE $0x1e // cmp word [rsi + 30], r13w - WORD $0x950f; BYTE $0xd1 // setne cl - LONG $0x6e394466; BYTE $0x20 // cmp word [rsi + 32], r13w - LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] - LONG $0x6e394466; BYTE $0x22 // cmp word [rsi + 34], r13w - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] - LONG $0x6e394466; BYTE $0x24 // cmp word [rsi + 36], r13w - QUAD $0x000000802494950f // setne byte [rsp + 128] - LONG $0x6e394466; BYTE $0x26 // cmp word [rsi + 38], r13w - LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] - LONG $0x6e394466; BYTE $0x28 // cmp word [rsi + 40], r13w - LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] - LONG $0x6e394466; BYTE $0x2a // cmp word [rsi + 42], r13w - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] - LONG $0x6e394466; BYTE $0x2c // cmp word [rsi + 44], r13w - LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] - LONG $0x6e394466; BYTE $0x2e // cmp word [rsi + 46], r13w - LONG $0xd7950f41 // setne r15b - LONG $0x6e394466; BYTE $0x30 // cmp word [rsi + 48], r13w - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] - LONG $0x6e394466; BYTE $0x32 // cmp word [rsi + 50], r13w - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] - LONG $0x6e394466; BYTE $0x34 // cmp word [rsi + 52], r13w - LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] - LONG $0x6e394466; BYTE $0x36 // cmp word [rsi + 54], r13w - LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] - LONG $0x6e394466; BYTE $0x38 // cmp word [rsi + 56], r13w - QUAD $0x000001202494950f // setne byte [rsp + 288] - LONG $0x6e394466; BYTE $0x3a // cmp word [rsi + 58], r13w - QUAD $0x000001402494950f // setne byte [rsp + 320] - LONG $0x6e394466; BYTE $0x3c // cmp word [rsi + 60], r13w - LONG $0x2454950f; BYTE $0x1c // setne byte [rsp + 28] - LONG $0x6e394466; BYTE $0x3e // cmp word [rsi + 62], r13w - LONG $0xd0950f41 // setne r8b - WORD $0x0040; BYTE $0xff // add dil, dil - WORD $0x0840; BYTE $0xc7 // or dil, al - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0xa0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 160] - QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b - LONG $0x247cb60f; BYTE $0x70 // movzx edi, byte [rsp + 112] - LONG $0x06e7c040 // shl dil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xd200 // add dl, dl - LONG $0x50245402 // add dl, byte [rsp + 80] - WORD $0xd789 // mov edi, edx - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x0000011024948b48 // mov rdx, qword [rsp + 272] - WORD $0x1a88 // mov byte [rdx], bl - LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl - WORD $0x0841; BYTE $0xff // or r15b, dil - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000140248cb60f // movzx ecx, byte [rsp + 320] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd908 // or cl, bl - LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b - LONG $0x40c68348 // add rsi, 64 - LONG $0x04c28348 // add rdx, 4 - QUAD $0x0000011024948948 // mov qword [rsp + 272], rdx - QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 - JNE LBB4_54 - QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] - QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] - LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JL LBB4_112 - JMP LBB4_159 - -LBB4_56: - LONG $0x2ab70f44 // movzx r13d, word [rdx] - LONG $0x1f7a8d4d // lea r15, [r10 + 31] - WORD $0x854d; BYTE $0xd2 // test r10, r10 - LONG $0xfa490f4d // cmovns r15, r10 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB4_60 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d - -LBB4_58: - LONG $0x2e394466 // cmp word [rsi], r13w - LONG $0x02768d48 // lea rsi, [rsi + 2] - WORD $0x950f; BYTE $0xd2 // setne dl - WORD $0xdaf6 // neg dl - LONG $0x07588d48 // lea rbx, [rax + 7] - WORD $0x8548; BYTE $0xc0 // test rax, rax - LONG $0xd8490f48 // cmovns rbx, rax - LONG $0x03fbc148 // sar rbx, 3 - LONG $0x04b60f45; BYTE $0x1b // movzx r8d, byte [r11 + rbx] - WORD $0x3044; BYTE $0xc2 // xor dl, r8b - LONG $0x00dd3c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rbx] - WORD $0xc189 // mov ecx, eax - WORD $0xf929 // sub ecx, edi - LONG $0x000001bf; BYTE $0x00 // mov edi, 1 - WORD $0xe7d3 // shl edi, cl - WORD $0x2040; BYTE $0xd7 // and dil, dl - WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x1b3c8841 // mov byte [r11 + rbx], dil - LONG $0x01c08348 // add rax, 1 - LONG $0x08f88348 // cmp rax, 8 - JNE LBB4_58 - LONG $0x01c38349 // add r11, 1 - -LBB4_60: - LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fa8349 // cmp r10, 32 - JL LBB4_115 - QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 - QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 - QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 - -LBB4_62: - LONG $0x2e394466 // cmp word [rsi], r13w - QUAD $0x000000902494950f // setne byte [rsp + 144] - LONG $0x6e394466; BYTE $0x02 // cmp word [rsi + 2], r13w - LONG $0xd7950f40 // setne dil - LONG $0x6e394466; BYTE $0x04 // cmp word [rsi + 4], r13w - LONG $0xd6950f41 // setne r14b - LONG $0x6e394466; BYTE $0x06 // cmp word [rsi + 6], r13w - QUAD $0x000000982494950f // setne byte [rsp + 152] - LONG $0x6e394466; BYTE $0x08 // cmp word [rsi + 8], r13w - QUAD $0x000000882494950f // setne byte [rsp + 136] - LONG $0x6e394466; BYTE $0x0a // cmp word [rsi + 10], r13w - LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] - LONG $0x6e394466; BYTE $0x0c // cmp word [rsi + 12], r13w - WORD $0x950f; BYTE $0xd0 // setne al - LONG $0x6e394466; BYTE $0x0e // cmp word [rsi + 14], r13w - WORD $0x950f; BYTE $0xd3 // setne bl - LONG $0x6e394466; BYTE $0x10 // cmp word [rsi + 16], r13w - QUAD $0x000000a02494950f // setne byte [rsp + 160] - LONG $0x6e394466; BYTE $0x12 // cmp word [rsi + 18], r13w - WORD $0x950f; BYTE $0xd2 // setne dl - LONG $0x6e394466; BYTE $0x14 // cmp word [rsi + 20], r13w - LONG $0xd1950f41 // setne r9b - LONG $0x6e394466; BYTE $0x16 // cmp word [rsi + 22], r13w - LONG $0xd2950f41 // setne r10b - LONG $0x6e394466; BYTE $0x18 // cmp word [rsi + 24], r13w - LONG $0xd3950f41 // setne r11b - LONG $0x6e394466; BYTE $0x1a // cmp word [rsi + 26], r13w - LONG $0xd4950f41 // setne r12b - LONG $0x6e394466; BYTE $0x1c // cmp word [rsi + 28], r13w - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] - LONG $0x6e394466; BYTE $0x1e // cmp word [rsi + 30], r13w - WORD $0x950f; BYTE $0xd1 // setne cl - LONG $0x6e394466; BYTE $0x20 // cmp word [rsi + 32], r13w - LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] - LONG $0x6e394466; BYTE $0x22 // cmp word [rsi + 34], r13w - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] - LONG $0x6e394466; BYTE $0x24 // cmp word [rsi + 36], r13w - QUAD $0x000000802494950f // setne byte [rsp + 128] - LONG $0x6e394466; BYTE $0x26 // cmp word [rsi + 38], r13w - LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] - LONG $0x6e394466; BYTE $0x28 // cmp word [rsi + 40], r13w - LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] - LONG $0x6e394466; BYTE $0x2a // cmp word [rsi + 42], r13w - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] - LONG $0x6e394466; BYTE $0x2c // cmp word [rsi + 44], r13w - LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] - LONG $0x6e394466; BYTE $0x2e // cmp word [rsi + 46], r13w - LONG $0xd7950f41 // setne r15b - LONG $0x6e394466; BYTE $0x30 // cmp word [rsi + 48], r13w - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] - LONG $0x6e394466; BYTE $0x32 // cmp word [rsi + 50], r13w - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] - LONG $0x6e394466; BYTE $0x34 // cmp word [rsi + 52], r13w - LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] - LONG $0x6e394466; BYTE $0x36 // cmp word [rsi + 54], r13w - LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] - LONG $0x6e394466; BYTE $0x38 // cmp word [rsi + 56], r13w - QUAD $0x000001202494950f // setne byte [rsp + 288] - LONG $0x6e394466; BYTE $0x3a // cmp word [rsi + 58], r13w - QUAD $0x000001402494950f // setne byte [rsp + 320] - LONG $0x6e394466; BYTE $0x3c // cmp word [rsi + 60], r13w - LONG $0x2454950f; BYTE $0x1c // setne byte [rsp + 28] - LONG $0x6e394466; BYTE $0x3e // cmp word [rsi + 62], r13w - LONG $0xd0950f41 // setne r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009024bc0240 // add dil, byte [rsp + 144] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0xa0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 160] - QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b - LONG $0x247cb60f; BYTE $0x70 // movzx edi, byte [rsp + 112] - LONG $0x06e7c040 // shl dil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xd200 // add dl, dl - LONG $0x50245402 // add dl, byte [rsp + 80] - WORD $0xd789 // mov edi, edx - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x0000011024948b48 // mov rdx, qword [rsp + 272] - WORD $0x1a88 // mov byte [rdx], bl - LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl - WORD $0x0841; BYTE $0xff // or r15b, dil - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000140248cb60f // movzx ecx, byte [rsp + 320] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd908 // or cl, bl - LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b - LONG $0x40c68348 // add rsi, 64 - LONG $0x04c28348 // add rdx, 4 - QUAD $0x0000011024948948 // mov qword [rsp + 272], rdx - QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + QUAD $0x000001182494894c // mov qword [rsp + 280], r10 + QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 + QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 + QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 + +LBB4_54: + LONG $0x2e394466 // cmp word [rsi], r13w + WORD $0x950f; BYTE $0xd0 // setne al + LONG $0x6e394466; BYTE $0x02 // cmp word [rsi + 2], r13w + LONG $0xd2950f41 // setne r10b + LONG $0x6e394466; BYTE $0x04 // cmp word [rsi + 4], r13w + LONG $0xd6950f41 // setne r14b + LONG $0x6e394466; BYTE $0x06 // cmp word [rsi + 6], r13w + QUAD $0x000000982494950f // setne byte [rsp + 152] + LONG $0x6e394466; BYTE $0x08 // cmp word [rsi + 8], r13w + QUAD $0x000000882494950f // setne byte [rsp + 136] + LONG $0x6e394466; BYTE $0x0a // cmp word [rsi + 10], r13w + LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] + LONG $0x6e394466; BYTE $0x0c // cmp word [rsi + 12], r13w + QUAD $0x000000902494950f // setne byte [rsp + 144] + LONG $0x6e394466; BYTE $0x0e // cmp word [rsi + 14], r13w + WORD $0x950f; BYTE $0xd3 // setne bl + LONG $0x6e394466; BYTE $0x10 // cmp word [rsi + 16], r13w + QUAD $0x000000a02494950f // setne byte [rsp + 160] + LONG $0x6e394466; BYTE $0x12 // cmp word [rsi + 18], r13w + LONG $0xd7950f40 // setne dil + LONG $0x6e394466; BYTE $0x14 // cmp word [rsi + 20], r13w + LONG $0xd0950f41 // setne r8b + LONG $0x6e394466; BYTE $0x16 // cmp word [rsi + 22], r13w + LONG $0xd1950f41 // setne r9b + LONG $0x6e394466; BYTE $0x18 // cmp word [rsi + 24], r13w + LONG $0xd3950f41 // setne r11b + LONG $0x6e394466; BYTE $0x1a // cmp word [rsi + 26], r13w + LONG $0xd4950f41 // setne r12b + LONG $0x6e394466; BYTE $0x1c // cmp word [rsi + 28], r13w + LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + LONG $0x6e394466; BYTE $0x1e // cmp word [rsi + 30], r13w + WORD $0x950f; BYTE $0xd1 // setne cl + LONG $0x6e394466; BYTE $0x20 // cmp word [rsi + 32], r13w + LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] + LONG $0x6e394466; BYTE $0x22 // cmp word [rsi + 34], r13w + LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + LONG $0x6e394466; BYTE $0x24 // cmp word [rsi + 36], r13w + QUAD $0x000000802494950f // setne byte [rsp + 128] + LONG $0x6e394466; BYTE $0x26 // cmp word [rsi + 38], r13w + LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] + LONG $0x6e394466; BYTE $0x28 // cmp word [rsi + 40], r13w + LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] + LONG $0x6e394466; BYTE $0x2a // cmp word [rsi + 42], r13w + LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] + LONG $0x6e394466; BYTE $0x2c // cmp word [rsi + 44], r13w + LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] + LONG $0x6e394466; BYTE $0x2e // cmp word [rsi + 46], r13w + LONG $0xd7950f41 // setne r15b + LONG $0x6e394466; BYTE $0x30 // cmp word [rsi + 48], r13w + LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x6e394466; BYTE $0x32 // cmp word [rsi + 50], r13w + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x6e394466; BYTE $0x34 // cmp word [rsi + 52], r13w + LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] + LONG $0x6e394466; BYTE $0x36 // cmp word [rsi + 54], r13w + LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] + LONG $0x6e394466; BYTE $0x38 // cmp word [rsi + 56], r13w + QUAD $0x000001202494950f // setne byte [rsp + 288] + LONG $0x6e394466; BYTE $0x3a // cmp word [rsi + 58], r13w + QUAD $0x000001402494950f // setne byte [rsp + 320] + LONG $0x6e394466; BYTE $0x3c // cmp word [rsi + 60], r13w + LONG $0x2454950f; BYTE $0x1c // setne byte [rsp + 28] + LONG $0x6e394466; BYTE $0x3e // cmp word [rsi + 62], r13w + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + WORD $0x0841; BYTE $0xc2 // or r10b, al + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0xe3c0; BYTE $0x07 // shl bl, 7 + WORD $0xc308 // or bl, al + LONG $0x02e6c041 // shl r14b, 2 + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + QUAD $0x000000a024bc0240 // add dil, byte [rsp + 160] + QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0844; BYTE $0xf0 // or al, r14b + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x04e3c041 // shl r11b, 4 + WORD $0x0845; BYTE $0xcb // or r11b, r9b + LONG $0x05e4c041 // shl r12b, 5 + WORD $0x0845; BYTE $0xdc // or r12b, r11b + LONG $0x247cb60f; BYTE $0x70 // movzx edi, byte [rsp + 112] + LONG $0x06e7c040 // shl dil, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0x0840; BYTE $0xf9 // or cl, dil + WORD $0xc308 // or bl, al + WORD $0x0844; BYTE $0xe1 // or cl, r12b + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xc000 // add al, al + LONG $0x50244402 // add al, byte [rsp + 80] + WORD $0xc789 // mov edi, eax + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] + WORD $0x1888 // mov byte [rax], bl + LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + LONG $0x07e7c041 // shl r15b, 7 + WORD $0x0841; BYTE $0xdf // or r15b, bl + WORD $0x4888; BYTE $0x01 // mov byte [rax + 1], cl + WORD $0x0841; BYTE $0xff // or r15b, dil + LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] + WORD $0xc900 // add cl, cl + LONG $0x20244c02 // add cl, byte [rsp + 32] + WORD $0xcb89 // mov ebx, ecx + LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xd908 // or cl, bl + WORD $0xcb89 // mov ebx, ecx + LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] + WORD $0xe1c0; BYTE $0x03 // shl cl, 3 + WORD $0xd908 // or cl, bl + WORD $0xcb89 // mov ebx, ecx + QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0xd908 // or cl, bl + WORD $0xcb89 // mov ebx, ecx + QUAD $0x00000140248cb60f // movzx ecx, byte [rsp + 320] + WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + WORD $0xd908 // or cl, bl + LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xda08 // or dl, bl + WORD $0xca08 // or dl, cl + LONG $0x02788844 // mov byte [rax + 2], r15b + WORD $0x5088; BYTE $0x03 // mov byte [rax + 3], dl + LONG $0x40c68348 // add rsi, 64 + LONG $0x04c08348 // add rax, 4 + QUAD $0x0000011024848948 // mov qword [rsp + 272], rax + QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + JNE LBB4_54 + QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] + QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] + QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] + LONG $0x05e7c149 // shl r15, 5 + WORD $0x394d; BYTE $0xd7 // cmp r15, r10 + JL LBB4_112 + JMP LBB4_165 + +LBB4_56: + LONG $0x2ab70f44 // movzx r13d, word [rdx] + LONG $0x1f7a8d4d // lea r15, [r10 + 31] + WORD $0x854d; BYTE $0xd2 // test r10, r10 + LONG $0xfa490f4d // cmovns r15, r10 + LONG $0x07418d41 // lea eax, [r9 + 7] + WORD $0x8545; BYTE $0xc9 // test r9d, r9d + LONG $0xc1490f41 // cmovns eax, r9d + WORD $0xe083; BYTE $0xf8 // and eax, -8 + WORD $0x2941; BYTE $0xc1 // sub r9d, eax + JE LBB4_60 + WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + +LBB4_58: + LONG $0x2e394466 // cmp word [rsi], r13w + LONG $0x02768d48 // lea rsi, [rsi + 2] + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xdaf6 // neg dl + LONG $0x07588d48 // lea rbx, [rax + 7] + WORD $0x8548; BYTE $0xc0 // test rax, rax + LONG $0xd8490f48 // cmovns rbx, rax + LONG $0x03fbc148 // sar rbx, 3 + LONG $0x04b60f45; BYTE $0x1b // movzx r8d, byte [r11 + rbx] + WORD $0x3044; BYTE $0xc2 // xor dl, r8b + LONG $0x00dd3c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rbx] + WORD $0xc189 // mov ecx, eax + WORD $0xf929 // sub ecx, edi + LONG $0x000001bf; BYTE $0x00 // mov edi, 1 + WORD $0xe7d3 // shl edi, cl + WORD $0x2040; BYTE $0xd7 // and dil, dl + WORD $0x3044; BYTE $0xc7 // xor dil, r8b + LONG $0x1b3c8841 // mov byte [r11 + rbx], dil + LONG $0x01c08348 // add rax, 1 + LONG $0x08f88348 // cmp rax, 8 + JNE LBB4_58 + LONG $0x01c38349 // add r11, 1 + +LBB4_60: + LONG $0x05ffc149 // sar r15, 5 + LONG $0x20fa8349 // cmp r10, 32 + JL LBB4_115 + QUAD $0x000001182494894c // mov qword [rsp + 280], r10 + QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 + QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 + QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 + +LBB4_62: + LONG $0x2e394466 // cmp word [rsi], r13w + QUAD $0x000000902494950f // setne byte [rsp + 144] + LONG $0x6e394466; BYTE $0x02 // cmp word [rsi + 2], r13w + LONG $0xd2950f41 // setne r10b + LONG $0x6e394466; BYTE $0x04 // cmp word [rsi + 4], r13w + LONG $0xd6950f41 // setne r14b + LONG $0x6e394466; BYTE $0x06 // cmp word [rsi + 6], r13w + QUAD $0x000000982494950f // setne byte [rsp + 152] + LONG $0x6e394466; BYTE $0x08 // cmp word [rsi + 8], r13w + QUAD $0x000000882494950f // setne byte [rsp + 136] + LONG $0x6e394466; BYTE $0x0a // cmp word [rsi + 10], r13w + LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] + LONG $0x6e394466; BYTE $0x0c // cmp word [rsi + 12], r13w + WORD $0x950f; BYTE $0xd0 // setne al + LONG $0x6e394466; BYTE $0x0e // cmp word [rsi + 14], r13w + WORD $0x950f; BYTE $0xd3 // setne bl + LONG $0x6e394466; BYTE $0x10 // cmp word [rsi + 16], r13w + QUAD $0x000000a02494950f // setne byte [rsp + 160] + LONG $0x6e394466; BYTE $0x12 // cmp word [rsi + 18], r13w + LONG $0xd7950f40 // setne dil + LONG $0x6e394466; BYTE $0x14 // cmp word [rsi + 20], r13w + LONG $0xd0950f41 // setne r8b + LONG $0x6e394466; BYTE $0x16 // cmp word [rsi + 22], r13w + LONG $0xd1950f41 // setne r9b + LONG $0x6e394466; BYTE $0x18 // cmp word [rsi + 24], r13w + LONG $0xd3950f41 // setne r11b + LONG $0x6e394466; BYTE $0x1a // cmp word [rsi + 26], r13w + LONG $0xd4950f41 // setne r12b + LONG $0x6e394466; BYTE $0x1c // cmp word [rsi + 28], r13w + LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + LONG $0x6e394466; BYTE $0x1e // cmp word [rsi + 30], r13w + WORD $0x950f; BYTE $0xd1 // setne cl + LONG $0x6e394466; BYTE $0x20 // cmp word [rsi + 32], r13w + LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] + LONG $0x6e394466; BYTE $0x22 // cmp word [rsi + 34], r13w + LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + LONG $0x6e394466; BYTE $0x24 // cmp word [rsi + 36], r13w + QUAD $0x000000802494950f // setne byte [rsp + 128] + LONG $0x6e394466; BYTE $0x26 // cmp word [rsi + 38], r13w + LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] + LONG $0x6e394466; BYTE $0x28 // cmp word [rsi + 40], r13w + LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] + LONG $0x6e394466; BYTE $0x2a // cmp word [rsi + 42], r13w + LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] + LONG $0x6e394466; BYTE $0x2c // cmp word [rsi + 44], r13w + LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] + LONG $0x6e394466; BYTE $0x2e // cmp word [rsi + 46], r13w + LONG $0xd7950f41 // setne r15b + LONG $0x6e394466; BYTE $0x30 // cmp word [rsi + 48], r13w + LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x6e394466; BYTE $0x32 // cmp word [rsi + 50], r13w + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x6e394466; BYTE $0x34 // cmp word [rsi + 52], r13w + LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] + LONG $0x6e394466; BYTE $0x36 // cmp word [rsi + 54], r13w + LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] + LONG $0x6e394466; BYTE $0x38 // cmp word [rsi + 56], r13w + QUAD $0x000001202494950f // setne byte [rsp + 288] + LONG $0x6e394466; BYTE $0x3a // cmp word [rsi + 58], r13w + QUAD $0x000001402494950f // setne byte [rsp + 320] + LONG $0x6e394466; BYTE $0x3c // cmp word [rsi + 60], r13w + LONG $0x2454950f; BYTE $0x1c // setne byte [rsp + 28] + LONG $0x6e394466; BYTE $0x3e // cmp word [rsi + 62], r13w + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009024940244 // add r10b, byte [rsp + 144] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0xe3c0; BYTE $0x07 // shl bl, 7 + WORD $0xc308 // or bl, al + LONG $0x02e6c041 // shl r14b, 2 + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + QUAD $0x000000a024bc0240 // add dil, byte [rsp + 160] + QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0844; BYTE $0xf0 // or al, r14b + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x04e3c041 // shl r11b, 4 + WORD $0x0845; BYTE $0xcb // or r11b, r9b + LONG $0x05e4c041 // shl r12b, 5 + WORD $0x0845; BYTE $0xdc // or r12b, r11b + LONG $0x247cb60f; BYTE $0x70 // movzx edi, byte [rsp + 112] + LONG $0x06e7c040 // shl dil, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0x0840; BYTE $0xf9 // or cl, dil + WORD $0xc308 // or bl, al + WORD $0x0844; BYTE $0xe1 // or cl, r12b + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xc000 // add al, al + LONG $0x50244402 // add al, byte [rsp + 80] + WORD $0xc789 // mov edi, eax + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] + WORD $0x1888 // mov byte [rax], bl + LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + LONG $0x07e7c041 // shl r15b, 7 + WORD $0x0841; BYTE $0xdf // or r15b, bl + WORD $0x4888; BYTE $0x01 // mov byte [rax + 1], cl + WORD $0x0841; BYTE $0xff // or r15b, dil + LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] + WORD $0xc900 // add cl, cl + LONG $0x20244c02 // add cl, byte [rsp + 32] + WORD $0xcb89 // mov ebx, ecx + LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xd908 // or cl, bl + WORD $0xcb89 // mov ebx, ecx + LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] + WORD $0xe1c0; BYTE $0x03 // shl cl, 3 + WORD $0xd908 // or cl, bl + WORD $0xcb89 // mov ebx, ecx + QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0xd908 // or cl, bl + WORD $0xcb89 // mov ebx, ecx + QUAD $0x00000140248cb60f // movzx ecx, byte [rsp + 320] + WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + WORD $0xd908 // or cl, bl + LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xda08 // or dl, bl + WORD $0xca08 // or dl, cl + LONG $0x02788844 // mov byte [rax + 2], r15b + WORD $0x5088; BYTE $0x03 // mov byte [rax + 3], dl + LONG $0x40c68348 // add rsi, 64 + LONG $0x04c08348 // add rax, 4 + QUAD $0x0000011024848948 // mov qword [rsp + 272], rax + QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 JNE LBB4_62 - QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] - QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] - LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xd7 // cmp r15, r10 + QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] + QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] + QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] + LONG $0x05e7c149 // shl r15, 5 + WORD $0x394d; BYTE $0xd7 // cmp r15, r10 JL LBB4_116 - JMP LBB4_159 + JMP LBB4_165 LBB4_64: WORD $0x8b4c; BYTE $0x2a // mov r13, qword [rdx] @@ -20846,7 +21781,7 @@ LBB4_70: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 QUAD $0x000000902494950f // setne byte [rsp + 144] LONG $0x086e394c // cmp qword [rsi + 8], r13 - LONG $0xd7950f40 // setne dil + LONG $0xd2950f41 // setne r10b LONG $0x106e394c // cmp qword [rsi + 16], r13 LONG $0xd6950f41 // setne r14b LONG $0x186e394c // cmp qword [rsi + 24], r13 @@ -20862,11 +21797,11 @@ LBB4_70: LONG $0x406e394c // cmp qword [rsi + 64], r13 QUAD $0x000000a02494950f // setne byte [rsp + 160] LONG $0x486e394c // cmp qword [rsi + 72], r13 - WORD $0x950f; BYTE $0xd2 // setne dl + LONG $0xd7950f40 // setne dil LONG $0x506e394c // cmp qword [rsi + 80], r13 - LONG $0xd1950f41 // setne r9b + LONG $0xd0950f41 // setne r8b LONG $0x586e394c // cmp qword [rsi + 88], r13 - LONG $0xd2950f41 // setne r10b + LONG $0xd1950f41 // setne r9b LONG $0x606e394c // cmp qword [rsi + 96], r13 LONG $0xd3950f41 // setne r11b LONG $0x686e394c // cmp qword [rsi + 104], r13 @@ -20906,276 +21841,68 @@ LBB4_70: LONG $0xf0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 240], r13 LONG $0x2454950f; BYTE $0x1c // setne byte [rsp + 28] LONG $0xf8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 248], r13 - LONG $0xd0950f41 // setne r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009024bc0240 // add dil, byte [rsp + 144] + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009024940244 // add r10b, byte [rsp + 144] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0xa0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 160] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + QUAD $0x000000a024bc0240 // add dil, byte [rsp + 160] QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b LONG $0x247cb60f; BYTE $0x70 // movzx edi, byte [rsp + 112] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xd200 // add dl, dl - LONG $0x50245402 // add dl, byte [rsp + 80] - WORD $0xd789 // mov edi, edx - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x0000011024948b48 // mov rdx, qword [rsp + 272] - WORD $0x1a88 // mov byte [rdx], bl - LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl - WORD $0x0841; BYTE $0xff // or r15b, dil - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000140248cb60f // movzx ecx, byte [rsp + 320] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd908 // or cl, bl - LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b - LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 - LONG $0x04c28348 // add rdx, 4 - QUAD $0x0000011024948948 // mov qword [rsp + 272], rdx - QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 - JNE LBB4_70 - QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] - QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] - LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JL LBB4_119 - JMP LBB4_159 - -LBB4_72: - LONG $0x1f7a8d4d // lea r15, [r10 + 31] - WORD $0x854d; BYTE $0xd2 // test r10, r10 - LONG $0xfa490f4d // cmovns r15, r10 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - LONG $0x0210fac5 // vmovss xmm0, dword [rdx] - WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB4_76 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d - -LBB4_74: - LONG $0x062ef8c5 // vucomiss xmm0, dword [rsi] - LONG $0x04768d48 // lea rsi, [rsi + 4] - WORD $0x950f; BYTE $0xd2 // setne dl - WORD $0xdaf6 // neg dl - LONG $0x07788d48 // lea rdi, [rax + 7] - WORD $0x8548; BYTE $0xc0 // test rax, rax - LONG $0xf8490f48 // cmovns rdi, rax - LONG $0x03ffc148 // sar rdi, 3 - LONG $0x0cb60f45; BYTE $0x3b // movzx r9d, byte [r11 + rdi] - WORD $0x3044; BYTE $0xca // xor dl, r9b - QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] - WORD $0xc189 // mov ecx, eax - WORD $0x2944; BYTE $0xc1 // sub ecx, r8d - LONG $0x000001bb; BYTE $0x00 // mov ebx, 1 - WORD $0xe3d3 // shl ebx, cl - WORD $0xd320 // and bl, dl - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3b1c8841 // mov byte [r11 + rdi], bl - LONG $0x01c08348 // add rax, 1 - LONG $0x08f88348 // cmp rax, 8 - JNE LBB4_74 - LONG $0x01c38349 // add r11, 1 - -LBB4_76: - LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fa8349 // cmp r10, 32 - JL LBB4_121 - QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 - QUAD $0x0000009024bc894c // mov qword [rsp + 144], r15 - QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 - -LBB4_78: - LONG $0x062ef8c5 // vucomiss xmm0, dword [rsi] - QUAD $0x000000982494950f // setne byte [rsp + 152] - LONG $0x462ef8c5; BYTE $0x04 // vucomiss xmm0, dword [rsi + 4] - LONG $0xd1950f41 // setne r9b - LONG $0x462ef8c5; BYTE $0x08 // vucomiss xmm0, dword [rsi + 8] - LONG $0xd6950f41 // setne r14b - LONG $0x462ef8c5; BYTE $0x0c // vucomiss xmm0, dword [rsi + 12] - LONG $0xd5950f41 // setne r13b - LONG $0x462ef8c5; BYTE $0x10 // vucomiss xmm0, dword [rsi + 16] - QUAD $0x000000882494950f // setne byte [rsp + 136] - LONG $0x462ef8c5; BYTE $0x14 // vucomiss xmm0, dword [rsi + 20] - LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] - LONG $0x462ef8c5; BYTE $0x18 // vucomiss xmm0, dword [rsi + 24] - WORD $0x950f; BYTE $0xd0 // setne al - LONG $0x462ef8c5; BYTE $0x1c // vucomiss xmm0, dword [rsi + 28] - WORD $0x950f; BYTE $0xd3 // setne bl - LONG $0x462ef8c5; BYTE $0x20 // vucomiss xmm0, dword [rsi + 32] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] - LONG $0x462ef8c5; BYTE $0x24 // vucomiss xmm0, dword [rsi + 36] - WORD $0x950f; BYTE $0xd2 // setne dl - LONG $0x462ef8c5; BYTE $0x28 // vucomiss xmm0, dword [rsi + 40] - LONG $0xd7950f40 // setne dil - LONG $0x462ef8c5; BYTE $0x2c // vucomiss xmm0, dword [rsi + 44] - LONG $0xd2950f41 // setne r10b - LONG $0x462ef8c5; BYTE $0x30 // vucomiss xmm0, dword [rsi + 48] - LONG $0xd3950f41 // setne r11b - LONG $0x462ef8c5; BYTE $0x34 // vucomiss xmm0, dword [rsi + 52] - LONG $0xd4950f41 // setne r12b - LONG $0x462ef8c5; BYTE $0x38 // vucomiss xmm0, dword [rsi + 56] - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] - LONG $0x462ef8c5; BYTE $0x3c // vucomiss xmm0, dword [rsi + 60] - WORD $0x950f; BYTE $0xd1 // setne cl - LONG $0x462ef8c5; BYTE $0x40 // vucomiss xmm0, dword [rsi + 64] - LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] - LONG $0x462ef8c5; BYTE $0x44 // vucomiss xmm0, dword [rsi + 68] - QUAD $0x000000a02494950f // setne byte [rsp + 160] - LONG $0x462ef8c5; BYTE $0x48 // vucomiss xmm0, dword [rsi + 72] - QUAD $0x000000802494950f // setne byte [rsp + 128] - LONG $0x462ef8c5; BYTE $0x4c // vucomiss xmm0, dword [rsi + 76] - LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] - LONG $0x462ef8c5; BYTE $0x50 // vucomiss xmm0, dword [rsi + 80] - LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] - LONG $0x462ef8c5; BYTE $0x54 // vucomiss xmm0, dword [rsi + 84] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] - LONG $0x462ef8c5; BYTE $0x58 // vucomiss xmm0, dword [rsi + 88] - LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] - LONG $0x462ef8c5; BYTE $0x5c // vucomiss xmm0, dword [rsi + 92] - LONG $0xd7950f41 // setne r15b - LONG $0x462ef8c5; BYTE $0x60 // vucomiss xmm0, dword [rsi + 96] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] - LONG $0x462ef8c5; BYTE $0x64 // vucomiss xmm0, dword [rsi + 100] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] - LONG $0x462ef8c5; BYTE $0x68 // vucomiss xmm0, dword [rsi + 104] - LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] - LONG $0x462ef8c5; BYTE $0x6c // vucomiss xmm0, dword [rsi + 108] - LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] - LONG $0x462ef8c5; BYTE $0x70 // vucomiss xmm0, dword [rsi + 112] - QUAD $0x000001202494950f // setne byte [rsp + 288] - LONG $0x462ef8c5; BYTE $0x74 // vucomiss xmm0, dword [rsi + 116] - QUAD $0x000001402494950f // setne byte [rsp + 320] - LONG $0x462ef8c5; BYTE $0x78 // vucomiss xmm0, dword [rsi + 120] - LONG $0x2454950f; BYTE $0x1c // setne byte [rsp + 28] - LONG $0x462ef8c5; BYTE $0x7c // vucomiss xmm0, dword [rsi + 124] - LONG $0xd0950f41 // setne r8b - WORD $0x0045; BYTE $0xc9 // add r9b, r9b - QUAD $0x00000098248c0244 // add r9b, byte [rsp + 152] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0845; BYTE $0xce // or r14b, r9b - WORD $0xd200 // add dl, dl - LONG $0x70245402 // add dl, byte [rsp + 112] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xf5 // or r13b, r14b - LONG $0x02e7c040 // shl dil, 2 - WORD $0x0840; BYTE $0xd7 // or dil, dl - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0844; BYTE $0xea // or dl, r13b - WORD $0x8941; BYTE $0xd1 // mov r9d, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0844; BYTE $0xca // or dl, r9b - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b - LONG $0x247cb60f; BYTE $0x78 // movzx edi, byte [rsp + 120] - LONG $0x06e7c040 // shl dil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] WORD $0xc000 // add al, al LONG $0x50244402 // add al, byte [rsp + 80] - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x0000011024948b48 // mov rdx, qword [rsp + 272] - WORD $0x1a88 // mov byte [rdx], bl + WORD $0xc789 // mov edi, eax + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] + WORD $0x1888 // mov byte [rax], bl LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl + WORD $0x4888; BYTE $0x01 // mov byte [rax + 1], cl WORD $0x0841; BYTE $0xff // or r15b, dil LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] WORD $0xc900 // add cl, cl @@ -21198,23 +21925,319 @@ LBB4_78: WORD $0xd908 // or cl, bl LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xda08 // or dl, bl + WORD $0xca08 // or dl, cl + LONG $0x02788844 // mov byte [rax + 2], r15b + WORD $0x5088; BYTE $0x03 // mov byte [rax + 3], dl + LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 + LONG $0x04c08348 // add rax, 4 + QUAD $0x0000011024848948 // mov qword [rsp + 272], rax + QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + JNE LBB4_70 + QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] + QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] + QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] + LONG $0x05e7c149 // shl r15, 5 + WORD $0x394d; BYTE $0xd7 // cmp r15, r10 + JL LBB4_119 + JMP LBB4_165 + +LBB4_72: + LONG $0x1f7a8d4d // lea r15, [r10 + 31] + WORD $0x854d; BYTE $0xd2 // test r10, r10 + LONG $0xfa490f4d // cmovns r15, r10 + LONG $0x07418d41 // lea eax, [r9 + 7] + WORD $0x8545; BYTE $0xc9 // test r9d, r9d + LONG $0xc1490f41 // cmovns eax, r9d + WORD $0xe083; BYTE $0xf8 // and eax, -8 + LONG $0x0210fac5 // vmovss xmm0, dword [rdx] + WORD $0x2941; BYTE $0xc1 // sub r9d, eax + JE LBB4_76 + WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + +LBB4_74: + LONG $0x062ef8c5 // vucomiss xmm0, dword [rsi] + LONG $0x04768d48 // lea rsi, [rsi + 4] + WORD $0x9a0f; BYTE $0xd1 // setp cl + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xca08 // or dl, cl + WORD $0xdaf6 // neg dl + LONG $0x07788d48 // lea rdi, [rax + 7] + WORD $0x8548; BYTE $0xc0 // test rax, rax + LONG $0xf8490f48 // cmovns rdi, rax + LONG $0x03ffc148 // sar rdi, 3 + LONG $0x0cb60f45; BYTE $0x3b // movzx r9d, byte [r11 + rdi] + WORD $0x3044; BYTE $0xca // xor dl, r9b + QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] + WORD $0xc189 // mov ecx, eax + WORD $0x2944; BYTE $0xc1 // sub ecx, r8d + LONG $0x000001bb; BYTE $0x00 // mov ebx, 1 + WORD $0xe3d3 // shl ebx, cl + WORD $0xd320 // and bl, dl + WORD $0x3044; BYTE $0xcb // xor bl, r9b + LONG $0x3b1c8841 // mov byte [r11 + rdi], bl + LONG $0x01c08348 // add rax, 1 + LONG $0x08f88348 // cmp rax, 8 + JNE LBB4_74 + LONG $0x01c38349 // add r11, 1 + +LBB4_76: + LONG $0x05ffc149 // sar r15, 5 + LONG $0x20fa8349 // cmp r10, 32 + JL LBB4_121 + QUAD $0x000001182494894c // mov qword [rsp + 280], r10 + QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 + QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 + QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 + +LBB4_78: + LONG $0x062ef8c5 // vucomiss xmm0, dword [rsi] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl + LONG $0x462ef8c5; BYTE $0x04 // vucomiss xmm0, dword [rsi + 4] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xc308 // or bl, al + LONG $0x462ef8c5; BYTE $0x08 // vucomiss xmm0, dword [rsi + 8] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd5950f41 // setne r13b + WORD $0x0841; BYTE $0xc5 // or r13b, al + LONG $0x462ef8c5; BYTE $0x0c // vucomiss xmm0, dword [rsi + 12] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x20248c88; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 288], cl + LONG $0x462ef8c5; BYTE $0x10 // vucomiss xmm0, dword [rsi + 16] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x40248c88; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 320], cl + LONG $0x462ef8c5; BYTE $0x14 // vucomiss xmm0, dword [rsi + 20] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f40 // setne dil + WORD $0x0840; BYTE $0xc7 // or dil, al + LONG $0x462ef8c5; BYTE $0x18 // vucomiss xmm0, dword [rsi + 24] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x30244c88 // mov byte [rsp + 48], cl + LONG $0x462ef8c5; BYTE $0x1c // vucomiss xmm0, dword [rsi + 28] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x1c244c88 // mov byte [rsp + 28], cl + LONG $0x462ef8c5; BYTE $0x20 // vucomiss xmm0, dword [rsi + 32] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x38244c88 // mov byte [rsp + 56], cl + LONG $0x462ef8c5; BYTE $0x24 // vucomiss xmm0, dword [rsi + 36] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl + LONG $0x462ef8c5; BYTE $0x28 // vucomiss xmm0, dword [rsi + 40] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x40244c88 // mov byte [rsp + 64], cl + LONG $0x462ef8c5; BYTE $0x2c // vucomiss xmm0, dword [rsi + 44] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x68244c88 // mov byte [rsp + 104], cl + LONG $0x462ef8c5; BYTE $0x30 // vucomiss xmm0, dword [rsi + 48] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x60244c88 // mov byte [rsp + 96], cl + LONG $0x462ef8c5; BYTE $0x34 // vucomiss xmm0, dword [rsi + 52] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x58244c88 // mov byte [rsp + 88], cl + LONG $0x462ef8c5; BYTE $0x38 // vucomiss xmm0, dword [rsi + 56] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xc208 // or dl, al + LONG $0x462ef8c5; BYTE $0x3c // vucomiss xmm0, dword [rsi + 60] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x50244c88 // mov byte [rsp + 80], cl + LONG $0x462ef8c5; BYTE $0x40 // vucomiss xmm0, dword [rsi + 64] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x48244c88 // mov byte [rsp + 72], cl + LONG $0x462ef8c5; BYTE $0x44 // vucomiss xmm0, dword [rsi + 68] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x88248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 136], cl + LONG $0x462ef8c5; BYTE $0x48 // vucomiss xmm0, dword [rsi + 72] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x462ef8c5; BYTE $0x4c // vucomiss xmm0, dword [rsi + 76] + LONG $0xd09a0f41 // setp r8b + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x0844; BYTE $0xc0 // or al, r8b + LONG $0x80248488; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 128], al + LONG $0x462ef8c5; BYTE $0x50 // vucomiss xmm0, dword [rsi + 80] + LONG $0xd09a0f41 // setp r8b + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x0844; BYTE $0xc0 // or al, r8b + LONG $0x78244488 // mov byte [rsp + 120], al + LONG $0x462ef8c5; BYTE $0x54 // vucomiss xmm0, dword [rsi + 84] + LONG $0xd09a0f41 // setp r8b + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x0844; BYTE $0xc0 // or al, r8b + LONG $0xa0248488; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 160], al + LONG $0x462ef8c5; BYTE $0x58 // vucomiss xmm0, dword [rsi + 88] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd4950f41 // setne r12b + WORD $0x0841; BYTE $0xc4 // or r12b, al + LONG $0x462ef8c5; BYTE $0x5c // vucomiss xmm0, dword [rsi + 92] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd2950f41 // setne r10b + WORD $0x0841; BYTE $0xc2 // or r10b, al + LONG $0x462ef8c5; BYTE $0x60 // vucomiss xmm0, dword [rsi + 96] + LONG $0xd09a0f41 // setp r8b + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x0844; BYTE $0xc0 // or al, r8b + LONG $0x70244488 // mov byte [rsp + 112], al + LONG $0x462ef8c5; BYTE $0x64 // vucomiss xmm0, dword [rsi + 100] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f41 // setne r15b + WORD $0x0841; BYTE $0xc7 // or r15b, al + LONG $0x462ef8c5; BYTE $0x68 // vucomiss xmm0, dword [rsi + 104] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd6950f41 // setne r14b + WORD $0x0841; BYTE $0xc6 // or r14b, al + LONG $0x462ef8c5; BYTE $0x6c // vucomiss xmm0, dword [rsi + 108] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd3950f41 // setne r11b + WORD $0x0841; BYTE $0xc3 // or r11b, al + LONG $0x462ef8c5; BYTE $0x70 // vucomiss xmm0, dword [rsi + 112] + LONG $0xd09a0f41 // setp r8b + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x0844; BYTE $0xc0 // or al, r8b + LONG $0x98248488; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 152], al + LONG $0x462ef8c5; BYTE $0x74 // vucomiss xmm0, dword [rsi + 116] + LONG $0xd09a0f41 // setp r8b + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x0844; BYTE $0xc0 // or al, r8b + LONG $0x90248488; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 144], al + LONG $0x462ef8c5; BYTE $0x78 // vucomiss xmm0, dword [rsi + 120] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd1950f41 // setne r9b + WORD $0x0841; BYTE $0xc1 // or r9b, al + LONG $0x462ef8c5; BYTE $0x7c // vucomiss xmm0, dword [rsi + 124] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd0950f41 // setne r8b + WORD $0x0841; BYTE $0xc0 // or r8b, al + WORD $0xdb00 // add bl, bl + LONG $0x20245c02 // add bl, byte [rsp + 32] + LONG $0x05e7c040 // shl dil, 5 + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x02e5c041 // shl r13b, 2 + WORD $0x0841; BYTE $0xdd // or r13b, bl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0xc000 // add al, al + LONG $0x38244402 // add al, byte [rsp + 56] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x1c // movzx eax, byte [rsp + 28] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x1c244488 // mov byte [rsp + 28], al + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc789 // mov edi, eax + QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xe8 // or al, r13b + LONG $0x245cb60f; BYTE $0x60 // movzx ebx, byte [rsp + 96] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0840; BYTE $0xfb // or bl, dil + LONG $0x247cb60f; BYTE $0x58 // movzx edi, byte [rsp + 88] + LONG $0x05e7c040 // shl dil, 5 + WORD $0xe2c0; BYTE $0x06 // shl dl, 6 + WORD $0x0840; BYTE $0xfa // or dl, dil + LONG $0x6cb60f44; WORD $0x5024 // movzx r13d, byte [rsp + 80] + LONG $0x07e5c041 // shl r13b, 7 + WORD $0x0841; BYTE $0xd5 // or r13b, dl + QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] + WORD $0xd200 // add dl, dl + LONG $0x48245402 // add dl, byte [rsp + 72] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xd108 // or cl, dl + QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] + WORD $0xe2c0; BYTE $0x03 // shl dl, 3 + WORD $0xca08 // or dl, cl + WORD $0xd189 // mov ecx, edx + LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] + WORD $0xe2c0; BYTE $0x04 // shl dl, 4 + WORD $0xca08 // or dl, cl + LONG $0x244cb60f; BYTE $0x1c // movzx ecx, byte [rsp + 28] + WORD $0xc108 // or cl, al + QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + LONG $0x06e4c041 // shl r12b, 6 + WORD $0x0841; BYTE $0xc4 // or r12b, al + WORD $0x0841; BYTE $0xdd // or r13b, bl + LONG $0x07e2c041 // shl r10b, 7 + WORD $0x0845; BYTE $0xe2 // or r10b, r12b + WORD $0x0841; BYTE $0xd2 // or r10b, dl + WORD $0x0045; BYTE $0xff // add r15b, r15b + LONG $0x247c0244; BYTE $0x70 // add r15b, byte [rsp + 112] + LONG $0x02e6c041 // shl r14b, 2 + WORD $0x0845; BYTE $0xfe // or r14b, r15b + LONG $0x03e3c041 // shl r11b, 3 + WORD $0x0845; BYTE $0xf3 // or r11b, r14b + QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd8 // or al, r11b + WORD $0xc389 // mov ebx, eax + QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] + WORD $0x0888 // mov byte [rax], cl + QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] + WORD $0xe2c0; BYTE $0x05 // shl dl, 5 + LONG $0x06e1c041 // shl r9b, 6 + WORD $0x0841; BYTE $0xd1 // or r9b, dl + LONG $0x01688844 // mov byte [rax + 1], r13b LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xc8 // or r8b, r9b WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b + LONG $0x02508844 // mov byte [rax + 2], r10b + LONG $0x03408844 // mov byte [rax + 3], r8b LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 - LONG $0x04c28348 // add rdx, 4 - QUAD $0x0000011024948948 // mov qword [rsp + 272], rdx - QUAD $0x0000009024848348; BYTE $0xff // add qword [rsp + 144], -1 + LONG $0x04c08348 // add rax, 4 + QUAD $0x0000011024848948 // mov qword [rsp + 272], rax + QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 JNE LBB4_78 QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000a824bc8b4c // mov r15, qword [rsp + 168] + QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 JL LBB4_122 - JMP LBB4_159 + JMP LBB4_165 LBB4_80: WORD $0x8a44; BYTE $0x32 // mov r14b, byte [rdx] @@ -21266,10 +22289,10 @@ LBB4_84: LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi WORD $0x3949; BYTE $0xc3 // cmp r11, rax - JAE LBB4_168 + JAE LBB4_169 LONG $0xbb048d4b // lea rax, [r11 + 4*r15] WORD $0x3948; BYTE $0xc6 // cmp rsi, rax - JAE LBB4_168 + JAE LBB4_169 LBB4_88: WORD $0xc031 // xor eax, eax @@ -21499,7 +22522,7 @@ LBB4_98: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d QUAD $0x000000902494950f // setne byte [rsp + 144] LONG $0x046e3944 // cmp dword [rsi + 4], r13d - LONG $0xd7950f40 // setne dil + LONG $0xd2950f41 // setne r10b LONG $0x086e3944 // cmp dword [rsi + 8], r13d LONG $0xd6950f41 // setne r14b LONG $0x0c6e3944 // cmp dword [rsi + 12], r13d @@ -21515,11 +22538,11 @@ LBB4_98: LONG $0x206e3944 // cmp dword [rsi + 32], r13d QUAD $0x000000a02494950f // setne byte [rsp + 160] LONG $0x246e3944 // cmp dword [rsi + 36], r13d - WORD $0x950f; BYTE $0xd2 // setne dl + LONG $0xd7950f40 // setne dil LONG $0x286e3944 // cmp dword [rsi + 40], r13d - LONG $0xd1950f41 // setne r9b + LONG $0xd0950f41 // setne r8b LONG $0x2c6e3944 // cmp dword [rsi + 44], r13d - LONG $0xd2950f41 // setne r10b + LONG $0xd1950f41 // setne r9b LONG $0x306e3944 // cmp dword [rsi + 48], r13d LONG $0xd3950f41 // setne r11b LONG $0x346e3944 // cmp dword [rsi + 52], r13d @@ -21559,32 +22582,33 @@ LBB4_98: LONG $0x786e3944 // cmp dword [rsi + 120], r13d LONG $0x2454950f; BYTE $0x1c // setne byte [rsp + 28] LONG $0x7c6e3944 // cmp dword [rsi + 124], r13d - LONG $0xd0950f41 // setne r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009024bc0240 // add dil, byte [rsp + 144] + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009024940244 // add r10b, byte [rsp + 144] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0xa0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 160] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + QUAD $0x000000a024bc0240 // add dil, byte [rsp + 160] QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b QUAD $0x00000110249c8b4c // mov r11, qword [rsp + 272] @@ -21592,60 +22616,60 @@ LBB4_98: LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xd200 // add dl, dl - LONG $0x50245402 // add dl, byte [rsp + 80] - WORD $0xd789 // mov edi, edx - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xc000 // add al, al + LONG $0x50244402 // add al, byte [rsp + 80] + WORD $0xc789 // mov edi, eax + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil WORD $0x8841; BYTE $0x1b // mov byte [r11], bl LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl LONG $0x014b8841 // mov byte [r11 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - QUAD $0x00000140248cb60f // movzx ecx, byte [rsp + 320] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x1c // movzx edx, byte [rsp + 28] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0841; BYTE $0xc7 // or r15b, al + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0xc000 // add al, al + LONG $0x20244402 // add al, byte [rsp + 32] + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xc808 // or al, cl + LONG $0x244cb60f; BYTE $0x1c // movzx ecx, byte [rsp + 28] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xca08 // or dl, cl + WORD $0xc208 // or dl, al LONG $0x027b8845 // mov byte [r11 + 2], r15b - LONG $0x03438845 // mov byte [r11 + 3], r8b + LONG $0x03538841 // mov byte [r11 + 3], dl LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 LONG $0x04c38349 // add r11, 4 QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 @@ -21656,13 +22680,13 @@ LBB4_98: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 JL LBB4_129 - JMP LBB4_159 + JMP LBB4_165 LBB4_100: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB4_159 + JGE LBB4_165 LBB4_101: WORD $0x894d; BYTE $0xd0 // mov r8, r10 @@ -21704,13 +22728,13 @@ LBB4_103: LONG $0x3f148841 // mov byte [r15 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 JNE LBB4_103 - JMP LBB4_156 + JMP LBB4_157 LBB4_104: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB4_159 + JGE LBB4_165 LBB4_105: WORD $0x894d; BYTE $0xd0 // mov r8, r10 @@ -21725,7 +22749,7 @@ LBB4_107: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB4_159 + JGE LBB4_165 LBB4_108: WORD $0x894d; BYTE $0xd0 // mov r8, r10 @@ -21773,7 +22797,7 @@ LBB4_111: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB4_159 + JGE LBB4_165 LBB4_112: WORD $0x894d; BYTE $0xd0 // mov r8, r10 @@ -21821,7 +22845,7 @@ LBB4_115: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB4_159 + JGE LBB4_165 LBB4_116: WORD $0x894d; BYTE $0xd0 // mov r8, r10 @@ -21838,7 +22862,7 @@ LBB4_118: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB4_159 + JGE LBB4_165 LBB4_119: WORD $0x894d; BYTE $0xd0 // mov r8, r10 @@ -21855,7 +22879,7 @@ LBB4_121: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB4_159 + JGE LBB4_165 LBB4_122: WORD $0x894d; BYTE $0xd0 // mov r8, r10 @@ -21873,7 +22897,7 @@ LBB4_124: LBB4_125: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB4_159 + JGE LBB4_165 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 @@ -21884,7 +22908,7 @@ LBB4_125: WORD $0xf631 // xor esi, esi QUAD $0x00000178249c8b4c // mov r11, qword [rsp + 376] -LBB4_153: +LBB4_154: LONG $0x34343845 // cmp byte [r12 + rsi], r14b WORD $0x950f; BYTE $0xd3 // setne bl WORD $0xdbf6 // neg bl @@ -21911,25 +22935,25 @@ LBB4_153: WORD $0xd030 // xor al, dl LONG $0x3b048841 // mov byte [r11 + rdi], al WORD $0x3949; BYTE $0xf2 // cmp r10, rsi - JNE LBB4_153 + JNE LBB4_154 JMP LBB4_162 LBB4_128: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB4_159 + JGE LBB4_165 LBB4_129: WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB4_154 + JNE LBB4_155 LBB4_130: WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB4_156 + JMP LBB4_157 LBB4_131: WORD $0x894d; BYTE $0xdd // mov r13, r11 @@ -21944,7 +22968,7 @@ LBB4_132: LBB4_133: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB4_159 + JGE LBB4_165 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 @@ -21956,30 +22980,34 @@ LBB4_127: JMP LBB4_163 LBB4_136: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 LBB4_137: LONG $0x062ef9c5 // vucomisd xmm0, qword [rsi] + WORD $0x9a0f; BYTE $0xd1 // setp cl WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xc808 // or al, cl WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xdf // mov rdi, r11 LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3f // movzx r9d, byte [r15 + rdi] - WORD $0x3044; BYTE $0xc8 // xor al, r9b + LONG $0x14b60f45; BYTE $0x3f // movzx r10d, byte [r15 + rdi] WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 WORD $0xe3d2 // shl bl, cl + WORD $0x3044; BYTE $0xd0 // xor al, r10b WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b + WORD $0x3044; BYTE $0xd3 // xor bl, r10b LONG $0x3f1c8841 // mov byte [r15 + rdi], bl LONG $0x02c38349 // add r11, 2 LONG $0x462ef9c5; BYTE $0x08 // vucomisd xmm0, qword [rsi + 8] LONG $0x10768d48 // lea rsi, [rsi + 16] + LONG $0xd29a0f41 // setp r10b WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x0844; BYTE $0xd0 // or al, r10b WORD $0xd8f6 // neg al WORD $0xd830 // xor al, bl WORD $0xc980; BYTE $0x01 // or cl, 1 @@ -21988,14 +23016,14 @@ LBB4_137: WORD $0xc220 // and dl, al WORD $0xda30 // xor dl, bl LONG $0x3f148841 // mov byte [r15 + rdi], dl - WORD $0x394d; BYTE $0xda // cmp r10, r11 + WORD $0x394d; BYTE $0xd9 // cmp r9, r11 JNE LBB4_137 LBB4_138: LONG $0x01c0f641 // test r8b, 1 - JE LBB4_159 + JE LBB4_165 LONG $0x062ef9c5 // vucomisd xmm0, qword [rsi] - JMP LBB4_158 + JMP LBB4_152 LBB4_140: WORD $0x894d; BYTE $0xc2 // mov r10, r8 @@ -22035,9 +23063,9 @@ LBB4_141: LBB4_142: LONG $0x01c0f641 // test r8b, 1 - JE LBB4_159 + JE LBB4_165 LONG $0x2e394466 // cmp word [rsi], r13w - JMP LBB4_158 + JMP LBB4_159 LBB4_144: WORD $0x894d; BYTE $0xc2 // mov r10, r8 @@ -22077,35 +23105,39 @@ LBB4_145: LBB4_146: LONG $0x01c0f641 // test r8b, 1 - JE LBB4_159 + JE LBB4_165 WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 - JMP LBB4_158 + JMP LBB4_159 LBB4_148: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 LBB4_149: LONG $0x062ef8c5 // vucomiss xmm0, dword [rsi] + WORD $0x9a0f; BYTE $0xd1 // setp cl WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xc808 // or al, cl WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xdf // mov rdi, r11 LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3f // movzx r9d, byte [r15 + rdi] - WORD $0x3044; BYTE $0xc8 // xor al, r9b + LONG $0x14b60f45; BYTE $0x3f // movzx r10d, byte [r15 + rdi] WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 WORD $0xe3d2 // shl bl, cl + WORD $0x3044; BYTE $0xd0 // xor al, r10b WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b + WORD $0x3044; BYTE $0xd3 // xor bl, r10b LONG $0x3f1c8841 // mov byte [r15 + rdi], bl LONG $0x02c38349 // add r11, 2 LONG $0x462ef8c5; BYTE $0x04 // vucomiss xmm0, dword [rsi + 4] LONG $0x08768d48 // lea rsi, [rsi + 8] + LONG $0xd29a0f41 // setp r10b WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x0844; BYTE $0xd0 // or al, r10b WORD $0xd8f6 // neg al WORD $0xd830 // xor al, bl WORD $0xc980; BYTE $0x01 // or cl, 1 @@ -22114,22 +23146,39 @@ LBB4_149: WORD $0xc220 // and dl, al WORD $0xda30 // xor dl, bl LONG $0x3f148841 // mov byte [r15 + rdi], dl - WORD $0x394d; BYTE $0xda // cmp r10, r11 + WORD $0x394d; BYTE $0xd9 // cmp r9, r11 JNE LBB4_149 LBB4_150: LONG $0x01c0f641 // test r8b, 1 - JE LBB4_159 + JE LBB4_165 LONG $0x062ef8c5 // vucomiss xmm0, dword [rsi] - JMP LBB4_158 -LBB4_154: +LBB4_152: + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xc208 // or dl, al + WORD $0xdaf6 // neg dl + WORD $0x894c; BYTE $0xd8 // mov rax, r11 + LONG $0x03e8c148 // shr rax, 3 + LONG $0x06348a41 // mov sil, byte [r14 + rax] + LONG $0x07e38041 // and r11b, 7 + WORD $0x01b3 // mov bl, 1 + WORD $0x8944; BYTE $0xd9 // mov ecx, r11d + WORD $0xe3d2 // shl bl, cl + WORD $0x3040; BYTE $0xf2 // xor dl, sil + WORD $0xd320 // and bl, dl + WORD $0x3040; BYTE $0xf3 // xor bl, sil + LONG $0x061c8841 // mov byte [r14 + rax], bl + JMP LBB4_165 + +LBB4_155: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 -LBB4_155: +LBB4_156: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d WORD $0x950f; BYTE $0xd0 // setne al WORD $0xd8f6 // neg al @@ -22157,14 +23206,14 @@ LBB4_155: WORD $0xda30 // xor dl, bl LONG $0x3f148841 // mov byte [r15 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB4_155 + JNE LBB4_156 -LBB4_156: +LBB4_157: LONG $0x01c0f641 // test r8b, 1 - JE LBB4_159 + JE LBB4_165 WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d -LBB4_158: +LBB4_159: WORD $0x950f; BYTE $0xd0 // setne al WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xda // mov rdx, r11 @@ -22178,11 +23227,7 @@ LBB4_158: WORD $0xc320 // and bl, al WORD $0x3040; BYTE $0xf3 // xor bl, sil LONG $0x161c8841 // mov byte [r14 + rdx], bl - -LBB4_159: - MOVQ 1280(SP), SP - VZEROUPPER - RET + JMP LBB4_165 LBB4_160: WORD $0x894d; BYTE $0xc2 // mov r10, r8 @@ -22224,7 +23269,7 @@ LBB4_162: LBB4_163: LONG $0x01c0f641 // test r8b, 1 - JE LBB4_159 + JE LBB4_165 LONG $0x24343845 // cmp byte [r12], r14b WORD $0x950f; BYTE $0xd0 // setne al WORD $0xd8f6 // neg al @@ -22240,9 +23285,13 @@ LBB4_163: WORD $0xc320 // and bl, al WORD $0x3040; BYTE $0xfb // xor bl, dil LONG $0x101c8841 // mov byte [r8 + rdx], bl - JMP LBB4_159 LBB4_165: + MOVQ 1280(SP), SP + VZEROUPPER + RET + +LBB4_166: LONG $0xe0e78349 // and r15, -32 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 @@ -22258,7 +23307,7 @@ LBB4_165: WORD $0xc031 // xor eax, eax QUAD $0x0000011024ac894c // mov qword [rsp + 272], r13 -LBB4_166: +LBB4_167: WORD $0x8948; BYTE $0xc3 // mov rbx, rax QUAD $0x0000019824848948 // mov qword [rsp + 408], rax LONG $0x05e3c148 // shl rbx, 5 @@ -24350,7 +25399,7 @@ LBB4_166: LONG $0x20c18348 // add rcx, 32 WORD $0x8948; BYTE $0xc8 // mov rax, rcx QUAD $0x00000180248c3b48 // cmp rcx, qword [rsp + 384] - JNE LBB4_166 + JNE LBB4_167 QUAD $0x0000018824bc8b4c // mov r15, qword [rsp + 392] QUAD $0x0000018024bc3b4c // cmp r15, qword [rsp + 384] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] @@ -24359,7 +25408,7 @@ LBB4_166: JNE LBB4_35 JMP LBB4_133 -LBB4_168: +LBB4_169: LONG $0xe0e78349 // and r15, -32 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 @@ -24374,7 +25423,7 @@ LBB4_168: WORD $0xc031 // xor eax, eax QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 -LBB4_169: +LBB4_170: WORD $0x8948; BYTE $0xc3 // mov rbx, rax QUAD $0x0000019824848948 // mov qword [rsp + 408], rax LONG $0x05e3c148 // shl rbx, 5 @@ -26471,7 +27520,7 @@ LBB4_169: LONG $0x20c18348 // add rcx, 32 WORD $0x8948; BYTE $0xc8 // mov rax, rcx QUAD $0x00000180248c3b48 // cmp rcx, qword [rsp + 384] - JNE LBB4_169 + JNE LBB4_170 QUAD $0x0000018824bc8b4c // mov r15, qword [rsp + 392] QUAD $0x0000018024bc3b4c // cmp r15, qword [rsp + 384] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] @@ -26525,17 +27574,17 @@ TEXT ·_comparison_not_equal_scalar_arr_avx2(SB), $1320-48 LEAQ LCDATA4<>(SB), BP WORD $0x894d; BYTE $0xc2 // mov r10, r8 - WORD $0x8949; BYTE $0xcf // mov r15, rcx + WORD $0x8949; BYTE $0xcd // mov r13, rcx WORD $0xff83; BYTE $0x06 // cmp edi, 6 JG LBB5_17 WORD $0xff83; BYTE $0x03 // cmp edi, 3 JLE LBB5_32 WORD $0xff83; BYTE $0x04 // cmp edi, 4 - JE LBB5_60 + JE LBB5_63 WORD $0xff83; BYTE $0x05 // cmp edi, 5 - JE LBB5_72 + JE LBB5_75 WORD $0xff83; BYTE $0x06 // cmp edi, 6 - JNE LBB5_157 + JNE LBB5_164 WORD $0x8b44; BYTE $0x36 // mov r14d, dword [rsi] LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -26557,7 +27606,8 @@ LBB5_7: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf0490f48 // cmovns rsi, rax LONG $0x03fec148 // sar rsi, 3 - LONG $0x04b60f45; BYTE $0x37 // movzx r8d, byte [r15 + rsi] + WORD $0x894d; BYTE $0xe9 // mov r9, r13 + LONG $0x44b60f45; WORD $0x0035 // movzx r8d, byte [r13 + rsi] WORD $0x3044; BYTE $0xc3 // xor bl, r8b LONG $0x00f53c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rsi] WORD $0xc189 // mov ecx, eax @@ -26566,22 +27616,22 @@ LBB5_7: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xdf // and dil, bl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x373c8841 // mov byte [r15 + rsi], dil + LONG $0x357c8841; BYTE $0x00 // mov byte [r13 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB5_7 - LONG $0x01c78349 // add r15, 1 + LONG $0x01c58349 // add r13, 1 LBB5_9: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 JL LBB5_13 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b0249c894c // mov qword [rsp + 176], r11 QUAD $0x000000a0249c894c // mov qword [rsp + 160], r11 + QUAD $0x000000a8249c894c // mov qword [rsp + 168], r11 LBB5_11: - QUAD $0x0000011024bc894c // mov qword [rsp + 272], r15 + QUAD $0x0000011024ac894c // mov qword [rsp + 272], r13 LONG $0x7c723b44 // cmp r14d, dword [rdx + 124] LONG $0x2454950f; BYTE $0x1c // setne byte [rsp + 28] LONG $0x78723b44 // cmp r14d, dword [rdx + 120] @@ -26591,31 +27641,31 @@ LBB5_11: LONG $0x70723b44 // cmp r14d, dword [rdx + 112] LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] LONG $0x6c723b44 // cmp r14d, dword [rdx + 108] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] - LONG $0x68723b44 // cmp r14d, dword [rdx + 104] LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] - LONG $0x64723b44 // cmp r14d, dword [rdx + 100] + LONG $0x68723b44 // cmp r14d, dword [rdx + 104] LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] + LONG $0x64723b44 // cmp r14d, dword [rdx + 100] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x5c723b44 // cmp r14d, dword [rdx + 92] LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] LONG $0x58723b44 // cmp r14d, dword [rdx + 88] LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0x54723b44 // cmp r14d, dword [rdx + 84] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] - LONG $0x50723b44 // cmp r14d, dword [rdx + 80] LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] - LONG $0x4c723b44 // cmp r14d, dword [rdx + 76] + LONG $0x50723b44 // cmp r14d, dword [rdx + 80] LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] - LONG $0x48723b44 // cmp r14d, dword [rdx + 72] + LONG $0x4c723b44 // cmp r14d, dword [rdx + 76] LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] - LONG $0x44723b44 // cmp r14d, dword [rdx + 68] + LONG $0x48723b44 // cmp r14d, dword [rdx + 72] QUAD $0x000000902494950f // setne byte [rsp + 144] + LONG $0x44723b44 // cmp r14d, dword [rdx + 68] + QUAD $0x000000882494950f // setne byte [rsp + 136] LONG $0x3c723b44 // cmp r14d, dword [rdx + 60] LONG $0xd0950f41 // setne r8b LONG $0x38723b44 // cmp r14d, dword [rdx + 56] - QUAD $0x000000802494950f // setne byte [rsp + 128] - LONG $0x34723b44 // cmp r14d, dword [rdx + 52] LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + LONG $0x34723b44 // cmp r14d, dword [rdx + 52] + LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] LONG $0x30723b44 // cmp r14d, dword [rdx + 48] LONG $0xd3950f41 // setne r11b LONG $0x2c723b44 // cmp r14d, dword [rdx + 44] @@ -26633,28 +27683,28 @@ LBB5_11: LONG $0x10723b44 // cmp r14d, dword [rdx + 16] WORD $0x950f; BYTE $0xd1 // setne cl LONG $0x0c723b44 // cmp r14d, dword [rdx + 12] - LONG $0xd5950f41 // setne r13b - LONG $0x08723b44 // cmp r14d, dword [rdx + 8] LONG $0xd4950f41 // setne r12b + LONG $0x08723b44 // cmp r14d, dword [rdx + 8] + LONG $0xd5950f41 // setne r13b WORD $0x3b44; BYTE $0x32 // cmp r14d, dword [rdx] - QUAD $0x000000a82494950f // setne byte [rsp + 168] + QUAD $0x000000b02494950f // setne byte [rsp + 176] LONG $0x04723b44 // cmp r14d, dword [rdx + 4] LONG $0xd7950f41 // setne r15b LONG $0x20723b44 // cmp r14d, dword [rdx + 32] QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x40723b44 // cmp r14d, dword [rdx + 64] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] LONG $0x60723b44 // cmp r14d, dword [rdx + 96] - QUAD $0x000000882494950f // setne byte [rsp + 136] + QUAD $0x000000802494950f // setne byte [rsp + 128] WORD $0x0045; BYTE $0xff // add r15b, r15b - QUAD $0x000000a824bc0244 // add r15b, byte [rsp + 168] - LONG $0x02e4c041 // shl r12b, 2 - WORD $0x0845; BYTE $0xfc // or r12b, r15b + QUAD $0x000000b024bc0244 // add r15b, byte [rsp + 176] + LONG $0x02e5c041 // shl r13b, 2 + WORD $0x0845; BYTE $0xfd // or r13b, r15b QUAD $0x0000011024bc8b4c // mov r15, qword [rsp + 272] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xe5 // or r13b, r12b + LONG $0x03e4c041 // shl r12b, 3 + WORD $0x0845; BYTE $0xec // or r12b, r13b WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0x0844; BYTE $0xe9 // or cl, r13b + WORD $0x0844; BYTE $0xe1 // or cl, r12b LONG $0x05e6c040 // shl sil, 5 WORD $0x0840; BYTE $0xce // or sil, cl WORD $0xe3c0; BYTE $0x06 // shl bl, 6 @@ -26670,32 +27720,32 @@ LBB5_11: WORD $0x0845; BYTE $0xca // or r10b, r9b LONG $0x04e3c041 // shl r11b, 4 WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xd8 // or al, r11b - QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] + LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] WORD $0xe1c0; BYTE $0x06 // shl cl, 6 LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xc8 // or r8b, cl WORD $0x0841; BYTE $0xc0 // or r8b, al LONG $0x01478845 // mov byte [r15 + 1], r8b - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] WORD $0xc000 // add al, al - LONG $0x70244402 // add al, byte [rsp + 112] + LONG $0x68244402 // add al, byte [rsp + 104] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -26706,15 +27756,15 @@ LBB5_11: WORD $0xd808 // or al, bl WORD $0xc808 // or al, cl LONG $0x02478841 // mov byte [r15 + 2], al - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x88248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 136] + LONG $0x80248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 128] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -26735,64 +27785,66 @@ LBB5_11: LONG $0x03478841 // mov byte [r15 + 3], al LONG $0x80ea8348 // sub rdx, -128 LONG $0x04c78349 // add r15, 4 - QUAD $0x000000a024848348; BYTE $0xff // add qword [rsp + 160], -1 + WORD $0x894d; BYTE $0xfd // mov r13, r15 + QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 JNE LBB5_11 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b0249c8b4c // mov r11, qword [rsp + 176] + QUAD $0x000000a0249c8b4c // mov r11, qword [rsp + 160] LBB5_13: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB5_157 + JGE LBB5_164 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 - JE LBB5_127 + JE LBB5_133 WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0xff31 // xor edi, edi LBB5_16: - WORD $0x3b44; BYTE $0x32 // cmp r14d, dword [rdx] - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0xd8f6 // neg al - WORD $0x8948; BYTE $0xfe // mov rsi, rdi - LONG $0x03eec148 // shr rsi, 3 - LONG $0x0cb60f45; BYTE $0x37 // movzx r9d, byte [r15 + rsi] - WORD $0xf989 // mov ecx, edi - WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b3 // mov bl, 1 - WORD $0xe3d2 // shl bl, cl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x371c8841 // mov byte [r15 + rsi], bl - LONG $0x02c78348 // add rdi, 2 - LONG $0x04723b44 // cmp r14d, dword [rdx + 4] - LONG $0x08528d48 // lea rdx, [rdx + 8] - LONG $0xd1950f41 // setne r9b - WORD $0xf641; BYTE $0xd9 // neg r9b - WORD $0x3041; BYTE $0xd9 // xor r9b, bl - WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0x2044; BYTE $0xc8 // and al, r9b - WORD $0xd830 // xor al, bl - LONG $0x37048841 // mov byte [r15 + rsi], al - WORD $0x3949; BYTE $0xfa // cmp r10, rdi + WORD $0x3b44; BYTE $0x32 // cmp r14d, dword [rdx] + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xd8f6 // neg al + WORD $0x8948; BYTE $0xfe // mov rsi, rdi + LONG $0x03eec148 // shr rsi, 3 + WORD $0x894d; BYTE $0xeb // mov r11, r13 + LONG $0x4cb60f45; WORD $0x0035 // movzx r9d, byte [r13 + rsi] + WORD $0xf989 // mov ecx, edi + WORD $0xe180; BYTE $0x06 // and cl, 6 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0x3044; BYTE $0xc8 // xor al, r9b + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xcb // xor bl, r9b + LONG $0x355c8841; BYTE $0x00 // mov byte [r13 + rsi], bl + LONG $0x02c78348 // add rdi, 2 + LONG $0x04723b44 // cmp r14d, dword [rdx + 4] + LONG $0x08528d48 // lea rdx, [rdx + 8] + LONG $0xd1950f41 // setne r9b + WORD $0xf641; BYTE $0xd9 // neg r9b + WORD $0x3041; BYTE $0xd9 // xor r9b, bl + WORD $0xc980; BYTE $0x01 // or cl, 1 + WORD $0x01b0 // mov al, 1 + WORD $0xe0d2 // shl al, cl + WORD $0x2044; BYTE $0xc8 // and al, r9b + WORD $0xd830 // xor al, bl + LONG $0x35448841; BYTE $0x00 // mov byte [r13 + rsi], al + WORD $0x3949; BYTE $0xfa // cmp r10, rdi JNE LBB5_16 - JMP LBB5_154 + JMP LBB5_160 LBB5_17: WORD $0xff83; BYTE $0x08 // cmp edi, 8 - JLE LBB5_46 + JLE LBB5_49 WORD $0xff83; BYTE $0x09 // cmp edi, 9 - JE LBB5_83 + JE LBB5_86 WORD $0xff83; BYTE $0x0b // cmp edi, 11 - JE LBB5_94 + JE LBB5_97 WORD $0xff83; BYTE $0x0c // cmp edi, 12 - JNE LBB5_157 + JNE LBB5_164 LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 LONG $0xda490f4d // cmovns r11, r10 @@ -26806,212 +27858,304 @@ LBB5_17: WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d LBB5_23: - LONG $0x022ef9c5 // vucomisd xmm0, qword [rdx] - LONG $0x08528d48 // lea rdx, [rdx + 8] - WORD $0x950f; BYTE $0xd3 // setne bl - WORD $0xdbf6 // neg bl - LONG $0x07708d48 // lea rsi, [rax + 7] - WORD $0x8548; BYTE $0xc0 // test rax, rax - LONG $0xf0490f48 // cmovns rsi, rax - LONG $0x03fec148 // sar rsi, 3 - LONG $0x0cb60f45; BYTE $0x37 // movzx r9d, byte [r15 + rsi] - WORD $0x3044; BYTE $0xcb // xor bl, r9b - QUAD $0x00000000f5048d44 // lea r8d, [8*rsi] - WORD $0xc189 // mov ecx, eax - WORD $0x2944; BYTE $0xc1 // sub ecx, r8d - LONG $0x000001bf; BYTE $0x00 // mov edi, 1 - WORD $0xe7d3 // shl edi, cl - WORD $0x2040; BYTE $0xdf // and dil, bl - WORD $0x3044; BYTE $0xcf // xor dil, r9b - LONG $0x373c8841 // mov byte [r15 + rsi], dil - LONG $0x01c08348 // add rax, 1 - LONG $0x08f88348 // cmp rax, 8 + LONG $0x022ef9c5 // vucomisd xmm0, qword [rdx] + LONG $0x08528d48 // lea rdx, [rdx + 8] + WORD $0x9a0f; BYTE $0xd1 // setp cl + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xcb08 // or bl, cl + WORD $0xdbf6 // neg bl + LONG $0x07708d48 // lea rsi, [rax + 7] + WORD $0x8548; BYTE $0xc0 // test rax, rax + LONG $0xf0490f48 // cmovns rsi, rax + LONG $0x03fec148 // sar rsi, 3 + WORD $0x894d; BYTE $0xee // mov r14, r13 + LONG $0x4cb60f45; WORD $0x0035 // movzx r9d, byte [r13 + rsi] + WORD $0x3044; BYTE $0xcb // xor bl, r9b + QUAD $0x00000000f5048d44 // lea r8d, [8*rsi] + WORD $0xc189 // mov ecx, eax + WORD $0x2944; BYTE $0xc1 // sub ecx, r8d + LONG $0x000001bf; BYTE $0x00 // mov edi, 1 + WORD $0xe7d3 // shl edi, cl + WORD $0x2040; BYTE $0xdf // and dil, bl + WORD $0x3044; BYTE $0xcf // xor dil, r9b + LONG $0x357c8841; BYTE $0x00 // mov byte [r13 + rsi], dil + LONG $0x01c08348 // add rax, 1 + LONG $0x08f88348 // cmp rax, 8 JNE LBB5_23 - LONG $0x01c78349 // add r15, 1 + LONG $0x01c58349 // add r13, 1 LBB5_25: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 JL LBB5_29 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000a0249c894c // mov qword [rsp + 160], r11 - QUAD $0x000000a8249c894c // mov qword [rsp + 168], r11 + QUAD $0x000000c0249c894c // mov qword [rsp + 192], r11 + QUAD $0x000000b8249c894c // mov qword [rsp + 184], r11 LBB5_27: - QUAD $0x0000011024bc894c // mov qword [rsp + 272], r15 + QUAD $0x0000011024ac894c // mov qword [rsp + 272], r13 LONG $0x022ef9c5 // vucomisd xmm0, qword [rdx] - QUAD $0x000000982494950f // setne byte [rsp + 152] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x30244c88 // mov byte [rsp + 48], cl LONG $0x422ef9c5; BYTE $0x08 // vucomisd xmm0, qword [rdx + 8] - LONG $0xd1950f41 // setne r9b + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd5950f41 // setne r13b + WORD $0x0841; BYTE $0xc5 // or r13b, al LONG $0x422ef9c5; BYTE $0x10 // vucomisd xmm0, qword [rdx + 16] - LONG $0xd3950f41 // setne r11b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x38244c88 // mov byte [rsp + 56], cl LONG $0x422ef9c5; BYTE $0x18 // vucomisd xmm0, qword [rdx + 24] - LONG $0xd5950f41 // setne r13b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x40248c88; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 320], cl LONG $0x422ef9c5; BYTE $0x20 // vucomisd xmm0, qword [rdx + 32] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl LONG $0x422ef9c5; BYTE $0x28 // vucomisd xmm0, qword [rdx + 40] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd4950f41 // setne r12b + WORD $0x0841; BYTE $0xc4 // or r12b, al LONG $0x422ef9c5; BYTE $0x30 // vucomisd xmm0, qword [rdx + 48] - WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x48244c88 // mov byte [rsp + 72], cl LONG $0x422ef9c5; BYTE $0x38 // vucomisd xmm0, qword [rdx + 56] - LONG $0xd4950f41 // setne r12b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x1c244c88 // mov byte [rsp + 28], cl LONG $0x422ef9c5; BYTE $0x40 // vucomisd xmm0, qword [rdx + 64] - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl LONG $0x422ef9c5; BYTE $0x48 // vucomisd xmm0, qword [rdx + 72] - LONG $0xd6950f40 // setne sil + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x40244c88 // mov byte [rsp + 64], cl LONG $0x422ef9c5; BYTE $0x50 // vucomisd xmm0, qword [rdx + 80] - LONG $0xd7950f40 // setne dil + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x60244c88 // mov byte [rsp + 96], cl LONG $0x422ef9c5; BYTE $0x58 // vucomisd xmm0, qword [rdx + 88] - LONG $0xd0950f41 // setne r8b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xc308 // or bl, al LONG $0x422ef9c5; BYTE $0x60 // vucomisd xmm0, qword [rdx + 96] - LONG $0xd2950f41 // setne r10b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x20248c88; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 288], cl LONG $0x422ef9c5; BYTE $0x68 // vucomisd xmm0, qword [rdx + 104] - LONG $0xd7950f41 // setne r15b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x50244c88 // mov byte [rsp + 80], cl LONG $0x422ef9c5; BYTE $0x70 // vucomisd xmm0, qword [rdx + 112] - QUAD $0x000000802494950f // setne byte [rsp + 128] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x90248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 144], cl LONG $0x422ef9c5; BYTE $0x78 // vucomisd xmm0, qword [rdx + 120] + WORD $0x9a0f; BYTE $0xd0 // setp al WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x88248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 136], cl QUAD $0x00000080822ef9c5 // vucomisd xmm0, qword [rdx + 128] - LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x58244c88 // mov byte [rsp + 88], cl QUAD $0x00000088822ef9c5 // vucomisd xmm0, qword [rdx + 136] - QUAD $0x000000882494950f // setne byte [rsp + 136] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x80248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 128], cl QUAD $0x00000090822ef9c5 // vucomisd xmm0, qword [rdx + 144] - QUAD $0x000000902494950f // setne byte [rsp + 144] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x78244c88 // mov byte [rsp + 120], cl QUAD $0x00000098822ef9c5 // vucomisd xmm0, qword [rdx + 152] - LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x70244c88 // mov byte [rsp + 112], cl QUAD $0x000000a0822ef9c5 // vucomisd xmm0, qword [rdx + 160] - LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x68244c88 // mov byte [rsp + 104], cl QUAD $0x000000a8822ef9c5 // vucomisd xmm0, qword [rdx + 168] - LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xb0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 176], cl QUAD $0x000000b0822ef9c5 // vucomisd xmm0, qword [rdx + 176] - LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f41 // setne r15b + WORD $0x0841; BYTE $0xc7 // or r15b, al QUAD $0x000000b8822ef9c5 // vucomisd xmm0, qword [rdx + 184] - LONG $0xd6950f41 // setne r14b + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd0950f41 // setne r8b + WORD $0x0841; BYTE $0xc0 // or r8b, al QUAD $0x000000c0822ef9c5 // vucomisd xmm0, qword [rdx + 192] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x98248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 152], cl QUAD $0x000000c8822ef9c5 // vucomisd xmm0, qword [rdx + 200] - LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd3950f41 // setne r11b + WORD $0x0841; BYTE $0xc3 // or r11b, al QUAD $0x000000d0822ef9c5 // vucomisd xmm0, qword [rdx + 208] - LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd2950f41 // setne r10b + WORD $0x0841; BYTE $0xc2 // or r10b, al QUAD $0x000000d8822ef9c5 // vucomisd xmm0, qword [rdx + 216] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd1950f41 // setne r9b + WORD $0x0841; BYTE $0xc1 // or r9b, al QUAD $0x000000e0822ef9c5 // vucomisd xmm0, qword [rdx + 224] - QUAD $0x000001402494950f // setne byte [rsp + 320] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xa0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 160], cl QUAD $0x000000e8822ef9c5 // vucomisd xmm0, qword [rdx + 232] - QUAD $0x000001202494950f // setne byte [rsp + 288] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xa8248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 168], cl QUAD $0x000000f0822ef9c5 // vucomisd xmm0, qword [rdx + 240] - LONG $0x2454950f; BYTE $0x1c // setne byte [rsp + 28] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f40 // setne dil + WORD $0x0840; BYTE $0xc7 // or dil, al QUAD $0x000000f8822ef9c5 // vucomisd xmm0, qword [rdx + 248] - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0x0045; BYTE $0xc9 // add r9b, r9b - QUAD $0x00000098248c0244 // add r9b, byte [rsp + 152] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e4c041 // shl r12b, 7 - WORD $0x0841; BYTE $0xdc // or r12b, bl - LONG $0x02e3c041 // shl r11b, 2 - WORD $0x0845; BYTE $0xcb // or r11b, r9b - WORD $0x0040; BYTE $0xf6 // add sil, sil - LONG $0x24740240; BYTE $0x78 // add sil, byte [rsp + 120] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xdd // or r13b, r11b - LONG $0x02e7c040 // shl dil, 2 - WORD $0x0840; BYTE $0xf7 // or dil, sil - LONG $0x245cb60f; BYTE $0x70 // movzx ebx, byte [rsp + 112] - WORD $0xe3c0; BYTE $0x04 // shl bl, 4 - WORD $0x0844; BYTE $0xeb // or bl, r13b - WORD $0xde89 // mov esi, ebx - LONG $0x03e0c041 // shl r8b, 3 - WORD $0x0841; BYTE $0xf8 // or r8b, dil - LONG $0x245cb60f; BYTE $0x68 // movzx ebx, byte [rsp + 104] - WORD $0xe3c0; BYTE $0x05 // shl bl, 5 - WORD $0x0840; BYTE $0xf3 // or bl, sil - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xc2 // or r10b, r8b - LONG $0x05e7c041 // shl r15b, 5 - WORD $0x0845; BYTE $0xd7 // or r15b, r10b - QUAD $0x0000008024b4b60f // movzx esi, byte [rsp + 128] - LONG $0x06e6c040 // shl sil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf1 // or cl, sil - WORD $0x0841; BYTE $0xdc // or r12b, bl - WORD $0x0844; BYTE $0xf9 // or cl, r15b - QUAD $0x0000011024bc8b4c // mov r15, qword [rsp + 272] - QUAD $0x00000088249cb60f // movzx ebx, byte [rsp + 136] - WORD $0xdb00 // add bl, bl - LONG $0x58245c02 // add bl, byte [rsp + 88] - WORD $0xde89 // mov esi, ebx - QUAD $0x00000090249cb60f // movzx ebx, byte [rsp + 144] - WORD $0xe3c0; BYTE $0x02 // shl bl, 2 - WORD $0x0840; BYTE $0xf3 // or bl, sil - WORD $0xde89 // mov esi, ebx - LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd6950f40 // setne sil + WORD $0x0840; BYTE $0xc6 // or sil, al + WORD $0x0045; BYTE $0xed // add r13b, r13b + LONG $0x246c0244; BYTE $0x30 // add r13b, byte [rsp + 48] + WORD $0x8944; BYTE $0xe8 // mov eax, r13d + LONG $0x05e4c041 // shl r12b, 5 + LONG $0x6cb60f44; WORD $0x4824 // movzx r13d, byte [rsp + 72] + LONG $0x06e5c041 // shl r13b, 6 + WORD $0x0845; BYTE $0xe5 // or r13b, r12b + LONG $0x64b60f44; WORD $0x3824 // movzx r12d, byte [rsp + 56] + LONG $0x02e4c041 // shl r12b, 2 + WORD $0x0841; BYTE $0xc4 // or r12b, al + LONG $0x244cb60f; BYTE $0x40 // movzx ecx, byte [rsp + 64] + WORD $0xc900 // add cl, cl + LONG $0x28244c02 // add cl, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x1c // movzx eax, byte [rsp + 28] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0844; BYTE $0xe8 // or al, r13b + LONG $0x1c244488 // mov byte [rsp + 28], al + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0844; BYTE $0xe0 // or al, r12b WORD $0xe3c0; BYTE $0x03 // shl bl, 3 - WORD $0x0840; BYTE $0xf3 // or bl, sil - WORD $0xde89 // mov esi, ebx - LONG $0x245cb60f; BYTE $0x60 // movzx ebx, byte [rsp + 96] - WORD $0xe3c0; BYTE $0x04 // shl bl, 4 - WORD $0x0840; BYTE $0xf3 // or bl, sil - WORD $0xde89 // mov esi, ebx - LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] - WORD $0xe3c0; BYTE $0x05 // shl bl, 5 - WORD $0x0840; BYTE $0xf3 // or bl, sil - WORD $0x8845; BYTE $0x27 // mov byte [r15], r12b - LONG $0x2474b60f; BYTE $0x48 // movzx esi, byte [rsp + 72] - LONG $0x06e6c040 // shl sil, 6 + WORD $0xcb08 // or bl, cl + LONG $0x6cb60f44; WORD $0x2024 // movzx r13d, byte [rsp + 32] + LONG $0x04e5c041 // shl r13b, 4 + WORD $0x0841; BYTE $0xc5 // or r13b, al + QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + LONG $0x20248488; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 288], al + LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] + WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + QUAD $0x00008824b4b60f44; BYTE $0x00 // movzx r14d, byte [rsp + 136] LONG $0x07e6c041 // shl r14b, 7 - WORD $0x0841; BYTE $0xf6 // or r14b, sil - LONG $0x014f8841 // mov byte [r15 + 1], cl - WORD $0x0841; BYTE $0xde // or r14b, bl - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] + WORD $0x0841; BYTE $0xc6 // or r14b, al + QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] + LONG $0x58244c02 // add cl, byte [rsp + 88] + LONG $0x245cb60f; BYTE $0x78 // movzx ebx, byte [rsp + 120] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0xcb08 // or bl, cl + LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000140248cb60f // movzx ecx, byte [rsp + 320] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd908 // or cl, bl - LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - WORD $0xe0c0; BYTE $0x07 // shl al, 7 - WORD $0xd808 // or al, bl - WORD $0xc808 // or al, cl - LONG $0x02778845 // mov byte [r15 + 2], r14b - LONG $0x03478841 // mov byte [r15 + 3], al + WORD $0x8941; BYTE $0xcc // mov r12d, ecx + QUAD $0x00000110248c8b48 // mov rcx, qword [rsp + 272] + LONG $0x245cb60f; BYTE $0x68 // movzx ebx, byte [rsp + 104] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xe3 // or bl, r12b + LONG $0x2444b60f; BYTE $0x1c // movzx eax, byte [rsp + 28] + WORD $0x0844; BYTE $0xe8 // or al, r13b + QUAD $0x0000b024a4b60f44; BYTE $0x00 // movzx r12d, byte [rsp + 176] + LONG $0x05e4c041 // shl r12b, 5 + LONG $0x06e7c041 // shl r15b, 6 + WORD $0x0845; BYTE $0xe7 // or r15b, r12b + QUAD $0x0000012024b40a44 // or r14b, byte [rsp + 288] + LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xf8 // or r8b, r15b + WORD $0x0841; BYTE $0xd8 // or r8b, bl + WORD $0x0045; BYTE $0xdb // add r11b, r11b + QUAD $0x00000098249c0244 // add r11b, byte [rsp + 152] + LONG $0x02e2c041 // shl r10b, 2 + WORD $0x0845; BYTE $0xda // or r10b, r11b + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xd1 // or r9b, r10b + QUAD $0x000000a0249cb60f // movzx ebx, byte [rsp + 160] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xcb // or bl, r9b + WORD $0x8941; BYTE $0xd9 // mov r9d, ebx + WORD $0x0188 // mov byte [rcx], al + QUAD $0x000000a8249cb60f // movzx ebx, byte [rsp + 168] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e7c040 // shl dil, 6 + WORD $0x0840; BYTE $0xdf // or dil, bl + LONG $0x01718844 // mov byte [rcx + 1], r14b + LONG $0x07e6c040 // shl sil, 7 + WORD $0x0840; BYTE $0xfe // or sil, dil + WORD $0x0844; BYTE $0xce // or sil, r9b + LONG $0x02418844 // mov byte [rcx + 2], r8b + LONG $0x03718840 // mov byte [rcx + 3], sil LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 - LONG $0x04c78349 // add r15, 4 - QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + LONG $0x04c18348 // add rcx, 4 + WORD $0x8949; BYTE $0xcd // mov r13, rcx + QUAD $0x000000b824848348; BYTE $0xff // add qword [rsp + 184], -1 JNE LBB5_27 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000a0249c8b4c // mov r11, qword [rsp + 160] + QUAD $0x000000c0249c8b4c // mov r11, qword [rsp + 192] LBB5_29: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB5_157 + JGE LBB5_164 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 - JNE LBB5_136 + JNE LBB5_134 WORD $0xff31 // xor edi, edi - JMP LBB5_138 + JMP LBB5_136 LBB5_32: WORD $0xff83; BYTE $0x02 // cmp edi, 2 - JE LBB5_105 + JE LBB5_108 WORD $0xff83; BYTE $0x03 // cmp edi, 3 - JNE LBB5_157 + JNE LBB5_164 WORD $0x8a44; BYTE $0x1e // mov r11b, byte [rsi] LONG $0x1f728d4d // lea r14, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -27025,33 +28169,34 @@ LBB5_32: WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d LBB5_36: - WORD $0x3a44; BYTE $0x1a // cmp r11b, byte [rdx] - LONG $0x01528d48 // lea rdx, [rdx + 1] - WORD $0x950f; BYTE $0xd3 // setne bl - WORD $0xdbf6 // neg bl - LONG $0x07708d48 // lea rsi, [rax + 7] - WORD $0x8548; BYTE $0xc0 // test rax, rax - LONG $0xf0490f48 // cmovns rsi, rax - LONG $0x03fec148 // sar rsi, 3 - LONG $0x0cb60f45; BYTE $0x37 // movzx r9d, byte [r15 + rsi] - WORD $0x3044; BYTE $0xcb // xor bl, r9b - QUAD $0x00000000f5048d44 // lea r8d, [8*rsi] - WORD $0xc189 // mov ecx, eax - WORD $0x2944; BYTE $0xc1 // sub ecx, r8d - LONG $0x000001bf; BYTE $0x00 // mov edi, 1 - WORD $0xe7d3 // shl edi, cl - WORD $0x2040; BYTE $0xdf // and dil, bl - WORD $0x3044; BYTE $0xcf // xor dil, r9b - LONG $0x373c8841 // mov byte [r15 + rsi], dil - LONG $0x01c08348 // add rax, 1 - LONG $0x08f88348 // cmp rax, 8 + WORD $0x3a44; BYTE $0x1a // cmp r11b, byte [rdx] + LONG $0x01528d48 // lea rdx, [rdx + 1] + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xdbf6 // neg bl + LONG $0x07708d48 // lea rsi, [rax + 7] + WORD $0x8548; BYTE $0xc0 // test rax, rax + LONG $0xf0490f48 // cmovns rsi, rax + LONG $0x03fec148 // sar rsi, 3 + WORD $0x894d; BYTE $0xef // mov r15, r13 + LONG $0x4cb60f45; WORD $0x0035 // movzx r9d, byte [r13 + rsi] + WORD $0x3044; BYTE $0xcb // xor bl, r9b + QUAD $0x00000000f5048d44 // lea r8d, [8*rsi] + WORD $0xc189 // mov ecx, eax + WORD $0x2944; BYTE $0xc1 // sub ecx, r8d + LONG $0x000001bf; BYTE $0x00 // mov edi, 1 + WORD $0xe7d3 // shl edi, cl + WORD $0x2040; BYTE $0xdf // and dil, bl + WORD $0x3044; BYTE $0xcf // xor dil, r9b + LONG $0x357c8841; BYTE $0x00 // mov byte [r13 + rsi], dil + LONG $0x01c08348 // add rax, 1 + LONG $0x08f88348 // cmp rax, 8 JNE LBB5_36 - LONG $0x01c78349 // add r15, 1 + LONG $0x01c58349 // add r13, 1 LBB5_38: LONG $0x05fec149 // sar r14, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB5_128 + JL LBB5_46 LONG $0x20fe8349 // cmp r14, 32 LONG $0x245c8944; BYTE $0x1c // mov dword [rsp + 28], r11d QUAD $0x000001182494894c // mov qword [rsp + 280], r10 @@ -27060,20 +28205,20 @@ LBB5_38: WORD $0x894c; BYTE $0xf0 // mov rax, r14 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xd0 // add rax, rdx - WORD $0x3949; BYTE $0xc7 // cmp r15, rax + WORD $0x3949; BYTE $0xc5 // cmp r13, rax JAE LBB5_165 - LONG $0xb7048d4b // lea rax, [r15 + 4*r14] + QUAD $0x00000000b5048d4a // lea rax, [4*r14] + WORD $0x014c; BYTE $0xe8 // add rax, r13 WORD $0x3948; BYTE $0xc2 // cmp rdx, rax JAE LBB5_165 LBB5_42: WORD $0xc031 // xor eax, eax QUAD $0x0000017824848948 // mov qword [rsp + 376], rax - WORD $0x894d; BYTE $0xfd // mov r13, r15 LBB5_43: QUAD $0x0000017824b42b4c // sub r14, qword [rsp + 376] - QUAD $0x000000b024b4894c // mov qword [rsp + 176], r14 + QUAD $0x000000a024b4894c // mov qword [rsp + 160], r14 LBB5_44: LONG $0x1f5a3a44 // cmp r11b, byte [rdx + 31] @@ -27085,31 +28230,31 @@ LBB5_44: LONG $0x1c5a3a44 // cmp r11b, byte [rdx + 28] LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] LONG $0x1b5a3a44 // cmp r11b, byte [rdx + 27] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] - LONG $0x1a5a3a44 // cmp r11b, byte [rdx + 26] LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] - LONG $0x195a3a44 // cmp r11b, byte [rdx + 25] + LONG $0x1a5a3a44 // cmp r11b, byte [rdx + 26] LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] + LONG $0x195a3a44 // cmp r11b, byte [rdx + 25] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x175a3a44 // cmp r11b, byte [rdx + 23] LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] LONG $0x165a3a44 // cmp r11b, byte [rdx + 22] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] - LONG $0x155a3a44 // cmp r11b, byte [rdx + 21] LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] - LONG $0x145a3a44 // cmp r11b, byte [rdx + 20] + LONG $0x155a3a44 // cmp r11b, byte [rdx + 21] LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] + LONG $0x145a3a44 // cmp r11b, byte [rdx + 20] + LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] LONG $0x135a3a44 // cmp r11b, byte [rdx + 19] - QUAD $0x000000902494950f // setne byte [rsp + 144] - LONG $0x125a3a44 // cmp r11b, byte [rdx + 18] QUAD $0x000000882494950f // setne byte [rsp + 136] - LONG $0x115a3a44 // cmp r11b, byte [rdx + 17] + LONG $0x125a3a44 // cmp r11b, byte [rdx + 18] QUAD $0x000000802494950f // setne byte [rsp + 128] + LONG $0x115a3a44 // cmp r11b, byte [rdx + 17] + LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] LONG $0x0f5a3a44 // cmp r11b, byte [rdx + 15] LONG $0xd6950f41 // setne r14b LONG $0x0e5a3a44 // cmp r11b, byte [rdx + 14] - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] - LONG $0x0d5a3a44 // cmp r11b, byte [rdx + 13] LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + LONG $0x0d5a3a44 // cmp r11b, byte [rdx + 13] + LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] LONG $0x0c5a3a44 // cmp r11b, byte [rdx + 12] LONG $0xd4950f41 // setne r12b LONG $0x0b5a3a44 // cmp r11b, byte [rdx + 11] @@ -27124,7 +28269,7 @@ LBB5_44: LONG $0xd7950f40 // setne dil LONG $0x1c24448b // mov eax, dword [rsp + 28] WORD $0x423a; BYTE $0x06 // cmp al, byte [rdx + 6] - QUAD $0x000000a82494950f // setne byte [rsp + 168] + QUAD $0x000000b02494950f // setne byte [rsp + 176] LONG $0x1c24448b // mov eax, dword [rsp + 28] WORD $0x423a; BYTE $0x05 // cmp al, byte [rdx + 5] LONG $0xd1950f41 // setne r9b @@ -27139,7 +28284,7 @@ LBB5_44: WORD $0x950f; BYTE $0xd1 // setne cl LONG $0x1c24448b // mov eax, dword [rsp + 28] WORD $0x023a // cmp al, byte [rdx] - QUAD $0x000000a02494950f // setne byte [rsp + 160] + QUAD $0x000000a82494950f // setne byte [rsp + 168] LONG $0x1c24448b // mov eax, dword [rsp + 28] WORD $0x423a; BYTE $0x01 // cmp al, byte [rdx + 1] WORD $0x950f; BYTE $0xd0 // setne al @@ -27150,12 +28295,12 @@ LBB5_44: QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x1c245c8b // mov ebx, dword [rsp + 28] WORD $0x5a3a; BYTE $0x10 // cmp bl, byte [rdx + 16] - LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] + QUAD $0x000000902494950f // setne byte [rsp + 144] LONG $0x1c245c8b // mov ebx, dword [rsp + 28] WORD $0x5a3a; BYTE $0x18 // cmp bl, byte [rdx + 24] LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] WORD $0xc000 // add al, al - LONG $0xa0248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 160] + LONG $0xa8248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 168] WORD $0xe1c0; BYTE $0x02 // shl cl, 2 WORD $0xc108 // or cl, al LONG $0x03e6c040 // shl sil, 3 @@ -27164,7 +28309,7 @@ LBB5_44: WORD $0x0841; BYTE $0xf0 // or r8b, sil LONG $0x05e1c041 // shl r9b, 5 WORD $0x0845; BYTE $0xc1 // or r9b, r8b - QUAD $0x000000a82484b60f // movzx eax, byte [rsp + 168] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e7c040 // shl dil, 7 WORD $0x0840; BYTE $0xc7 // or dil, al @@ -27179,51 +28324,51 @@ LBB5_44: LONG $0x245c8b44; BYTE $0x1c // mov r11d, dword [rsp + 28] LONG $0x04e4c041 // shl r12b, 4 WORD $0x0845; BYTE $0xfc // or r12b, r15b - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xe0 // or al, r12b - LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] + LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] WORD $0xe1c0; BYTE $0x06 // shl cl, 6 LONG $0x07e6c041 // shl r14b, 7 WORD $0x0841; BYTE $0xce // or r14b, cl WORD $0x0841; BYTE $0xc6 // or r14b, al LONG $0x01758845 // mov byte [r13 + 1], r14b - QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] WORD $0xc000 // add al, al - LONG $0x50244402 // add al, byte [rsp + 80] + LONG $0x90248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 144] WORD $0xc189 // mov ecx, eax - QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x245cb60f; BYTE $0x68 // movzx ebx, byte [rsp + 104] + LONG $0x245cb60f; BYTE $0x60 // movzx ebx, byte [rsp + 96] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0xd808 // or al, bl WORD $0xc808 // or al, cl LONG $0x02458841 // mov byte [r13 + 2], al - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al LONG $0x40244402 // add al, byte [rsp + 64] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -27244,17 +28389,59 @@ LBB5_44: LONG $0x03458841 // mov byte [r13 + 3], al LONG $0x20c28348 // add rdx, 32 LONG $0x04c58349 // add r13, 4 - QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 + QUAD $0x000000a024848348; BYTE $0xff // add qword [rsp + 160], -1 JNE LBB5_44 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] QUAD $0x0000018024b48b4c // mov r14, qword [rsp + 384] - JMP LBB5_129 LBB5_46: + LONG $0x05e6c149 // shl r14, 5 + WORD $0x394d; BYTE $0xd6 // cmp r14, r10 + JGE LBB5_164 + WORD $0x894d; BYTE $0xd0 // mov r8, r10 + WORD $0x294d; BYTE $0xf0 // sub r8, r14 + WORD $0xf749; BYTE $0xd6 // not r14 + WORD $0x014d; BYTE $0xd6 // add r14, r10 + JE LBB5_122 + WORD $0x894d; BYTE $0xc2 // mov r10, r8 + LONG $0xfee28349 // and r10, -2 + WORD $0xf631 // xor esi, esi + +LBB5_139: + LONG $0x321c3a44 // cmp r11b, byte [rdx + rsi] + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xd8f6 // neg al + WORD $0x8948; BYTE $0xf7 // mov rdi, rsi + LONG $0x03efc148 // shr rdi, 3 + WORD $0xf189 // mov ecx, esi + WORD $0xe180; BYTE $0x06 // and cl, 6 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + LONG $0x4cb60f45; WORD $0x003d // movzx r9d, byte [r13 + rdi] + WORD $0x3044; BYTE $0xc8 // xor al, r9b + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xcb // xor bl, r9b + LONG $0x3d5c8841; BYTE $0x00 // mov byte [r13 + rdi], bl + LONG $0x325c3a44; BYTE $0x01 // cmp r11b, byte [rdx + rsi + 1] + LONG $0x02768d48 // lea rsi, [rsi + 2] + LONG $0xd1950f41 // setne r9b + WORD $0xf641; BYTE $0xd9 // neg r9b + WORD $0x3041; BYTE $0xd9 // xor r9b, bl + WORD $0xc980; BYTE $0x01 // or cl, 1 + WORD $0x01b0 // mov al, 1 + WORD $0xe0d2 // shl al, cl + WORD $0x2044; BYTE $0xc8 // and al, r9b + WORD $0xd830 // xor al, bl + LONG $0x3d448841; BYTE $0x00 // mov byte [r13 + rdi], al + WORD $0x3949; BYTE $0xf2 // cmp r10, rsi + JNE LBB5_139 + JMP LBB5_155 + +LBB5_49: WORD $0xff83; BYTE $0x07 // cmp edi, 7 - JE LBB5_117 + JE LBB5_123 WORD $0xff83; BYTE $0x08 // cmp edi, 8 - JNE LBB5_157 + JNE LBB5_164 WORD $0x8b4c; BYTE $0x36 // mov r14, qword [rsi] LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -27264,10 +28451,10 @@ LBB5_46: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB5_52 + JE LBB5_55 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB5_50: +LBB5_53: WORD $0x3b4c; BYTE $0x32 // cmp r14, qword [rdx] LONG $0x08528d48 // lea rdx, [rdx + 8] WORD $0x950f; BYTE $0xd3 // setne bl @@ -27276,7 +28463,8 @@ LBB5_50: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf0490f48 // cmovns rsi, rax LONG $0x03fec148 // sar rsi, 3 - LONG $0x04b60f45; BYTE $0x37 // movzx r8d, byte [r15 + rsi] + WORD $0x894d; BYTE $0xe9 // mov r9, r13 + LONG $0x44b60f45; WORD $0x0035 // movzx r8d, byte [r13 + rsi] WORD $0x3044; BYTE $0xc3 // xor bl, r8b LONG $0x00f53c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rsi] WORD $0xc189 // mov ecx, eax @@ -27285,22 +28473,22 @@ LBB5_50: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xdf // and dil, bl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x373c8841 // mov byte [r15 + rsi], dil + LONG $0x357c8841; BYTE $0x00 // mov byte [r13 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB5_50 - LONG $0x01c78349 // add r15, 1 + JNE LBB5_53 + LONG $0x01c58349 // add r13, 1 -LBB5_52: +LBB5_55: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB5_56 + JL LBB5_59 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b0249c894c // mov qword [rsp + 176], r11 QUAD $0x000000a0249c894c // mov qword [rsp + 160], r11 + QUAD $0x000000a8249c894c // mov qword [rsp + 168], r11 -LBB5_54: - QUAD $0x0000011024bc894c // mov qword [rsp + 272], r15 +LBB5_57: + QUAD $0x0000011024ac894c // mov qword [rsp + 272], r13 LONG $0xf8b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 248] LONG $0x2454950f; BYTE $0x1c // setne byte [rsp + 28] LONG $0xf0b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 240] @@ -27310,31 +28498,31 @@ LBB5_54: LONG $0xe0b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 224] LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] LONG $0xd8b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 216] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] - LONG $0xd0b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 208] LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] - LONG $0xc8b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 200] + LONG $0xd0b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 208] LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] + LONG $0xc8b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 200] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0xb8b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 184] LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] LONG $0xb0b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 176] LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0xa8b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 168] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] - LONG $0xa0b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 160] LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] - LONG $0x98b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 152] + LONG $0xa0b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 160] LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] - LONG $0x90b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 144] + LONG $0x98b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 152] LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] - LONG $0x88b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 136] + LONG $0x90b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 144] QUAD $0x000000902494950f // setne byte [rsp + 144] + LONG $0x88b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 136] + QUAD $0x000000882494950f // setne byte [rsp + 136] LONG $0x78723b4c // cmp r14, qword [rdx + 120] LONG $0xd0950f41 // setne r8b LONG $0x70723b4c // cmp r14, qword [rdx + 112] - QUAD $0x000000802494950f // setne byte [rsp + 128] - LONG $0x68723b4c // cmp r14, qword [rdx + 104] LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + LONG $0x68723b4c // cmp r14, qword [rdx + 104] + LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] LONG $0x60723b4c // cmp r14, qword [rdx + 96] LONG $0xd3950f41 // setne r11b LONG $0x58723b4c // cmp r14, qword [rdx + 88] @@ -27352,28 +28540,28 @@ LBB5_54: LONG $0x20723b4c // cmp r14, qword [rdx + 32] WORD $0x950f; BYTE $0xd1 // setne cl LONG $0x18723b4c // cmp r14, qword [rdx + 24] - LONG $0xd5950f41 // setne r13b - LONG $0x10723b4c // cmp r14, qword [rdx + 16] LONG $0xd4950f41 // setne r12b + LONG $0x10723b4c // cmp r14, qword [rdx + 16] + LONG $0xd5950f41 // setne r13b WORD $0x3b4c; BYTE $0x32 // cmp r14, qword [rdx] - QUAD $0x000000a82494950f // setne byte [rsp + 168] + QUAD $0x000000b02494950f // setne byte [rsp + 176] LONG $0x08723b4c // cmp r14, qword [rdx + 8] LONG $0xd7950f41 // setne r15b LONG $0x40723b4c // cmp r14, qword [rdx + 64] QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x80b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 128] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] LONG $0xc0b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 192] - QUAD $0x000000882494950f // setne byte [rsp + 136] + QUAD $0x000000802494950f // setne byte [rsp + 128] WORD $0x0045; BYTE $0xff // add r15b, r15b - QUAD $0x000000a824bc0244 // add r15b, byte [rsp + 168] - LONG $0x02e4c041 // shl r12b, 2 - WORD $0x0845; BYTE $0xfc // or r12b, r15b + QUAD $0x000000b024bc0244 // add r15b, byte [rsp + 176] + LONG $0x02e5c041 // shl r13b, 2 + WORD $0x0845; BYTE $0xfd // or r13b, r15b QUAD $0x0000011024bc8b4c // mov r15, qword [rsp + 272] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xe5 // or r13b, r12b + LONG $0x03e4c041 // shl r12b, 3 + WORD $0x0845; BYTE $0xec // or r12b, r13b WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0x0844; BYTE $0xe9 // or cl, r13b + WORD $0x0844; BYTE $0xe1 // or cl, r12b LONG $0x05e6c040 // shl sil, 5 WORD $0x0840; BYTE $0xce // or sil, cl WORD $0xe3c0; BYTE $0x06 // shl bl, 6 @@ -27389,32 +28577,32 @@ LBB5_54: WORD $0x0845; BYTE $0xca // or r10b, r9b LONG $0x04e3c041 // shl r11b, 4 WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xd8 // or al, r11b - QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] + LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] WORD $0xe1c0; BYTE $0x06 // shl cl, 6 LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xc8 // or r8b, cl WORD $0x0841; BYTE $0xc0 // or r8b, al LONG $0x01478845 // mov byte [r15 + 1], r8b - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] WORD $0xc000 // add al, al - LONG $0x70244402 // add al, byte [rsp + 112] + LONG $0x68244402 // add al, byte [rsp + 104] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -27425,15 +28613,15 @@ LBB5_54: WORD $0xd808 // or al, bl WORD $0xc808 // or al, cl LONG $0x02478841 // mov byte [r15 + 2], al - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x88248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 136] + LONG $0x80248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 128] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -27454,56 +28642,58 @@ LBB5_54: LONG $0x03478841 // mov byte [r15 + 3], al LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 LONG $0x04c78349 // add r15, 4 - QUAD $0x000000a024848348; BYTE $0xff // add qword [rsp + 160], -1 - JNE LBB5_54 + WORD $0x894d; BYTE $0xfd // mov r13, r15 + QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + JNE LBB5_57 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b0249c8b4c // mov r11, qword [rsp + 176] + QUAD $0x000000a0249c8b4c // mov r11, qword [rsp + 160] -LBB5_56: +LBB5_59: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB5_157 + JGE LBB5_164 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 - JE LBB5_93 + JE LBB5_96 WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0xff31 // xor edi, edi -LBB5_59: - WORD $0x3b4c; BYTE $0x32 // cmp r14, qword [rdx] - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0xd8f6 // neg al - WORD $0x8948; BYTE $0xfe // mov rsi, rdi - LONG $0x03eec148 // shr rsi, 3 - LONG $0x0cb60f45; BYTE $0x37 // movzx r9d, byte [r15 + rsi] - WORD $0xf989 // mov ecx, edi - WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b3 // mov bl, 1 - WORD $0xe3d2 // shl bl, cl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x371c8841 // mov byte [r15 + rsi], bl - LONG $0x02c78348 // add rdi, 2 - LONG $0x08723b4c // cmp r14, qword [rdx + 8] - LONG $0x10528d48 // lea rdx, [rdx + 16] - LONG $0xd1950f41 // setne r9b - WORD $0xf641; BYTE $0xd9 // neg r9b - WORD $0x3041; BYTE $0xd9 // xor r9b, bl - WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0x2044; BYTE $0xc8 // and al, r9b - WORD $0xd830 // xor al, bl - LONG $0x37048841 // mov byte [r15 + rsi], al - WORD $0x3949; BYTE $0xfa // cmp r10, rdi - JNE LBB5_59 +LBB5_62: + WORD $0x3b4c; BYTE $0x32 // cmp r14, qword [rdx] + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xd8f6 // neg al + WORD $0x8948; BYTE $0xfe // mov rsi, rdi + LONG $0x03eec148 // shr rsi, 3 + WORD $0x894d; BYTE $0xeb // mov r11, r13 + LONG $0x4cb60f45; WORD $0x0035 // movzx r9d, byte [r13 + rsi] + WORD $0xf989 // mov ecx, edi + WORD $0xe180; BYTE $0x06 // and cl, 6 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0x3044; BYTE $0xc8 // xor al, r9b + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xcb // xor bl, r9b + LONG $0x355c8841; BYTE $0x00 // mov byte [r13 + rsi], bl + LONG $0x02c78348 // add rdi, 2 + LONG $0x08723b4c // cmp r14, qword [rdx + 8] + LONG $0x10528d48 // lea rdx, [rdx + 16] + LONG $0xd1950f41 // setne r9b + WORD $0xf641; BYTE $0xd9 // neg r9b + WORD $0x3041; BYTE $0xd9 // xor r9b, bl + WORD $0xc980; BYTE $0x01 // or cl, 1 + WORD $0x01b0 // mov al, 1 + WORD $0xe0d2 // shl al, cl + WORD $0x2044; BYTE $0xc8 // and al, r9b + WORD $0xd830 // xor al, bl + LONG $0x35448841; BYTE $0x00 // mov byte [r13 + rsi], al + WORD $0x3949; BYTE $0xfa // cmp r10, rdi + JNE LBB5_62 JMP LBB5_146 -LBB5_60: +LBB5_63: LONG $0x36b70f44 // movzx r14d, word [rsi] LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -27513,10 +28703,10 @@ LBB5_60: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB5_64 + JE LBB5_67 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB5_62: +LBB5_65: LONG $0x323b4466 // cmp r14w, word [rdx] LONG $0x02528d48 // lea rdx, [rdx + 2] WORD $0x950f; BYTE $0xd3 // setne bl @@ -27525,7 +28715,8 @@ LBB5_62: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf0490f48 // cmovns rsi, rax LONG $0x03fec148 // sar rsi, 3 - LONG $0x04b60f45; BYTE $0x37 // movzx r8d, byte [r15 + rsi] + WORD $0x894d; BYTE $0xe9 // mov r9, r13 + LONG $0x44b60f45; WORD $0x0035 // movzx r8d, byte [r13 + rsi] WORD $0x3044; BYTE $0xc3 // xor bl, r8b LONG $0x00f53c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rsi] WORD $0xc189 // mov ecx, eax @@ -27534,22 +28725,22 @@ LBB5_62: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xdf // and dil, bl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x373c8841 // mov byte [r15 + rsi], dil + LONG $0x357c8841; BYTE $0x00 // mov byte [r13 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB5_62 - LONG $0x01c78349 // add r15, 1 + JNE LBB5_65 + LONG $0x01c58349 // add r13, 1 -LBB5_64: +LBB5_67: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB5_68 + JL LBB5_71 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b0249c894c // mov qword [rsp + 176], r11 QUAD $0x000000a0249c894c // mov qword [rsp + 160], r11 + QUAD $0x000000a8249c894c // mov qword [rsp + 168], r11 -LBB5_66: - QUAD $0x0000011024bc894c // mov qword [rsp + 272], r15 +LBB5_69: + QUAD $0x0000011024ac894c // mov qword [rsp + 272], r13 LONG $0x723b4466; BYTE $0x3e // cmp r14w, word [rdx + 62] LONG $0x2454950f; BYTE $0x1c // setne byte [rsp + 28] LONG $0x723b4466; BYTE $0x3c // cmp r14w, word [rdx + 60] @@ -27559,31 +28750,31 @@ LBB5_66: LONG $0x723b4466; BYTE $0x38 // cmp r14w, word [rdx + 56] LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] LONG $0x723b4466; BYTE $0x36 // cmp r14w, word [rdx + 54] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] - LONG $0x723b4466; BYTE $0x34 // cmp r14w, word [rdx + 52] LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] - LONG $0x723b4466; BYTE $0x32 // cmp r14w, word [rdx + 50] + LONG $0x723b4466; BYTE $0x34 // cmp r14w, word [rdx + 52] LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] + LONG $0x723b4466; BYTE $0x32 // cmp r14w, word [rdx + 50] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x723b4466; BYTE $0x2e // cmp r14w, word [rdx + 46] LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] LONG $0x723b4466; BYTE $0x2c // cmp r14w, word [rdx + 44] LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0x723b4466; BYTE $0x2a // cmp r14w, word [rdx + 42] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] - LONG $0x723b4466; BYTE $0x28 // cmp r14w, word [rdx + 40] LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] - LONG $0x723b4466; BYTE $0x26 // cmp r14w, word [rdx + 38] + LONG $0x723b4466; BYTE $0x28 // cmp r14w, word [rdx + 40] LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] - LONG $0x723b4466; BYTE $0x24 // cmp r14w, word [rdx + 36] + LONG $0x723b4466; BYTE $0x26 // cmp r14w, word [rdx + 38] LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] - LONG $0x723b4466; BYTE $0x22 // cmp r14w, word [rdx + 34] + LONG $0x723b4466; BYTE $0x24 // cmp r14w, word [rdx + 36] QUAD $0x000000902494950f // setne byte [rsp + 144] + LONG $0x723b4466; BYTE $0x22 // cmp r14w, word [rdx + 34] + QUAD $0x000000882494950f // setne byte [rsp + 136] LONG $0x723b4466; BYTE $0x1e // cmp r14w, word [rdx + 30] LONG $0xd0950f41 // setne r8b LONG $0x723b4466; BYTE $0x1c // cmp r14w, word [rdx + 28] - QUAD $0x000000802494950f // setne byte [rsp + 128] - LONG $0x723b4466; BYTE $0x1a // cmp r14w, word [rdx + 26] LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + LONG $0x723b4466; BYTE $0x1a // cmp r14w, word [rdx + 26] + LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] LONG $0x723b4466; BYTE $0x18 // cmp r14w, word [rdx + 24] LONG $0xd3950f41 // setne r11b LONG $0x723b4466; BYTE $0x16 // cmp r14w, word [rdx + 22] @@ -27601,28 +28792,28 @@ LBB5_66: LONG $0x723b4466; BYTE $0x08 // cmp r14w, word [rdx + 8] WORD $0x950f; BYTE $0xd1 // setne cl LONG $0x723b4466; BYTE $0x06 // cmp r14w, word [rdx + 6] - LONG $0xd5950f41 // setne r13b - LONG $0x723b4466; BYTE $0x04 // cmp r14w, word [rdx + 4] LONG $0xd4950f41 // setne r12b + LONG $0x723b4466; BYTE $0x04 // cmp r14w, word [rdx + 4] + LONG $0xd5950f41 // setne r13b LONG $0x323b4466 // cmp r14w, word [rdx] - QUAD $0x000000a82494950f // setne byte [rsp + 168] + QUAD $0x000000b02494950f // setne byte [rsp + 176] LONG $0x723b4466; BYTE $0x02 // cmp r14w, word [rdx + 2] LONG $0xd7950f41 // setne r15b LONG $0x723b4466; BYTE $0x10 // cmp r14w, word [rdx + 16] QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x723b4466; BYTE $0x20 // cmp r14w, word [rdx + 32] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] LONG $0x723b4466; BYTE $0x30 // cmp r14w, word [rdx + 48] - QUAD $0x000000882494950f // setne byte [rsp + 136] + QUAD $0x000000802494950f // setne byte [rsp + 128] WORD $0x0045; BYTE $0xff // add r15b, r15b - QUAD $0x000000a824bc0244 // add r15b, byte [rsp + 168] - LONG $0x02e4c041 // shl r12b, 2 - WORD $0x0845; BYTE $0xfc // or r12b, r15b + QUAD $0x000000b024bc0244 // add r15b, byte [rsp + 176] + LONG $0x02e5c041 // shl r13b, 2 + WORD $0x0845; BYTE $0xfd // or r13b, r15b QUAD $0x0000011024bc8b4c // mov r15, qword [rsp + 272] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xe5 // or r13b, r12b + LONG $0x03e4c041 // shl r12b, 3 + WORD $0x0845; BYTE $0xec // or r12b, r13b WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0x0844; BYTE $0xe9 // or cl, r13b + WORD $0x0844; BYTE $0xe1 // or cl, r12b LONG $0x05e6c040 // shl sil, 5 WORD $0x0840; BYTE $0xce // or sil, cl WORD $0xe3c0; BYTE $0x06 // shl bl, 6 @@ -27638,32 +28829,32 @@ LBB5_66: WORD $0x0845; BYTE $0xca // or r10b, r9b LONG $0x04e3c041 // shl r11b, 4 WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xd8 // or al, r11b - QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] + LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] WORD $0xe1c0; BYTE $0x06 // shl cl, 6 LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xc8 // or r8b, cl WORD $0x0841; BYTE $0xc0 // or r8b, al LONG $0x01478845 // mov byte [r15 + 1], r8b - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] WORD $0xc000 // add al, al - LONG $0x70244402 // add al, byte [rsp + 112] + LONG $0x68244402 // add al, byte [rsp + 104] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -27674,15 +28865,15 @@ LBB5_66: WORD $0xd808 // or al, bl WORD $0xc808 // or al, cl LONG $0x02478841 // mov byte [r15 + 2], al - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x88248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 136] + LONG $0x80248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 128] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -27703,56 +28894,58 @@ LBB5_66: LONG $0x03478841 // mov byte [r15 + 3], al LONG $0x40c28348 // add rdx, 64 LONG $0x04c78349 // add r15, 4 - QUAD $0x000000a024848348; BYTE $0xff // add qword [rsp + 160], -1 - JNE LBB5_66 + WORD $0x894d; BYTE $0xfd // mov r13, r15 + QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + JNE LBB5_69 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b0249c8b4c // mov r11, qword [rsp + 176] + QUAD $0x000000a0249c8b4c // mov r11, qword [rsp + 160] -LBB5_68: +LBB5_71: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB5_157 + JGE LBB5_164 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 - JE LBB5_82 + JE LBB5_85 WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0xff31 // xor edi, edi -LBB5_71: - LONG $0x323b4466 // cmp r14w, word [rdx] - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0xd8f6 // neg al - WORD $0x8948; BYTE $0xfe // mov rsi, rdi - LONG $0x03eec148 // shr rsi, 3 - LONG $0x0cb60f45; BYTE $0x37 // movzx r9d, byte [r15 + rsi] - WORD $0xf989 // mov ecx, edi - WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b3 // mov bl, 1 - WORD $0xe3d2 // shl bl, cl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x371c8841 // mov byte [r15 + rsi], bl - LONG $0x02c78348 // add rdi, 2 - LONG $0x723b4466; BYTE $0x02 // cmp r14w, word [rdx + 2] - LONG $0x04528d48 // lea rdx, [rdx + 4] - LONG $0xd1950f41 // setne r9b - WORD $0xf641; BYTE $0xd9 // neg r9b - WORD $0x3041; BYTE $0xd9 // xor r9b, bl - WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0x2044; BYTE $0xc8 // and al, r9b - WORD $0xd830 // xor al, bl - LONG $0x37048841 // mov byte [r15 + rsi], al - WORD $0x3949; BYTE $0xfa // cmp r10, rdi - JNE LBB5_71 +LBB5_74: + LONG $0x323b4466 // cmp r14w, word [rdx] + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xd8f6 // neg al + WORD $0x8948; BYTE $0xfe // mov rsi, rdi + LONG $0x03eec148 // shr rsi, 3 + WORD $0x894d; BYTE $0xeb // mov r11, r13 + LONG $0x4cb60f45; WORD $0x0035 // movzx r9d, byte [r13 + rsi] + WORD $0xf989 // mov ecx, edi + WORD $0xe180; BYTE $0x06 // and cl, 6 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0x3044; BYTE $0xc8 // xor al, r9b + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xcb // xor bl, r9b + LONG $0x355c8841; BYTE $0x00 // mov byte [r13 + rsi], bl + LONG $0x02c78348 // add rdi, 2 + LONG $0x723b4466; BYTE $0x02 // cmp r14w, word [rdx + 2] + LONG $0x04528d48 // lea rdx, [rdx + 4] + LONG $0xd1950f41 // setne r9b + WORD $0xf641; BYTE $0xd9 // neg r9b + WORD $0x3041; BYTE $0xd9 // xor r9b, bl + WORD $0xc980; BYTE $0x01 // or cl, 1 + WORD $0x01b0 // mov al, 1 + WORD $0xe0d2 // shl al, cl + WORD $0x2044; BYTE $0xc8 // and al, r9b + WORD $0xd830 // xor al, bl + LONG $0x35448841; BYTE $0x00 // mov byte [r13 + rsi], al + WORD $0x3949; BYTE $0xfa // cmp r10, rdi + JNE LBB5_74 JMP LBB5_142 -LBB5_72: +LBB5_75: LONG $0x36b70f44 // movzx r14d, word [rsi] LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -27762,10 +28955,10 @@ LBB5_72: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB5_76 + JE LBB5_79 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB5_74: +LBB5_77: LONG $0x323b4466 // cmp r14w, word [rdx] LONG $0x02528d48 // lea rdx, [rdx + 2] WORD $0x950f; BYTE $0xd3 // setne bl @@ -27774,7 +28967,8 @@ LBB5_74: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf0490f48 // cmovns rsi, rax LONG $0x03fec148 // sar rsi, 3 - LONG $0x04b60f45; BYTE $0x37 // movzx r8d, byte [r15 + rsi] + WORD $0x894d; BYTE $0xe9 // mov r9, r13 + LONG $0x44b60f45; WORD $0x0035 // movzx r8d, byte [r13 + rsi] WORD $0x3044; BYTE $0xc3 // xor bl, r8b LONG $0x00f53c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rsi] WORD $0xc189 // mov ecx, eax @@ -27783,22 +28977,22 @@ LBB5_74: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xdf // and dil, bl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x373c8841 // mov byte [r15 + rsi], dil + LONG $0x357c8841; BYTE $0x00 // mov byte [r13 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB5_74 - LONG $0x01c78349 // add r15, 1 + JNE LBB5_77 + LONG $0x01c58349 // add r13, 1 -LBB5_76: +LBB5_79: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB5_80 + JL LBB5_83 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b0249c894c // mov qword [rsp + 176], r11 QUAD $0x000000a0249c894c // mov qword [rsp + 160], r11 + QUAD $0x000000a8249c894c // mov qword [rsp + 168], r11 -LBB5_78: - QUAD $0x0000011024bc894c // mov qword [rsp + 272], r15 +LBB5_81: + QUAD $0x0000011024ac894c // mov qword [rsp + 272], r13 LONG $0x723b4466; BYTE $0x3e // cmp r14w, word [rdx + 62] LONG $0x2454950f; BYTE $0x1c // setne byte [rsp + 28] LONG $0x723b4466; BYTE $0x3c // cmp r14w, word [rdx + 60] @@ -27808,31 +29002,31 @@ LBB5_78: LONG $0x723b4466; BYTE $0x38 // cmp r14w, word [rdx + 56] LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] LONG $0x723b4466; BYTE $0x36 // cmp r14w, word [rdx + 54] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] - LONG $0x723b4466; BYTE $0x34 // cmp r14w, word [rdx + 52] LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] - LONG $0x723b4466; BYTE $0x32 // cmp r14w, word [rdx + 50] + LONG $0x723b4466; BYTE $0x34 // cmp r14w, word [rdx + 52] LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] + LONG $0x723b4466; BYTE $0x32 // cmp r14w, word [rdx + 50] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x723b4466; BYTE $0x2e // cmp r14w, word [rdx + 46] LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] LONG $0x723b4466; BYTE $0x2c // cmp r14w, word [rdx + 44] LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0x723b4466; BYTE $0x2a // cmp r14w, word [rdx + 42] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] - LONG $0x723b4466; BYTE $0x28 // cmp r14w, word [rdx + 40] LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] - LONG $0x723b4466; BYTE $0x26 // cmp r14w, word [rdx + 38] + LONG $0x723b4466; BYTE $0x28 // cmp r14w, word [rdx + 40] LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] - LONG $0x723b4466; BYTE $0x24 // cmp r14w, word [rdx + 36] + LONG $0x723b4466; BYTE $0x26 // cmp r14w, word [rdx + 38] LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] - LONG $0x723b4466; BYTE $0x22 // cmp r14w, word [rdx + 34] + LONG $0x723b4466; BYTE $0x24 // cmp r14w, word [rdx + 36] QUAD $0x000000902494950f // setne byte [rsp + 144] + LONG $0x723b4466; BYTE $0x22 // cmp r14w, word [rdx + 34] + QUAD $0x000000882494950f // setne byte [rsp + 136] LONG $0x723b4466; BYTE $0x1e // cmp r14w, word [rdx + 30] LONG $0xd0950f41 // setne r8b LONG $0x723b4466; BYTE $0x1c // cmp r14w, word [rdx + 28] - QUAD $0x000000802494950f // setne byte [rsp + 128] - LONG $0x723b4466; BYTE $0x1a // cmp r14w, word [rdx + 26] LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + LONG $0x723b4466; BYTE $0x1a // cmp r14w, word [rdx + 26] + LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] LONG $0x723b4466; BYTE $0x18 // cmp r14w, word [rdx + 24] LONG $0xd3950f41 // setne r11b LONG $0x723b4466; BYTE $0x16 // cmp r14w, word [rdx + 22] @@ -27850,28 +29044,28 @@ LBB5_78: LONG $0x723b4466; BYTE $0x08 // cmp r14w, word [rdx + 8] WORD $0x950f; BYTE $0xd1 // setne cl LONG $0x723b4466; BYTE $0x06 // cmp r14w, word [rdx + 6] - LONG $0xd5950f41 // setne r13b - LONG $0x723b4466; BYTE $0x04 // cmp r14w, word [rdx + 4] LONG $0xd4950f41 // setne r12b + LONG $0x723b4466; BYTE $0x04 // cmp r14w, word [rdx + 4] + LONG $0xd5950f41 // setne r13b LONG $0x323b4466 // cmp r14w, word [rdx] - QUAD $0x000000a82494950f // setne byte [rsp + 168] + QUAD $0x000000b02494950f // setne byte [rsp + 176] LONG $0x723b4466; BYTE $0x02 // cmp r14w, word [rdx + 2] LONG $0xd7950f41 // setne r15b LONG $0x723b4466; BYTE $0x10 // cmp r14w, word [rdx + 16] QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x723b4466; BYTE $0x20 // cmp r14w, word [rdx + 32] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] LONG $0x723b4466; BYTE $0x30 // cmp r14w, word [rdx + 48] - QUAD $0x000000882494950f // setne byte [rsp + 136] + QUAD $0x000000802494950f // setne byte [rsp + 128] WORD $0x0045; BYTE $0xff // add r15b, r15b - QUAD $0x000000a824bc0244 // add r15b, byte [rsp + 168] - LONG $0x02e4c041 // shl r12b, 2 - WORD $0x0845; BYTE $0xfc // or r12b, r15b + QUAD $0x000000b024bc0244 // add r15b, byte [rsp + 176] + LONG $0x02e5c041 // shl r13b, 2 + WORD $0x0845; BYTE $0xfd // or r13b, r15b QUAD $0x0000011024bc8b4c // mov r15, qword [rsp + 272] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xe5 // or r13b, r12b + LONG $0x03e4c041 // shl r12b, 3 + WORD $0x0845; BYTE $0xec // or r12b, r13b WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0x0844; BYTE $0xe9 // or cl, r13b + WORD $0x0844; BYTE $0xe1 // or cl, r12b LONG $0x05e6c040 // shl sil, 5 WORD $0x0840; BYTE $0xce // or sil, cl WORD $0xe3c0; BYTE $0x06 // shl bl, 6 @@ -27887,32 +29081,32 @@ LBB5_78: WORD $0x0845; BYTE $0xca // or r10b, r9b LONG $0x04e3c041 // shl r11b, 4 WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xd8 // or al, r11b - QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] + LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] WORD $0xe1c0; BYTE $0x06 // shl cl, 6 LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xc8 // or r8b, cl WORD $0x0841; BYTE $0xc0 // or r8b, al LONG $0x01478845 // mov byte [r15 + 1], r8b - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] WORD $0xc000 // add al, al - LONG $0x70244402 // add al, byte [rsp + 112] + LONG $0x68244402 // add al, byte [rsp + 104] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -27923,15 +29117,15 @@ LBB5_78: WORD $0xd808 // or al, bl WORD $0xc808 // or al, cl LONG $0x02478841 // mov byte [r15 + 2], al - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x88248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 136] + LONG $0x80248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 128] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -27952,26 +29146,27 @@ LBB5_78: LONG $0x03478841 // mov byte [r15 + 3], al LONG $0x40c28348 // add rdx, 64 LONG $0x04c78349 // add r15, 4 - QUAD $0x000000a024848348; BYTE $0xff // add qword [rsp + 160], -1 - JNE LBB5_78 + WORD $0x894d; BYTE $0xfd // mov r13, r15 + QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + JNE LBB5_81 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b0249c8b4c // mov r11, qword [rsp + 176] + QUAD $0x000000a0249c8b4c // mov r11, qword [rsp + 160] -LBB5_80: +LBB5_83: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB5_157 + JGE LBB5_164 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 JNE LBB5_140 -LBB5_82: +LBB5_85: WORD $0xff31 // xor edi, edi JMP LBB5_142 -LBB5_83: +LBB5_86: WORD $0x8b4c; BYTE $0x36 // mov r14, qword [rsi] LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -27981,10 +29176,10 @@ LBB5_83: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB5_87 + JE LBB5_90 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB5_85: +LBB5_88: WORD $0x3b4c; BYTE $0x32 // cmp r14, qword [rdx] LONG $0x08528d48 // lea rdx, [rdx + 8] WORD $0x950f; BYTE $0xd3 // setne bl @@ -27993,7 +29188,8 @@ LBB5_85: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf0490f48 // cmovns rsi, rax LONG $0x03fec148 // sar rsi, 3 - LONG $0x04b60f45; BYTE $0x37 // movzx r8d, byte [r15 + rsi] + WORD $0x894d; BYTE $0xe9 // mov r9, r13 + LONG $0x44b60f45; WORD $0x0035 // movzx r8d, byte [r13 + rsi] WORD $0x3044; BYTE $0xc3 // xor bl, r8b LONG $0x00f53c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rsi] WORD $0xc189 // mov ecx, eax @@ -28002,22 +29198,22 @@ LBB5_85: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xdf // and dil, bl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x373c8841 // mov byte [r15 + rsi], dil + LONG $0x357c8841; BYTE $0x00 // mov byte [r13 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB5_85 - LONG $0x01c78349 // add r15, 1 + JNE LBB5_88 + LONG $0x01c58349 // add r13, 1 -LBB5_87: +LBB5_90: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB5_91 + JL LBB5_94 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b0249c894c // mov qword [rsp + 176], r11 QUAD $0x000000a0249c894c // mov qword [rsp + 160], r11 + QUAD $0x000000a8249c894c // mov qword [rsp + 168], r11 -LBB5_89: - QUAD $0x0000011024bc894c // mov qword [rsp + 272], r15 +LBB5_92: + QUAD $0x0000011024ac894c // mov qword [rsp + 272], r13 LONG $0xf8b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 248] LONG $0x2454950f; BYTE $0x1c // setne byte [rsp + 28] LONG $0xf0b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 240] @@ -28027,31 +29223,31 @@ LBB5_89: LONG $0xe0b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 224] LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] LONG $0xd8b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 216] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] - LONG $0xd0b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 208] LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] - LONG $0xc8b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 200] + LONG $0xd0b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 208] LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] + LONG $0xc8b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 200] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0xb8b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 184] LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] LONG $0xb0b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 176] LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0xa8b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 168] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] - LONG $0xa0b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 160] LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] - LONG $0x98b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 152] + LONG $0xa0b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 160] LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] - LONG $0x90b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 144] + LONG $0x98b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 152] LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] - LONG $0x88b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 136] + LONG $0x90b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 144] QUAD $0x000000902494950f // setne byte [rsp + 144] + LONG $0x88b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 136] + QUAD $0x000000882494950f // setne byte [rsp + 136] LONG $0x78723b4c // cmp r14, qword [rdx + 120] LONG $0xd0950f41 // setne r8b LONG $0x70723b4c // cmp r14, qword [rdx + 112] - QUAD $0x000000802494950f // setne byte [rsp + 128] - LONG $0x68723b4c // cmp r14, qword [rdx + 104] LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + LONG $0x68723b4c // cmp r14, qword [rdx + 104] + LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] LONG $0x60723b4c // cmp r14, qword [rdx + 96] LONG $0xd3950f41 // setne r11b LONG $0x58723b4c // cmp r14, qword [rdx + 88] @@ -28069,28 +29265,28 @@ LBB5_89: LONG $0x20723b4c // cmp r14, qword [rdx + 32] WORD $0x950f; BYTE $0xd1 // setne cl LONG $0x18723b4c // cmp r14, qword [rdx + 24] - LONG $0xd5950f41 // setne r13b - LONG $0x10723b4c // cmp r14, qword [rdx + 16] LONG $0xd4950f41 // setne r12b + LONG $0x10723b4c // cmp r14, qword [rdx + 16] + LONG $0xd5950f41 // setne r13b WORD $0x3b4c; BYTE $0x32 // cmp r14, qword [rdx] - QUAD $0x000000a82494950f // setne byte [rsp + 168] + QUAD $0x000000b02494950f // setne byte [rsp + 176] LONG $0x08723b4c // cmp r14, qword [rdx + 8] LONG $0xd7950f41 // setne r15b LONG $0x40723b4c // cmp r14, qword [rdx + 64] QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x80b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 128] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] LONG $0xc0b23b4c; WORD $0x0000; BYTE $0x00 // cmp r14, qword [rdx + 192] - QUAD $0x000000882494950f // setne byte [rsp + 136] + QUAD $0x000000802494950f // setne byte [rsp + 128] WORD $0x0045; BYTE $0xff // add r15b, r15b - QUAD $0x000000a824bc0244 // add r15b, byte [rsp + 168] - LONG $0x02e4c041 // shl r12b, 2 - WORD $0x0845; BYTE $0xfc // or r12b, r15b + QUAD $0x000000b024bc0244 // add r15b, byte [rsp + 176] + LONG $0x02e5c041 // shl r13b, 2 + WORD $0x0845; BYTE $0xfd // or r13b, r15b QUAD $0x0000011024bc8b4c // mov r15, qword [rsp + 272] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xe5 // or r13b, r12b + LONG $0x03e4c041 // shl r12b, 3 + WORD $0x0845; BYTE $0xec // or r12b, r13b WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0x0844; BYTE $0xe9 // or cl, r13b + WORD $0x0844; BYTE $0xe1 // or cl, r12b LONG $0x05e6c040 // shl sil, 5 WORD $0x0840; BYTE $0xce // or sil, cl WORD $0xe3c0; BYTE $0x06 // shl bl, 6 @@ -28106,32 +29302,32 @@ LBB5_89: WORD $0x0845; BYTE $0xca // or r10b, r9b LONG $0x04e3c041 // shl r11b, 4 WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xd8 // or al, r11b - QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] + LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] WORD $0xe1c0; BYTE $0x06 // shl cl, 6 LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xc8 // or r8b, cl WORD $0x0841; BYTE $0xc0 // or r8b, al LONG $0x01478845 // mov byte [r15 + 1], r8b - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] WORD $0xc000 // add al, al - LONG $0x70244402 // add al, byte [rsp + 112] + LONG $0x68244402 // add al, byte [rsp + 104] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -28142,15 +29338,15 @@ LBB5_89: WORD $0xd808 // or al, bl WORD $0xc808 // or al, cl LONG $0x02478841 // mov byte [r15 + 2], al - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x88248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 136] + LONG $0x80248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 128] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -28171,26 +29367,27 @@ LBB5_89: LONG $0x03478841 // mov byte [r15 + 3], al LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 LONG $0x04c78349 // add r15, 4 - QUAD $0x000000a024848348; BYTE $0xff // add qword [rsp + 160], -1 - JNE LBB5_89 + WORD $0x894d; BYTE $0xfd // mov r13, r15 + QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + JNE LBB5_92 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b0249c8b4c // mov r11, qword [rsp + 176] + QUAD $0x000000a0249c8b4c // mov r11, qword [rsp + 160] -LBB5_91: +LBB5_94: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB5_157 + JGE LBB5_164 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 JNE LBB5_144 -LBB5_93: +LBB5_96: WORD $0xff31 // xor edi, edi JMP LBB5_146 -LBB5_94: +LBB5_97: LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 LONG $0xda490f4d // cmovns r11, r10 @@ -28200,203 +29397,292 @@ LBB5_94: WORD $0xe083; BYTE $0xf8 // and eax, -8 LONG $0x0610fac5 // vmovss xmm0, dword [rsi] WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB5_98 + JE LBB5_101 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB5_96: - LONG $0x022ef8c5 // vucomiss xmm0, dword [rdx] - LONG $0x04528d48 // lea rdx, [rdx + 4] - WORD $0x950f; BYTE $0xd3 // setne bl - WORD $0xdbf6 // neg bl - LONG $0x07708d48 // lea rsi, [rax + 7] - WORD $0x8548; BYTE $0xc0 // test rax, rax - LONG $0xf0490f48 // cmovns rsi, rax - LONG $0x03fec148 // sar rsi, 3 - LONG $0x0cb60f45; BYTE $0x37 // movzx r9d, byte [r15 + rsi] - WORD $0x3044; BYTE $0xcb // xor bl, r9b - QUAD $0x00000000f5048d44 // lea r8d, [8*rsi] - WORD $0xc189 // mov ecx, eax - WORD $0x2944; BYTE $0xc1 // sub ecx, r8d - LONG $0x000001bf; BYTE $0x00 // mov edi, 1 - WORD $0xe7d3 // shl edi, cl - WORD $0x2040; BYTE $0xdf // and dil, bl - WORD $0x3044; BYTE $0xcf // xor dil, r9b - LONG $0x373c8841 // mov byte [r15 + rsi], dil - LONG $0x01c08348 // add rax, 1 - LONG $0x08f88348 // cmp rax, 8 - JNE LBB5_96 - LONG $0x01c78349 // add r15, 1 +LBB5_99: + LONG $0x022ef8c5 // vucomiss xmm0, dword [rdx] + LONG $0x04528d48 // lea rdx, [rdx + 4] + WORD $0x9a0f; BYTE $0xd1 // setp cl + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xcb08 // or bl, cl + WORD $0xdbf6 // neg bl + LONG $0x07708d48 // lea rsi, [rax + 7] + WORD $0x8548; BYTE $0xc0 // test rax, rax + LONG $0xf0490f48 // cmovns rsi, rax + LONG $0x03fec148 // sar rsi, 3 + WORD $0x894d; BYTE $0xee // mov r14, r13 + LONG $0x4cb60f45; WORD $0x0035 // movzx r9d, byte [r13 + rsi] + WORD $0x3044; BYTE $0xcb // xor bl, r9b + QUAD $0x00000000f5048d44 // lea r8d, [8*rsi] + WORD $0xc189 // mov ecx, eax + WORD $0x2944; BYTE $0xc1 // sub ecx, r8d + LONG $0x000001bf; BYTE $0x00 // mov edi, 1 + WORD $0xe7d3 // shl edi, cl + WORD $0x2040; BYTE $0xdf // and dil, bl + WORD $0x3044; BYTE $0xcf // xor dil, r9b + LONG $0x357c8841; BYTE $0x00 // mov byte [r13 + rsi], dil + LONG $0x01c08348 // add rax, 1 + LONG $0x08f88348 // cmp rax, 8 + JNE LBB5_99 + LONG $0x01c58349 // add r13, 1 -LBB5_98: +LBB5_101: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB5_102 + JL LBB5_105 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 + QUAD $0x000000b8249c894c // mov qword [rsp + 184], r11 QUAD $0x000000a0249c894c // mov qword [rsp + 160], r11 - QUAD $0x000000a8249c894c // mov qword [rsp + 168], r11 -LBB5_100: - QUAD $0x0000011024bc894c // mov qword [rsp + 272], r15 +LBB5_103: + QUAD $0x0000011024ac894c // mov qword [rsp + 272], r13 LONG $0x022ef8c5 // vucomiss xmm0, dword [rdx] - QUAD $0x000000982494950f // setne byte [rsp + 152] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x30244c88 // mov byte [rsp + 48], cl LONG $0x422ef8c5; BYTE $0x04 // vucomiss xmm0, dword [rdx + 4] - LONG $0xd1950f41 // setne r9b + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd5950f41 // setne r13b + WORD $0x0841; BYTE $0xc5 // or r13b, al LONG $0x422ef8c5; BYTE $0x08 // vucomiss xmm0, dword [rdx + 8] - LONG $0xd3950f41 // setne r11b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x38244c88 // mov byte [rsp + 56], cl LONG $0x422ef8c5; BYTE $0x0c // vucomiss xmm0, dword [rdx + 12] - LONG $0xd5950f41 // setne r13b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x40248c88; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 320], cl LONG $0x422ef8c5; BYTE $0x10 // vucomiss xmm0, dword [rdx + 16] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl LONG $0x422ef8c5; BYTE $0x14 // vucomiss xmm0, dword [rdx + 20] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd4950f41 // setne r12b + WORD $0x0841; BYTE $0xc4 // or r12b, al LONG $0x422ef8c5; BYTE $0x18 // vucomiss xmm0, dword [rdx + 24] - WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x48244c88 // mov byte [rsp + 72], cl LONG $0x422ef8c5; BYTE $0x1c // vucomiss xmm0, dword [rdx + 28] - LONG $0xd4950f41 // setne r12b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x1c244c88 // mov byte [rsp + 28], cl LONG $0x422ef8c5; BYTE $0x20 // vucomiss xmm0, dword [rdx + 32] - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl LONG $0x422ef8c5; BYTE $0x24 // vucomiss xmm0, dword [rdx + 36] - LONG $0xd6950f40 // setne sil + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x40244c88 // mov byte [rsp + 64], cl LONG $0x422ef8c5; BYTE $0x28 // vucomiss xmm0, dword [rdx + 40] - LONG $0xd7950f40 // setne dil + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x60244c88 // mov byte [rsp + 96], cl LONG $0x422ef8c5; BYTE $0x2c // vucomiss xmm0, dword [rdx + 44] - LONG $0xd0950f41 // setne r8b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xc308 // or bl, al LONG $0x422ef8c5; BYTE $0x30 // vucomiss xmm0, dword [rdx + 48] - LONG $0xd2950f41 // setne r10b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x20248c88; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 288], cl LONG $0x422ef8c5; BYTE $0x34 // vucomiss xmm0, dword [rdx + 52] - LONG $0xd7950f41 // setne r15b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x50244c88 // mov byte [rsp + 80], cl LONG $0x422ef8c5; BYTE $0x38 // vucomiss xmm0, dword [rdx + 56] - QUAD $0x000000802494950f // setne byte [rsp + 128] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x90248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 144], cl LONG $0x422ef8c5; BYTE $0x3c // vucomiss xmm0, dword [rdx + 60] + WORD $0x9a0f; BYTE $0xd0 // setp al WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x88248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 136], cl LONG $0x422ef8c5; BYTE $0x40 // vucomiss xmm0, dword [rdx + 64] - LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x58244c88 // mov byte [rsp + 88], cl LONG $0x422ef8c5; BYTE $0x44 // vucomiss xmm0, dword [rdx + 68] - QUAD $0x000000882494950f // setne byte [rsp + 136] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x80248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 128], cl LONG $0x422ef8c5; BYTE $0x48 // vucomiss xmm0, dword [rdx + 72] - QUAD $0x000000902494950f // setne byte [rsp + 144] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f41 // setne r15b + WORD $0x0841; BYTE $0xc7 // or r15b, al LONG $0x422ef8c5; BYTE $0x4c // vucomiss xmm0, dword [rdx + 76] - LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x78244c88 // mov byte [rsp + 120], cl LONG $0x422ef8c5; BYTE $0x50 // vucomiss xmm0, dword [rdx + 80] - LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x70244c88 // mov byte [rsp + 112], cl LONG $0x422ef8c5; BYTE $0x54 // vucomiss xmm0, dword [rdx + 84] - LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x98248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 152], cl LONG $0x422ef8c5; BYTE $0x58 // vucomiss xmm0, dword [rdx + 88] - LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] - LONG $0x422ef8c5; BYTE $0x5c // vucomiss xmm0, dword [rdx + 92] + WORD $0x9a0f; BYTE $0xd0 // setp al LONG $0xd6950f41 // setne r14b + WORD $0x0841; BYTE $0xc6 // or r14b, al + LONG $0x422ef8c5; BYTE $0x5c // vucomiss xmm0, dword [rdx + 92] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd0950f41 // setne r8b + WORD $0x0841; BYTE $0xc0 // or r8b, al LONG $0x422ef8c5; BYTE $0x60 // vucomiss xmm0, dword [rdx + 96] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x68244c88 // mov byte [rsp + 104], cl LONG $0x422ef8c5; BYTE $0x64 // vucomiss xmm0, dword [rdx + 100] - LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd3950f41 // setne r11b + WORD $0x0841; BYTE $0xc3 // or r11b, al LONG $0x422ef8c5; BYTE $0x68 // vucomiss xmm0, dword [rdx + 104] - LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd2950f41 // setne r10b + WORD $0x0841; BYTE $0xc2 // or r10b, al LONG $0x422ef8c5; BYTE $0x6c // vucomiss xmm0, dword [rdx + 108] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd1950f41 // setne r9b + WORD $0x0841; BYTE $0xc1 // or r9b, al LONG $0x422ef8c5; BYTE $0x70 // vucomiss xmm0, dword [rdx + 112] - QUAD $0x000001402494950f // setne byte [rsp + 320] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xb0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 176], cl LONG $0x422ef8c5; BYTE $0x74 // vucomiss xmm0, dword [rdx + 116] - QUAD $0x000001202494950f // setne byte [rsp + 288] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xa8248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 168], cl LONG $0x422ef8c5; BYTE $0x78 // vucomiss xmm0, dword [rdx + 120] - LONG $0x2454950f; BYTE $0x1c // setne byte [rsp + 28] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f40 // setne dil + WORD $0x0840; BYTE $0xc7 // or dil, al LONG $0x422ef8c5; BYTE $0x7c // vucomiss xmm0, dword [rdx + 124] - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0x0045; BYTE $0xc9 // add r9b, r9b - QUAD $0x00000098248c0244 // add r9b, byte [rsp + 152] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e4c041 // shl r12b, 7 - WORD $0x0841; BYTE $0xdc // or r12b, bl - LONG $0x02e3c041 // shl r11b, 2 - WORD $0x0845; BYTE $0xcb // or r11b, r9b - WORD $0x0040; BYTE $0xf6 // add sil, sil - LONG $0x24740240; BYTE $0x78 // add sil, byte [rsp + 120] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xdd // or r13b, r11b - LONG $0x02e7c040 // shl dil, 2 - WORD $0x0840; BYTE $0xf7 // or dil, sil - LONG $0x245cb60f; BYTE $0x70 // movzx ebx, byte [rsp + 112] - WORD $0xe3c0; BYTE $0x04 // shl bl, 4 - WORD $0x0844; BYTE $0xeb // or bl, r13b - WORD $0xde89 // mov esi, ebx - LONG $0x03e0c041 // shl r8b, 3 - WORD $0x0841; BYTE $0xf8 // or r8b, dil - LONG $0x245cb60f; BYTE $0x68 // movzx ebx, byte [rsp + 104] - WORD $0xe3c0; BYTE $0x05 // shl bl, 5 - WORD $0x0840; BYTE $0xf3 // or bl, sil - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xc2 // or r10b, r8b - LONG $0x05e7c041 // shl r15b, 5 - WORD $0x0845; BYTE $0xd7 // or r15b, r10b - QUAD $0x0000008024b4b60f // movzx esi, byte [rsp + 128] - LONG $0x06e6c040 // shl sil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf1 // or cl, sil - WORD $0x0841; BYTE $0xdc // or r12b, bl - WORD $0x0844; BYTE $0xf9 // or cl, r15b - QUAD $0x0000011024bc8b4c // mov r15, qword [rsp + 272] - QUAD $0x00000088249cb60f // movzx ebx, byte [rsp + 136] - WORD $0xdb00 // add bl, bl - LONG $0x58245c02 // add bl, byte [rsp + 88] - WORD $0xde89 // mov esi, ebx - QUAD $0x00000090249cb60f // movzx ebx, byte [rsp + 144] - WORD $0xe3c0; BYTE $0x02 // shl bl, 2 - WORD $0x0840; BYTE $0xf3 // or bl, sil - WORD $0xde89 // mov esi, ebx - LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd6950f40 // setne sil + WORD $0x0840; BYTE $0xc6 // or sil, al + WORD $0x0045; BYTE $0xed // add r13b, r13b + LONG $0x246c0244; BYTE $0x30 // add r13b, byte [rsp + 48] + WORD $0x8944; BYTE $0xe8 // mov eax, r13d + LONG $0x05e4c041 // shl r12b, 5 + LONG $0x6cb60f44; WORD $0x4824 // movzx r13d, byte [rsp + 72] + LONG $0x06e5c041 // shl r13b, 6 + WORD $0x0845; BYTE $0xe5 // or r13b, r12b + LONG $0x64b60f44; WORD $0x3824 // movzx r12d, byte [rsp + 56] + LONG $0x02e4c041 // shl r12b, 2 + WORD $0x0841; BYTE $0xc4 // or r12b, al + LONG $0x244cb60f; BYTE $0x40 // movzx ecx, byte [rsp + 64] + WORD $0xc900 // add cl, cl + LONG $0x28244c02 // add cl, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x1c // movzx eax, byte [rsp + 28] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0844; BYTE $0xe8 // or al, r13b + LONG $0x1c244488 // mov byte [rsp + 28], al + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0844; BYTE $0xe0 // or al, r12b WORD $0xe3c0; BYTE $0x03 // shl bl, 3 - WORD $0x0840; BYTE $0xf3 // or bl, sil - WORD $0xde89 // mov esi, ebx - LONG $0x245cb60f; BYTE $0x60 // movzx ebx, byte [rsp + 96] - WORD $0xe3c0; BYTE $0x04 // shl bl, 4 - WORD $0x0840; BYTE $0xf3 // or bl, sil - WORD $0xde89 // mov esi, ebx - LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] - WORD $0xe3c0; BYTE $0x05 // shl bl, 5 - WORD $0x0840; BYTE $0xf3 // or bl, sil - WORD $0x8845; BYTE $0x27 // mov byte [r15], r12b - LONG $0x2474b60f; BYTE $0x48 // movzx esi, byte [rsp + 72] - LONG $0x06e6c040 // shl sil, 6 - LONG $0x07e6c041 // shl r14b, 7 - WORD $0x0841; BYTE $0xf6 // or r14b, sil - LONG $0x014f8841 // mov byte [r15 + 1], cl - WORD $0x0841; BYTE $0xde // or r14b, bl - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] + WORD $0xcb08 // or bl, cl + LONG $0x6cb60f44; WORD $0x2024 // movzx r13d, byte [rsp + 32] + LONG $0x04e5c041 // shl r13b, 4 + WORD $0x0841; BYTE $0xc5 // or r13b, al + QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + LONG $0x20248488; WORD $0x0001; BYTE $0x00 // mov byte [rsp + 288], al + LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] + WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0xc808 // or al, cl + QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] + LONG $0x58244c02 // add cl, byte [rsp + 88] + LONG $0x02e7c041 // shl r15b, 2 + WORD $0x0841; BYTE $0xcf // or r15b, cl + LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd908 // or cl, bl + WORD $0x0844; BYTE $0xf9 // or cl, r15b WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000140248cb60f // movzx ecx, byte [rsp + 320] + QUAD $0x0000011024bc8b4c // mov r15, qword [rsp + 272] + LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd908 // or cl, bl - LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - WORD $0xe0c0; BYTE $0x07 // shl al, 7 - WORD $0xd808 // or al, bl - WORD $0xc808 // or al, cl - LONG $0x02778845 // mov byte [r15 + 2], r14b - LONG $0x03478841 // mov byte [r15 + 3], al + LONG $0x64b60f44; WORD $0x1c24 // movzx r12d, byte [rsp + 28] + WORD $0x0845; BYTE $0xec // or r12b, r13b + QUAD $0x00000098249cb60f // movzx ebx, byte [rsp + 152] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e6c041 // shl r14b, 6 + WORD $0x0841; BYTE $0xde // or r14b, bl + LONG $0x2024840a; WORD $0x0001; BYTE $0x00 // or al, byte [rsp + 288] + LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xf0 // or r8b, r14b + WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0045; BYTE $0xdb // add r11b, r11b + LONG $0x245c0244; BYTE $0x68 // add r11b, byte [rsp + 104] + LONG $0x02e2c041 // shl r10b, 2 + WORD $0x0845; BYTE $0xda // or r10b, r11b + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xd1 // or r9b, r10b + QUAD $0x000000b0248cb60f // movzx ecx, byte [rsp + 176] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0x0844; BYTE $0xc9 // or cl, r9b + WORD $0x8845; BYTE $0x27 // mov byte [r15], r12b + QUAD $0x000000a8249cb60f // movzx ebx, byte [rsp + 168] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e7c040 // shl dil, 6 + WORD $0x0840; BYTE $0xdf // or dil, bl + LONG $0x01478841 // mov byte [r15 + 1], al + LONG $0x07e6c040 // shl sil, 7 + WORD $0x0840; BYTE $0xfe // or sil, dil + WORD $0x0840; BYTE $0xce // or sil, cl + LONG $0x02478845 // mov byte [r15 + 2], r8b + LONG $0x03778841 // mov byte [r15 + 3], sil LONG $0x80c28148; WORD $0x0000; BYTE $0x00 // add rdx, 128 LONG $0x04c78349 // add r15, 4 - QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 - JNE LBB5_100 + WORD $0x894d; BYTE $0xfd // mov r13, r15 + QUAD $0x000000a024848348; BYTE $0xff // add qword [rsp + 160], -1 + JNE LBB5_103 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000a0249c8b4c // mov r11, qword [rsp + 160] + QUAD $0x000000b8249c8b4c // mov r11, qword [rsp + 184] -LBB5_102: +LBB5_105: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB5_157 + JGE LBB5_164 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 @@ -28405,7 +29691,7 @@ LBB5_102: WORD $0xff31 // xor edi, edi JMP LBB5_150 -LBB5_105: +LBB5_108: WORD $0x8a44; BYTE $0x1e // mov r11b, byte [rsi] LONG $0x1f728d4d // lea r14, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -28415,61 +29701,62 @@ LBB5_105: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB5_109 + JE LBB5_112 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB5_107: - WORD $0x3a44; BYTE $0x1a // cmp r11b, byte [rdx] - LONG $0x01528d48 // lea rdx, [rdx + 1] - WORD $0x950f; BYTE $0xd3 // setne bl - WORD $0xdbf6 // neg bl - LONG $0x07708d48 // lea rsi, [rax + 7] - WORD $0x8548; BYTE $0xc0 // test rax, rax - LONG $0xf0490f48 // cmovns rsi, rax - LONG $0x03fec148 // sar rsi, 3 - LONG $0x0cb60f45; BYTE $0x37 // movzx r9d, byte [r15 + rsi] - WORD $0x3044; BYTE $0xcb // xor bl, r9b - QUAD $0x00000000f5048d44 // lea r8d, [8*rsi] - WORD $0xc189 // mov ecx, eax - WORD $0x2944; BYTE $0xc1 // sub ecx, r8d - LONG $0x000001bf; BYTE $0x00 // mov edi, 1 - WORD $0xe7d3 // shl edi, cl - WORD $0x2040; BYTE $0xdf // and dil, bl - WORD $0x3044; BYTE $0xcf // xor dil, r9b - LONG $0x373c8841 // mov byte [r15 + rsi], dil - LONG $0x01c08348 // add rax, 1 - LONG $0x08f88348 // cmp rax, 8 - JNE LBB5_107 - LONG $0x01c78349 // add r15, 1 +LBB5_110: + WORD $0x3a44; BYTE $0x1a // cmp r11b, byte [rdx] + LONG $0x01528d48 // lea rdx, [rdx + 1] + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xdbf6 // neg bl + LONG $0x07708d48 // lea rsi, [rax + 7] + WORD $0x8548; BYTE $0xc0 // test rax, rax + LONG $0xf0490f48 // cmovns rsi, rax + LONG $0x03fec148 // sar rsi, 3 + WORD $0x894d; BYTE $0xef // mov r15, r13 + LONG $0x4cb60f45; WORD $0x0035 // movzx r9d, byte [r13 + rsi] + WORD $0x3044; BYTE $0xcb // xor bl, r9b + QUAD $0x00000000f5048d44 // lea r8d, [8*rsi] + WORD $0xc189 // mov ecx, eax + WORD $0x2944; BYTE $0xc1 // sub ecx, r8d + LONG $0x000001bf; BYTE $0x00 // mov edi, 1 + WORD $0xe7d3 // shl edi, cl + WORD $0x2040; BYTE $0xdf // and dil, bl + WORD $0x3044; BYTE $0xcf // xor dil, r9b + LONG $0x357c8841; BYTE $0x00 // mov byte [r13 + rsi], dil + LONG $0x01c08348 // add rax, 1 + LONG $0x08f88348 // cmp rax, 8 + JNE LBB5_110 + LONG $0x01c58349 // add r13, 1 -LBB5_109: +LBB5_112: LONG $0x05fec149 // sar r14, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB5_132 + JL LBB5_120 LONG $0x20fe8349 // cmp r14, 32 LONG $0x245c8944; BYTE $0x1c // mov dword [rsp + 28], r11d QUAD $0x000001182494894c // mov qword [rsp + 280], r10 QUAD $0x0000018024b4894c // mov qword [rsp + 384], r14 - JB LBB5_113 + JB LBB5_116 WORD $0x894c; BYTE $0xf0 // mov rax, r14 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xd0 // add rax, rdx - WORD $0x3949; BYTE $0xc7 // cmp r15, rax + WORD $0x3949; BYTE $0xc5 // cmp r13, rax JAE LBB5_168 - LONG $0xb7048d4b // lea rax, [r15 + 4*r14] + QUAD $0x00000000b5048d4a // lea rax, [4*r14] + WORD $0x014c; BYTE $0xe8 // add rax, r13 WORD $0x3948; BYTE $0xc2 // cmp rdx, rax JAE LBB5_168 -LBB5_113: +LBB5_116: WORD $0xc031 // xor eax, eax QUAD $0x0000017824848948 // mov qword [rsp + 376], rax - WORD $0x894d; BYTE $0xfd // mov r13, r15 -LBB5_114: +LBB5_117: QUAD $0x0000017824b42b4c // sub r14, qword [rsp + 376] - QUAD $0x000000b024b4894c // mov qword [rsp + 176], r14 + QUAD $0x000000a024b4894c // mov qword [rsp + 160], r14 -LBB5_115: +LBB5_118: LONG $0x1f5a3a44 // cmp r11b, byte [rdx + 31] QUAD $0x000001102494950f // setne byte [rsp + 272] LONG $0x1e5a3a44 // cmp r11b, byte [rdx + 30] @@ -28479,31 +29766,31 @@ LBB5_115: LONG $0x1c5a3a44 // cmp r11b, byte [rdx + 28] LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] LONG $0x1b5a3a44 // cmp r11b, byte [rdx + 27] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] - LONG $0x1a5a3a44 // cmp r11b, byte [rdx + 26] LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] - LONG $0x195a3a44 // cmp r11b, byte [rdx + 25] + LONG $0x1a5a3a44 // cmp r11b, byte [rdx + 26] LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] + LONG $0x195a3a44 // cmp r11b, byte [rdx + 25] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x175a3a44 // cmp r11b, byte [rdx + 23] LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] LONG $0x165a3a44 // cmp r11b, byte [rdx + 22] LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0x155a3a44 // cmp r11b, byte [rdx + 21] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] + LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] LONG $0x145a3a44 // cmp r11b, byte [rdx + 20] - LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] + LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] LONG $0x135a3a44 // cmp r11b, byte [rdx + 19] - QUAD $0x000000902494950f // setne byte [rsp + 144] - LONG $0x125a3a44 // cmp r11b, byte [rdx + 18] QUAD $0x000000882494950f // setne byte [rsp + 136] - LONG $0x115a3a44 // cmp r11b, byte [rdx + 17] + LONG $0x125a3a44 // cmp r11b, byte [rdx + 18] QUAD $0x000000802494950f // setne byte [rsp + 128] + LONG $0x115a3a44 // cmp r11b, byte [rdx + 17] + LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] LONG $0x0f5a3a44 // cmp r11b, byte [rdx + 15] LONG $0xd6950f41 // setne r14b LONG $0x0e5a3a44 // cmp r11b, byte [rdx + 14] - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] - LONG $0x0d5a3a44 // cmp r11b, byte [rdx + 13] LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + LONG $0x0d5a3a44 // cmp r11b, byte [rdx + 13] + LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] LONG $0x0c5a3a44 // cmp r11b, byte [rdx + 12] LONG $0xd4950f41 // setne r12b LONG $0x0b5a3a44 // cmp r11b, byte [rdx + 11] @@ -28518,7 +29805,7 @@ LBB5_115: LONG $0xd7950f40 // setne dil LONG $0x1c24448b // mov eax, dword [rsp + 28] WORD $0x423a; BYTE $0x06 // cmp al, byte [rdx + 6] - QUAD $0x000000a82494950f // setne byte [rsp + 168] + QUAD $0x000000b02494950f // setne byte [rsp + 176] LONG $0x1c24448b // mov eax, dword [rsp + 28] WORD $0x423a; BYTE $0x05 // cmp al, byte [rdx + 5] LONG $0xd1950f41 // setne r9b @@ -28533,7 +29820,7 @@ LBB5_115: WORD $0x950f; BYTE $0xd1 // setne cl LONG $0x1c24448b // mov eax, dword [rsp + 28] WORD $0x023a // cmp al, byte [rdx] - QUAD $0x000000a02494950f // setne byte [rsp + 160] + QUAD $0x000000a82494950f // setne byte [rsp + 168] LONG $0x1c24448b // mov eax, dword [rsp + 28] WORD $0x423a; BYTE $0x01 // cmp al, byte [rdx + 1] WORD $0x950f; BYTE $0xd0 // setne al @@ -28544,12 +29831,12 @@ LBB5_115: QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x1c245c8b // mov ebx, dword [rsp + 28] WORD $0x5a3a; BYTE $0x10 // cmp bl, byte [rdx + 16] - LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] + QUAD $0x000000902494950f // setne byte [rsp + 144] LONG $0x1c245c8b // mov ebx, dword [rsp + 28] WORD $0x5a3a; BYTE $0x18 // cmp bl, byte [rdx + 24] - LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] + LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] WORD $0xc000 // add al, al - LONG $0xa0248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 160] + LONG $0xa8248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 168] WORD $0xe1c0; BYTE $0x02 // shl cl, 2 WORD $0xc108 // or cl, al LONG $0x03e6c040 // shl sil, 3 @@ -28558,7 +29845,7 @@ LBB5_115: WORD $0x0841; BYTE $0xf0 // or r8b, sil LONG $0x05e1c041 // shl r9b, 5 WORD $0x0845; BYTE $0xc1 // or r9b, r8b - QUAD $0x000000a82484b60f // movzx eax, byte [rsp + 168] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e7c040 // shl dil, 7 WORD $0x0840; BYTE $0xc7 // or dil, al @@ -28573,32 +29860,32 @@ LBB5_115: LONG $0x245c8b44; BYTE $0x1c // mov r11d, dword [rsp + 28] LONG $0x04e4c041 // shl r12b, 4 WORD $0x0845; BYTE $0xfc // or r12b, r15b - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xe0 // or al, r12b - LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] + LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] WORD $0xe1c0; BYTE $0x06 // shl cl, 6 LONG $0x07e6c041 // shl r14b, 7 WORD $0x0841; BYTE $0xce // or r14b, cl WORD $0x0841; BYTE $0xc6 // or r14b, al LONG $0x01758845 // mov byte [r13 + 1], r14b - QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] WORD $0xc000 // add al, al - LONG $0x50244402 // add al, byte [rsp + 80] + LONG $0x90248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 144] WORD $0xc189 // mov ecx, eax - QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -28609,15 +29896,15 @@ LBB5_115: WORD $0xd808 // or al, bl WORD $0xc808 // or al, cl LONG $0x02458841 // mov byte [r13 + 2], al - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x60244402 // add al, byte [rsp + 96] + LONG $0x58244402 // add al, byte [rsp + 88] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -28638,13 +29925,26 @@ LBB5_115: LONG $0x03458841 // mov byte [r13 + 3], al LONG $0x20c28348 // add rdx, 32 LONG $0x04c58349 // add r13, 4 - QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 - JNE LBB5_115 + QUAD $0x000000a024848348; BYTE $0xff // add qword [rsp + 160], -1 + JNE LBB5_118 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] QUAD $0x0000018024b48b4c // mov r14, qword [rsp + 384] - JMP LBB5_133 -LBB5_117: +LBB5_120: + LONG $0x05e6c149 // shl r14, 5 + WORD $0x394d; BYTE $0xd6 // cmp r14, r10 + JGE LBB5_164 + WORD $0x894d; BYTE $0xd0 // mov r8, r10 + WORD $0x294d; BYTE $0xf0 // sub r8, r14 + WORD $0xf749; BYTE $0xd6 // not r14 + WORD $0x014d; BYTE $0xd6 // add r14, r10 + JNE LBB5_153 + +LBB5_122: + WORD $0xf631 // xor esi, esi + JMP LBB5_156 + +LBB5_123: WORD $0x8b44; BYTE $0x36 // mov r14d, dword [rsi] LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -28654,10 +29954,10 @@ LBB5_117: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB5_121 + JE LBB5_127 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB5_119: +LBB5_125: WORD $0x3b44; BYTE $0x32 // cmp r14d, dword [rdx] LONG $0x04528d48 // lea rdx, [rdx + 4] WORD $0x950f; BYTE $0xd3 // setne bl @@ -28666,7 +29966,8 @@ LBB5_119: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf0490f48 // cmovns rsi, rax LONG $0x03fec148 // sar rsi, 3 - LONG $0x04b60f45; BYTE $0x37 // movzx r8d, byte [r15 + rsi] + WORD $0x894d; BYTE $0xe9 // mov r9, r13 + LONG $0x44b60f45; WORD $0x0035 // movzx r8d, byte [r13 + rsi] WORD $0x3044; BYTE $0xc3 // xor bl, r8b LONG $0x00f53c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rsi] WORD $0xc189 // mov ecx, eax @@ -28675,22 +29976,22 @@ LBB5_119: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xdf // and dil, bl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x373c8841 // mov byte [r15 + rsi], dil + LONG $0x357c8841; BYTE $0x00 // mov byte [r13 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB5_119 - LONG $0x01c78349 // add r15, 1 + JNE LBB5_125 + LONG $0x01c58349 // add r13, 1 -LBB5_121: +LBB5_127: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB5_125 + JL LBB5_131 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 - QUAD $0x000000b0249c894c // mov qword [rsp + 176], r11 QUAD $0x000000a0249c894c // mov qword [rsp + 160], r11 + QUAD $0x000000a8249c894c // mov qword [rsp + 168], r11 -LBB5_123: - QUAD $0x0000011024bc894c // mov qword [rsp + 272], r15 +LBB5_129: + QUAD $0x0000011024ac894c // mov qword [rsp + 272], r13 LONG $0x7c723b44 // cmp r14d, dword [rdx + 124] LONG $0x2454950f; BYTE $0x1c // setne byte [rsp + 28] LONG $0x78723b44 // cmp r14d, dword [rdx + 120] @@ -28700,31 +30001,31 @@ LBB5_123: LONG $0x70723b44 // cmp r14d, dword [rdx + 112] LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] LONG $0x6c723b44 // cmp r14d, dword [rdx + 108] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] - LONG $0x68723b44 // cmp r14d, dword [rdx + 104] LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] - LONG $0x64723b44 // cmp r14d, dword [rdx + 100] + LONG $0x68723b44 // cmp r14d, dword [rdx + 104] LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] + LONG $0x64723b44 // cmp r14d, dword [rdx + 100] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x5c723b44 // cmp r14d, dword [rdx + 92] LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] LONG $0x58723b44 // cmp r14d, dword [rdx + 88] LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0x54723b44 // cmp r14d, dword [rdx + 84] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] - LONG $0x50723b44 // cmp r14d, dword [rdx + 80] LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] - LONG $0x4c723b44 // cmp r14d, dword [rdx + 76] + LONG $0x50723b44 // cmp r14d, dword [rdx + 80] LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] - LONG $0x48723b44 // cmp r14d, dword [rdx + 72] + LONG $0x4c723b44 // cmp r14d, dword [rdx + 76] LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] - LONG $0x44723b44 // cmp r14d, dword [rdx + 68] + LONG $0x48723b44 // cmp r14d, dword [rdx + 72] QUAD $0x000000902494950f // setne byte [rsp + 144] + LONG $0x44723b44 // cmp r14d, dword [rdx + 68] + QUAD $0x000000882494950f // setne byte [rsp + 136] LONG $0x3c723b44 // cmp r14d, dword [rdx + 60] LONG $0xd0950f41 // setne r8b LONG $0x38723b44 // cmp r14d, dword [rdx + 56] - QUAD $0x000000802494950f // setne byte [rsp + 128] - LONG $0x34723b44 // cmp r14d, dword [rdx + 52] LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + LONG $0x34723b44 // cmp r14d, dword [rdx + 52] + LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] LONG $0x30723b44 // cmp r14d, dword [rdx + 48] LONG $0xd3950f41 // setne r11b LONG $0x2c723b44 // cmp r14d, dword [rdx + 44] @@ -28742,28 +30043,28 @@ LBB5_123: LONG $0x10723b44 // cmp r14d, dword [rdx + 16] WORD $0x950f; BYTE $0xd1 // setne cl LONG $0x0c723b44 // cmp r14d, dword [rdx + 12] - LONG $0xd5950f41 // setne r13b - LONG $0x08723b44 // cmp r14d, dword [rdx + 8] LONG $0xd4950f41 // setne r12b + LONG $0x08723b44 // cmp r14d, dword [rdx + 8] + LONG $0xd5950f41 // setne r13b WORD $0x3b44; BYTE $0x32 // cmp r14d, dword [rdx] - QUAD $0x000000a82494950f // setne byte [rsp + 168] + QUAD $0x000000b02494950f // setne byte [rsp + 176] LONG $0x04723b44 // cmp r14d, dword [rdx + 4] LONG $0xd7950f41 // setne r15b LONG $0x20723b44 // cmp r14d, dword [rdx + 32] QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x40723b44 // cmp r14d, dword [rdx + 64] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] LONG $0x60723b44 // cmp r14d, dword [rdx + 96] - QUAD $0x000000882494950f // setne byte [rsp + 136] + QUAD $0x000000802494950f // setne byte [rsp + 128] WORD $0x0045; BYTE $0xff // add r15b, r15b - QUAD $0x000000a824bc0244 // add r15b, byte [rsp + 168] - LONG $0x02e4c041 // shl r12b, 2 - WORD $0x0845; BYTE $0xfc // or r12b, r15b + QUAD $0x000000b024bc0244 // add r15b, byte [rsp + 176] + LONG $0x02e5c041 // shl r13b, 2 + WORD $0x0845; BYTE $0xfd // or r13b, r15b QUAD $0x0000011024bc8b4c // mov r15, qword [rsp + 272] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xe5 // or r13b, r12b + LONG $0x03e4c041 // shl r12b, 3 + WORD $0x0845; BYTE $0xec // or r12b, r13b WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0x0844; BYTE $0xe9 // or cl, r13b + WORD $0x0844; BYTE $0xe1 // or cl, r12b LONG $0x05e6c040 // shl sil, 5 WORD $0x0840; BYTE $0xce // or sil, cl WORD $0xe3c0; BYTE $0x06 // shl bl, 6 @@ -28779,32 +30080,32 @@ LBB5_123: WORD $0x0845; BYTE $0xca // or r10b, r9b LONG $0x04e3c041 // shl r11b, 4 WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xd8 // or al, r11b - QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] + LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] WORD $0xe1c0; BYTE $0x06 // shl cl, 6 LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xc8 // or r8b, cl WORD $0x0841; BYTE $0xc0 // or r8b, al LONG $0x01478845 // mov byte [r15 + 1], r8b - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] WORD $0xc000 // add al, al - LONG $0x70244402 // add al, byte [rsp + 112] + LONG $0x68244402 // add al, byte [rsp + 104] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -28815,15 +30116,15 @@ LBB5_123: WORD $0xd808 // or al, bl WORD $0xc808 // or al, cl LONG $0x02478841 // mov byte [r15 + 2], al - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x88248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 136] + LONG $0x80248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 128] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -28844,58 +30145,96 @@ LBB5_123: LONG $0x03478841 // mov byte [r15 + 3], al LONG $0x80ea8348 // sub rdx, -128 LONG $0x04c78349 // add r15, 4 - QUAD $0x000000a024848348; BYTE $0xff // add qword [rsp + 160], -1 - JNE LBB5_123 + WORD $0x894d; BYTE $0xfd // mov r13, r15 + QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 + JNE LBB5_129 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - QUAD $0x000000b0249c8b4c // mov r11, qword [rsp + 176] + QUAD $0x000000a0249c8b4c // mov r11, qword [rsp + 160] -LBB5_125: +LBB5_131: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB5_157 + JGE LBB5_164 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 - JNE LBB5_152 + JNE LBB5_158 -LBB5_127: +LBB5_133: WORD $0xff31 // xor edi, edi - JMP LBB5_154 + JMP LBB5_160 -LBB5_128: - WORD $0x894d; BYTE $0xfd // mov r13, r15 +LBB5_134: + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 + WORD $0xff31 // xor edi, edi -LBB5_129: - LONG $0x05e6c149 // shl r14, 5 - WORD $0x394d; BYTE $0xd6 // cmp r14, r10 - JGE LBB5_157 - WORD $0x894d; BYTE $0xd0 // mov r8, r10 - WORD $0x294d; BYTE $0xf0 // sub r8, r14 - WORD $0xf749; BYTE $0xd6 // not r14 - WORD $0x014d; BYTE $0xd6 // add r14, r10 - JE LBB5_135 +LBB5_135: + LONG $0x022ef9c5 // vucomisd xmm0, qword [rdx] + WORD $0x9a0f; BYTE $0xd1 // setp cl + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xc808 // or al, cl + WORD $0xd8f6 // neg al + WORD $0x8948; BYTE $0xfe // mov rsi, rdi + LONG $0x03eec148 // shr rsi, 3 + WORD $0x894d; BYTE $0xee // mov r14, r13 + LONG $0x54b60f45; WORD $0x0035 // movzx r10d, byte [r13 + rsi] + WORD $0xf989 // mov ecx, edi + WORD $0xe180; BYTE $0x06 // and cl, 6 + WORD $0xb341; BYTE $0x01 // mov r11b, 1 + WORD $0xd241; BYTE $0xe3 // shl r11b, cl + WORD $0x3044; BYTE $0xd0 // xor al, r10b + WORD $0x2041; BYTE $0xc3 // and r11b, al + WORD $0x3045; BYTE $0xd3 // xor r11b, r10b + LONG $0x355c8845; BYTE $0x00 // mov byte [r13 + rsi], r11b + LONG $0x02c78348 // add rdi, 2 + LONG $0x422ef9c5; BYTE $0x08 // vucomisd xmm0, qword [rdx + 8] + LONG $0x10528d48 // lea rdx, [rdx + 16] + LONG $0xd29a0f41 // setp r10b + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xd8f6 // neg al + WORD $0x3044; BYTE $0xd8 // xor al, r11b + WORD $0xc980; BYTE $0x01 // or cl, 1 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xdb // xor bl, r11b + LONG $0x355c8841; BYTE $0x00 // mov byte [r13 + rsi], bl + WORD $0x3949; BYTE $0xf9 // cmp r9, rdi + JNE LBB5_135 + +LBB5_136: + LONG $0x01c0f641 // test r8b, 1 + JE LBB5_164 + LONG $0x022ef9c5 // vucomisd xmm0, qword [rdx] + JMP LBB5_152 + +LBB5_140: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 - WORD $0xf631 // xor esi, esi + WORD $0xff31 // xor edi, edi -LBB5_159: - LONG $0x321c3a44 // cmp r11b, byte [rdx + rsi] +LBB5_141: + LONG $0x323b4466 // cmp r14w, word [rdx] WORD $0x950f; BYTE $0xd0 // setne al WORD $0xd8f6 // neg al - WORD $0x8948; BYTE $0xf7 // mov rdi, rsi - LONG $0x03efc148 // shr rdi, 3 - WORD $0xf189 // mov ecx, esi + WORD $0x8948; BYTE $0xfe // mov rsi, rdi + LONG $0x03eec148 // shr rsi, 3 + WORD $0x894d; BYTE $0xeb // mov r11, r13 + LONG $0x4cb60f45; WORD $0x0035 // movzx r9d, byte [r13 + rsi] + WORD $0xf989 // mov ecx, edi WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 WORD $0xe3d2 // shl bl, cl - LONG $0x4cb60f45; WORD $0x003d // movzx r9d, byte [r13 + rdi] WORD $0x3044; BYTE $0xc8 // xor al, r9b WORD $0xc320 // and bl, al WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3d5c8841; BYTE $0x00 // mov byte [r13 + rdi], bl - LONG $0x325c3a44; BYTE $0x01 // cmp r11b, byte [rdx + rsi + 1] - LONG $0x02768d48 // lea rsi, [rsi + 2] + LONG $0x355c8841; BYTE $0x00 // mov byte [r13 + rsi], bl + LONG $0x02c78348 // add rdi, 2 + LONG $0x723b4466; BYTE $0x02 // cmp r14w, word [rdx + 2] + LONG $0x04528d48 // lea rdx, [rdx + 4] LONG $0xd1950f41 // setne r9b WORD $0xf641; BYTE $0xd9 // neg r9b WORD $0x3041; BYTE $0xd9 // xor r9b, bl @@ -28904,109 +30243,15 @@ LBB5_159: WORD $0xe0d2 // shl al, cl WORD $0x2044; BYTE $0xc8 // and al, r9b WORD $0xd830 // xor al, bl - LONG $0x3d448841; BYTE $0x00 // mov byte [r13 + rdi], al - WORD $0x3949; BYTE $0xf2 // cmp r10, rsi - JNE LBB5_159 - JMP LBB5_162 - -LBB5_132: - WORD $0x894d; BYTE $0xfd // mov r13, r15 - -LBB5_133: - LONG $0x05e6c149 // shl r14, 5 - WORD $0x394d; BYTE $0xd6 // cmp r14, r10 - JGE LBB5_157 - WORD $0x894d; BYTE $0xd0 // mov r8, r10 - WORD $0x294d; BYTE $0xf0 // sub r8, r14 - WORD $0xf749; BYTE $0xd6 // not r14 - WORD $0x014d; BYTE $0xd6 // add r14, r10 - JNE LBB5_160 - -LBB5_135: - WORD $0xf631 // xor esi, esi - JMP LBB5_163 - -LBB5_136: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 - WORD $0xff31 // xor edi, edi - -LBB5_137: - LONG $0x022ef9c5 // vucomisd xmm0, qword [rdx] - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0xd8f6 // neg al - WORD $0x8948; BYTE $0xfe // mov rsi, rdi - LONG $0x03eec148 // shr rsi, 3 - LONG $0x0cb60f45; BYTE $0x37 // movzx r9d, byte [r15 + rsi] - WORD $0x3044; BYTE $0xc8 // xor al, r9b - WORD $0xf989 // mov ecx, edi - WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b3 // mov bl, 1 - WORD $0xe3d2 // shl bl, cl - WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x371c8841 // mov byte [r15 + rsi], bl - LONG $0x02c78348 // add rdi, 2 - LONG $0x422ef9c5; BYTE $0x08 // vucomisd xmm0, qword [rdx + 8] - LONG $0x10528d48 // lea rdx, [rdx + 16] - LONG $0xd1950f41 // setne r9b - WORD $0xf641; BYTE $0xd9 // neg r9b - WORD $0x3041; BYTE $0xd9 // xor r9b, bl - WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0x2044; BYTE $0xc8 // and al, r9b - WORD $0xd830 // xor al, bl - LONG $0x37048841 // mov byte [r15 + rsi], al - WORD $0x3949; BYTE $0xfa // cmp r10, rdi - JNE LBB5_137 - -LBB5_138: - LONG $0x01c0f641 // test r8b, 1 - JE LBB5_157 - LONG $0x022ef9c5 // vucomisd xmm0, qword [rdx] - JMP LBB5_156 - -LBB5_140: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 - WORD $0xff31 // xor edi, edi - -LBB5_141: - LONG $0x323b4466 // cmp r14w, word [rdx] - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0xd8f6 // neg al - WORD $0x8948; BYTE $0xfe // mov rsi, rdi - LONG $0x03eec148 // shr rsi, 3 - LONG $0x0cb60f45; BYTE $0x37 // movzx r9d, byte [r15 + rsi] - WORD $0xf989 // mov ecx, edi - WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b3 // mov bl, 1 - WORD $0xe3d2 // shl bl, cl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x371c8841 // mov byte [r15 + rsi], bl - LONG $0x02c78348 // add rdi, 2 - LONG $0x723b4466; BYTE $0x02 // cmp r14w, word [rdx + 2] - LONG $0x04528d48 // lea rdx, [rdx + 4] - LONG $0xd1950f41 // setne r9b - WORD $0xf641; BYTE $0xd9 // neg r9b - WORD $0x3041; BYTE $0xd9 // xor r9b, bl - WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0x2044; BYTE $0xc8 // and al, r9b - WORD $0xd830 // xor al, bl - LONG $0x37048841 // mov byte [r15 + rsi], al - WORD $0x3949; BYTE $0xfa // cmp r10, rdi + LONG $0x35448841; BYTE $0x00 // mov byte [r13 + rsi], al + WORD $0x3949; BYTE $0xfa // cmp r10, rdi JNE LBB5_141 LBB5_142: LONG $0x01c0f641 // test r8b, 1 - JE LBB5_157 + JE LBB5_164 LONG $0x323b4466 // cmp r14w, word [rdx] - JMP LBB5_156 + JMP LBB5_162 LBB5_144: WORD $0x894d; BYTE $0xc2 // mov r10, r8 @@ -29014,148 +30259,111 @@ LBB5_144: WORD $0xff31 // xor edi, edi LBB5_145: - WORD $0x3b4c; BYTE $0x32 // cmp r14, qword [rdx] - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0xd8f6 // neg al - WORD $0x8948; BYTE $0xfe // mov rsi, rdi - LONG $0x03eec148 // shr rsi, 3 - LONG $0x0cb60f45; BYTE $0x37 // movzx r9d, byte [r15 + rsi] - WORD $0xf989 // mov ecx, edi - WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b3 // mov bl, 1 - WORD $0xe3d2 // shl bl, cl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x371c8841 // mov byte [r15 + rsi], bl - LONG $0x02c78348 // add rdi, 2 - LONG $0x08723b4c // cmp r14, qword [rdx + 8] - LONG $0x10528d48 // lea rdx, [rdx + 16] - LONG $0xd1950f41 // setne r9b - WORD $0xf641; BYTE $0xd9 // neg r9b - WORD $0x3041; BYTE $0xd9 // xor r9b, bl - WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0x2044; BYTE $0xc8 // and al, r9b - WORD $0xd830 // xor al, bl - LONG $0x37048841 // mov byte [r15 + rsi], al - WORD $0x3949; BYTE $0xfa // cmp r10, rdi + WORD $0x3b4c; BYTE $0x32 // cmp r14, qword [rdx] + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xd8f6 // neg al + WORD $0x8948; BYTE $0xfe // mov rsi, rdi + LONG $0x03eec148 // shr rsi, 3 + WORD $0x894d; BYTE $0xeb // mov r11, r13 + LONG $0x4cb60f45; WORD $0x0035 // movzx r9d, byte [r13 + rsi] + WORD $0xf989 // mov ecx, edi + WORD $0xe180; BYTE $0x06 // and cl, 6 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0x3044; BYTE $0xc8 // xor al, r9b + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xcb // xor bl, r9b + LONG $0x355c8841; BYTE $0x00 // mov byte [r13 + rsi], bl + LONG $0x02c78348 // add rdi, 2 + LONG $0x08723b4c // cmp r14, qword [rdx + 8] + LONG $0x10528d48 // lea rdx, [rdx + 16] + LONG $0xd1950f41 // setne r9b + WORD $0xf641; BYTE $0xd9 // neg r9b + WORD $0x3041; BYTE $0xd9 // xor r9b, bl + WORD $0xc980; BYTE $0x01 // or cl, 1 + WORD $0x01b0 // mov al, 1 + WORD $0xe0d2 // shl al, cl + WORD $0x2044; BYTE $0xc8 // and al, r9b + WORD $0xd830 // xor al, bl + LONG $0x35448841; BYTE $0x00 // mov byte [r13 + rsi], al + WORD $0x3949; BYTE $0xfa // cmp r10, rdi JNE LBB5_145 LBB5_146: LONG $0x01c0f641 // test r8b, 1 - JE LBB5_157 + JE LBB5_164 WORD $0x3b4c; BYTE $0x32 // cmp r14, qword [rdx] - JMP LBB5_156 + JMP LBB5_162 LBB5_148: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 WORD $0xff31 // xor edi, edi LBB5_149: - LONG $0x022ef8c5 // vucomiss xmm0, dword [rdx] - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0xd8f6 // neg al - WORD $0x8948; BYTE $0xfe // mov rsi, rdi - LONG $0x03eec148 // shr rsi, 3 - LONG $0x0cb60f45; BYTE $0x37 // movzx r9d, byte [r15 + rsi] - WORD $0x3044; BYTE $0xc8 // xor al, r9b - WORD $0xf989 // mov ecx, edi - WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b3 // mov bl, 1 - WORD $0xe3d2 // shl bl, cl - WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x371c8841 // mov byte [r15 + rsi], bl - LONG $0x02c78348 // add rdi, 2 - LONG $0x422ef8c5; BYTE $0x04 // vucomiss xmm0, dword [rdx + 4] - LONG $0x08528d48 // lea rdx, [rdx + 8] - LONG $0xd1950f41 // setne r9b - WORD $0xf641; BYTE $0xd9 // neg r9b - WORD $0x3041; BYTE $0xd9 // xor r9b, bl - WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0x2044; BYTE $0xc8 // and al, r9b - WORD $0xd830 // xor al, bl - LONG $0x37048841 // mov byte [r15 + rsi], al - WORD $0x3949; BYTE $0xfa // cmp r10, rdi + LONG $0x022ef8c5 // vucomiss xmm0, dword [rdx] + WORD $0x9a0f; BYTE $0xd1 // setp cl + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xc808 // or al, cl + WORD $0xd8f6 // neg al + WORD $0x8948; BYTE $0xfe // mov rsi, rdi + LONG $0x03eec148 // shr rsi, 3 + WORD $0x894d; BYTE $0xee // mov r14, r13 + LONG $0x54b60f45; WORD $0x0035 // movzx r10d, byte [r13 + rsi] + WORD $0xf989 // mov ecx, edi + WORD $0xe180; BYTE $0x06 // and cl, 6 + WORD $0xb341; BYTE $0x01 // mov r11b, 1 + WORD $0xd241; BYTE $0xe3 // shl r11b, cl + WORD $0x3044; BYTE $0xd0 // xor al, r10b + WORD $0x2041; BYTE $0xc3 // and r11b, al + WORD $0x3045; BYTE $0xd3 // xor r11b, r10b + LONG $0x355c8845; BYTE $0x00 // mov byte [r13 + rsi], r11b + LONG $0x02c78348 // add rdi, 2 + LONG $0x422ef8c5; BYTE $0x04 // vucomiss xmm0, dword [rdx + 4] + LONG $0x08528d48 // lea rdx, [rdx + 8] + LONG $0xd29a0f41 // setp r10b + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xd8f6 // neg al + WORD $0x3044; BYTE $0xd8 // xor al, r11b + WORD $0xc980; BYTE $0x01 // or cl, 1 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xdb // xor bl, r11b + LONG $0x355c8841; BYTE $0x00 // mov byte [r13 + rsi], bl + WORD $0x3949; BYTE $0xf9 // cmp r9, rdi JNE LBB5_149 LBB5_150: LONG $0x01c0f641 // test r8b, 1 - JE LBB5_157 + JE LBB5_164 LONG $0x022ef8c5 // vucomiss xmm0, dword [rdx] - JMP LBB5_156 LBB5_152: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 - WORD $0xff31 // xor edi, edi - -LBB5_153: - WORD $0x3b44; BYTE $0x32 // cmp r14d, dword [rdx] - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0xd8f6 // neg al - WORD $0x8948; BYTE $0xfe // mov rsi, rdi - LONG $0x03eec148 // shr rsi, 3 - LONG $0x0cb60f45; BYTE $0x37 // movzx r9d, byte [r15 + rsi] - WORD $0xf989 // mov ecx, edi - WORD $0xe180; BYTE $0x06 // and cl, 6 + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xc208 // or dl, al + WORD $0xdaf6 // neg dl + WORD $0x8948; BYTE $0xf8 // mov rax, rdi + LONG $0x03e8c148 // shr rax, 3 + LONG $0x05748a41; BYTE $0x00 // mov sil, byte [r13 + rax] + LONG $0x07e78040 // and dil, 7 WORD $0x01b3 // mov bl, 1 + WORD $0xf989 // mov ecx, edi WORD $0xe3d2 // shl bl, cl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x371c8841 // mov byte [r15 + rsi], bl - LONG $0x02c78348 // add rdi, 2 - LONG $0x04723b44 // cmp r14d, dword [rdx + 4] - LONG $0x08528d48 // lea rdx, [rdx + 8] - LONG $0xd1950f41 // setne r9b - WORD $0xf641; BYTE $0xd9 // neg r9b - WORD $0x3041; BYTE $0xd9 // xor r9b, bl - WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0x2044; BYTE $0xc8 // and al, r9b - WORD $0xd830 // xor al, bl - LONG $0x37048841 // mov byte [r15 + rsi], al - WORD $0x3949; BYTE $0xfa // cmp r10, rdi - JNE LBB5_153 - -LBB5_154: - LONG $0x01c0f641 // test r8b, 1 - JE LBB5_157 - WORD $0x3b44; BYTE $0x32 // cmp r14d, dword [rdx] - -LBB5_156: - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0xd8f6 // neg al - WORD $0x8948; BYTE $0xfa // mov rdx, rdi - LONG $0x03eac148 // shr rdx, 3 - LONG $0x17348a41 // mov sil, byte [r15 + rdx] - LONG $0x07e78040 // and dil, 7 - WORD $0x01b3 // mov bl, 1 - WORD $0xf989 // mov ecx, edi - WORD $0xe3d2 // shl bl, cl - WORD $0x3040; BYTE $0xf0 // xor al, sil - WORD $0xc320 // and bl, al - WORD $0x3040; BYTE $0xf3 // xor bl, sil - LONG $0x171c8841 // mov byte [r15 + rdx], bl - -LBB5_157: - MOVQ 1280(SP), SP - VZEROUPPER - RET + WORD $0x3040; BYTE $0xf2 // xor dl, sil + WORD $0xd320 // and bl, dl + WORD $0x3040; BYTE $0xf3 // xor bl, sil + LONG $0x055c8841; BYTE $0x00 // mov byte [r13 + rax], bl + JMP LBB5_164 -LBB5_160: +LBB5_153: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0xf631 // xor esi, esi -LBB5_161: +LBB5_154: LONG $0x321c3a44 // cmp r11b, byte [rdx + rsi] WORD $0x950f; BYTE $0xd0 // setne al WORD $0xd8f6 // neg al @@ -29182,14 +30390,14 @@ LBB5_161: WORD $0xd830 // xor al, bl LONG $0x3d448841; BYTE $0x00 // mov byte [r13 + rdi], al WORD $0x3949; BYTE $0xf2 // cmp r10, rsi - JNE LBB5_161 + JNE LBB5_154 -LBB5_162: +LBB5_155: WORD $0x0148; BYTE $0xf2 // add rdx, rsi -LBB5_163: +LBB5_156: LONG $0x01c0f641 // test r8b, 1 - JE LBB5_157 + JE LBB5_164 WORD $0x3a44; BYTE $0x1a // cmp r11b, byte [rdx] WORD $0x950f; BYTE $0xd0 // setne al WORD $0xd8f6 // neg al @@ -29203,8 +30411,70 @@ LBB5_163: WORD $0x3040; BYTE $0xf8 // xor al, dil WORD $0xc320 // and bl, al WORD $0x3040; BYTE $0xfb // xor bl, dil + JMP LBB5_163 + +LBB5_158: + WORD $0x894d; BYTE $0xc2 // mov r10, r8 + LONG $0xfee28349 // and r10, -2 + WORD $0xff31 // xor edi, edi + +LBB5_159: + WORD $0x3b44; BYTE $0x32 // cmp r14d, dword [rdx] + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xd8f6 // neg al + WORD $0x8948; BYTE $0xfe // mov rsi, rdi + LONG $0x03eec148 // shr rsi, 3 + WORD $0x894d; BYTE $0xeb // mov r11, r13 + LONG $0x4cb60f45; WORD $0x0035 // movzx r9d, byte [r13 + rsi] + WORD $0xf989 // mov ecx, edi + WORD $0xe180; BYTE $0x06 // and cl, 6 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0x3044; BYTE $0xc8 // xor al, r9b + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xcb // xor bl, r9b + LONG $0x355c8841; BYTE $0x00 // mov byte [r13 + rsi], bl + LONG $0x02c78348 // add rdi, 2 + LONG $0x04723b44 // cmp r14d, dword [rdx + 4] + LONG $0x08528d48 // lea rdx, [rdx + 8] + LONG $0xd1950f41 // setne r9b + WORD $0xf641; BYTE $0xd9 // neg r9b + WORD $0x3041; BYTE $0xd9 // xor r9b, bl + WORD $0xc980; BYTE $0x01 // or cl, 1 + WORD $0x01b0 // mov al, 1 + WORD $0xe0d2 // shl al, cl + WORD $0x2044; BYTE $0xc8 // and al, r9b + WORD $0xd830 // xor al, bl + LONG $0x35448841; BYTE $0x00 // mov byte [r13 + rsi], al + WORD $0x3949; BYTE $0xfa // cmp r10, rdi + JNE LBB5_159 + +LBB5_160: + LONG $0x01c0f641 // test r8b, 1 + JE LBB5_164 + WORD $0x3b44; BYTE $0x32 // cmp r14d, dword [rdx] + +LBB5_162: + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xd8f6 // neg al + WORD $0x8948; BYTE $0xfa // mov rdx, rdi + LONG $0x03eac148 // shr rdx, 3 + LONG $0x15748a41; BYTE $0x00 // mov sil, byte [r13 + rdx] + LONG $0x07e78040 // and dil, 7 + WORD $0x01b3 // mov bl, 1 + WORD $0xf989 // mov ecx, edi + WORD $0xe3d2 // shl bl, cl + WORD $0x3040; BYTE $0xf0 // xor al, sil + WORD $0xc320 // and bl, al + WORD $0x3040; BYTE $0xf3 // xor bl, sil + +LBB5_163: LONG $0x155c8841; BYTE $0x00 // mov byte [r13 + rdx], bl - JMP LBB5_157 + +LBB5_164: + MOVQ 1280(SP), SP + VZEROUPPER + RET LBB5_165: LONG $0xe0e68349 // and r14, -32 @@ -29213,13 +30483,14 @@ LBB5_165: WORD $0x0148; BYTE $0xd0 // add rax, rdx QUAD $0x0000018824848948 // mov qword [rsp + 392], rax QUAD $0x0000017824b4894c // mov qword [rsp + 376], r14 - LONG $0xb7048d4b // lea rax, [r15 + 4*r14] + QUAD $0x00000000b5048d4a // lea rax, [4*r14] + WORD $0x014c; BYTE $0xe8 // add rax, r13 QUAD $0x0000019024848948 // mov qword [rsp + 400], rax LONG $0x6e79c1c4; BYTE $0xc3 // vmovd xmm0, r11d LONG $0x787de2c4; BYTE $0xc0 // vpbroadcastb ymm0, xmm0 QUAD $0x00020024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 512], ymm0 WORD $0xf631 // xor esi, esi - QUAD $0x0000011024bc894c // mov qword [rsp + 272], r15 + QUAD $0x0000011024ac894c // mov qword [rsp + 272], r13 LBB5_166: QUAD $0x0000019824b48948 // mov qword [rsp + 408], rsi @@ -29229,32 +30500,32 @@ LBB5_166: QUAD $0x000000e824848948 // mov qword [rsp + 232], rax WORD $0x8948; BYTE $0xf0 // mov rax, rsi LONG $0x40c88348 // or rax, 64 - QUAD $0x000000e024848948 // mov qword [rsp + 224], rax + QUAD $0x000000d824848948 // mov qword [rsp + 216], rax WORD $0x8948; BYTE $0xf0 // mov rax, rsi LONG $0x60c88348 // or rax, 96 - QUAD $0x000000d824848948 // mov qword [rsp + 216], rax + QUAD $0x000000a024848948 // mov qword [rsp + 160], rax WORD $0x8948; BYTE $0xf0 // mov rax, rsi LONG $0x00800d48; WORD $0x0000 // or rax, 128 - QUAD $0x0000014024848948 // mov qword [rsp + 320], rax + LONG $0x24448948; BYTE $0x20 // mov qword [rsp + 32], rax WORD $0x8948; BYTE $0xf0 // mov rax, rsi LONG $0x00a00d48; WORD $0x0000 // or rax, 160 - LONG $0x24448948; BYTE $0x38 // mov qword [rsp + 56], rax + LONG $0x24448948; BYTE $0x48 // mov qword [rsp + 72], rax WORD $0x8948; BYTE $0xf0 // mov rax, rsi LONG $0x00c00d48; WORD $0x0000 // or rax, 192 - QUAD $0x000000a824848948 // mov qword [rsp + 168], rax + QUAD $0x000000b024848948 // mov qword [rsp + 176], rax WORD $0x8948; BYTE $0xf0 // mov rax, rsi LONG $0x00e00d48; WORD $0x0000 // or rax, 224 - QUAD $0x000000a024848948 // mov qword [rsp + 160], rax + QUAD $0x000000a824848948 // mov qword [rsp + 168], rax WORD $0x8948; BYTE $0xf0 // mov rax, rsi LONG $0x01000d48; WORD $0x0000 // or rax, 256 QUAD $0x0000012024848948 // mov qword [rsp + 288], rax WORD $0x8948; BYTE $0xf0 // mov rax, rsi LONG $0x01200d48; WORD $0x0000 // or rax, 288 - LONG $0x24448948; BYTE $0x30 // mov qword [rsp + 48], rax + LONG $0x24448948; BYTE $0x40 // mov qword [rsp + 64], rax WORD $0x8948; BYTE $0xf0 // mov rax, rsi QUAD $0x0000010824b48948 // mov qword [rsp + 264], rsi LONG $0x01400d48; WORD $0x0000 // or rax, 320 - LONG $0x24448948; BYTE $0x68 // mov qword [rsp + 104], rax + LONG $0x24448948; BYTE $0x38 // mov qword [rsp + 56], rax WORD $0x8948; BYTE $0xf0 // mov rax, rsi LONG $0x02000d48; WORD $0x0000 // or rax, 512 WORD $0x8948; BYTE $0xc1 // mov rcx, rax @@ -29296,10 +30567,10 @@ LBB5_166: LONG $0xc86ef9c5 // vmovd xmm1, eax WORD $0x8948; BYTE $0xf0 // mov rax, rsi LONG $0x01600d48; WORD $0x0000 // or rax, 352 - LONG $0x24448948; BYTE $0x48 // mov qword [rsp + 72], rax + LONG $0x24448948; BYTE $0x30 // mov qword [rsp + 48], rax WORD $0x8948; BYTE $0xf0 // mov rax, rsi LONG $0x01800d48; WORD $0x0000 // or rax, 384 - LONG $0x24448948; BYTE $0x20 // mov qword [rsp + 32], rax + QUAD $0x0000014024848948 // mov qword [rsp + 320], rax WORD $0x8948; BYTE $0xf0 // mov rax, rsi LONG $0x01a00d48; WORD $0x0000 // or rax, 416 LONG $0x24448948; BYTE $0x28 // mov qword [rsp + 40], rax @@ -29312,10 +30583,10 @@ LBB5_166: WORD $0x8948; BYTE $0xf0 // mov rax, rsi LONG $0x02200d48; WORD $0x0000 // or rax, 544 WORD $0x8949; BYTE $0xc5 // mov r13, rax - QUAD $0x000000d024848948 // mov qword [rsp + 208], rax + QUAD $0x000000b824848948 // mov qword [rsp + 184], rax WORD $0x8949; BYTE $0xf4 // mov r12, rsi LONG $0x40cc8149; WORD $0x0002; BYTE $0x00 // or r12, 576 - QUAD $0x000000c824a4894c // mov qword [rsp + 200], r12 + QUAD $0x000000e024a4894c // mov qword [rsp + 224], r12 WORD $0x8948; BYTE $0xf0 // mov rax, rsi LONG $0x02600d48; WORD $0x0000 // or rax, 608 WORD $0x8949; BYTE $0xc6 // mov r14, rax @@ -29325,22 +30596,22 @@ LBB5_166: QUAD $0x0000010024bc894c // mov qword [rsp + 256], r15 WORD $0x8949; BYTE $0xf2 // mov r10, rsi LONG $0xa0ca8149; WORD $0x0002; BYTE $0x00 // or r10, 672 - LONG $0x2454894c; BYTE $0x70 // mov qword [rsp + 112], r10 + LONG $0x2454894c; BYTE $0x68 // mov qword [rsp + 104], r10 WORD $0x8948; BYTE $0xf0 // mov rax, rsi LONG $0x02c00d48; WORD $0x0000 // or rax, 704 QUAD $0x0000008024848948 // mov qword [rsp + 128], rax WORD $0x8949; BYTE $0xf0 // mov r8, rsi LONG $0xe0c88149; WORD $0x0002; BYTE $0x00 // or r8, 736 - LONG $0x2444894c; BYTE $0x40 // mov qword [rsp + 64], r8 + LONG $0x2444894c; BYTE $0x70 // mov qword [rsp + 112], r8 WORD $0x8948; BYTE $0xf0 // mov rax, rsi LONG $0x03000d48; WORD $0x0000 // or rax, 768 - QUAD $0x000000b824848948 // mov qword [rsp + 184], rax + QUAD $0x000000c824848948 // mov qword [rsp + 200], rax WORD $0x8948; BYTE $0xf0 // mov rax, rsi LONG $0x03200d48; WORD $0x0000 // or rax, 800 QUAD $0x0000009824848948 // mov qword [rsp + 152], rax WORD $0x8949; BYTE $0xf1 // mov r9, rsi LONG $0x40c98149; WORD $0x0003; BYTE $0x00 // or r9, 832 - QUAD $0x000000b0248c894c // mov qword [rsp + 176], r9 + QUAD $0x000000d0248c894c // mov qword [rsp + 208], r9 WORD $0x8948; BYTE $0xf7 // mov rdi, rsi LONG $0x60cf8148; WORD $0x0003; BYTE $0x00 // or rdi, 864 LONG $0x247c8948; BYTE $0x60 // mov qword [rsp + 96], rdi @@ -29363,7 +30634,7 @@ LBB5_166: QUAD $0x00000080249c8b48 // mov rbx, qword [rsp + 128] LONG $0x2079e3c4; WORD $0x1a04; BYTE $0x06 // vpinsrb xmm0, xmm0, byte [rdx + rbx], 6 LONG $0x2079a3c4; WORD $0x0204; BYTE $0x07 // vpinsrb xmm0, xmm0, byte [rdx + r8], 7 - QUAD $0x000000b8249c8b48 // mov rbx, qword [rsp + 184] + QUAD $0x000000c8249c8b48 // mov rbx, qword [rsp + 200] LONG $0x2079e3c4; WORD $0x1a04; BYTE $0x08 // vpinsrb xmm0, xmm0, byte [rdx + rbx], 8 QUAD $0x00000098249c8b48 // mov rbx, qword [rsp + 152] LONG $0x2079e3c4; WORD $0x1a04; BYTE $0x09 // vpinsrb xmm0, xmm0, byte [rdx + rbx], 9 @@ -29375,27 +30646,27 @@ LBB5_166: LONG $0x2079e3c4; WORD $0x3204; BYTE $0x0f // vpinsrb xmm0, xmm0, byte [rdx + rsi], 15 QUAD $0x000000e824a48b4c // mov r12, qword [rsp + 232] LONG $0x2061a3c4; WORD $0x221c; BYTE $0x01 // vpinsrb xmm3, xmm3, byte [rdx + r12], 1 - QUAD $0x000000e024b48b4c // mov r14, qword [rsp + 224] + QUAD $0x000000d824b48b4c // mov r14, qword [rsp + 216] LONG $0x2061a3c4; WORD $0x321c; BYTE $0x02 // vpinsrb xmm3, xmm3, byte [rdx + r14], 2 - QUAD $0x000000d8249c8b4c // mov r11, qword [rsp + 216] + QUAD $0x000000a0249c8b4c // mov r11, qword [rsp + 160] LONG $0x2061a3c4; WORD $0x1a1c; BYTE $0x03 // vpinsrb xmm3, xmm3, byte [rdx + r11], 3 - QUAD $0x0000014024848b4c // mov r8, qword [rsp + 320] + LONG $0x24448b4c; BYTE $0x20 // mov r8, qword [rsp + 32] LONG $0x2061a3c4; WORD $0x021c; BYTE $0x04 // vpinsrb xmm3, xmm3, byte [rdx + r8], 4 - LONG $0x244c8b4c; BYTE $0x38 // mov r9, qword [rsp + 56] + LONG $0x244c8b4c; BYTE $0x48 // mov r9, qword [rsp + 72] LONG $0x2061a3c4; WORD $0x0a1c; BYTE $0x05 // vpinsrb xmm3, xmm3, byte [rdx + r9], 5 - QUAD $0x000000a8249c8b48 // mov rbx, qword [rsp + 168] + QUAD $0x000000b0249c8b48 // mov rbx, qword [rsp + 176] LONG $0x2061e3c4; WORD $0x1a1c; BYTE $0x06 // vpinsrb xmm3, xmm3, byte [rdx + rbx], 6 - QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] + QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] LONG $0x2061e3c4; WORD $0x321c; BYTE $0x07 // vpinsrb xmm3, xmm3, byte [rdx + rsi], 7 QUAD $0x0000012024bc8b4c // mov r15, qword [rsp + 288] LONG $0x2061a3c4; WORD $0x3a1c; BYTE $0x08 // vpinsrb xmm3, xmm3, byte [rdx + r15], 8 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] LONG $0x2061e3c4; WORD $0x3a1c; BYTE $0x09 // vpinsrb xmm3, xmm3, byte [rdx + rdi], 9 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] LONG $0x2061e3c4; WORD $0x021c; BYTE $0x0a // vpinsrb xmm3, xmm3, byte [rdx + rax], 10 - LONG $0x24548b4c; BYTE $0x48 // mov r10, qword [rsp + 72] + LONG $0x24548b4c; BYTE $0x30 // mov r10, qword [rsp + 48] LONG $0x2061a3c4; WORD $0x121c; BYTE $0x0b // vpinsrb xmm3, xmm3, byte [rdx + r10], 11 - LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] LONG $0x2061e3c4; WORD $0x0a1c; BYTE $0x0c // vpinsrb xmm3, xmm3, byte [rdx + rcx], 12 LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] LONG $0x2061e3c4; WORD $0x0a1c; BYTE $0x0d // vpinsrb xmm3, xmm3, byte [rdx + rcx], 13 @@ -29403,25 +30674,25 @@ LBB5_166: LONG $0x2061e3c4; WORD $0x0a1c; BYTE $0x0e // vpinsrb xmm3, xmm3, byte [rdx + rcx], 14 QUAD $0x0000009024ac8b4c // mov r13, qword [rsp + 144] LONG $0x2061a3c4; WORD $0x2a1c; BYTE $0x0f // vpinsrb xmm3, xmm3, byte [rdx + r13], 15 - QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] + QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] QUAD $0x01010a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 1], 1 - QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] + QUAD $0x000000e0248c8b48 // mov rcx, qword [rsp + 224] QUAD $0x02010a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 1], 2 QUAD $0x000000f8248c8b48 // mov rcx, qword [rsp + 248] QUAD $0x03010a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 1], 3 QUAD $0x00000100248c8b48 // mov rcx, qword [rsp + 256] QUAD $0x04010a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 1], 4 - LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] + LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] QUAD $0x05010a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 1], 5 QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] QUAD $0x06010a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 1], 6 - LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] + LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] QUAD $0x07010a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 1], 7 - QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] + QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] QUAD $0x08010a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 1], 8 QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] QUAD $0x09010a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 1], 9 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] + QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] QUAD $0x0a010a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 1], 10 LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] QUAD $0x0b010a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 1], 11 @@ -29446,7 +30717,7 @@ LBB5_166: QUAD $0x0a01026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 1], 10 WORD $0x8949; BYTE $0xc3 // mov r11, rax QUAD $0x0b01126c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r10 + 1], 11 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] QUAD $0x0c01026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 1], 12 LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0d01026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 1], 13 @@ -29463,26 +30734,26 @@ LBB5_166: QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] LONG $0x027cb60f; BYTE $0x08 // movzx edi, byte [rdx + rax + 8] LONG $0xd76e79c5 // vmovd xmm10, edi - QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] + QUAD $0x000000b824b48b48 // mov rsi, qword [rsp + 184] QUAD $0x0001e024846ff9c5; BYTE $0x00 // vmovdqa xmm0, oword [rsp + 480] QUAD $0x010232442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 2], 1 - QUAD $0x000000c8249c8b48 // mov rbx, qword [rsp + 200] + QUAD $0x000000e0249c8b48 // mov rbx, qword [rsp + 224] QUAD $0x02021a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 2], 2 QUAD $0x000000f824848b4c // mov r8, qword [rsp + 248] QUAD $0x030202442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 2], 3 QUAD $0x00000100248c8b4c // mov r9, qword [rsp + 256] QUAD $0x04020a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 2], 4 - LONG $0x247c8b4c; BYTE $0x70 // mov r15, qword [rsp + 112] + LONG $0x247c8b4c; BYTE $0x68 // mov r15, qword [rsp + 104] QUAD $0x05023a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 2], 5 QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x060202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 6 - LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] QUAD $0x070202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 7 - QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] QUAD $0x080202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 8 QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] QUAD $0x090202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 9 - QUAD $0x000000b024a48b4c // mov r12, qword [rsp + 176] + QUAD $0x000000d024a48b4c // mov r12, qword [rsp + 208] QUAD $0x0a0222442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 2], 10 LONG $0x246c8b4c; BYTE $0x60 // mov r13, qword [rsp + 96] QUAD $0x0b022a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 2], 11 @@ -29499,24 +30770,24 @@ LBB5_166: QUAD $0x0102025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 2], 1 WORD $0x8948; BYTE $0xc8 // mov rax, rcx QUAD $0x02020a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 2], 2 - QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] + QUAD $0x000000a0248c8b48 // mov rcx, qword [rsp + 160] QUAD $0x03020a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 2], 3 - QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] + LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] QUAD $0x04020a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 2], 4 - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] + LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] QUAD $0x05020a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 2], 5 - QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] + QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] QUAD $0x06020a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 2], 6 - QUAD $0x000000a024bc8b48 // mov rdi, qword [rsp + 160] + QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] QUAD $0x07023a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 2], 7 QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] QUAD $0x08023a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 2], 8 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] + LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] QUAD $0x09020a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 2], 9 QUAD $0x0a021a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 2], 10 - LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] QUAD $0x0b020a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 2], 11 - LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] QUAD $0x0c020a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 2], 12 LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] QUAD $0x0d020a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 2], 13 @@ -29531,9 +30802,9 @@ LBB5_166: QUAD $0x05033a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r15 + 3], 5 QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] QUAD $0x06030a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 3], 6 - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x247c8b4c; BYTE $0x70 // mov r15, qword [rsp + 112] QUAD $0x07033a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r15 + 3], 7 - QUAD $0x000000b8248c8b4c // mov r9, qword [rsp + 184] + QUAD $0x000000c8248c8b4c // mov r9, qword [rsp + 200] QUAD $0x08030a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r9 + 3], 8 QUAD $0x00000098249c8b4c // mov r11, qword [rsp + 152] QUAD $0x09031a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r11 + 3], 9 @@ -29548,24 +30819,24 @@ LBB5_166: QUAD $0x000000e8248c8b48 // mov rcx, qword [rsp + 232] QUAD $0x01030a6c2039e3c4 // vpinsrb xmm5, xmm8, byte [rdx + rcx + 3], 1 QUAD $0x0203026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 2 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] QUAD $0x0303026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 3 - QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] + LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] QUAD $0x04030a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 3], 4 - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] + LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] QUAD $0x05030a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 3], 5 - QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] + QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] QUAD $0x0603326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 3], 6 - QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] + QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] QUAD $0x0703326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 3], 7 QUAD $0x08033a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 3], 8 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] QUAD $0x0903326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 3], 9 - LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] + LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] QUAD $0x0a033a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 3], 10 - LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] + LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] QUAD $0x0b033a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 3], 11 - LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] + QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] QUAD $0x0c033a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 3], 12 LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] QUAD $0x0d033a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 3], 13 @@ -29584,22 +30855,22 @@ LBB5_166: LONG $0x3a7cb60f; BYTE $0x09 // movzx edi, byte [rdx + rdi + 9] LONG $0xdf6e79c5 // vmovd xmm11, edi QUAD $0x0001a024846ff9c5; BYTE $0x00 // vmovdqa xmm0, oword [rsp + 416] - QUAD $0x000000d024a48b4c // mov r12, qword [rsp + 208] + QUAD $0x000000b824a48b4c // mov r12, qword [rsp + 184] QUAD $0x010422442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 4], 1 - QUAD $0x000000c824848b4c // mov r8, qword [rsp + 200] + QUAD $0x000000e024848b4c // mov r8, qword [rsp + 224] QUAD $0x020402442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 4], 2 QUAD $0x000000f8249c8b48 // mov rbx, qword [rsp + 248] QUAD $0x03041a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 4], 3 QUAD $0x0000010024bc8b48 // mov rdi, qword [rsp + 256] QUAD $0x04043a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 4], 4 - LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] + LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] QUAD $0x05043a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 4], 5 QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] QUAD $0x06043a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 4], 6 QUAD $0x07043a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 4], 7 QUAD $0x08040a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 4], 8 QUAD $0x09041a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 4], 9 - QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] + QUAD $0x000000d024bc8b4c // mov r15, qword [rsp + 208] QUAD $0x0a043a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 4], 10 LONG $0x245c8b4c; BYTE $0x60 // mov r11, qword [rsp + 96] QUAD $0x0b041a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 4], 11 @@ -29611,24 +30882,24 @@ LBB5_166: QUAD $0x0f0412442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 4], 15 QUAD $0x000000e824948b4c // mov r10, qword [rsp + 232] QUAD $0x0104125c2001a3c4 // vpinsrb xmm3, xmm15, byte [rdx + r10 + 4], 1 - QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] + QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] QUAD $0x02043a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 4], 2 QUAD $0x0304025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 3 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0404025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 4 QUAD $0x05040a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 4], 5 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x0604025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 6 - QUAD $0x000000a024bc8b48 // mov rdi, qword [rsp + 160] + QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] QUAD $0x07043a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 4], 7 QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0804025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 8 QUAD $0x0904325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 4], 9 - LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] QUAD $0x0a04325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 4], 10 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x0b04025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 11 - LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] QUAD $0x0c040a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 4], 12 LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] QUAD $0x0d040a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 4], 13 @@ -29640,13 +30911,13 @@ LBB5_166: QUAD $0x03051a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 5], 3 QUAD $0x0000010024a48b4c // mov r12, qword [rsp + 256] QUAD $0x040522642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r12 + 5], 4 - LONG $0x24448b4c; BYTE $0x70 // mov r8, qword [rsp + 112] + LONG $0x24448b4c; BYTE $0x68 // mov r8, qword [rsp + 104] QUAD $0x050502642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r8 + 5], 5 QUAD $0x00000080249c8b48 // mov rbx, qword [rsp + 128] QUAD $0x06051a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 5], 6 - LONG $0x245c8b48; BYTE $0x40 // mov rbx, qword [rsp + 64] + LONG $0x245c8b48; BYTE $0x70 // mov rbx, qword [rsp + 112] QUAD $0x07051a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 5], 7 - QUAD $0x000000b8249c8b48 // mov rbx, qword [rsp + 184] + QUAD $0x000000c8249c8b48 // mov rbx, qword [rsp + 200] QUAD $0x08051a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 5], 8 QUAD $0x00000098249c8b48 // mov rbx, qword [rsp + 152] QUAD $0x09051a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 5], 9 @@ -29660,24 +30931,24 @@ LBB5_166: LONG $0x245c8b48; BYTE $0x50 // mov rbx, qword [rsp + 80] QUAD $0x0f051a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 5], 15 QUAD $0x0105126c2049a3c4 // vpinsrb xmm5, xmm6, byte [rdx + r10 + 5], 1 - QUAD $0x000000e0249c8b48 // mov rbx, qword [rsp + 224] - QUAD $0x02051a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 5], 2 QUAD $0x000000d8249c8b48 // mov rbx, qword [rsp + 216] + QUAD $0x02051a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 5], 2 + QUAD $0x000000a0249c8b48 // mov rbx, qword [rsp + 160] QUAD $0x03051a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 5], 3 - QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] + LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] QUAD $0x04051a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 5], 4 - LONG $0x244c8b4c; BYTE $0x38 // mov r9, qword [rsp + 56] + LONG $0x244c8b4c; BYTE $0x48 // mov r9, qword [rsp + 72] QUAD $0x05050a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 5], 5 - QUAD $0x000000a8249c8b48 // mov rbx, qword [rsp + 168] + QUAD $0x000000b0249c8b48 // mov rbx, qword [rsp + 176] QUAD $0x06051a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 5], 6 QUAD $0x07053a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 5], 7 QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] QUAD $0x08053a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 5], 8 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] QUAD $0x09053a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 5], 9 QUAD $0x0a05326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 5], 10 QUAD $0x0b05026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 11 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] QUAD $0x0c05026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 12 LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0d05026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 13 @@ -29691,9 +30962,9 @@ LBB5_166: QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] LONG $0x027cb60f; BYTE $0x0a // movzx edi, byte [rdx + rax + 10] LONG $0xe76ef9c5 // vmovd xmm4, edi - QUAD $0x000000d0249c8b4c // mov r11, qword [rsp + 208] + QUAD $0x000000b8249c8b4c // mov r11, qword [rsp + 184] QUAD $0x01061a442019a3c4 // vpinsrb xmm0, xmm12, byte [rdx + r11 + 6], 1 - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] + QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] QUAD $0x020602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 2 QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] QUAD $0x030602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 3 @@ -29701,13 +30972,13 @@ LBB5_166: QUAD $0x050602442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 6], 5 QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x060602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 6 - LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] + LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] QUAD $0x07060a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 6], 7 - QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] QUAD $0x080602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 8 QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] QUAD $0x090602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 9 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] QUAD $0x0a0602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 10 QUAD $0x0b063a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 6], 11 QUAD $0x0000008824bc8b4c // mov r15, qword [rsp + 136] @@ -29719,26 +30990,26 @@ LBB5_166: LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] QUAD $0x0f0602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 15 QUAD $0x0106126c2041a3c4 // vpinsrb xmm5, xmm7, byte [rdx + r10 + 6], 1 - QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] QUAD $0x0206026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 6], 2 - QUAD $0x000000d824848b4c // mov r8, qword [rsp + 216] + QUAD $0x000000a024848b4c // mov r8, qword [rsp + 160] QUAD $0x0306026c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r8 + 6], 3 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0406026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 6], 4 QUAD $0x05060a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 6], 5 - QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] + QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] QUAD $0x06063a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 6], 6 - QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] + QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] QUAD $0x0706026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 6], 7 QUAD $0x0000012024ac8b4c // mov r13, qword [rsp + 288] QUAD $0x08062a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r13 + 6], 8 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] QUAD $0x0906026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 6], 9 - LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] QUAD $0x0a06326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 6], 10 - LONG $0x244c8b4c; BYTE $0x48 // mov r9, qword [rsp + 72] + LONG $0x244c8b4c; BYTE $0x30 // mov r9, qword [rsp + 48] QUAD $0x0b060a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 6], 11 - LONG $0x24648b4c; BYTE $0x20 // mov r12, qword [rsp + 32] + QUAD $0x0000014024a48b4c // mov r12, qword [rsp + 320] QUAD $0x0c06226c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r12 + 6], 12 LONG $0x24748b48; BYTE $0x28 // mov rsi, qword [rsp + 40] QUAD $0x0d06326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 6], 13 @@ -29747,22 +31018,22 @@ LBB5_166: QUAD $0x0000009024a48b4c // mov r12, qword [rsp + 144] QUAD $0x0f06226c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r12 + 6], 15 QUAD $0x01071a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 7], 1 - QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] + QUAD $0x000000e024b48b48 // mov rsi, qword [rsp + 224] QUAD $0x020732542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 7], 2 QUAD $0x000000f824b48b48 // mov rsi, qword [rsp + 248] QUAD $0x030732542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 7], 3 QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] QUAD $0x040732542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 7], 4 - LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] + LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] QUAD $0x050732542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 7], 5 QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] QUAD $0x060732542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 7], 6 QUAD $0x07070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 7 - QUAD $0x000000b824a48b4c // mov r12, qword [rsp + 184] + QUAD $0x000000c824a48b4c // mov r12, qword [rsp + 200] QUAD $0x080722542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 7], 8 QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] QUAD $0x09070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 9 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] + QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] QUAD $0x0a070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 10 LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] QUAD $0x0b070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 11 @@ -29772,22 +31043,22 @@ LBB5_166: LONG $0x247c8b4c; BYTE $0x50 // mov r15, qword [rsp + 80] QUAD $0x0f073a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 7], 15 QUAD $0x0107124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 7], 1 - QUAD $0x000000e0249c8b48 // mov rbx, qword [rsp + 224] + QUAD $0x000000d8249c8b48 // mov rbx, qword [rsp + 216] QUAD $0x02071a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 7], 2 QUAD $0x0307024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 7], 3 - QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] + LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] QUAD $0x04070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 4 - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] + LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] QUAD $0x05070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 5 QUAD $0x06073a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 7], 6 - QUAD $0x000000a0248c8b48 // mov rcx, qword [rsp + 160] + QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] QUAD $0x07070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 7 QUAD $0x08072a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 7], 8 QUAD $0x0907024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 7], 9 - LONG $0x24748b4c; BYTE $0x68 // mov r14, qword [rsp + 104] + LONG $0x24748b4c; BYTE $0x38 // mov r14, qword [rsp + 56] QUAD $0x0a07324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 7], 10 QUAD $0x0b070a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 7], 11 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] QUAD $0x0c07024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 7], 12 LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0d07024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 7], 13 @@ -29805,24 +31076,24 @@ LBB5_166: QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] LONG $0x027cb60f; BYTE $0x0b // movzx edi, byte [rdx + rax + 11] LONG $0xd76ef9c5 // vmovd xmm2, edi - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] QUAD $0x010802442031e3c4 // vpinsrb xmm0, xmm9, byte [rdx + rax + 8], 1 - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] + QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] QUAD $0x020802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 8], 2 QUAD $0x000000f8248c8b48 // mov rcx, qword [rsp + 248] QUAD $0x03080a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 8], 3 QUAD $0x0000010024948b4c // mov r10, qword [rsp + 256] QUAD $0x040812442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 8], 4 - LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] QUAD $0x050802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 8], 5 QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] QUAD $0x060832442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 8], 6 - LONG $0x24448b4c; BYTE $0x40 // mov r8, qword [rsp + 64] + LONG $0x24448b4c; BYTE $0x70 // mov r8, qword [rsp + 112] QUAD $0x070802442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 8], 7 QUAD $0x080822442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 8], 8 QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] QUAD $0x090802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 8], 9 - QUAD $0x000000b024a48b4c // mov r12, qword [rsp + 176] + QUAD $0x000000d024a48b4c // mov r12, qword [rsp + 208] QUAD $0x0a0822442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 8], 10 LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] QUAD $0x0b083a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 8], 11 @@ -29836,42 +31107,42 @@ LBB5_166: QUAD $0x000000e824bc8b4c // mov r15, qword [rsp + 232] QUAD $0x01083a6c2029a3c4 // vpinsrb xmm5, xmm10, byte [rdx + r15 + 8], 1 QUAD $0x02081a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 8], 2 - QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] + QUAD $0x000000a024bc8b48 // mov rdi, qword [rsp + 160] QUAD $0x03083a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 8], 3 - QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] + LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] QUAD $0x04083a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 8], 4 - LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] + LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] QUAD $0x05083a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 8], 5 - QUAD $0x000000a8248c8b4c // mov r9, qword [rsp + 168] + QUAD $0x000000b0248c8b4c // mov r9, qword [rsp + 176] QUAD $0x06080a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 8], 6 - QUAD $0x000000a024ac8b4c // mov r13, qword [rsp + 160] + QUAD $0x000000a824ac8b4c // mov r13, qword [rsp + 168] QUAD $0x07082a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r13 + 8], 7 QUAD $0x00000120249c8b48 // mov rbx, qword [rsp + 288] QUAD $0x08081a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 8], 8 - LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] + LONG $0x245c8b48; BYTE $0x40 // mov rbx, qword [rsp + 64] QUAD $0x09081a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 8], 9 QUAD $0x0a08326c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r14 + 8], 10 - LONG $0x24748b4c; BYTE $0x48 // mov r14, qword [rsp + 72] + LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] QUAD $0x0b08326c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r14 + 8], 11 - LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] + QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] QUAD $0x0c081a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 8], 12 LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] QUAD $0x0d081a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 8], 13 LONG $0x24748b4c; BYTE $0x58 // mov r14, qword [rsp + 88] QUAD $0x0e08326c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r14 + 8], 14 QUAD $0x0f081a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r11 + 8], 15 - QUAD $0x000000d0249c8b4c // mov r11, qword [rsp + 208] + QUAD $0x000000b8249c8b4c // mov r11, qword [rsp + 184] QUAD $0x01091a742039a3c4 // vpinsrb xmm6, xmm8, byte [rdx + r11 + 9], 1 - QUAD $0x000000c8249c8b48 // mov rbx, qword [rsp + 200] + QUAD $0x000000e0249c8b48 // mov rbx, qword [rsp + 224] QUAD $0x02091a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rbx + 9], 2 QUAD $0x03090a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rcx + 9], 3 WORD $0x8948; BYTE $0xcb // mov rbx, rcx QUAD $0x040912742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r10 + 9], 4 - LONG $0x24548b4c; BYTE $0x70 // mov r10, qword [rsp + 112] + LONG $0x24548b4c; BYTE $0x68 // mov r10, qword [rsp + 104] QUAD $0x050912742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r10 + 9], 5 QUAD $0x060932742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rsi + 9], 6 QUAD $0x070902742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r8 + 9], 7 - QUAD $0x000000b824848b4c // mov r8, qword [rsp + 184] + QUAD $0x000000c824848b4c // mov r8, qword [rsp + 200] QUAD $0x080902742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r8 + 9], 8 QUAD $0x090902742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rax + 9], 9 QUAD $0x0a0922742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r12 + 9], 10 @@ -29887,24 +31158,24 @@ LBB5_166: QUAD $0x0f0902742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rax + 9], 15 QUAD $0x01093a7c2021a3c4 // vpinsrb xmm7, xmm11, byte [rdx + r15 + 9], 1 WORD $0x894d; BYTE $0xfc // mov r12, r15 - QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] - QUAD $0x0209027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 2 QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x0209027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 2 + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] QUAD $0x0309027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 3 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0409027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 4 QUAD $0x05093a7c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rdi + 9], 5 QUAD $0x06090a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r9 + 9], 6 QUAD $0x07092a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r13 + 9], 7 QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0809027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 8 - LONG $0x247c8b4c; BYTE $0x30 // mov r15, qword [rsp + 48] + LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] QUAD $0x09093a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r15 + 9], 9 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] QUAD $0x0a09027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 10 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x0b09027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 11 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] QUAD $0x0c09027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 12 LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0d09027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 13 @@ -29921,21 +31192,21 @@ LBB5_166: QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] LONG $0x027cb60f; BYTE $0x0c // movzx edi, byte [rdx + rax + 12] LONG $0xef6ef9c5 // vmovd xmm5, edi - QUAD $0x000000d0249c8b4c // mov r11, qword [rsp + 208] + QUAD $0x000000b8249c8b4c // mov r11, qword [rsp + 184] QUAD $0x010a1a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 10], 1 - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] + QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] QUAD $0x020a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 2 QUAD $0x030a1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 10], 3 QUAD $0x0000010024ac8b4c // mov r13, qword [rsp + 256] QUAD $0x040a2a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 10], 4 QUAD $0x050a125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 10], 5 QUAD $0x060a325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 10], 6 - LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] + LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] QUAD $0x070a3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 10], 7 QUAD $0x080a025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 10], 8 QUAD $0x0000009824948b4c // mov r10, qword [rsp + 152] QUAD $0x090a125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 10], 9 - QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] + QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] QUAD $0x0a0a3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 10], 10 LONG $0x24448b4c; BYTE $0x60 // mov r8, qword [rsp + 96] QUAD $0x0b0a025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 10], 11 @@ -29947,26 +31218,26 @@ LBB5_166: LONG $0x247c8b48; BYTE $0x50 // mov rdi, qword [rsp + 80] QUAD $0x0f0a3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 10], 15 QUAD $0x010a22642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r12 + 10], 1 - QUAD $0x000000e024b48b4c // mov r14, qword [rsp + 224] + QUAD $0x000000d824b48b4c // mov r14, qword [rsp + 216] QUAD $0x020a32642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r14 + 10], 2 - QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] + QUAD $0x000000a024bc8b48 // mov rdi, qword [rsp + 160] QUAD $0x030a3a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 10], 3 - QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] + LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] QUAD $0x040a3a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rdi + 10], 4 - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] + LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] QUAD $0x050a0a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 10], 5 - QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] + QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] QUAD $0x060a0a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 10], 6 - QUAD $0x000000a024a48b4c // mov r12, qword [rsp + 160] + QUAD $0x000000a824a48b4c // mov r12, qword [rsp + 168] QUAD $0x070a22642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r12 + 10], 7 QUAD $0x00000120248c8b48 // mov rcx, qword [rsp + 288] QUAD $0x080a0a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 10], 8 QUAD $0x090a3a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r15 + 10], 9 - LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] + LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] QUAD $0x0a0a0a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 10], 10 - LONG $0x247c8b4c; BYTE $0x48 // mov r15, qword [rsp + 72] + LONG $0x247c8b4c; BYTE $0x30 // mov r15, qword [rsp + 48] QUAD $0x0b0a3a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r15 + 10], 11 - LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] QUAD $0x0c0a0a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 10], 12 LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] QUAD $0x0d0a0a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 10], 13 @@ -29980,15 +31251,15 @@ LBB5_166: WORD $0x8948; BYTE $0xd8 // mov rax, rbx QUAD $0x040b2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 11], 4 WORD $0x894d; BYTE $0xeb // mov r11, r13 - LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] + LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] QUAD $0x050b0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 11], 5 QUAD $0x060b324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 11], 6 - LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] + LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] QUAD $0x070b0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 11], 7 - QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] + QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] QUAD $0x080b0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 11], 8 QUAD $0x090b124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 11], 9 - QUAD $0x000000b024948b4c // mov r10, qword [rsp + 176] + QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] QUAD $0x0a0b124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 11], 10 QUAD $0x0b0b024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 11], 11 QUAD $0x0c0b0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 11], 12 @@ -30001,22 +31272,22 @@ LBB5_166: QUAD $0x000000e8249c8b48 // mov rbx, qword [rsp + 232] QUAD $0x010b1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 11], 1 QUAD $0x020b32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 11], 2 - QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] + QUAD $0x000000a0248c8b48 // mov rcx, qword [rsp + 160] QUAD $0x030b0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 11], 3 QUAD $0x040b3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 11], 4 - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] + LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] QUAD $0x050b0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 11], 5 - QUAD $0x000000a824ac8b4c // mov r13, qword [rsp + 168] + QUAD $0x000000b024ac8b4c // mov r13, qword [rsp + 176] QUAD $0x060b2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 11], 6 QUAD $0x070b22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 11], 7 QUAD $0x00000120248c8b48 // mov rcx, qword [rsp + 288] QUAD $0x080b0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 11], 8 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] + LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] QUAD $0x090b0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 11], 9 - LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] + LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] QUAD $0x0a0b0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 11], 10 QUAD $0x0b0b3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 11], 11 - LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] QUAD $0x0c0b0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 11], 12 LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] QUAD $0x0d0b0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 11], 13 @@ -30034,19 +31305,19 @@ LBB5_166: QUAD $0x00000108248c8b48 // mov rcx, qword [rsp + 264] LONG $0x0a7cb60f; BYTE $0x0d // movzx edi, byte [rdx + rcx + 13] LONG $0xcf6ef9c5 // vmovd xmm1, edi - QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] + QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] QUAD $0x010c0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 12], 1 - QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] + QUAD $0x000000e024b48b48 // mov rsi, qword [rsp + 224] QUAD $0x020c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 12], 2 QUAD $0x030c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 3 QUAD $0x040c1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 12], 4 - LONG $0x244c8b4c; BYTE $0x70 // mov r9, qword [rsp + 112] + LONG $0x244c8b4c; BYTE $0x68 // mov r9, qword [rsp + 104] QUAD $0x050c0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 12], 5 QUAD $0x0000008024848b4c // mov r8, qword [rsp + 128] QUAD $0x060c02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 12], 6 - LONG $0x245c8b4c; BYTE $0x40 // mov r11, qword [rsp + 64] + LONG $0x245c8b4c; BYTE $0x70 // mov r11, qword [rsp + 112] QUAD $0x070c1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 12], 7 - QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] QUAD $0x080c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 8 QUAD $0x0000009824b48b4c // mov r14, qword [rsp + 152] QUAD $0x090c32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 12], 9 @@ -30062,26 +31333,26 @@ LBB5_166: LONG $0x24648b4c; BYTE $0x50 // mov r12, qword [rsp + 80] QUAD $0x0f0c22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 12], 15 QUAD $0x010c1a542051e3c4 // vpinsrb xmm2, xmm5, byte [rdx + rbx + 12], 1 - QUAD $0x000000e024bc8b4c // mov r15, qword [rsp + 224] + QUAD $0x000000d824bc8b4c // mov r15, qword [rsp + 216] QUAD $0x020c3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 12], 2 - QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] + QUAD $0x000000a024bc8b48 // mov rdi, qword [rsp + 160] QUAD $0x030c3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 12], 3 - QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] + LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] QUAD $0x040c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 4 - LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] + LONG $0x245c8b48; BYTE $0x48 // mov rbx, qword [rsp + 72] QUAD $0x050c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 5 QUAD $0x060c2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 12], 6 - QUAD $0x000000a0249c8b48 // mov rbx, qword [rsp + 160] + QUAD $0x000000a8249c8b48 // mov rbx, qword [rsp + 168] QUAD $0x070c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 7 QUAD $0x00000120249c8b48 // mov rbx, qword [rsp + 288] QUAD $0x080c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 8 - LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] + LONG $0x245c8b48; BYTE $0x40 // mov rbx, qword [rsp + 64] QUAD $0x090c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 9 - LONG $0x245c8b48; BYTE $0x68 // mov rbx, qword [rsp + 104] + LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] QUAD $0x0a0c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 10 - LONG $0x245c8b48; BYTE $0x48 // mov rbx, qword [rsp + 72] + LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] QUAD $0x0b0c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 11 - LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] + QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] QUAD $0x0c0c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 12 LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] QUAD $0x0d0c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 13 @@ -30101,7 +31372,7 @@ LBB5_166: QUAD $0x070d1a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 13], 7 QUAD $0x080d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 13], 8 QUAD $0x090d325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 13], 9 - QUAD $0x000000b024848b4c // mov r8, qword [rsp + 176] + QUAD $0x000000d024848b4c // mov r8, qword [rsp + 208] QUAD $0x0a0d025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 13], 10 LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] QUAD $0x0b0d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 13], 11 @@ -30116,23 +31387,23 @@ LBB5_166: QUAD $0x010d0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 13], 1 QUAD $0x020d3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 13], 2 QUAD $0x030d3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 13], 3 - QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] + LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] QUAD $0x040d0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 13], 4 - LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] + LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] QUAD $0x050d3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 13], 5 - QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] + QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] QUAD $0x060d3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 13], 6 - QUAD $0x000000a024bc8b48 // mov rdi, qword [rsp + 160] + QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] QUAD $0x070d3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 13], 7 QUAD $0x0000012024948b4c // mov r10, qword [rsp + 288] QUAD $0x080d124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 13], 8 - LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x24648b4c; BYTE $0x40 // mov r12, qword [rsp + 64] QUAD $0x090d224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 13], 9 - LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] + LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] QUAD $0x0a0d3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 13], 10 - LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] + LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] QUAD $0x0b0d3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 13], 11 - LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] + QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] QUAD $0x0c0d3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 13], 12 LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] QUAD $0x0d0d3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 13], 13 @@ -30150,18 +31421,18 @@ LBB5_166: QUAD $0x0000010824bc8b48 // mov rdi, qword [rsp + 264] LONG $0x3a7cb60f; BYTE $0x0e // movzx edi, byte [rdx + rdi + 14] LONG $0xc76ef9c5 // vmovd xmm0, edi - QUAD $0x000000d0248c8b4c // mov r9, qword [rsp + 208] + QUAD $0x000000b8248c8b4c // mov r9, qword [rsp + 184] QUAD $0x010e0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 14], 1 QUAD $0x020e2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 14], 2 QUAD $0x030e324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 14], 3 QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] QUAD $0x040e324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 14], 4 - LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] + LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] QUAD $0x050e3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 14], 5 QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] QUAD $0x060e3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 14], 6 QUAD $0x070e1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 14], 7 - QUAD $0x000000b8249c8b4c // mov r11, qword [rsp + 184] + QUAD $0x000000c8249c8b4c // mov r11, qword [rsp + 200] QUAD $0x080e1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 14], 8 QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] QUAD $0x090e3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 14], 9 @@ -30176,24 +31447,24 @@ LBB5_166: QUAD $0x0f0e324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 14], 15 QUAD $0x000000e824848b4c // mov r8, qword [rsp + 232] QUAD $0x010e02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 14], 1 - QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] + QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] QUAD $0x020e3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 14], 2 - QUAD $0x000000d824b48b4c // mov r14, qword [rsp + 216] + QUAD $0x000000a024b48b4c // mov r14, qword [rsp + 160] QUAD $0x030e32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 14], 3 QUAD $0x040e0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 14], 4 - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] + LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] QUAD $0x050e0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 14], 5 - QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] + QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] QUAD $0x060e0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 14], 6 - QUAD $0x000000a0248c8b48 // mov rcx, qword [rsp + 160] + QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] QUAD $0x070e0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 14], 7 QUAD $0x080e12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 14], 8 QUAD $0x090e22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 14], 9 - LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] + LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] QUAD $0x0a0e0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 14], 10 - LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] QUAD $0x0b0e0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 14], 11 - LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] QUAD $0x0c0e0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 14], 12 LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] QUAD $0x0d0e0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 14], 13 @@ -30204,21 +31475,21 @@ LBB5_166: LONG $0x3a7cb60f; BYTE $0x0f // movzx edi, byte [rdx + rdi + 15] LONG $0xd76ef9c5 // vmovd xmm2, edi QUAD $0x010f0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 15], 1 - QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] + QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] QUAD $0x020f3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 15], 2 QUAD $0x000000f824bc8b48 // mov rdi, qword [rsp + 248] QUAD $0x030f3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 15], 3 QUAD $0x040f32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 15], 4 - LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] + LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] QUAD $0x050f32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 15], 5 QUAD $0x0000008024a48b4c // mov r12, qword [rsp + 128] QUAD $0x060f22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 15], 6 - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] + LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] QUAD $0x070f32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 15], 7 QUAD $0x080f1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 15], 8 QUAD $0x00000098249c8b4c // mov r11, qword [rsp + 152] QUAD $0x090f1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 15], 9 - QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] + QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] QUAD $0x0a0f32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 15], 10 QUAD $0x0b0f02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 15], 11 QUAD $0x0c0f1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 15], 12 @@ -30231,26 +31502,26 @@ LBB5_166: LONG $0x7cb60f42; WORD $0x0f12 // movzx edi, byte [rdx + r10 + 15] LONG $0xdf6ef9c5 // vmovd xmm3, edi QUAD $0x010f025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 15], 1 - QUAD $0x000000e024ac8b4c // mov r13, qword [rsp + 224] + QUAD $0x000000d824ac8b4c // mov r13, qword [rsp + 216] QUAD $0x020f2a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 15], 2 QUAD $0x030f325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 15], 3 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x040f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 4 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] QUAD $0x050f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 5 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x060f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 6 - QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] + QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] QUAD $0x070f025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 15], 7 QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] QUAD $0x080f3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 15], 8 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] QUAD $0x090f3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 15], 9 - LONG $0x247c8b4c; BYTE $0x68 // mov r15, qword [rsp + 104] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] QUAD $0x0a0f3a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 15], 10 - LONG $0x245c8b48; BYTE $0x48 // mov rbx, qword [rsp + 72] + LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] QUAD $0x0b0f1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 15], 11 - LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] + QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] QUAD $0x0c0f3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 15], 12 QUAD $0x0d0f0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 15], 13 LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] @@ -30264,23 +31535,23 @@ LBB5_166: QUAD $0x000000f0248c8b4c // mov r9, qword [rsp + 240] LONG $0x7cb60f42; WORD $0x100a // movzx edi, byte [rdx + r9 + 16] LONG $0xc76ef9c5 // vmovd xmm0, edi - QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] + QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] QUAD $0x01100a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 16], 1 - QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] + QUAD $0x000000e0248c8b48 // mov rcx, qword [rsp + 224] QUAD $0x02100a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 16], 2 QUAD $0x000000f824848b4c // mov r8, qword [rsp + 248] QUAD $0x031002442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 16], 3 QUAD $0x0000010024bc8b48 // mov rdi, qword [rsp + 256] QUAD $0x04103a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 16], 4 - LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] + LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] QUAD $0x05103a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 16], 5 QUAD $0x061022442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 16], 6 - LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] + LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] QUAD $0x07103a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 16], 7 - QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] + QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] QUAD $0x08103a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 16], 8 QUAD $0x09101a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 16], 9 - QUAD $0x000000b024a48b4c // mov r12, qword [rsp + 176] + QUAD $0x000000d024a48b4c // mov r12, qword [rsp + 208] QUAD $0x0a1022442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 16], 10 LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] QUAD $0x0b103a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 16], 11 @@ -30296,22 +31567,22 @@ LBB5_166: QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] QUAD $0x0110324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 1 QUAD $0x02102a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 16], 2 - QUAD $0x000000d824b48b48 // mov rsi, qword [rsp + 216] + QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] QUAD $0x0310324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 3 - QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] + LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] QUAD $0x0410324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 4 - LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] QUAD $0x0510324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 5 - QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] + QUAD $0x000000b0249c8b4c // mov r11, qword [rsp + 176] QUAD $0x06101a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 16], 6 QUAD $0x0710024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 16], 7 QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0810024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 16], 8 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] QUAD $0x0910024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 16], 9 QUAD $0x0a103a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 16], 10 QUAD $0x0b101a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 16], 11 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] QUAD $0x0c10024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 16], 12 LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] QUAD $0x0d101a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 16], 13 @@ -30320,19 +31591,19 @@ LBB5_166: QUAD $0x0f10324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 16], 15 LONG $0x7cb60f42; WORD $0x110a // movzx edi, byte [rdx + r9 + 17] LONG $0xd76ef9c5 // vmovd xmm2, edi - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] QUAD $0x011102542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 17], 1 QUAD $0x02110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 2 QUAD $0x031102542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 17], 3 QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] QUAD $0x041102542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 17], 4 - LONG $0x24748b4c; BYTE $0x70 // mov r14, qword [rsp + 112] + LONG $0x24748b4c; BYTE $0x68 // mov r14, qword [rsp + 104] QUAD $0x051132542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 17], 5 QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] QUAD $0x061132542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 17], 6 - LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] QUAD $0x071102542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 17], 7 - QUAD $0x000000b824bc8b4c // mov r15, qword [rsp + 184] + QUAD $0x000000c824bc8b4c // mov r15, qword [rsp + 200] QUAD $0x08113a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 17], 8 QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] QUAD $0x091102542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 17], 9 @@ -30351,26 +31622,26 @@ LBB5_166: LONG $0xdf6ef9c5 // vmovd xmm3, edi QUAD $0x000000e824a48b4c // mov r12, qword [rsp + 232] QUAD $0x0111225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 17], 1 - QUAD $0x000000e0248c8b48 // mov rcx, qword [rsp + 224] + QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] QUAD $0x02110a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 17], 2 - QUAD $0x000000d824848b4c // mov r8, qword [rsp + 216] + QUAD $0x000000a024848b4c // mov r8, qword [rsp + 160] QUAD $0x0311025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 17], 3 - QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] + LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] QUAD $0x04110a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 17], 4 - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] + LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] QUAD $0x05110a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 17], 5 QUAD $0x06111a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 17], 6 - QUAD $0x000000a0248c8b48 // mov rcx, qword [rsp + 160] + QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] QUAD $0x07110a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 17], 7 QUAD $0x00000120248c8b4c // mov r9, qword [rsp + 288] QUAD $0x08110a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 17], 8 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] + LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] QUAD $0x09110a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 17], 9 - LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] + LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] QUAD $0x0a110a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 17], 10 - LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] + LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] QUAD $0x0b113a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 17], 11 - LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] + QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] QUAD $0x0c113a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 17], 12 WORD $0x8949; BYTE $0xdb // mov r11, rbx QUAD $0x0d111a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 17], 13 @@ -30385,9 +31656,9 @@ LBB5_166: QUAD $0x000000f024bc8b48 // mov rdi, qword [rsp + 240] LONG $0x3a7cb60f; BYTE $0x12 // movzx edi, byte [rdx + rdi + 18] LONG $0xc76ef9c5 // vmovd xmm0, edi - QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] + QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] QUAD $0x01123a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 18], 1 - QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] + QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] QUAD $0x02123a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 18], 2 QUAD $0x000000f824bc8b48 // mov rdi, qword [rsp + 248] QUAD $0x03123a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 18], 3 @@ -30395,12 +31666,12 @@ LBB5_166: QUAD $0x04123a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 18], 4 QUAD $0x051232442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 18], 5 QUAD $0x061232442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 18], 6 - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] + LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] QUAD $0x071232442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 18], 7 QUAD $0x08123a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 18], 8 QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] QUAD $0x091232442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 18], 9 - QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] + QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] QUAD $0x0a1232442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 18], 10 LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] QUAD $0x0b1232442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 18], 11 @@ -30413,25 +31684,25 @@ LBB5_166: LONG $0x7cb60f42; WORD $0x1212 // movzx edi, byte [rdx + r10 + 18] LONG $0xcf6ef9c5 // vmovd xmm1, edi QUAD $0x0112224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 18], 1 - QUAD $0x000000e024948b4c // mov r10, qword [rsp + 224] + QUAD $0x000000d824948b4c // mov r10, qword [rsp + 216] QUAD $0x0212124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 18], 2 QUAD $0x0312024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 18], 3 WORD $0x894d; BYTE $0xc4 // mov r12, r8 - QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] + LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] QUAD $0x0412324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 18], 4 - LONG $0x24748b4c; BYTE $0x38 // mov r14, qword [rsp + 56] + LONG $0x24748b4c; BYTE $0x48 // mov r14, qword [rsp + 72] QUAD $0x0512324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 18], 5 - QUAD $0x000000a824848b4c // mov r8, qword [rsp + 168] + QUAD $0x000000b024848b4c // mov r8, qword [rsp + 176] QUAD $0x0612024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 18], 6 - QUAD $0x000000a024ac8b4c // mov r13, qword [rsp + 160] + QUAD $0x000000a824ac8b4c // mov r13, qword [rsp + 168] QUAD $0x07122a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 18], 7 QUAD $0x08120a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 18], 8 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] QUAD $0x0912024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 18], 9 QUAD $0x0a120a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 18], 10 - LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] QUAD $0x0b120a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 18], 11 - LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] QUAD $0x0c120a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 18], 12 QUAD $0x0d121a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 18], 13 LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] @@ -30440,25 +31711,25 @@ LBB5_166: QUAD $0x000000f024bc8b4c // mov r15, qword [rsp + 240] LONG $0x7cb60f42; WORD $0x133a // movzx edi, byte [rdx + r15 + 19] LONG $0xd76ef9c5 // vmovd xmm2, edi - QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] + QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] QUAD $0x01130a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 19], 1 - QUAD $0x000000c8248c8b4c // mov r9, qword [rsp + 200] + QUAD $0x000000e0248c8b4c // mov r9, qword [rsp + 224] QUAD $0x02130a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 19], 2 QUAD $0x000000f8248c8b48 // mov rcx, qword [rsp + 248] QUAD $0x03130a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 19], 3 QUAD $0x00000100249c8b48 // mov rbx, qword [rsp + 256] QUAD $0x04131a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 19], 4 - LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] + LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] QUAD $0x05130a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 19], 5 QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] QUAD $0x06130a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 19], 6 - LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] + LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] QUAD $0x07130a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 19], 7 - QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] + QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] QUAD $0x08130a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 19], 8 QUAD $0x00000098249c8b4c // mov r11, qword [rsp + 152] QUAD $0x09131a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 19], 9 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] + QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] QUAD $0x0a130a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 19], 10 LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] QUAD $0x0b130a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 19], 11 @@ -30485,11 +31756,11 @@ LBB5_166: QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] QUAD $0x0813325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 19], 8 QUAD $0x0913025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 9 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] QUAD $0x0a13025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 10 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x0b13025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 11 - LONG $0x24548b4c; BYTE $0x20 // mov r10, qword [rsp + 32] + QUAD $0x0000014024948b4c // mov r10, qword [rsp + 320] QUAD $0x0c13125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 19], 12 LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0d13025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 13 @@ -30503,22 +31774,22 @@ LBB5_166: QUAD $0x00034024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 832], ymm0 LONG $0x7cb60f42; WORD $0x143a // movzx edi, byte [rdx + r15 + 20] LONG $0xc76ef9c5 // vmovd xmm0, edi - QUAD $0x000000d024848b4c // mov r8, qword [rsp + 208] + QUAD $0x000000b824848b4c // mov r8, qword [rsp + 184] QUAD $0x011402442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 20], 1 QUAD $0x02140a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 20], 2 QUAD $0x000000f824bc8b4c // mov r15, qword [rsp + 248] QUAD $0x03143a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 20], 3 QUAD $0x04141a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 20], 4 - LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] + LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] QUAD $0x051432442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 20], 5 QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x061402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 6 - LONG $0x244c8b4c; BYTE $0x40 // mov r9, qword [rsp + 64] + LONG $0x244c8b4c; BYTE $0x70 // mov r9, qword [rsp + 112] QUAD $0x07140a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 20], 7 - QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] QUAD $0x081402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 8 QUAD $0x09141a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 20], 9 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] QUAD $0x0a1402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 10 LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] QUAD $0x0b1402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 20], 11 @@ -30534,23 +31805,23 @@ LBB5_166: LONG $0xcf6ef9c5 // vmovd xmm1, edi QUAD $0x000000e8248c8b48 // mov rcx, qword [rsp + 232] QUAD $0x01140a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 20], 1 - QUAD $0x000000e0248c8b48 // mov rcx, qword [rsp + 224] + QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] QUAD $0x02140a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 20], 2 QUAD $0x0314224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 20], 3 - QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] + LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] QUAD $0x04143a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 20], 4 - LONG $0x245c8b4c; BYTE $0x38 // mov r11, qword [rsp + 56] + LONG $0x245c8b4c; BYTE $0x48 // mov r11, qword [rsp + 72] QUAD $0x05141a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 20], 5 QUAD $0x0614324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 20], 6 - QUAD $0x000000a024bc8b48 // mov rdi, qword [rsp + 160] + QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] QUAD $0x07143a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 20], 7 QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] QUAD $0x08143a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 20], 8 - LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] + LONG $0x245c8b48; BYTE $0x40 // mov rbx, qword [rsp + 64] QUAD $0x09141a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 20], 9 - LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] + LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] QUAD $0x0a143a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 20], 10 - LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] + LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] QUAD $0x0b143a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 20], 11 QUAD $0x0c14124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 20], 12 LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] @@ -30562,7 +31833,7 @@ LBB5_166: LONG $0x3a7cb60f; BYTE $0x15 // movzx edi, byte [rdx + rdi + 21] LONG $0xd76ef9c5 // vmovd xmm2, edi QUAD $0x011502542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 21], 1 - QUAD $0x000000c824ac8b4c // mov r13, qword [rsp + 200] + QUAD $0x000000e024ac8b4c // mov r13, qword [rsp + 224] QUAD $0x02152a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 21], 2 QUAD $0x03153a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 21], 3 QUAD $0x0000010024bc8b4c // mov r15, qword [rsp + 256] @@ -30571,11 +31842,11 @@ LBB5_166: QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] QUAD $0x061532542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 21], 6 QUAD $0x07150a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 21], 7 - QUAD $0x000000b8248c8b4c // mov r9, qword [rsp + 184] + QUAD $0x000000c8248c8b4c // mov r9, qword [rsp + 200] QUAD $0x08150a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 21], 8 QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] QUAD $0x09153a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 21], 9 - QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] + QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] QUAD $0x0a153a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 21], 10 LONG $0x24548b4c; BYTE $0x60 // mov r10, qword [rsp + 96] QUAD $0x0b1512542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 21], 11 @@ -30592,22 +31863,22 @@ LBB5_166: QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] QUAD $0x0115025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 1 QUAD $0x02150a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 21], 2 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] QUAD $0x0315025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 3 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0415025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 4 QUAD $0x05151a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 21], 5 QUAD $0x0615325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 21], 6 - QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] + QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] QUAD $0x0715025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 7 QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0815025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 8 QUAD $0x09151a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 21], 9 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] QUAD $0x0a15025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 10 - LONG $0x245c8b48; BYTE $0x48 // mov rbx, qword [rsp + 72] + LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] QUAD $0x0b151a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 21], 11 - LONG $0x24748b4c; BYTE $0x20 // mov r14, qword [rsp + 32] + QUAD $0x0000014024b48b4c // mov r14, qword [rsp + 320] QUAD $0x0c15325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 21], 12 LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0d15025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 21], 13 @@ -30621,21 +31892,21 @@ LBB5_166: QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] LONG $0x027cb60f; BYTE $0x16 // movzx edi, byte [rdx + rax + 22] LONG $0xc76ef9c5 // vmovd xmm0, edi - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] QUAD $0x011602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 22], 1 QUAD $0x02162a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 22], 2 QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] QUAD $0x031602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 22], 3 QUAD $0x04163a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 22], 4 - LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] + LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] QUAD $0x05163a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 22], 5 QUAD $0x061632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 6 - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] + LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] QUAD $0x071632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 7 QUAD $0x08160a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 22], 8 QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] QUAD $0x091632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 9 - QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] + QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] QUAD $0x0a1632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 22], 10 QUAD $0x0b1612442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 22], 11 QUAD $0x0c1602442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 22], 12 @@ -30650,23 +31921,23 @@ LBB5_166: LONG $0xcf6ef9c5 // vmovd xmm1, edi QUAD $0x000000e824bc8b4c // mov r15, qword [rsp + 232] QUAD $0x01163a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 22], 1 - QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] - QUAD $0x02163a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 22], 2 QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] + QUAD $0x02163a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 22], 2 + QUAD $0x000000a024bc8b48 // mov rdi, qword [rsp + 160] QUAD $0x03163a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 22], 3 - QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] + LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] QUAD $0x04163a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 22], 4 - LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] + LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] QUAD $0x05163a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 22], 5 - QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] + QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] QUAD $0x06163a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 22], 6 - QUAD $0x000000a024a48b4c // mov r12, qword [rsp + 160] + QUAD $0x000000a824a48b4c // mov r12, qword [rsp + 168] QUAD $0x0716224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 22], 7 QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] QUAD $0x08163a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 22], 8 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] QUAD $0x09163a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 22], 9 - LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] + LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] QUAD $0x0a163a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 22], 10 QUAD $0x0b161a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 22], 11 QUAD $0x0c16324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 22], 12 @@ -30678,18 +31949,18 @@ LBB5_166: QUAD $0x000000f0249c8b48 // mov rbx, qword [rsp + 240] LONG $0x1a7cb60f; BYTE $0x17 // movzx edi, byte [rdx + rbx + 23] LONG $0xd76ef9c5 // vmovd xmm2, edi - QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] + QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] QUAD $0x01173a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 23], 1 - QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] + QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] QUAD $0x02173a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 23], 2 QUAD $0x031702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 23], 3 QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] QUAD $0x041702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 23], 4 - LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] + LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] QUAD $0x05173a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 23], 5 QUAD $0x0000008024b48b4c // mov r14, qword [rsp + 128] QUAD $0x061732542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 23], 6 - LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] + LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] QUAD $0x07173a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 23], 7 QUAD $0x08170a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 23], 8 QUAD $0x00000098248c8b4c // mov r9, qword [rsp + 152] @@ -30706,27 +31977,27 @@ LBB5_166: LONG $0x7cb60f42; WORD $0x171a // movzx edi, byte [rdx + r11 + 23] LONG $0xdf6ef9c5 // vmovd xmm3, edi QUAD $0x01173a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 23], 1 - QUAD $0x000000e024b48b48 // mov rsi, qword [rsp + 224] + QUAD $0x000000d824b48b48 // mov rsi, qword [rsp + 216] QUAD $0x0217325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 23], 2 - QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] + QUAD $0x000000a024bc8b48 // mov rdi, qword [rsp + 160] QUAD $0x03173a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 23], 3 - QUAD $0x0000014024bc8b4c // mov r15, qword [rsp + 320] + LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] QUAD $0x04173a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 23], 4 - LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] + LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] QUAD $0x05173a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 23], 5 - QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] + QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] QUAD $0x06173a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 23], 6 QUAD $0x0717225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 23], 7 QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] QUAD $0x08173a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 23], 8 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] QUAD $0x09173a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 23], 9 - LONG $0x24648b4c; BYTE $0x68 // mov r12, qword [rsp + 104] - QUAD $0x0a17225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 23], 10 - LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] + LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] + QUAD $0x0a173a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 23], 10 + LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] QUAD $0x0b173a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 23], 11 - LONG $0x24548b4c; BYTE $0x20 // mov r10, qword [rsp + 32] - QUAD $0x0c17125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 23], 12 + QUAD $0x0000014024a48b4c // mov r12, qword [rsp + 320] + QUAD $0x0c17225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 23], 12 QUAD $0x0d17025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 23], 13 LONG $0x247c8b48; BYTE $0x58 // mov rdi, qword [rsp + 88] QUAD $0x0e173a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 23], 14 @@ -30735,22 +32006,22 @@ LBB5_166: LONG $0x386563c4; WORD $0x01da // vinserti128 ymm11, ymm3, xmm2, 1 LONG $0x1a7cb60f; BYTE $0x18 // movzx edi, byte [rdx + rbx + 24] LONG $0xc76ef9c5 // vmovd xmm0, edi - QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] + QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] QUAD $0x01180a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 24], 1 - QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] + QUAD $0x000000e0248c8b48 // mov rcx, qword [rsp + 224] QUAD $0x02180a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 24], 2 - QUAD $0x000000f824848b4c // mov r8, qword [rsp + 248] - QUAD $0x031802442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 24], 3 + QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] + QUAD $0x031812442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 24], 3 QUAD $0x041802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 24], 4 - LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] QUAD $0x051802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 24], 5 QUAD $0x061832442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 24], 6 - LONG $0x245c8b4c; BYTE $0x40 // mov r11, qword [rsp + 64] + LONG $0x245c8b4c; BYTE $0x70 // mov r11, qword [rsp + 112] QUAD $0x07181a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 24], 7 - QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] - QUAD $0x08180a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 24], 8 + QUAD $0x000000c824b48b4c // mov r14, qword [rsp + 200] + QUAD $0x081832442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 24], 8 QUAD $0x09180a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 24], 9 - QUAD $0x000000b0248c8b4c // mov r9, qword [rsp + 176] + QUAD $0x000000d0248c8b4c // mov r9, qword [rsp + 208] QUAD $0x0a180a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 24], 10 LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] QUAD $0x0b180a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 24], 11 @@ -30764,50 +32035,50 @@ LBB5_166: QUAD $0x0000010824bc8b48 // mov rdi, qword [rsp + 264] LONG $0x3a7cb60f; BYTE $0x18 // movzx edi, byte [rdx + rdi + 24] LONG $0xcf6ef9c5 // vmovd xmm1, edi - QUAD $0x000000e824b48b4c // mov r14, qword [rsp + 232] - QUAD $0x0118324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 24], 1 + QUAD $0x000000e8249c8b48 // mov rbx, qword [rsp + 232] + QUAD $0x01181a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 24], 1 QUAD $0x0218324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 24], 2 - QUAD $0x000000d824ac8b4c // mov r13, qword [rsp + 216] - QUAD $0x03182a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 24], 3 + QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] + QUAD $0x0318324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 24], 3 QUAD $0x04183a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 24], 4 - LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] QUAD $0x0518324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 24], 5 - QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] + QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] QUAD $0x0618324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 24], 6 - QUAD $0x000000a0249c8b48 // mov rbx, qword [rsp + 160] - QUAD $0x07181a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 24], 7 + QUAD $0x000000a824848b4c // mov r8, qword [rsp + 168] + QUAD $0x0718024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 24], 7 QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] QUAD $0x0818324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 24], 8 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] QUAD $0x0918324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 24], 9 - QUAD $0x0a18224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 24], 10 - LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + QUAD $0x0a18324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 24], 10 + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] QUAD $0x0b18324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 24], 11 - QUAD $0x0c18124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 24], 12 + QUAD $0x0c18224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 24], 12 LONG $0x24748b48; BYTE $0x28 // mov rsi, qword [rsp + 40] QUAD $0x0d18324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 24], 13 - LONG $0x247c8b4c; BYTE $0x58 // mov r15, qword [rsp + 88] - QUAD $0x0e183a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 24], 14 + LONG $0x246c8b4c; BYTE $0x58 // mov r13, qword [rsp + 88] + QUAD $0x0e182a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 24], 14 QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] QUAD $0x0f18324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 24], 15 QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] LONG $0x327cb60f; BYTE $0x19 // movzx edi, byte [rdx + rsi + 25] LONG $0xd76ef9c5 // vmovd xmm2, edi - QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] - QUAD $0x011912542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 25], 1 - QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] + QUAD $0x000000b824a48b4c // mov r12, qword [rsp + 184] + QUAD $0x011922542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 25], 1 + QUAD $0x000000e024b48b48 // mov rsi, qword [rsp + 224] QUAD $0x021932542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 25], 2 - QUAD $0x031902542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 25], 3 + QUAD $0x031912542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 25], 3 QUAD $0x0000010024bc8b48 // mov rdi, qword [rsp + 256] QUAD $0x04193a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 25], 4 QUAD $0x051902542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 25], 5 QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x061902542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 25], 6 QUAD $0x07191a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 25], 7 - QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] - QUAD $0x08193a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 25], 8 - QUAD $0x0000009824848b4c // mov r8, qword [rsp + 152] - QUAD $0x091902542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 25], 9 + QUAD $0x081932542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 25], 8 + QUAD $0x0000009824948b4c // mov r10, qword [rsp + 152] + QUAD $0x091912542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 25], 9 QUAD $0x0a190a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 25], 10 QUAD $0x0b190a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 25], 11 QUAD $0x00000088248c8b4c // mov r9, qword [rsp + 136] @@ -30821,29 +32092,30 @@ LBB5_166: QUAD $0x00000108248c8b48 // mov rcx, qword [rsp + 264] LONG $0x0a7cb60f; BYTE $0x19 // movzx edi, byte [rdx + rcx + 25] LONG $0xdf6ef9c5 // vmovd xmm3, edi - QUAD $0x0119325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 25], 1 - QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] + QUAD $0x01191a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 25], 1 + QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] QUAD $0x02193a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 25], 2 - QUAD $0x03192a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 25], 3 - QUAD $0x0000014024b48b4c // mov r14, qword [rsp + 320] - QUAD $0x0419325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 25], 4 - LONG $0x246c8b4c; BYTE $0x38 // mov r13, qword [rsp + 56] - QUAD $0x05192a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 25], 5 - QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] + QUAD $0x000000a024bc8b48 // mov rdi, qword [rsp + 160] + QUAD $0x03193a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 25], 3 + QUAD $0x04193a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 25], 4 + LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] + QUAD $0x05193a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 25], 5 + QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] QUAD $0x06193a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 25], 6 - QUAD $0x07191a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 25], 7 + QUAD $0x0719025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 25], 7 QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] QUAD $0x08193a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 25], 8 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] QUAD $0x09193a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 25], 9 - QUAD $0x0a19225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 25], 10 - LONG $0x24648b4c; BYTE $0x48 // mov r12, qword [rsp + 72] - QUAD $0x0b19225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 25], 11 - LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] + LONG $0x24748b4c; BYTE $0x38 // mov r14, qword [rsp + 56] + QUAD $0x0a19325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 25], 10 + LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + QUAD $0x0b193a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 25], 11 + QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] QUAD $0x0c191a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 25], 12 LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] QUAD $0x0d193a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 25], 13 - QUAD $0x0e193a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 25], 14 + QUAD $0x0e192a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 25], 14 LONG $0x3875e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm1, xmm0, 1 QUAD $0x00022024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 544], ymm0 QUAD $0x0000009024bc8b48 // mov rdi, qword [rsp + 144] @@ -30853,21 +32125,21 @@ LBB5_166: QUAD $0x000000f024bc8b48 // mov rdi, qword [rsp + 240] LONG $0x3a7cb60f; BYTE $0x1a // movzx edi, byte [rdx + rdi + 26] LONG $0xc76ef9c5 // vmovd xmm0, edi - QUAD $0x011a12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 26], 1 + QUAD $0x011a22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 26], 1 QUAD $0x021a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 2 QUAD $0x000000f824b48b48 // mov rsi, qword [rsp + 248] QUAD $0x031a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 3 - QUAD $0x0000010024bc8b4c // mov r15, qword [rsp + 256] - QUAD $0x041a3a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 26], 4 - LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] + QUAD $0x0000010024a48b4c // mov r12, qword [rsp + 256] + QUAD $0x041a22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 26], 4 + LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] QUAD $0x051a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 5 QUAD $0x061a02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 26], 6 - LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] QUAD $0x071a02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 26], 7 - QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] QUAD $0x081a02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 26], 8 - QUAD $0x091a02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 26], 9 - QUAD $0x000000b024848b4c // mov r8, qword [rsp + 176] + QUAD $0x091a12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 26], 9 + QUAD $0x000000d024848b4c // mov r8, qword [rsp + 208] QUAD $0x0a1a02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 26], 10 LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] QUAD $0x0b1a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 11 @@ -30881,26 +32153,27 @@ LBB5_166: LONG $0xcf6ef9c5 // vmovd xmm1, edi QUAD $0x000000e8248c8b48 // mov rcx, qword [rsp + 232] QUAD $0x011a0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 26], 1 - QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] + QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] QUAD $0x021a3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 26], 2 - QUAD $0x000000d824948b4c // mov r10, qword [rsp + 216] + QUAD $0x000000a024948b4c // mov r10, qword [rsp + 160] QUAD $0x031a124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 26], 3 - QUAD $0x041a324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 26], 4 - QUAD $0x051a2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 26], 5 - QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] + QUAD $0x041a3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 26], 4 + LONG $0x247c8b4c; BYTE $0x48 // mov r15, qword [rsp + 72] + QUAD $0x051a3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 26], 5 + QUAD $0x000000b0249c8b4c // mov r11, qword [rsp + 176] QUAD $0x061a1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 26], 6 - QUAD $0x000000a024ac8b4c // mov r13, qword [rsp + 160] + QUAD $0x000000a824ac8b4c // mov r13, qword [rsp + 168] QUAD $0x071a2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 26], 7 QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] QUAD $0x081a3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 26], 8 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] QUAD $0x091a3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 26], 9 - LONG $0x24748b4c; BYTE $0x68 // mov r14, qword [rsp + 104] QUAD $0x0a1a324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 26], 10 - QUAD $0x0b1a224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 26], 11 + LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + QUAD $0x0b1a3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 26], 11 QUAD $0x0c1a1a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 26], 12 - LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] - QUAD $0x0d1a3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 26], 13 + LONG $0x24748b4c; BYTE $0x28 // mov r14, qword [rsp + 40] + QUAD $0x0d1a324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 26], 13 LONG $0x247c8b48; BYTE $0x58 // mov rdi, qword [rsp + 88] QUAD $0x0e1a3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 26], 14 QUAD $0x0000009024bc8b48 // mov rdi, qword [rsp + 144] @@ -30908,18 +32181,18 @@ LBB5_166: QUAD $0x000000f024bc8b48 // mov rdi, qword [rsp + 240] LONG $0x3a7cb60f; BYTE $0x1b // movzx edi, byte [rdx + rdi + 27] LONG $0xd76ef9c5 // vmovd xmm2, edi - QUAD $0x000000d0249c8b48 // mov rbx, qword [rsp + 208] + QUAD $0x000000b8249c8b48 // mov rbx, qword [rsp + 184] QUAD $0x011b1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 27], 1 - QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] + QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] QUAD $0x021b3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 27], 2 QUAD $0x000000f824bc8b48 // mov rdi, qword [rsp + 248] QUAD $0x031b3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 27], 3 - QUAD $0x041b3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 27], 4 - LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] + QUAD $0x041b22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 27], 4 + LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] QUAD $0x051b3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 27], 5 QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] QUAD $0x061b3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 27], 6 - LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] + LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] QUAD $0x071b3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 27], 7 QUAD $0x081b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 27], 8 QUAD $0x0000009824a48b4c // mov r12, qword [rsp + 152] @@ -30937,26 +32210,25 @@ LBB5_166: LONG $0x327cb60f; BYTE $0x1b // movzx edi, byte [rdx + rsi + 27] LONG $0xdf6ef9c5 // vmovd xmm3, edi QUAD $0x011b0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 27], 1 - QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] QUAD $0x021b025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 27], 2 QUAD $0x031b125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 27], 3 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x041b025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 27], 4 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] - QUAD $0x051b025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 27], 5 + QUAD $0x051b3a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 27], 5 QUAD $0x061b1a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 27], 6 QUAD $0x071b2a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 27], 7 QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x081b025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 27], 8 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] QUAD $0x091b025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 27], 9 - QUAD $0x0a1b325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 27], 10 - LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] + LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] + QUAD $0x0a1b0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 27], 10 + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] QUAD $0x0b1b0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 27], 11 - LONG $0x244c8b4c; BYTE $0x20 // mov r9, qword [rsp + 32] - QUAD $0x0c1b0a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 27], 12 - LONG $0x245c8b4c; BYTE $0x28 // mov r11, qword [rsp + 40] - QUAD $0x0d1b1a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 27], 13 + QUAD $0x00000140249c8b4c // mov r11, qword [rsp + 320] + QUAD $0x0c1b1a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 27], 12 + QUAD $0x0d1b325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 27], 13 LONG $0x247c8b4c; BYTE $0x58 // mov r15, qword [rsp + 88] QUAD $0x0e1b3a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 27], 14 QUAD $0x0000009024bc8b48 // mov rdi, qword [rsp + 144] @@ -30969,23 +32241,23 @@ LBB5_166: LONG $0x3a7cb60f; BYTE $0x1c // movzx edi, byte [rdx + rdi + 28] LONG $0xc76ef9c5 // vmovd xmm0, edi QUAD $0x011c1a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 28], 1 - QUAD $0x000000c824948b4c // mov r10, qword [rsp + 200] - QUAD $0x021c12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 28], 2 + QUAD $0x000000e0248c8b4c // mov r9, qword [rsp + 224] + QUAD $0x021c0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 28], 2 QUAD $0x000000f824bc8b48 // mov rdi, qword [rsp + 248] QUAD $0x031c3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 28], 3 - QUAD $0x0000010024b48b4c // mov r14, qword [rsp + 256] - QUAD $0x041c32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 28], 4 - LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] + QUAD $0x0000010024948b4c // mov r10, qword [rsp + 256] + QUAD $0x041c12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 28], 4 + LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] QUAD $0x051c3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 28], 5 QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] QUAD $0x061c3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 28], 6 - LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] + LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] QUAD $0x071c3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 28], 7 - QUAD $0x000000b824848b4c // mov r8, qword [rsp + 184] + QUAD $0x000000c824848b4c // mov r8, qword [rsp + 200] QUAD $0x081c02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 28], 8 QUAD $0x091c22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 28], 9 - QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] - QUAD $0x0a1c3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 28], 10 + QUAD $0x000000d024b48b4c // mov r14, qword [rsp + 208] + QUAD $0x0a1c32442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 28], 10 LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] QUAD $0x0b1c3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 28], 11 QUAD $0x0000008824a48b4c // mov r12, qword [rsp + 136] @@ -31000,50 +32272,49 @@ LBB5_166: LONG $0xcf6ef9c5 // vmovd xmm1, edi QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] QUAD $0x011c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 1 - QUAD $0x000000e024b48b48 // mov rsi, qword [rsp + 224] - QUAD $0x021c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 2 QUAD $0x000000d824b48b48 // mov rsi, qword [rsp + 216] + QUAD $0x021c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 2 + QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] QUAD $0x031c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 3 - QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] + LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] QUAD $0x041c3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 28], 4 - LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] + LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] QUAD $0x051c3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 28], 5 - QUAD $0x000000a8249c8b48 // mov rbx, qword [rsp + 168] + QUAD $0x000000b0249c8b48 // mov rbx, qword [rsp + 176] QUAD $0x061c1a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 28], 6 - QUAD $0x000000a024bc8b48 // mov rdi, qword [rsp + 160] + QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] QUAD $0x071c3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 28], 7 QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] QUAD $0x081c3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 28], 8 QUAD $0x091c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 9 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] QUAD $0x0a1c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 10 QUAD $0x0b1c0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 28], 11 - QUAD $0x0c1c0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 28], 12 - WORD $0x894c; BYTE $0xd9 // mov rcx, r11 - QUAD $0x0d1c1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 28], 13 + QUAD $0x0c1c1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 28], 12 + LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] + QUAD $0x0d1c0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 28], 13 QUAD $0x0e1c3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 28], 14 QUAD $0x00000090249c8b4c // mov r11, qword [rsp + 144] QUAD $0x0f1c1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 28], 15 QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] LONG $0x027cb60f; BYTE $0x1d // movzx edi, byte [rdx + rax + 29] LONG $0xd76ef9c5 // vmovd xmm2, edi - QUAD $0x000000d0248c8b4c // mov r9, qword [rsp + 208] - QUAD $0x011d0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 29], 1 - QUAD $0x021d12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 29], 2 + QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] + QUAD $0x011d3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 29], 1 + QUAD $0x021d0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 29], 2 QUAD $0x000000f824bc8b48 // mov rdi, qword [rsp + 248] QUAD $0x031d3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 29], 3 - QUAD $0x041d32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 29], 4 - LONG $0x24548b4c; BYTE $0x70 // mov r10, qword [rsp + 112] + QUAD $0x041d12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 29], 4 + LONG $0x24548b4c; BYTE $0x68 // mov r10, qword [rsp + 104] QUAD $0x051d12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 29], 5 QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] QUAD $0x061d3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 29], 6 - LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] - QUAD $0x071d3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 29], 7 + LONG $0x244c8b4c; BYTE $0x70 // mov r9, qword [rsp + 112] + QUAD $0x071d0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 29], 7 QUAD $0x081d02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 29], 8 QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] QUAD $0x091d3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 29], 9 - QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] - QUAD $0x0a1d3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 29], 10 + QUAD $0x0a1d32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 29], 10 LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] QUAD $0x0b1d3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 29], 11 QUAD $0x0c1d22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 29], 12 @@ -31057,25 +32328,25 @@ LBB5_166: LONG $0xdf6ef9c5 // vmovd xmm3, edi QUAD $0x000000e824bc8b48 // mov rdi, qword [rsp + 232] QUAD $0x011d3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 29], 1 - QUAD $0x000000e024ac8b4c // mov r13, qword [rsp + 224] + QUAD $0x000000d824ac8b4c // mov r13, qword [rsp + 216] QUAD $0x021d2a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 29], 2 QUAD $0x031d325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 29], 3 - QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] + LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] QUAD $0x041d325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 29], 4 - LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] + LONG $0x24648b4c; BYTE $0x48 // mov r12, qword [rsp + 72] QUAD $0x051d225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 29], 5 QUAD $0x061d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 29], 6 - QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] + QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] QUAD $0x071d325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 29], 7 QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] QUAD $0x081d3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 29], 8 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] QUAD $0x091d3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 29], 9 - LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] + LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] QUAD $0x0a1d3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 29], 10 - LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] + LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] QUAD $0x0b1d3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 29], 11 - LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] + QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] QUAD $0x0c1d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 29], 12 QUAD $0x0d1d0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 29], 13 QUAD $0x0e1d3a642061a3c4 // vpinsrb xmm4, xmm3, byte [rdx + r15 + 29], 14 @@ -31086,11 +32357,12 @@ LBB5_166: QUAD $0x0002c024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 704], ymm0 LONG $0x027cb60f; BYTE $0x1e // movzx edi, byte [rdx + rax + 30] LONG $0xc76ef9c5 // vmovd xmm0, edi - QUAD $0x011e0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 30], 1 + QUAD $0x000000b824bc8b4c // mov r15, qword [rsp + 184] + QUAD $0x011e3a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 30], 1 LONG $0x027cb60f; BYTE $0x1f // movzx edi, byte [rdx + rax + 31] LONG $0xcf6ef9c5 // vmovd xmm1, edi - QUAD $0x011f0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 31], 1 - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] + QUAD $0x011f3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 31], 1 + QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] QUAD $0x021e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 2 QUAD $0x021f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 2 QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] @@ -31105,17 +32377,16 @@ LBB5_166: QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x061e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 6 QUAD $0x061f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 6 - LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] - QUAD $0x071e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 7 - QUAD $0x071f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 7 - QUAD $0x0000011024bc8b4c // mov r15, qword [rsp + 272] - QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] + QUAD $0x071e0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 30], 7 + QUAD $0x071f0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 31], 7 + QUAD $0x00000110248c8b4c // mov r9, qword [rsp + 272] + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] QUAD $0x081e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 8 QUAD $0x081f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 8 QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] QUAD $0x091e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 9 QUAD $0x091f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 9 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] QUAD $0x0a1e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 10 QUAD $0x0a1f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 10 LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] @@ -31141,15 +32412,15 @@ LBB5_166: QUAD $0x011f127c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r10 + 31], 1 QUAD $0x021e2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 30], 2 QUAD $0x021f2a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r13 + 31], 2 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] QUAD $0x031e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 3 QUAD $0x031f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 3 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x041e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 4 QUAD $0x041f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 4 QUAD $0x051e224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 30], 5 QUAD $0x051f227c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r12 + 31], 5 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x061e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 6 QUAD $0x061f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 6 QUAD $0x071e324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 30], 7 @@ -31157,13 +32428,13 @@ LBB5_166: QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x081e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 8 QUAD $0x081f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 8 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] QUAD $0x091e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 9 QUAD $0x091f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 9 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] QUAD $0x0a1e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 10 QUAD $0x0a1f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 10 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x0b1e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 11 QUAD $0x0b1f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 11 WORD $0x8948; BYTE $0xd8 // mov rax, rbx @@ -31297,10 +32568,10 @@ LBB5_166: LONG $0x3865e3c4; WORD $0x01e0 // vinserti128 ymm4, ymm3, xmm0, 1 LONG $0x4665e3c4; WORD $0x31c0 // vperm2i128 ymm0, ymm3, ymm0, 49 QUAD $0x00000198248c8b48 // mov rcx, qword [rsp + 408] - LONG $0x7f7ec1c4; WORD $0x8f44; BYTE $0x60 // vmovdqu yword [r15 + 4*rcx + 96], ymm0 - LONG $0x7f7ec1c4; WORD $0x8f54; BYTE $0x40 // vmovdqu yword [r15 + 4*rcx + 64], ymm2 - LONG $0x7f7ec1c4; WORD $0x8f64; BYTE $0x20 // vmovdqu yword [r15 + 4*rcx + 32], ymm4 - LONG $0x7f7ec1c4; WORD $0x8f0c // vmovdqu yword [r15 + 4*rcx], ymm1 + LONG $0x7f7ec1c4; WORD $0x8944; BYTE $0x60 // vmovdqu yword [r9 + 4*rcx + 96], ymm0 + LONG $0x7f7ec1c4; WORD $0x8954; BYTE $0x40 // vmovdqu yword [r9 + 4*rcx + 64], ymm2 + LONG $0x7f7ec1c4; WORD $0x8964; BYTE $0x20 // vmovdqu yword [r9 + 4*rcx + 32], ymm4 + LONG $0x7f7ec1c4; WORD $0x890c // vmovdqu yword [r9 + 4*rcx], ymm1 LONG $0x20c18348 // add rcx, 32 WORD $0x8948; BYTE $0xce // mov rsi, rcx QUAD $0x00000178248c3b48 // cmp rcx, qword [rsp + 376] @@ -31312,7 +32583,7 @@ LBB5_166: QUAD $0x0000018824948b48 // mov rdx, qword [rsp + 392] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] JNE LBB5_43 - JMP LBB5_129 + JMP LBB5_46 LBB5_168: LONG $0xe0e68349 // and r14, -32 @@ -31321,13 +32592,14 @@ LBB5_168: WORD $0x0148; BYTE $0xd0 // add rax, rdx QUAD $0x0000018824848948 // mov qword [rsp + 392], rax QUAD $0x0000017824b4894c // mov qword [rsp + 376], r14 - LONG $0xb7048d4b // lea rax, [r15 + 4*r14] + QUAD $0x00000000b5048d4a // lea rax, [4*r14] + WORD $0x014c; BYTE $0xe8 // add rax, r13 QUAD $0x0000019024848948 // mov qword [rsp + 400], rax LONG $0x6e79c1c4; BYTE $0xc3 // vmovd xmm0, r11d LONG $0x787de2c4; BYTE $0xc0 // vpbroadcastb ymm0, xmm0 QUAD $0x00020024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 512], ymm0 WORD $0xdb31 // xor ebx, ebx - QUAD $0x0000011024bc894c // mov qword [rsp + 272], r15 + QUAD $0x0000011024ac894c // mov qword [rsp + 272], r13 LBB5_169: QUAD $0x00000198249c8948 // mov qword [rsp + 408], rbx @@ -31337,7 +32609,7 @@ LBB5_169: QUAD $0x000000e024848948 // mov qword [rsp + 224], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x40c88348 // or rax, 64 - QUAD $0x000000d824848948 // mov qword [rsp + 216], rax + QUAD $0x000000c824848948 // mov qword [rsp + 200], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x60c88348 // or rax, 96 QUAD $0x0000008824848948 // mov qword [rsp + 136], rax @@ -31349,13 +32621,13 @@ LBB5_169: LONG $0x24448948; BYTE $0x48 // mov qword [rsp + 72], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x00c00d48; WORD $0x0000 // or rax, 192 - QUAD $0x000000d024848948 // mov qword [rsp + 208], rax + QUAD $0x0000009824848948 // mov qword [rsp + 152], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x00e00d48; WORD $0x0000 // or rax, 224 QUAD $0x0000009024848948 // mov qword [rsp + 144], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01000d48; WORD $0x0000 // or rax, 256 - QUAD $0x000000b824848948 // mov qword [rsp + 184], rax + QUAD $0x000000d024848948 // mov qword [rsp + 208], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01200d48; WORD $0x0000 // or rax, 288 QUAD $0x0000010824848948 // mov qword [rsp + 264], rax @@ -31394,7 +32666,7 @@ LBB5_169: LONG $0x1a44b60f; BYTE $0x05 // movzx eax, byte [rdx + rbx + 5] LONG $0xf06ef9c5 // vmovd xmm6, eax LONG $0x0a44b60f; BYTE $0x06 // movzx eax, byte [rdx + rcx + 6] - QUAD $0x000000f0248c8948 // mov qword [rsp + 240], rcx + QUAD $0x000000d8248c8948 // mov qword [rsp + 216], rcx LONG $0xe06e79c5 // vmovd xmm12, eax LONG $0x1a44b60f; BYTE $0x06 // movzx eax, byte [rdx + rbx + 6] LONG $0xf86ef9c5 // vmovd xmm7, eax @@ -31404,7 +32676,7 @@ LBB5_169: LONG $0xc86ef9c5 // vmovd xmm1, eax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01600d48; WORD $0x0000 // or rax, 352 - LONG $0x24448948; BYTE $0x28 // mov qword [rsp + 40], rax + LONG $0x24448948; BYTE $0x38 // mov qword [rsp + 56], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01800d48; WORD $0x0000 // or rax, 384 LONG $0x24448948; BYTE $0x20 // mov qword [rsp + 32], rax @@ -31413,7 +32685,7 @@ LBB5_169: QUAD $0x0000014024848948 // mov qword [rsp + 320], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01c00d48; WORD $0x0000 // or rax, 448 - LONG $0x24448948; BYTE $0x30 // mov qword [rsp + 48], rax + LONG $0x24448948; BYTE $0x28 // mov qword [rsp + 40], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x01e00d48; WORD $0x0000 // or rax, 480 QUAD $0x0000012024848948 // mov qword [rsp + 288], rax @@ -31422,11 +32694,11 @@ LBB5_169: QUAD $0x0000008024b4894c // mov qword [rsp + 128], r14 WORD $0x8948; BYTE $0xd9 // mov rcx, rbx LONG $0x40c98148; WORD $0x0002; BYTE $0x00 // or rcx, 576 - QUAD $0x000000b0248c8948 // mov qword [rsp + 176], rcx + QUAD $0x000000b8248c8948 // mov qword [rsp + 184], rcx WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x02600d48; WORD $0x0000 // or rax, 608 WORD $0x8949; BYTE $0xc5 // mov r13, rax - QUAD $0x000000c824848948 // mov qword [rsp + 200], rax + QUAD $0x000000f024848948 // mov qword [rsp + 240], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x02800d48; WORD $0x0000 // or rax, 640 QUAD $0x000000a024848948 // mov qword [rsp + 160], rax @@ -31438,13 +32710,13 @@ LBB5_169: QUAD $0x000000e8248c894c // mov qword [rsp + 232], r9 WORD $0x8949; BYTE $0xdb // mov r11, rbx LONG $0xe0cb8149; WORD $0x0002; BYTE $0x00 // or r11, 736 - LONG $0x245c894c; BYTE $0x60 // mov qword [rsp + 96], r11 + LONG $0x245c894c; BYTE $0x68 // mov qword [rsp + 104], r11 WORD $0x8949; BYTE $0xdc // mov r12, rbx LONG $0x00cc8149; WORD $0x0003; BYTE $0x00 // or r12, 768 LONG $0x2464894c; BYTE $0x70 // mov qword [rsp + 112], r12 WORD $0x8949; BYTE $0xd8 // mov r8, rbx LONG $0x20c88149; WORD $0x0003; BYTE $0x00 // or r8, 800 - LONG $0x2444894c; BYTE $0x38 // mov qword [rsp + 56], r8 + LONG $0x2444894c; BYTE $0x30 // mov qword [rsp + 48], r8 WORD $0x8949; BYTE $0xdf // mov r15, rbx LONG $0x40cf8149; WORD $0x0003; BYTE $0x00 // or r15, 832 LONG $0x247c894c; BYTE $0x78 // mov qword [rsp + 120], r15 @@ -31454,7 +32726,7 @@ LBB5_169: WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x03800d48; WORD $0x0000 // or rax, 896 WORD $0x8948; BYTE $0xc7 // mov rdi, rax - LONG $0x24448948; BYTE $0x68 // mov qword [rsp + 104], rax + LONG $0x24448948; BYTE $0x60 // mov qword [rsp + 96], rax WORD $0x8948; BYTE $0xd8 // mov rax, rbx LONG $0x03a00d48; WORD $0x0000 // or rax, 928 WORD $0x8948; BYTE $0xc6 // mov rsi, rax @@ -31481,10 +32753,10 @@ LBB5_169: LONG $0x2079e3c4; WORD $0x0204; BYTE $0x0e // vpinsrb xmm0, xmm0, byte [rdx + rax], 14 LONG $0x2079e3c4; WORD $0x1a04; BYTE $0x0f // vpinsrb xmm0, xmm0, byte [rdx + rbx], 15 WORD $0x8949; BYTE $0xdc // mov r12, rbx - QUAD $0x00000098249c8948 // mov qword [rsp + 152], rbx + QUAD $0x000000b0249c8948 // mov qword [rsp + 176], rbx QUAD $0x000000e0249c8b4c // mov r11, qword [rsp + 224] LONG $0x2061a3c4; WORD $0x1a1c; BYTE $0x01 // vpinsrb xmm3, xmm3, byte [rdx + r11], 1 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] LONG $0x2061e3c4; WORD $0x021c; BYTE $0x02 // vpinsrb xmm3, xmm3, byte [rdx + rax], 2 QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] LONG $0x2061e3c4; WORD $0x021c; BYTE $0x03 // vpinsrb xmm3, xmm3, byte [rdx + rax], 3 @@ -31492,47 +32764,47 @@ LBB5_169: LONG $0x2061a3c4; WORD $0x021c; BYTE $0x04 // vpinsrb xmm3, xmm3, byte [rdx + r8], 4 LONG $0x244c8b4c; BYTE $0x48 // mov r9, qword [rsp + 72] LONG $0x2061a3c4; WORD $0x0a1c; BYTE $0x05 // vpinsrb xmm3, xmm3, byte [rdx + r9], 5 - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] LONG $0x2061e3c4; WORD $0x021c; BYTE $0x06 // vpinsrb xmm3, xmm3, byte [rdx + rax], 6 QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] LONG $0x2061e3c4; WORD $0x321c; BYTE $0x07 // vpinsrb xmm3, xmm3, byte [rdx + rsi], 7 - QUAD $0x000000b824bc8b4c // mov r15, qword [rsp + 184] + QUAD $0x000000d024bc8b4c // mov r15, qword [rsp + 208] LONG $0x2061a3c4; WORD $0x3a1c; BYTE $0x08 // vpinsrb xmm3, xmm3, byte [rdx + r15], 8 QUAD $0x0000010824bc8b48 // mov rdi, qword [rsp + 264] LONG $0x2061e3c4; WORD $0x3a1c; BYTE $0x09 // vpinsrb xmm3, xmm3, byte [rdx + rdi], 9 LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] LONG $0x2061e3c4; WORD $0x021c; BYTE $0x0a // vpinsrb xmm3, xmm3, byte [rdx + rax], 10 - LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] + LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] LONG $0x2061e3c4; WORD $0x1a1c; BYTE $0x0b // vpinsrb xmm3, xmm3, byte [rdx + rbx], 11 LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] LONG $0x2061e3c4; WORD $0x1a1c; BYTE $0x0c // vpinsrb xmm3, xmm3, byte [rdx + rbx], 12 QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] LONG $0x2061e3c4; WORD $0x1a1c; BYTE $0x0d // vpinsrb xmm3, xmm3, byte [rdx + rbx], 13 - LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] + LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] LONG $0x2061e3c4; WORD $0x1a1c; BYTE $0x0e // vpinsrb xmm3, xmm3, byte [rdx + rbx], 14 QUAD $0x0000012024b48b4c // mov r14, qword [rsp + 288] LONG $0x2061a3c4; WORD $0x321c; BYTE $0x0f // vpinsrb xmm3, xmm3, byte [rdx + r14], 15 QUAD $0x00000080249c8b48 // mov rbx, qword [rsp + 128] QUAD $0x01011a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 1], 1 - QUAD $0x000000b0249c8b48 // mov rbx, qword [rsp + 176] + QUAD $0x000000b8249c8b48 // mov rbx, qword [rsp + 184] QUAD $0x02011a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 1], 2 - QUAD $0x000000c824ac8b4c // mov r13, qword [rsp + 200] + QUAD $0x000000f024ac8b4c // mov r13, qword [rsp + 240] QUAD $0x03012a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 1], 3 QUAD $0x04010a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 1], 4 QUAD $0x000000f8248c8b48 // mov rcx, qword [rsp + 248] QUAD $0x05010a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 1], 5 QUAD $0x000000e8248c8b48 // mov rcx, qword [rsp + 232] QUAD $0x06010a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 1], 6 - LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] + LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] QUAD $0x07010a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 1], 7 LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] QUAD $0x08010a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 1], 8 - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] QUAD $0x09010a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 1], 9 LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] QUAD $0x0a010a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 1], 10 QUAD $0x0b0112642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r10 + 1], 11 - LONG $0x245c8b48; BYTE $0x68 // mov rbx, qword [rsp + 104] + LONG $0x245c8b48; BYTE $0x60 // mov rbx, qword [rsp + 96] QUAD $0x0c011a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 1], 12 QUAD $0x000000a824948b4c // mov r10, qword [rsp + 168] QUAD $0x0d0112642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r10 + 1], 13 @@ -31540,30 +32812,30 @@ LBB5_169: QUAD $0x0e010a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 1], 14 QUAD $0x0f0122642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r12 + 1], 15 QUAD $0x01011a6c2029a3c4 // vpinsrb xmm5, xmm10, byte [rdx + r11 + 1], 1 - QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] + QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] QUAD $0x02010a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 1], 2 QUAD $0x0000008824a48b4c // mov r12, qword [rsp + 136] QUAD $0x0301226c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r12 + 1], 3 QUAD $0x0401026c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r8 + 1], 4 QUAD $0x05010a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 1], 5 - QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] + QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] QUAD $0x06010a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 1], 6 QUAD $0x0701326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 1], 7 QUAD $0x08013a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r15 + 1], 8 QUAD $0x09013a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 1], 9 WORD $0x8949; BYTE $0xfd // mov r13, rdi QUAD $0x0a01026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 1], 10 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] QUAD $0x0b01026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 1], 11 LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0c01026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 1], 12 QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] QUAD $0x0d01026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 1], 13 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0e01026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 1], 14 LONG $0x386563c4; WORD $0x01e8 // vinserti128 ymm13, ymm3, xmm0, 1 QUAD $0x0f0132442051a3c4 // vpinsrb xmm0, xmm5, byte [rdx + r14 + 1], 15 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] LONG $0x027cb60f; BYTE $0x08 // movzx edi, byte [rdx + rax + 8] LONG $0xcf6e79c5 // vmovd xmm9, edi LONG $0x387de3c4; WORD $0x01c4 // vinserti128 ymm0, ymm0, xmm4, 1 @@ -31574,9 +32846,9 @@ LBB5_169: QUAD $0x0001e024846ff9c5; BYTE $0x00 // vmovdqa xmm0, oword [rsp + 480] QUAD $0x0000008024bc8b4c // mov r15, qword [rsp + 128] QUAD $0x01023a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 2], 1 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] QUAD $0x020202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 2 - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] QUAD $0x030202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 3 QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] QUAD $0x040202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 4 @@ -31584,11 +32856,11 @@ LBB5_169: QUAD $0x050202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 5 QUAD $0x000000e824848b4c // mov r8, qword [rsp + 232] QUAD $0x060202442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 2], 6 - LONG $0x244c8b4c; BYTE $0x60 // mov r9, qword [rsp + 96] + LONG $0x244c8b4c; BYTE $0x68 // mov r9, qword [rsp + 104] QUAD $0x07020a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 2], 7 LONG $0x245c8b4c; BYTE $0x70 // mov r11, qword [rsp + 112] QUAD $0x08021a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 2], 8 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x090202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 9 LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] QUAD $0x0a0202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 10 @@ -31598,12 +32870,12 @@ LBB5_169: QUAD $0x0d0212442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 2], 13 LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] QUAD $0x0e0202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 14 - QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x0f0202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 2], 15 QUAD $0x000000e024948b4c // mov r10, qword [rsp + 224] QUAD $0x0001c0249c6ff9c5; BYTE $0x00 // vmovdqa xmm3, oword [rsp + 448] QUAD $0x0102125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 2], 1 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] QUAD $0x0202025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 2], 2 QUAD $0x0302225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 2], 3 QUAD $0x000000c024b48b4c // mov r14, qword [rsp + 192] @@ -31612,26 +32884,26 @@ LBB5_169: QUAD $0x0502225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 2], 5 QUAD $0x06020a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 2], 6 QUAD $0x0702325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 2], 7 - QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] + QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] QUAD $0x08023a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 2], 8 WORD $0x894c; BYTE $0xe9 // mov rcx, r13 QUAD $0x09022a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 2], 9 LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] QUAD $0x0a02325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 2], 10 - LONG $0x246c8b4c; BYTE $0x28 // mov r13, qword [rsp + 40] + LONG $0x246c8b4c; BYTE $0x38 // mov r13, qword [rsp + 56] QUAD $0x0b022a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 2], 11 LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] QUAD $0x0c021a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 2], 12 QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] QUAD $0x0d021a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 2], 13 - LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] + LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] QUAD $0x0e021a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 2], 14 QUAD $0x0000012024ac8b4c // mov r13, qword [rsp + 288] QUAD $0x0f022a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 2], 15 QUAD $0x01033a642021a3c4 // vpinsrb xmm4, xmm11, byte [rdx + r15 + 3], 1 - QUAD $0x000000b0249c8b48 // mov rbx, qword [rsp + 176] + QUAD $0x000000b8249c8b48 // mov rbx, qword [rsp + 184] QUAD $0x02031a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 3], 2 - QUAD $0x000000c8249c8b48 // mov rbx, qword [rsp + 200] + QUAD $0x000000f0249c8b48 // mov rbx, qword [rsp + 240] QUAD $0x03031a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 3], 3 QUAD $0x000000a0249c8b48 // mov rbx, qword [rsp + 160] QUAD $0x04031a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 3], 4 @@ -31640,19 +32912,19 @@ LBB5_169: QUAD $0x060302642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r8 + 3], 6 QUAD $0x07030a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r9 + 3], 7 QUAD $0x08031a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r11 + 3], 8 - LONG $0x244c8b4c; BYTE $0x38 // mov r9, qword [rsp + 56] + LONG $0x244c8b4c; BYTE $0x30 // mov r9, qword [rsp + 48] QUAD $0x09030a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r9 + 3], 9 LONG $0x245c8b48; BYTE $0x78 // mov rbx, qword [rsp + 120] QUAD $0x0a031a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 3], 10 LONG $0x245c8b48; BYTE $0x58 // mov rbx, qword [rsp + 88] QUAD $0x0b031a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 3], 11 - LONG $0x245c8b48; BYTE $0x68 // mov rbx, qword [rsp + 104] + LONG $0x245c8b48; BYTE $0x60 // mov rbx, qword [rsp + 96] QUAD $0x0c031a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 3], 12 QUAD $0x000000a824ac8b4c // mov r13, qword [rsp + 168] QUAD $0x0d032a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r13 + 3], 13 LONG $0x245c8b48; BYTE $0x50 // mov rbx, qword [rsp + 80] QUAD $0x0e031a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 3], 14 - QUAD $0x00000098249c8b48 // mov rbx, qword [rsp + 152] + QUAD $0x000000b0249c8b48 // mov rbx, qword [rsp + 176] QUAD $0x0f031a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 3], 15 QUAD $0x0103126c2039a3c4 // vpinsrb xmm5, xmm8, byte [rdx + r10 + 3], 1 WORD $0x894c; BYTE $0xd3 // mov rbx, r10 @@ -31661,14 +32933,14 @@ LBB5_169: QUAD $0x0303026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 3 QUAD $0x0403326c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r14 + 3], 4 QUAD $0x0503226c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r12 + 3], 5 - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] QUAD $0x0603026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 6 QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] QUAD $0x0703026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 7 QUAD $0x08033a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 3], 8 QUAD $0x09030a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 3], 9 QUAD $0x0a03326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 3], 10 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] QUAD $0x0b03026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 11 LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0c03026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 12 @@ -31676,9 +32948,9 @@ LBB5_169: QUAD $0x0d03026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 3], 13 LONG $0x3865e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm3, xmm0, 1 QUAD $0x0001e024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 480], ymm0 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0e0302442051e3c4 // vpinsrb xmm0, xmm5, byte [rdx + rax + 3], 14 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] LONG $0x027cb60f; BYTE $0x09 // movzx edi, byte [rdx + rax + 9] LONG $0xc76e79c5 // vmovd xmm8, edi QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] @@ -31690,9 +32962,9 @@ LBB5_169: LONG $0xdf6e79c5 // vmovd xmm11, edi QUAD $0x0001a024846ff9c5; BYTE $0x00 // vmovdqa xmm0, oword [rsp + 416] QUAD $0x01043a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 4], 1 - QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] + QUAD $0x000000b824bc8b4c // mov r15, qword [rsp + 184] QUAD $0x02043a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 4], 2 - QUAD $0x000000c824a48b4c // mov r12, qword [rsp + 200] + QUAD $0x000000f024a48b4c // mov r12, qword [rsp + 240] QUAD $0x030422442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 4], 3 QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] QUAD $0x040432442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 4], 4 @@ -31700,7 +32972,7 @@ LBB5_169: QUAD $0x050402442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 4], 5 QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] QUAD $0x060402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 6 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] QUAD $0x070402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 7 QUAD $0x08041a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 4], 8 QUAD $0x09040a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 4], 9 @@ -31708,37 +32980,37 @@ LBB5_169: QUAD $0x0a0402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 10 LONG $0x244c8b4c; BYTE $0x58 // mov r9, qword [rsp + 88] QUAD $0x0b040a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 4], 11 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] QUAD $0x0c0402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 12 QUAD $0x0d042a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 4], 13 LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] QUAD $0x0e0402442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 4], 14 - QUAD $0x0000009824948b4c // mov r10, qword [rsp + 152] + QUAD $0x000000b024948b4c // mov r10, qword [rsp + 176] QUAD $0x0f0412442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 4], 15 QUAD $0x01041a5c2001e3c4 // vpinsrb xmm3, xmm15, byte [rdx + rbx + 4], 1 - QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] + QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] QUAD $0x02043a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 4], 2 QUAD $0x0000008824ac8b4c // mov r13, qword [rsp + 136] QUAD $0x03042a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 4], 3 QUAD $0x0404325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 4], 4 LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] QUAD $0x0504025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 5 - QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] + QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] QUAD $0x06043a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 4], 6 QUAD $0x0000009024bc8b48 // mov rdi, qword [rsp + 144] QUAD $0x07043a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 4], 7 - QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] + QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] QUAD $0x0804025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 8 QUAD $0x09040a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 4], 9 LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] QUAD $0x0a04025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 10 - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] + LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] QUAD $0x0b040a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 4], 11 LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0c04025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 12 QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] QUAD $0x0d04025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 13 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0e04025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 14 QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0f04025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 4], 15 @@ -31750,15 +33022,15 @@ LBB5_169: QUAD $0x050502642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r8 + 5], 5 QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] QUAD $0x060502642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 5], 6 - LONG $0x247c8b4c; BYTE $0x60 // mov r15, qword [rsp + 96] + LONG $0x247c8b4c; BYTE $0x68 // mov r15, qword [rsp + 104] QUAD $0x07053a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r15 + 5], 7 QUAD $0x08051a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r11 + 5], 8 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x090502642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 5], 9 LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] QUAD $0x0a0502642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 5], 10 QUAD $0x0b050a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r9 + 5], 11 - LONG $0x245c8b4c; BYTE $0x68 // mov r11, qword [rsp + 104] + LONG $0x245c8b4c; BYTE $0x60 // mov r11, qword [rsp + 96] QUAD $0x0c051a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r11 + 5], 12 QUAD $0x000000a824b48b48 // mov rsi, qword [rsp + 168] QUAD $0x0d0532642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rsi + 5], 13 @@ -31766,17 +33038,17 @@ LBB5_169: QUAD $0x0e0502642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 5], 14 QUAD $0x0f0512642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r10 + 5], 15 QUAD $0x01051a6c2049e3c4 // vpinsrb xmm5, xmm6, byte [rdx + rbx + 5], 1 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] QUAD $0x0205026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 2 QUAD $0x03052a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r13 + 5], 3 QUAD $0x0405326c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r14 + 5], 4 WORD $0x894d; BYTE $0xf1 // mov r9, r14 LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] QUAD $0x0505026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 5 - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] QUAD $0x0605026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 6 QUAD $0x07053a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 5], 7 - QUAD $0x000000b824b48b4c // mov r14, qword [rsp + 184] + QUAD $0x000000d024b48b4c // mov r14, qword [rsp + 208] QUAD $0x0805326c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r14 + 5], 8 QUAD $0x0000010824a48b4c // mov r12, qword [rsp + 264] QUAD $0x0905226c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r12 + 5], 9 @@ -31787,12 +33059,12 @@ LBB5_169: QUAD $0x0c05026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 12 QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] QUAD $0x0d05026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 13 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0e05026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 5], 14 LONG $0x386563c4; WORD $0x01f0 // vinserti128 ymm14, ymm3, xmm0, 1 QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0f0502442051e3c4 // vpinsrb xmm0, xmm5, byte [rdx + rax + 5], 15 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] LONG $0x027cb60f; BYTE $0x0a // movzx edi, byte [rdx + rax + 10] LONG $0xdf6ef9c5 // vmovd xmm3, edi LONG $0x387d63c4; WORD $0x01fc // vinserti128 ymm15, ymm0, xmm4, 1 @@ -31801,9 +33073,9 @@ LBB5_169: LONG $0xe76ef9c5 // vmovd xmm4, edi QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x010602442019e3c4 // vpinsrb xmm0, xmm12, byte [rdx + rax + 6], 1 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] QUAD $0x020602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 2 - QUAD $0x000000c8249c8b48 // mov rbx, qword [rsp + 200] + QUAD $0x000000f0249c8b48 // mov rbx, qword [rsp + 240] QUAD $0x03061a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 6], 3 QUAD $0x000000a024848b4c // mov r8, qword [rsp + 160] QUAD $0x040602442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 6], 4 @@ -31814,7 +33086,7 @@ LBB5_169: QUAD $0x07063a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 6], 7 LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] QUAD $0x080602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 8 - LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] + LONG $0x247c8b4c; BYTE $0x30 // mov r15, qword [rsp + 48] QUAD $0x09063a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 6], 9 LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] QUAD $0x0a0602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 6], 10 @@ -31824,18 +33096,18 @@ LBB5_169: QUAD $0x0d0632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 6], 13 LONG $0x24748b48; BYTE $0x50 // mov rsi, qword [rsp + 80] QUAD $0x0e0632442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 6], 14 - QUAD $0x0000009824ac8b4c // mov r13, qword [rsp + 152] + QUAD $0x000000b024ac8b4c // mov r13, qword [rsp + 176] QUAD $0x0f062a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 6], 15 QUAD $0x000000e0249c8b4c // mov r11, qword [rsp + 224] QUAD $0x01061a6c2041a3c4 // vpinsrb xmm5, xmm7, byte [rdx + r11 + 6], 1 - QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] + QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] QUAD $0x02060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 2 QUAD $0x00000088248c8b48 // mov rcx, qword [rsp + 136] QUAD $0x03060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 3 QUAD $0x04060a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 6], 4 LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] QUAD $0x05060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 5 - QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] + QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] QUAD $0x06063a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rdi + 6], 6 QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] QUAD $0x07060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 7 @@ -31843,26 +33115,26 @@ LBB5_169: QUAD $0x0906226c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r12 + 6], 9 LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] QUAD $0x0a060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 10 - LONG $0x24748b4c; BYTE $0x28 // mov r14, qword [rsp + 40] + LONG $0x24748b4c; BYTE $0x38 // mov r14, qword [rsp + 56] QUAD $0x0b06326c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r14 + 6], 11 LONG $0x244c8b4c; BYTE $0x20 // mov r9, qword [rsp + 32] QUAD $0x0c060a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r9 + 6], 12 QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] QUAD $0x0d060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 13 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] + LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] QUAD $0x0e060a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 6], 14 QUAD $0x0000012024a48b4c // mov r12, qword [rsp + 288] QUAD $0x0f06226c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r12 + 6], 15 QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] QUAD $0x01070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 1 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] + QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] QUAD $0x02070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 2 QUAD $0x03071a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 7], 3 QUAD $0x040702542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 7], 4 QUAD $0x050712542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 7], 5 QUAD $0x000000e824848b4c // mov r8, qword [rsp + 232] QUAD $0x060702542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 7], 6 - LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] + LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] QUAD $0x07070a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 7], 7 LONG $0x24548b4c; BYTE $0x70 // mov r10, qword [rsp + 112] QUAD $0x080712542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 7], 8 @@ -31870,7 +33142,7 @@ LBB5_169: QUAD $0x0a0702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 7], 10 LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] QUAD $0x0b0702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 7], 11 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] QUAD $0x0c0702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 7], 12 QUAD $0x000000a8249c8b48 // mov rbx, qword [rsp + 168] QUAD $0x0d071a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 7], 13 @@ -31878,7 +33150,7 @@ LBB5_169: QUAD $0x0f072a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 7], 15 QUAD $0x01071a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 7], 1 WORD $0x894d; BYTE $0xdd // mov r13, r11 - QUAD $0x000000d824b48b48 // mov rsi, qword [rsp + 216] + QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] QUAD $0x0207324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 7], 2 QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] QUAD $0x0307024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 7], 3 @@ -31889,7 +33161,7 @@ LBB5_169: QUAD $0x06073a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 7], 6 QUAD $0x0000009024bc8b48 // mov rdi, qword [rsp + 144] QUAD $0x07073a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 7], 7 - QUAD $0x000000b8249c8b4c // mov r11, qword [rsp + 184] + QUAD $0x000000d0249c8b4c // mov r11, qword [rsp + 208] QUAD $0x08071a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 7], 8 QUAD $0x00000108248c8b48 // mov rcx, qword [rsp + 264] QUAD $0x09070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 9 @@ -31901,9 +33173,9 @@ LBB5_169: QUAD $0x0d070a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 7], 13 LONG $0x3855e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm5, xmm0, 1 QUAD $0x0001a024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 416], ymm0 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] QUAD $0x0e073a442071e3c4 // vpinsrb xmm0, xmm1, byte [rdx + rdi + 7], 14 - QUAD $0x000000f0248c8b48 // mov rcx, qword [rsp + 240] + QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] LONG $0x0a7cb60f; BYTE $0x0b // movzx edi, byte [rdx + rcx + 11] LONG $0xcf6ef9c5 // vmovd xmm1, edi QUAD $0x00000120248c8b48 // mov rcx, qword [rsp + 288] @@ -31915,30 +33187,30 @@ LBB5_169: LONG $0xd76ef9c5 // vmovd xmm2, edi QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] QUAD $0x01083a442031e3c4 // vpinsrb xmm0, xmm9, byte [rdx + rdi + 8], 1 - QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] + QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] QUAD $0x02083a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 8], 2 - QUAD $0x000000c824bc8b4c // mov r15, qword [rsp + 200] + QUAD $0x000000f024bc8b4c // mov r15, qword [rsp + 240] QUAD $0x03083a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 8], 3 QUAD $0x000000a0248c8b48 // mov rcx, qword [rsp + 160] QUAD $0x04080a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 8], 4 QUAD $0x000000f8248c8b4c // mov r9, qword [rsp + 248] QUAD $0x05080a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 8], 5 QUAD $0x060802442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 8], 6 - LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] + LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] QUAD $0x07080a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 8], 7 QUAD $0x080812442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 8], 8 - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] QUAD $0x09080a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 8], 9 LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] QUAD $0x0a080a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 8], 10 LONG $0x24548b4c; BYTE $0x58 // mov r10, qword [rsp + 88] QUAD $0x0b0812442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 8], 11 - LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] + LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] QUAD $0x0c080a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 8], 12 QUAD $0x0d081a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 8], 13 LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] QUAD $0x0e080a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 8], 14 - QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] + QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] QUAD $0x0f080a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 8], 15 QUAD $0x01082a6c2029a3c4 // vpinsrb xmm5, xmm10, byte [rdx + r13 + 8], 1 WORD $0x8949; BYTE $0xf6 // mov r14, rsi @@ -31948,7 +33220,7 @@ LBB5_169: QUAD $0x04080a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rcx + 8], 4 WORD $0x894c; BYTE $0xe7 // mov rdi, r12 QUAD $0x0508226c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r12 + 8], 5 - QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] + QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] QUAD $0x0608326c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rsi + 8], 6 QUAD $0x0000009024a48b4c // mov r12, qword [rsp + 144] QUAD $0x0708226c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r12 + 8], 7 @@ -31957,41 +33229,41 @@ LBB5_169: QUAD $0x0908026c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rax + 8], 9 LONG $0x245c8b4c; BYTE $0x40 // mov r11, qword [rsp + 64] QUAD $0x0a081a6c2051a3c4 // vpinsrb xmm5, xmm5, byte [rdx + r11 + 8], 10 - LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] + LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] QUAD $0x0b081a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 8], 11 LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] QUAD $0x0c081a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 8], 12 QUAD $0x00000140249c8b48 // mov rbx, qword [rsp + 320] QUAD $0x0d081a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 8], 13 - LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] + LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] QUAD $0x0e081a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 8], 14 QUAD $0x00000120249c8b48 // mov rbx, qword [rsp + 288] QUAD $0x0f081a6c2051e3c4 // vpinsrb xmm5, xmm5, byte [rdx + rbx + 8], 15 QUAD $0x00000080249c8b48 // mov rbx, qword [rsp + 128] QUAD $0x01091a742039e3c4 // vpinsrb xmm6, xmm8, byte [rdx + rbx + 9], 1 - QUAD $0x000000b0249c8b48 // mov rbx, qword [rsp + 176] + QUAD $0x000000b8249c8b48 // mov rbx, qword [rsp + 184] QUAD $0x02091a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rbx + 9], 2 QUAD $0x03093a742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r15 + 9], 3 QUAD $0x000000a0249c8b48 // mov rbx, qword [rsp + 160] QUAD $0x04091a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rbx + 9], 4 QUAD $0x05090a742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r9 + 9], 5 QUAD $0x060902742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r8 + 9], 6 - LONG $0x247c8b4c; BYTE $0x60 // mov r15, qword [rsp + 96] + LONG $0x247c8b4c; BYTE $0x68 // mov r15, qword [rsp + 104] QUAD $0x07093a742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r15 + 9], 7 LONG $0x245c8b48; BYTE $0x70 // mov rbx, qword [rsp + 112] QUAD $0x08091a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rbx + 9], 8 - LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] + LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] QUAD $0x09091a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rbx + 9], 9 LONG $0x245c8b48; BYTE $0x78 // mov rbx, qword [rsp + 120] QUAD $0x0a091a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rbx + 9], 10 QUAD $0x0b0912742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r10 + 9], 11 - LONG $0x245c8b48; BYTE $0x68 // mov rbx, qword [rsp + 104] + LONG $0x245c8b48; BYTE $0x60 // mov rbx, qword [rsp + 96] QUAD $0x0c091a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rbx + 9], 12 QUAD $0x000000a824848b4c // mov r8, qword [rsp + 168] QUAD $0x0d0902742049a3c4 // vpinsrb xmm6, xmm6, byte [rdx + r8 + 9], 13 LONG $0x245c8b48; BYTE $0x50 // mov rbx, qword [rsp + 80] QUAD $0x0e091a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rbx + 9], 14 - QUAD $0x00000098249c8b48 // mov rbx, qword [rsp + 152] + QUAD $0x000000b0249c8b48 // mov rbx, qword [rsp + 176] QUAD $0x0f091a742049e3c4 // vpinsrb xmm6, xmm6, byte [rdx + rbx + 9], 15 QUAD $0x01092a7c2021a3c4 // vpinsrb xmm7, xmm11, byte [rdx + r13 + 9], 1 QUAD $0x0209327c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r14 + 9], 2 @@ -32002,23 +33274,23 @@ LBB5_169: QUAD $0x0609327c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rsi + 9], 6 WORD $0x8949; BYTE $0xf6 // mov r14, rsi QUAD $0x0709227c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r12 + 9], 7 - QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] + QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] QUAD $0x08090a7c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rcx + 9], 8 QUAD $0x0909027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 9 QUAD $0x0a091a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r11 + 9], 10 - LONG $0x245c8b4c; BYTE $0x28 // mov r11, qword [rsp + 40] + LONG $0x245c8b4c; BYTE $0x38 // mov r11, qword [rsp + 56] QUAD $0x0b091a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r11 + 9], 11 LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0c09027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 12 QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] QUAD $0x0d09027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 13 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0e09027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 9], 14 LONG $0x3855e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm5, xmm0, 1 QUAD $0x00048024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 1152], ymm0 QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0f09026c2041e3c4 // vpinsrb xmm5, xmm7, byte [rdx + rax + 9], 15 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] LONG $0x027cb60f; BYTE $0x0c // movzx edi, byte [rdx + rax + 12] LONG $0xc76ef9c5 // vmovd xmm0, edi LONG $0x3855e3c4; WORD $0x01ee // vinserti128 ymm5, ymm5, xmm6, 1 @@ -32028,9 +33300,9 @@ LBB5_169: LONG $0xef6ef9c5 // vmovd xmm5, edi QUAD $0x0000008024ac8b4c // mov r13, qword [rsp + 128] QUAD $0x010a2a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 10], 1 - QUAD $0x000000b024a48b4c // mov r12, qword [rsp + 176] + QUAD $0x000000b824a48b4c // mov r12, qword [rsp + 184] QUAD $0x020a225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 10], 2 - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] QUAD $0x030a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 3 QUAD $0x000000a024948b4c // mov r10, qword [rsp + 160] QUAD $0x040a125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 10], 4 @@ -32040,22 +33312,22 @@ LBB5_169: QUAD $0x070a3a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 10], 7 LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] QUAD $0x080a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 8 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x090a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 9 LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] QUAD $0x0a0a325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 10], 10 LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] QUAD $0x0b0a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 11 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] QUAD $0x0c0a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 12 QUAD $0x0d0a025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 10], 13 LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] QUAD $0x0e0a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 14 - QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x0f0a025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 10], 15 QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] QUAD $0x010a02642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 10], 1 - QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] + QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] QUAD $0x020a0a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rcx + 10], 2 QUAD $0x030a1a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 10], 3 QUAD $0x000000c024bc8b48 // mov rdi, qword [rsp + 192] @@ -32065,7 +33337,7 @@ LBB5_169: QUAD $0x060a32642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r14 + 10], 6 QUAD $0x00000090249c8b48 // mov rbx, qword [rsp + 144] QUAD $0x070a1a642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rbx + 10], 7 - QUAD $0x000000b824848b4c // mov r8, qword [rsp + 184] + QUAD $0x000000d024848b4c // mov r8, qword [rsp + 208] QUAD $0x080a02642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r8 + 10], 8 QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] QUAD $0x090a02642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 10], 9 @@ -32076,34 +33348,34 @@ LBB5_169: QUAD $0x0c0a02642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 10], 12 QUAD $0x00000140249c8b4c // mov r11, qword [rsp + 320] QUAD $0x0d0a1a642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r11 + 10], 13 - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] + LONG $0x24748b4c; BYTE $0x28 // mov r14, qword [rsp + 40] QUAD $0x0e0a32642059a3c4 // vpinsrb xmm4, xmm4, byte [rdx + r14 + 10], 14 QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0f0a02642059e3c4 // vpinsrb xmm4, xmm4, byte [rdx + rax + 10], 15 QUAD $0x010b2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 11], 1 QUAD $0x020b224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 11], 2 - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] QUAD $0x030b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 3 QUAD $0x040b124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 11], 4 QUAD $0x000000f824a48b4c // mov r12, qword [rsp + 248] QUAD $0x050b224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 11], 5 QUAD $0x060b0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 11], 6 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] QUAD $0x070b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 7 LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] QUAD $0x080b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 8 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x090b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 9 QUAD $0x0a0b324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 11], 10 LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] QUAD $0x0b0b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 11 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] QUAD $0x0c0b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 12 QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] QUAD $0x0d0b024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 11], 13 LONG $0x246c8b4c; BYTE $0x50 // mov r13, qword [rsp + 80] QUAD $0x0e0b2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 11], 14 - QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] + QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] QUAD $0x0f0b324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 11], 15 QUAD $0x000000e0248c8b4c // mov r9, qword [rsp + 224] QUAD $0x010b0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 11], 1 @@ -32112,7 +33384,7 @@ LBB5_169: QUAD $0x030b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 11], 3 QUAD $0x040b3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 11], 4 QUAD $0x050b3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 11], 5 - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] QUAD $0x060b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 11], 6 QUAD $0x070b1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 11], 7 QUAD $0x080b02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 11], 8 @@ -32120,7 +33392,7 @@ LBB5_169: QUAD $0x090b1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 11], 9 LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] QUAD $0x0a0b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 11], 10 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] QUAD $0x0b0b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 11], 11 LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0c0b02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 11], 12 @@ -32128,7 +33400,7 @@ LBB5_169: LONG $0x385de3c4; WORD $0x01db // vinserti128 ymm3, ymm4, xmm3, 1 QUAD $0x000440249c7ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 1088], ymm3 QUAD $0x0e0b32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 11], 14 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] LONG $0x027cb60f; BYTE $0x0d // movzx edi, byte [rdx + rax + 13] LONG $0xdf6ef9c5 // vmovd xmm3, edi QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] @@ -32140,32 +33412,32 @@ LBB5_169: LONG $0xcf6ef9c5 // vmovd xmm1, edi QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] QUAD $0x010c0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 12], 1 - QUAD $0x000000b024848b4c // mov r8, qword [rsp + 176] + QUAD $0x000000b824848b4c // mov r8, qword [rsp + 184] QUAD $0x020c02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 12], 2 - QUAD $0x000000c824bc8b4c // mov r15, qword [rsp + 200] + QUAD $0x000000f024bc8b4c // mov r15, qword [rsp + 240] QUAD $0x030c3a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 12], 3 QUAD $0x040c12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 12], 4 QUAD $0x050c22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 12], 5 QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] QUAD $0x060c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 6 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] QUAD $0x070c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 7 LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] QUAD $0x080c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 8 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x090c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 9 LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] QUAD $0x0a0c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 10 LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] QUAD $0x0b0c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 11 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] QUAD $0x0c0c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 12 QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] QUAD $0x0d0c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 12], 13 QUAD $0x0e0c2a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 12], 14 QUAD $0x0f0c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 12], 15 QUAD $0x010c0a542051a3c4 // vpinsrb xmm2, xmm5, byte [rdx + r9 + 12], 1 - QUAD $0x000000d824b48b48 // mov rsi, qword [rsp + 216] + QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] QUAD $0x020c32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 12], 2 QUAD $0x0000008824bc8b48 // mov rdi, qword [rsp + 136] QUAD $0x030c3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 12], 3 @@ -32173,16 +33445,16 @@ LBB5_169: QUAD $0x040c02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 12], 4 LONG $0x246c8b4c; BYTE $0x48 // mov r13, qword [rsp + 72] QUAD $0x050c2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 12], 5 - QUAD $0x000000d0248c8b4c // mov r9, qword [rsp + 208] + QUAD $0x00000098248c8b4c // mov r9, qword [rsp + 152] QUAD $0x060c0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 12], 6 QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] QUAD $0x070c02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 12], 7 - QUAD $0x000000b8249c8b4c // mov r11, qword [rsp + 184] + QUAD $0x000000d0249c8b4c // mov r11, qword [rsp + 208] QUAD $0x080c1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 12], 8 QUAD $0x090c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 9 LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] QUAD $0x0a0c02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 12], 10 - LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] + LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] QUAD $0x0b0c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 11 LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] QUAD $0x0c0c1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 12], 12 @@ -32199,23 +33471,23 @@ LBB5_169: WORD $0x894d; BYTE $0xe2 // mov r10, r12 QUAD $0x000000e8249c8b48 // mov rbx, qword [rsp + 232] QUAD $0x060d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 6 - LONG $0x24448b4c; BYTE $0x60 // mov r8, qword [rsp + 96] + LONG $0x24448b4c; BYTE $0x68 // mov r8, qword [rsp + 104] QUAD $0x070d025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 13], 7 LONG $0x245c8b48; BYTE $0x70 // mov rbx, qword [rsp + 112] QUAD $0x080d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 8 - LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] + LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] QUAD $0x090d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 9 LONG $0x245c8b48; BYTE $0x78 // mov rbx, qword [rsp + 120] QUAD $0x0a0d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 10 LONG $0x245c8b48; BYTE $0x58 // mov rbx, qword [rsp + 88] QUAD $0x0b0d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 11 - LONG $0x247c8b4c; BYTE $0x68 // mov r15, qword [rsp + 104] + LONG $0x247c8b4c; BYTE $0x60 // mov r15, qword [rsp + 96] QUAD $0x0c0d3a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 13], 12 QUAD $0x000000a8249c8b48 // mov rbx, qword [rsp + 168] QUAD $0x0d0d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 13 LONG $0x245c8b48; BYTE $0x50 // mov rbx, qword [rsp + 80] QUAD $0x0e0d1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 13], 14 - QUAD $0x0000009824a48b4c // mov r12, qword [rsp + 152] + QUAD $0x000000b024a48b4c // mov r12, qword [rsp + 176] QUAD $0x0f0d225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 13], 15 QUAD $0x000000e0249c8b48 // mov rbx, qword [rsp + 224] QUAD $0x010d1a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 13], 1 @@ -32231,7 +33503,7 @@ LBB5_169: QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] QUAD $0x090d324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 13], 9 QUAD $0x0a0d024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 13], 10 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] QUAD $0x0b0d024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 13], 11 LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0c0d024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 13], 12 @@ -32242,7 +33514,7 @@ LBB5_169: QUAD $0x0003e024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 992], ymm0 QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0f0d02442071e3c4 // vpinsrb xmm0, xmm1, byte [rdx + rax + 13], 15 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] LONG $0x027cb60f; BYTE $0x0e // movzx edi, byte [rdx + rax + 14] LONG $0xcf6ef9c5 // vmovd xmm1, edi LONG $0x387de3c4; WORD $0x01c3 // vinserti128 ymm0, ymm0, xmm3, 1 @@ -32251,9 +33523,9 @@ LBB5_169: LONG $0x027cb60f; BYTE $0x0e // movzx edi, byte [rdx + rax + 14] LONG $0xc76ef9c5 // vmovd xmm0, edi QUAD $0x010e0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 14], 1 - QUAD $0x000000b0248c8b4c // mov r9, qword [rsp + 176] + QUAD $0x000000b8248c8b4c // mov r9, qword [rsp + 184] QUAD $0x020e0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 14], 2 - QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] + QUAD $0x000000f0248c8b48 // mov rcx, qword [rsp + 240] QUAD $0x030e0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 14], 3 QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] QUAD $0x040e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 4 @@ -32263,7 +33535,7 @@ LBB5_169: QUAD $0x070e024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 14], 7 LONG $0x245c8b48; BYTE $0x70 // mov rbx, qword [rsp + 112] QUAD $0x080e1a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 14], 8 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x090e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 14], 9 LONG $0x24548b4c; BYTE $0x78 // mov r10, qword [rsp + 120] QUAD $0x0a0e124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 14], 10 @@ -32277,7 +33549,7 @@ LBB5_169: QUAD $0x0f0e224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 14], 15 QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] QUAD $0x010e3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 14], 1 - QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] + QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] QUAD $0x020e3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 14], 2 QUAD $0x0000008824bc8b48 // mov rdi, qword [rsp + 136] QUAD $0x030e3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 14], 3 @@ -32285,26 +33557,26 @@ LBB5_169: QUAD $0x040e3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 14], 4 LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] QUAD $0x050e3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 14], 5 - QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] + QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] QUAD $0x060e3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 14], 6 QUAD $0x0000009024bc8b48 // mov rdi, qword [rsp + 144] QUAD $0x070e3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 14], 7 - QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] + QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] QUAD $0x080e3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 14], 8 QUAD $0x090e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 9 LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] QUAD $0x0a0e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 10 - LONG $0x24748b48; BYTE $0x28 // mov rsi, qword [rsp + 40] + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] QUAD $0x0b0e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 11 LONG $0x24648b4c; BYTE $0x20 // mov r12, qword [rsp + 32] QUAD $0x0c0e22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 14], 12 QUAD $0x0000014024b48b48 // mov rsi, qword [rsp + 320] QUAD $0x0d0e32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 14], 13 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] QUAD $0x0e0e3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 14], 14 QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] QUAD $0x0f0e3a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 14], 15 - QUAD $0x000000f024848b4c // mov r8, qword [rsp + 240] + QUAD $0x000000d824848b4c // mov r8, qword [rsp + 216] LONG $0x7cb60f42; WORD $0x0f02 // movzx edi, byte [rdx + r8 + 15] LONG $0xd76ef9c5 // vmovd xmm2, edi QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] @@ -32316,24 +33588,24 @@ LBB5_169: QUAD $0x000000f8248c8b48 // mov rcx, qword [rsp + 248] QUAD $0x050f0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 15], 5 QUAD $0x060f2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 15], 6 - LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] + LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] QUAD $0x070f0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 15], 7 QUAD $0x080f1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 15], 8 QUAD $0x090f02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 15], 9 QUAD $0x0a0f12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 15], 10 QUAD $0x0b0f1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 15], 11 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] QUAD $0x0c0f02542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 15], 12 QUAD $0x0d0f3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 15], 13 QUAD $0x0e0f32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 15], 14 - QUAD $0x00000098248c8b4c // mov r9, qword [rsp + 152] + QUAD $0x000000b0248c8b4c // mov r9, qword [rsp + 176] QUAD $0x0f0f0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 15], 15 QUAD $0x00000100249c8b48 // mov rbx, qword [rsp + 256] LONG $0x1a7cb60f; BYTE $0x0f // movzx edi, byte [rdx + rbx + 15] LONG $0xdf6ef9c5 // vmovd xmm3, edi QUAD $0x000000e0249c8b4c // mov r11, qword [rsp + 224] QUAD $0x010f1a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 15], 1 - QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] + QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] QUAD $0x020f0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 15], 2 QUAD $0x0000008824948b4c // mov r10, qword [rsp + 136] QUAD $0x030f125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 15], 3 @@ -32341,21 +33613,21 @@ LBB5_169: QUAD $0x040f0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 15], 4 LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] QUAD $0x050f0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 15], 5 - QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] + QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] QUAD $0x060f0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 15], 6 QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] QUAD $0x070f325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 15], 7 - QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] + QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] QUAD $0x080f3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 15], 8 QUAD $0x0000010824bc8b48 // mov rdi, qword [rsp + 264] QUAD $0x090f3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 15], 9 LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] QUAD $0x0a0f3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 15], 10 - LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] + LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] QUAD $0x0b0f3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 15], 11 QUAD $0x0c0f225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 15], 12 QUAD $0x0d0f325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 15], 13 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + LONG $0x24748b48; BYTE $0x28 // mov rsi, qword [rsp + 40] QUAD $0x0e0f325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 15], 14 QUAD $0x0000012024bc8b4c // mov r15, qword [rsp + 288] QUAD $0x0f0f3a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 15], 15 @@ -32367,9 +33639,9 @@ LBB5_169: LONG $0xc76ef9c5 // vmovd xmm0, edi QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] QUAD $0x011032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 1 - QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] + QUAD $0x000000b824b48b48 // mov rsi, qword [rsp + 184] QUAD $0x021032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 2 - QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] + QUAD $0x000000f024b48b48 // mov rsi, qword [rsp + 240] QUAD $0x031032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 3 QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] QUAD $0x041032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 4 @@ -32377,11 +33649,11 @@ LBB5_169: QUAD $0x051032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 5 QUAD $0x06102a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 16], 6 WORD $0x894d; BYTE $0xec // mov r12, r13 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] QUAD $0x071032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 7 LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] QUAD $0x081032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 8 - LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] QUAD $0x091032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 9 LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] QUAD $0x0a1032442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 16], 10 @@ -32396,7 +33668,7 @@ LBB5_169: LONG $0x1a7cb60f; BYTE $0x10 // movzx edi, byte [rdx + rbx + 16] LONG $0xcf6ef9c5 // vmovd xmm1, edi QUAD $0x01101a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 16], 1 - QUAD $0x000000d8248c8b4c // mov r9, qword [rsp + 216] + QUAD $0x000000c8248c8b4c // mov r9, qword [rsp + 200] QUAD $0x02100a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 16], 2 QUAD $0x0310124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 16], 3 QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] @@ -32405,51 +33677,51 @@ LBB5_169: QUAD $0x0510024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 16], 5 QUAD $0x06100a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 16], 6 QUAD $0x0710324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 16], 7 - QUAD $0x000000b824b48b48 // mov rsi, qword [rsp + 184] + QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] QUAD $0x0810324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 16], 8 QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] QUAD $0x0910024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 16], 9 LONG $0x246c8b4c; BYTE $0x40 // mov r13, qword [rsp + 64] QUAD $0x0a102a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 16], 10 - LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] + LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] QUAD $0x0b103a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 16], 11 LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] QUAD $0x0c103a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 16], 12 QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] QUAD $0x0d103a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 16], 13 - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] + LONG $0x24748b4c; BYTE $0x28 // mov r14, qword [rsp + 40] QUAD $0x0e10324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 16], 14 QUAD $0x0f103a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 16], 15 - QUAD $0x000000f024bc8b48 // mov rdi, qword [rsp + 240] + QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] LONG $0x3a7cb60f; BYTE $0x11 // movzx edi, byte [rdx + rdi + 17] LONG $0xd76ef9c5 // vmovd xmm2, edi QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] QUAD $0x01113a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 17], 1 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] + QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] QUAD $0x02110a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 17], 2 - QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] + QUAD $0x000000f024bc8b48 // mov rdi, qword [rsp + 240] QUAD $0x03113a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 17], 3 QUAD $0x000000a024bc8b48 // mov rdi, qword [rsp + 160] QUAD $0x04113a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 17], 4 QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] QUAD $0x051112542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 17], 5 QUAD $0x061122542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 17], 6 - LONG $0x24648b4c; BYTE $0x60 // mov r12, qword [rsp + 96] + LONG $0x24648b4c; BYTE $0x68 // mov r12, qword [rsp + 104] QUAD $0x071122542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 17], 7 LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] QUAD $0x08113a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 17], 8 - LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] + LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] QUAD $0x09113a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 17], 9 LONG $0x245c8b48; BYTE $0x78 // mov rbx, qword [rsp + 120] QUAD $0x0a111a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 17], 10 LONG $0x247c8b48; BYTE $0x58 // mov rdi, qword [rsp + 88] QUAD $0x0b113a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 17], 11 - LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] + LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] QUAD $0x0c113a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 17], 12 QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] QUAD $0x0d111a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 17], 13 QUAD $0x0e1102542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 17], 14 - QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] + QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] QUAD $0x0f113a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 17], 15 QUAD $0x0000010024bc8b48 // mov rdi, qword [rsp + 256] LONG $0x3a7cb60f; BYTE $0x11 // movzx edi, byte [rdx + rdi + 17] @@ -32463,14 +33735,14 @@ LBB5_169: QUAD $0x04113a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 17], 4 LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] QUAD $0x05113a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 17], 5 - QUAD $0x000000d024bc8b4c // mov r15, qword [rsp + 208] + QUAD $0x0000009824bc8b4c // mov r15, qword [rsp + 152] QUAD $0x06113a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 17], 6 QUAD $0x0000009024848b4c // mov r8, qword [rsp + 144] QUAD $0x0711025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 17], 7 QUAD $0x0811325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 8 QUAD $0x0911025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 17], 9 QUAD $0x0a112a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 17], 10 - LONG $0x244c8b4c; BYTE $0x28 // mov r9, qword [rsp + 40] + LONG $0x244c8b4c; BYTE $0x38 // mov r9, qword [rsp + 56] QUAD $0x0b110a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 17], 11 LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] QUAD $0x0c11325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 17], 12 @@ -32483,13 +33755,13 @@ LBB5_169: QUAD $0x0f1102442061e3c4 // vpinsrb xmm0, xmm3, byte [rdx + rax + 17], 15 LONG $0x387de3c4; WORD $0x01c2 // vinserti128 ymm0, ymm0, xmm2, 1 QUAD $0x00036024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 864], ymm0 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] LONG $0x027cb60f; BYTE $0x12 // movzx edi, byte [rdx + rax + 18] LONG $0xc76ef9c5 // vmovd xmm0, edi QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x011202442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 18], 1 QUAD $0x02120a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 18], 2 - QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] + QUAD $0x000000f0248c8b48 // mov rcx, qword [rsp + 240] QUAD $0x03120a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 18], 3 QUAD $0x000000a024ac8b4c // mov r13, qword [rsp + 160] QUAD $0x04122a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 18], 4 @@ -32499,24 +33771,24 @@ LBB5_169: QUAD $0x071222442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 18], 7 LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] QUAD $0x08120a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 18], 8 - LONG $0x24548b4c; BYTE $0x38 // mov r10, qword [rsp + 56] + LONG $0x24548b4c; BYTE $0x30 // mov r10, qword [rsp + 48] QUAD $0x091212442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 18], 9 QUAD $0x0a121a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 18], 10 LONG $0x247c8b48; BYTE $0x58 // mov rdi, qword [rsp + 88] QUAD $0x0b123a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 18], 11 - LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] + LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] QUAD $0x0c123a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 18], 12 QUAD $0x0d121a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 18], 13 LONG $0x247c8b48; BYTE $0x50 // mov rdi, qword [rsp + 80] QUAD $0x0e123a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 18], 14 - QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] + QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] QUAD $0x0f123a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 18], 15 QUAD $0x00000100249c8b4c // mov r11, qword [rsp + 256] LONG $0x7cb60f42; WORD $0x121a // movzx edi, byte [rdx + r11 + 18] LONG $0xcf6ef9c5 // vmovd xmm1, edi QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] QUAD $0x01123a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 18], 1 - QUAD $0x000000d824b48b4c // mov r14, qword [rsp + 216] + QUAD $0x000000c824b48b4c // mov r14, qword [rsp + 200] QUAD $0x0212324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 18], 2 QUAD $0x0000008824a48b4c // mov r12, qword [rsp + 136] QUAD $0x0312224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 18], 3 @@ -32526,7 +33798,7 @@ LBB5_169: QUAD $0x05123a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 18], 5 QUAD $0x06123a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 18], 6 QUAD $0x0712024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 18], 7 - QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] + QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] QUAD $0x08123a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 18], 8 QUAD $0x0000010824bc8b48 // mov rdi, qword [rsp + 264] QUAD $0x09123a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 18], 9 @@ -32536,37 +33808,37 @@ LBB5_169: QUAD $0x0c12324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 18], 12 QUAD $0x00000140248c8b4c // mov r9, qword [rsp + 320] QUAD $0x0d120a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 18], 13 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] QUAD $0x0e123a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 18], 14 QUAD $0x0000012024848b4c // mov r8, qword [rsp + 288] QUAD $0x0f12024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 18], 15 - QUAD $0x000000f024bc8b48 // mov rdi, qword [rsp + 240] + QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] LONG $0x3a7cb60f; BYTE $0x13 // movzx edi, byte [rdx + rdi + 19] LONG $0xd76ef9c5 // vmovd xmm2, edi QUAD $0x011302542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 19], 1 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] QUAD $0x021302542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 19], 2 - QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] + QUAD $0x000000f024bc8b48 // mov rdi, qword [rsp + 240] QUAD $0x03133a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 19], 3 QUAD $0x04132a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 19], 4 QUAD $0x000000f824848b48 // mov rax, qword [rsp + 248] QUAD $0x051302542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 19], 5 QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] QUAD $0x061302542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 19], 6 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] QUAD $0x071302542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 19], 7 QUAD $0x08130a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 19], 8 QUAD $0x091312542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 19], 9 QUAD $0x0a131a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 19], 10 LONG $0x245c8b48; BYTE $0x58 // mov rbx, qword [rsp + 88] QUAD $0x0b131a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 19], 11 - LONG $0x246c8b4c; BYTE $0x68 // mov r13, qword [rsp + 104] + LONG $0x246c8b4c; BYTE $0x60 // mov r13, qword [rsp + 96] QUAD $0x0c132a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 19], 12 QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] QUAD $0x0d1302542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 19], 13 LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] QUAD $0x0e1302542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 19], 14 - QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x0f1302542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 19], 15 LONG $0x7cb60f42; WORD $0x131a // movzx edi, byte [rdx + r11 + 19] LONG $0xdf6ef9c5 // vmovd xmm3, edi @@ -32581,31 +33853,31 @@ LBB5_169: QUAD $0x06133a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 19], 6 QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] QUAD $0x0713025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 7 - QUAD $0x000000b8248c8b48 // mov rcx, qword [rsp + 184] + QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] QUAD $0x08130a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 19], 8 QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] QUAD $0x0913025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 9 LONG $0x24548b4c; BYTE $0x40 // mov r10, qword [rsp + 64] QUAD $0x0a13125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 19], 10 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] QUAD $0x0b13025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 19], 11 QUAD $0x0c13325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 19], 12 QUAD $0x0d130a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 19], 13 - LONG $0x244c8b4c; BYTE $0x30 // mov r9, qword [rsp + 48] + LONG $0x244c8b4c; BYTE $0x28 // mov r9, qword [rsp + 40] QUAD $0x0e130a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 19], 14 QUAD $0x0f13025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 19], 15 LONG $0x3875e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm1, xmm0, 1 QUAD $0x00032024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 800], ymm0 LONG $0x3865e3c4; WORD $0x01c2 // vinserti128 ymm0, ymm3, xmm2, 1 QUAD $0x00034024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 832], ymm0 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] LONG $0x027cb60f; BYTE $0x14 // movzx edi, byte [rdx + rax + 20] LONG $0xc76ef9c5 // vmovd xmm0, edi QUAD $0x0000008024b48b48 // mov rsi, qword [rsp + 128] QUAD $0x011432442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 20], 1 - QUAD $0x000000b0249c8b4c // mov r11, qword [rsp + 176] + QUAD $0x000000b8249c8b4c // mov r11, qword [rsp + 184] QUAD $0x02141a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 20], 2 - QUAD $0x000000c824a48b4c // mov r12, qword [rsp + 200] + QUAD $0x000000f024a48b4c // mov r12, qword [rsp + 240] QUAD $0x031422442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 20], 3 QUAD $0x000000a024b48b48 // mov rsi, qword [rsp + 160] QUAD $0x041432442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 20], 4 @@ -32613,11 +33885,11 @@ LBB5_169: QUAD $0x051402442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 20], 5 QUAD $0x000000e824bc8b4c // mov r15, qword [rsp + 232] QUAD $0x06143a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 20], 6 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] QUAD $0x071432442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 20], 7 LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] QUAD $0x081432442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 20], 8 - LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] QUAD $0x091432442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 20], 9 LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] QUAD $0x0a1432442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 20], 10 @@ -32627,14 +33899,14 @@ LBB5_169: QUAD $0x0d1432442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 20], 13 LONG $0x24748b48; BYTE $0x50 // mov rsi, qword [rsp + 80] QUAD $0x0e1432442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 20], 14 - QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] + QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] QUAD $0x0f1432442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 20], 15 QUAD $0x0000010024bc8b48 // mov rdi, qword [rsp + 256] LONG $0x3a7cb60f; BYTE $0x14 // movzx edi, byte [rdx + rdi + 20] LONG $0xcf6ef9c5 // vmovd xmm1, edi QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] QUAD $0x01143a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 20], 1 - QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] + QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] QUAD $0x02143a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 20], 2 QUAD $0x00000088249c8b48 // mov rbx, qword [rsp + 136] QUAD $0x03141a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 20], 3 @@ -32642,7 +33914,7 @@ LBB5_169: QUAD $0x04143a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 20], 4 LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] QUAD $0x05143a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 20], 5 - QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] + QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] QUAD $0x06143a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 20], 6 QUAD $0x0000009024bc8b48 // mov rdi, qword [rsp + 144] QUAD $0x07143a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 20], 7 @@ -32650,7 +33922,7 @@ LBB5_169: QUAD $0x00000108248c8b48 // mov rcx, qword [rsp + 264] QUAD $0x09140a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 20], 9 QUAD $0x0a14124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 20], 10 - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] + LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] QUAD $0x0b140a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 20], 11 LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] QUAD $0x0c140a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 20], 12 @@ -32670,17 +33942,17 @@ LBB5_169: QUAD $0x041502542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 21], 4 QUAD $0x051502542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 21], 5 QUAD $0x06153a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 21], 6 - LONG $0x24448b4c; BYTE $0x60 // mov r8, qword [rsp + 96] + LONG $0x24448b4c; BYTE $0x68 // mov r8, qword [rsp + 104] QUAD $0x071502542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 21], 7 LONG $0x247c8b4c; BYTE $0x70 // mov r15, qword [rsp + 112] QUAD $0x08153a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 21], 8 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x091502542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 21], 9 LONG $0x24648b4c; BYTE $0x78 // mov r12, qword [rsp + 120] QUAD $0x0a1522542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 21], 10 LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] QUAD $0x0b1502542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 21], 11 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] QUAD $0x0c1502542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 21], 12 QUAD $0x0d1532542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 21], 13 LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] @@ -32691,42 +33963,42 @@ LBB5_169: LONG $0xdf6ef9c5 // vmovd xmm3, edi QUAD $0x000000e024b48b4c // mov r14, qword [rsp + 224] QUAD $0x0115325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 21], 1 - QUAD $0x000000d824948b4c // mov r10, qword [rsp + 216] + QUAD $0x000000c824948b4c // mov r10, qword [rsp + 200] QUAD $0x0215125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 21], 2 QUAD $0x03151a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 21], 3 QUAD $0x000000c0249c8b48 // mov rbx, qword [rsp + 192] QUAD $0x04151a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 21], 4 LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] QUAD $0x05150a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 21], 5 - QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] + QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] QUAD $0x0615325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 21], 6 QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] QUAD $0x0715325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 21], 7 - QUAD $0x000000b824b48b48 // mov rsi, qword [rsp + 184] + QUAD $0x000000d024b48b48 // mov rsi, qword [rsp + 208] QUAD $0x0815325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 21], 8 QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] QUAD $0x0915325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 21], 9 LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] QUAD $0x0a153a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 21], 10 - LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] + LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] QUAD $0x0b153a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 21], 11 LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] QUAD $0x0c153a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 21], 12 QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] QUAD $0x0d153a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 21], 13 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] QUAD $0x0e153a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 21], 14 LONG $0x3875e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm1, xmm0, 1 QUAD $0x0002e024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 736], ymm0 QUAD $0x0f150a442061a3c4 // vpinsrb xmm0, xmm3, byte [rdx + r9 + 21], 15 LONG $0x387de3c4; WORD $0x01c2 // vinserti128 ymm0, ymm0, xmm2, 1 QUAD $0x00030024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 768], ymm0 - QUAD $0x000000f024bc8b48 // mov rdi, qword [rsp + 240] + QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] LONG $0x3a7cb60f; BYTE $0x16 // movzx edi, byte [rdx + rdi + 22] LONG $0xc76ef9c5 // vmovd xmm0, edi QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] QUAD $0x01163a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 22], 1 - QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] + QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] QUAD $0x02163a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 22], 2 QUAD $0x03162a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 22], 3 QUAD $0x000000a0248c8b4c // mov r9, qword [rsp + 160] @@ -32737,17 +34009,17 @@ LBB5_169: QUAD $0x06163a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 22], 6 QUAD $0x071602442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 22], 7 QUAD $0x08163a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 22], 8 - LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] + LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] QUAD $0x09163a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 22], 9 QUAD $0x0a1622442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 22], 10 LONG $0x247c8b48; BYTE $0x58 // mov rdi, qword [rsp + 88] QUAD $0x0b163a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 22], 11 - LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] + LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] QUAD $0x0c163a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 22], 12 QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] QUAD $0x0d163a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 22], 13 QUAD $0x0e1602442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 22], 14 - QUAD $0x0000009824bc8b4c // mov r15, qword [rsp + 152] + QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] QUAD $0x0f163a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 22], 15 LONG $0x7cb60f42; WORD $0x161a // movzx edi, byte [rdx + r11 + 22] LONG $0xcf6ef9c5 // vmovd xmm1, edi @@ -32757,31 +34029,31 @@ LBB5_169: QUAD $0x0316024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 22], 3 QUAD $0x04161a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 22], 4 QUAD $0x05160a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 22], 5 - QUAD $0x000000d024a48b4c // mov r12, qword [rsp + 208] + QUAD $0x0000009824a48b4c // mov r12, qword [rsp + 152] QUAD $0x0616224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 22], 6 QUAD $0x00000090249c8b48 // mov rbx, qword [rsp + 144] QUAD $0x07161a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 22], 7 - QUAD $0x000000b824948b4c // mov r10, qword [rsp + 184] + QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] QUAD $0x0816124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 22], 8 QUAD $0x0916324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 22], 9 LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] QUAD $0x0a16024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 22], 10 - LONG $0x24448b4c; BYTE $0x28 // mov r8, qword [rsp + 40] + LONG $0x24448b4c; BYTE $0x38 // mov r8, qword [rsp + 56] QUAD $0x0b16024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 22], 11 LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0c16024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 22], 12 QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] QUAD $0x0d16024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 22], 13 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0e16024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 22], 14 QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0f16024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 22], 15 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] LONG $0x027cb60f; BYTE $0x17 // movzx edi, byte [rdx + rax + 23] LONG $0xd76ef9c5 // vmovd xmm2, edi QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x011702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 23], 1 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] QUAD $0x021702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 23], 2 WORD $0x894d; BYTE $0xee // mov r14, r13 QUAD $0x03172a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 23], 3 @@ -32790,17 +34062,17 @@ LBB5_169: QUAD $0x05172a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 23], 5 QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] QUAD $0x061732542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 23], 6 - LONG $0x244c8b4c; BYTE $0x60 // mov r9, qword [rsp + 96] + LONG $0x244c8b4c; BYTE $0x68 // mov r9, qword [rsp + 104] QUAD $0x07170a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 23], 7 LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] QUAD $0x081702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 23], 8 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x091702542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 23], 9 LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] QUAD $0x0a170a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 23], 10 LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] QUAD $0x0b170a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 23], 11 - LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] + LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] QUAD $0x0c170a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 23], 12 QUAD $0x000000a8249c8b4c // mov r11, qword [rsp + 168] QUAD $0x0d171a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 23], 13 @@ -32812,7 +34084,7 @@ LBB5_169: LONG $0xdf6ef9c5 // vmovd xmm3, edi QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] QUAD $0x01173a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 23], 1 - QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] + QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] QUAD $0x02173a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 23], 2 QUAD $0x0000008824bc8b48 // mov rdi, qword [rsp + 136] QUAD $0x03173a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 23], 3 @@ -32832,18 +34104,18 @@ LBB5_169: QUAD $0x0c173a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 23], 12 QUAD $0x0000014024bc8b48 // mov rdi, qword [rsp + 320] QUAD $0x0d173a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 23], 13 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] QUAD $0x0e173a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 23], 14 QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] QUAD $0x0f173a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 23], 15 LONG $0x387563c4; WORD $0x01d0 // vinserti128 ymm10, ymm1, xmm0, 1 LONG $0x386563c4; WORD $0x01da // vinserti128 ymm11, ymm3, xmm2, 1 - QUAD $0x000000f024bc8b48 // mov rdi, qword [rsp + 240] + QUAD $0x000000d824bc8b48 // mov rdi, qword [rsp + 216] LONG $0x3a7cb60f; BYTE $0x18 // movzx edi, byte [rdx + rdi + 24] LONG $0xc76ef9c5 // vmovd xmm0, edi QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] QUAD $0x01183a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rdi + 24], 1 - QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] + QUAD $0x000000b824bc8b4c // mov r15, qword [rsp + 184] QUAD $0x02183a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 24], 2 QUAD $0x031832442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r14 + 24], 3 QUAD $0x000000a024bc8b48 // mov rdi, qword [rsp + 160] @@ -32862,14 +34134,14 @@ LBB5_169: QUAD $0x0d181a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 24], 13 LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] QUAD $0x0e1802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 24], 14 - QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x0f1802442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 24], 15 QUAD $0x0000010024b48b4c // mov r14, qword [rsp + 256] LONG $0x7cb60f42; WORD $0x1832 // movzx edi, byte [rdx + r14 + 24] LONG $0xcf6ef9c5 // vmovd xmm1, edi QUAD $0x000000e0248c8b4c // mov r9, qword [rsp + 224] QUAD $0x01180a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 24], 1 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] + QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] QUAD $0x0218024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 24], 2 QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] QUAD $0x0318024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 24], 3 @@ -32877,7 +34149,7 @@ LBB5_169: QUAD $0x04181a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 24], 4 LONG $0x24448b4c; BYTE $0x48 // mov r8, qword [rsp + 72] QUAD $0x0518024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 24], 5 - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] QUAD $0x0618024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 24], 6 QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] QUAD $0x0718024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 24], 7 @@ -32886,23 +34158,23 @@ LBB5_169: QUAD $0x09181a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 24], 9 LONG $0x246c8b4c; BYTE $0x40 // mov r13, qword [rsp + 64] QUAD $0x0a182a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 24], 10 - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] + LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] QUAD $0x0b180a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 24], 11 LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] QUAD $0x0c18324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 24], 12 QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] QUAD $0x0d18024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 24], 13 - LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] + LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] QUAD $0x0e181a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 24], 14 QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0f18024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 24], 15 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] LONG $0x027cb60f; BYTE $0x19 // movzx edi, byte [rdx + rax + 25] LONG $0xd76ef9c5 // vmovd xmm2, edi QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x011902542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 25], 1 QUAD $0x02193a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 25], 2 - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] QUAD $0x031902542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 25], 3 QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] QUAD $0x041902542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rax + 25], 4 @@ -32910,37 +34182,37 @@ LBB5_169: QUAD $0x05193a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 25], 5 QUAD $0x000000e824bc8b48 // mov rdi, qword [rsp + 232] QUAD $0x06193a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 25], 6 - LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] + LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] QUAD $0x07193a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 25], 7 LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] QUAD $0x08193a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 25], 8 - LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] + LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] QUAD $0x09193a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 25], 9 LONG $0x247c8b48; BYTE $0x78 // mov rdi, qword [rsp + 120] QUAD $0x0a193a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 25], 10 QUAD $0x0b1922542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 25], 11 - LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] + LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] QUAD $0x0c193a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 25], 12 QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] QUAD $0x0d193a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 25], 13 LONG $0x247c8b48; BYTE $0x50 // mov rdi, qword [rsp + 80] QUAD $0x0e193a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 25], 14 - QUAD $0x0000009824bc8b4c // mov r15, qword [rsp + 152] + QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] QUAD $0x0f193a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 25], 15 LONG $0x7cb60f42; WORD $0x1932 // movzx edi, byte [rdx + r14 + 25] LONG $0xdf6ef9c5 // vmovd xmm3, edi QUAD $0x01190a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 25], 1 - QUAD $0x000000d8248c8b4c // mov r9, qword [rsp + 216] + QUAD $0x000000c8248c8b4c // mov r9, qword [rsp + 200] QUAD $0x02190a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 25], 2 QUAD $0x0000008824bc8b48 // mov rdi, qword [rsp + 136] QUAD $0x03193a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 25], 3 QUAD $0x04191a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 25], 4 QUAD $0x0519025c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r8 + 25], 5 - QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] + QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] QUAD $0x06193a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 25], 6 QUAD $0x0000009024bc8b48 // mov rdi, qword [rsp + 144] QUAD $0x07193a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 25], 7 - QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] + QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] QUAD $0x08193a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 25], 8 QUAD $0x0919125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 25], 9 QUAD $0x0a192a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 25], 10 @@ -32955,31 +34227,31 @@ LBB5_169: QUAD $0x0f190a442061e3c4 // vpinsrb xmm0, xmm3, byte [rdx + rcx + 25], 15 LONG $0x387de3c4; WORD $0x01c2 // vinserti128 ymm0, ymm0, xmm2, 1 QUAD $0x00024024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 576], ymm0 - QUAD $0x000000f0249c8b4c // mov r11, qword [rsp + 240] + QUAD $0x000000d8249c8b4c // mov r11, qword [rsp + 216] LONG $0x7cb60f42; WORD $0x1a1a // movzx edi, byte [rdx + r11 + 26] LONG $0xc76ef9c5 // vmovd xmm0, edi QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] QUAD $0x011a0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 26], 1 - QUAD $0x000000b024848b4c // mov r8, qword [rsp + 176] + QUAD $0x000000b824848b4c // mov r8, qword [rsp + 184] QUAD $0x021a02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 26], 2 - QUAD $0x000000c8248c8b48 // mov rcx, qword [rsp + 200] + QUAD $0x000000f0248c8b48 // mov rcx, qword [rsp + 240] QUAD $0x031a0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 26], 3 QUAD $0x041a02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 26], 4 QUAD $0x000000f824b48b48 // mov rsi, qword [rsp + 248] QUAD $0x051a32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 26], 5 QUAD $0x000000e824848b48 // mov rax, qword [rsp + 232] QUAD $0x061a02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 26], 6 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] QUAD $0x071a02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 26], 7 LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] QUAD $0x081a02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 26], 8 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x091a02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 26], 9 LONG $0x24648b4c; BYTE $0x78 // mov r12, qword [rsp + 120] QUAD $0x0a1a22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 26], 10 LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] QUAD $0x0b1a02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 26], 11 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] QUAD $0x0c1a02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 26], 12 QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] QUAD $0x0d1a02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 26], 13 @@ -32999,21 +34271,21 @@ LBB5_169: QUAD $0x041a3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 26], 4 LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] QUAD $0x051a3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 26], 5 - QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] + QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] QUAD $0x061a3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 26], 6 QUAD $0x00000090248c8b4c // mov r9, qword [rsp + 144] QUAD $0x071a0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 26], 7 - QUAD $0x000000b824bc8b4c // mov r15, qword [rsp + 184] + QUAD $0x000000d024bc8b4c // mov r15, qword [rsp + 208] QUAD $0x081a3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 26], 8 QUAD $0x091a124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 26], 9 LONG $0x245c8b48; BYTE $0x40 // mov rbx, qword [rsp + 64] QUAD $0x0a1a1a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rbx + 26], 10 - LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] + LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] QUAD $0x0b1a3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 26], 11 LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] QUAD $0x0c1a3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 26], 12 QUAD $0x0d1a2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 26], 13 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] QUAD $0x0e1a3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 26], 14 QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] QUAD $0x0f1a3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 26], 15 @@ -33023,32 +34295,32 @@ LBB5_169: QUAD $0x011b1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 27], 1 QUAD $0x021b02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 27], 2 QUAD $0x031b0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 27], 3 - QUAD $0x000000a024848b4c // mov r8, qword [rsp + 160] - QUAD $0x041b02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 27], 4 + QUAD $0x000000a0248c8b48 // mov rcx, qword [rsp + 160] + QUAD $0x041b0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 27], 4 QUAD $0x051b32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 27], 5 - QUAD $0x000000e824b48b48 // mov rsi, qword [rsp + 232] - QUAD $0x061b32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 27], 6 - LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] - QUAD $0x071b0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 27], 7 - LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] - QUAD $0x081b0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 27], 8 - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] - QUAD $0x091b0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 27], 9 + QUAD $0x000000e824ac8b4c // mov r13, qword [rsp + 232] + QUAD $0x061b2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 27], 6 + LONG $0x24448b4c; BYTE $0x68 // mov r8, qword [rsp + 104] + QUAD $0x071b02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 27], 7 + LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] + QUAD $0x081b32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 27], 8 + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + QUAD $0x091b32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 27], 9 QUAD $0x0a1b22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 27], 10 - LONG $0x246c8b4c; BYTE $0x58 // mov r13, qword [rsp + 88] - QUAD $0x0b1b2a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r13 + 27], 11 - LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] - QUAD $0x0c1b0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 27], 12 - QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] - QUAD $0x0d1b0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 27], 13 + LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] + QUAD $0x0b1b32542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rsi + 27], 11 + LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] + QUAD $0x0c1b3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 27], 12 + QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] + QUAD $0x0d1b3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 27], 13 QUAD $0x0e1b32542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r14 + 27], 14 - QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] - QUAD $0x0f1b0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 27], 15 - QUAD $0x00000100248c8b48 // mov rcx, qword [rsp + 256] - LONG $0x0a7cb60f; BYTE $0x1b // movzx edi, byte [rdx + rcx + 27] + QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] + QUAD $0x0f1b3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 27], 15 + QUAD $0x0000010024bc8b48 // mov rdi, qword [rsp + 256] + LONG $0x3a7cb60f; BYTE $0x1b // movzx edi, byte [rdx + rdi + 27] LONG $0xdf6ef9c5 // vmovd xmm3, edi - QUAD $0x000000e0248c8b48 // mov rcx, qword [rsp + 224] - QUAD $0x011b0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 27], 1 + QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] + QUAD $0x011b3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 27], 1 QUAD $0x021b025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 27], 2 QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] QUAD $0x031b025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 27], 3 @@ -33056,155 +34328,154 @@ LBB5_169: QUAD $0x041b325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 27], 4 LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] QUAD $0x051b025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 27], 5 - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] QUAD $0x061b025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 27], 6 QUAD $0x071b0a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r9 + 27], 7 QUAD $0x081b3a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r15 + 27], 8 QUAD $0x091b125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 27], 9 QUAD $0x0a1b1a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rbx + 27], 10 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] QUAD $0x0b1b025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 27], 11 LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0c1b025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 27], 12 - QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] - QUAD $0x0d1b0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 27], 13 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] - QUAD $0x0e1b025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 27], 14 - QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] - QUAD $0x0f1b025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 27], 15 + QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] + QUAD $0x0d1b025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 27], 13 + LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] + QUAD $0x0e1b3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 27], 14 + QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] + QUAD $0x0f1b3a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rdi + 27], 15 LONG $0x3875e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm1, xmm0, 1 QUAD $0x00026024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 608], ymm0 LONG $0x3865e3c4; WORD $0x01c2 // vinserti128 ymm0, ymm3, xmm2, 1 QUAD $0x00028024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 640], ymm0 - QUAD $0x000000f024948b4c // mov r10, qword [rsp + 240] - LONG $0x7cb60f42; WORD $0x1c12 // movzx edi, byte [rdx + r10 + 28] + QUAD $0x000000d8248c8b4c // mov r9, qword [rsp + 216] + LONG $0x7cb60f42; WORD $0x1c0a // movzx edi, byte [rdx + r9 + 28] LONG $0xc76ef9c5 // vmovd xmm0, edi QUAD $0x011c1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 28], 1 - QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] + QUAD $0x000000b824bc8b4c // mov r15, qword [rsp + 184] QUAD $0x021c3a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 28], 2 - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] - QUAD $0x031c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 28], 3 - QUAD $0x041c02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 28], 4 + QUAD $0x000000f0249c8b4c // mov r11, qword [rsp + 240] + QUAD $0x031c1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 28], 3 + QUAD $0x041c0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 28], 4 QUAD $0x000000f824a48b4c // mov r12, qword [rsp + 248] QUAD $0x051c22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 28], 5 - QUAD $0x061c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 28], 6 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] - QUAD $0x071c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 28], 7 - LONG $0x244c8b4c; BYTE $0x70 // mov r9, qword [rsp + 112] - QUAD $0x081c0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 28], 8 - LONG $0x24448b4c; BYTE $0x38 // mov r8, qword [rsp + 56] - QUAD $0x091c02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 28], 9 - LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] - QUAD $0x0a1c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 28], 10 - QUAD $0x0b1c2a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 28], 11 - LONG $0x245c8b4c; BYTE $0x68 // mov r11, qword [rsp + 104] - QUAD $0x0c1c1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 28], 12 - QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] - QUAD $0x0d1c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 28], 13 - LONG $0x245c8b48; BYTE $0x50 // mov rbx, qword [rsp + 80] - QUAD $0x0e1c1a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 28], 14 - QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] - QUAD $0x0f1c02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 28], 15 - QUAD $0x0000010024848b48 // mov rax, qword [rsp + 256] - LONG $0x027cb60f; BYTE $0x1c // movzx edi, byte [rdx + rax + 28] + QUAD $0x061c2a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r13 + 28], 6 + QUAD $0x071c02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 28], 7 + LONG $0x24448b4c; BYTE $0x70 // mov r8, qword [rsp + 112] + QUAD $0x081c02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 28], 8 + LONG $0x24548b4c; BYTE $0x30 // mov r10, qword [rsp + 48] + QUAD $0x091c12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 28], 9 + LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] + QUAD $0x0a1c0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 28], 10 + QUAD $0x0b1c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 28], 11 + LONG $0x245c8b48; BYTE $0x60 // mov rbx, qword [rsp + 96] + QUAD $0x0c1c1a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rbx + 28], 12 + QUAD $0x000000a8248c8b48 // mov rcx, qword [rsp + 168] + QUAD $0x0d1c0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 28], 13 + LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] + QUAD $0x0e1c0a442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rcx + 28], 14 + QUAD $0x000000b024b48b48 // mov rsi, qword [rsp + 176] + QUAD $0x0f1c32442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rsi + 28], 15 + QUAD $0x0000010024b48b48 // mov rsi, qword [rsp + 256] + LONG $0x327cb60f; BYTE $0x1c // movzx edi, byte [rdx + rsi + 28] LONG $0xcf6ef9c5 // vmovd xmm1, edi - QUAD $0x000000e024848b48 // mov rax, qword [rsp + 224] - QUAD $0x011c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 1 - QUAD $0x000000d824848b48 // mov rax, qword [rsp + 216] - QUAD $0x021c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 2 + QUAD $0x000000e024b48b48 // mov rsi, qword [rsp + 224] + QUAD $0x011c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 1 + QUAD $0x000000c824b48b48 // mov rsi, qword [rsp + 200] + QUAD $0x021c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 2 QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] QUAD $0x031c324c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rsi + 28], 3 QUAD $0x041c324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 28], 4 LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] QUAD $0x051c3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 28], 5 - QUAD $0x000000d024b48b4c // mov r14, qword [rsp + 208] + QUAD $0x0000009824b48b4c // mov r14, qword [rsp + 152] QUAD $0x061c324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 28], 6 QUAD $0x0000009024bc8b48 // mov rdi, qword [rsp + 144] QUAD $0x071c3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 28], 7 - QUAD $0x000000b824bc8b48 // mov rdi, qword [rsp + 184] + QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] QUAD $0x081c3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 28], 8 QUAD $0x0000010824bc8b48 // mov rdi, qword [rsp + 264] QUAD $0x091c3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 28], 9 LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] QUAD $0x0a1c3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 28], 10 - LONG $0x246c8b4c; BYTE $0x28 // mov r13, qword [rsp + 40] + LONG $0x246c8b4c; BYTE $0x38 // mov r13, qword [rsp + 56] QUAD $0x0b1c2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 28], 11 LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] QUAD $0x0c1c3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 28], 12 - QUAD $0x0d1c0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 28], 13 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] - QUAD $0x0e1c0a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rcx + 28], 14 + QUAD $0x0d1c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 13 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x0e1c024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 28], 14 QUAD $0x0000012024bc8b48 // mov rdi, qword [rsp + 288] QUAD $0x0f1c3a4c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rdi + 28], 15 - LONG $0x7cb60f42; WORD $0x1d12 // movzx edi, byte [rdx + r10 + 29] + LONG $0x7cb60f42; WORD $0x1d0a // movzx edi, byte [rdx + r9 + 29] LONG $0xd76ef9c5 // vmovd xmm2, edi - QUAD $0x0000008024948b4c // mov r10, qword [rsp + 128] - QUAD $0x011d12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 29], 1 + QUAD $0x00000080248c8b4c // mov r9, qword [rsp + 128] + QUAD $0x011d0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 29], 1 QUAD $0x021d3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 29], 2 - QUAD $0x000000c824bc8b48 // mov rdi, qword [rsp + 200] - QUAD $0x031d3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 29], 3 + QUAD $0x031d1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 29], 3 QUAD $0x000000a024bc8b48 // mov rdi, qword [rsp + 160] QUAD $0x041d3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 29], 4 QUAD $0x051d22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 29], 5 QUAD $0x000000e824bc8b4c // mov r15, qword [rsp + 232] QUAD $0x061d3a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r15 + 29], 6 - LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] + LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] QUAD $0x071d3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 29], 7 - QUAD $0x081d0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 29], 8 - QUAD $0x091d02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 29], 9 - LONG $0x24648b4c; BYTE $0x78 // mov r12, qword [rsp + 120] - QUAD $0x0a1d22542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r12 + 29], 10 - LONG $0x244c8b4c; BYTE $0x58 // mov r9, qword [rsp + 88] - QUAD $0x0b1d0a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r9 + 29], 11 - QUAD $0x0c1d1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 29], 12 + QUAD $0x081d02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 29], 8 + QUAD $0x091d12542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r10 + 29], 9 + LONG $0x245c8b4c; BYTE $0x78 // mov r11, qword [rsp + 120] + QUAD $0x0a1d1a542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r11 + 29], 10 + LONG $0x24448b4c; BYTE $0x58 // mov r8, qword [rsp + 88] + QUAD $0x0b1d02542069a3c4 // vpinsrb xmm2, xmm2, byte [rdx + r8 + 29], 11 + QUAD $0x0c1d1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 29], 12 QUAD $0x000000a824bc8b48 // mov rdi, qword [rsp + 168] QUAD $0x0d1d3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 29], 13 - QUAD $0x0e1d1a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rbx + 29], 14 - QUAD $0x0000009824bc8b48 // mov rdi, qword [rsp + 152] - QUAD $0x0f1d3a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rdi + 29], 15 - QUAD $0x0000010024848b4c // mov r8, qword [rsp + 256] - LONG $0x7cb60f42; WORD $0x1d02 // movzx edi, byte [rdx + r8 + 29] + QUAD $0x0e1d0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 29], 14 + QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] + QUAD $0x0f1d0a542069e3c4 // vpinsrb xmm2, xmm2, byte [rdx + rcx + 29], 15 + QUAD $0x00000100249c8b48 // mov rbx, qword [rsp + 256] + LONG $0x1a7cb60f; BYTE $0x1d // movzx edi, byte [rdx + rbx + 29] LONG $0xdf6ef9c5 // vmovd xmm3, edi - QUAD $0x000000e0249c8b4c // mov r11, qword [rsp + 224] - QUAD $0x011d1a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r11 + 29], 1 - QUAD $0x021d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 2 + QUAD $0x000000e024a48b4c // mov r12, qword [rsp + 224] + QUAD $0x011d225c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r12 + 29], 1 + QUAD $0x000000c824948b4c // mov r10, qword [rsp + 200] + QUAD $0x021d125c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r10 + 29], 2 QUAD $0x031d325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 29], 3 QUAD $0x000000c024b48b48 // mov rsi, qword [rsp + 192] QUAD $0x041d325c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rsi + 29], 4 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] - QUAD $0x051d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 5 + LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] + QUAD $0x051d0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 29], 5 QUAD $0x061d325c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r14 + 29], 6 - QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] - QUAD $0x071d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 7 - QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] - QUAD $0x081d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 8 - QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] - QUAD $0x091d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 9 - LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] - QUAD $0x0a1d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 10 + QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] + QUAD $0x071d0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 29], 7 + QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] + QUAD $0x081d0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 29], 8 + QUAD $0x00000108248c8b48 // mov rcx, qword [rsp + 264] + QUAD $0x091d0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 29], 9 + LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] + QUAD $0x0a1d0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 29], 10 QUAD $0x0b1d2a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 29], 11 LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] QUAD $0x0c1d2a5c2061a3c4 // vpinsrb xmm3, xmm3, byte [rdx + r13 + 29], 12 - QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] - QUAD $0x0d1d025c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rax + 29], 13 - QUAD $0x0e1d0a642061e3c4 // vpinsrb xmm4, xmm3, byte [rdx + rcx + 29], 14 + QUAD $0x00000140248c8b48 // mov rcx, qword [rsp + 320] + QUAD $0x0d1d0a5c2061e3c4 // vpinsrb xmm3, xmm3, byte [rdx + rcx + 29], 13 + QUAD $0x0e1d02642061e3c4 // vpinsrb xmm4, xmm3, byte [rdx + rax + 29], 14 LONG $0x3875e3c4; WORD $0x01c0 // vinserti128 ymm0, ymm1, xmm0, 1 QUAD $0x0002a024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 672], ymm0 QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] QUAD $0x0f1d02442059e3c4 // vpinsrb xmm0, xmm4, byte [rdx + rax + 29], 15 LONG $0x387de3c4; WORD $0x01c2 // vinserti128 ymm0, ymm0, xmm2, 1 QUAD $0x0002c024847ffdc5; BYTE $0x00 // vmovdqa yword [rsp + 704], ymm0 - QUAD $0x000000f0248c8b48 // mov rcx, qword [rsp + 240] + QUAD $0x000000d8248c8b48 // mov rcx, qword [rsp + 216] LONG $0x0a7cb60f; BYTE $0x1e // movzx edi, byte [rdx + rcx + 30] LONG $0xc76ef9c5 // vmovd xmm0, edi - QUAD $0x011e12442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r10 + 30], 1 + QUAD $0x011e0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 30], 1 LONG $0x0a7cb60f; BYTE $0x1f // movzx edi, byte [rdx + rcx + 31] LONG $0xcf6ef9c5 // vmovd xmm1, edi - QUAD $0x011f124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 31], 1 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x011f0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 31], 1 + QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] QUAD $0x021e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 2 QUAD $0x021f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 2 - QUAD $0x000000c824848b48 // mov rax, qword [rsp + 200] + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] QUAD $0x031e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 3 QUAD $0x031f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 3 QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] @@ -33215,21 +34486,21 @@ LBB5_169: QUAD $0x051f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 5 QUAD $0x061e3a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r15 + 30], 6 QUAD $0x061f3a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r15 + 31], 6 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] QUAD $0x071e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 7 QUAD $0x071f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 7 - QUAD $0x0000011024bc8b4c // mov r15, qword [rsp + 272] + QUAD $0x0000011024bc8b48 // mov rdi, qword [rsp + 272] LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] QUAD $0x081e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 8 QUAD $0x081f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 8 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x091e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 9 QUAD $0x091f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 9 - QUAD $0x0a1e22442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r12 + 30], 10 - QUAD $0x0a1f224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 31], 10 - QUAD $0x0b1e0a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r9 + 30], 11 - QUAD $0x0b1f0a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r9 + 31], 11 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + QUAD $0x0a1e1a442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r11 + 30], 10 + QUAD $0x0a1f1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 31], 10 + QUAD $0x0b1e02442079a3c4 // vpinsrb xmm0, xmm0, byte [rdx + r8 + 30], 11 + QUAD $0x0b1f024c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r8 + 31], 11 + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] QUAD $0x0c1e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 12 QUAD $0x0c1f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 12 QUAD $0x000000a824848b48 // mov rax, qword [rsp + 168] @@ -33238,17 +34509,15 @@ LBB5_169: LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] QUAD $0x0e1e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 14 QUAD $0x0e1f024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 31], 14 - QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] QUAD $0x0f1e02442079e3c4 // vpinsrb xmm0, xmm0, byte [rdx + rax + 30], 15 QUAD $0x0f1f02542071e3c4 // vpinsrb xmm2, xmm1, byte [rdx + rax + 31], 15 - WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - LONG $0x44b60f42; WORD $0x1e02 // movzx eax, byte [rdx + r8 + 30] + LONG $0x1a44b60f; BYTE $0x1e // movzx eax, byte [rdx + rbx + 30] LONG $0xc86ef9c5 // vmovd xmm1, eax - QUAD $0x011e1a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r11 + 30], 1 - LONG $0x44b60f42; WORD $0x1f02 // movzx eax, byte [rdx + r8 + 31] + QUAD $0x011e224c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r12 + 30], 1 + LONG $0x1a44b60f; BYTE $0x1f // movzx eax, byte [rdx + rbx + 31] LONG $0xf86ef9c5 // vmovd xmm7, eax - QUAD $0x011f1a7c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r11 + 31], 1 - QUAD $0x000000d824948b4c // mov r10, qword [rsp + 216] + QUAD $0x011f227c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r12 + 31], 1 QUAD $0x021e124c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r10 + 30], 2 QUAD $0x021f127c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r10 + 31], 2 QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] @@ -33259,12 +34528,13 @@ LBB5_169: LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] QUAD $0x051e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 5 QUAD $0x051f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 5 - QUAD $0x061e324c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r14 + 30], 6 - QUAD $0x061f327c2041a3c4 // vpinsrb xmm7, xmm7, byte [rdx + r14 + 31], 6 + QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] + QUAD $0x061e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 6 + QUAD $0x061f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 6 QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] QUAD $0x071e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 7 QUAD $0x071f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 7 - QUAD $0x000000b824848b48 // mov rax, qword [rsp + 184] + QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] QUAD $0x081e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 8 QUAD $0x081f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 8 QUAD $0x0000010824848b48 // mov rax, qword [rsp + 264] @@ -33273,7 +34543,7 @@ LBB5_169: LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] QUAD $0x0a1e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 10 QUAD $0x0a1f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 10 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] QUAD $0x0b1e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 11 QUAD $0x0b1f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 11 QUAD $0x0c1e2a4c2071a3c4 // vpinsrb xmm1, xmm1, byte [rdx + r13 + 30], 12 @@ -33281,7 +34551,7 @@ LBB5_169: QUAD $0x0000014024848b48 // mov rax, qword [rsp + 320] QUAD $0x0d1e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 13 QUAD $0x0d1f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 13 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0e1e024c2071e3c4 // vpinsrb xmm1, xmm1, byte [rdx + rax + 30], 14 QUAD $0x0e1f027c2041e3c4 // vpinsrb xmm7, xmm7, byte [rdx + rax + 31], 14 QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] @@ -33407,10 +34677,10 @@ LBB5_169: LONG $0x3865e3c4; WORD $0x01e0 // vinserti128 ymm4, ymm3, xmm0, 1 LONG $0x4665e3c4; WORD $0x31c0 // vperm2i128 ymm0, ymm3, ymm0, 49 QUAD $0x00000198248c8b48 // mov rcx, qword [rsp + 408] - LONG $0x7f7ec1c4; WORD $0x8f44; BYTE $0x60 // vmovdqu yword [r15 + 4*rcx + 96], ymm0 - LONG $0x7f7ec1c4; WORD $0x8f54; BYTE $0x40 // vmovdqu yword [r15 + 4*rcx + 64], ymm2 - LONG $0x7f7ec1c4; WORD $0x8f64; BYTE $0x20 // vmovdqu yword [r15 + 4*rcx + 32], ymm4 - LONG $0x7f7ec1c4; WORD $0x8f0c // vmovdqu yword [r15 + 4*rcx], ymm1 + LONG $0x447ffec5; WORD $0x608f // vmovdqu yword [rdi + 4*rcx + 96], ymm0 + LONG $0x547ffec5; WORD $0x408f // vmovdqu yword [rdi + 4*rcx + 64], ymm2 + LONG $0x647ffec5; WORD $0x208f // vmovdqu yword [rdi + 4*rcx + 32], ymm4 + LONG $0x0c7ffec5; BYTE $0x8f // vmovdqu yword [rdi + 4*rcx], ymm1 LONG $0x20c18348 // add rcx, 32 WORD $0x8948; BYTE $0xcb // mov rbx, rcx QUAD $0x00000178248c3b48 // cmp rcx, qword [rsp + 376] @@ -33421,8 +34691,8 @@ LBB5_169: QUAD $0x0000019024ac8b4c // mov r13, qword [rsp + 400] QUAD $0x0000018824948b48 // mov rdx, qword [rsp + 392] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] - JNE LBB5_114 - JMP LBB5_133 + JNE LBB5_117 + JMP LBB5_120 TEXT ·_comparison_greater_arr_arr_avx2(SB), $80-48 @@ -36157,11 +37427,11 @@ TEXT ·_comparison_greater_arr_scalar_avx2(SB), $1384-48 WORD $0xff83; BYTE $0x03 // cmp edi, 3 JLE LBB7_2 WORD $0xff83; BYTE $0x04 // cmp edi, 4 - JE LBB7_79 + JE LBB7_84 WORD $0xff83; BYTE $0x05 // cmp edi, 5 - JE LBB7_95 + JE LBB7_102 WORD $0xff83; BYTE $0x06 // cmp edi, 6 - JNE LBB7_192 + JNE LBB7_191 WORD $0x8b44; BYTE $0x2a // mov r13d, dword [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -36206,7 +37476,7 @@ LBB7_17: QUAD $0x0000008824bc894c // mov qword [rsp + 136], r15 QUAD $0x000000f0249c894c // mov qword [rsp + 240], r11 -LBB7_113: +LBB7_120: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d LONG $0x2454970f; BYTE $0x78 // seta byte [rsp + 120] LONG $0x046e3944 // cmp dword [rsi + 4], r13d @@ -36358,240 +37628,278 @@ LBB7_113: WORD $0x0841; BYTE $0xc8 // or r8b, cl LONG $0x027a8844 // mov byte [rdx + 2], r15b LONG $0x03428844 // mov byte [rdx + 3], r8b - LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 - LONG $0x04c28348 // add rdx, 4 - QUAD $0x000000f024948948 // mov qword [rsp + 240], rdx - QUAD $0x0000008824848348; BYTE $0xff // add qword [rsp + 136], -1 - JNE LBB7_113 - QUAD $0x000000f024b48b4c // mov r14, qword [rsp + 240] - QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] - LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JL LBB7_116 - JMP LBB7_192 - -LBB7_19: - WORD $0xff83; BYTE $0x08 // cmp edi, 8 - JLE LBB7_20 - WORD $0xff83; BYTE $0x09 // cmp edi, 9 - JE LBB7_148 - WORD $0xff83; BYTE $0x0b // cmp edi, 11 - JE LBB7_164 - WORD $0xff83; BYTE $0x0c // cmp edi, 12 - JNE LBB7_192 - LONG $0x1f7a8d4d // lea r15, [r10 + 31] - WORD $0x854d; BYTE $0xd2 // test r10, r10 - LONG $0xfa490f4d // cmovns r15, r10 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - LONG $0x0210fbc5 // vmovsd xmm0, qword [rdx] - WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB7_35 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d - -LBB7_33: - LONG $0x062ef9c5 // vucomisd xmm0, qword [rsi] - LONG $0x08768d48 // lea rsi, [rsi + 8] - WORD $0xd219 // sbb edx, edx - LONG $0x07788d48 // lea rdi, [rax + 7] - WORD $0x8548; BYTE $0xc0 // test rax, rax - LONG $0xf8490f48 // cmovns rdi, rax - LONG $0x03ffc148 // sar rdi, 3 - LONG $0x0cb60f45; BYTE $0x3b // movzx r9d, byte [r11 + rdi] - WORD $0x3044; BYTE $0xca // xor dl, r9b - QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] - WORD $0xc189 // mov ecx, eax - WORD $0x2944; BYTE $0xc1 // sub ecx, r8d - LONG $0x000001bb; BYTE $0x00 // mov ebx, 1 - WORD $0xe3d3 // shl ebx, cl - WORD $0xd320 // and bl, dl - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3b1c8841 // mov byte [r11 + rdi], bl - LONG $0x01c08348 // add rax, 1 - LONG $0x08f88348 // cmp rax, 8 - JNE LBB7_33 - LONG $0x01c38349 // add r11, 1 - -LBB7_35: - LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fa8349 // cmp r10, 32 - JL LBB7_36 - QUAD $0x000000f82494894c // mov qword [rsp + 248], r10 - QUAD $0x0000008824bc894c // mov qword [rsp + 136], r15 - LONG $0x247c894c; BYTE $0x78 // mov qword [rsp + 120], r15 - QUAD $0x000000f0249c894c // mov qword [rsp + 240], r11 - -LBB7_181: - LONG $0x062ef9c5 // vucomisd xmm0, qword [rsi] - QUAD $0x000000802494920f // setb byte [rsp + 128] - LONG $0x462ef9c5; BYTE $0x08 // vucomisd xmm0, qword [rsi + 8] - LONG $0xd1920f41 // setb r9b - LONG $0x462ef9c5; BYTE $0x10 // vucomisd xmm0, qword [rsi + 16] - LONG $0xd6920f41 // setb r14b - LONG $0x462ef9c5; BYTE $0x18 // vucomisd xmm0, qword [rsi + 24] - LONG $0xd5920f41 // setb r13b - LONG $0x462ef9c5; BYTE $0x20 // vucomisd xmm0, qword [rsi + 32] - LONG $0x2454920f; BYTE $0x58 // setb byte [rsp + 88] - LONG $0x462ef9c5; BYTE $0x28 // vucomisd xmm0, qword [rsi + 40] - LONG $0x2454920f; BYTE $0x30 // setb byte [rsp + 48] - LONG $0x462ef9c5; BYTE $0x30 // vucomisd xmm0, qword [rsi + 48] - WORD $0x920f; BYTE $0xd0 // setb al - LONG $0x462ef9c5; BYTE $0x38 // vucomisd xmm0, qword [rsi + 56] - WORD $0x920f; BYTE $0xd3 // setb bl - LONG $0x462ef9c5; BYTE $0x40 // vucomisd xmm0, qword [rsi + 64] - LONG $0x2454920f; BYTE $0x70 // setb byte [rsp + 112] - LONG $0x462ef9c5; BYTE $0x48 // vucomisd xmm0, qword [rsi + 72] - WORD $0x920f; BYTE $0xd2 // setb dl - LONG $0x462ef9c5; BYTE $0x50 // vucomisd xmm0, qword [rsi + 80] - LONG $0xd7920f40 // setb dil - LONG $0x462ef9c5; BYTE $0x58 // vucomisd xmm0, qword [rsi + 88] - LONG $0xd2920f41 // setb r10b - LONG $0x462ef9c5; BYTE $0x60 // vucomisd xmm0, qword [rsi + 96] - LONG $0xd3920f41 // setb r11b - LONG $0x462ef9c5; BYTE $0x68 // vucomisd xmm0, qword [rsi + 104] - LONG $0xd4920f41 // setb r12b - LONG $0x462ef9c5; BYTE $0x70 // vucomisd xmm0, qword [rsi + 112] - LONG $0x2454920f; BYTE $0x48 // setb byte [rsp + 72] - LONG $0x462ef9c5; BYTE $0x78 // vucomisd xmm0, qword [rsi + 120] - WORD $0x920f; BYTE $0xd1 // setb cl - QUAD $0x00000080862ef9c5 // vucomisd xmm0, qword [rsi + 128] - LONG $0x2454920f; BYTE $0x40 // setb byte [rsp + 64] - QUAD $0x00000088862ef9c5 // vucomisd xmm0, qword [rsi + 136] - LONG $0x2454920f; BYTE $0x68 // setb byte [rsp + 104] - QUAD $0x00000090862ef9c5 // vucomisd xmm0, qword [rsi + 144] - LONG $0x2454920f; BYTE $0x50 // setb byte [rsp + 80] - QUAD $0x00000098862ef9c5 // vucomisd xmm0, qword [rsi + 152] - LONG $0x2454920f; BYTE $0x60 // setb byte [rsp + 96] - QUAD $0x000000a0862ef9c5 // vucomisd xmm0, qword [rsi + 160] - LONG $0x2454920f; BYTE $0x28 // setb byte [rsp + 40] - QUAD $0x000000a8862ef9c5 // vucomisd xmm0, qword [rsi + 168] - LONG $0x2454920f; BYTE $0x38 // setb byte [rsp + 56] - QUAD $0x000000b0862ef9c5 // vucomisd xmm0, qword [rsi + 176] - LONG $0x2454920f; BYTE $0x18 // setb byte [rsp + 24] - QUAD $0x000000b8862ef9c5 // vucomisd xmm0, qword [rsi + 184] - LONG $0xd7920f41 // setb r15b - QUAD $0x000000c0862ef9c5 // vucomisd xmm0, qword [rsi + 192] - QUAD $0x000001402494920f // setb byte [rsp + 320] - QUAD $0x000000c8862ef9c5 // vucomisd xmm0, qword [rsi + 200] - LONG $0x2454920f; BYTE $0x20 // setb byte [rsp + 32] - QUAD $0x000000d0862ef9c5 // vucomisd xmm0, qword [rsi + 208] - LONG $0x2454920f; BYTE $0x10 // setb byte [rsp + 16] - QUAD $0x000000d8862ef9c5 // vucomisd xmm0, qword [rsi + 216] - LONG $0x2454920f; BYTE $0x08 // setb byte [rsp + 8] - QUAD $0x000000e0862ef9c5 // vucomisd xmm0, qword [rsi + 224] - QUAD $0x000001202494920f // setb byte [rsp + 288] - QUAD $0x000000e8862ef9c5 // vucomisd xmm0, qword [rsi + 232] - QUAD $0x000001002494920f // setb byte [rsp + 256] - QUAD $0x000000f0862ef9c5 // vucomisd xmm0, qword [rsi + 240] - LONG $0x2454920f; BYTE $0x04 // setb byte [rsp + 4] - QUAD $0x000000f8862ef9c5 // vucomisd xmm0, qword [rsi + 248] - LONG $0xd0920f41 // setb r8b - WORD $0x0045; BYTE $0xc9 // add r9b, r9b - QUAD $0x00000080248c0244 // add r9b, byte [rsp + 128] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0845; BYTE $0xce // or r14b, r9b - WORD $0xd200 // add dl, dl - LONG $0x70245402 // add dl, byte [rsp + 112] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xf5 // or r13b, r14b - LONG $0x02e7c040 // shl dil, 2 - WORD $0x0840; BYTE $0xd7 // or dil, dl - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0844; BYTE $0xea // or dl, r13b - WORD $0x8941; BYTE $0xd1 // mov r9d, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x2454b60f; BYTE $0x30 // movzx edx, byte [rsp + 48] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0844; BYTE $0xca // or dl, r9b - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b - LONG $0x247cb60f; BYTE $0x48 // movzx edi, byte [rsp + 72] - LONG $0x06e7c040 // shl dil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] - WORD $0xc000 // add al, al - LONG $0x40244402 // add al, byte [rsp + 64] - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x28 // movzx edx, byte [rsp + 40] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x38 // movzx edx, byte [rsp + 56] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000f024948b48 // mov rdx, qword [rsp + 240] - WORD $0x1a88 // mov byte [rdx], bl - LONG $0x245cb60f; BYTE $0x18 // movzx ebx, byte [rsp + 24] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl - WORD $0x0841; BYTE $0xff // or r15b, dil - LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] - WORD $0xc900 // add cl, cl - LONG $0x40248c02; WORD $0x0001; BYTE $0x00 // add cl, byte [rsp + 320] - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x08 // movzx ecx, byte [rsp + 8] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000100248cb60f // movzx ecx, byte [rsp + 256] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd908 // or cl, bl - LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b - LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 + LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 LONG $0x04c28348 // add rdx, 4 QUAD $0x000000f024948948 // mov qword [rsp + 240], rdx - LONG $0x24448348; WORD $0xff78 // add qword [rsp + 120], -1 - JNE LBB7_181 + QUAD $0x0000008824848348; BYTE $0xff // add qword [rsp + 136], -1 + JNE LBB7_120 QUAD $0x000000f024b48b4c // mov r14, qword [rsp + 240] QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] - QUAD $0x0000008824bc8b4c // mov r15, qword [rsp + 136] + QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JL LBB7_184 - JMP LBB7_192 + JL LBB7_123 + JMP LBB7_191 + +LBB7_19: + WORD $0xff83; BYTE $0x08 // cmp edi, 8 + JLE LBB7_20 + WORD $0xff83; BYTE $0x09 // cmp edi, 9 + JE LBB7_155 + WORD $0xff83; BYTE $0x0b // cmp edi, 11 + JE LBB7_171 + WORD $0xff83; BYTE $0x0c // cmp edi, 12 + JNE LBB7_191 + LONG $0x1f728d4d // lea r14, [r10 + 31] + WORD $0x854d; BYTE $0xd2 // test r10, r10 + LONG $0xf2490f4d // cmovns r14, r10 + LONG $0x07418d41 // lea eax, [r9 + 7] + WORD $0x8545; BYTE $0xc9 // test r9d, r9d + LONG $0xc1490f41 // cmovns eax, r9d + WORD $0xe083; BYTE $0xf8 // and eax, -8 + LONG $0x0210fbc5 // vmovsd xmm0, qword [rdx] + WORD $0x2941; BYTE $0xc1 // sub r9d, eax + JE LBB7_35 + WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + +LBB7_33: + LONG $0x0e10fbc5 // vmovsd xmm1, qword [rsi] + LONG $0x08c68348 // add rsi, 8 + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + WORD $0x970f; BYTE $0xd2 // seta dl + WORD $0xdaf6 // neg dl + LONG $0x07788d48 // lea rdi, [rax + 7] + WORD $0x8548; BYTE $0xc0 // test rax, rax + LONG $0xf8490f48 // cmovns rdi, rax + LONG $0x03ffc148 // sar rdi, 3 + LONG $0x0cb60f45; BYTE $0x3b // movzx r9d, byte [r11 + rdi] + WORD $0x3044; BYTE $0xca // xor dl, r9b + QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] + WORD $0xc189 // mov ecx, eax + WORD $0x2944; BYTE $0xc1 // sub ecx, r8d + LONG $0x000001bb; BYTE $0x00 // mov ebx, 1 + WORD $0xe3d3 // shl ebx, cl + WORD $0xd320 // and bl, dl + WORD $0x3044; BYTE $0xcb // xor bl, r9b + LONG $0x3b1c8841 // mov byte [r11 + rdi], bl + LONG $0x01c08348 // add rax, 1 + LONG $0x08f88348 // cmp rax, 8 + JNE LBB7_33 + LONG $0x01c38349 // add r11, 1 + +LBB7_35: + LONG $0x05fec149 // sar r14, 5 + LONG $0x20fa8349 // cmp r10, 32 + JL LBB7_39 + QUAD $0x000000f82494894c // mov qword [rsp + 248], r10 + QUAD $0x0000008824b4894c // mov qword [rsp + 136], r14 + LONG $0x2474894c; BYTE $0x78 // mov qword [rsp + 120], r14 + QUAD $0x000000f0249c894c // mov qword [rsp + 240], r11 + +LBB7_37: + LONG $0x0e10fbc5 // vmovsd xmm1, qword [rsi] + LONG $0x5610fbc5; BYTE $0x08 // vmovsd xmm2, qword [rsi + 8] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + QUAD $0x000001202494970f // seta byte [rsp + 288] + LONG $0xd02ef9c5 // vucomisd xmm2, xmm0 + WORD $0x970f; BYTE $0xd3 // seta bl + LONG $0x4e10fbc5; BYTE $0x10 // vmovsd xmm1, qword [rsi + 16] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0x4e10fbc5; BYTE $0x18 // vmovsd xmm1, qword [rsi + 24] + LONG $0xd5970f41 // seta r13b + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0xd4970f41 // seta r12b + LONG $0x4e10fbc5; BYTE $0x20 // vmovsd xmm1, qword [rsi + 32] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0x4e10fbc5; BYTE $0x28 // vmovsd xmm1, qword [rsi + 40] + LONG $0x2454970f; BYTE $0x28 // seta byte [rsp + 40] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0x2454970f; BYTE $0x38 // seta byte [rsp + 56] + LONG $0x4e10fbc5; BYTE $0x30 // vmovsd xmm1, qword [rsi + 48] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0x4e10fbc5; BYTE $0x38 // vmovsd xmm1, qword [rsi + 56] + LONG $0x2454970f; BYTE $0x30 // seta byte [rsp + 48] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0x2454970f; BYTE $0x18 // seta byte [rsp + 24] + LONG $0x4e10fbc5; BYTE $0x40 // vmovsd xmm1, qword [rsi + 64] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0x4e10fbc5; BYTE $0x48 // vmovsd xmm1, qword [rsi + 72] + QUAD $0x000001002494970f // seta byte [rsp + 256] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + WORD $0x970f; BYTE $0xd0 // seta al + LONG $0x4e10fbc5; BYTE $0x50 // vmovsd xmm1, qword [rsi + 80] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0x4e10fbc5; BYTE $0x58 // vmovsd xmm1, qword [rsi + 88] + LONG $0x2454970f; BYTE $0x10 // seta byte [rsp + 16] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + QUAD $0x000001402494970f // seta byte [rsp + 320] + LONG $0x4e10fbc5; BYTE $0x60 // vmovsd xmm1, qword [rsi + 96] + LONG $0x5e10fbc5; BYTE $0x68 // vmovsd xmm3, qword [rsi + 104] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0x6e10fbc5; BYTE $0x70 // vmovsd xmm5, qword [rsi + 112] + LONG $0x7610fbc5; BYTE $0x78 // vmovsd xmm6, qword [rsi + 120] + LONG $0x2454970f; BYTE $0x60 // seta byte [rsp + 96] + QUAD $0x0000008086107bc5 // vmovsd xmm8, qword [rsi + 128] + QUAD $0x000000888e107bc5 // vmovsd xmm9, qword [rsi + 136] + LONG $0xd82ef9c5 // vucomisd xmm3, xmm0 + QUAD $0x0000009096107bc5 // vmovsd xmm10, qword [rsi + 144] + QUAD $0x000000989e107bc5 // vmovsd xmm11, qword [rsi + 152] + LONG $0x2454970f; BYTE $0x48 // seta byte [rsp + 72] + QUAD $0x000000a0a6107bc5 // vmovsd xmm12, qword [rsi + 160] + QUAD $0x000000a8ae107bc5 // vmovsd xmm13, qword [rsi + 168] + LONG $0xe82ef9c5 // vucomisd xmm5, xmm0 + QUAD $0x000000b0b6107bc5 // vmovsd xmm14, qword [rsi + 176] + QUAD $0x000000b89610fbc5 // vmovsd xmm2, qword [rsi + 184] + LONG $0x2454970f; BYTE $0x68 // seta byte [rsp + 104] + QUAD $0x000000c09e10fbc5 // vmovsd xmm3, qword [rsi + 192] + QUAD $0x000000c8a610fbc5 // vmovsd xmm4, qword [rsi + 200] + LONG $0xf02ef9c5 // vucomisd xmm6, xmm0 + QUAD $0x000000d0b610fbc5 // vmovsd xmm6, qword [rsi + 208] + QUAD $0x000000d8be10fbc5 // vmovsd xmm7, qword [rsi + 216] + LONG $0xd3970f41 // seta r11b + QUAD $0x000000e08e10fbc5 // vmovsd xmm1, qword [rsi + 224] + QUAD $0x000000e8ae10fbc5 // vmovsd xmm5, qword [rsi + 232] + LONG $0xc02e79c5 // vucomisd xmm8, xmm0 + QUAD $0x000000802494970f // seta byte [rsp + 128] + LONG $0xc82e79c5 // vucomisd xmm9, xmm0 + WORD $0x970f; BYTE $0xd1 // seta cl + LONG $0xd02e79c5 // vucomisd xmm10, xmm0 + LONG $0xd7970f40 // seta dil + LONG $0xd82e79c5 // vucomisd xmm11, xmm0 + LONG $0xd0970f41 // seta r8b + LONG $0xe02e79c5 // vucomisd xmm12, xmm0 + LONG $0xd2970f41 // seta r10b + LONG $0xe82e79c5 // vucomisd xmm13, xmm0 + LONG $0xd6970f41 // seta r14b + LONG $0xf02e79c5 // vucomisd xmm14, xmm0 + LONG $0x2454970f; BYTE $0x70 // seta byte [rsp + 112] + LONG $0xd02ef9c5 // vucomisd xmm2, xmm0 + LONG $0xd1970f41 // seta r9b + LONG $0xd82ef9c5 // vucomisd xmm3, xmm0 + LONG $0x2454970f; BYTE $0x58 // seta byte [rsp + 88] + LONG $0xe02ef9c5 // vucomisd xmm4, xmm0 + LONG $0xd7970f41 // seta r15b + LONG $0xf02ef9c5 // vucomisd xmm6, xmm0 + LONG $0x2454970f; BYTE $0x50 // seta byte [rsp + 80] + LONG $0xf82ef9c5 // vucomisd xmm7, xmm0 + LONG $0x2454970f; BYTE $0x40 // seta byte [rsp + 64] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0x2454970f; BYTE $0x20 // seta byte [rsp + 32] + LONG $0xe82ef9c5 // vucomisd xmm5, xmm0 + QUAD $0x000000f08e10fbc5 // vmovsd xmm1, qword [rsi + 240] + LONG $0x2454970f; BYTE $0x08 // seta byte [rsp + 8] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0x2454970f; BYTE $0x04 // seta byte [rsp + 4] + QUAD $0x000000f88e10fbc5 // vmovsd xmm1, qword [rsi + 248] + LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + WORD $0x970f; BYTE $0xd2 // seta dl + WORD $0xdb00 // add bl, bl + LONG $0x20249c02; WORD $0x0001; BYTE $0x00 // add bl, byte [rsp + 288] + LONG $0x02e5c041 // shl r13b, 2 + WORD $0x0841; BYTE $0xdd // or r13b, bl + LONG $0x03e4c041 // shl r12b, 3 + WORD $0x0845; BYTE $0xec // or r12b, r13b + LONG $0x245cb60f; BYTE $0x28 // movzx ebx, byte [rsp + 40] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xe3 // or bl, r12b + WORD $0x8941; BYTE $0xdc // mov r12d, ebx + LONG $0x245cb60f; BYTE $0x38 // movzx ebx, byte [rsp + 56] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xe3 // or bl, r12b + LONG $0x64b60f44; WORD $0x3024 // movzx r12d, byte [rsp + 48] + LONG $0x06e4c041 // shl r12b, 6 + LONG $0x6cb60f44; WORD $0x1824 // movzx r13d, byte [rsp + 24] + LONG $0x07e5c041 // shl r13b, 7 + WORD $0x0845; BYTE $0xe5 // or r13b, r12b + WORD $0xc000 // add al, al + LONG $0x00248402; WORD $0x0001; BYTE $0x00 // add al, byte [rsp + 256] + LONG $0x64b60f44; WORD $0x1024 // movzx r12d, byte [rsp + 16] + LONG $0x02e4c041 // shl r12b, 2 + WORD $0x0841; BYTE $0xc4 // or r12b, al + WORD $0x8944; BYTE $0xe0 // mov eax, r12d + QUAD $0x00014024a4b60f44; BYTE $0x00 // movzx r12d, byte [rsp + 320] + LONG $0x03e4c041 // shl r12b, 3 + WORD $0x0841; BYTE $0xc4 // or r12b, al + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xe0 // or al, r12b + WORD $0x0841; BYTE $0xdd // or r13b, bl + LONG $0x245cb60f; BYTE $0x48 // movzx ebx, byte [rsp + 72] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0xc308 // or bl, al + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + LONG $0x07e3c041 // shl r11b, 7 + WORD $0x0841; BYTE $0xc3 // or r11b, al + WORD $0xc900 // add cl, cl + LONG $0x80248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 128] + LONG $0x02e7c040 // shl dil, 2 + WORD $0x0840; BYTE $0xcf // or dil, cl + LONG $0x03e0c041 // shl r8b, 3 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + LONG $0x04e2c041 // shl r10b, 4 + WORD $0x0845; BYTE $0xc2 // or r10b, r8b + LONG $0x05e6c041 // shl r14b, 5 + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0841; BYTE $0xdb // or r11b, bl + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + LONG $0x07e1c041 // shl r9b, 7 + WORD $0x0841; BYTE $0xc1 // or r9b, al + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + WORD $0x8844; BYTE $0x28 // mov byte [rax], r13b + WORD $0x0845; BYTE $0xf1 // or r9b, r14b + WORD $0x0045; BYTE $0xff // add r15b, r15b + LONG $0x247c0244; BYTE $0x58 // add r15b, byte [rsp + 88] + LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0x0844; BYTE $0xf9 // or cl, r15b + WORD $0xcb89 // mov ebx, ecx + LONG $0x244cb60f; BYTE $0x40 // movzx ecx, byte [rsp + 64] + WORD $0xe1c0; BYTE $0x03 // shl cl, 3 + WORD $0xd908 // or cl, bl + WORD $0xcb89 // mov ebx, ecx + LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0xd908 // or cl, bl + WORD $0xcb89 // mov ebx, ecx + LONG $0x244cb60f; BYTE $0x08 // movzx ecx, byte [rsp + 8] + WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + WORD $0xd908 // or cl, bl + LONG $0x01588844 // mov byte [rax + 1], r11b + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xda08 // or dl, bl + LONG $0x02488844 // mov byte [rax + 2], r9b + WORD $0xca08 // or dl, cl + WORD $0x5088; BYTE $0x03 // mov byte [rax + 3], dl + LONG $0x04c08348 // add rax, 4 + QUAD $0x000000f024848948 // mov qword [rsp + 240], rax + LONG $0x24448348; WORD $0xff78 // add qword [rsp + 120], -1 + JNE LBB7_37 + QUAD $0x000000f0249c8b4c // mov r11, qword [rsp + 240] + QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] + QUAD $0x0000008824b48b4c // mov r14, qword [rsp + 136] + +LBB7_39: + LONG $0x05e6c149 // shl r14, 5 + WORD $0x394d; BYTE $0xd6 // cmp r14, r10 + JGE LBB7_191 + WORD $0x894d; BYTE $0xd0 // mov r8, r10 + WORD $0x294d; BYTE $0xf0 // sub r8, r14 + WORD $0xf749; BYTE $0xd6 // not r14 + WORD $0x014d; BYTE $0xd6 // add r14, r10 + JNE LBB7_186 + WORD $0x3145; BYTE $0xd2 // xor r10d, r10d + JMP LBB7_188 LBB7_2: WORD $0xff83; BYTE $0x02 // cmp edi, 2 - JE LBB7_37 + JE LBB7_42 WORD $0xff83; BYTE $0x03 // cmp edi, 3 - JNE LBB7_192 + JNE LBB7_191 WORD $0x8a44; BYTE $0x32 // mov r14b, byte [rdx] LONG $0x1f6a8d4d // lea r13, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -36637,27 +37945,27 @@ LBB7_8: LONG $0x24748944; BYTE $0x04 // mov dword [rsp + 4], r14d QUAD $0x000000f824bc894c // mov qword [rsp + 248], r15 QUAD $0x0000016824ac894c // mov qword [rsp + 360], r13 - JB LBB7_62 + JB LBB7_67 WORD $0x894c; BYTE $0xe8 // mov rax, r13 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi WORD $0x3949; BYTE $0xc3 // cmp r11, rax - JAE LBB7_65 + JAE LBB7_70 LONG $0xab048d4b // lea rax, [r11 + 4*r13] WORD $0x3948; BYTE $0xc6 // cmp rsi, rax - JAE LBB7_65 + JAE LBB7_70 -LBB7_62: +LBB7_67: WORD $0xc031 // xor eax, eax QUAD $0x0000018024848948 // mov qword [rsp + 384], rax WORD $0x8949; BYTE $0xf4 // mov r12, rsi QUAD $0x00000160249c894c // mov qword [rsp + 352], r11 -LBB7_68: +LBB7_73: QUAD $0x0000018024ac2b4c // sub r13, qword [rsp + 384] LONG $0x246c894c; BYTE $0x78 // mov qword [rsp + 120], r13 -LBB7_69: +LBB7_74: WORD $0x894c; BYTE $0xe1 // mov rcx, r12 LONG $0x24343845 // cmp byte [r12], r14b QUAD $0x0000014024949f0f // setg byte [rsp + 320] @@ -36820,16 +38128,16 @@ LBB7_69: LONG $0x04c68348 // add rsi, 4 QUAD $0x0000016024b48948 // mov qword [rsp + 352], rsi LONG $0x24448348; WORD $0xff78 // add qword [rsp + 120], -1 - JNE LBB7_69 + JNE LBB7_74 QUAD $0x000000f824bc8b4c // mov r15, qword [rsp + 248] QUAD $0x0000016824ac8b4c // mov r13, qword [rsp + 360] - JMP LBB7_71 + JMP LBB7_76 LBB7_20: WORD $0xff83; BYTE $0x07 // cmp edi, 7 - JE LBB7_122 + JE LBB7_129 WORD $0xff83; BYTE $0x08 // cmp edi, 8 - JNE LBB7_192 + JNE LBB7_191 WORD $0x8b4c; BYTE $0x2a // mov r13, qword [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -36873,7 +38181,7 @@ LBB7_26: QUAD $0x0000009024bc894c // mov qword [rsp + 144], r15 QUAD $0x0000008824bc894c // mov qword [rsp + 136], r15 -LBB7_139: +LBB7_146: QUAD $0x000000f0249c894c // mov qword [rsp + 240], r11 WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 LONG $0x2454970f; BYTE $0x78 // seta byte [rsp + 120] @@ -37028,16 +38336,16 @@ LBB7_139: LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 LONG $0x04c38349 // add r11, 4 QUAD $0x0000008824848348; BYTE $0xff // add qword [rsp + 136], -1 - JNE LBB7_139 + JNE LBB7_146 WORD $0x894d; BYTE $0xde // mov r14, r11 QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JL LBB7_142 - JMP LBB7_192 + JL LBB7_149 + JMP LBB7_191 -LBB7_79: +LBB7_84: LONG $0x2ab70f44 // movzx r13d, word [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -37047,10 +38355,10 @@ LBB7_79: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB7_83 + JE LBB7_88 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB7_81: +LBB7_86: LONG $0x2e3b4466 // cmp r13w, word [rsi] LONG $0x02768d48 // lea rsi, [rsi + 2] WORD $0xd219 // sbb edx, edx @@ -37070,19 +38378,19 @@ LBB7_81: LONG $0x1b3c8841 // mov byte [r11 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB7_81 + JNE LBB7_86 LONG $0x01c38349 // add r11, 1 -LBB7_83: +LBB7_88: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB7_84 + JL LBB7_89 QUAD $0x000000f82494894c // mov qword [rsp + 248], r10 QUAD $0x0000009024bc894c // mov qword [rsp + 144], r15 QUAD $0x0000008824bc894c // mov qword [rsp + 136], r15 QUAD $0x000000f0249c894c // mov qword [rsp + 240], r11 -LBB7_86: +LBB7_91: LONG $0x2e394466 // cmp word [rsi], r13w WORD $0x970f; BYTE $0xd0 // seta al LONG $0x6e394466; BYTE $0x02 // cmp word [rsi + 2], r13w @@ -37239,16 +38547,16 @@ LBB7_86: LONG $0x04c28348 // add rdx, 4 QUAD $0x000000f024948948 // mov qword [rsp + 240], rdx QUAD $0x0000008824848348; BYTE $0xff // add qword [rsp + 136], -1 - JNE LBB7_86 + JNE LBB7_91 QUAD $0x000000f024b48b4c // mov r14, qword [rsp + 240] QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JL LBB7_89 - JMP LBB7_192 + JL LBB7_94 + JMP LBB7_191 -LBB7_95: +LBB7_102: LONG $0x2ab70f44 // movzx r13d, word [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -37258,10 +38566,10 @@ LBB7_95: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB7_99 + JE LBB7_106 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB7_97: +LBB7_104: LONG $0x2e394466 // cmp word [rsi], r13w LONG $0x02768d48 // lea rsi, [rsi + 2] WORD $0x9f0f; BYTE $0xd2 // setg dl @@ -37282,19 +38590,19 @@ LBB7_97: LONG $0x1b3c8841 // mov byte [r11 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB7_97 + JNE LBB7_104 LONG $0x01c38349 // add r11, 1 -LBB7_99: +LBB7_106: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB7_100 + JL LBB7_107 QUAD $0x000000f82494894c // mov qword [rsp + 248], r10 QUAD $0x0000009024bc894c // mov qword [rsp + 144], r15 QUAD $0x0000008824bc894c // mov qword [rsp + 136], r15 QUAD $0x000000f0249c894c // mov qword [rsp + 240], r11 -LBB7_102: +LBB7_109: LONG $0x2e394466 // cmp word [rsi], r13w LONG $0x24549f0f; BYTE $0x78 // setg byte [rsp + 120] LONG $0x6e394466; BYTE $0x02 // cmp word [rsi + 2], r13w @@ -37450,16 +38758,16 @@ LBB7_102: LONG $0x04c28348 // add rdx, 4 QUAD $0x000000f024948948 // mov qword [rsp + 240], rdx QUAD $0x0000008824848348; BYTE $0xff // add qword [rsp + 136], -1 - JNE LBB7_102 + JNE LBB7_109 QUAD $0x000000f024b48b4c // mov r14, qword [rsp + 240] QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JL LBB7_105 - JMP LBB7_192 + JL LBB7_112 + JMP LBB7_191 -LBB7_148: +LBB7_155: WORD $0x8b4c; BYTE $0x2a // mov r13, qword [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -37469,10 +38777,10 @@ LBB7_148: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB7_152 + JE LBB7_159 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB7_150: +LBB7_157: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 LONG $0x08768d48 // lea rsi, [rsi + 8] WORD $0x9f0f; BYTE $0xd2 // setg dl @@ -37493,19 +38801,19 @@ LBB7_150: LONG $0x1b3c8841 // mov byte [r11 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB7_150 + JNE LBB7_157 LONG $0x01c38349 // add r11, 1 -LBB7_152: +LBB7_159: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB7_153 + JL LBB7_160 QUAD $0x000000f82494894c // mov qword [rsp + 248], r10 QUAD $0x0000009024bc894c // mov qword [rsp + 144], r15 QUAD $0x0000008824bc894c // mov qword [rsp + 136], r15 QUAD $0x000000f0249c894c // mov qword [rsp + 240], r11 -LBB7_155: +LBB7_162: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 LONG $0x24549f0f; BYTE $0x78 // setg byte [rsp + 120] LONG $0x086e394c // cmp qword [rsi + 8], r13 @@ -37657,228 +38965,266 @@ LBB7_155: WORD $0x0841; BYTE $0xc8 // or r8b, cl LONG $0x027a8844 // mov byte [rdx + 2], r15b LONG $0x03428844 // mov byte [rdx + 3], r8b - LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 - LONG $0x04c28348 // add rdx, 4 - QUAD $0x000000f024948948 // mov qword [rsp + 240], rdx - QUAD $0x0000008824848348; BYTE $0xff // add qword [rsp + 136], -1 - JNE LBB7_155 - QUAD $0x000000f024b48b4c // mov r14, qword [rsp + 240] - QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] - LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JL LBB7_158 - JMP LBB7_192 - -LBB7_164: - LONG $0x1f7a8d4d // lea r15, [r10 + 31] - WORD $0x854d; BYTE $0xd2 // test r10, r10 - LONG $0xfa490f4d // cmovns r15, r10 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - LONG $0x0210fac5 // vmovss xmm0, dword [rdx] - WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB7_168 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d - -LBB7_166: - LONG $0x062ef8c5 // vucomiss xmm0, dword [rsi] - LONG $0x04768d48 // lea rsi, [rsi + 4] - WORD $0xd219 // sbb edx, edx - LONG $0x07788d48 // lea rdi, [rax + 7] - WORD $0x8548; BYTE $0xc0 // test rax, rax - LONG $0xf8490f48 // cmovns rdi, rax - LONG $0x03ffc148 // sar rdi, 3 - LONG $0x0cb60f45; BYTE $0x3b // movzx r9d, byte [r11 + rdi] - WORD $0x3044; BYTE $0xca // xor dl, r9b - QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] - WORD $0xc189 // mov ecx, eax - WORD $0x2944; BYTE $0xc1 // sub ecx, r8d - LONG $0x000001bb; BYTE $0x00 // mov ebx, 1 - WORD $0xe3d3 // shl ebx, cl - WORD $0xd320 // and bl, dl - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3b1c8841 // mov byte [r11 + rdi], bl - LONG $0x01c08348 // add rax, 1 - LONG $0x08f88348 // cmp rax, 8 - JNE LBB7_166 - LONG $0x01c38349 // add r11, 1 - -LBB7_168: - LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fa8349 // cmp r10, 32 - JL LBB7_169 - QUAD $0x000000f82494894c // mov qword [rsp + 248], r10 - QUAD $0x0000008824bc894c // mov qword [rsp + 136], r15 - LONG $0x247c894c; BYTE $0x78 // mov qword [rsp + 120], r15 - QUAD $0x000000f0249c894c // mov qword [rsp + 240], r11 - -LBB7_171: - LONG $0x062ef8c5 // vucomiss xmm0, dword [rsi] - QUAD $0x000000802494920f // setb byte [rsp + 128] - LONG $0x462ef8c5; BYTE $0x04 // vucomiss xmm0, dword [rsi + 4] - LONG $0xd1920f41 // setb r9b - LONG $0x462ef8c5; BYTE $0x08 // vucomiss xmm0, dword [rsi + 8] - LONG $0xd6920f41 // setb r14b - LONG $0x462ef8c5; BYTE $0x0c // vucomiss xmm0, dword [rsi + 12] - LONG $0xd5920f41 // setb r13b - LONG $0x462ef8c5; BYTE $0x10 // vucomiss xmm0, dword [rsi + 16] - LONG $0x2454920f; BYTE $0x58 // setb byte [rsp + 88] - LONG $0x462ef8c5; BYTE $0x14 // vucomiss xmm0, dword [rsi + 20] - LONG $0x2454920f; BYTE $0x30 // setb byte [rsp + 48] - LONG $0x462ef8c5; BYTE $0x18 // vucomiss xmm0, dword [rsi + 24] - WORD $0x920f; BYTE $0xd0 // setb al - LONG $0x462ef8c5; BYTE $0x1c // vucomiss xmm0, dword [rsi + 28] - WORD $0x920f; BYTE $0xd3 // setb bl - LONG $0x462ef8c5; BYTE $0x20 // vucomiss xmm0, dword [rsi + 32] - LONG $0x2454920f; BYTE $0x70 // setb byte [rsp + 112] - LONG $0x462ef8c5; BYTE $0x24 // vucomiss xmm0, dword [rsi + 36] - WORD $0x920f; BYTE $0xd2 // setb dl - LONG $0x462ef8c5; BYTE $0x28 // vucomiss xmm0, dword [rsi + 40] - LONG $0xd7920f40 // setb dil - LONG $0x462ef8c5; BYTE $0x2c // vucomiss xmm0, dword [rsi + 44] - LONG $0xd2920f41 // setb r10b - LONG $0x462ef8c5; BYTE $0x30 // vucomiss xmm0, dword [rsi + 48] - LONG $0xd3920f41 // setb r11b - LONG $0x462ef8c5; BYTE $0x34 // vucomiss xmm0, dword [rsi + 52] - LONG $0xd4920f41 // setb r12b - LONG $0x462ef8c5; BYTE $0x38 // vucomiss xmm0, dword [rsi + 56] - LONG $0x2454920f; BYTE $0x48 // setb byte [rsp + 72] - LONG $0x462ef8c5; BYTE $0x3c // vucomiss xmm0, dword [rsi + 60] - WORD $0x920f; BYTE $0xd1 // setb cl - LONG $0x462ef8c5; BYTE $0x40 // vucomiss xmm0, dword [rsi + 64] - LONG $0x2454920f; BYTE $0x40 // setb byte [rsp + 64] - LONG $0x462ef8c5; BYTE $0x44 // vucomiss xmm0, dword [rsi + 68] - LONG $0x2454920f; BYTE $0x68 // setb byte [rsp + 104] - LONG $0x462ef8c5; BYTE $0x48 // vucomiss xmm0, dword [rsi + 72] - LONG $0x2454920f; BYTE $0x50 // setb byte [rsp + 80] - LONG $0x462ef8c5; BYTE $0x4c // vucomiss xmm0, dword [rsi + 76] - LONG $0x2454920f; BYTE $0x60 // setb byte [rsp + 96] - LONG $0x462ef8c5; BYTE $0x50 // vucomiss xmm0, dword [rsi + 80] - LONG $0x2454920f; BYTE $0x28 // setb byte [rsp + 40] - LONG $0x462ef8c5; BYTE $0x54 // vucomiss xmm0, dword [rsi + 84] - LONG $0x2454920f; BYTE $0x38 // setb byte [rsp + 56] - LONG $0x462ef8c5; BYTE $0x58 // vucomiss xmm0, dword [rsi + 88] - LONG $0x2454920f; BYTE $0x18 // setb byte [rsp + 24] - LONG $0x462ef8c5; BYTE $0x5c // vucomiss xmm0, dword [rsi + 92] - LONG $0xd7920f41 // setb r15b - LONG $0x462ef8c5; BYTE $0x60 // vucomiss xmm0, dword [rsi + 96] - QUAD $0x000001402494920f // setb byte [rsp + 320] - LONG $0x462ef8c5; BYTE $0x64 // vucomiss xmm0, dword [rsi + 100] - LONG $0x2454920f; BYTE $0x20 // setb byte [rsp + 32] - LONG $0x462ef8c5; BYTE $0x68 // vucomiss xmm0, dword [rsi + 104] - LONG $0x2454920f; BYTE $0x10 // setb byte [rsp + 16] - LONG $0x462ef8c5; BYTE $0x6c // vucomiss xmm0, dword [rsi + 108] - LONG $0x2454920f; BYTE $0x08 // setb byte [rsp + 8] - LONG $0x462ef8c5; BYTE $0x70 // vucomiss xmm0, dword [rsi + 112] - QUAD $0x000001202494920f // setb byte [rsp + 288] - LONG $0x462ef8c5; BYTE $0x74 // vucomiss xmm0, dword [rsi + 116] - QUAD $0x000001002494920f // setb byte [rsp + 256] - LONG $0x462ef8c5; BYTE $0x78 // vucomiss xmm0, dword [rsi + 120] - LONG $0x2454920f; BYTE $0x04 // setb byte [rsp + 4] - LONG $0x462ef8c5; BYTE $0x7c // vucomiss xmm0, dword [rsi + 124] - LONG $0xd0920f41 // setb r8b - WORD $0x0045; BYTE $0xc9 // add r9b, r9b - QUAD $0x00000080248c0244 // add r9b, byte [rsp + 128] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0845; BYTE $0xce // or r14b, r9b - WORD $0xd200 // add dl, dl - LONG $0x70245402 // add dl, byte [rsp + 112] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xf5 // or r13b, r14b - LONG $0x02e7c040 // shl dil, 2 - WORD $0x0840; BYTE $0xd7 // or dil, dl - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0844; BYTE $0xea // or dl, r13b - WORD $0x8941; BYTE $0xd1 // mov r9d, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x2454b60f; BYTE $0x30 // movzx edx, byte [rsp + 48] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0844; BYTE $0xca // or dl, r9b - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b - LONG $0x247cb60f; BYTE $0x48 // movzx edi, byte [rsp + 72] - LONG $0x06e7c040 // shl dil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] - WORD $0xc000 // add al, al - LONG $0x40244402 // add al, byte [rsp + 64] - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x28 // movzx edx, byte [rsp + 40] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x38 // movzx edx, byte [rsp + 56] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000f024948b48 // mov rdx, qword [rsp + 240] - WORD $0x1a88 // mov byte [rdx], bl - LONG $0x245cb60f; BYTE $0x18 // movzx ebx, byte [rsp + 24] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl - WORD $0x0841; BYTE $0xff // or r15b, dil - LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] - WORD $0xc900 // add cl, cl - LONG $0x40248c02; WORD $0x0001; BYTE $0x00 // add cl, byte [rsp + 320] - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x08 // movzx ecx, byte [rsp + 8] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000100248cb60f // movzx ecx, byte [rsp + 256] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd908 // or cl, bl - LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b - LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 + LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 LONG $0x04c28348 // add rdx, 4 QUAD $0x000000f024948948 // mov qword [rsp + 240], rdx - LONG $0x24448348; WORD $0xff78 // add qword [rsp + 120], -1 - JNE LBB7_171 + QUAD $0x0000008824848348; BYTE $0xff // add qword [rsp + 136], -1 + JNE LBB7_162 QUAD $0x000000f024b48b4c // mov r14, qword [rsp + 240] QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] - QUAD $0x0000008824bc8b4c // mov r15, qword [rsp + 136] + QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JL LBB7_174 - JMP LBB7_192 + JL LBB7_165 + JMP LBB7_191 -LBB7_37: +LBB7_171: + LONG $0x1f728d4d // lea r14, [r10 + 31] + WORD $0x854d; BYTE $0xd2 // test r10, r10 + LONG $0xf2490f4d // cmovns r14, r10 + LONG $0x07418d41 // lea eax, [r9 + 7] + WORD $0x8545; BYTE $0xc9 // test r9d, r9d + LONG $0xc1490f41 // cmovns eax, r9d + WORD $0xe083; BYTE $0xf8 // and eax, -8 + LONG $0x0210fac5 // vmovss xmm0, dword [rdx] + WORD $0x2941; BYTE $0xc1 // sub r9d, eax + JE LBB7_175 + WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + +LBB7_173: + LONG $0x0e10fac5 // vmovss xmm1, dword [rsi] + LONG $0x04c68348 // add rsi, 4 + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + WORD $0x970f; BYTE $0xd2 // seta dl + WORD $0xdaf6 // neg dl + LONG $0x07788d48 // lea rdi, [rax + 7] + WORD $0x8548; BYTE $0xc0 // test rax, rax + LONG $0xf8490f48 // cmovns rdi, rax + LONG $0x03ffc148 // sar rdi, 3 + LONG $0x0cb60f45; BYTE $0x3b // movzx r9d, byte [r11 + rdi] + WORD $0x3044; BYTE $0xca // xor dl, r9b + QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] + WORD $0xc189 // mov ecx, eax + WORD $0x2944; BYTE $0xc1 // sub ecx, r8d + LONG $0x000001bb; BYTE $0x00 // mov ebx, 1 + WORD $0xe3d3 // shl ebx, cl + WORD $0xd320 // and bl, dl + WORD $0x3044; BYTE $0xcb // xor bl, r9b + LONG $0x3b1c8841 // mov byte [r11 + rdi], bl + LONG $0x01c08348 // add rax, 1 + LONG $0x08f88348 // cmp rax, 8 + JNE LBB7_173 + LONG $0x01c38349 // add r11, 1 + +LBB7_175: + LONG $0x05fec149 // sar r14, 5 + LONG $0x20fa8349 // cmp r10, 32 + JL LBB7_179 + QUAD $0x000000f82494894c // mov qword [rsp + 248], r10 + QUAD $0x0000008824b4894c // mov qword [rsp + 136], r14 + LONG $0x2474894c; BYTE $0x78 // mov qword [rsp + 120], r14 + QUAD $0x000000f0249c894c // mov qword [rsp + 240], r11 + +LBB7_177: + LONG $0x0e10fac5 // vmovss xmm1, dword [rsi] + LONG $0x5610fac5; BYTE $0x04 // vmovss xmm2, dword [rsi + 4] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + QUAD $0x000001202494970f // seta byte [rsp + 288] + LONG $0xd02ef8c5 // vucomiss xmm2, xmm0 + WORD $0x970f; BYTE $0xd3 // seta bl + LONG $0x4e10fac5; BYTE $0x08 // vmovss xmm1, dword [rsi + 8] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x4e10fac5; BYTE $0x0c // vmovss xmm1, dword [rsi + 12] + LONG $0xd5970f41 // seta r13b + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0xd4970f41 // seta r12b + LONG $0x4e10fac5; BYTE $0x10 // vmovss xmm1, dword [rsi + 16] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x4e10fac5; BYTE $0x14 // vmovss xmm1, dword [rsi + 20] + LONG $0x2454970f; BYTE $0x28 // seta byte [rsp + 40] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x2454970f; BYTE $0x38 // seta byte [rsp + 56] + LONG $0x4e10fac5; BYTE $0x18 // vmovss xmm1, dword [rsi + 24] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x4e10fac5; BYTE $0x1c // vmovss xmm1, dword [rsi + 28] + LONG $0x2454970f; BYTE $0x30 // seta byte [rsp + 48] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x2454970f; BYTE $0x18 // seta byte [rsp + 24] + LONG $0x4e10fac5; BYTE $0x20 // vmovss xmm1, dword [rsi + 32] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x4e10fac5; BYTE $0x24 // vmovss xmm1, dword [rsi + 36] + QUAD $0x000001002494970f // seta byte [rsp + 256] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + WORD $0x970f; BYTE $0xd0 // seta al + LONG $0x4e10fac5; BYTE $0x28 // vmovss xmm1, dword [rsi + 40] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x4e10fac5; BYTE $0x2c // vmovss xmm1, dword [rsi + 44] + LONG $0x2454970f; BYTE $0x10 // seta byte [rsp + 16] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + QUAD $0x000001402494970f // seta byte [rsp + 320] + LONG $0x4e10fac5; BYTE $0x30 // vmovss xmm1, dword [rsi + 48] + LONG $0x5e10fac5; BYTE $0x34 // vmovss xmm3, dword [rsi + 52] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x6e10fac5; BYTE $0x38 // vmovss xmm5, dword [rsi + 56] + LONG $0x7610fac5; BYTE $0x3c // vmovss xmm6, dword [rsi + 60] + LONG $0x2454970f; BYTE $0x60 // seta byte [rsp + 96] + LONG $0x46107ac5; BYTE $0x40 // vmovss xmm8, dword [rsi + 64] + LONG $0x4e107ac5; BYTE $0x44 // vmovss xmm9, dword [rsi + 68] + LONG $0xd82ef8c5 // vucomiss xmm3, xmm0 + LONG $0x56107ac5; BYTE $0x48 // vmovss xmm10, dword [rsi + 72] + LONG $0x5e107ac5; BYTE $0x4c // vmovss xmm11, dword [rsi + 76] + LONG $0x2454970f; BYTE $0x48 // seta byte [rsp + 72] + LONG $0x66107ac5; BYTE $0x50 // vmovss xmm12, dword [rsi + 80] + LONG $0x6e107ac5; BYTE $0x54 // vmovss xmm13, dword [rsi + 84] + LONG $0xe82ef8c5 // vucomiss xmm5, xmm0 + LONG $0x76107ac5; BYTE $0x58 // vmovss xmm14, dword [rsi + 88] + LONG $0x5610fac5; BYTE $0x5c // vmovss xmm2, dword [rsi + 92] + LONG $0x2454970f; BYTE $0x68 // seta byte [rsp + 104] + LONG $0x5e10fac5; BYTE $0x60 // vmovss xmm3, dword [rsi + 96] + LONG $0x6610fac5; BYTE $0x64 // vmovss xmm4, dword [rsi + 100] + LONG $0xf02ef8c5 // vucomiss xmm6, xmm0 + LONG $0x7610fac5; BYTE $0x68 // vmovss xmm6, dword [rsi + 104] + LONG $0x7e10fac5; BYTE $0x6c // vmovss xmm7, dword [rsi + 108] + LONG $0xd3970f41 // seta r11b + LONG $0x4e10fac5; BYTE $0x70 // vmovss xmm1, dword [rsi + 112] + LONG $0x6e10fac5; BYTE $0x74 // vmovss xmm5, dword [rsi + 116] + LONG $0xc02e78c5 // vucomiss xmm8, xmm0 + QUAD $0x000000802494970f // seta byte [rsp + 128] + LONG $0xc82e78c5 // vucomiss xmm9, xmm0 + WORD $0x970f; BYTE $0xd1 // seta cl + LONG $0xd02e78c5 // vucomiss xmm10, xmm0 + LONG $0xd7970f40 // seta dil + LONG $0xd82e78c5 // vucomiss xmm11, xmm0 + LONG $0xd0970f41 // seta r8b + LONG $0xe02e78c5 // vucomiss xmm12, xmm0 + LONG $0xd2970f41 // seta r10b + LONG $0xe82e78c5 // vucomiss xmm13, xmm0 + LONG $0xd6970f41 // seta r14b + LONG $0xf02e78c5 // vucomiss xmm14, xmm0 + LONG $0x2454970f; BYTE $0x70 // seta byte [rsp + 112] + LONG $0xd02ef8c5 // vucomiss xmm2, xmm0 + LONG $0xd1970f41 // seta r9b + LONG $0xd82ef8c5 // vucomiss xmm3, xmm0 + LONG $0x2454970f; BYTE $0x58 // seta byte [rsp + 88] + LONG $0xe02ef8c5 // vucomiss xmm4, xmm0 + LONG $0xd7970f41 // seta r15b + LONG $0xf02ef8c5 // vucomiss xmm6, xmm0 + LONG $0x2454970f; BYTE $0x50 // seta byte [rsp + 80] + LONG $0xf82ef8c5 // vucomiss xmm7, xmm0 + LONG $0x2454970f; BYTE $0x40 // seta byte [rsp + 64] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x2454970f; BYTE $0x20 // seta byte [rsp + 32] + LONG $0xe82ef8c5 // vucomiss xmm5, xmm0 + LONG $0x4e10fac5; BYTE $0x78 // vmovss xmm1, dword [rsi + 120] + LONG $0x2454970f; BYTE $0x08 // seta byte [rsp + 8] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x2454970f; BYTE $0x04 // seta byte [rsp + 4] + LONG $0x4e10fac5; BYTE $0x7c // vmovss xmm1, dword [rsi + 124] + LONG $0x80ee8348 // sub rsi, -128 + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + WORD $0x970f; BYTE $0xd2 // seta dl + WORD $0xdb00 // add bl, bl + LONG $0x20249c02; WORD $0x0001; BYTE $0x00 // add bl, byte [rsp + 288] + LONG $0x02e5c041 // shl r13b, 2 + WORD $0x0841; BYTE $0xdd // or r13b, bl + LONG $0x03e4c041 // shl r12b, 3 + WORD $0x0845; BYTE $0xec // or r12b, r13b + LONG $0x245cb60f; BYTE $0x28 // movzx ebx, byte [rsp + 40] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xe3 // or bl, r12b + WORD $0x8941; BYTE $0xdc // mov r12d, ebx + LONG $0x245cb60f; BYTE $0x38 // movzx ebx, byte [rsp + 56] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xe3 // or bl, r12b + LONG $0x64b60f44; WORD $0x3024 // movzx r12d, byte [rsp + 48] + LONG $0x06e4c041 // shl r12b, 6 + LONG $0x6cb60f44; WORD $0x1824 // movzx r13d, byte [rsp + 24] + LONG $0x07e5c041 // shl r13b, 7 + WORD $0x0845; BYTE $0xe5 // or r13b, r12b + WORD $0xc000 // add al, al + LONG $0x00248402; WORD $0x0001; BYTE $0x00 // add al, byte [rsp + 256] + LONG $0x64b60f44; WORD $0x1024 // movzx r12d, byte [rsp + 16] + LONG $0x02e4c041 // shl r12b, 2 + WORD $0x0841; BYTE $0xc4 // or r12b, al + WORD $0x8944; BYTE $0xe0 // mov eax, r12d + QUAD $0x00014024a4b60f44; BYTE $0x00 // movzx r12d, byte [rsp + 320] + LONG $0x03e4c041 // shl r12b, 3 + WORD $0x0841; BYTE $0xc4 // or r12b, al + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xe0 // or al, r12b + WORD $0x0841; BYTE $0xdd // or r13b, bl + LONG $0x245cb60f; BYTE $0x48 // movzx ebx, byte [rsp + 72] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0xc308 // or bl, al + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + LONG $0x07e3c041 // shl r11b, 7 + WORD $0x0841; BYTE $0xc3 // or r11b, al + WORD $0xc900 // add cl, cl + LONG $0x80248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 128] + LONG $0x02e7c040 // shl dil, 2 + WORD $0x0840; BYTE $0xcf // or dil, cl + LONG $0x03e0c041 // shl r8b, 3 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + LONG $0x04e2c041 // shl r10b, 4 + WORD $0x0845; BYTE $0xc2 // or r10b, r8b + LONG $0x05e6c041 // shl r14b, 5 + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0841; BYTE $0xdb // or r11b, bl + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + LONG $0x07e1c041 // shl r9b, 7 + WORD $0x0841; BYTE $0xc1 // or r9b, al + QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] + WORD $0x8844; BYTE $0x28 // mov byte [rax], r13b + WORD $0x0845; BYTE $0xf1 // or r9b, r14b + WORD $0x0045; BYTE $0xff // add r15b, r15b + LONG $0x247c0244; BYTE $0x58 // add r15b, byte [rsp + 88] + LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0x0844; BYTE $0xf9 // or cl, r15b + WORD $0xcb89 // mov ebx, ecx + LONG $0x244cb60f; BYTE $0x40 // movzx ecx, byte [rsp + 64] + WORD $0xe1c0; BYTE $0x03 // shl cl, 3 + WORD $0xd908 // or cl, bl + WORD $0xcb89 // mov ebx, ecx + LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0xd908 // or cl, bl + WORD $0xcb89 // mov ebx, ecx + LONG $0x244cb60f; BYTE $0x08 // movzx ecx, byte [rsp + 8] + WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + WORD $0xd908 // or cl, bl + LONG $0x01588844 // mov byte [rax + 1], r11b + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xda08 // or dl, bl + LONG $0x02488844 // mov byte [rax + 2], r9b + WORD $0xca08 // or dl, cl + WORD $0x5088; BYTE $0x03 // mov byte [rax + 3], dl + LONG $0x04c08348 // add rax, 4 + QUAD $0x000000f024848948 // mov qword [rsp + 240], rax + LONG $0x24448348; WORD $0xff78 // add qword [rsp + 120], -1 + JNE LBB7_177 + QUAD $0x000000f0249c8b4c // mov r11, qword [rsp + 240] + QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] + QUAD $0x0000008824b48b4c // mov r14, qword [rsp + 136] + +LBB7_179: + LONG $0x05e6c149 // shl r14, 5 + WORD $0x394d; BYTE $0xd6 // cmp r14, r10 + JGE LBB7_191 + WORD $0x894d; BYTE $0xd0 // mov r8, r10 + WORD $0x294d; BYTE $0xf0 // sub r8, r14 + WORD $0xf749; BYTE $0xd6 // not r14 + WORD $0x014d; BYTE $0xd6 // add r14, r10 + JNE LBB7_184 + WORD $0x3145; BYTE $0xd2 // xor r10d, r10d + JMP LBB7_182 + +LBB7_42: WORD $0x8a44; BYTE $0x32 // mov r14b, byte [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -37888,10 +39234,10 @@ LBB7_37: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB7_41 + JE LBB7_46 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB7_39: +LBB7_44: WORD $0x3a44; BYTE $0x36 // cmp r14b, byte [rsi] LONG $0x01768d48 // lea rsi, [rsi + 1] WORD $0xd219 // sbb edx, edx @@ -37911,38 +39257,38 @@ LBB7_39: LONG $0x3b1c8841 // mov byte [r11 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB7_39 + JNE LBB7_44 LONG $0x01c38349 // add r11, 1 -LBB7_41: +LBB7_46: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB7_42 + JL LBB7_47 LONG $0x20ff8349 // cmp r15, 32 LONG $0x24748944; BYTE $0x04 // mov dword [rsp + 4], r14d QUAD $0x000000f82494894c // mov qword [rsp + 248], r10 QUAD $0x0000017824bc894c // mov qword [rsp + 376], r15 - JB LBB7_44 + JB LBB7_49 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi WORD $0x3949; BYTE $0xc3 // cmp r11, rax - JAE LBB7_47 + JAE LBB7_52 LONG $0xbb048d4b // lea rax, [r11 + 4*r15] WORD $0x3948; BYTE $0xc6 // cmp rsi, rax - JAE LBB7_47 + JAE LBB7_52 -LBB7_44: +LBB7_49: WORD $0xc031 // xor eax, eax QUAD $0x0000016824848948 // mov qword [rsp + 360], rax WORD $0x8949; BYTE $0xf4 // mov r12, rsi QUAD $0x00000160249c894c // mov qword [rsp + 352], r11 -LBB7_50: +LBB7_55: QUAD $0x0000016824bc2b4c // sub r15, qword [rsp + 360] LONG $0x247c894c; BYTE $0x78 // mov qword [rsp + 120], r15 -LBB7_51: +LBB7_56: WORD $0x894c; BYTE $0xe1 // mov rcx, r12 LONG $0x24343845 // cmp byte [r12], r14b QUAD $0x000001402494970f // seta byte [rsp + 320] @@ -38105,12 +39451,12 @@ LBB7_51: LONG $0x04c68348 // add rsi, 4 QUAD $0x0000016024b48948 // mov qword [rsp + 352], rsi LONG $0x24448348; WORD $0xff78 // add qword [rsp + 120], -1 - JNE LBB7_51 + JNE LBB7_56 QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] QUAD $0x0000017824bc8b4c // mov r15, qword [rsp + 376] - JMP LBB7_53 + JMP LBB7_58 -LBB7_122: +LBB7_129: WORD $0x8b44; BYTE $0x2a // mov r13d, dword [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -38120,10 +39466,10 @@ LBB7_122: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB7_126 + JE LBB7_133 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB7_124: +LBB7_131: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d LONG $0x04768d48 // lea rsi, [rsi + 4] WORD $0x9f0f; BYTE $0xd2 // setg dl @@ -38144,18 +39490,18 @@ LBB7_124: LONG $0x1b3c8841 // mov byte [r11 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB7_124 + JNE LBB7_131 LONG $0x01c38349 // add r11, 1 -LBB7_126: +LBB7_133: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB7_127 + JL LBB7_134 QUAD $0x000000f82494894c // mov qword [rsp + 248], r10 QUAD $0x0000009024bc894c // mov qword [rsp + 144], r15 QUAD $0x0000008824bc894c // mov qword [rsp + 136], r15 -LBB7_129: +LBB7_136: QUAD $0x000000f0249c894c // mov qword [rsp + 240], r11 WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d LONG $0x24549f0f; BYTE $0x78 // setg byte [rsp + 120] @@ -38310,174 +39656,249 @@ LBB7_129: LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 LONG $0x04c38349 // add r11, 4 QUAD $0x0000008824848348; BYTE $0xff // add qword [rsp + 136], -1 - JNE LBB7_129 + JNE LBB7_136 WORD $0x894d; BYTE $0xde // mov r14, r11 QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JL LBB7_132 - JMP LBB7_192 + JL LBB7_139 + JMP LBB7_191 LBB7_18: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB7_192 - -LBB7_116: - WORD $0x894d; BYTE $0xd0 // mov r8, r10 - WORD $0x294d; BYTE $0xf8 // sub r8, r15 - WORD $0xf749; BYTE $0xd7 // not r15 - WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB7_120 - WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB7_118 - -LBB7_36: - WORD $0x894d; BYTE $0xde // mov r14, r11 - LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB7_192 + JGE LBB7_191 -LBB7_184: +LBB7_123: WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB7_186 + JNE LBB7_127 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB7_188 + JMP LBB7_125 LBB7_9: QUAD $0x00000160249c894c // mov qword [rsp + 352], r11 WORD $0x8949; BYTE $0xf4 // mov r12, rsi -LBB7_71: +LBB7_76: LONG $0x05e5c149 // shl r13, 5 WORD $0x394d; BYTE $0xfd // cmp r13, r15 - JGE LBB7_192 + JGE LBB7_191 WORD $0x894d; BYTE $0xf8 // mov r8, r15 WORD $0x294d; BYTE $0xe8 // sub r8, r13 WORD $0xf749; BYTE $0xd5 // not r13 WORD $0x014d; BYTE $0xfd // add r13, r15 - JNE LBB7_74 + JNE LBB7_79 WORD $0xf631 // xor esi, esi - JMP LBB7_77 + JMP LBB7_82 LBB7_27: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB7_192 + JGE LBB7_191 -LBB7_142: +LBB7_149: WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB7_146 + JNE LBB7_153 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB7_144 - -LBB7_84: - WORD $0x894d; BYTE $0xde // mov r14, r11 - LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB7_192 + JMP LBB7_151 LBB7_89: - WORD $0x894d; BYTE $0xd0 // mov r8, r10 - WORD $0x294d; BYTE $0xf8 // sub r8, r15 - WORD $0xf749; BYTE $0xd7 // not r15 - WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB7_93 - WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB7_91 - -LBB7_100: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB7_192 + JGE LBB7_191 -LBB7_105: +LBB7_94: WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB7_110 + JNE LBB7_100 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB7_107 + JMP LBB7_96 -LBB7_153: +LBB7_107: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB7_192 + JGE LBB7_191 -LBB7_158: +LBB7_112: WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB7_162 + JNE LBB7_117 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB7_160 + JMP LBB7_114 -LBB7_169: +LBB7_160: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB7_192 + JGE LBB7_191 -LBB7_174: +LBB7_165: WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB7_178 + JNE LBB7_169 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB7_176 + JMP LBB7_167 -LBB7_42: +LBB7_47: QUAD $0x00000160249c894c // mov qword [rsp + 352], r11 WORD $0x8949; BYTE $0xf4 // mov r12, rsi -LBB7_53: +LBB7_58: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB7_192 + JGE LBB7_191 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB7_56 + JNE LBB7_61 WORD $0xc031 // xor eax, eax - JMP LBB7_59 + JMP LBB7_64 -LBB7_127: +LBB7_134: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB7_192 + JGE LBB7_191 -LBB7_132: +LBB7_139: WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB7_136 + JNE LBB7_143 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB7_134 + JMP LBB7_141 -LBB7_120: +LBB7_186: + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 + WORD $0x3145; BYTE $0xd2 // xor r10d, r10d + WORD $0x894d; BYTE $0xde // mov r14, r11 + +LBB7_187: + LONG $0x0e10fbc5 // vmovsd xmm1, qword [rsi] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + WORD $0x970f; BYTE $0xd0 // seta al + WORD $0xd8f6 // neg al + WORD $0x894c; BYTE $0xd7 // mov rdi, r10 + LONG $0x03efc148 // shr rdi, 3 + WORD $0x8944; BYTE $0xd1 // mov ecx, r10d + WORD $0xe180; BYTE $0x06 // and cl, 6 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + LONG $0x14b60f41; BYTE $0x3e // movzx edx, byte [r14 + rdi] + WORD $0xd030 // xor al, dl + WORD $0xc320 // and bl, al + WORD $0xd330 // xor bl, dl + LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x02c28349 // add r10, 2 + LONG $0x4e10fbc5; BYTE $0x08 // vmovsd xmm1, qword [rsi + 8] + LONG $0x10c68348 // add rsi, 16 + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + WORD $0x970f; BYTE $0xd0 // seta al + WORD $0xd8f6 // neg al + WORD $0xd830 // xor al, bl + WORD $0xc980; BYTE $0x01 // or cl, 1 + WORD $0x01b2 // mov dl, 1 + WORD $0xe2d2 // shl dl, cl + WORD $0xc220 // and dl, al + WORD $0xda30 // xor dl, bl + LONG $0x3e148841 // mov byte [r14 + rdi], dl + WORD $0x394d; BYTE $0xd1 // cmp r9, r10 + JNE LBB7_187 + +LBB7_188: + LONG $0x01c0f641 // test r8b, 1 + JE LBB7_191 + LONG $0x0e10fbc5 // vmovsd xmm1, qword [rsi] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + JMP LBB7_190 + +LBB7_184: + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 + WORD $0x3145; BYTE $0xd2 // xor r10d, r10d + WORD $0x894d; BYTE $0xde // mov r14, r11 + +LBB7_185: + LONG $0x0e10fac5 // vmovss xmm1, dword [rsi] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + WORD $0x970f; BYTE $0xd0 // seta al + WORD $0xd8f6 // neg al + WORD $0x894c; BYTE $0xd7 // mov rdi, r10 + LONG $0x03efc148 // shr rdi, 3 + WORD $0x8944; BYTE $0xd1 // mov ecx, r10d + WORD $0xe180; BYTE $0x06 // and cl, 6 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + LONG $0x14b60f41; BYTE $0x3e // movzx edx, byte [r14 + rdi] + WORD $0xd030 // xor al, dl + WORD $0xc320 // and bl, al + WORD $0xd330 // xor bl, dl + LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x02c28349 // add r10, 2 + LONG $0x4e10fac5; BYTE $0x04 // vmovss xmm1, dword [rsi + 4] + LONG $0x08c68348 // add rsi, 8 + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + WORD $0x970f; BYTE $0xd0 // seta al + WORD $0xd8f6 // neg al + WORD $0xd830 // xor al, bl + WORD $0xc980; BYTE $0x01 // or cl, 1 + WORD $0x01b2 // mov dl, 1 + WORD $0xe2d2 // shl dl, cl + WORD $0xc220 // and dl, al + WORD $0xda30 // xor dl, bl + LONG $0x3e148841 // mov byte [r14 + rdi], dl + WORD $0x394d; BYTE $0xd1 // cmp r9, r10 + JNE LBB7_185 + +LBB7_182: + LONG $0x01c0f641 // test r8b, 1 + JE LBB7_191 + LONG $0x0e10fac5 // vmovss xmm1, dword [rsi] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + +LBB7_190: + WORD $0x970f; BYTE $0xd0 // seta al + WORD $0xd8f6 // neg al + WORD $0x894c; BYTE $0xd2 // mov rdx, r10 + LONG $0x03eac148 // shr rdx, 3 + LONG $0x13348a41 // mov sil, byte [r11 + rdx] + LONG $0x07e28041 // and r10b, 7 + WORD $0x01b3 // mov bl, 1 + WORD $0x8944; BYTE $0xd1 // mov ecx, r10d + WORD $0xe3d2 // shl bl, cl + WORD $0x3040; BYTE $0xf0 // xor al, sil + WORD $0xc320 // and bl, al + WORD $0x3040; BYTE $0xf3 // xor bl, sil + LONG $0x131c8841 // mov byte [r11 + rdx], bl + JMP LBB7_191 + +LBB7_127: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 -LBB7_121: +LBB7_128: WORD $0x3b44; BYTE $0x2e // cmp r13d, dword [rsi] WORD $0xff19 // sbb edi, edi WORD $0x894c; BYTE $0xda // mov rdx, r11 @@ -38503,61 +39924,21 @@ LBB7_121: WORD $0xc330 // xor bl, al LONG $0x171c8841 // mov byte [r15 + rdx], bl WORD $0x394d; BYTE $0xd9 // cmp r9, r11 - JNE LBB7_121 + JNE LBB7_128 -LBB7_118: +LBB7_125: LONG $0x01c0f641 // test r8b, 1 - JE LBB7_192 + JE LBB7_191 WORD $0x3b44; BYTE $0x2e // cmp r13d, dword [rsi] - JMP LBB7_190 + JMP LBB7_98 -LBB7_186: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 - WORD $0x3145; BYTE $0xdb // xor r11d, r11d - WORD $0x894d; BYTE $0xf7 // mov r15, r14 - -LBB7_187: - LONG $0x062ef9c5 // vucomisd xmm0, qword [rsi] - WORD $0xc019 // sbb eax, eax - WORD $0x894c; BYTE $0xdf // mov rdi, r11 - LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3f // movzx r9d, byte [r15 + rdi] - WORD $0x3044; BYTE $0xc8 // xor al, r9b - WORD $0x8944; BYTE $0xd9 // mov ecx, r11d - WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b3 // mov bl, 1 - WORD $0xe3d2 // shl bl, cl - WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3f1c8841 // mov byte [r15 + rdi], bl - LONG $0x02c38349 // add r11, 2 - LONG $0x462ef9c5; BYTE $0x08 // vucomisd xmm0, qword [rsi + 8] - LONG $0x10768d48 // lea rsi, [rsi + 16] - WORD $0xc019 // sbb eax, eax - WORD $0xd830 // xor al, bl - WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b2 // mov dl, 1 - WORD $0xe2d2 // shl dl, cl - WORD $0xc220 // and dl, al - WORD $0xda30 // xor dl, bl - LONG $0x3f148841 // mov byte [r15 + rdi], dl - WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB7_187 - -LBB7_188: - LONG $0x01c0f641 // test r8b, 1 - JE LBB7_192 - LONG $0x062ef9c5 // vucomisd xmm0, qword [rsi] - JMP LBB7_190 - -LBB7_74: +LBB7_79: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0xf631 // xor esi, esi QUAD $0x00000160249c8b4c // mov r11, qword [rsp + 352] -LBB7_75: +LBB7_80: LONG $0x34343845 // cmp byte [r12 + rsi], r14b WORD $0x9f0f; BYTE $0xd3 // setg bl WORD $0xdbf6 // neg bl @@ -38584,12 +39965,12 @@ LBB7_75: WORD $0xd030 // xor al, dl LONG $0x3b048841 // mov byte [r11 + rdi], al WORD $0x3949; BYTE $0xf2 // cmp r10, rsi - JNE LBB7_75 + JNE LBB7_80 WORD $0x0149; BYTE $0xf4 // add r12, rsi -LBB7_77: +LBB7_82: LONG $0x01c0f641 // test r8b, 1 - JE LBB7_192 + JE LBB7_191 LONG $0x24343845 // cmp byte [r12], r14b WORD $0x9f0f; BYTE $0xd0 // setg al WORD $0xd8f6 // neg al @@ -38605,15 +39986,15 @@ LBB7_77: WORD $0xc320 // and bl, al WORD $0x3040; BYTE $0xfb // xor bl, dil LONG $0x101c8841 // mov byte [r8 + rdx], bl - JMP LBB7_192 + JMP LBB7_191 -LBB7_146: +LBB7_153: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 -LBB7_147: +LBB7_154: WORD $0x3b4c; BYTE $0x2e // cmp r13, qword [rsi] WORD $0xff19 // sbb edi, edi WORD $0x894c; BYTE $0xda // mov rdx, r11 @@ -38639,21 +40020,21 @@ LBB7_147: WORD $0xc330 // xor bl, al LONG $0x171c8841 // mov byte [r15 + rdx], bl WORD $0x394d; BYTE $0xd9 // cmp r9, r11 - JNE LBB7_147 + JNE LBB7_154 -LBB7_144: +LBB7_151: LONG $0x01c0f641 // test r8b, 1 - JE LBB7_192 + JE LBB7_191 WORD $0x3b4c; BYTE $0x2e // cmp r13, qword [rsi] - JMP LBB7_190 + JMP LBB7_98 -LBB7_93: +LBB7_100: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 -LBB7_94: +LBB7_101: LONG $0x2e3b4466 // cmp r13w, word [rsi] WORD $0xff19 // sbb edi, edi WORD $0x894c; BYTE $0xda // mov rdx, r11 @@ -38679,21 +40060,33 @@ LBB7_94: WORD $0xc330 // xor bl, al LONG $0x171c8841 // mov byte [r15 + rdx], bl WORD $0x394d; BYTE $0xd9 // cmp r9, r11 - JNE LBB7_94 + JNE LBB7_101 -LBB7_91: +LBB7_96: LONG $0x01c0f641 // test r8b, 1 - JE LBB7_192 + JE LBB7_191 LONG $0x2e3b4466 // cmp r13w, word [rsi] - JMP LBB7_190 -LBB7_110: +LBB7_98: + WORD $0xc019 // sbb eax, eax + WORD $0x894c; BYTE $0xda // mov rdx, r11 + LONG $0x03eac148 // shr rdx, 3 + LONG $0x16348a41 // mov sil, byte [r14 + rdx] + LONG $0x07e38041 // and r11b, 7 + WORD $0x01b3 // mov bl, 1 + WORD $0x8944; BYTE $0xd9 // mov ecx, r11d + WORD $0xe3d2 // shl bl, cl + WORD $0x3040; BYTE $0xf0 // xor al, sil + WORD $0xc320 // and bl, al + JMP LBB7_99 + +LBB7_117: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 -LBB7_111: +LBB7_118: LONG $0x2e394466 // cmp word [rsi], r13w WORD $0x9f0f; BYTE $0xd0 // setg al WORD $0xd8f6 // neg al @@ -38721,21 +40114,21 @@ LBB7_111: WORD $0xda30 // xor dl, bl LONG $0x3f148841 // mov byte [r15 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB7_111 + JNE LBB7_118 -LBB7_107: +LBB7_114: LONG $0x01c0f641 // test r8b, 1 - JE LBB7_192 + JE LBB7_191 LONG $0x2e394466 // cmp word [rsi], r13w - JMP LBB7_109 + JMP LBB7_116 -LBB7_162: +LBB7_169: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 -LBB7_163: +LBB7_170: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 WORD $0x9f0f; BYTE $0xd0 // setg al WORD $0xd8f6 // neg al @@ -38763,73 +40156,21 @@ LBB7_163: WORD $0xda30 // xor dl, bl LONG $0x3f148841 // mov byte [r15 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB7_163 + JNE LBB7_170 -LBB7_160: +LBB7_167: LONG $0x01c0f641 // test r8b, 1 - JE LBB7_192 + JE LBB7_191 WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 - JMP LBB7_109 - -LBB7_178: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 - WORD $0x3145; BYTE $0xdb // xor r11d, r11d - WORD $0x894d; BYTE $0xf7 // mov r15, r14 + JMP LBB7_116 -LBB7_179: - LONG $0x062ef8c5 // vucomiss xmm0, dword [rsi] - WORD $0xc019 // sbb eax, eax - WORD $0x894c; BYTE $0xdf // mov rdi, r11 - LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3f // movzx r9d, byte [r15 + rdi] - WORD $0x3044; BYTE $0xc8 // xor al, r9b - WORD $0x8944; BYTE $0xd9 // mov ecx, r11d - WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b3 // mov bl, 1 - WORD $0xe3d2 // shl bl, cl - WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3f1c8841 // mov byte [r15 + rdi], bl - LONG $0x02c38349 // add r11, 2 - LONG $0x462ef8c5; BYTE $0x04 // vucomiss xmm0, dword [rsi + 4] - LONG $0x08768d48 // lea rsi, [rsi + 8] - WORD $0xc019 // sbb eax, eax - WORD $0xd830 // xor al, bl - WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b2 // mov dl, 1 - WORD $0xe2d2 // shl dl, cl - WORD $0xc220 // and dl, al - WORD $0xda30 // xor dl, bl - LONG $0x3f148841 // mov byte [r15 + rdi], dl - WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB7_179 - -LBB7_176: - LONG $0x01c0f641 // test r8b, 1 - JE LBB7_192 - LONG $0x062ef8c5 // vucomiss xmm0, dword [rsi] - -LBB7_190: - WORD $0xc019 // sbb eax, eax - WORD $0x894c; BYTE $0xda // mov rdx, r11 - LONG $0x03eac148 // shr rdx, 3 - LONG $0x16348a41 // mov sil, byte [r14 + rdx] - LONG $0x07e38041 // and r11b, 7 - WORD $0x01b3 // mov bl, 1 - WORD $0x8944; BYTE $0xd9 // mov ecx, r11d - WORD $0xe3d2 // shl bl, cl - WORD $0x3040; BYTE $0xf0 // xor al, sil - WORD $0xc320 // and bl, al - JMP LBB7_191 - -LBB7_56: +LBB7_61: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0xc031 // xor eax, eax QUAD $0x0000016024948b4c // mov r10, qword [rsp + 352] -LBB7_57: +LBB7_62: LONG $0x04343a45 // cmp r14b, byte [r12 + rax] WORD $0xf619 // sbb esi, esi WORD $0x8948; BYTE $0xc7 // mov rdi, rax @@ -38854,12 +40195,12 @@ LBB7_57: WORD $0xd330 // xor bl, dl LONG $0x3a1c8841 // mov byte [r10 + rdi], bl WORD $0x3949; BYTE $0xc1 // cmp r9, rax - JNE LBB7_57 + JNE LBB7_62 WORD $0x0149; BYTE $0xc4 // add r12, rax -LBB7_59: +LBB7_64: LONG $0x01c0f641 // test r8b, 1 - JE LBB7_192 + JE LBB7_191 LONG $0x24343a45 // cmp r14b, byte [r12] WORD $0xd219 // sbb edx, edx WORD $0x8948; BYTE $0xc6 // mov rsi, rax @@ -38874,15 +40215,15 @@ LBB7_59: WORD $0xd320 // and bl, dl WORD $0x3040; BYTE $0xfb // xor bl, dil LONG $0x301c8841 // mov byte [r8 + rsi], bl - JMP LBB7_192 + JMP LBB7_191 -LBB7_136: +LBB7_143: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 -LBB7_137: +LBB7_144: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d WORD $0x9f0f; BYTE $0xd0 // setg al WORD $0xd8f6 // neg al @@ -38910,14 +40251,14 @@ LBB7_137: WORD $0xda30 // xor dl, bl LONG $0x3f148841 // mov byte [r15 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB7_137 + JNE LBB7_144 -LBB7_134: +LBB7_141: LONG $0x01c0f641 // test r8b, 1 - JE LBB7_192 + JE LBB7_191 WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d -LBB7_109: +LBB7_116: WORD $0x9f0f; BYTE $0xd0 // setg al WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xda // mov rdx, r11 @@ -38930,16 +40271,16 @@ LBB7_109: WORD $0x3040; BYTE $0xf0 // xor al, sil WORD $0xc320 // and bl, al -LBB7_191: +LBB7_99: WORD $0x3040; BYTE $0xf3 // xor bl, sil LONG $0x161c8841 // mov byte [r14 + rdx], bl -LBB7_192: +LBB7_191: MOVQ 1344(SP), SP VZEROUPPER RET -LBB7_65: +LBB7_70: LONG $0xe0e58349 // and r13, -32 WORD $0x894c; BYTE $0xe8 // mov rax, r13 LONG $0x05e0c148 // shl rax, 5 @@ -38954,7 +40295,7 @@ LBB7_65: WORD $0xc031 // xor eax, eax QUAD $0x000000f0249c894c // mov qword [rsp + 240], r11 -LBB7_66: +LBB7_71: WORD $0x8948; BYTE $0xc3 // mov rbx, rax QUAD $0x0000017024848948 // mov qword [rsp + 368], rax LONG $0x05e3c148 // shl rbx, 5 @@ -41078,16 +42419,16 @@ LBB7_66: LONG $0x20c18348 // add rcx, 32 WORD $0x8948; BYTE $0xc8 // mov rax, rcx QUAD $0x00000180248c3b48 // cmp rcx, qword [rsp + 384] - JNE LBB7_66 + JNE LBB7_71 QUAD $0x0000016824ac8b4c // mov r13, qword [rsp + 360] QUAD $0x0000018024ac3b4c // cmp r13, qword [rsp + 384] QUAD $0x000000f824bc8b4c // mov r15, qword [rsp + 248] LONG $0x24748b44; BYTE $0x04 // mov r14d, dword [rsp + 4] QUAD $0x0000024024a48b4c // mov r12, qword [rsp + 576] - JNE LBB7_68 - JMP LBB7_71 + JNE LBB7_73 + JMP LBB7_76 -LBB7_47: +LBB7_52: LONG $0xe0e78349 // and r15, -32 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 @@ -41103,7 +42444,7 @@ LBB7_47: QUAD $0x000000f0249c894c // mov qword [rsp + 240], r11 QUAD $0x00024024b46f7dc5; BYTE $0x00 // vmovdqa ymm14, yword [rsp + 576] -LBB7_48: +LBB7_53: WORD $0x8948; BYTE $0xc3 // mov rbx, rax QUAD $0x0000017024848948 // mov qword [rsp + 368], rax LONG $0x05e3c148 // shl rbx, 5 @@ -43275,14 +44616,14 @@ LBB7_48: LONG $0x20c18348 // add rcx, 32 WORD $0x8948; BYTE $0xc8 // mov rax, rcx QUAD $0x00000168248c3b48 // cmp rcx, qword [rsp + 360] - JNE LBB7_48 + JNE LBB7_53 QUAD $0x0000017824bc8b4c // mov r15, qword [rsp + 376] QUAD $0x0000016824bc3b4c // cmp r15, qword [rsp + 360] QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] LONG $0x24748b44; BYTE $0x04 // mov r14d, dword [rsp + 4] QUAD $0x000001f824a48b4c // mov r12, qword [rsp + 504] - JNE LBB7_50 - JMP LBB7_53 + JNE LBB7_55 + JMP LBB7_58 DATA LCDATA6<>+0x000(SB)/8, $0x0101010101010101 DATA LCDATA6<>+0x008(SB)/8, $0x0101010101010101 @@ -53149,15 +54490,15 @@ TEXT ·_comparison_greater_equal_arr_scalar_avx2(SB), $1384-48 WORD $0x894d; BYTE $0xc2 // mov r10, r8 WORD $0x8949; BYTE $0xcb // mov r11, rcx WORD $0xff83; BYTE $0x06 // cmp edi, 6 - JG LBB10_13 + JG LBB10_15 WORD $0xff83; BYTE $0x03 // cmp edi, 3 - JLE LBB10_25 + JLE LBB10_2 WORD $0xff83; BYTE $0x04 // cmp edi, 4 - JE LBB10_48 + JE LBB10_81 WORD $0xff83; BYTE $0x05 // cmp edi, 5 - JE LBB10_56 + JE LBB10_97 WORD $0xff83; BYTE $0x06 // cmp edi, 6 - JNE LBB10_175 + JNE LBB10_194 WORD $0x8b44; BYTE $0x2a // mov r13d, dword [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -53167,10 +54508,10 @@ TEXT ·_comparison_greater_equal_arr_scalar_avx2(SB), $1384-48 LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_9 + JE LBB10_13 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB10_7: +LBB10_11: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d LONG $0x04768d48 // lea rsi, [rsi + 4] LONG $0x000000ba; BYTE $0x00 // mov edx, 0 @@ -53191,23 +54532,23 @@ LBB10_7: LONG $0x1b3c8841 // mov byte [r11 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_7 + JNE LBB10_11 LONG $0x01c38349 // add r11, 1 -LBB10_9: +LBB10_13: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB10_100 + JL LBB10_14 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 -LBB10_11: +LBB10_115: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d QUAD $0x000000982494930f // setae byte [rsp + 152] LONG $0x046e3944 // cmp dword [rsi + 4], r13d - LONG $0xd7930f40 // setae dil + LONG $0xd2930f41 // setae r10b LONG $0x086e3944 // cmp dword [rsi + 8], r13d LONG $0xd6930f41 // setae r14b LONG $0x0c6e3944 // cmp dword [rsi + 12], r13d @@ -53223,11 +54564,11 @@ LBB10_11: LONG $0x206e3944 // cmp dword [rsi + 32], r13d LONG $0x2454930f; BYTE $0x70 // setae byte [rsp + 112] LONG $0x246e3944 // cmp dword [rsi + 36], r13d - WORD $0x930f; BYTE $0xd2 // setae dl + LONG $0xd7930f40 // setae dil LONG $0x286e3944 // cmp dword [rsi + 40], r13d - LONG $0xd1930f41 // setae r9b + LONG $0xd0930f41 // setae r8b LONG $0x2c6e3944 // cmp dword [rsi + 44], r13d - LONG $0xd2930f41 // setae r10b + LONG $0xd1930f41 // setae r9b LONG $0x306e3944 // cmp dword [rsi + 48], r13d LONG $0xd3930f41 // setae r11b LONG $0x346e3944 // cmp dword [rsi + 52], r13d @@ -53267,67 +54608,68 @@ LBB10_11: LONG $0x786e3944 // cmp dword [rsi + 120], r13d LONG $0x2454930f; BYTE $0x1c // setae byte [rsp + 28] LONG $0x7c6e3944 // cmp dword [rsi + 124], r13d - LONG $0xd0930f41 // setae r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009824bc0240 // add dil, byte [rsp + 152] + WORD $0x930f; BYTE $0xd2 // setae dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009824940244 // add r10b, byte [rsp + 152] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0x70245402 // add dl, byte [rsp + 112] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + LONG $0x247c0240; BYTE $0x70 // add dil, byte [rsp + 112] QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b LONG $0x247cb60f; BYTE $0x78 // movzx edi, byte [rsp + 120] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xd200 // add dl, dl - LONG $0x50245402 // add dl, byte [rsp + 80] - WORD $0xd789 // mov edi, edx - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x0000011024948b48 // mov rdx, qword [rsp + 272] - WORD $0x1a88 // mov byte [rdx], bl + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xc000 // add al, al + LONG $0x50244402 // add al, byte [rsp + 80] + WORD $0xc789 // mov edi, eax + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] + WORD $0x1888 // mov byte [rax], bl LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl + WORD $0x4888; BYTE $0x01 // mov byte [rax + 1], cl WORD $0x0841; BYTE $0xff // or r15b, dil LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] WORD $0xc900 // add cl, cl @@ -53350,33 +54692,33 @@ LBB10_11: WORD $0xd908 // or cl, bl LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xda08 // or dl, bl + WORD $0xca08 // or dl, cl + LONG $0x02788844 // mov byte [rax + 2], r15b + WORD $0x5088; BYTE $0x03 // mov byte [rax + 3], dl LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 - LONG $0x04c28348 // add rdx, 4 - QUAD $0x0000011024948948 // mov qword [rsp + 272], rdx + LONG $0x04c08348 // add rax, 4 + QUAD $0x0000011024848948 // mov qword [rsp + 272], rax QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 - JNE LBB10_11 + JNE LBB10_115 QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JL LBB10_101 - JMP LBB10_175 + JL LBB10_118 + JMP LBB10_194 -LBB10_13: +LBB10_15: WORD $0xff83; BYTE $0x08 // cmp edi, 8 - JLE LBB10_38 + JLE LBB10_16 WORD $0xff83; BYTE $0x09 // cmp edi, 9 - JE LBB10_64 + JE LBB10_150 WORD $0xff83; BYTE $0x0b // cmp edi, 11 - JE LBB10_72 + JE LBB10_166 WORD $0xff83; BYTE $0x0c // cmp edi, 12 - JNE LBB10_175 + JNE LBB10_194 LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 LONG $0xfa490f4d // cmovns r15, r10 @@ -53386,14 +54728,15 @@ LBB10_13: WORD $0xe083; BYTE $0xf8 // and eax, -8 LONG $0x0210fbc5 // vmovsd xmm0, qword [rdx] WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_21 + JE LBB10_31 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB10_19: - LONG $0x062ef9c5 // vucomisd xmm0, qword [rsi] - WORD $0x960f; BYTE $0xd2 // setbe dl +LBB10_29: + LONG $0x0e10fbc5 // vmovsd xmm1, qword [rsi] LONG $0x08c68348 // add rsi, 8 - WORD $0xdaf6 // neg dl + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0x000000ba; BYTE $0x00 // mov edx, 0 + WORD $0xd280; BYTE $0xff // adc dl, -1 LONG $0x07788d48 // lea rdi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax @@ -53410,186 +54753,214 @@ LBB10_19: LONG $0x3b1c8841 // mov byte [r11 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_19 + JNE LBB10_29 LONG $0x01c38349 // add r11, 1 -LBB10_21: +LBB10_31: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB10_103 + JL LBB10_32 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 QUAD $0x0000009824bc894c // mov qword [rsp + 152], r15 QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 -LBB10_23: - LONG $0x062ef9c5 // vucomisd xmm0, qword [rsi] - QUAD $0x000000a02494960f // setbe byte [rsp + 160] - LONG $0x462ef9c5; BYTE $0x08 // vucomisd xmm0, qword [rsi + 8] - LONG $0xd1960f41 // setbe r9b - LONG $0x462ef9c5; BYTE $0x10 // vucomisd xmm0, qword [rsi + 16] - LONG $0xd6960f41 // setbe r14b - LONG $0x462ef9c5; BYTE $0x18 // vucomisd xmm0, qword [rsi + 24] - LONG $0xd5960f41 // setbe r13b - LONG $0x462ef9c5; BYTE $0x20 // vucomisd xmm0, qword [rsi + 32] - QUAD $0x000000902494960f // setbe byte [rsp + 144] - LONG $0x462ef9c5; BYTE $0x28 // vucomisd xmm0, qword [rsi + 40] - LONG $0x2454960f; BYTE $0x60 // setbe byte [rsp + 96] - LONG $0x462ef9c5; BYTE $0x30 // vucomisd xmm0, qword [rsi + 48] - WORD $0x960f; BYTE $0xd0 // setbe al - LONG $0x462ef9c5; BYTE $0x38 // vucomisd xmm0, qword [rsi + 56] - WORD $0x960f; BYTE $0xd3 // setbe bl - LONG $0x462ef9c5; BYTE $0x40 // vucomisd xmm0, qword [rsi + 64] - LONG $0x2454960f; BYTE $0x78 // setbe byte [rsp + 120] - LONG $0x462ef9c5; BYTE $0x48 // vucomisd xmm0, qword [rsi + 72] - WORD $0x960f; BYTE $0xd2 // setbe dl - LONG $0x462ef9c5; BYTE $0x50 // vucomisd xmm0, qword [rsi + 80] - LONG $0xd7960f40 // setbe dil - LONG $0x462ef9c5; BYTE $0x58 // vucomisd xmm0, qword [rsi + 88] - LONG $0xd2960f41 // setbe r10b - LONG $0x462ef9c5; BYTE $0x60 // vucomisd xmm0, qword [rsi + 96] - LONG $0xd3960f41 // setbe r11b - LONG $0x462ef9c5; BYTE $0x68 // vucomisd xmm0, qword [rsi + 104] - LONG $0xd4960f41 // setbe r12b - LONG $0x462ef9c5; BYTE $0x70 // vucomisd xmm0, qword [rsi + 112] - QUAD $0x000000802494960f // setbe byte [rsp + 128] - LONG $0x462ef9c5; BYTE $0x78 // vucomisd xmm0, qword [rsi + 120] - WORD $0x960f; BYTE $0xd1 // setbe cl - QUAD $0x00000080862ef9c5 // vucomisd xmm0, qword [rsi + 128] - LONG $0x2454960f; BYTE $0x50 // setbe byte [rsp + 80] - QUAD $0x00000088862ef9c5 // vucomisd xmm0, qword [rsi + 136] - LONG $0x2454960f; BYTE $0x70 // setbe byte [rsp + 112] - QUAD $0x00000090862ef9c5 // vucomisd xmm0, qword [rsi + 144] - QUAD $0x000000882494960f // setbe byte [rsp + 136] - QUAD $0x00000098862ef9c5 // vucomisd xmm0, qword [rsi + 152] - LONG $0x2454960f; BYTE $0x48 // setbe byte [rsp + 72] - QUAD $0x000000a0862ef9c5 // vucomisd xmm0, qword [rsi + 160] - LONG $0x2454960f; BYTE $0x58 // setbe byte [rsp + 88] - QUAD $0x000000a8862ef9c5 // vucomisd xmm0, qword [rsi + 168] - LONG $0x2454960f; BYTE $0x68 // setbe byte [rsp + 104] - QUAD $0x000000b0862ef9c5 // vucomisd xmm0, qword [rsi + 176] - LONG $0x2454960f; BYTE $0x40 // setbe byte [rsp + 64] - QUAD $0x000000b8862ef9c5 // vucomisd xmm0, qword [rsi + 184] - LONG $0xd7960f41 // setbe r15b - QUAD $0x000000c0862ef9c5 // vucomisd xmm0, qword [rsi + 192] - LONG $0x2454960f; BYTE $0x20 // setbe byte [rsp + 32] - QUAD $0x000000c8862ef9c5 // vucomisd xmm0, qword [rsi + 200] - LONG $0x2454960f; BYTE $0x28 // setbe byte [rsp + 40] - QUAD $0x000000d0862ef9c5 // vucomisd xmm0, qword [rsi + 208] - LONG $0x2454960f; BYTE $0x30 // setbe byte [rsp + 48] - QUAD $0x000000d8862ef9c5 // vucomisd xmm0, qword [rsi + 216] - LONG $0x2454960f; BYTE $0x38 // setbe byte [rsp + 56] - QUAD $0x000000e0862ef9c5 // vucomisd xmm0, qword [rsi + 224] - QUAD $0x000001402494960f // setbe byte [rsp + 320] - QUAD $0x000000e8862ef9c5 // vucomisd xmm0, qword [rsi + 232] - QUAD $0x000001202494960f // setbe byte [rsp + 288] - QUAD $0x000000f0862ef9c5 // vucomisd xmm0, qword [rsi + 240] - LONG $0x2454960f; BYTE $0x1c // setbe byte [rsp + 28] - QUAD $0x000000f8862ef9c5 // vucomisd xmm0, qword [rsi + 248] - LONG $0xd0960f41 // setbe r8b - WORD $0x0045; BYTE $0xc9 // add r9b, r9b - QUAD $0x000000a0248c0244 // add r9b, byte [rsp + 160] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0845; BYTE $0xce // or r14b, r9b +LBB10_183: + LONG $0x0e10fbc5 // vmovsd xmm1, qword [rsi] + LONG $0x5610fbc5; BYTE $0x08 // vmovsd xmm2, qword [rsi + 8] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0x2454930f; BYTE $0x78 // setae byte [rsp + 120] + LONG $0xd02ef9c5 // vucomisd xmm2, xmm0 + WORD $0x930f; BYTE $0xd2 // setae dl + LONG $0x4e10fbc5; BYTE $0x10 // vmovsd xmm1, qword [rsi + 16] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0xd7930f40 // setae dil + LONG $0x4e10fbc5; BYTE $0x18 // vmovsd xmm1, qword [rsi + 24] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0xd0930f41 // setae r8b + LONG $0x4e10fbc5; BYTE $0x20 // vmovsd xmm1, qword [rsi + 32] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0xd1930f41 // setae r9b + LONG $0x4e10fbc5; BYTE $0x28 // vmovsd xmm1, qword [rsi + 40] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + QUAD $0x000000a02494930f // setae byte [rsp + 160] + LONG $0x4e10fbc5; BYTE $0x30 // vmovsd xmm1, qword [rsi + 48] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + QUAD $0x000000802494930f // setae byte [rsp + 128] + LONG $0x4e10fbc5; BYTE $0x38 // vmovsd xmm1, qword [rsi + 56] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0x2454930f; BYTE $0x70 // setae byte [rsp + 112] + LONG $0x4e10fbc5; BYTE $0x40 // vmovsd xmm1, qword [rsi + 64] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0x2454930f; BYTE $0x60 // setae byte [rsp + 96] + LONG $0x4e10fbc5; BYTE $0x48 // vmovsd xmm1, qword [rsi + 72] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0xd2930f41 // setae r10b + LONG $0x4e10fbc5; BYTE $0x50 // vmovsd xmm1, qword [rsi + 80] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + WORD $0x930f; BYTE $0xd3 // setae bl + LONG $0x4e10fbc5; BYTE $0x58 // vmovsd xmm1, qword [rsi + 88] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0xd7930f41 // setae r15b + LONG $0x4e10fbc5; BYTE $0x60 // vmovsd xmm1, qword [rsi + 96] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + WORD $0x930f; BYTE $0xd0 // setae al + LONG $0x4e10fbc5; BYTE $0x68 // vmovsd xmm1, qword [rsi + 104] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + QUAD $0x000000902494930f // setae byte [rsp + 144] + LONG $0x4e10fbc5; BYTE $0x70 // vmovsd xmm1, qword [rsi + 112] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0x2454930f; BYTE $0x58 // setae byte [rsp + 88] + LONG $0x4e10fbc5; BYTE $0x78 // vmovsd xmm1, qword [rsi + 120] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0x2454930f; BYTE $0x48 // setae byte [rsp + 72] + QUAD $0x000000808e10fbc5 // vmovsd xmm1, qword [rsi + 128] + QUAD $0x000000889610fbc5 // vmovsd xmm2, qword [rsi + 136] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + QUAD $0x000000908e10fbc5 // vmovsd xmm1, qword [rsi + 144] + LONG $0x2454930f; BYTE $0x28 // setae byte [rsp + 40] + LONG $0xd02ef9c5 // vucomisd xmm2, xmm0 + QUAD $0x000000989610fbc5 // vmovsd xmm2, qword [rsi + 152] + LONG $0xd3930f41 // setae r11b + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + QUAD $0x000000a08e10fbc5 // vmovsd xmm1, qword [rsi + 160] + LONG $0xd6930f41 // setae r14b + LONG $0xd02ef9c5 // vucomisd xmm2, xmm0 + QUAD $0x000000a89610fbc5 // vmovsd xmm2, qword [rsi + 168] + LONG $0xd4930f41 // setae r12b + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + QUAD $0x000000b08e10fbc5 // vmovsd xmm1, qword [rsi + 176] + QUAD $0x000000882494930f // setae byte [rsp + 136] + LONG $0xd02ef9c5 // vucomisd xmm2, xmm0 + QUAD $0x000000b89610fbc5 // vmovsd xmm2, qword [rsi + 184] + LONG $0x2454930f; BYTE $0x50 // setae byte [rsp + 80] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + QUAD $0x000000c08e10fbc5 // vmovsd xmm1, qword [rsi + 192] + LONG $0x2454930f; BYTE $0x68 // setae byte [rsp + 104] + LONG $0xd02ef9c5 // vucomisd xmm2, xmm0 + QUAD $0x000000c89610fbc5 // vmovsd xmm2, qword [rsi + 200] + LONG $0xd5930f41 // setae r13b + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + QUAD $0x000000d08e10fbc5 // vmovsd xmm1, qword [rsi + 208] + QUAD $0x000001202494930f // setae byte [rsp + 288] + LONG $0xd02ef9c5 // vucomisd xmm2, xmm0 + QUAD $0x000000d89610fbc5 // vmovsd xmm2, qword [rsi + 216] + LONG $0x2454930f; BYTE $0x40 // setae byte [rsp + 64] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + QUAD $0x000000e08e10fbc5 // vmovsd xmm1, qword [rsi + 224] + LONG $0x2454930f; BYTE $0x30 // setae byte [rsp + 48] + LONG $0xd02ef9c5 // vucomisd xmm2, xmm0 + QUAD $0x000000e89610fbc5 // vmovsd xmm2, qword [rsi + 232] + LONG $0x2454930f; BYTE $0x38 // setae byte [rsp + 56] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + QUAD $0x000000f08e10fbc5 // vmovsd xmm1, qword [rsi + 240] + LONG $0x2454930f; BYTE $0x20 // setae byte [rsp + 32] + LONG $0xd02ef9c5 // vucomisd xmm2, xmm0 + QUAD $0x000000f89610fbc5 // vmovsd xmm2, qword [rsi + 248] + QUAD $0x000001402494930f // setae byte [rsp + 320] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0x2454930f; BYTE $0x1c // setae byte [rsp + 28] + LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 + LONG $0xd02ef9c5 // vucomisd xmm2, xmm0 + WORD $0x930f; BYTE $0xd1 // setae cl WORD $0xd200 // add dl, dl LONG $0x78245402 // add dl, byte [rsp + 120] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xf5 // or r13b, r14b LONG $0x02e7c040 // shl dil, 2 WORD $0x0840; BYTE $0xd7 // or dil, dl - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0844; BYTE $0xea // or dl, r13b - WORD $0x8941; BYTE $0xd1 // mov r9d, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] + LONG $0x03e0c041 // shl r8b, 3 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + LONG $0x04e1c041 // shl r9b, 4 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + QUAD $0x000000a02494b60f // movzx edx, byte [rsp + 160] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0x0844; BYTE $0xca // or dl, r9b - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b - QUAD $0x0000008024bcb60f // movzx edi, byte [rsp + 128] - LONG $0x06e7c040 // shl dil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] - WORD $0xc000 // add al, al - LONG $0x50244402 // add al, byte [rsp + 80] - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 + QUAD $0x0000802484b60f44; BYTE $0x00 // movzx r8d, byte [rsp + 128] + LONG $0x06e0c041 // shl r8b, 6 + LONG $0x247cb60f; BYTE $0x70 // movzx edi, byte [rsp + 112] + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + LONG $0x24540244; BYTE $0x60 // add r10b, byte [rsp + 96] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0x0844; BYTE $0xd3 // or bl, r10b + LONG $0x03e7c041 // shl r15b, 3 + WORD $0x0841; BYTE $0xdf // or r15b, bl + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xf8 // or al, r15b + WORD $0x0840; BYTE $0xd7 // or dil, dl + QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] + WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + LONG $0x245cb60f; BYTE $0x48 // movzx ebx, byte [rsp + 72] + WORD $0xe3c0; BYTE $0x07 // shl bl, 7 + WORD $0xc308 // or bl, al + WORD $0x0045; BYTE $0xdb // add r11b, r11b + LONG $0x245c0244; BYTE $0x28 // add r11b, byte [rsp + 40] + LONG $0x02e6c041 // shl r14b, 2 + WORD $0x0845; BYTE $0xde // or r14b, r11b + LONG $0x03e4c041 // shl r12b, 3 + WORD $0x0845; BYTE $0xf4 // or r12b, r14b + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xe0 // or al, r12b + WORD $0x8941; BYTE $0xc0 // mov r8d, eax + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0844; BYTE $0xc0 // or al, r8b + WORD $0xd308 // or bl, dl LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx + WORD $0xe2c0; BYTE $0x06 // shl dl, 6 + LONG $0x07e5c041 // shl r13b, 7 + WORD $0x0841; BYTE $0xd5 // or r13b, dl QUAD $0x0000011024948b48 // mov rdx, qword [rsp + 272] - WORD $0x1a88 // mov byte [rdx], bl - LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl - WORD $0x0841; BYTE $0xff // or r15b, dil - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000140248cb60f // movzx ecx, byte [rsp + 320] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd908 // or cl, bl + WORD $0x8840; BYTE $0x3a // mov byte [rdx], dil + WORD $0x0841; BYTE $0xc5 // or r13b, al + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + WORD $0xc000 // add al, al + LONG $0x20248402; WORD $0x0001; BYTE $0x00 // add al, byte [rsp + 288] + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0x5a88; BYTE $0x01 // mov byte [rdx + 1], bl LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b - LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + LONG $0x026a8844 // mov byte [rdx + 2], r13b + WORD $0xc108 // or cl, al + WORD $0x4a88; BYTE $0x03 // mov byte [rdx + 3], cl LONG $0x04c28348 // add rdx, 4 QUAD $0x0000011024948948 // mov qword [rsp + 272], rdx QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 - JNE LBB10_23 + JNE LBB10_183 QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] QUAD $0x000000a824bc8b4c // mov r15, qword [rsp + 168] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JL LBB10_104 - JMP LBB10_175 + JL LBB10_186 + JMP LBB10_194 -LBB10_25: +LBB10_2: WORD $0xff83; BYTE $0x02 // cmp edi, 2 - JE LBB10_80 + JE LBB10_33 WORD $0xff83; BYTE $0x03 // cmp edi, 3 - JNE LBB10_175 + JNE LBB10_194 WORD $0x8a44; BYTE $0x32 // mov r14b, byte [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -53599,11 +54970,11 @@ LBB10_25: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_128 + JE LBB10_5 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d WORD $0x894d; BYTE $0xdd // mov r13, r11 -LBB10_29: +LBB10_59: WORD $0x3844; BYTE $0x36 // cmp byte [rsi], r14b LONG $0x01768d48 // lea rsi, [rsi + 1] WORD $0x9d0f; BYTE $0xd2 // setge dl @@ -53624,40 +54995,40 @@ LBB10_29: LONG $0x3d5c8841; BYTE $0x00 // mov byte [r13 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_29 + JNE LBB10_59 LONG $0x01c58349 // add r13, 1 LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB10_129 + JL LBB10_62 -LBB10_31: +LBB10_63: LONG $0x20ff8349 // cmp r15, 32 LONG $0x24748944; BYTE $0x1c // mov dword [rsp + 28], r14d QUAD $0x000001182494894c // mov qword [rsp + 280], r10 QUAD $0x0000026024bc894c // mov qword [rsp + 608], r15 - JB LBB10_34 + JB LBB10_64 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi WORD $0x3949; BYTE $0xc5 // cmp r13, rax - JAE LBB10_182 + JAE LBB10_67 QUAD $0x00000000bd048d4a // lea rax, [4*r15] WORD $0x014c; BYTE $0xe8 // add rax, r13 WORD $0x3948; BYTE $0xc6 // cmp rsi, rax - JAE LBB10_182 + JAE LBB10_67 -LBB10_34: +LBB10_64: WORD $0xc031 // xor eax, eax QUAD $0x000001a024848948 // mov qword [rsp + 416], rax WORD $0x8949; BYTE $0xf4 // mov r12, rsi QUAD $0x0000016824ac894c // mov qword [rsp + 360], r13 -LBB10_35: +LBB10_70: WORD $0x894d; BYTE $0xfd // mov r13, r15 QUAD $0x000001a024ac2b4c // sub r13, qword [rsp + 416] QUAD $0x0000009824ac894c // mov qword [rsp + 152], r13 -LBB10_36: +LBB10_71: WORD $0x894c; BYTE $0xe1 // mov rcx, r12 LONG $0x24343845 // cmp byte [r12], r14b LONG $0x24549d0f; BYTE $0x20 // setge byte [rsp + 32] @@ -53820,16 +55191,16 @@ LBB10_36: LONG $0x04c68348 // add rsi, 4 QUAD $0x0000016824b48948 // mov qword [rsp + 360], rsi QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 - JNE LBB10_36 + JNE LBB10_71 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] QUAD $0x0000026024bc8b4c // mov r15, qword [rsp + 608] - JMP LBB10_130 + JMP LBB10_73 -LBB10_38: +LBB10_16: WORD $0xff83; BYTE $0x07 // cmp edi, 7 - JE LBB10_92 + JE LBB10_124 WORD $0xff83; BYTE $0x08 // cmp edi, 8 - JNE LBB10_175 + JNE LBB10_194 WORD $0x8b4c; BYTE $0x2a // mov r13, qword [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -53839,10 +55210,10 @@ LBB10_38: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_44 + JE LBB10_22 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB10_42: +LBB10_20: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 LONG $0x08768d48 // lea rsi, [rsi + 8] LONG $0x000000ba; BYTE $0x00 // mov edx, 0 @@ -53863,23 +55234,23 @@ LBB10_42: LONG $0x1b3c8841 // mov byte [r11 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_42 + JNE LBB10_20 LONG $0x01c38349 // add r11, 1 -LBB10_44: +LBB10_22: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB10_106 + JL LBB10_23 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 -LBB10_46: +LBB10_141: QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 QUAD $0x000000982494930f // setae byte [rsp + 152] LONG $0x086e394c // cmp qword [rsi + 8], r13 - LONG $0xd7930f40 // setae dil + LONG $0xd2930f41 // setae r10b LONG $0x106e394c // cmp qword [rsi + 16], r13 LONG $0xd6930f41 // setae r14b LONG $0x186e394c // cmp qword [rsi + 24], r13 @@ -53895,11 +55266,11 @@ LBB10_46: LONG $0x406e394c // cmp qword [rsi + 64], r13 LONG $0x2454930f; BYTE $0x70 // setae byte [rsp + 112] LONG $0x486e394c // cmp qword [rsi + 72], r13 - WORD $0x930f; BYTE $0xd2 // setae dl + LONG $0xd7930f40 // setae dil LONG $0x506e394c // cmp qword [rsi + 80], r13 - LONG $0xd1930f41 // setae r9b + LONG $0xd0930f41 // setae r8b LONG $0x586e394c // cmp qword [rsi + 88], r13 - LONG $0xd2930f41 // setae r10b + LONG $0xd1930f41 // setae r9b LONG $0x606e394c // cmp qword [rsi + 96], r13 LONG $0xd3930f41 // setae r11b LONG $0x686e394c // cmp qword [rsi + 104], r13 @@ -53939,32 +55310,33 @@ LBB10_46: LONG $0xf0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 240], r13 LONG $0x2454930f; BYTE $0x1c // setae byte [rsp + 28] LONG $0xf8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 248], r13 - LONG $0xd0930f41 // setae r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009824bc0240 // add dil, byte [rsp + 152] + WORD $0x930f; BYTE $0xd2 // setae dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009824940244 // add r10b, byte [rsp + 152] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0x70245402 // add dl, byte [rsp + 112] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + LONG $0x247c0240; BYTE $0x70 // add dil, byte [rsp + 112] QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b QUAD $0x00000110249c8b4c // mov r11, qword [rsp + 272] @@ -53972,73 +55344,73 @@ LBB10_46: LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xd200 // add dl, dl - LONG $0x50245402 // add dl, byte [rsp + 80] - WORD $0xd789 // mov edi, edx - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xc000 // add al, al + LONG $0x50244402 // add al, byte [rsp + 80] + WORD $0xc789 // mov edi, eax + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil WORD $0x8841; BYTE $0x1b // mov byte [r11], bl LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl LONG $0x014b8841 // mov byte [r11 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - QUAD $0x00000140248cb60f // movzx ecx, byte [rsp + 320] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x1c // movzx edx, byte [rsp + 28] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0841; BYTE $0xc7 // or r15b, al + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0xc000 // add al, al + LONG $0x20244402 // add al, byte [rsp + 32] + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xc808 // or al, cl + LONG $0x244cb60f; BYTE $0x1c // movzx ecx, byte [rsp + 28] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xca08 // or dl, cl + WORD $0xc208 // or dl, al LONG $0x027b8845 // mov byte [r11 + 2], r15b - LONG $0x03438845 // mov byte [r11 + 3], r8b + LONG $0x03538841 // mov byte [r11 + 3], dl LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 LONG $0x04c38349 // add r11, 4 QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 - JNE LBB10_46 + JNE LBB10_141 WORD $0x894d; BYTE $0xde // mov r14, r11 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JL LBB10_107 - JMP LBB10_175 + JL LBB10_144 + JMP LBB10_194 -LBB10_48: +LBB10_81: LONG $0x2ab70f44 // movzx r13d, word [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -54048,10 +55420,10 @@ LBB10_48: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_52 + JE LBB10_85 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB10_50: +LBB10_83: LONG $0x2e394466 // cmp word [rsi], r13w LONG $0x02768d48 // lea rsi, [rsi + 2] LONG $0x000000ba; BYTE $0x00 // mov edx, 0 @@ -54072,23 +55444,23 @@ LBB10_50: LONG $0x1b3c8841 // mov byte [r11 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_50 + JNE LBB10_83 LONG $0x01c38349 // add r11, 1 -LBB10_52: +LBB10_85: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB10_109 + JL LBB10_86 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 -LBB10_54: +LBB10_88: LONG $0x2e394466 // cmp word [rsi], r13w WORD $0x930f; BYTE $0xd0 // setae al LONG $0x6e394466; BYTE $0x02 // cmp word [rsi + 2], r13w - LONG $0xd7930f40 // setae dil + LONG $0xd2930f41 // setae r10b LONG $0x6e394466; BYTE $0x04 // cmp word [rsi + 4], r13w LONG $0xd6930f41 // setae r14b LONG $0x6e394466; BYTE $0x06 // cmp word [rsi + 6], r13w @@ -54104,11 +55476,11 @@ LBB10_54: LONG $0x6e394466; BYTE $0x10 // cmp word [rsi + 16], r13w LONG $0x2454930f; BYTE $0x70 // setae byte [rsp + 112] LONG $0x6e394466; BYTE $0x12 // cmp word [rsi + 18], r13w - WORD $0x930f; BYTE $0xd2 // setae dl + LONG $0xd7930f40 // setae dil LONG $0x6e394466; BYTE $0x14 // cmp word [rsi + 20], r13w - LONG $0xd1930f41 // setae r9b + LONG $0xd0930f41 // setae r8b LONG $0x6e394466; BYTE $0x16 // cmp word [rsi + 22], r13w - LONG $0xd2930f41 // setae r10b + LONG $0xd1930f41 // setae r9b LONG $0x6e394466; BYTE $0x18 // cmp word [rsi + 24], r13w LONG $0xd3930f41 // setae r11b LONG $0x6e394466; BYTE $0x1a // cmp word [rsi + 26], r13w @@ -54148,68 +55520,69 @@ LBB10_54: LONG $0x6e394466; BYTE $0x3c // cmp word [rsi + 60], r13w LONG $0x2454930f; BYTE $0x1c // setae byte [rsp + 28] LONG $0x6e394466; BYTE $0x3e // cmp word [rsi + 62], r13w - LONG $0xd0930f41 // setae r8b - WORD $0x0040; BYTE $0xff // add dil, dil - WORD $0x0840; BYTE $0xc7 // or dil, al + WORD $0x930f; BYTE $0xd2 // setae dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + WORD $0x0841; BYTE $0xc2 // or r10b, al QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0x70245402 // add dl, byte [rsp + 112] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + LONG $0x247c0240; BYTE $0x70 // add dil, byte [rsp + 112] QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b LONG $0x247cb60f; BYTE $0x78 // movzx edi, byte [rsp + 120] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xd200 // add dl, dl - LONG $0x50245402 // add dl, byte [rsp + 80] - WORD $0xd789 // mov edi, edx - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x0000011024948b48 // mov rdx, qword [rsp + 272] - WORD $0x1a88 // mov byte [rdx], bl + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xc000 // add al, al + LONG $0x50244402 // add al, byte [rsp + 80] + WORD $0xc789 // mov edi, eax + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] + WORD $0x1888 // mov byte [rax], bl LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl + WORD $0x4888; BYTE $0x01 // mov byte [rax + 1], cl WORD $0x0841; BYTE $0xff // or r15b, dil LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] WORD $0xc900 // add cl, cl @@ -54232,25 +55605,25 @@ LBB10_54: WORD $0xd908 // or cl, bl LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xda08 // or dl, bl + WORD $0xca08 // or dl, cl + LONG $0x02788844 // mov byte [rax + 2], r15b + WORD $0x5088; BYTE $0x03 // mov byte [rax + 3], dl LONG $0x40c68348 // add rsi, 64 - LONG $0x04c28348 // add rdx, 4 - QUAD $0x0000011024948948 // mov qword [rsp + 272], rdx + LONG $0x04c08348 // add rax, 4 + QUAD $0x0000011024848948 // mov qword [rsp + 272], rax QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 - JNE LBB10_54 + JNE LBB10_88 QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JL LBB10_110 - JMP LBB10_175 + JL LBB10_91 + JMP LBB10_194 -LBB10_56: +LBB10_97: LONG $0x2ab70f44 // movzx r13d, word [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -54260,10 +55633,10 @@ LBB10_56: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_60 + JE LBB10_101 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB10_58: +LBB10_99: LONG $0x2e394466 // cmp word [rsi], r13w LONG $0x02768d48 // lea rsi, [rsi + 2] WORD $0x9d0f; BYTE $0xd2 // setge dl @@ -54284,23 +55657,23 @@ LBB10_58: LONG $0x1b3c8841 // mov byte [r11 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_58 + JNE LBB10_99 LONG $0x01c38349 // add r11, 1 -LBB10_60: +LBB10_101: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB10_112 + JL LBB10_102 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 -LBB10_62: +LBB10_104: LONG $0x2e394466 // cmp word [rsi], r13w QUAD $0x0000009824949d0f // setge byte [rsp + 152] LONG $0x6e394466; BYTE $0x02 // cmp word [rsi + 2], r13w - LONG $0xd79d0f40 // setge dil + LONG $0xd29d0f41 // setge r10b LONG $0x6e394466; BYTE $0x04 // cmp word [rsi + 4], r13w LONG $0xd69d0f41 // setge r14b LONG $0x6e394466; BYTE $0x06 // cmp word [rsi + 6], r13w @@ -54316,11 +55689,11 @@ LBB10_62: LONG $0x6e394466; BYTE $0x10 // cmp word [rsi + 16], r13w LONG $0x24549d0f; BYTE $0x70 // setge byte [rsp + 112] LONG $0x6e394466; BYTE $0x12 // cmp word [rsi + 18], r13w - WORD $0x9d0f; BYTE $0xd2 // setge dl + LONG $0xd79d0f40 // setge dil LONG $0x6e394466; BYTE $0x14 // cmp word [rsi + 20], r13w - LONG $0xd19d0f41 // setge r9b + LONG $0xd09d0f41 // setge r8b LONG $0x6e394466; BYTE $0x16 // cmp word [rsi + 22], r13w - LONG $0xd29d0f41 // setge r10b + LONG $0xd19d0f41 // setge r9b LONG $0x6e394466; BYTE $0x18 // cmp word [rsi + 24], r13w LONG $0xd39d0f41 // setge r11b LONG $0x6e394466; BYTE $0x1a // cmp word [rsi + 26], r13w @@ -54360,67 +55733,68 @@ LBB10_62: LONG $0x6e394466; BYTE $0x3c // cmp word [rsi + 60], r13w LONG $0x24549d0f; BYTE $0x1c // setge byte [rsp + 28] LONG $0x6e394466; BYTE $0x3e // cmp word [rsi + 62], r13w - LONG $0xd09d0f41 // setge r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009824bc0240 // add dil, byte [rsp + 152] + WORD $0x9d0f; BYTE $0xd2 // setge dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009824940244 // add r10b, byte [rsp + 152] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0x70245402 // add dl, byte [rsp + 112] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + LONG $0x247c0240; BYTE $0x70 // add dil, byte [rsp + 112] QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b LONG $0x247cb60f; BYTE $0x78 // movzx edi, byte [rsp + 120] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xd200 // add dl, dl - LONG $0x50245402 // add dl, byte [rsp + 80] - WORD $0xd789 // mov edi, edx - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x0000011024948b48 // mov rdx, qword [rsp + 272] - WORD $0x1a88 // mov byte [rdx], bl + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xc000 // add al, al + LONG $0x50244402 // add al, byte [rsp + 80] + WORD $0xc789 // mov edi, eax + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] + WORD $0x1888 // mov byte [rax], bl LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl + WORD $0x4888; BYTE $0x01 // mov byte [rax + 1], cl WORD $0x0841; BYTE $0xff // or r15b, dil LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] WORD $0xc900 // add cl, cl @@ -54443,25 +55817,25 @@ LBB10_62: WORD $0xd908 // or cl, bl LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xda08 // or dl, bl + WORD $0xca08 // or dl, cl + LONG $0x02788844 // mov byte [rax + 2], r15b + WORD $0x5088; BYTE $0x03 // mov byte [rax + 3], dl LONG $0x40c68348 // add rsi, 64 - LONG $0x04c28348 // add rdx, 4 - QUAD $0x0000011024948948 // mov qword [rsp + 272], rdx + LONG $0x04c08348 // add rax, 4 + QUAD $0x0000011024848948 // mov qword [rsp + 272], rax QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 - JNE LBB10_62 + JNE LBB10_104 QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JL LBB10_113 - JMP LBB10_175 + JL LBB10_107 + JMP LBB10_194 -LBB10_64: +LBB10_150: WORD $0x8b4c; BYTE $0x2a // mov r13, qword [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -54471,10 +55845,10 @@ LBB10_64: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_68 + JE LBB10_154 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB10_66: +LBB10_152: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 LONG $0x08768d48 // lea rsi, [rsi + 8] WORD $0x9d0f; BYTE $0xd2 // setge dl @@ -54495,23 +55869,23 @@ LBB10_66: LONG $0x1b3c8841 // mov byte [r11 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_66 + JNE LBB10_152 LONG $0x01c38349 // add r11, 1 -LBB10_68: +LBB10_154: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB10_115 + JL LBB10_155 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 -LBB10_70: +LBB10_157: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 QUAD $0x0000009824949d0f // setge byte [rsp + 152] LONG $0x086e394c // cmp qword [rsi + 8], r13 - LONG $0xd79d0f40 // setge dil + LONG $0xd29d0f41 // setge r10b LONG $0x106e394c // cmp qword [rsi + 16], r13 LONG $0xd69d0f41 // setge r14b LONG $0x186e394c // cmp qword [rsi + 24], r13 @@ -54527,11 +55901,11 @@ LBB10_70: LONG $0x406e394c // cmp qword [rsi + 64], r13 LONG $0x24549d0f; BYTE $0x70 // setge byte [rsp + 112] LONG $0x486e394c // cmp qword [rsi + 72], r13 - WORD $0x9d0f; BYTE $0xd2 // setge dl + LONG $0xd79d0f40 // setge dil LONG $0x506e394c // cmp qword [rsi + 80], r13 - LONG $0xd19d0f41 // setge r9b + LONG $0xd09d0f41 // setge r8b LONG $0x586e394c // cmp qword [rsi + 88], r13 - LONG $0xd29d0f41 // setge r10b + LONG $0xd19d0f41 // setge r9b LONG $0x606e394c // cmp qword [rsi + 96], r13 LONG $0xd39d0f41 // setge r11b LONG $0x686e394c // cmp qword [rsi + 104], r13 @@ -54571,67 +55945,68 @@ LBB10_70: LONG $0xf0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 240], r13 LONG $0x24549d0f; BYTE $0x1c // setge byte [rsp + 28] LONG $0xf8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 248], r13 - LONG $0xd09d0f41 // setge r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009824bc0240 // add dil, byte [rsp + 152] + WORD $0x9d0f; BYTE $0xd2 // setge dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009824940244 // add r10b, byte [rsp + 152] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0x70245402 // add dl, byte [rsp + 112] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + LONG $0x247c0240; BYTE $0x70 // add dil, byte [rsp + 112] QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b LONG $0x247cb60f; BYTE $0x78 // movzx edi, byte [rsp + 120] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xd200 // add dl, dl - LONG $0x50245402 // add dl, byte [rsp + 80] - WORD $0xd789 // mov edi, edx - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x0000011024948b48 // mov rdx, qword [rsp + 272] - WORD $0x1a88 // mov byte [rdx], bl + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xc000 // add al, al + LONG $0x50244402 // add al, byte [rsp + 80] + WORD $0xc789 // mov edi, eax + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x0000011024848b48 // mov rax, qword [rsp + 272] + WORD $0x1888 // mov byte [rax], bl LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl + WORD $0x4888; BYTE $0x01 // mov byte [rax + 1], cl WORD $0x0841; BYTE $0xff // or r15b, dil LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] WORD $0xc900 // add cl, cl @@ -54654,25 +56029,25 @@ LBB10_70: WORD $0xd908 // or cl, bl LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xda08 // or dl, bl + WORD $0xca08 // or dl, cl + LONG $0x02788844 // mov byte [rax + 2], r15b + WORD $0x5088; BYTE $0x03 // mov byte [rax + 3], dl LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 - LONG $0x04c28348 // add rdx, 4 - QUAD $0x0000011024948948 // mov qword [rsp + 272], rdx + LONG $0x04c08348 // add rax, 4 + QUAD $0x0000011024848948 // mov qword [rsp + 272], rax QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 - JNE LBB10_70 + JNE LBB10_157 QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JL LBB10_116 - JMP LBB10_175 + JL LBB10_160 + JMP LBB10_194 -LBB10_72: +LBB10_166: LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 LONG $0xfa490f4d // cmovns r15, r10 @@ -54682,14 +56057,15 @@ LBB10_72: WORD $0xe083; BYTE $0xf8 // and eax, -8 LONG $0x0210fac5 // vmovss xmm0, dword [rdx] WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_76 + JE LBB10_170 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB10_74: - LONG $0x062ef8c5 // vucomiss xmm0, dword [rsi] - WORD $0x960f; BYTE $0xd2 // setbe dl +LBB10_168: + LONG $0x0e10fac5 // vmovss xmm1, dword [rsi] LONG $0x04c68348 // add rsi, 4 - WORD $0xdaf6 // neg dl + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x000000ba; BYTE $0x00 // mov edx, 0 + WORD $0xd280; BYTE $0xff // adc dl, -1 LONG $0x07788d48 // lea rdi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax @@ -54706,182 +56082,210 @@ LBB10_74: LONG $0x3b1c8841 // mov byte [r11 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_74 + JNE LBB10_168 LONG $0x01c38349 // add r11, 1 -LBB10_76: +LBB10_170: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB10_118 + JL LBB10_171 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 QUAD $0x0000009824bc894c // mov qword [rsp + 152], r15 QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 -LBB10_78: - LONG $0x062ef8c5 // vucomiss xmm0, dword [rsi] - QUAD $0x000000a02494960f // setbe byte [rsp + 160] - LONG $0x462ef8c5; BYTE $0x04 // vucomiss xmm0, dword [rsi + 4] - LONG $0xd1960f41 // setbe r9b - LONG $0x462ef8c5; BYTE $0x08 // vucomiss xmm0, dword [rsi + 8] - LONG $0xd6960f41 // setbe r14b - LONG $0x462ef8c5; BYTE $0x0c // vucomiss xmm0, dword [rsi + 12] - LONG $0xd5960f41 // setbe r13b - LONG $0x462ef8c5; BYTE $0x10 // vucomiss xmm0, dword [rsi + 16] - QUAD $0x000000902494960f // setbe byte [rsp + 144] - LONG $0x462ef8c5; BYTE $0x14 // vucomiss xmm0, dword [rsi + 20] - LONG $0x2454960f; BYTE $0x60 // setbe byte [rsp + 96] - LONG $0x462ef8c5; BYTE $0x18 // vucomiss xmm0, dword [rsi + 24] - WORD $0x960f; BYTE $0xd0 // setbe al - LONG $0x462ef8c5; BYTE $0x1c // vucomiss xmm0, dword [rsi + 28] - WORD $0x960f; BYTE $0xd3 // setbe bl - LONG $0x462ef8c5; BYTE $0x20 // vucomiss xmm0, dword [rsi + 32] - LONG $0x2454960f; BYTE $0x78 // setbe byte [rsp + 120] - LONG $0x462ef8c5; BYTE $0x24 // vucomiss xmm0, dword [rsi + 36] - WORD $0x960f; BYTE $0xd2 // setbe dl - LONG $0x462ef8c5; BYTE $0x28 // vucomiss xmm0, dword [rsi + 40] - LONG $0xd7960f40 // setbe dil - LONG $0x462ef8c5; BYTE $0x2c // vucomiss xmm0, dword [rsi + 44] - LONG $0xd2960f41 // setbe r10b - LONG $0x462ef8c5; BYTE $0x30 // vucomiss xmm0, dword [rsi + 48] - LONG $0xd3960f41 // setbe r11b - LONG $0x462ef8c5; BYTE $0x34 // vucomiss xmm0, dword [rsi + 52] - LONG $0xd4960f41 // setbe r12b - LONG $0x462ef8c5; BYTE $0x38 // vucomiss xmm0, dword [rsi + 56] - QUAD $0x000000802494960f // setbe byte [rsp + 128] - LONG $0x462ef8c5; BYTE $0x3c // vucomiss xmm0, dword [rsi + 60] - WORD $0x960f; BYTE $0xd1 // setbe cl - LONG $0x462ef8c5; BYTE $0x40 // vucomiss xmm0, dword [rsi + 64] - LONG $0x2454960f; BYTE $0x50 // setbe byte [rsp + 80] - LONG $0x462ef8c5; BYTE $0x44 // vucomiss xmm0, dword [rsi + 68] - LONG $0x2454960f; BYTE $0x70 // setbe byte [rsp + 112] - LONG $0x462ef8c5; BYTE $0x48 // vucomiss xmm0, dword [rsi + 72] - QUAD $0x000000882494960f // setbe byte [rsp + 136] - LONG $0x462ef8c5; BYTE $0x4c // vucomiss xmm0, dword [rsi + 76] - LONG $0x2454960f; BYTE $0x48 // setbe byte [rsp + 72] - LONG $0x462ef8c5; BYTE $0x50 // vucomiss xmm0, dword [rsi + 80] - LONG $0x2454960f; BYTE $0x58 // setbe byte [rsp + 88] - LONG $0x462ef8c5; BYTE $0x54 // vucomiss xmm0, dword [rsi + 84] - LONG $0x2454960f; BYTE $0x68 // setbe byte [rsp + 104] - LONG $0x462ef8c5; BYTE $0x58 // vucomiss xmm0, dword [rsi + 88] - LONG $0x2454960f; BYTE $0x40 // setbe byte [rsp + 64] - LONG $0x462ef8c5; BYTE $0x5c // vucomiss xmm0, dword [rsi + 92] - LONG $0xd7960f41 // setbe r15b - LONG $0x462ef8c5; BYTE $0x60 // vucomiss xmm0, dword [rsi + 96] - LONG $0x2454960f; BYTE $0x20 // setbe byte [rsp + 32] - LONG $0x462ef8c5; BYTE $0x64 // vucomiss xmm0, dword [rsi + 100] - LONG $0x2454960f; BYTE $0x28 // setbe byte [rsp + 40] - LONG $0x462ef8c5; BYTE $0x68 // vucomiss xmm0, dword [rsi + 104] - LONG $0x2454960f; BYTE $0x30 // setbe byte [rsp + 48] - LONG $0x462ef8c5; BYTE $0x6c // vucomiss xmm0, dword [rsi + 108] - LONG $0x2454960f; BYTE $0x38 // setbe byte [rsp + 56] - LONG $0x462ef8c5; BYTE $0x70 // vucomiss xmm0, dword [rsi + 112] - QUAD $0x000001402494960f // setbe byte [rsp + 320] - LONG $0x462ef8c5; BYTE $0x74 // vucomiss xmm0, dword [rsi + 116] - QUAD $0x000001202494960f // setbe byte [rsp + 288] - LONG $0x462ef8c5; BYTE $0x78 // vucomiss xmm0, dword [rsi + 120] - LONG $0x2454960f; BYTE $0x1c // setbe byte [rsp + 28] - LONG $0x462ef8c5; BYTE $0x7c // vucomiss xmm0, dword [rsi + 124] - LONG $0xd0960f41 // setbe r8b - WORD $0x0045; BYTE $0xc9 // add r9b, r9b - QUAD $0x000000a0248c0244 // add r9b, byte [rsp + 160] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0845; BYTE $0xce // or r14b, r9b +LBB10_173: + LONG $0x0e10fac5 // vmovss xmm1, dword [rsi] + LONG $0x5610fac5; BYTE $0x04 // vmovss xmm2, dword [rsi + 4] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x2454930f; BYTE $0x78 // setae byte [rsp + 120] + LONG $0xd02ef8c5 // vucomiss xmm2, xmm0 + WORD $0x930f; BYTE $0xd2 // setae dl + LONG $0x4e10fac5; BYTE $0x08 // vmovss xmm1, dword [rsi + 8] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0xd7930f40 // setae dil + LONG $0x4e10fac5; BYTE $0x0c // vmovss xmm1, dword [rsi + 12] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0xd0930f41 // setae r8b + LONG $0x4e10fac5; BYTE $0x10 // vmovss xmm1, dword [rsi + 16] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0xd1930f41 // setae r9b + LONG $0x4e10fac5; BYTE $0x14 // vmovss xmm1, dword [rsi + 20] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + QUAD $0x000000a02494930f // setae byte [rsp + 160] + LONG $0x4e10fac5; BYTE $0x18 // vmovss xmm1, dword [rsi + 24] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + QUAD $0x000000802494930f // setae byte [rsp + 128] + LONG $0x4e10fac5; BYTE $0x1c // vmovss xmm1, dword [rsi + 28] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x2454930f; BYTE $0x70 // setae byte [rsp + 112] + LONG $0x4e10fac5; BYTE $0x20 // vmovss xmm1, dword [rsi + 32] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x2454930f; BYTE $0x60 // setae byte [rsp + 96] + LONG $0x4e10fac5; BYTE $0x24 // vmovss xmm1, dword [rsi + 36] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0xd2930f41 // setae r10b + LONG $0x4e10fac5; BYTE $0x28 // vmovss xmm1, dword [rsi + 40] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + WORD $0x930f; BYTE $0xd3 // setae bl + LONG $0x4e10fac5; BYTE $0x2c // vmovss xmm1, dword [rsi + 44] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0xd7930f41 // setae r15b + LONG $0x4e10fac5; BYTE $0x30 // vmovss xmm1, dword [rsi + 48] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + WORD $0x930f; BYTE $0xd0 // setae al + LONG $0x4e10fac5; BYTE $0x34 // vmovss xmm1, dword [rsi + 52] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + QUAD $0x000000902494930f // setae byte [rsp + 144] + LONG $0x4e10fac5; BYTE $0x38 // vmovss xmm1, dword [rsi + 56] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x2454930f; BYTE $0x58 // setae byte [rsp + 88] + LONG $0x4e10fac5; BYTE $0x3c // vmovss xmm1, dword [rsi + 60] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x2454930f; BYTE $0x48 // setae byte [rsp + 72] + LONG $0x4e10fac5; BYTE $0x40 // vmovss xmm1, dword [rsi + 64] + LONG $0x5610fac5; BYTE $0x44 // vmovss xmm2, dword [rsi + 68] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x4e10fac5; BYTE $0x48 // vmovss xmm1, dword [rsi + 72] + LONG $0x2454930f; BYTE $0x28 // setae byte [rsp + 40] + LONG $0xd02ef8c5 // vucomiss xmm2, xmm0 + LONG $0x5610fac5; BYTE $0x4c // vmovss xmm2, dword [rsi + 76] + LONG $0xd3930f41 // setae r11b + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x4e10fac5; BYTE $0x50 // vmovss xmm1, dword [rsi + 80] + LONG $0xd6930f41 // setae r14b + LONG $0xd02ef8c5 // vucomiss xmm2, xmm0 + LONG $0x5610fac5; BYTE $0x54 // vmovss xmm2, dword [rsi + 84] + LONG $0xd4930f41 // setae r12b + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x4e10fac5; BYTE $0x58 // vmovss xmm1, dword [rsi + 88] + QUAD $0x000000882494930f // setae byte [rsp + 136] + LONG $0xd02ef8c5 // vucomiss xmm2, xmm0 + LONG $0x5610fac5; BYTE $0x5c // vmovss xmm2, dword [rsi + 92] + LONG $0x2454930f; BYTE $0x50 // setae byte [rsp + 80] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x4e10fac5; BYTE $0x60 // vmovss xmm1, dword [rsi + 96] + LONG $0x2454930f; BYTE $0x68 // setae byte [rsp + 104] + LONG $0xd02ef8c5 // vucomiss xmm2, xmm0 + LONG $0x5610fac5; BYTE $0x64 // vmovss xmm2, dword [rsi + 100] + LONG $0xd5930f41 // setae r13b + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x4e10fac5; BYTE $0x68 // vmovss xmm1, dword [rsi + 104] + QUAD $0x000001202494930f // setae byte [rsp + 288] + LONG $0xd02ef8c5 // vucomiss xmm2, xmm0 + LONG $0x5610fac5; BYTE $0x6c // vmovss xmm2, dword [rsi + 108] + LONG $0x2454930f; BYTE $0x40 // setae byte [rsp + 64] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x4e10fac5; BYTE $0x70 // vmovss xmm1, dword [rsi + 112] + LONG $0x2454930f; BYTE $0x30 // setae byte [rsp + 48] + LONG $0xd02ef8c5 // vucomiss xmm2, xmm0 + LONG $0x5610fac5; BYTE $0x74 // vmovss xmm2, dword [rsi + 116] + LONG $0x2454930f; BYTE $0x38 // setae byte [rsp + 56] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x4e10fac5; BYTE $0x78 // vmovss xmm1, dword [rsi + 120] + LONG $0x2454930f; BYTE $0x20 // setae byte [rsp + 32] + LONG $0xd02ef8c5 // vucomiss xmm2, xmm0 + LONG $0x5610fac5; BYTE $0x7c // vmovss xmm2, dword [rsi + 124] + QUAD $0x000001402494930f // setae byte [rsp + 320] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x2454930f; BYTE $0x1c // setae byte [rsp + 28] + LONG $0x80ee8348 // sub rsi, -128 + LONG $0xd02ef8c5 // vucomiss xmm2, xmm0 + WORD $0x930f; BYTE $0xd1 // setae cl WORD $0xd200 // add dl, dl LONG $0x78245402 // add dl, byte [rsp + 120] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xf5 // or r13b, r14b LONG $0x02e7c040 // shl dil, 2 WORD $0x0840; BYTE $0xd7 // or dil, dl - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0844; BYTE $0xea // or dl, r13b - WORD $0x8941; BYTE $0xd1 // mov r9d, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] + LONG $0x03e0c041 // shl r8b, 3 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + LONG $0x04e1c041 // shl r9b, 4 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + QUAD $0x000000a02494b60f // movzx edx, byte [rsp + 160] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0x0844; BYTE $0xca // or dl, r9b - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b - QUAD $0x0000008024bcb60f // movzx edi, byte [rsp + 128] - LONG $0x06e7c040 // shl dil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] - WORD $0xc000 // add al, al - LONG $0x50244402 // add al, byte [rsp + 80] - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 + QUAD $0x0000802484b60f44; BYTE $0x00 // movzx r8d, byte [rsp + 128] + LONG $0x06e0c041 // shl r8b, 6 + LONG $0x247cb60f; BYTE $0x70 // movzx edi, byte [rsp + 112] + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + LONG $0x24540244; BYTE $0x60 // add r10b, byte [rsp + 96] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0x0844; BYTE $0xd3 // or bl, r10b + LONG $0x03e7c041 // shl r15b, 3 + WORD $0x0841; BYTE $0xdf // or r15b, bl + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xf8 // or al, r15b + WORD $0x0840; BYTE $0xd7 // or dil, dl + QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] + WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + LONG $0x245cb60f; BYTE $0x48 // movzx ebx, byte [rsp + 72] + WORD $0xe3c0; BYTE $0x07 // shl bl, 7 + WORD $0xc308 // or bl, al + WORD $0x0045; BYTE $0xdb // add r11b, r11b + LONG $0x245c0244; BYTE $0x28 // add r11b, byte [rsp + 40] + LONG $0x02e6c041 // shl r14b, 2 + WORD $0x0845; BYTE $0xde // or r14b, r11b + LONG $0x03e4c041 // shl r12b, 3 + WORD $0x0845; BYTE $0xf4 // or r12b, r14b + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xe0 // or al, r12b + WORD $0x8941; BYTE $0xc0 // mov r8d, eax + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0844; BYTE $0xc0 // or al, r8b + WORD $0xd308 // or bl, dl LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx + WORD $0xe2c0; BYTE $0x06 // shl dl, 6 + LONG $0x07e5c041 // shl r13b, 7 + WORD $0x0841; BYTE $0xd5 // or r13b, dl QUAD $0x0000011024948b48 // mov rdx, qword [rsp + 272] - WORD $0x1a88 // mov byte [rdx], bl - LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4a88; BYTE $0x01 // mov byte [rdx + 1], cl - WORD $0x0841; BYTE $0xff // or r15b, dil - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000140248cb60f // movzx ecx, byte [rsp + 320] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd908 // or cl, bl + WORD $0x8840; BYTE $0x3a // mov byte [rdx], dil + WORD $0x0841; BYTE $0xc5 // or r13b, al + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + WORD $0xc000 // add al, al + LONG $0x20248402; WORD $0x0001; BYTE $0x00 // add al, byte [rsp + 288] + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0x5a88; BYTE $0x01 // mov byte [rdx + 1], bl LONG $0x245cb60f; BYTE $0x1c // movzx ebx, byte [rsp + 28] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd8 // or r8b, bl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027a8844 // mov byte [rdx + 2], r15b - LONG $0x03428844 // mov byte [rdx + 3], r8b - LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + LONG $0x026a8844 // mov byte [rdx + 2], r13b + WORD $0xc108 // or cl, al + WORD $0x4a88; BYTE $0x03 // mov byte [rdx + 3], cl LONG $0x04c28348 // add rdx, 4 QUAD $0x0000011024948948 // mov qword [rsp + 272], rdx QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 - JNE LBB10_78 + JNE LBB10_173 QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] QUAD $0x000000a824bc8b4c // mov r15, qword [rsp + 168] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JL LBB10_119 - JMP LBB10_175 + JL LBB10_176 + JMP LBB10_194 -LBB10_80: +LBB10_33: WORD $0x8a44; BYTE $0x32 // mov r14b, byte [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -54891,10 +56295,10 @@ LBB10_80: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_84 + JE LBB10_37 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB10_82: +LBB10_35: WORD $0x3844; BYTE $0x36 // cmp byte [rsi], r14b LONG $0x01768d48 // lea rsi, [rsi + 1] LONG $0x000000ba; BYTE $0x00 // mov edx, 0 @@ -54915,38 +56319,38 @@ LBB10_82: LONG $0x3b1c8841 // mov byte [r11 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_82 + JNE LBB10_35 LONG $0x01c38349 // add r11, 1 -LBB10_84: +LBB10_37: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB10_121 + JL LBB10_38 LONG $0x20ff8349 // cmp r15, 32 LONG $0x24748944; BYTE $0x1c // mov dword [rsp + 28], r14d QUAD $0x000001182494894c // mov qword [rsp + 280], r10 QUAD $0x0000017024bc894c // mov qword [rsp + 368], r15 - JB LBB10_88 + JB LBB10_40 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi WORD $0x3949; BYTE $0xc3 // cmp r11, rax - JAE LBB10_185 + JAE LBB10_43 LONG $0xbb048d4b // lea rax, [r11 + 4*r15] WORD $0x3948; BYTE $0xc6 // cmp rsi, rax - JAE LBB10_185 + JAE LBB10_43 -LBB10_88: +LBB10_40: WORD $0xc031 // xor eax, eax QUAD $0x0000018024848948 // mov qword [rsp + 384], rax WORD $0x8949; BYTE $0xf4 // mov r12, rsi QUAD $0x00000168249c894c // mov qword [rsp + 360], r11 -LBB10_89: +LBB10_46: QUAD $0x0000018024bc2b4c // sub r15, qword [rsp + 384] QUAD $0x0000009824bc894c // mov qword [rsp + 152], r15 -LBB10_90: +LBB10_47: WORD $0x894c; BYTE $0xe1 // mov rcx, r12 LONG $0x24343845 // cmp byte [r12], r14b LONG $0x2454930f; BYTE $0x20 // setae byte [rsp + 32] @@ -55109,12 +56513,12 @@ LBB10_90: LONG $0x04c68348 // add rsi, 4 QUAD $0x0000016824b48948 // mov qword [rsp + 360], rsi QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 - JNE LBB10_90 + JNE LBB10_47 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] QUAD $0x0000017024bc8b4c // mov r15, qword [rsp + 368] - JMP LBB10_122 + JMP LBB10_49 -LBB10_92: +LBB10_124: WORD $0x8b44; BYTE $0x2a // mov r13d, dword [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -55124,10 +56528,10 @@ LBB10_92: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_96 + JE LBB10_128 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB10_94: +LBB10_126: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d LONG $0x04768d48 // lea rsi, [rsi + 4] WORD $0x9d0f; BYTE $0xd2 // setge dl @@ -55148,23 +56552,23 @@ LBB10_94: LONG $0x1b3c8841 // mov byte [r11 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_94 + JNE LBB10_126 LONG $0x01c38349 // add r11, 1 -LBB10_96: +LBB10_128: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB10_125 + JL LBB10_129 QUAD $0x000001182494894c // mov qword [rsp + 280], r10 QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 QUAD $0x000000a824bc894c // mov qword [rsp + 168], r15 -LBB10_98: +LBB10_131: QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d QUAD $0x0000009824949d0f // setge byte [rsp + 152] LONG $0x046e3944 // cmp dword [rsi + 4], r13d - LONG $0xd79d0f40 // setge dil + LONG $0xd29d0f41 // setge r10b LONG $0x086e3944 // cmp dword [rsi + 8], r13d LONG $0xd69d0f41 // setge r14b LONG $0x0c6e3944 // cmp dword [rsi + 12], r13d @@ -55180,11 +56584,11 @@ LBB10_98: LONG $0x206e3944 // cmp dword [rsi + 32], r13d LONG $0x24549d0f; BYTE $0x70 // setge byte [rsp + 112] LONG $0x246e3944 // cmp dword [rsi + 36], r13d - WORD $0x9d0f; BYTE $0xd2 // setge dl + LONG $0xd79d0f40 // setge dil LONG $0x286e3944 // cmp dword [rsi + 40], r13d - LONG $0xd19d0f41 // setge r9b + LONG $0xd09d0f41 // setge r8b LONG $0x2c6e3944 // cmp dword [rsi + 44], r13d - LONG $0xd29d0f41 // setge r10b + LONG $0xd19d0f41 // setge r9b LONG $0x306e3944 // cmp dword [rsi + 48], r13d LONG $0xd39d0f41 // setge r11b LONG $0x346e3944 // cmp dword [rsi + 52], r13d @@ -55224,32 +56628,33 @@ LBB10_98: LONG $0x786e3944 // cmp dword [rsi + 120], r13d LONG $0x24549d0f; BYTE $0x1c // setge byte [rsp + 28] LONG $0x7c6e3944 // cmp dword [rsi + 124], r13d - LONG $0xd09d0f41 // setge r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009824bc0240 // add dil, byte [rsp + 152] + WORD $0x9d0f; BYTE $0xd2 // setge dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009824940244 // add r10b, byte [rsp + 152] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0x70245402 // add dl, byte [rsp + 112] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + LONG $0x247c0240; BYTE $0x70 // add dil, byte [rsp + 112] QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b QUAD $0x00000110249c8b4c // mov r11, qword [rsp + 272] @@ -55257,237 +56662,237 @@ LBB10_98: LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xd200 // add dl, dl - LONG $0x50245402 // add dl, byte [rsp + 80] - WORD $0xd789 // mov edi, edx - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xc000 // add al, al + LONG $0x50244402 // add al, byte [rsp + 80] + WORD $0xc789 // mov edi, eax + QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil WORD $0x8841; BYTE $0x1b // mov byte [r11], bl LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl LONG $0x014b8841 // mov byte [r11 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - QUAD $0x00000140248cb60f // movzx ecx, byte [rsp + 320] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x1c // movzx edx, byte [rsp + 28] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0841; BYTE $0xc7 // or r15b, al + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0xc000 // add al, al + LONG $0x20244402 // add al, byte [rsp + 32] + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + QUAD $0x000001402484b60f // movzx eax, byte [rsp + 320] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + QUAD $0x000001202484b60f // movzx eax, byte [rsp + 288] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xc808 // or al, cl + LONG $0x244cb60f; BYTE $0x1c // movzx ecx, byte [rsp + 28] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xca08 // or dl, cl + WORD $0xc208 // or dl, al LONG $0x027b8845 // mov byte [r11 + 2], r15b - LONG $0x03438845 // mov byte [r11 + 3], r8b + LONG $0x03538841 // mov byte [r11 + 3], dl LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 LONG $0x04c38349 // add r11, 4 QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 - JNE LBB10_98 + JNE LBB10_131 WORD $0x894d; BYTE $0xde // mov r14, r11 QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JL LBB10_126 - JMP LBB10_175 + JL LBB10_134 + JMP LBB10_194 -LBB10_100: +LBB10_14: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB10_175 + JGE LBB10_194 -LBB10_101: +LBB10_118: WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB10_133 + JNE LBB10_122 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB10_135 + JMP LBB10_120 -LBB10_103: +LBB10_32: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB10_175 + JGE LBB10_194 -LBB10_104: +LBB10_186: WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB10_137 + JNE LBB10_188 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB10_139 + JMP LBB10_190 -LBB10_106: +LBB10_23: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB10_175 + JGE LBB10_194 -LBB10_107: +LBB10_144: WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB10_141 + JNE LBB10_148 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB10_143 + JMP LBB10_146 -LBB10_109: +LBB10_86: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB10_175 + JGE LBB10_194 -LBB10_110: +LBB10_91: WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB10_145 + JNE LBB10_95 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB10_147 + JMP LBB10_93 -LBB10_112: +LBB10_102: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB10_175 + JGE LBB10_194 -LBB10_113: +LBB10_107: WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB10_150 + JNE LBB10_112 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB10_152 + JMP LBB10_109 -LBB10_115: +LBB10_155: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB10_175 + JGE LBB10_194 -LBB10_116: +LBB10_160: WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB10_154 + JNE LBB10_164 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB10_156 + JMP LBB10_162 -LBB10_118: +LBB10_171: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB10_175 + JGE LBB10_194 -LBB10_119: +LBB10_176: WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB10_158 + JNE LBB10_180 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB10_160 + JMP LBB10_178 -LBB10_121: +LBB10_38: QUAD $0x00000168249c894c // mov qword [rsp + 360], r11 WORD $0x8949; BYTE $0xf4 // mov r12, rsi -LBB10_122: +LBB10_49: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB10_175 + JGE LBB10_194 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB10_163 + JNE LBB10_52 WORD $0xf631 // xor esi, esi - JMP LBB10_166 + JMP LBB10_55 -LBB10_125: +LBB10_129: WORD $0x894d; BYTE $0xde // mov r14, r11 LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB10_175 + JGE LBB10_194 -LBB10_126: +LBB10_134: WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB10_168 + JNE LBB10_138 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB10_170 + JMP LBB10_136 -LBB10_128: +LBB10_5: WORD $0x894d; BYTE $0xdd // mov r13, r11 LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 - JGE LBB10_31 + JGE LBB10_63 -LBB10_129: +LBB10_62: QUAD $0x0000016824ac894c // mov qword [rsp + 360], r13 WORD $0x8949; BYTE $0xf4 // mov r12, rsi -LBB10_130: +LBB10_73: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB10_175 + JGE LBB10_194 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB10_176 + JNE LBB10_76 WORD $0xf631 // xor esi, esi - JMP LBB10_179 + JMP LBB10_79 -LBB10_133: +LBB10_122: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 -LBB10_134: +LBB10_123: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d LONG $0x000000bf; BYTE $0x00 // mov edi, 0 LONG $0xffd78040 // adc dil, -1 @@ -55515,41 +56920,43 @@ LBB10_134: WORD $0xc330 // xor bl, al LONG $0x171c8841 // mov byte [r15 + rdx], bl WORD $0x394d; BYTE $0xd9 // cmp r9, r11 - JNE LBB10_134 + JNE LBB10_123 -LBB10_135: +LBB10_120: LONG $0x01c0f641 // test r8b, 1 - JE LBB10_175 + JE LBB10_194 WORD $0xc031 // xor eax, eax WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d - JMP LBB10_149 + JMP LBB10_192 -LBB10_137: +LBB10_188: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 -LBB10_138: - LONG $0x062ef9c5 // vucomisd xmm0, qword [rsi] - WORD $0x960f; BYTE $0xd0 // setbe al - WORD $0xd8f6 // neg al +LBB10_189: + LONG $0x0e10fbc5 // vmovsd xmm1, qword [rsi] + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0x000000b8; BYTE $0x00 // mov eax, 0 + WORD $0xff14 // adc al, -1 WORD $0x894c; BYTE $0xdf // mov rdi, r11 LONG $0x03efc148 // shr rdi, 3 LONG $0x0cb60f45; BYTE $0x3f // movzx r9d, byte [r15 + rdi] + WORD $0x3044; BYTE $0xc8 // xor al, r9b WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 WORD $0xe3d2 // shl bl, cl - WORD $0x3044; BYTE $0xc8 // xor al, r9b WORD $0xc320 // and bl, al WORD $0x3044; BYTE $0xcb // xor bl, r9b LONG $0x3f1c8841 // mov byte [r15 + rdi], bl LONG $0x02c38349 // add r11, 2 - LONG $0x462ef9c5; BYTE $0x08 // vucomisd xmm0, qword [rsi + 8] - WORD $0x960f; BYTE $0xd0 // setbe al + LONG $0x4e10fbc5; BYTE $0x08 // vmovsd xmm1, qword [rsi + 8] LONG $0x10c68348 // add rsi, 16 - WORD $0xd8f6 // neg al + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + LONG $0x000000b8; BYTE $0x00 // mov eax, 0 + WORD $0xff14 // adc al, -1 WORD $0xd830 // xor al, bl WORD $0xc980; BYTE $0x01 // or cl, 1 WORD $0x01b2 // mov dl, 1 @@ -55558,21 +56965,23 @@ LBB10_138: WORD $0xda30 // xor dl, bl LONG $0x3f148841 // mov byte [r15 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB10_138 + JNE LBB10_189 -LBB10_139: +LBB10_190: LONG $0x01c0f641 // test r8b, 1 - JE LBB10_175 - LONG $0x062ef9c5 // vucomisd xmm0, qword [rsi] - JMP LBB10_162 + JE LBB10_194 + LONG $0x0e10fbc5 // vmovsd xmm1, qword [rsi] + WORD $0xc031 // xor eax, eax + LONG $0xc82ef9c5 // vucomisd xmm1, xmm0 + JMP LBB10_192 -LBB10_141: +LBB10_148: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 -LBB10_142: +LBB10_149: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 LONG $0x000000bf; BYTE $0x00 // mov edi, 0 LONG $0xffd78040 // adc dil, -1 @@ -55600,22 +57009,22 @@ LBB10_142: WORD $0xc330 // xor bl, al LONG $0x171c8841 // mov byte [r15 + rdx], bl WORD $0x394d; BYTE $0xd9 // cmp r9, r11 - JNE LBB10_142 + JNE LBB10_149 -LBB10_143: +LBB10_146: LONG $0x01c0f641 // test r8b, 1 - JE LBB10_175 + JE LBB10_194 WORD $0xc031 // xor eax, eax WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 - JMP LBB10_149 + JMP LBB10_192 -LBB10_145: +LBB10_95: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 -LBB10_146: +LBB10_96: LONG $0x2e394466 // cmp word [rsi], r13w LONG $0x000000bf; BYTE $0x00 // mov edi, 0 LONG $0xffd78040 // adc dil, -1 @@ -55643,34 +57052,22 @@ LBB10_146: WORD $0xc330 // xor bl, al LONG $0x171c8841 // mov byte [r15 + rdx], bl WORD $0x394d; BYTE $0xd9 // cmp r9, r11 - JNE LBB10_146 + JNE LBB10_96 -LBB10_147: +LBB10_93: LONG $0x01c0f641 // test r8b, 1 - JE LBB10_175 + JE LBB10_194 WORD $0xc031 // xor eax, eax LONG $0x2e394466 // cmp word [rsi], r13w + JMP LBB10_192 -LBB10_149: - WORD $0xff14 // adc al, -1 - WORD $0x894c; BYTE $0xda // mov rdx, r11 - LONG $0x03eac148 // shr rdx, 3 - LONG $0x16348a41 // mov sil, byte [r14 + rdx] - LONG $0x07e38041 // and r11b, 7 - WORD $0x01b3 // mov bl, 1 - WORD $0x8944; BYTE $0xd9 // mov ecx, r11d - WORD $0xe3d2 // shl bl, cl - WORD $0x3040; BYTE $0xf0 // xor al, sil - WORD $0xc320 // and bl, al - JMP LBB10_174 - -LBB10_150: +LBB10_112: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 -LBB10_151: +LBB10_113: LONG $0x2e394466 // cmp word [rsi], r13w WORD $0x9d0f; BYTE $0xd0 // setge al WORD $0xd8f6 // neg al @@ -55698,21 +57095,21 @@ LBB10_151: WORD $0xda30 // xor dl, bl LONG $0x3f148841 // mov byte [r15 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB10_151 + JNE LBB10_113 -LBB10_152: +LBB10_109: LONG $0x01c0f641 // test r8b, 1 - JE LBB10_175 + JE LBB10_194 LONG $0x2e394466 // cmp word [rsi], r13w - JMP LBB10_172 + JMP LBB10_111 -LBB10_154: +LBB10_164: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 -LBB10_155: +LBB10_165: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 WORD $0x9d0f; BYTE $0xd0 // setge al WORD $0xd8f6 // neg al @@ -55740,40 +57137,42 @@ LBB10_155: WORD $0xda30 // xor dl, bl LONG $0x3f148841 // mov byte [r15 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB10_155 + JNE LBB10_165 -LBB10_156: +LBB10_162: LONG $0x01c0f641 // test r8b, 1 - JE LBB10_175 + JE LBB10_194 WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 - JMP LBB10_172 + JMP LBB10_111 -LBB10_158: +LBB10_180: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 -LBB10_159: - LONG $0x062ef8c5 // vucomiss xmm0, dword [rsi] - WORD $0x960f; BYTE $0xd0 // setbe al - WORD $0xd8f6 // neg al +LBB10_181: + LONG $0x0e10fac5 // vmovss xmm1, dword [rsi] + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x000000b8; BYTE $0x00 // mov eax, 0 + WORD $0xff14 // adc al, -1 WORD $0x894c; BYTE $0xdf // mov rdi, r11 LONG $0x03efc148 // shr rdi, 3 LONG $0x0cb60f45; BYTE $0x3f // movzx r9d, byte [r15 + rdi] + WORD $0x3044; BYTE $0xc8 // xor al, r9b WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 WORD $0xe3d2 // shl bl, cl - WORD $0x3044; BYTE $0xc8 // xor al, r9b WORD $0xc320 // and bl, al WORD $0x3044; BYTE $0xcb // xor bl, r9b LONG $0x3f1c8841 // mov byte [r15 + rdi], bl LONG $0x02c38349 // add r11, 2 - LONG $0x462ef8c5; BYTE $0x04 // vucomiss xmm0, dword [rsi + 4] - WORD $0x960f; BYTE $0xd0 // setbe al + LONG $0x4e10fac5; BYTE $0x04 // vmovss xmm1, dword [rsi + 4] LONG $0x08c68348 // add rsi, 8 - WORD $0xd8f6 // neg al + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 + LONG $0x000000b8; BYTE $0x00 // mov eax, 0 + WORD $0xff14 // adc al, -1 WORD $0xd830 // xor al, bl WORD $0xc980; BYTE $0x01 // or cl, 1 WORD $0x01b2 // mov dl, 1 @@ -55782,24 +57181,35 @@ LBB10_159: WORD $0xda30 // xor dl, bl LONG $0x3f148841 // mov byte [r15 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB10_159 + JNE LBB10_181 -LBB10_160: +LBB10_178: LONG $0x01c0f641 // test r8b, 1 - JE LBB10_175 - LONG $0x062ef8c5 // vucomiss xmm0, dword [rsi] + JE LBB10_194 + LONG $0x0e10fac5 // vmovss xmm1, dword [rsi] + WORD $0xc031 // xor eax, eax + LONG $0xc82ef8c5 // vucomiss xmm1, xmm0 -LBB10_162: - WORD $0x960f; BYTE $0xd0 // setbe al - JMP LBB10_173 +LBB10_192: + WORD $0xff14 // adc al, -1 + WORD $0x894c; BYTE $0xda // mov rdx, r11 + LONG $0x03eac148 // shr rdx, 3 + LONG $0x16348a41 // mov sil, byte [r14 + rdx] + LONG $0x07e38041 // and r11b, 7 + WORD $0x01b3 // mov bl, 1 + WORD $0x8944; BYTE $0xd9 // mov ecx, r11d + WORD $0xe3d2 // shl bl, cl + WORD $0x3040; BYTE $0xf0 // xor al, sil + WORD $0xc320 // and bl, al + JMP LBB10_193 -LBB10_163: +LBB10_52: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0xf631 // xor esi, esi QUAD $0x00000168249c8b4c // mov r11, qword [rsp + 360] -LBB10_164: +LBB10_53: LONG $0x34343845 // cmp byte [r12 + rsi], r14b LONG $0x000000bb; BYTE $0x00 // mov ebx, 0 WORD $0xd380; BYTE $0xff // adc bl, -1 @@ -55826,12 +57236,12 @@ LBB10_164: WORD $0xd030 // xor al, dl LONG $0x3b048841 // mov byte [r11 + rdi], al WORD $0x3949; BYTE $0xf2 // cmp r10, rsi - JNE LBB10_164 + JNE LBB10_53 WORD $0x0149; BYTE $0xf4 // add r12, rsi -LBB10_166: +LBB10_55: LONG $0x01c0f641 // test r8b, 1 - JE LBB10_175 + JE LBB10_194 WORD $0xc031 // xor eax, eax LONG $0x24343845 // cmp byte [r12], r14b WORD $0xff14 // adc al, -1 @@ -55845,15 +57255,15 @@ LBB10_166: WORD $0xe3d2 // shl bl, cl WORD $0x3040; BYTE $0xf8 // xor al, dil WORD $0xc320 // and bl, al - JMP LBB10_181 + JMP LBB10_57 -LBB10_168: +LBB10_138: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d WORD $0x894d; BYTE $0xf7 // mov r15, r14 -LBB10_169: +LBB10_139: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d WORD $0x9d0f; BYTE $0xd0 // setge al WORD $0xd8f6 // neg al @@ -55881,17 +57291,15 @@ LBB10_169: WORD $0xda30 // xor dl, bl LONG $0x3f148841 // mov byte [r15 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB10_169 + JNE LBB10_139 -LBB10_170: +LBB10_136: LONG $0x01c0f641 // test r8b, 1 - JE LBB10_175 + JE LBB10_194 WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d -LBB10_172: +LBB10_111: WORD $0x9d0f; BYTE $0xd0 // setge al - -LBB10_173: WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xda // mov rdx, r11 LONG $0x03eac148 // shr rdx, 3 @@ -55903,22 +57311,22 @@ LBB10_173: WORD $0x3040; BYTE $0xf0 // xor al, sil WORD $0xc320 // and bl, al -LBB10_174: +LBB10_193: WORD $0x3040; BYTE $0xf3 // xor bl, sil LONG $0x161c8841 // mov byte [r14 + rdx], bl -LBB10_175: +LBB10_194: MOVQ 1344(SP), SP VZEROUPPER RET -LBB10_176: +LBB10_76: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0xf631 // xor esi, esi QUAD $0x00000168249c8b4c // mov r11, qword [rsp + 360] -LBB10_177: +LBB10_77: LONG $0x34343845 // cmp byte [r12 + rsi], r14b WORD $0x9d0f; BYTE $0xd3 // setge bl WORD $0xdbf6 // neg bl @@ -55945,12 +57353,12 @@ LBB10_177: WORD $0xd030 // xor al, dl LONG $0x3b048841 // mov byte [r11 + rdi], al WORD $0x3949; BYTE $0xf2 // cmp r10, rsi - JNE LBB10_177 + JNE LBB10_77 WORD $0x0149; BYTE $0xf4 // add r12, rsi -LBB10_179: +LBB10_79: LONG $0x01c0f641 // test r8b, 1 - JE LBB10_175 + JE LBB10_194 LONG $0x24343845 // cmp byte [r12], r14b WORD $0x9d0f; BYTE $0xd0 // setge al WORD $0xd8f6 // neg al @@ -55965,12 +57373,12 @@ LBB10_179: WORD $0x3040; BYTE $0xf8 // xor al, dil WORD $0xc320 // and bl, al -LBB10_181: +LBB10_57: WORD $0x3040; BYTE $0xfb // xor bl, dil LONG $0x101c8841 // mov byte [r8 + rdx], bl - JMP LBB10_175 + JMP LBB10_194 -LBB10_182: +LBB10_67: LONG $0xe0e78349 // and r15, -32 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 @@ -55986,7 +57394,7 @@ LBB10_182: WORD $0xc031 // xor eax, eax QUAD $0x0000011024ac894c // mov qword [rsp + 272], r13 -LBB10_183: +LBB10_68: WORD $0x8948; BYTE $0xc3 // mov rbx, rax QUAD $0x0000017824848948 // mov qword [rsp + 376], rax LONG $0x05e3c148 // shl rbx, 5 @@ -58077,16 +59485,16 @@ LBB10_183: LONG $0x20c18348 // add rcx, 32 WORD $0x8948; BYTE $0xc8 // mov rax, rcx QUAD $0x000001a0248c3b48 // cmp rcx, qword [rsp + 416] - JNE LBB10_183 + JNE LBB10_68 QUAD $0x0000026024bc8b4c // mov r15, qword [rsp + 608] QUAD $0x000001a024bc3b4c // cmp r15, qword [rsp + 416] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] LONG $0x24748b44; BYTE $0x1c // mov r14d, dword [rsp + 28] QUAD $0x0000017024a48b4c // mov r12, qword [rsp + 368] - JNE LBB10_35 - JMP LBB10_130 + JNE LBB10_70 + JMP LBB10_73 -LBB10_185: +LBB10_43: LONG $0xe0e78349 // and r15, -32 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 @@ -58101,7 +59509,7 @@ LBB10_185: WORD $0xc031 // xor eax, eax QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 -LBB10_186: +LBB10_44: WORD $0x8948; BYTE $0xc3 // mov rbx, rax QUAD $0x0000017824848948 // mov qword [rsp + 376], rax LONG $0x05e3c148 // shl rbx, 5 @@ -60238,14 +61646,14 @@ LBB10_186: LONG $0x20c18348 // add rcx, 32 WORD $0x8948; BYTE $0xc8 // mov rax, rcx QUAD $0x00000180248c3b48 // cmp rcx, qword [rsp + 384] - JNE LBB10_186 + JNE LBB10_44 QUAD $0x0000017024bc8b4c // mov r15, qword [rsp + 368] QUAD $0x0000018024bc3b4c // cmp r15, qword [rsp + 384] QUAD $0x0000011824948b4c // mov r10, qword [rsp + 280] LONG $0x24748b44; BYTE $0x1c // mov r14d, dword [rsp + 28] QUAD $0x0000021824a48b4c // mov r12, qword [rsp + 536] - JNE LBB10_89 - JMP LBB10_122 + JNE LBB10_46 + JMP LBB10_49 DATA LCDATA8<>+0x000(SB)/8, $0x0202020202020202 DATA LCDATA8<>+0x008(SB)/8, $0x0202020202020202 diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparison_noasm.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparison_noasm.go similarity index 88% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparison_noasm.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparison_noasm.go index 56abad42..61966769 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparison_noasm.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparison_noasm.go @@ -18,8 +18,8 @@ package kernels -import "github.com/apache/arrow/go/v14/arrow/compute/exec" +import "github.com/apache/arrow-go/v18/arrow" -func genCompareKernel[T exec.NumericTypes](op CompareOperator) *CompareData { +func genCompareKernel[T arrow.NumericType](op CompareOperator) *CompareData { return genGoCompareKernel(getCmpOp[T](op)) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparison_sse4_amd64.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparison_sse4_amd64.go similarity index 99% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparison_sse4_amd64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparison_sse4_amd64.go index 7cf96a41..24f05881 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparison_sse4_amd64.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparison_sse4_amd64.go @@ -21,7 +21,7 @@ package kernels import ( "unsafe" - "github.com/apache/arrow/go/v14/arrow" + "github.com/apache/arrow-go/v18/arrow" ) //go:noescape diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparison_sse4_amd64.s b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparison_sse4_amd64.s similarity index 84% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparison_sse4_amd64.s rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparison_sse4_amd64.s index 00fdac38..635738a7 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparison_sse4_amd64.s +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparison_sse4_amd64.s @@ -1,4 +1,4 @@ -//go:build go1.18 && !noasm && !appengine +//+build !noasm !appengine // AUTO-GENERATED BY C2GOASM -- DO NOT EDIT TEXT ·_comparison_equal_arr_arr_sse4(SB), $80-48 @@ -11,8 +11,9 @@ TEXT ·_comparison_equal_arr_arr_sse4(SB), $80-48 MOVQ offset+40(FP), R9 ADDQ $8, SP - WORD $0x894d; BYTE $0xc3 // mov r11, r8 - WORD $0x8949; BYTE $0xce // mov r14, rcx + WORD $0x8944; BYTE $0xc8 // mov eax, r9d + WORD $0x894d; BYTE $0xc6 // mov r14, r8 + WORD $0x8949; BYTE $0xcc // mov r12, rcx WORD $0xff83; BYTE $0x06 // cmp edi, 6 JG LBB0_29 WORD $0xff83; BYTE $0x03 // cmp edi, 3 @@ -23,16 +24,16 @@ TEXT ·_comparison_equal_arr_arr_sse4(SB), $80-48 JE LBB0_79 WORD $0xff83; BYTE $0x06 // cmp edi, 6 JNE LBB0_123 - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_22 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB0_20: WORD $0x0e8b // mov ecx, dword [rsi] @@ -45,7 +46,7 @@ LBB0_20: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -54,49 +55,49 @@ LBB0_20: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB0_20 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_22: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_26 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB0_24: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0x068b // mov eax, dword [rsi] WORD $0x4e8b; BYTE $0x04 // mov ecx, dword [rsi + 4] WORD $0x023b // cmp eax, dword [rdx] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] WORD $0x4a3b; BYTE $0x04 // cmp ecx, dword [rdx + 4] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] WORD $0x468b; BYTE $0x08 // mov eax, dword [rsi + 8] WORD $0x423b; BYTE $0x08 // cmp eax, dword [rdx + 8] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] + LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] WORD $0x468b; BYTE $0x0c // mov eax, dword [rsi + 12] WORD $0x423b; BYTE $0x0c // cmp eax, dword [rdx + 12] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] + LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] WORD $0x468b; BYTE $0x10 // mov eax, dword [rsi + 16] WORD $0x423b; BYTE $0x10 // cmp eax, dword [rdx + 16] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] WORD $0x468b; BYTE $0x14 // mov eax, dword [rsi + 20] WORD $0x423b; BYTE $0x14 // cmp eax, dword [rdx + 20] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + LONG $0x2454940f; BYTE $0x03 // sete byte [rsp + 3] WORD $0x468b; BYTE $0x18 // mov eax, dword [rsi + 24] WORD $0x423b; BYTE $0x18 // cmp eax, dword [rdx + 24] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] + LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] WORD $0x468b; BYTE $0x1c // mov eax, dword [rsi + 28] WORD $0x423b; BYTE $0x1c // cmp eax, dword [rdx + 28] LONG $0xd5940f41 // sete r13b WORD $0x468b; BYTE $0x20 // mov eax, dword [rsi + 32] WORD $0x423b; BYTE $0x20 // cmp eax, dword [rdx + 32] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] WORD $0x468b; BYTE $0x24 // mov eax, dword [rsi + 36] WORD $0x423b; BYTE $0x24 // cmp eax, dword [rdx + 36] LONG $0xd0940f41 // sete r8b @@ -108,165 +109,165 @@ LBB0_24: LONG $0xd7940f41 // sete r15b WORD $0x468b; BYTE $0x30 // mov eax, dword [rsi + 48] WORD $0x423b; BYTE $0x30 // cmp eax, dword [rdx + 48] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] + LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] WORD $0x468b; BYTE $0x34 // mov eax, dword [rsi + 52] WORD $0x423b; BYTE $0x34 // cmp eax, dword [rdx + 52] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] + LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] WORD $0x468b; BYTE $0x38 // mov eax, dword [rsi + 56] WORD $0x423b; BYTE $0x38 // cmp eax, dword [rdx + 56] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] WORD $0x468b; BYTE $0x3c // mov eax, dword [rsi + 60] WORD $0x423b; BYTE $0x3c // cmp eax, dword [rdx + 60] - WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0xd7940f40 // sete dil WORD $0x468b; BYTE $0x40 // mov eax, dword [rsi + 64] - WORD $0x4e8b; BYTE $0x44 // mov ecx, dword [rsi + 68] + WORD $0x5e8b; BYTE $0x44 // mov ebx, dword [rsi + 68] WORD $0x423b; BYTE $0x40 // cmp eax, dword [rdx + 64] WORD $0x468b; BYTE $0x48 // mov eax, dword [rsi + 72] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] - WORD $0x4a3b; BYTE $0x44 // cmp ecx, dword [rdx + 68] - WORD $0x4e8b; BYTE $0x4c // mov ecx, dword [rsi + 76] + LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + WORD $0x5a3b; BYTE $0x44 // cmp ebx, dword [rdx + 68] + WORD $0x5e8b; BYTE $0x4c // mov ebx, dword [rsi + 76] LONG $0xd2940f41 // sete r10b WORD $0x423b; BYTE $0x48 // cmp eax, dword [rdx + 72] WORD $0x468b; BYTE $0x50 // mov eax, dword [rsi + 80] LONG $0xd6940f41 // sete r14b - WORD $0x4a3b; BYTE $0x4c // cmp ecx, dword [rdx + 76] - WORD $0x4e8b; BYTE $0x54 // mov ecx, dword [rsi + 84] + WORD $0x5a3b; BYTE $0x4c // cmp ebx, dword [rdx + 76] + WORD $0x5e8b; BYTE $0x54 // mov ebx, dword [rsi + 84] LONG $0xd4940f41 // sete r12b WORD $0x423b; BYTE $0x50 // cmp eax, dword [rdx + 80] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] - WORD $0x4a3b; BYTE $0x54 // cmp ecx, dword [rdx + 84] + LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + WORD $0x5a3b; BYTE $0x54 // cmp ebx, dword [rdx + 84] WORD $0x468b; BYTE $0x58 // mov eax, dword [rsi + 88] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] WORD $0x423b; BYTE $0x58 // cmp eax, dword [rdx + 88] WORD $0x468b; BYTE $0x5c // mov eax, dword [rsi + 92] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] + LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] WORD $0x423b; BYTE $0x5c // cmp eax, dword [rdx + 92] WORD $0x468b; BYTE $0x60 // mov eax, dword [rsi + 96] LONG $0xd1940f41 // sete r9b WORD $0x423b; BYTE $0x60 // cmp eax, dword [rdx + 96] WORD $0x468b; BYTE $0x64 // mov eax, dword [rsi + 100] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] + LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] WORD $0x423b; BYTE $0x64 // cmp eax, dword [rdx + 100] WORD $0x468b; BYTE $0x68 // mov eax, dword [rsi + 104] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] + LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] WORD $0x423b; BYTE $0x68 // cmp eax, dword [rdx + 104] WORD $0x468b; BYTE $0x6c // mov eax, dword [rsi + 108] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] + LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] WORD $0x423b; BYTE $0x6c // cmp eax, dword [rdx + 108] WORD $0x468b; BYTE $0x70 // mov eax, dword [rsi + 112] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] WORD $0x423b; BYTE $0x70 // cmp eax, dword [rdx + 112] WORD $0x468b; BYTE $0x74 // mov eax, dword [rsi + 116] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] WORD $0x423b; BYTE $0x74 // cmp eax, dword [rdx + 116] WORD $0x468b; BYTE $0x78 // mov eax, dword [rsi + 120] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] + LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] WORD $0x423b; BYTE $0x78 // cmp eax, dword [rdx + 120] WORD $0x468b; BYTE $0x7c // mov eax, dword [rsi + 124] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] + LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x80ee8348 // sub rsi, -128 WORD $0x423b; BYTE $0x7c // cmp eax, dword [rdx + 124] - LONG $0xd7940f40 // sete dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x940f; BYTE $0xd1 // sete cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x80c28148; WORD $0x0000; BYTE $0x00 // add rdx, 128 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB0_24 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB0_26: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_28: @@ -277,16 +278,16 @@ LBB0_28: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB0_28 JMP LBB0_123 @@ -299,266 +300,361 @@ LBB0_29: JE LBB0_112 WORD $0xff83; BYTE $0x0c // cmp edi, 12 JNE LBB0_123 - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_50 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x634c; BYTE $0xd0 // movsxd r10, eax LBB0_48: LONG $0x06100ff2 // movsd xmm0, qword [rsi] LONG $0x08c68348 // add rsi, 8 LONG $0x022e0f66 // ucomisd xmm0, qword [rdx] LONG $0x08528d48 // lea rdx, [rdx + 8] - LONG $0xd2940f41 // sete r10b - WORD $0xf641; BYTE $0xda // neg r10b - LONG $0x07788d48 // lea rdi, [rax + 7] - WORD $0x8548; BYTE $0xc0 // test rax, rax - LONG $0xf8490f48 // cmovns rdi, rax + WORD $0x9b0f; BYTE $0xd1 // setnp cl + WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0xcb20 // and bl, cl + WORD $0xdbf6 // neg bl + LONG $0x077a8d49 // lea rdi, [r10 + 7] + WORD $0x854d; BYTE $0xd2 // test r10, r10 + LONG $0xfa490f49 // cmovns rdi, r10 LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] - WORD $0x3045; BYTE $0xc2 // xor r10b, r8b + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] + WORD $0x3044; BYTE $0xc3 // xor bl, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] - WORD $0xc189 // mov ecx, eax + WORD $0x8944; BYTE $0xd1 // mov ecx, r10d WORD $0x2944; BYTE $0xc9 // sub ecx, r9d - LONG $0x000001bb; BYTE $0x00 // mov ebx, 1 - WORD $0xe3d3 // shl ebx, cl - WORD $0x2044; BYTE $0xd3 // and bl, r10b - WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl - LONG $0x01c08348 // add rax, 1 - LONG $0x08f88348 // cmp rax, 8 + LONG $0x000001b8; BYTE $0x00 // mov eax, 1 + WORD $0xe0d3 // shl eax, cl + WORD $0xd820 // and al, bl + WORD $0x3044; BYTE $0xc0 // xor al, r8b + LONG $0x3c048841 // mov byte [r12 + rdi], al + LONG $0x01c28349 // add r10, 1 + LONG $0x08fa8349 // cmp r10, 8 JNE LBB0_48 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_50: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_54 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 - LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 + LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 LBB0_52: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 LONG $0x06100ff2 // movsd xmm0, qword [rsi] - LONG $0x4e100ff2; BYTE $0x08 // movsd xmm1, qword [rsi + 8] LONG $0x022e0f66 // ucomisd xmm0, qword [rdx] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] - LONG $0x4a2e0f66; BYTE $0x08 // ucomisd xmm1, qword [rdx + 8] - WORD $0x940f; BYTE $0xd0 // sete al + LONG $0x46100ff2; BYTE $0x08 // movsd xmm0, qword [rsi + 8] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x15244c88 // mov byte [rsp + 21], cl + LONG $0x422e0f66; BYTE $0x08 // ucomisd xmm0, qword [rdx + 8] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0d244c88 // mov byte [rsp + 13], cl LONG $0x46100ff2; BYTE $0x10 // movsd xmm0, qword [rsi + 16] LONG $0x422e0f66; BYTE $0x10 // ucomisd xmm0, qword [rdx + 16] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x14244c88 // mov byte [rsp + 20], cl LONG $0x46100ff2; BYTE $0x18 // movsd xmm0, qword [rsi + 24] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] LONG $0x422e0f66; BYTE $0x18 // ucomisd xmm0, qword [rdx + 24] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x17244c88 // mov byte [rsp + 23], cl LONG $0x46100ff2; BYTE $0x20 // movsd xmm0, qword [rsi + 32] LONG $0x422e0f66; BYTE $0x20 // ucomisd xmm0, qword [rdx + 32] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x16244c88 // mov byte [rsp + 22], cl LONG $0x46100ff2; BYTE $0x28 // movsd xmm0, qword [rsi + 40] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] LONG $0x422e0f66; BYTE $0x28 // ucomisd xmm0, qword [rdx + 40] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f40 // sete dil + WORD $0x2040; BYTE $0xc7 // and dil, al LONG $0x46100ff2; BYTE $0x30 // movsd xmm0, qword [rsi + 48] LONG $0x422e0f66; BYTE $0x30 // ucomisd xmm0, qword [rdx + 48] - LONG $0x46100ff2; BYTE $0x38 // movsd xmm0, qword [rsi + 56] + WORD $0x9b0f; BYTE $0xd0 // setnp al LONG $0xd5940f41 // sete r13b + WORD $0x2041; BYTE $0xc5 // and r13b, al + LONG $0x46100ff2; BYTE $0x38 // movsd xmm0, qword [rsi + 56] LONG $0x422e0f66; BYTE $0x38 // ucomisd xmm0, qword [rdx + 56] - LONG $0xd7940f41 // sete r15b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x03244c88 // mov byte [rsp + 3], cl LONG $0x46100ff2; BYTE $0x40 // movsd xmm0, qword [rsi + 64] LONG $0x422e0f66; BYTE $0x40 // ucomisd xmm0, qword [rdx + 64] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x13244c88 // mov byte [rsp + 19], cl LONG $0x46100ff2; BYTE $0x48 // movsd xmm0, qword [rsi + 72] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0x422e0f66; BYTE $0x48 // ucomisd xmm0, qword [rdx + 72] - WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0xc320 // and bl, al LONG $0x46100ff2; BYTE $0x50 // movsd xmm0, qword [rsi + 80] LONG $0x422e0f66; BYTE $0x50 // ucomisd xmm0, qword [rdx + 80] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x12244c88 // mov byte [rsp + 18], cl LONG $0x46100ff2; BYTE $0x58 // movsd xmm0, qword [rsi + 88] - LONG $0xd1940f41 // sete r9b LONG $0x422e0f66; BYTE $0x58 // ucomisd xmm0, qword [rdx + 88] - LONG $0xd3940f41 // sete r11b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x11244c88 // mov byte [rsp + 17], cl LONG $0x46100ff2; BYTE $0x60 // movsd xmm0, qword [rsi + 96] LONG $0x422e0f66; BYTE $0x60 // ucomisd xmm0, qword [rdx + 96] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x10244c88 // mov byte [rsp + 16], cl LONG $0x46100ff2; BYTE $0x68 // movsd xmm0, qword [rsi + 104] - LONG $0xd2940f41 // sete r10b LONG $0x422e0f66; BYTE $0x68 // ucomisd xmm0, qword [rdx + 104] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0f244c88 // mov byte [rsp + 15], cl LONG $0x46100ff2; BYTE $0x70 // movsd xmm0, qword [rsi + 112] LONG $0x422e0f66; BYTE $0x70 // ucomisd xmm0, qword [rdx + 112] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0c244c88 // mov byte [rsp + 12], cl LONG $0x46100ff2; BYTE $0x78 // movsd xmm0, qword [rsi + 120] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] LONG $0x422e0f66; BYTE $0x78 // ucomisd xmm0, qword [rdx + 120] - WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0b244c88 // mov byte [rsp + 11], cl QUAD $0x0000008086100ff2 // movsd xmm0, qword [rsi + 128] QUAD $0x00000080822e0f66 // ucomisd xmm0, qword [rdx + 128] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0e244c88 // mov byte [rsp + 14], cl QUAD $0x0000008886100ff2 // movsd xmm0, qword [rsi + 136] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] QUAD $0x00000088822e0f66 // ucomisd xmm0, qword [rdx + 136] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0a244c88 // mov byte [rsp + 10], cl QUAD $0x0000009086100ff2 // movsd xmm0, qword [rsi + 144] - LONG $0xd6940f41 // sete r14b QUAD $0x00000090822e0f66 // ucomisd xmm0, qword [rdx + 144] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x09244c88 // mov byte [rsp + 9], cl QUAD $0x0000009886100ff2 // movsd xmm0, qword [rsi + 152] - LONG $0xd4940f41 // sete r12b QUAD $0x00000098822e0f66 // ucomisd xmm0, qword [rdx + 152] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd6940f41 // sete r14b + WORD $0x2041; BYTE $0xc6 // and r14b, al QUAD $0x000000a086100ff2 // movsd xmm0, qword [rsi + 160] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] QUAD $0x000000a0822e0f66 // ucomisd xmm0, qword [rdx + 160] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x08244c88 // mov byte [rsp + 8], cl QUAD $0x000000a886100ff2 // movsd xmm0, qword [rsi + 168] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] QUAD $0x000000a8822e0f66 // ucomisd xmm0, qword [rdx + 168] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x07244c88 // mov byte [rsp + 7], cl QUAD $0x000000b086100ff2 // movsd xmm0, qword [rsi + 176] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] QUAD $0x000000b0822e0f66 // ucomisd xmm0, qword [rdx + 176] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x05244c88 // mov byte [rsp + 5], cl QUAD $0x000000b886100ff2 // movsd xmm0, qword [rsi + 184] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] QUAD $0x000000b8822e0f66 // ucomisd xmm0, qword [rdx + 184] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f41 // sete r15b + WORD $0x2041; BYTE $0xc7 // and r15b, al QUAD $0x000000c086100ff2 // movsd xmm0, qword [rsi + 192] - LONG $0xd0940f41 // sete r8b QUAD $0x000000c0822e0f66 // ucomisd xmm0, qword [rdx + 192] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x06244c88 // mov byte [rsp + 6], cl QUAD $0x000000c886100ff2 // movsd xmm0, qword [rsi + 200] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] QUAD $0x000000c8822e0f66 // ucomisd xmm0, qword [rdx + 200] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl QUAD $0x000000d086100ff2 // movsd xmm0, qword [rsi + 208] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] QUAD $0x000000d0822e0f66 // ucomisd xmm0, qword [rdx + 208] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd3940f41 // sete r11b + WORD $0x2041; BYTE $0xc3 // and r11b, al QUAD $0x000000d886100ff2 // movsd xmm0, qword [rsi + 216] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] QUAD $0x000000d8822e0f66 // ucomisd xmm0, qword [rdx + 216] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd2940f41 // sete r10b + WORD $0x2041; BYTE $0xc2 // and r10b, al QUAD $0x000000e086100ff2 // movsd xmm0, qword [rsi + 224] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] QUAD $0x000000e0822e0f66 // ucomisd xmm0, qword [rdx + 224] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x04244c88 // mov byte [rsp + 4], cl QUAD $0x000000e886100ff2 // movsd xmm0, qword [rsi + 232] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] QUAD $0x000000e8822e0f66 // ucomisd xmm0, qword [rdx + 232] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl QUAD $0x000000f086100ff2 // movsd xmm0, qword [rsi + 240] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] QUAD $0x000000f0822e0f66 // ucomisd xmm0, qword [rdx + 240] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd1940f41 // sete r9b + WORD $0x2041; BYTE $0xc1 // and r9b, al QUAD $0x000000f886100ff2 // movsd xmm0, qword [rsi + 248] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 QUAD $0x000000f8822e0f66 // ucomisd xmm0, qword [rdx + 248] - LONG $0xd7940f40 // sete dil + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd0940f41 // sete r8b + WORD $0x2041; BYTE $0xc0 // and r8b, al + LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] WORD $0xc000 // add al, al - LONG $0x04244402 // add al, byte [rsp + 4] + LONG $0x15244402 // add al, byte [rsp + 21] + LONG $0x05e7c040 // shl dil, 5 LONG $0x06e5c041 // shl r13b, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0845; BYTE $0xef // or r15b, r13b - LONG $0x6cb60f44; WORD $0x0524 // movzx r13d, byte [rsp + 5] - LONG $0x02e5c041 // shl r13b, 2 - WORD $0x0841; BYTE $0xc5 // or r13b, al - WORD $0x8944; BYTE $0xe8 // mov eax, r13d - WORD $0xc900 // add cl, cl - LONG $0x08244c02 // add cl, byte [rsp + 8] + WORD $0x0841; BYTE $0xfd // or r13b, dil + WORD $0x8944; BYTE $0xef // mov edi, r13d + LONG $0x244cb60f; BYTE $0x14 // movzx ecx, byte [rsp + 20] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xc108 // or cl, al + WORD $0xd889 // mov eax, ebx + WORD $0xd800 // add al, bl + LONG $0x13244402 // add al, byte [rsp + 19] + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x2444b60f; BYTE $0x03 // movzx eax, byte [rsp + 3] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x03244488 // mov byte [rsp + 3], al + LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x17 // movzx eax, byte [rsp + 23] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + LONG $0x245cb60f; BYTE $0x11 // movzx ebx, byte [rsp + 17] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0840; BYTE $0xfb // or bl, dil LONG $0x6cb60f44; WORD $0x1624 // movzx r13d, byte [rsp + 22] - LONG $0x03e5c041 // shl r13b, 3 + LONG $0x04e5c041 // shl r13b, 4 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0x0844; BYTE $0xe9 // or cl, r13b - WORD $0x8941; BYTE $0xcd // mov r13d, ecx - LONG $0x03e3c041 // shl r11b, 3 - WORD $0x0845; BYTE $0xcb // or r11b, r9b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xe9 // or cl, r13b - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xda // or r10b, r11b - LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0844; BYTE $0xd0 // or al, r10b - LONG $0x4cb60f44; WORD $0x0624 // movzx r9d, byte [rsp + 6] - LONG $0x06e1c041 // shl r9b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xcb // or bl, r9b - WORD $0x0841; BYTE $0xcf // or r15b, cl - WORD $0xc308 // or bl, al - WORD $0x0045; BYTE $0xf6 // add r14b, r14b - LONG $0x24740244; BYTE $0x0e // add r14b, byte [rsp + 14] - LONG $0x02e4c041 // shl r12b, 2 - WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0a // movzx eax, byte [rsp + 10] + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc789 // mov edi, eax + LONG $0x245cb60f; BYTE $0x0f // movzx ebx, byte [rsp + 15] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x3e // mov byte [r14], r15b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x0a // movzx ebx, byte [rsp + 10] + WORD $0xdb00 // add bl, bl + LONG $0x0e245c02 // add bl, byte [rsp + 14] + LONG $0x244cb60f; BYTE $0x09 // movzx ecx, byte [rsp + 9] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xd908 // or cl, bl + LONG $0x03e6c041 // shl r14b, 3 + WORD $0x0841; BYTE $0xce // or r14b, cl + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xf3 // or bl, r14b + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x74b60f44; WORD $0x0324 // movzx r14d, byte [rsp + 3] + WORD $0x0845; BYTE $0xee // or r14b, r13b + LONG $0x6cb60f44; WORD $0x0724 // movzx r13d, byte [rsp + 7] + LONG $0x05e5c041 // shl r13b, 5 + LONG $0x244cb60f; BYTE $0x05 // movzx ecx, byte [rsp + 5] WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x0844; BYTE $0xe9 // or cl, r13b + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x07e7c041 // shl r15b, 7 + WORD $0x0841; BYTE $0xcf // or r15b, cl + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] + WORD $0xc900 // add cl, cl + LONG $0x06244c02 // add cl, byte [rsp + 6] + LONG $0x02e3c041 // shl r11b, 2 + WORD $0x0841; BYTE $0xcb // or r11b, cl + LONG $0x03e2c041 // shl r10b, 3 + WORD $0x0845; BYTE $0xda // or r10b, r11b + LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0x0844; BYTE $0xd1 // or cl, r10b + LONG $0x24348845 // mov byte [r12], r14b + LONG $0x245cb60f; BYTE $0x28 // movzx ebx, byte [rsp + 40] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e1c041 // shl r9b, 6 + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x24448841; BYTE $0x01 // mov byte [r12 + 1], al LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xc8 // or r8b, r9b WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl - WORD $0x0841; BYTE $0xc0 // or r8b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x14244402 // add al, byte [rsp + 20] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x13 // movzx ecx, byte [rsp + 19] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xc108 // or cl, al - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xc7 // or dil, al - WORD $0x0840; BYTE $0xcf // or dil, cl - LONG $0x02468845 // mov byte [r14 + 2], r8b - LONG $0x037e8841 // mov byte [r14 + 3], dil + LONG $0x247c8845; BYTE $0x02 // mov byte [r12 + 2], r15b + LONG $0x24448845; BYTE $0x03 // mov byte [r12 + 3], r8b LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff28 // add qword [rsp + 40], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 JNE LBB0_52 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] LBB0_54: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_56: + LONG $0x01498d4c // lea r9, [rcx + 1] LONG $0x04100ff2; BYTE $0xce // movsd xmm0, qword [rsi + 8*rcx] LONG $0x042e0f66; BYTE $0xca // ucomisd xmm0, qword [rdx + 8*rcx] - LONG $0x01418d4c // lea r8, [rcx + 1] - WORD $0x940f; BYTE $0xd3 // sete bl - WORD $0xdbf6 // neg bl + WORD $0x9b0f; BYTE $0xd3 // setnp bl + WORD $0x940f; BYTE $0xd0 // sete al + WORD $0xd820 // and al, bl + WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] - WORD $0x3044; BYTE $0xcb // xor bl, r9b + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] + WORD $0x3044; BYTE $0xc0 // xor al, r8b WORD $0xe180; BYTE $0x07 // and cl, 7 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0xd820 // and al, bl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al - WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xc3 // xor bl, r8b + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl + WORD $0x894c; BYTE $0xc9 // mov rcx, r9 + WORD $0x394d; BYTE $0xce // cmp r14, r9 JNE LBB0_56 JMP LBB0_123 @@ -567,16 +663,16 @@ LBB0_2: JE LBB0_57 WORD $0xff83; BYTE $0x03 // cmp edi, 3 JNE LBB0_123 - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_8 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB0_6: WORD $0xb60f; BYTE $0x0e // movzx ecx, byte [rsi] @@ -589,7 +685,7 @@ LBB0_6: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -598,49 +694,49 @@ LBB0_6: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB0_6 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_8: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_12 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 + LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 LBB0_10: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0xb60f; BYTE $0x06 // movzx eax, byte [rsi] LONG $0x014eb60f // movzx ecx, byte [rsi + 1] WORD $0x023a // cmp al, byte [rdx] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] WORD $0x4a3a; BYTE $0x01 // cmp cl, byte [rdx + 1] - WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x940f; BYTE $0xd3 // sete bl LONG $0x0246b60f // movzx eax, byte [rsi + 2] WORD $0x423a; BYTE $0x02 // cmp al, byte [rdx + 2] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] + LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] LONG $0x0346b60f // movzx eax, byte [rsi + 3] WORD $0x423a; BYTE $0x03 // cmp al, byte [rdx + 3] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] + LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] LONG $0x0446b60f // movzx eax, byte [rsi + 4] WORD $0x423a; BYTE $0x04 // cmp al, byte [rdx + 4] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] LONG $0x0546b60f // movzx eax, byte [rsi + 5] WORD $0x423a; BYTE $0x05 // cmp al, byte [rdx + 5] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + LONG $0x2454940f; BYTE $0x03 // sete byte [rsp + 3] LONG $0x0646b60f // movzx eax, byte [rsi + 6] WORD $0x423a; BYTE $0x06 // cmp al, byte [rdx + 6] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] + LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] LONG $0x0746b60f // movzx eax, byte [rsi + 7] WORD $0x423a; BYTE $0x07 // cmp al, byte [rdx + 7] LONG $0xd7940f41 // sete r15b LONG $0x0846b60f // movzx eax, byte [rsi + 8] WORD $0x423a; BYTE $0x08 // cmp al, byte [rdx + 8] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0x0946b60f // movzx eax, byte [rsi + 9] WORD $0x423a; BYTE $0x09 // cmp al, byte [rdx + 9] LONG $0xd7940f40 // sete dil @@ -655,16 +751,16 @@ LBB0_10: LONG $0xd6940f41 // sete r14b LONG $0x0d46b60f // movzx eax, byte [rsi + 13] WORD $0x423a; BYTE $0x0d // cmp al, byte [rdx + 13] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] + LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] LONG $0x0e46b60f // movzx eax, byte [rsi + 14] WORD $0x423a; BYTE $0x0e // cmp al, byte [rdx + 14] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] + LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] LONG $0x0f46b60f // movzx eax, byte [rsi + 15] WORD $0x423a; BYTE $0x0f // cmp al, byte [rdx + 15] - WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0xd0940f41 // sete r8b LONG $0x1046b60f // movzx eax, byte [rsi + 16] WORD $0x423a; BYTE $0x10 // cmp al, byte [rdx + 16] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] + LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] LONG $0x1146b60f // movzx eax, byte [rsi + 17] WORD $0x423a; BYTE $0x11 // cmp al, byte [rdx + 17] LONG $0xd4940f41 // sete r12b @@ -673,144 +769,144 @@ LBB0_10: LONG $0xd5940f41 // sete r13b LONG $0x1346b60f // movzx eax, byte [rsi + 19] WORD $0x423a; BYTE $0x13 // cmp al, byte [rdx + 19] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] + LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] LONG $0x1446b60f // movzx eax, byte [rsi + 20] WORD $0x423a; BYTE $0x14 // cmp al, byte [rdx + 20] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] LONG $0x1546b60f // movzx eax, byte [rsi + 21] WORD $0x423a; BYTE $0x15 // cmp al, byte [rdx + 21] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] + LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] LONG $0x1646b60f // movzx eax, byte [rsi + 22] WORD $0x423a; BYTE $0x16 // cmp al, byte [rdx + 22] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] LONG $0x1746b60f // movzx eax, byte [rsi + 23] WORD $0x423a; BYTE $0x17 // cmp al, byte [rdx + 23] LONG $0xd1940f41 // sete r9b LONG $0x1846b60f // movzx eax, byte [rsi + 24] WORD $0x423a; BYTE $0x18 // cmp al, byte [rdx + 24] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] + LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] LONG $0x1946b60f // movzx eax, byte [rsi + 25] WORD $0x423a; BYTE $0x19 // cmp al, byte [rdx + 25] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] + LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] LONG $0x1a46b60f // movzx eax, byte [rsi + 26] WORD $0x423a; BYTE $0x1a // cmp al, byte [rdx + 26] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] + LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] LONG $0x1b46b60f // movzx eax, byte [rsi + 27] WORD $0x423a; BYTE $0x1b // cmp al, byte [rdx + 27] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0x1c46b60f // movzx eax, byte [rsi + 28] WORD $0x423a; BYTE $0x1c // cmp al, byte [rdx + 28] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] LONG $0x1d46b60f // movzx eax, byte [rsi + 29] WORD $0x423a; BYTE $0x1d // cmp al, byte [rdx + 29] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] + LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x1e46b60f // movzx eax, byte [rsi + 30] WORD $0x423a; BYTE $0x1e // cmp al, byte [rdx + 30] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] + LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] LONG $0x1f46b60f // movzx eax, byte [rsi + 31] LONG $0x20c68348 // add rsi, 32 WORD $0x423a; BYTE $0x1f // cmp al, byte [rdx + 31] - LONG $0xd0940f41 // sete r8b - WORD $0xc900 // add cl, cl - LONG $0x28244c02 // add cl, byte [rsp + 40] - WORD $0xc889 // mov eax, ecx - LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xdb00 // add bl, bl + LONG $0x04245c02 // add bl, byte [rsp + 4] + WORD $0xd889 // mov eax, ebx + LONG $0x245cb60f; BYTE $0x05 // movzx ebx, byte [rsp + 5] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xcf // or r15b, cl - LONG $0x244cb60f; BYTE $0x14 // movzx ecx, byte [rsp + 20] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x245cb60f; BYTE $0x15 // movzx ebx, byte [rsp + 21] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx WORD $0x0040; BYTE $0xff // add dil, dil - LONG $0x247c0240; BYTE $0x07 // add dil, byte [rsp + 7] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x247c0240; BYTE $0x08 // add dil, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e2c041 // shl r10b, 2 WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0xcf89 // mov edi, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0xdf89 // mov edi, ebx LONG $0x03e3c041 // shl r11b, 3 WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0840; BYTE $0xf9 // or cl, dil + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xfb // or bl, dil LONG $0x04e6c041 // shl r14b, 4 WORD $0x0845; BYTE $0xde // or r14b, r11b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x247cb60f; BYTE $0x06 // movzx edi, byte [rsp + 6] + LONG $0x247cb60f; BYTE $0x07 // movzx edi, byte [rsp + 7] LONG $0x06e7c040 // shl dil, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0840; BYTE $0xfb // or bl, dil - WORD $0x0841; BYTE $0xcf // or r15b, cl - WORD $0xc308 // or bl, al + LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + WORD $0x0841; BYTE $0xdf // or r15b, bl + WORD $0x0841; BYTE $0xc0 // or r8b, al WORD $0x0045; BYTE $0xe4 // add r12b, r12b - LONG $0x24640244; BYTE $0x0d // add r12b, byte [rsp + 13] + LONG $0x24640244; BYTE $0x0e // add r12b, byte [rsp + 14] LONG $0x02e5c041 // shl r13b, 2 WORD $0x0845; BYTE $0xe5 // or r13b, r12b - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xe8 // or al, r13b - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0a // movzx eax, byte [rsp + 10] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x3e // mov byte [r14], r15b - LONG $0x244cb60f; BYTE $0x0b // movzx ecx, byte [rsp + 11] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x243c8845 // mov byte [r12], r15b + LONG $0x245cb60f; BYTE $0x0c // movzx ebx, byte [rsp + 12] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x24448845; BYTE $0x01 // mov byte [r12 + 1], r8b WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] + LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x12 // movzx ecx, byte [rsp + 18] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xc8 // or r8b, cl - WORD $0x0841; BYTE $0xc0 // or r8b, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x03468845 // mov byte [r14 + 3], r8b + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x13 // movzx ebx, byte [rsp + 19] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x20c28348 // add rdx, 32 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff28 // add qword [rsp + 40], -1 JNE LBB0_10 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] LBB0_12: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_14: @@ -821,16 +917,16 @@ LBB0_14: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB0_14 JMP LBB0_123 @@ -839,16 +935,16 @@ LBB0_30: JE LBB0_90 WORD $0xff83; BYTE $0x08 // cmp edi, 8 JNE LBB0_123 - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_36 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB0_34: WORD $0x8b48; BYTE $0x0e // mov rcx, qword [rsi] @@ -861,7 +957,7 @@ LBB0_34: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -870,49 +966,49 @@ LBB0_34: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB0_34 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_36: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_40 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB0_38: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0x8b48; BYTE $0x06 // mov rax, qword [rsi] LONG $0x084e8b48 // mov rcx, qword [rsi + 8] WORD $0x3b48; BYTE $0x02 // cmp rax, qword [rdx] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] LONG $0x084a3b48 // cmp rcx, qword [rdx + 8] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] LONG $0x10468b48 // mov rax, qword [rsi + 16] LONG $0x10423b48 // cmp rax, qword [rdx + 16] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] + LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] LONG $0x18468b48 // mov rax, qword [rsi + 24] LONG $0x18423b48 // cmp rax, qword [rdx + 24] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] + LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] LONG $0x20468b48 // mov rax, qword [rsi + 32] LONG $0x20423b48 // cmp rax, qword [rdx + 32] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] LONG $0x28468b48 // mov rax, qword [rsi + 40] LONG $0x28423b48 // cmp rax, qword [rdx + 40] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + LONG $0x2454940f; BYTE $0x03 // sete byte [rsp + 3] LONG $0x30468b48 // mov rax, qword [rsi + 48] LONG $0x30423b48 // cmp rax, qword [rdx + 48] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] + LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] LONG $0x38468b48 // mov rax, qword [rsi + 56] LONG $0x38423b48 // cmp rax, qword [rdx + 56] LONG $0xd5940f41 // sete r13b LONG $0x40468b48 // mov rax, qword [rsi + 64] LONG $0x40423b48 // cmp rax, qword [rdx + 64] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] LONG $0x48468b48 // mov rax, qword [rsi + 72] LONG $0x48423b48 // cmp rax, qword [rdx + 72] LONG $0xd0940f41 // sete r8b @@ -924,165 +1020,165 @@ LBB0_38: LONG $0xd7940f41 // sete r15b LONG $0x60468b48 // mov rax, qword [rsi + 96] LONG $0x60423b48 // cmp rax, qword [rdx + 96] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] + LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] LONG $0x68468b48 // mov rax, qword [rsi + 104] LONG $0x68423b48 // cmp rax, qword [rdx + 104] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] + LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] LONG $0x70468b48 // mov rax, qword [rsi + 112] LONG $0x70423b48 // cmp rax, qword [rdx + 112] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0x78468b48 // mov rax, qword [rsi + 120] LONG $0x78423b48 // cmp rax, qword [rdx + 120] - WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0xd7940f40 // sete dil LONG $0x80868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 128] - LONG $0x888e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 136] + LONG $0x889e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 136] LONG $0x80823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 128] LONG $0x90868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 144] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] - LONG $0x888a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 136] - LONG $0x988e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 152] + LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x889a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 136] + LONG $0x989e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 152] LONG $0xd2940f41 // sete r10b LONG $0x90823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 144] LONG $0xa0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 160] LONG $0xd6940f41 // sete r14b - LONG $0x988a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 152] - LONG $0xa88e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 168] + LONG $0x989a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 152] + LONG $0xa89e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 168] LONG $0xd4940f41 // sete r12b LONG $0xa0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 160] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] - LONG $0xa88a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 168] + LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0xa89a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 168] LONG $0xb0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 176] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] LONG $0xb0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 176] LONG $0xb8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 184] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] + LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] LONG $0xb8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 184] LONG $0xc0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 192] LONG $0xd1940f41 // sete r9b LONG $0xc0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 192] LONG $0xc8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 200] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] + LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] LONG $0xc8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 200] LONG $0xd0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 208] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] + LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] LONG $0xd0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 208] LONG $0xd8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 216] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] + LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] LONG $0xd8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 216] LONG $0xe0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 224] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0xe0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 224] LONG $0xe8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 232] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] LONG $0xe8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 232] LONG $0xf0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 240] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] + LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] LONG $0xf0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 240] LONG $0xf8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 248] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] + LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 LONG $0xf8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 248] - LONG $0xd7940f40 // sete dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x940f; BYTE $0xd1 // sete cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB0_38 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB0_40: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_42: @@ -1093,30 +1189,30 @@ LBB0_42: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB0_42 JMP LBB0_123 LBB0_68: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_72 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB0_70: WORD $0xb70f; BYTE $0x0e // movzx ecx, word [rsi] @@ -1129,7 +1225,7 @@ LBB0_70: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -1138,49 +1234,49 @@ LBB0_70: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB0_70 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_72: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_76 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB0_74: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0xb70f; BYTE $0x06 // movzx eax, word [rsi] LONG $0x024eb70f // movzx ecx, word [rsi + 2] WORD $0x3b66; BYTE $0x02 // cmp ax, word [rdx] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] LONG $0x024a3b66 // cmp cx, word [rdx + 2] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] LONG $0x0446b70f // movzx eax, word [rsi + 4] LONG $0x04423b66 // cmp ax, word [rdx + 4] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] + LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] LONG $0x0646b70f // movzx eax, word [rsi + 6] LONG $0x06423b66 // cmp ax, word [rdx + 6] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] + LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] LONG $0x0846b70f // movzx eax, word [rsi + 8] LONG $0x08423b66 // cmp ax, word [rdx + 8] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] LONG $0x0a46b70f // movzx eax, word [rsi + 10] LONG $0x0a423b66 // cmp ax, word [rdx + 10] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + LONG $0x2454940f; BYTE $0x03 // sete byte [rsp + 3] LONG $0x0c46b70f // movzx eax, word [rsi + 12] LONG $0x0c423b66 // cmp ax, word [rdx + 12] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] + LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] LONG $0x0e46b70f // movzx eax, word [rsi + 14] LONG $0x0e423b66 // cmp ax, word [rdx + 14] LONG $0xd5940f41 // sete r13b LONG $0x1046b70f // movzx eax, word [rsi + 16] LONG $0x10423b66 // cmp ax, word [rdx + 16] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] LONG $0x1246b70f // movzx eax, word [rsi + 18] LONG $0x12423b66 // cmp ax, word [rdx + 18] LONG $0xd0940f41 // sete r8b @@ -1192,165 +1288,165 @@ LBB0_74: LONG $0xd7940f41 // sete r15b LONG $0x1846b70f // movzx eax, word [rsi + 24] LONG $0x18423b66 // cmp ax, word [rdx + 24] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] + LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] LONG $0x1a46b70f // movzx eax, word [rsi + 26] LONG $0x1a423b66 // cmp ax, word [rdx + 26] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] + LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] LONG $0x1c46b70f // movzx eax, word [rsi + 28] LONG $0x1c423b66 // cmp ax, word [rdx + 28] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0x1e46b70f // movzx eax, word [rsi + 30] LONG $0x1e423b66 // cmp ax, word [rdx + 30] - WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0xd7940f40 // sete dil LONG $0x2046b70f // movzx eax, word [rsi + 32] - LONG $0x224eb70f // movzx ecx, word [rsi + 34] + LONG $0x225eb70f // movzx ebx, word [rsi + 34] LONG $0x20423b66 // cmp ax, word [rdx + 32] LONG $0x2446b70f // movzx eax, word [rsi + 36] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] - LONG $0x224a3b66 // cmp cx, word [rdx + 34] - LONG $0x264eb70f // movzx ecx, word [rsi + 38] + LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x225a3b66 // cmp bx, word [rdx + 34] + LONG $0x265eb70f // movzx ebx, word [rsi + 38] LONG $0xd2940f41 // sete r10b LONG $0x24423b66 // cmp ax, word [rdx + 36] LONG $0x2846b70f // movzx eax, word [rsi + 40] LONG $0xd6940f41 // sete r14b - LONG $0x264a3b66 // cmp cx, word [rdx + 38] - LONG $0x2a4eb70f // movzx ecx, word [rsi + 42] + LONG $0x265a3b66 // cmp bx, word [rdx + 38] + LONG $0x2a5eb70f // movzx ebx, word [rsi + 42] LONG $0xd4940f41 // sete r12b LONG $0x28423b66 // cmp ax, word [rdx + 40] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] - LONG $0x2a4a3b66 // cmp cx, word [rdx + 42] + LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2a5a3b66 // cmp bx, word [rdx + 42] LONG $0x2c46b70f // movzx eax, word [rsi + 44] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] LONG $0x2c423b66 // cmp ax, word [rdx + 44] LONG $0x2e46b70f // movzx eax, word [rsi + 46] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] + LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] LONG $0x2e423b66 // cmp ax, word [rdx + 46] LONG $0x3046b70f // movzx eax, word [rsi + 48] LONG $0xd1940f41 // sete r9b LONG $0x30423b66 // cmp ax, word [rdx + 48] LONG $0x3246b70f // movzx eax, word [rsi + 50] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] + LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] LONG $0x32423b66 // cmp ax, word [rdx + 50] LONG $0x3446b70f // movzx eax, word [rsi + 52] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] + LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] LONG $0x34423b66 // cmp ax, word [rdx + 52] LONG $0x3646b70f // movzx eax, word [rsi + 54] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] + LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] LONG $0x36423b66 // cmp ax, word [rdx + 54] LONG $0x3846b70f // movzx eax, word [rsi + 56] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0x38423b66 // cmp ax, word [rdx + 56] LONG $0x3a46b70f // movzx eax, word [rsi + 58] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] LONG $0x3a423b66 // cmp ax, word [rdx + 58] LONG $0x3c46b70f // movzx eax, word [rsi + 60] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] + LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] LONG $0x3c423b66 // cmp ax, word [rdx + 60] LONG $0x3e46b70f // movzx eax, word [rsi + 62] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] + LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x40c68348 // add rsi, 64 LONG $0x3e423b66 // cmp ax, word [rdx + 62] - LONG $0xd7940f40 // sete dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x940f; BYTE $0xd1 // sete cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x40c28348 // add rdx, 64 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB0_74 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB0_76: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_78: @@ -1361,30 +1457,30 @@ LBB0_78: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB0_78 JMP LBB0_123 LBB0_79: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_83 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB0_81: WORD $0xb70f; BYTE $0x0e // movzx ecx, word [rsi] @@ -1397,7 +1493,7 @@ LBB0_81: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -1406,49 +1502,49 @@ LBB0_81: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB0_81 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_83: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_87 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB0_85: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0xb70f; BYTE $0x06 // movzx eax, word [rsi] LONG $0x024eb70f // movzx ecx, word [rsi + 2] WORD $0x3b66; BYTE $0x02 // cmp ax, word [rdx] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] LONG $0x024a3b66 // cmp cx, word [rdx + 2] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] LONG $0x0446b70f // movzx eax, word [rsi + 4] LONG $0x04423b66 // cmp ax, word [rdx + 4] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] + LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] LONG $0x0646b70f // movzx eax, word [rsi + 6] LONG $0x06423b66 // cmp ax, word [rdx + 6] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] + LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] LONG $0x0846b70f // movzx eax, word [rsi + 8] LONG $0x08423b66 // cmp ax, word [rdx + 8] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] LONG $0x0a46b70f // movzx eax, word [rsi + 10] LONG $0x0a423b66 // cmp ax, word [rdx + 10] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + LONG $0x2454940f; BYTE $0x03 // sete byte [rsp + 3] LONG $0x0c46b70f // movzx eax, word [rsi + 12] LONG $0x0c423b66 // cmp ax, word [rdx + 12] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] + LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] LONG $0x0e46b70f // movzx eax, word [rsi + 14] LONG $0x0e423b66 // cmp ax, word [rdx + 14] LONG $0xd5940f41 // sete r13b LONG $0x1046b70f // movzx eax, word [rsi + 16] LONG $0x10423b66 // cmp ax, word [rdx + 16] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] LONG $0x1246b70f // movzx eax, word [rsi + 18] LONG $0x12423b66 // cmp ax, word [rdx + 18] LONG $0xd0940f41 // sete r8b @@ -1460,165 +1556,165 @@ LBB0_85: LONG $0xd7940f41 // sete r15b LONG $0x1846b70f // movzx eax, word [rsi + 24] LONG $0x18423b66 // cmp ax, word [rdx + 24] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] + LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] LONG $0x1a46b70f // movzx eax, word [rsi + 26] LONG $0x1a423b66 // cmp ax, word [rdx + 26] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] + LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] LONG $0x1c46b70f // movzx eax, word [rsi + 28] LONG $0x1c423b66 // cmp ax, word [rdx + 28] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0x1e46b70f // movzx eax, word [rsi + 30] LONG $0x1e423b66 // cmp ax, word [rdx + 30] - WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0xd7940f40 // sete dil LONG $0x2046b70f // movzx eax, word [rsi + 32] - LONG $0x224eb70f // movzx ecx, word [rsi + 34] + LONG $0x225eb70f // movzx ebx, word [rsi + 34] LONG $0x20423b66 // cmp ax, word [rdx + 32] LONG $0x2446b70f // movzx eax, word [rsi + 36] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] - LONG $0x224a3b66 // cmp cx, word [rdx + 34] - LONG $0x264eb70f // movzx ecx, word [rsi + 38] + LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x225a3b66 // cmp bx, word [rdx + 34] + LONG $0x265eb70f // movzx ebx, word [rsi + 38] LONG $0xd2940f41 // sete r10b LONG $0x24423b66 // cmp ax, word [rdx + 36] LONG $0x2846b70f // movzx eax, word [rsi + 40] LONG $0xd6940f41 // sete r14b - LONG $0x264a3b66 // cmp cx, word [rdx + 38] - LONG $0x2a4eb70f // movzx ecx, word [rsi + 42] + LONG $0x265a3b66 // cmp bx, word [rdx + 38] + LONG $0x2a5eb70f // movzx ebx, word [rsi + 42] LONG $0xd4940f41 // sete r12b LONG $0x28423b66 // cmp ax, word [rdx + 40] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] - LONG $0x2a4a3b66 // cmp cx, word [rdx + 42] + LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2a5a3b66 // cmp bx, word [rdx + 42] LONG $0x2c46b70f // movzx eax, word [rsi + 44] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] LONG $0x2c423b66 // cmp ax, word [rdx + 44] LONG $0x2e46b70f // movzx eax, word [rsi + 46] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] + LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] LONG $0x2e423b66 // cmp ax, word [rdx + 46] LONG $0x3046b70f // movzx eax, word [rsi + 48] LONG $0xd1940f41 // sete r9b LONG $0x30423b66 // cmp ax, word [rdx + 48] LONG $0x3246b70f // movzx eax, word [rsi + 50] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] + LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] LONG $0x32423b66 // cmp ax, word [rdx + 50] LONG $0x3446b70f // movzx eax, word [rsi + 52] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] + LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] LONG $0x34423b66 // cmp ax, word [rdx + 52] LONG $0x3646b70f // movzx eax, word [rsi + 54] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] + LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] LONG $0x36423b66 // cmp ax, word [rdx + 54] LONG $0x3846b70f // movzx eax, word [rsi + 56] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0x38423b66 // cmp ax, word [rdx + 56] LONG $0x3a46b70f // movzx eax, word [rsi + 58] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] LONG $0x3a423b66 // cmp ax, word [rdx + 58] LONG $0x3c46b70f // movzx eax, word [rsi + 60] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] + LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] LONG $0x3c423b66 // cmp ax, word [rdx + 60] LONG $0x3e46b70f // movzx eax, word [rsi + 62] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] + LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x40c68348 // add rsi, 64 LONG $0x3e423b66 // cmp ax, word [rdx + 62] - LONG $0xd7940f40 // sete dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x940f; BYTE $0xd1 // sete cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x40c28348 // add rdx, 64 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB0_85 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB0_87: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_89: @@ -1629,30 +1725,30 @@ LBB0_89: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB0_89 JMP LBB0_123 LBB0_101: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_105 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB0_103: WORD $0x8b48; BYTE $0x0e // mov rcx, qword [rsi] @@ -1665,7 +1761,7 @@ LBB0_103: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -1674,49 +1770,49 @@ LBB0_103: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB0_103 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_105: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_109 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB0_107: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0x8b48; BYTE $0x06 // mov rax, qword [rsi] LONG $0x084e8b48 // mov rcx, qword [rsi + 8] WORD $0x3b48; BYTE $0x02 // cmp rax, qword [rdx] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] LONG $0x084a3b48 // cmp rcx, qword [rdx + 8] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] LONG $0x10468b48 // mov rax, qword [rsi + 16] LONG $0x10423b48 // cmp rax, qword [rdx + 16] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] + LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] LONG $0x18468b48 // mov rax, qword [rsi + 24] LONG $0x18423b48 // cmp rax, qword [rdx + 24] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] + LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] LONG $0x20468b48 // mov rax, qword [rsi + 32] LONG $0x20423b48 // cmp rax, qword [rdx + 32] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] LONG $0x28468b48 // mov rax, qword [rsi + 40] LONG $0x28423b48 // cmp rax, qword [rdx + 40] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + LONG $0x2454940f; BYTE $0x03 // sete byte [rsp + 3] LONG $0x30468b48 // mov rax, qword [rsi + 48] LONG $0x30423b48 // cmp rax, qword [rdx + 48] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] + LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] LONG $0x38468b48 // mov rax, qword [rsi + 56] LONG $0x38423b48 // cmp rax, qword [rdx + 56] LONG $0xd5940f41 // sete r13b LONG $0x40468b48 // mov rax, qword [rsi + 64] LONG $0x40423b48 // cmp rax, qword [rdx + 64] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] LONG $0x48468b48 // mov rax, qword [rsi + 72] LONG $0x48423b48 // cmp rax, qword [rdx + 72] LONG $0xd0940f41 // sete r8b @@ -1728,165 +1824,165 @@ LBB0_107: LONG $0xd7940f41 // sete r15b LONG $0x60468b48 // mov rax, qword [rsi + 96] LONG $0x60423b48 // cmp rax, qword [rdx + 96] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] + LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] LONG $0x68468b48 // mov rax, qword [rsi + 104] LONG $0x68423b48 // cmp rax, qword [rdx + 104] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] + LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] LONG $0x70468b48 // mov rax, qword [rsi + 112] LONG $0x70423b48 // cmp rax, qword [rdx + 112] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0x78468b48 // mov rax, qword [rsi + 120] LONG $0x78423b48 // cmp rax, qword [rdx + 120] - WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0xd7940f40 // sete dil LONG $0x80868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 128] - LONG $0x888e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 136] + LONG $0x889e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 136] LONG $0x80823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 128] LONG $0x90868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 144] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] - LONG $0x888a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 136] - LONG $0x988e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 152] + LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x889a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 136] + LONG $0x989e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 152] LONG $0xd2940f41 // sete r10b LONG $0x90823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 144] LONG $0xa0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 160] LONG $0xd6940f41 // sete r14b - LONG $0x988a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 152] - LONG $0xa88e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 168] + LONG $0x989a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 152] + LONG $0xa89e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 168] LONG $0xd4940f41 // sete r12b LONG $0xa0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 160] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] - LONG $0xa88a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 168] + LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0xa89a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 168] LONG $0xb0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 176] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] LONG $0xb0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 176] LONG $0xb8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 184] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] + LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] LONG $0xb8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 184] LONG $0xc0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 192] LONG $0xd1940f41 // sete r9b LONG $0xc0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 192] LONG $0xc8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 200] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] + LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] LONG $0xc8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 200] LONG $0xd0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 208] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] + LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] LONG $0xd0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 208] LONG $0xd8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 216] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] + LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] LONG $0xd8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 216] LONG $0xe0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 224] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0xe0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 224] LONG $0xe8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 232] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] LONG $0xe8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 232] LONG $0xf0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 240] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] + LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] LONG $0xf0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 240] LONG $0xf8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 248] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] + LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 LONG $0xf8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 248] - LONG $0xd7940f40 // sete dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x940f; BYTE $0xd1 // sete cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB0_107 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB0_109: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_111: @@ -1897,294 +1993,389 @@ LBB0_111: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB0_111 JMP LBB0_123 LBB0_112: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_116 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x634c; BYTE $0xd0 // movsxd r10, eax LBB0_114: LONG $0x06100ff3 // movss xmm0, dword [rsi] LONG $0x04c68348 // add rsi, 4 WORD $0x2e0f; BYTE $0x02 // ucomiss xmm0, dword [rdx] LONG $0x04528d48 // lea rdx, [rdx + 4] - LONG $0xd2940f41 // sete r10b - WORD $0xf641; BYTE $0xda // neg r10b - LONG $0x07788d48 // lea rdi, [rax + 7] - WORD $0x8548; BYTE $0xc0 // test rax, rax - LONG $0xf8490f48 // cmovns rdi, rax + WORD $0x9b0f; BYTE $0xd1 // setnp cl + WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0xcb20 // and bl, cl + WORD $0xdbf6 // neg bl + LONG $0x077a8d49 // lea rdi, [r10 + 7] + WORD $0x854d; BYTE $0xd2 // test r10, r10 + LONG $0xfa490f49 // cmovns rdi, r10 LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] - WORD $0x3045; BYTE $0xc2 // xor r10b, r8b + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] + WORD $0x3044; BYTE $0xc3 // xor bl, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] - WORD $0xc189 // mov ecx, eax + WORD $0x8944; BYTE $0xd1 // mov ecx, r10d WORD $0x2944; BYTE $0xc9 // sub ecx, r9d - LONG $0x000001bb; BYTE $0x00 // mov ebx, 1 - WORD $0xe3d3 // shl ebx, cl - WORD $0x2044; BYTE $0xd3 // and bl, r10b - WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl - LONG $0x01c08348 // add rax, 1 - LONG $0x08f88348 // cmp rax, 8 + LONG $0x000001b8; BYTE $0x00 // mov eax, 1 + WORD $0xe0d3 // shl eax, cl + WORD $0xd820 // and al, bl + WORD $0x3044; BYTE $0xc0 // xor al, r8b + LONG $0x3c048841 // mov byte [r12 + rdi], al + LONG $0x01c28349 // add r10, 1 + LONG $0x08fa8349 // cmp r10, 8 JNE LBB0_114 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_116: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_120 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 - LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 + LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 LBB0_118: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 LONG $0x06100ff3 // movss xmm0, dword [rsi] - LONG $0x4e100ff3; BYTE $0x04 // movss xmm1, dword [rsi + 4] WORD $0x2e0f; BYTE $0x02 // ucomiss xmm0, dword [rdx] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] - LONG $0x044a2e0f // ucomiss xmm1, dword [rdx + 4] - WORD $0x940f; BYTE $0xd0 // sete al + LONG $0x46100ff3; BYTE $0x04 // movss xmm0, dword [rsi + 4] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x15244c88 // mov byte [rsp + 21], cl + LONG $0x04422e0f // ucomiss xmm0, dword [rdx + 4] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0d244c88 // mov byte [rsp + 13], cl LONG $0x46100ff3; BYTE $0x08 // movss xmm0, dword [rsi + 8] LONG $0x08422e0f // ucomiss xmm0, dword [rdx + 8] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x14244c88 // mov byte [rsp + 20], cl LONG $0x46100ff3; BYTE $0x0c // movss xmm0, dword [rsi + 12] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] LONG $0x0c422e0f // ucomiss xmm0, dword [rdx + 12] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x17244c88 // mov byte [rsp + 23], cl LONG $0x46100ff3; BYTE $0x10 // movss xmm0, dword [rsi + 16] LONG $0x10422e0f // ucomiss xmm0, dword [rdx + 16] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x16244c88 // mov byte [rsp + 22], cl LONG $0x46100ff3; BYTE $0x14 // movss xmm0, dword [rsi + 20] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] LONG $0x14422e0f // ucomiss xmm0, dword [rdx + 20] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f40 // sete dil + WORD $0x2040; BYTE $0xc7 // and dil, al LONG $0x46100ff3; BYTE $0x18 // movss xmm0, dword [rsi + 24] LONG $0x18422e0f // ucomiss xmm0, dword [rdx + 24] - LONG $0x46100ff3; BYTE $0x1c // movss xmm0, dword [rsi + 28] + WORD $0x9b0f; BYTE $0xd0 // setnp al LONG $0xd5940f41 // sete r13b + WORD $0x2041; BYTE $0xc5 // and r13b, al + LONG $0x46100ff3; BYTE $0x1c // movss xmm0, dword [rsi + 28] LONG $0x1c422e0f // ucomiss xmm0, dword [rdx + 28] - LONG $0xd7940f41 // sete r15b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x03244c88 // mov byte [rsp + 3], cl LONG $0x46100ff3; BYTE $0x20 // movss xmm0, dword [rsi + 32] LONG $0x20422e0f // ucomiss xmm0, dword [rdx + 32] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x13244c88 // mov byte [rsp + 19], cl LONG $0x46100ff3; BYTE $0x24 // movss xmm0, dword [rsi + 36] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0x24422e0f // ucomiss xmm0, dword [rdx + 36] - WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0xc320 // and bl, al LONG $0x46100ff3; BYTE $0x28 // movss xmm0, dword [rsi + 40] LONG $0x28422e0f // ucomiss xmm0, dword [rdx + 40] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x12244c88 // mov byte [rsp + 18], cl LONG $0x46100ff3; BYTE $0x2c // movss xmm0, dword [rsi + 44] - LONG $0xd1940f41 // sete r9b LONG $0x2c422e0f // ucomiss xmm0, dword [rdx + 44] - LONG $0xd3940f41 // sete r11b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x11244c88 // mov byte [rsp + 17], cl LONG $0x46100ff3; BYTE $0x30 // movss xmm0, dword [rsi + 48] LONG $0x30422e0f // ucomiss xmm0, dword [rdx + 48] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x10244c88 // mov byte [rsp + 16], cl LONG $0x46100ff3; BYTE $0x34 // movss xmm0, dword [rsi + 52] - LONG $0xd2940f41 // sete r10b LONG $0x34422e0f // ucomiss xmm0, dword [rdx + 52] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0f244c88 // mov byte [rsp + 15], cl LONG $0x46100ff3; BYTE $0x38 // movss xmm0, dword [rsi + 56] LONG $0x38422e0f // ucomiss xmm0, dword [rdx + 56] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0c244c88 // mov byte [rsp + 12], cl LONG $0x46100ff3; BYTE $0x3c // movss xmm0, dword [rsi + 60] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] LONG $0x3c422e0f // ucomiss xmm0, dword [rdx + 60] - WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0b244c88 // mov byte [rsp + 11], cl LONG $0x46100ff3; BYTE $0x40 // movss xmm0, dword [rsi + 64] LONG $0x40422e0f // ucomiss xmm0, dword [rdx + 64] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0e244c88 // mov byte [rsp + 14], cl LONG $0x46100ff3; BYTE $0x44 // movss xmm0, dword [rsi + 68] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] LONG $0x44422e0f // ucomiss xmm0, dword [rdx + 68] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x0a244c88 // mov byte [rsp + 10], cl LONG $0x46100ff3; BYTE $0x48 // movss xmm0, dword [rsi + 72] - LONG $0xd6940f41 // sete r14b LONG $0x48422e0f // ucomiss xmm0, dword [rdx + 72] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x09244c88 // mov byte [rsp + 9], cl LONG $0x46100ff3; BYTE $0x4c // movss xmm0, dword [rsi + 76] - LONG $0xd4940f41 // sete r12b LONG $0x4c422e0f // ucomiss xmm0, dword [rdx + 76] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd3940f41 // sete r11b + WORD $0x2041; BYTE $0xc3 // and r11b, al LONG $0x46100ff3; BYTE $0x50 // movss xmm0, dword [rsi + 80] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] LONG $0x50422e0f // ucomiss xmm0, dword [rdx + 80] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x08244c88 // mov byte [rsp + 8], cl LONG $0x46100ff3; BYTE $0x54 // movss xmm0, dword [rsi + 84] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] LONG $0x54422e0f // ucomiss xmm0, dword [rdx + 84] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x07244c88 // mov byte [rsp + 7], cl LONG $0x46100ff3; BYTE $0x58 // movss xmm0, dword [rsi + 88] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] LONG $0x58422e0f // ucomiss xmm0, dword [rdx + 88] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x05244c88 // mov byte [rsp + 5], cl LONG $0x46100ff3; BYTE $0x5c // movss xmm0, dword [rsi + 92] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] LONG $0x5c422e0f // ucomiss xmm0, dword [rdx + 92] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd2940f41 // sete r10b + WORD $0x2041; BYTE $0xc2 // and r10b, al LONG $0x46100ff3; BYTE $0x60 // movss xmm0, dword [rsi + 96] - LONG $0xd0940f41 // sete r8b LONG $0x60422e0f // ucomiss xmm0, dword [rdx + 96] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x06244c88 // mov byte [rsp + 6], cl LONG $0x46100ff3; BYTE $0x64 // movss xmm0, dword [rsi + 100] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] LONG $0x64422e0f // ucomiss xmm0, dword [rdx + 100] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl LONG $0x46100ff3; BYTE $0x68 // movss xmm0, dword [rsi + 104] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] LONG $0x68422e0f // ucomiss xmm0, dword [rdx + 104] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f41 // sete r15b + WORD $0x2041; BYTE $0xc7 // and r15b, al LONG $0x46100ff3; BYTE $0x6c // movss xmm0, dword [rsi + 108] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] LONG $0x6c422e0f // ucomiss xmm0, dword [rdx + 108] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd6940f41 // sete r14b + WORD $0x2041; BYTE $0xc6 // and r14b, al LONG $0x46100ff3; BYTE $0x70 // movss xmm0, dword [rsi + 112] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0x70422e0f // ucomiss xmm0, dword [rdx + 112] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x04244c88 // mov byte [rsp + 4], cl LONG $0x46100ff3; BYTE $0x74 // movss xmm0, dword [rsi + 116] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] LONG $0x74422e0f // ucomiss xmm0, dword [rdx + 116] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl LONG $0x46100ff3; BYTE $0x78 // movss xmm0, dword [rsi + 120] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] LONG $0x78422e0f // ucomiss xmm0, dword [rdx + 120] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd1940f41 // sete r9b + WORD $0x2041; BYTE $0xc1 // and r9b, al LONG $0x46100ff3; BYTE $0x7c // movss xmm0, dword [rsi + 124] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x80ee8348 // sub rsi, -128 LONG $0x7c422e0f // ucomiss xmm0, dword [rdx + 124] - LONG $0xd7940f40 // sete dil - WORD $0xc000 // add al, al - LONG $0x04244402 // add al, byte [rsp + 4] - LONG $0x06e5c041 // shl r13b, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0845; BYTE $0xef // or r15b, r13b - LONG $0x6cb60f44; WORD $0x0524 // movzx r13d, byte [rsp + 5] - LONG $0x02e5c041 // shl r13b, 2 - WORD $0x0841; BYTE $0xc5 // or r13b, al - WORD $0x8944; BYTE $0xe8 // mov eax, r13d - WORD $0xc900 // add cl, cl - LONG $0x08244c02 // add cl, byte [rsp + 8] - LONG $0x6cb60f44; WORD $0x1624 // movzx r13d, byte [rsp + 22] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0x0844; BYTE $0xe9 // or cl, r13b - WORD $0x8941; BYTE $0xcd // mov r13d, ecx - LONG $0x03e3c041 // shl r11b, 3 - WORD $0x0845; BYTE $0xcb // or r11b, r9b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xe9 // or cl, r13b - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xda // or r10b, r11b - LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0844; BYTE $0xd0 // or al, r10b - LONG $0x4cb60f44; WORD $0x0624 // movzx r9d, byte [rsp + 6] - LONG $0x06e1c041 // shl r9b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xcb // or bl, r9b - WORD $0x0841; BYTE $0xcf // or r15b, cl - WORD $0xc308 // or bl, al - WORD $0x0045; BYTE $0xf6 // add r14b, r14b - LONG $0x24740244; BYTE $0x0e // add r14b, byte [rsp + 14] - LONG $0x02e4c041 // shl r12b, 2 - WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0a // movzx eax, byte [rsp + 10] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x3e // mov byte [r14], r15b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl - WORD $0x0841; BYTE $0xc0 // or r8b, al + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd0940f41 // sete r8b + WORD $0x2041; BYTE $0xc0 // and r8b, al LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] WORD $0xc000 // add al, al - LONG $0x14244402 // add al, byte [rsp + 20] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] + LONG $0x15244402 // add al, byte [rsp + 21] + LONG $0x05e7c040 // shl dil, 5 + LONG $0x06e5c041 // shl r13b, 6 + WORD $0x0841; BYTE $0xfd // or r13b, dil + WORD $0x8944; BYTE $0xef // mov edi, r13d + LONG $0x244cb60f; BYTE $0x14 // movzx ecx, byte [rsp + 20] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xc108 // or cl, al + WORD $0xd889 // mov eax, ebx + WORD $0xd800 // add al, bl + LONG $0x13244402 // add al, byte [rsp + 19] + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x2444b60f; BYTE $0x03 // movzx eax, byte [rsp + 3] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x03244488 // mov byte [rsp + 3], al + LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x17 // movzx eax, byte [rsp + 23] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] + LONG $0x245cb60f; BYTE $0x11 // movzx ebx, byte [rsp + 17] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0840; BYTE $0xfb // or bl, dil + LONG $0x6cb60f44; WORD $0x1624 // movzx r13d, byte [rsp + 22] + LONG $0x04e5c041 // shl r13b, 4 + WORD $0x0841; BYTE $0xc5 // or r13b, al + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x13 // movzx ecx, byte [rsp + 19] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xc108 // or cl, al - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc789 // mov edi, eax + LONG $0x245cb60f; BYTE $0x0f // movzx ebx, byte [rsp + 15] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xc7 // or dil, al - WORD $0x0840; BYTE $0xcf // or dil, cl - LONG $0x02468845 // mov byte [r14 + 2], r8b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x0a // movzx ebx, byte [rsp + 10] + WORD $0xdb00 // add bl, bl + LONG $0x0e245c02 // add bl, byte [rsp + 14] + LONG $0x244cb60f; BYTE $0x09 // movzx ecx, byte [rsp + 9] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xd908 // or cl, bl + LONG $0x03e3c041 // shl r11b, 3 + WORD $0x0841; BYTE $0xcb // or r11b, cl + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xdb // or bl, r11b + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x5cb60f44; WORD $0x0324 // movzx r11d, byte [rsp + 3] + WORD $0x0845; BYTE $0xeb // or r11b, r13b + LONG $0x6cb60f44; WORD $0x0724 // movzx r13d, byte [rsp + 7] + LONG $0x05e5c041 // shl r13b, 5 + LONG $0x244cb60f; BYTE $0x05 // movzx ecx, byte [rsp + 5] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x0844; BYTE $0xe9 // or cl, r13b + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x07e2c041 // shl r10b, 7 + WORD $0x0841; BYTE $0xca // or r10b, cl + WORD $0x0841; BYTE $0xda // or r10b, bl + LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] + WORD $0xc900 // add cl, cl + LONG $0x06244c02 // add cl, byte [rsp + 6] + LONG $0x02e7c041 // shl r15b, 2 + WORD $0x0841; BYTE $0xcf // or r15b, cl + LONG $0x03e6c041 // shl r14b, 3 + WORD $0x0845; BYTE $0xfe // or r14b, r15b + LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0x0844; BYTE $0xf1 // or cl, r14b + LONG $0x241c8845 // mov byte [r12], r11b + LONG $0x245cb60f; BYTE $0x28 // movzx ebx, byte [rsp + 40] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e1c041 // shl r9b, 6 + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x24448841; BYTE $0x01 // mov byte [r12 + 1], al + LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xc8 // or r8b, r9b + WORD $0x0841; BYTE $0xc8 // or r8b, cl + LONG $0x24548845; BYTE $0x02 // mov byte [r12 + 2], r10b + LONG $0x24448845; BYTE $0x03 // mov byte [r12 + 3], r8b LONG $0x80c28148; WORD $0x0000; BYTE $0x00 // add rdx, 128 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff28 // add qword [rsp + 40], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 JNE LBB0_118 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] LBB0_120: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_122: + LONG $0x01498d4c // lea r9, [rcx + 1] LONG $0x04100ff3; BYTE $0x8e // movss xmm0, dword [rsi + 4*rcx] LONG $0x8a042e0f // ucomiss xmm0, dword [rdx + 4*rcx] - LONG $0x01418d4c // lea r8, [rcx + 1] - WORD $0x940f; BYTE $0xd3 // sete bl - WORD $0xdbf6 // neg bl + WORD $0x9b0f; BYTE $0xd3 // setnp bl + WORD $0x940f; BYTE $0xd0 // sete al + WORD $0xd820 // and al, bl + WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] - WORD $0x3044; BYTE $0xcb // xor bl, r9b + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] + WORD $0x3044; BYTE $0xc0 // xor al, r8b WORD $0xe180; BYTE $0x07 // and cl, 7 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0xd820 // and al, bl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al - WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xc3 // xor bl, r8b + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl + WORD $0x894c; BYTE $0xc9 // mov rcx, r9 + WORD $0x394d; BYTE $0xce // cmp r14, r9 JNE LBB0_122 JMP LBB0_123 LBB0_57: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_61 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB0_59: WORD $0xb60f; BYTE $0x0e // movzx ecx, byte [rsi] @@ -2197,7 +2388,7 @@ LBB0_59: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -2206,49 +2397,49 @@ LBB0_59: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB0_59 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_61: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_65 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 + LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 LBB0_63: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0xb60f; BYTE $0x06 // movzx eax, byte [rsi] LONG $0x014eb60f // movzx ecx, byte [rsi + 1] WORD $0x023a // cmp al, byte [rdx] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] WORD $0x4a3a; BYTE $0x01 // cmp cl, byte [rdx + 1] - WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x940f; BYTE $0xd3 // sete bl LONG $0x0246b60f // movzx eax, byte [rsi + 2] WORD $0x423a; BYTE $0x02 // cmp al, byte [rdx + 2] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] + LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] LONG $0x0346b60f // movzx eax, byte [rsi + 3] WORD $0x423a; BYTE $0x03 // cmp al, byte [rdx + 3] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] + LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] LONG $0x0446b60f // movzx eax, byte [rsi + 4] WORD $0x423a; BYTE $0x04 // cmp al, byte [rdx + 4] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] LONG $0x0546b60f // movzx eax, byte [rsi + 5] WORD $0x423a; BYTE $0x05 // cmp al, byte [rdx + 5] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + LONG $0x2454940f; BYTE $0x03 // sete byte [rsp + 3] LONG $0x0646b60f // movzx eax, byte [rsi + 6] WORD $0x423a; BYTE $0x06 // cmp al, byte [rdx + 6] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] + LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] LONG $0x0746b60f // movzx eax, byte [rsi + 7] WORD $0x423a; BYTE $0x07 // cmp al, byte [rdx + 7] LONG $0xd7940f41 // sete r15b LONG $0x0846b60f // movzx eax, byte [rsi + 8] WORD $0x423a; BYTE $0x08 // cmp al, byte [rdx + 8] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0x0946b60f // movzx eax, byte [rsi + 9] WORD $0x423a; BYTE $0x09 // cmp al, byte [rdx + 9] LONG $0xd7940f40 // sete dil @@ -2263,16 +2454,16 @@ LBB0_63: LONG $0xd6940f41 // sete r14b LONG $0x0d46b60f // movzx eax, byte [rsi + 13] WORD $0x423a; BYTE $0x0d // cmp al, byte [rdx + 13] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] + LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] LONG $0x0e46b60f // movzx eax, byte [rsi + 14] WORD $0x423a; BYTE $0x0e // cmp al, byte [rdx + 14] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] + LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] LONG $0x0f46b60f // movzx eax, byte [rsi + 15] WORD $0x423a; BYTE $0x0f // cmp al, byte [rdx + 15] - WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0xd0940f41 // sete r8b LONG $0x1046b60f // movzx eax, byte [rsi + 16] WORD $0x423a; BYTE $0x10 // cmp al, byte [rdx + 16] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] + LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] LONG $0x1146b60f // movzx eax, byte [rsi + 17] WORD $0x423a; BYTE $0x11 // cmp al, byte [rdx + 17] LONG $0xd4940f41 // sete r12b @@ -2281,144 +2472,144 @@ LBB0_63: LONG $0xd5940f41 // sete r13b LONG $0x1346b60f // movzx eax, byte [rsi + 19] WORD $0x423a; BYTE $0x13 // cmp al, byte [rdx + 19] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] + LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] LONG $0x1446b60f // movzx eax, byte [rsi + 20] WORD $0x423a; BYTE $0x14 // cmp al, byte [rdx + 20] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] LONG $0x1546b60f // movzx eax, byte [rsi + 21] WORD $0x423a; BYTE $0x15 // cmp al, byte [rdx + 21] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] + LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] LONG $0x1646b60f // movzx eax, byte [rsi + 22] WORD $0x423a; BYTE $0x16 // cmp al, byte [rdx + 22] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] LONG $0x1746b60f // movzx eax, byte [rsi + 23] WORD $0x423a; BYTE $0x17 // cmp al, byte [rdx + 23] LONG $0xd1940f41 // sete r9b LONG $0x1846b60f // movzx eax, byte [rsi + 24] WORD $0x423a; BYTE $0x18 // cmp al, byte [rdx + 24] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] + LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] LONG $0x1946b60f // movzx eax, byte [rsi + 25] WORD $0x423a; BYTE $0x19 // cmp al, byte [rdx + 25] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] + LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] LONG $0x1a46b60f // movzx eax, byte [rsi + 26] WORD $0x423a; BYTE $0x1a // cmp al, byte [rdx + 26] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] + LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] LONG $0x1b46b60f // movzx eax, byte [rsi + 27] WORD $0x423a; BYTE $0x1b // cmp al, byte [rdx + 27] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0x1c46b60f // movzx eax, byte [rsi + 28] WORD $0x423a; BYTE $0x1c // cmp al, byte [rdx + 28] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] LONG $0x1d46b60f // movzx eax, byte [rsi + 29] WORD $0x423a; BYTE $0x1d // cmp al, byte [rdx + 29] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] + LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x1e46b60f // movzx eax, byte [rsi + 30] WORD $0x423a; BYTE $0x1e // cmp al, byte [rdx + 30] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] + LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] LONG $0x1f46b60f // movzx eax, byte [rsi + 31] LONG $0x20c68348 // add rsi, 32 WORD $0x423a; BYTE $0x1f // cmp al, byte [rdx + 31] - LONG $0xd0940f41 // sete r8b - WORD $0xc900 // add cl, cl - LONG $0x28244c02 // add cl, byte [rsp + 40] - WORD $0xc889 // mov eax, ecx - LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xdb00 // add bl, bl + LONG $0x04245c02 // add bl, byte [rsp + 4] + WORD $0xd889 // mov eax, ebx + LONG $0x245cb60f; BYTE $0x05 // movzx ebx, byte [rsp + 5] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xcf // or r15b, cl - LONG $0x244cb60f; BYTE $0x14 // movzx ecx, byte [rsp + 20] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x245cb60f; BYTE $0x15 // movzx ebx, byte [rsp + 21] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx WORD $0x0040; BYTE $0xff // add dil, dil - LONG $0x247c0240; BYTE $0x07 // add dil, byte [rsp + 7] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x247c0240; BYTE $0x08 // add dil, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e2c041 // shl r10b, 2 WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0xcf89 // mov edi, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0xdf89 // mov edi, ebx LONG $0x03e3c041 // shl r11b, 3 WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0840; BYTE $0xf9 // or cl, dil + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xfb // or bl, dil LONG $0x04e6c041 // shl r14b, 4 WORD $0x0845; BYTE $0xde // or r14b, r11b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x247cb60f; BYTE $0x06 // movzx edi, byte [rsp + 6] + LONG $0x247cb60f; BYTE $0x07 // movzx edi, byte [rsp + 7] LONG $0x06e7c040 // shl dil, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0840; BYTE $0xfb // or bl, dil - WORD $0x0841; BYTE $0xcf // or r15b, cl - WORD $0xc308 // or bl, al + LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + WORD $0x0841; BYTE $0xdf // or r15b, bl + WORD $0x0841; BYTE $0xc0 // or r8b, al WORD $0x0045; BYTE $0xe4 // add r12b, r12b - LONG $0x24640244; BYTE $0x0d // add r12b, byte [rsp + 13] + LONG $0x24640244; BYTE $0x0e // add r12b, byte [rsp + 14] LONG $0x02e5c041 // shl r13b, 2 WORD $0x0845; BYTE $0xe5 // or r13b, r12b - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xe8 // or al, r13b - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0a // movzx eax, byte [rsp + 10] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x3e // mov byte [r14], r15b - LONG $0x244cb60f; BYTE $0x0b // movzx ecx, byte [rsp + 11] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x243c8845 // mov byte [r12], r15b + LONG $0x245cb60f; BYTE $0x0c // movzx ebx, byte [rsp + 12] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x24448845; BYTE $0x01 // mov byte [r12 + 1], r8b WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] + LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x12 // movzx ecx, byte [rsp + 18] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xc8 // or r8b, cl - WORD $0x0841; BYTE $0xc0 // or r8b, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x03468845 // mov byte [r14 + 3], r8b + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x13 // movzx ebx, byte [rsp + 19] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x20c28348 // add rdx, 32 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff28 // add qword [rsp + 40], -1 JNE LBB0_63 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] LBB0_65: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_67: @@ -2429,30 +2620,30 @@ LBB0_67: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB0_67 JMP LBB0_123 LBB0_90: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB0_94 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB0_92: WORD $0x0e8b // mov ecx, dword [rsi] @@ -2465,7 +2656,7 @@ LBB0_92: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -2474,49 +2665,49 @@ LBB0_92: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB0_92 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB0_94: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB0_98 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB0_96: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0x068b // mov eax, dword [rsi] WORD $0x4e8b; BYTE $0x04 // mov ecx, dword [rsi + 4] WORD $0x023b // cmp eax, dword [rdx] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] WORD $0x4a3b; BYTE $0x04 // cmp ecx, dword [rdx + 4] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] WORD $0x468b; BYTE $0x08 // mov eax, dword [rsi + 8] WORD $0x423b; BYTE $0x08 // cmp eax, dword [rdx + 8] - LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] + LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] WORD $0x468b; BYTE $0x0c // mov eax, dword [rsi + 12] WORD $0x423b; BYTE $0x0c // cmp eax, dword [rdx + 12] - LONG $0x2454940f; BYTE $0x15 // sete byte [rsp + 21] + LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] WORD $0x468b; BYTE $0x10 // mov eax, dword [rsi + 16] WORD $0x423b; BYTE $0x10 // cmp eax, dword [rdx + 16] - LONG $0x2454940f; BYTE $0x16 // sete byte [rsp + 22] + LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] WORD $0x468b; BYTE $0x14 // mov eax, dword [rsi + 20] WORD $0x423b; BYTE $0x14 // cmp eax, dword [rdx + 20] - LONG $0x2454940f; BYTE $0x17 // sete byte [rsp + 23] + LONG $0x2454940f; BYTE $0x03 // sete byte [rsp + 3] WORD $0x468b; BYTE $0x18 // mov eax, dword [rsi + 24] WORD $0x423b; BYTE $0x18 // cmp eax, dword [rdx + 24] - LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] + LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] WORD $0x468b; BYTE $0x1c // mov eax, dword [rsi + 28] WORD $0x423b; BYTE $0x1c // cmp eax, dword [rdx + 28] LONG $0xd5940f41 // sete r13b WORD $0x468b; BYTE $0x20 // mov eax, dword [rsi + 32] WORD $0x423b; BYTE $0x20 // cmp eax, dword [rdx + 32] - LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] WORD $0x468b; BYTE $0x24 // mov eax, dword [rsi + 36] WORD $0x423b; BYTE $0x24 // cmp eax, dword [rdx + 36] LONG $0xd0940f41 // sete r8b @@ -2528,165 +2719,165 @@ LBB0_96: LONG $0xd7940f41 // sete r15b WORD $0x468b; BYTE $0x30 // mov eax, dword [rsi + 48] WORD $0x423b; BYTE $0x30 // cmp eax, dword [rdx + 48] - LONG $0x2454940f; BYTE $0x05 // sete byte [rsp + 5] + LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] WORD $0x468b; BYTE $0x34 // mov eax, dword [rsi + 52] WORD $0x423b; BYTE $0x34 // cmp eax, dword [rdx + 52] - LONG $0x2454940f; BYTE $0x06 // sete byte [rsp + 6] + LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] WORD $0x468b; BYTE $0x38 // mov eax, dword [rsi + 56] WORD $0x423b; BYTE $0x38 // cmp eax, dword [rdx + 56] - LONG $0x2454940f; BYTE $0x07 // sete byte [rsp + 7] + LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] WORD $0x468b; BYTE $0x3c // mov eax, dword [rsi + 60] WORD $0x423b; BYTE $0x3c // cmp eax, dword [rdx + 60] - WORD $0x940f; BYTE $0xd3 // sete bl + LONG $0xd7940f40 // sete dil WORD $0x468b; BYTE $0x40 // mov eax, dword [rsi + 64] - WORD $0x4e8b; BYTE $0x44 // mov ecx, dword [rsi + 68] + WORD $0x5e8b; BYTE $0x44 // mov ebx, dword [rsi + 68] WORD $0x423b; BYTE $0x40 // cmp eax, dword [rdx + 64] WORD $0x468b; BYTE $0x48 // mov eax, dword [rsi + 72] - LONG $0x2454940f; BYTE $0x0a // sete byte [rsp + 10] - WORD $0x4a3b; BYTE $0x44 // cmp ecx, dword [rdx + 68] - WORD $0x4e8b; BYTE $0x4c // mov ecx, dword [rsi + 76] + LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + WORD $0x5a3b; BYTE $0x44 // cmp ebx, dword [rdx + 68] + WORD $0x5e8b; BYTE $0x4c // mov ebx, dword [rsi + 76] LONG $0xd2940f41 // sete r10b WORD $0x423b; BYTE $0x48 // cmp eax, dword [rdx + 72] WORD $0x468b; BYTE $0x50 // mov eax, dword [rsi + 80] LONG $0xd6940f41 // sete r14b - WORD $0x4a3b; BYTE $0x4c // cmp ecx, dword [rdx + 76] - WORD $0x4e8b; BYTE $0x54 // mov ecx, dword [rsi + 84] + WORD $0x5a3b; BYTE $0x4c // cmp ebx, dword [rdx + 76] + WORD $0x5e8b; BYTE $0x54 // mov ebx, dword [rsi + 84] LONG $0xd4940f41 // sete r12b WORD $0x423b; BYTE $0x50 // cmp eax, dword [rdx + 80] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] - WORD $0x4a3b; BYTE $0x54 // cmp ecx, dword [rdx + 84] + LONG $0x2454940f; BYTE $0x09 // sete byte [rsp + 9] + WORD $0x5a3b; BYTE $0x54 // cmp ebx, dword [rdx + 84] WORD $0x468b; BYTE $0x58 // mov eax, dword [rsi + 88] - LONG $0x2454940f; BYTE $0x0b // sete byte [rsp + 11] + LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] WORD $0x423b; BYTE $0x58 // cmp eax, dword [rdx + 88] WORD $0x468b; BYTE $0x5c // mov eax, dword [rsi + 92] - LONG $0x2454940f; BYTE $0x0c // sete byte [rsp + 12] + LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] WORD $0x423b; BYTE $0x5c // cmp eax, dword [rdx + 92] WORD $0x468b; BYTE $0x60 // mov eax, dword [rsi + 96] LONG $0xd1940f41 // sete r9b WORD $0x423b; BYTE $0x60 // cmp eax, dword [rdx + 96] WORD $0x468b; BYTE $0x64 // mov eax, dword [rsi + 100] - LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] + LONG $0x2454940f; BYTE $0x14 // sete byte [rsp + 20] WORD $0x423b; BYTE $0x64 // cmp eax, dword [rdx + 100] WORD $0x468b; BYTE $0x68 // mov eax, dword [rsi + 104] - LONG $0x2454940f; BYTE $0x0d // sete byte [rsp + 13] + LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] WORD $0x423b; BYTE $0x68 // cmp eax, dword [rdx + 104] WORD $0x468b; BYTE $0x6c // mov eax, dword [rsi + 108] - LONG $0x2454940f; BYTE $0x0e // sete byte [rsp + 14] + LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] WORD $0x423b; BYTE $0x6c // cmp eax, dword [rdx + 108] WORD $0x468b; BYTE $0x70 // mov eax, dword [rsi + 112] - LONG $0x2454940f; BYTE $0x0f // sete byte [rsp + 15] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] WORD $0x423b; BYTE $0x70 // cmp eax, dword [rdx + 112] WORD $0x468b; BYTE $0x74 // mov eax, dword [rsi + 116] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] WORD $0x423b; BYTE $0x74 // cmp eax, dword [rdx + 116] WORD $0x468b; BYTE $0x78 // mov eax, dword [rsi + 120] - LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] + LONG $0x2454940f; BYTE $0x13 // sete byte [rsp + 19] WORD $0x423b; BYTE $0x78 // cmp eax, dword [rdx + 120] WORD $0x468b; BYTE $0x7c // mov eax, dword [rsi + 124] - LONG $0x2454940f; BYTE $0x11 // sete byte [rsp + 17] + LONG $0x2454940f; BYTE $0x12 // sete byte [rsp + 18] LONG $0x80ee8348 // sub rsi, -128 WORD $0x423b; BYTE $0x7c // cmp eax, dword [rdx + 124] - LONG $0xd7940f40 // sete dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x940f; BYTE $0xd1 // sete cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x80c28148; WORD $0x0000; BYTE $0x00 // add rdx, 128 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB0_96 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB0_98: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB0_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB0_100: @@ -2697,16 +2888,16 @@ LBB0_100: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB0_100 LBB0_123: @@ -2747,7 +2938,7 @@ DATA LCDATA1<>+0x0f0(SB)/8, $0x4040404040404040 DATA LCDATA1<>+0x0f8(SB)/8, $0x4040404040404040 GLOBL LCDATA1<>(SB), 8, $256 -TEXT ·_comparison_equal_arr_scalar_sse4(SB), $344-48 +TEXT ·_comparison_equal_arr_scalar_sse4(SB), $328-48 MOVQ typ+0(FP), DI MOVQ left+8(FP), SI @@ -2758,21 +2949,21 @@ TEXT ·_comparison_equal_arr_scalar_sse4(SB), $344-48 MOVQ SP, BP ADDQ $16, SP ANDQ $-16, SP - MOVQ BP, 320(SP) + MOVQ BP, 304(SP) LEAQ LCDATA1<>(SB), BP WORD $0x894d; BYTE $0xc2 // mov r10, r8 WORD $0x8949; BYTE $0xce // mov r14, rcx WORD $0xff83; BYTE $0x06 // cmp edi, 6 - JG LBB1_26 + JG LBB1_27 WORD $0xff83; BYTE $0x03 // cmp edi, 3 JLE LBB1_2 WORD $0xff83; BYTE $0x04 // cmp edi, 4 - JE LBB1_100 + JE LBB1_101 WORD $0xff83; BYTE $0x05 // cmp edi, 5 - JE LBB1_123 + JE LBB1_124 WORD $0xff83; BYTE $0x06 // cmp edi, 6 - JNE LBB1_202 + JNE LBB1_199 WORD $0x8b44; BYTE $0x2a // mov r13d, dword [rdx] LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -2794,6 +2985,7 @@ LBB1_15: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xd8490f48 // cmovns rbx, rax LONG $0x03fbc148 // sar rbx, 3 + WORD $0x894d; BYTE $0xf1 // mov r9, r14 LONG $0x04b60f45; BYTE $0x1e // movzx r8d, byte [r14 + rbx] WORD $0x3044; BYTE $0xc2 // xor dl, r8b LONG $0x00dd3c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rbx] @@ -2815,20 +3007,20 @@ LBB1_17: JL LBB1_21 QUAD $0x000000902494894c // mov qword [rsp + 144], r10 QUAD $0x00000098249c894c // mov qword [rsp + 152], r11 - QUAD $0x000000c0249c894c // mov qword [rsp + 192], r11 + QUAD $0x000000a0249c894c // mov qword [rsp + 160], r11 LBB1_19: QUAD $0x0000008824b4894c // mov qword [rsp + 136], r14 WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d - QUAD $0x000000e02494940f // sete byte [rsp + 224] + QUAD $0x000000d02494940f // sete byte [rsp + 208] LONG $0x046e3944 // cmp dword [rsi + 4], r13d - LONG $0xd7940f40 // sete dil + LONG $0xd2940f41 // sete r10b LONG $0x086e3944 // cmp dword [rsi + 8], r13d LONG $0xd6940f41 // sete r14b LONG $0x0c6e3944 // cmp dword [rsi + 12], r13d - QUAD $0x000000d02494940f // sete byte [rsp + 208] + QUAD $0x000000b02494940f // sete byte [rsp + 176] LONG $0x106e3944 // cmp dword [rsi + 16], r13d - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] LONG $0x146e3944 // cmp dword [rsi + 20], r13d LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] LONG $0x186e3944 // cmp dword [rsi + 24], r13d @@ -2836,142 +3028,143 @@ LBB1_19: LONG $0x1c6e3944 // cmp dword [rsi + 28], r13d WORD $0x940f; BYTE $0xd3 // sete bl LONG $0x206e3944 // cmp dword [rsi + 32], r13d - QUAD $0x000000a02494940f // sete byte [rsp + 160] + QUAD $0x000000c02494940f // sete byte [rsp + 192] LONG $0x246e3944 // cmp dword [rsi + 36], r13d - WORD $0x940f; BYTE $0xd2 // sete dl + LONG $0xd7940f40 // sete dil LONG $0x286e3944 // cmp dword [rsi + 40], r13d - LONG $0xd1940f41 // sete r9b + LONG $0xd0940f41 // sete r8b LONG $0x2c6e3944 // cmp dword [rsi + 44], r13d - LONG $0xd2940f41 // sete r10b + LONG $0xd1940f41 // sete r9b LONG $0x306e3944 // cmp dword [rsi + 48], r13d LONG $0xd3940f41 // sete r11b LONG $0x346e3944 // cmp dword [rsi + 52], r13d LONG $0xd4940f41 // sete r12b LONG $0x386e3944 // cmp dword [rsi + 56], r13d - QUAD $0x000000b02494940f // sete byte [rsp + 176] + LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] LONG $0x3c6e3944 // cmp dword [rsi + 60], r13d WORD $0x940f; BYTE $0xd1 // sete cl LONG $0x406e3944 // cmp dword [rsi + 64], r13d - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] + LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] LONG $0x446e3944 // cmp dword [rsi + 68], r13d - QUAD $0x000000802494940f // sete byte [rsp + 128] + LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] LONG $0x486e3944 // cmp dword [rsi + 72], r13d - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + QUAD $0x000000802494940f // sete byte [rsp + 128] LONG $0x4c6e3944 // cmp dword [rsi + 76], r13d - LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] LONG $0x506e3944 // cmp dword [rsi + 80], r13d - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] LONG $0x546e3944 // cmp dword [rsi + 84], r13d - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] - LONG $0x586e3944 // cmp dword [rsi + 88], r13d LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + LONG $0x586e3944 // cmp dword [rsi + 88], r13d + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] LONG $0x5c6e3944 // cmp dword [rsi + 92], r13d LONG $0xd7940f41 // sete r15b LONG $0x606e3944 // cmp dword [rsi + 96], r13d - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0x646e3944 // cmp dword [rsi + 100], r13d - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] LONG $0x686e3944 // cmp dword [rsi + 104], r13d - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] - LONG $0x6c6e3944 // cmp dword [rsi + 108], r13d LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] - LONG $0x706e3944 // cmp dword [rsi + 112], r13d + LONG $0x6c6e3944 // cmp dword [rsi + 108], r13d LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] - LONG $0x746e3944 // cmp dword [rsi + 116], r13d + LONG $0x706e3944 // cmp dword [rsi + 112], r13d LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] - LONG $0x786e3944 // cmp dword [rsi + 120], r13d + LONG $0x746e3944 // cmp dword [rsi + 116], r13d LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] + LONG $0x786e3944 // cmp dword [rsi + 120], r13d + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] LONG $0x7c6e3944 // cmp dword [rsi + 124], r13d - LONG $0xd0940f41 // sete r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x000000e024bc0240 // add dil, byte [rsp + 224] + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000d024940244 // add r10b, byte [rsp + 208] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0xa0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 160] - QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + QUAD $0x000000c024bc0240 // add dil, byte [rsp + 192] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + QUAD $0x0000008824b48b4c // mov r14, qword [rsp + 136] + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b - QUAD $0x000000b024bcb60f // movzx edi, byte [rsp + 176] + LONG $0x247cb60f; BYTE $0x70 // movzx edi, byte [rsp + 112] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x0000008824b48b4c // mov r14, qword [rsp + 136] - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xd200 // add dl, dl - LONG $0x68245402 // add dl, byte [rsp + 104] - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xc000 // add al, al + LONG $0x50244402 // add al, byte [rsp + 80] + WORD $0xc789 // mov edi, eax + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil WORD $0x8841; BYTE $0x1e // mov byte [r14], bl - LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] + LONG $0x245cb60f; BYTE $0x38 // movzx ebx, byte [rsp + 56] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl LONG $0x014e8841 // mov byte [r14 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0841; BYTE $0xc7 // or r15b, al + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xc000 // add al, al + LONG $0x10244402 // add al, byte [rsp + 16] + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xc808 // or al, cl + LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xca08 // or dl, cl + WORD $0xc208 // or dl, al LONG $0x027e8845 // mov byte [r14 + 2], r15b - LONG $0x03468845 // mov byte [r14 + 3], r8b + LONG $0x03568841 // mov byte [r14 + 3], dl LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 LONG $0x04c68349 // add r14, 4 - QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 + QUAD $0x000000a024848348; BYTE $0xff // add qword [rsp + 160], -1 JNE LBB1_19 QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] QUAD $0x00000098249c8b4c // mov r11, qword [rsp + 152] @@ -2979,7 +3172,7 @@ LBB1_19: LBB1_21: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB1_202 + JGE LBB1_199 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 @@ -2989,12 +3182,13 @@ LBB1_21: LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d -LBB1_147: +LBB1_145: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d WORD $0x940f; BYTE $0xd0 // sete al WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xdf // mov rdi, r11 LONG $0x03efc148 // shr rdi, 3 + WORD $0x894d; BYTE $0xf7 // mov r15, r14 LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 @@ -3017,18 +3211,18 @@ LBB1_147: WORD $0xda30 // xor dl, bl LONG $0x3e148841 // mov byte [r14 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB1_147 + JNE LBB1_145 JMP LBB1_24 -LBB1_26: +LBB1_27: WORD $0xff83; BYTE $0x08 // cmp edi, 8 - JLE LBB1_27 + JLE LBB1_28 WORD $0xff83; BYTE $0x09 // cmp edi, 9 - JE LBB1_162 + JE LBB1_160 WORD $0xff83; BYTE $0x0b // cmp edi, 11 - JE LBB1_174 + JE LBB1_172 WORD $0xff83; BYTE $0x0c // cmp edi, 12 - JNE LBB1_202 + JNE LBB1_199 LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 LONG $0xda490f4d // cmovns r11, r10 @@ -3038,18 +3232,21 @@ LBB1_26: WORD $0xe083; BYTE $0xf8 // and eax, -8 LONG $0x02100ff2 // movsd xmm0, qword [rdx] WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB1_49 + JE LBB1_50 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB1_47: +LBB1_48: LONG $0x062e0f66 // ucomisd xmm0, qword [rsi] LONG $0x08768d48 // lea rsi, [rsi + 8] + WORD $0x9b0f; BYTE $0xd1 // setnp cl WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xca20 // and dl, cl WORD $0xdaf6 // neg dl LONG $0x07788d48 // lea rdi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 + WORD $0x894d; BYTE $0xf7 // mov r15, r14 LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] WORD $0x3044; BYTE $0xca // xor dl, r9b QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] @@ -3062,191 +3259,282 @@ LBB1_47: LONG $0x3e1c8841 // mov byte [r14 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB1_47 + JNE LBB1_48 LONG $0x01c68349 // add r14, 1 -LBB1_49: +LBB1_50: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB1_53 + JL LBB1_54 QUAD $0x000000902494894c // mov qword [rsp + 144], r10 - QUAD $0x000000c0249c894c // mov qword [rsp + 192], r11 - QUAD $0x000000e0249c894c // mov qword [rsp + 224], r11 + QUAD $0x00000110249c894c // mov qword [rsp + 272], r11 + QUAD $0x000000f0249c894c // mov qword [rsp + 240], r11 -LBB1_51: +LBB1_52: QUAD $0x0000008824b4894c // mov qword [rsp + 136], r14 LONG $0x062e0f66 // ucomisd xmm0, qword [rsi] - QUAD $0x000000d02494940f // sete byte [rsp + 208] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x30244c88 // mov byte [rsp + 48], cl LONG $0x462e0f66; BYTE $0x08 // ucomisd xmm0, qword [rsi + 8] - LONG $0xd1940f41 // sete r9b + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd5940f41 // sete r13b + WORD $0x2041; BYTE $0xc5 // and r13b, al LONG $0x462e0f66; BYTE $0x10 // ucomisd xmm0, qword [rsi + 16] - LONG $0xd6940f41 // sete r14b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x18244c88 // mov byte [rsp + 24], cl LONG $0x462e0f66; BYTE $0x18 // ucomisd xmm0, qword [rsi + 24] - LONG $0xd5940f41 // sete r13b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl LONG $0x462e0f66; BYTE $0x20 // ucomisd xmm0, qword [rsi + 32] - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x10244c88 // mov byte [rsp + 16], cl LONG $0x462e0f66; BYTE $0x28 // ucomisd xmm0, qword [rsi + 40] - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd4940f41 // sete r12b + WORD $0x2041; BYTE $0xc4 // and r12b, al LONG $0x462e0f66; BYTE $0x30 // ucomisd xmm0, qword [rsi + 48] - WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x38244c88 // mov byte [rsp + 56], cl LONG $0x462e0f66; BYTE $0x38 // ucomisd xmm0, qword [rsi + 56] - WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x04244c88 // mov byte [rsp + 4], cl LONG $0x462e0f66; BYTE $0x40 // ucomisd xmm0, qword [rsi + 64] - QUAD $0x000000b02494940f // sete byte [rsp + 176] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl LONG $0x462e0f66; BYTE $0x48 // ucomisd xmm0, qword [rsi + 72] - WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x40244c88 // mov byte [rsp + 64], cl LONG $0x462e0f66; BYTE $0x50 // ucomisd xmm0, qword [rsi + 80] - LONG $0xd7940f40 // sete dil + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x48244c88 // mov byte [rsp + 72], cl LONG $0x462e0f66; BYTE $0x58 // ucomisd xmm0, qword [rsi + 88] - LONG $0xd2940f41 // sete r10b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0xc320 // and bl, al LONG $0x462e0f66; BYTE $0x60 // ucomisd xmm0, qword [rsi + 96] - LONG $0xd3940f41 // sete r11b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x08244c88 // mov byte [rsp + 8], cl LONG $0x462e0f66; BYTE $0x68 // ucomisd xmm0, qword [rsi + 104] - LONG $0xd4940f41 // sete r12b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x50244c88 // mov byte [rsp + 80], cl LONG $0x462e0f66; BYTE $0x70 // ucomisd xmm0, qword [rsi + 112] - QUAD $0x000000802494940f // sete byte [rsp + 128] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x68244c88 // mov byte [rsp + 104], cl LONG $0x462e0f66; BYTE $0x78 // ucomisd xmm0, qword [rsi + 120] + WORD $0x9b0f; BYTE $0xd0 // setnp al WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x60244c88 // mov byte [rsp + 96], cl QUAD $0x00000080862e0f66 // ucomisd xmm0, qword [rsi + 128] - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x58244c88 // mov byte [rsp + 88], cl QUAD $0x00000088862e0f66 // ucomisd xmm0, qword [rsi + 136] - QUAD $0x000000a02494940f // sete byte [rsp + 160] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x80248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 128], cl QUAD $0x00000090862e0f66 // ucomisd xmm0, qword [rsi + 144] - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x78244c88 // mov byte [rsp + 120], cl QUAD $0x00000098862e0f66 // ucomisd xmm0, qword [rsi + 152] - LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x70244c88 // mov byte [rsp + 112], cl QUAD $0x000000a0862e0f66 // ucomisd xmm0, qword [rsi + 160] - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xc0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 192], cl QUAD $0x000000a8862e0f66 // ucomisd xmm0, qword [rsi + 168] - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xb0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 176], cl QUAD $0x000000b0862e0f66 // ucomisd xmm0, qword [rsi + 176] - LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] - QUAD $0x000000b8862e0f66 // ucomisd xmm0, qword [rsi + 184] + WORD $0x9b0f; BYTE $0xd0 // setnp al LONG $0xd7940f41 // sete r15b + WORD $0x2041; BYTE $0xc7 // and r15b, al + QUAD $0x000000b8862e0f66 // ucomisd xmm0, qword [rsi + 184] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd0940f41 // sete r8b + WORD $0x2041; BYTE $0xc0 // and r8b, al QUAD $0x000000c0862e0f66 // ucomisd xmm0, qword [rsi + 192] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xd0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 208], cl QUAD $0x000000c8862e0f66 // ucomisd xmm0, qword [rsi + 200] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd3940f41 // sete r11b + WORD $0x2041; BYTE $0xc3 // and r11b, al QUAD $0x000000d0862e0f66 // ucomisd xmm0, qword [rsi + 208] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd2940f41 // sete r10b + WORD $0x2041; BYTE $0xc2 // and r10b, al QUAD $0x000000d8862e0f66 // ucomisd xmm0, qword [rsi + 216] - LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd1940f41 // sete r9b + WORD $0x2041; BYTE $0xc1 // and r9b, al QUAD $0x000000e0862e0f66 // ucomisd xmm0, qword [rsi + 224] - LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x98248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 152], cl QUAD $0x000000e8862e0f66 // ucomisd xmm0, qword [rsi + 232] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xa0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 160], cl QUAD $0x000000f0862e0f66 // ucomisd xmm0, qword [rsi + 240] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f40 // sete dil + WORD $0x2040; BYTE $0xc7 // and dil, al QUAD $0x000000f8862e0f66 // ucomisd xmm0, qword [rsi + 248] - LONG $0xd0940f41 // sete r8b - WORD $0x0045; BYTE $0xc9 // add r9b, r9b - QUAD $0x000000d0248c0244 // add r9b, byte [rsp + 208] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0845; BYTE $0xce // or r14b, r9b - WORD $0xd200 // add dl, dl - LONG $0xb0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 176] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xf5 // or r13b, r14b - LONG $0x02e7c040 // shl dil, 2 - WORD $0x0840; BYTE $0xd7 // or dil, dl - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0844; BYTE $0xea // or dl, r13b - WORD $0x8941; BYTE $0xd1 // mov r9d, edx - QUAD $0x0000008824b48b4c // mov r14, qword [rsp + 136] - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0844; BYTE $0xca // or dl, r9b - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xc220 // and dl, al + WORD $0x0045; BYTE $0xed // add r13b, r13b + LONG $0x246c0244; BYTE $0x30 // add r13b, byte [rsp + 48] + WORD $0x8944; BYTE $0xe8 // mov eax, r13d LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b - QUAD $0x0000008024bcb60f // movzx edi, byte [rsp + 128] - LONG $0x06e7c040 // shl dil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl - WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] - WORD $0xc000 // add al, al - LONG $0x68244402 // add al, byte [rsp + 104] - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0x8841; BYTE $0x1e // mov byte [r14], bl - LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xdf // or r15b, bl - LONG $0x014e8841 // mov byte [r14 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] + LONG $0x6cb60f44; WORD $0x3824 // movzx r13d, byte [rsp + 56] + LONG $0x06e5c041 // shl r13b, 6 + WORD $0x0845; BYTE $0xe5 // or r13b, r12b + LONG $0x64b60f44; WORD $0x1824 // movzx r12d, byte [rsp + 24] + LONG $0x02e4c041 // shl r12b, 2 + WORD $0x0841; BYTE $0xc4 // or r12b, al + LONG $0x244cb60f; BYTE $0x40 // movzx ecx, byte [rsp + 64] WORD $0xc900 // add cl, cl LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0844; BYTE $0xe8 // or al, r13b + LONG $0x04244488 // mov byte [rsp + 4], al + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0844; BYTE $0xe0 // or al, r12b + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xcb08 // or bl, cl + LONG $0x6cb60f44; WORD $0x1024 // movzx r13d, byte [rsp + 16] + LONG $0x04e5c041 // shl r13b, 4 + WORD $0x0841; BYTE $0xc5 // or r13b, al + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + LONG $0x08244488 // mov byte [rsp + 8], al + LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] + WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x74b60f44; WORD $0x6024 // movzx r14d, byte [rsp + 96] + LONG $0x07e6c041 // shl r14b, 7 + WORD $0x0841; BYTE $0xc6 // or r14b, al + QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] + WORD $0xc900 // add cl, cl + LONG $0x58244c02 // add cl, byte [rsp + 88] + LONG $0x245cb60f; BYTE $0x78 // movzx ebx, byte [rsp + 120] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0xcb08 // or bl, cl + LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] + WORD $0xd908 // or cl, bl + WORD $0xcb89 // mov ebx, ecx + QUAD $0x000000c0248cb60f // movzx ecx, byte [rsp + 192] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 + WORD $0xd908 // or cl, bl + WORD $0x8941; BYTE $0xcc // mov r12d, ecx + QUAD $0x00000088248c8b48 // mov rcx, qword [rsp + 136] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + WORD $0x0844; BYTE $0xe8 // or al, r13b + QUAD $0x000000b0249cb60f // movzx ebx, byte [rsp + 176] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e7c041 // shl r15b, 6 + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x24740a44; BYTE $0x08 // or r14b, byte [rsp + 8] LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027e8845 // mov byte [r14 + 2], r15b - LONG $0x03468845 // mov byte [r14 + 3], r8b + WORD $0x0845; BYTE $0xf8 // or r8b, r15b + WORD $0x0845; BYTE $0xe0 // or r8b, r12b + WORD $0x0045; BYTE $0xdb // add r11b, r11b + QUAD $0x000000d0249c0244 // add r11b, byte [rsp + 208] + LONG $0x02e2c041 // shl r10b, 2 + WORD $0x0845; BYTE $0xda // or r10b, r11b + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xd1 // or r9b, r10b + QUAD $0x00000098249cb60f // movzx ebx, byte [rsp + 152] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xcb // or bl, r9b + WORD $0x8941; BYTE $0xd9 // mov r9d, ebx + WORD $0x0188 // mov byte [rcx], al + QUAD $0x000000a0249cb60f // movzx ebx, byte [rsp + 160] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e7c040 // shl dil, 6 + WORD $0x0840; BYTE $0xdf // or dil, bl + LONG $0x01718844 // mov byte [rcx + 1], r14b + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x0844; BYTE $0xca // or dl, r9b + LONG $0x02418844 // mov byte [rcx + 2], r8b + WORD $0x5188; BYTE $0x03 // mov byte [rcx + 3], dl LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 - LONG $0x04c68349 // add r14, 4 - QUAD $0x000000e024848348; BYTE $0xff // add qword [rsp + 224], -1 - JNE LBB1_51 + LONG $0x04c18348 // add rcx, 4 + WORD $0x8949; BYTE $0xce // mov r14, rcx + QUAD $0x000000f024848348; BYTE $0xff // add qword [rsp + 240], -1 + JNE LBB1_52 QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] - QUAD $0x000000c0249c8b4c // mov r11, qword [rsp + 192] + QUAD $0x00000110249c8b4c // mov r11, qword [rsp + 272] -LBB1_53: +LBB1_54: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB1_202 + JGE LBB1_199 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 - JNE LBB1_197 + JNE LBB1_195 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB1_199 + JMP LBB1_197 LBB1_2: WORD $0xff83; BYTE $0x02 // cmp edi, 2 - JE LBB1_56 + JE LBB1_57 WORD $0xff83; BYTE $0x03 // cmp edi, 3 - JNE LBB1_202 + JNE LBB1_199 WORD $0x8a44; BYTE $0x1a // mov r11b, byte [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -3268,6 +3556,7 @@ LBB1_6: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 + WORD $0x894d; BYTE $0xf4 // mov r12, r14 LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] WORD $0x3044; BYTE $0xca // xor dl, r9b QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] @@ -3288,178 +3577,177 @@ LBB1_8: LONG $0x20fa8349 // cmp r10, 32 JL LBB1_9 LONG $0x10ff8349 // cmp r15, 16 - LONG $0x245c8844; BYTE $0x08 // mov byte [rsp + 8], r11b + LONG $0x245c8844; BYTE $0x04 // mov byte [rsp + 4], r11b QUAD $0x000000902494894c // mov qword [rsp + 144], r10 QUAD $0x0000010024bc894c // mov qword [rsp + 256], r15 - JB LBB1_83 + JB LBB1_84 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi WORD $0x3949; BYTE $0xc6 // cmp r14, rax - JAE LBB1_86 + JAE LBB1_87 LONG $0xbe048d4b // lea rax, [r14 + 4*r15] WORD $0x3948; BYTE $0xc6 // cmp rsi, rax - JAE LBB1_86 + JAE LBB1_87 -LBB1_83: +LBB1_84: WORD $0xc031 // xor eax, eax - QUAD $0x000000f824848948 // mov qword [rsp + 248], rax - LONG $0x2474894c; BYTE $0x78 // mov qword [rsp + 120], r14 - -LBB1_89: - WORD $0x894d; BYTE $0xfe // mov r14, r15 - QUAD $0x000000f824b42b4c // sub r14, qword [rsp + 248] - QUAD $0x0000009824b4894c // mov qword [rsp + 152], r14 + QUAD $0x000000e824848948 // mov qword [rsp + 232], rax + LONG $0x2474894c; BYTE $0x58 // mov qword [rsp + 88], r14 LBB1_90: + QUAD $0x000000e824bc2b4c // sub r15, qword [rsp + 232] + QUAD $0x0000009824bc894c // mov qword [rsp + 152], r15 + +LBB1_91: WORD $0x8948; BYTE $0xf1 // mov rcx, rsi WORD $0x3844; BYTE $0x1e // cmp byte [rsi], r11b - QUAD $0x000000c02494940f // sete byte [rsp + 192] + QUAD $0x000000a02494940f // sete byte [rsp + 160] LONG $0x015e3844 // cmp byte [rsi + 1], r11b LONG $0xd6940f40 // sete sil LONG $0x02593844 // cmp byte [rcx + 2], r11b LONG $0xd7940f41 // sete r15b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x03 // cmp byte [rcx + 3], al LONG $0xd4940f41 // sete r12b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x04 // cmp byte [rcx + 4], al - QUAD $0x000000d02494940f // sete byte [rsp + 208] - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + QUAD $0x000000b02494940f // sete byte [rsp + 176] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x05 // cmp byte [rcx + 5], al - LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x06 // cmp byte [rcx + 6], al - QUAD $0x000000e02494940f // sete byte [rsp + 224] - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + QUAD $0x000000d02494940f // sete byte [rsp + 208] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x07 // cmp byte [rcx + 7], al LONG $0xd1940f41 // sete r9b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x08 // cmp byte [rcx + 8], al - QUAD $0x000000a02494940f // sete byte [rsp + 160] - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + QUAD $0x000000c02494940f // sete byte [rsp + 192] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x09 // cmp byte [rcx + 9], al WORD $0x940f; BYTE $0xd2 // sete dl - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x0a // cmp byte [rcx + 10], al LONG $0xd7940f40 // sete dil - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x0b // cmp byte [rcx + 11], al LONG $0xd2940f41 // sete r10b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x0c // cmp byte [rcx + 12], al LONG $0xd6940f41 // sete r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x0d // cmp byte [rcx + 13], al LONG $0xd5940f41 // sete r13b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x0e // cmp byte [rcx + 14], al - QUAD $0x000000b02494940f // sete byte [rsp + 176] - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x0f // cmp byte [rcx + 15], al LONG $0xd0940f41 // sete r8b - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x10 // cmp byte [rcx + 16], bl - QUAD $0x000000802494940f // sete byte [rsp + 128] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x11 // cmp byte [rcx + 17], bl - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + QUAD $0x000000802494940f // sete byte [rsp + 128] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x12 // cmp byte [rcx + 18], bl - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] - WORD $0x5938; BYTE $0x13 // cmp byte [rcx + 19], bl LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] - WORD $0x5938; BYTE $0x14 // cmp byte [rcx + 20], bl + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] + WORD $0x5938; BYTE $0x13 // cmp byte [rcx + 19], bl LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] - WORD $0x5938; BYTE $0x15 // cmp byte [rcx + 21], bl + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] + WORD $0x5938; BYTE $0x14 // cmp byte [rcx + 20], bl LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] + WORD $0x5938; BYTE $0x15 // cmp byte [rcx + 21], bl + LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x16 // cmp byte [rcx + 22], bl LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x17 // cmp byte [rcx + 23], bl LONG $0xd3940f41 // sete r11b - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x18 // cmp byte [rcx + 24], bl - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x19 // cmp byte [rcx + 25], bl - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] - WORD $0x5938; BYTE $0x1a // cmp byte [rcx + 26], bl LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] + WORD $0x5938; BYTE $0x1a // cmp byte [rcx + 26], bl + LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x1b // cmp byte [rcx + 27], bl - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x1c // cmp byte [rcx + 28], bl - LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] - WORD $0x5938; BYTE $0x1d // cmp byte [rcx + 29], bl LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] + WORD $0x5938; BYTE $0x1d // cmp byte [rcx + 29], bl + LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x1e // cmp byte [rcx + 30], bl QUAD $0x000000882494940f // sete byte [rsp + 136] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x1f // cmp byte [rcx + 31], bl WORD $0x940f; BYTE $0xd3 // sete bl WORD $0x0040; BYTE $0xf6 // add sil, sil - QUAD $0x000000c024b40240 // add sil, byte [rsp + 192] - QUAD $0x000000e02484b60f // movzx eax, byte [rsp + 224] + QUAD $0x000000a024b40240 // add sil, byte [rsp + 160] + QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e1c041 // shl r9b, 7 WORD $0x0841; BYTE $0xc1 // or r9b, al LONG $0x02e7c041 // shl r15b, 2 WORD $0x0841; BYTE $0xf7 // or r15b, sil WORD $0xd200 // add dl, dl - LONG $0xa0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 160] + LONG $0xc0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 192] LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xfc // or r12b, r15b - LONG $0x7cb60f44; WORD $0x0824 // movzx r15d, byte [rsp + 8] + LONG $0x7cb60f44; WORD $0x0424 // movzx r15d, byte [rsp + 4] LONG $0x02e7c040 // shl dil, 2 WORD $0x0840; BYTE $0xd7 // or dil, dl - QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b LONG $0x03e2c041 // shl r10b, 3 WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x2454b60f; BYTE $0x40 // movzx edx, byte [rsp + 64] + LONG $0x2454b60f; BYTE $0x38 // movzx edx, byte [rsp + 56] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0xc208 // or dl, al LONG $0x04e6c041 // shl r14b, 4 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x05e5c041 // shl r13b, 5 WORD $0x0845; BYTE $0xf5 // or r13b, r14b - QUAD $0x000000b024b4b60f // movzx esi, byte [rsp + 176] + LONG $0x2474b60f; BYTE $0x70 // movzx esi, byte [rsp + 112] LONG $0x06e6c040 // shl sil, 6 LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xf0 // or r8b, sil WORD $0x0841; BYTE $0xd1 // or r9b, dl WORD $0x0845; BYTE $0xe8 // or r8b, r13b - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] + QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] WORD $0xd200 // add dl, dl - LONG $0x80249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 128] + LONG $0x78245402 // add dl, byte [rsp + 120] WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] + LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] WORD $0xe2c0; BYTE $0x02 // shl dl, 2 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] + LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] WORD $0xe2c0; BYTE $0x03 // shl dl, 3 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] + LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] + LONG $0x2454b60f; BYTE $0x40 // movzx edx, byte [rsp + 64] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx - LONG $0x24548b48; BYTE $0x78 // mov rdx, qword [rsp + 120] + LONG $0x24548b48; BYTE $0x58 // mov rdx, qword [rsp + 88] WORD $0x8844; BYTE $0x0a // mov byte [rdx], r9b LONG $0x247cb60f; BYTE $0x48 // movzx edi, byte [rsp + 72] LONG $0x06e7c040 // shl dil, 6 @@ -3467,23 +3755,23 @@ LBB1_90: WORD $0x0841; BYTE $0xfb // or r11b, dil LONG $0x01428844 // mov byte [rdx + 1], r8b WORD $0x0841; BYTE $0xf3 // or r11b, sil - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xc000 // add al, al - LONG $0x38244402 // add al, byte [rsp + 56] + LONG $0x20244402 // add al, byte [rsp + 32] WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0x0840; BYTE $0xf0 // or al, sil WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0840; BYTE $0xf0 // or al, sil WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0840; BYTE $0xf0 // or al, sil WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0840; BYTE $0xf0 // or al, sil QUAD $0x0000008824b4b60f // movzx esi, byte [rsp + 136] @@ -3496,18 +3784,18 @@ LBB1_90: WORD $0x5a88; BYTE $0x03 // mov byte [rdx + 3], bl LONG $0x20718d48 // lea rsi, [rcx + 32] LONG $0x04c28348 // add rdx, 4 - LONG $0x24548948; BYTE $0x78 // mov qword [rsp + 120], rdx + LONG $0x24548948; BYTE $0x58 // mov qword [rsp + 88], rdx QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 - JNE LBB1_90 + JNE LBB1_91 QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] QUAD $0x0000010024bc8b4c // mov r15, qword [rsp + 256] - JMP LBB1_92 + JMP LBB1_93 -LBB1_27: +LBB1_28: WORD $0xff83; BYTE $0x07 // cmp edi, 7 - JE LBB1_148 + JE LBB1_146 WORD $0xff83; BYTE $0x08 // cmp edi, 8 - JNE LBB1_202 + JNE LBB1_199 WORD $0x8b4c; BYTE $0x2a // mov r13, qword [rdx] LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -3517,10 +3805,10 @@ LBB1_27: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB1_33 + JE LBB1_34 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB1_31: +LBB1_32: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 LONG $0x08768d48 // lea rsi, [rsi + 8] WORD $0x940f; BYTE $0xd2 // sete dl @@ -3529,6 +3817,7 @@ LBB1_31: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xd8490f48 // cmovns rbx, rax LONG $0x03fbc148 // sar rbx, 3 + WORD $0x894d; BYTE $0xf1 // mov r9, r14 LONG $0x04b60f45; BYTE $0x1e // movzx r8d, byte [r14 + rbx] WORD $0x3044; BYTE $0xc2 // xor dl, r8b LONG $0x00dd3c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rbx] @@ -3541,29 +3830,29 @@ LBB1_31: LONG $0x1e3c8841 // mov byte [r14 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB1_31 + JNE LBB1_32 LONG $0x01c68349 // add r14, 1 -LBB1_33: +LBB1_34: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB1_37 + JL LBB1_38 QUAD $0x000000902494894c // mov qword [rsp + 144], r10 QUAD $0x00000098249c894c // mov qword [rsp + 152], r11 - QUAD $0x000000c0249c894c // mov qword [rsp + 192], r11 + QUAD $0x000000a0249c894c // mov qword [rsp + 160], r11 -LBB1_35: +LBB1_36: QUAD $0x0000008824b4894c // mov qword [rsp + 136], r14 WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 - QUAD $0x000000e02494940f // sete byte [rsp + 224] + QUAD $0x000000d02494940f // sete byte [rsp + 208] LONG $0x086e394c // cmp qword [rsi + 8], r13 - LONG $0xd7940f40 // sete dil + LONG $0xd2940f41 // sete r10b LONG $0x106e394c // cmp qword [rsi + 16], r13 LONG $0xd6940f41 // sete r14b LONG $0x186e394c // cmp qword [rsi + 24], r13 - QUAD $0x000000d02494940f // sete byte [rsp + 208] + QUAD $0x000000b02494940f // sete byte [rsp + 176] LONG $0x206e394c // cmp qword [rsi + 32], r13 - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] LONG $0x286e394c // cmp qword [rsi + 40], r13 LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] LONG $0x306e394c // cmp qword [rsi + 48], r13 @@ -3571,165 +3860,167 @@ LBB1_35: LONG $0x386e394c // cmp qword [rsi + 56], r13 WORD $0x940f; BYTE $0xd3 // sete bl LONG $0x406e394c // cmp qword [rsi + 64], r13 - QUAD $0x000000a02494940f // sete byte [rsp + 160] + QUAD $0x000000c02494940f // sete byte [rsp + 192] LONG $0x486e394c // cmp qword [rsi + 72], r13 - WORD $0x940f; BYTE $0xd2 // sete dl + LONG $0xd7940f40 // sete dil LONG $0x506e394c // cmp qword [rsi + 80], r13 - LONG $0xd1940f41 // sete r9b + LONG $0xd0940f41 // sete r8b LONG $0x586e394c // cmp qword [rsi + 88], r13 - LONG $0xd2940f41 // sete r10b + LONG $0xd1940f41 // sete r9b LONG $0x606e394c // cmp qword [rsi + 96], r13 LONG $0xd3940f41 // sete r11b LONG $0x686e394c // cmp qword [rsi + 104], r13 LONG $0xd4940f41 // sete r12b LONG $0x706e394c // cmp qword [rsi + 112], r13 - QUAD $0x000000b02494940f // sete byte [rsp + 176] + LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] LONG $0x786e394c // cmp qword [rsi + 120], r13 WORD $0x940f; BYTE $0xd1 // sete cl LONG $0x80ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 128], r13 - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] + LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] LONG $0x88ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 136], r13 - QUAD $0x000000802494940f // sete byte [rsp + 128] + LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] LONG $0x90ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 144], r13 - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + QUAD $0x000000802494940f // sete byte [rsp + 128] LONG $0x98ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 152], r13 - LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] LONG $0xa0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 160], r13 - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] LONG $0xa8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 168], r13 - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] - LONG $0xb0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 176], r13 LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + LONG $0xb0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 176], r13 + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] LONG $0xb8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 184], r13 LONG $0xd7940f41 // sete r15b LONG $0xc0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 192], r13 - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0xc8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 200], r13 - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] LONG $0xd0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 208], r13 - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] - LONG $0xd8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 216], r13 LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] - LONG $0xe0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 224], r13 + LONG $0xd8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 216], r13 LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] - LONG $0xe8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 232], r13 + LONG $0xe0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 224], r13 LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] - LONG $0xf0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 240], r13 + LONG $0xe8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 232], r13 LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] + LONG $0xf0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 240], r13 + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] LONG $0xf8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 248], r13 - LONG $0xd0940f41 // sete r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x000000e024bc0240 // add dil, byte [rsp + 224] + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000d024940244 // add r10b, byte [rsp + 208] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0xa0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 160] - QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + QUAD $0x000000c024bc0240 // add dil, byte [rsp + 192] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b - QUAD $0x000000b024bcb60f // movzx edi, byte [rsp + 176] - LONG $0x06e7c040 // shl dil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl - WORD $0x0844; BYTE $0xe1 // or cl, r12b + WORD $0x8941; BYTE $0xc2 // mov r10d, eax QUAD $0x0000008824b48b4c // mov r14, qword [rsp + 136] - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xd200 // add dl, dl - LONG $0x68245402 // add dl, byte [rsp + 104] - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x04e3c041 // shl r11b, 4 + WORD $0x0845; BYTE $0xcb // or r11b, r9b + LONG $0x05e4c041 // shl r12b, 5 + WORD $0x0845; BYTE $0xdc // or r12b, r11b + LONG $0x247cb60f; BYTE $0x70 // movzx edi, byte [rsp + 112] + LONG $0x06e7c040 // shl dil, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0x0840; BYTE $0xf9 // or cl, dil + WORD $0xc308 // or bl, al + WORD $0x0844; BYTE $0xe1 // or cl, r12b + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xc000 // add al, al + LONG $0x50244402 // add al, byte [rsp + 80] + WORD $0xc789 // mov edi, eax + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil WORD $0x8841; BYTE $0x1e // mov byte [r14], bl - LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] + LONG $0x245cb60f; BYTE $0x38 // movzx ebx, byte [rsp + 56] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl LONG $0x014e8841 // mov byte [r14 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0841; BYTE $0xc7 // or r15b, al + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xc000 // add al, al + LONG $0x10244402 // add al, byte [rsp + 16] + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xc808 // or al, cl + LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xca08 // or dl, cl + WORD $0xc208 // or dl, al LONG $0x027e8845 // mov byte [r14 + 2], r15b - LONG $0x03468845 // mov byte [r14 + 3], r8b + LONG $0x03568841 // mov byte [r14 + 3], dl LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 LONG $0x04c68349 // add r14, 4 - QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 - JNE LBB1_35 + QUAD $0x000000a024848348; BYTE $0xff // add qword [rsp + 160], -1 + JNE LBB1_36 QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] QUAD $0x00000098249c8b4c // mov r11, qword [rsp + 152] -LBB1_37: +LBB1_38: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB1_202 + JGE LBB1_199 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 - JE LBB1_39 + JE LBB1_40 WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d -LBB1_161: +LBB1_159: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 WORD $0x940f; BYTE $0xd0 // sete al WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xdf // mov rdi, r11 LONG $0x03efc148 // shr rdi, 3 + WORD $0x894d; BYTE $0xf7 // mov r15, r14 LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 @@ -3752,10 +4043,10 @@ LBB1_161: WORD $0xda30 // xor dl, bl LONG $0x3e148841 // mov byte [r14 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB1_161 - JMP LBB1_40 + JNE LBB1_159 + JMP LBB1_41 -LBB1_56: +LBB1_57: WORD $0x8a44; BYTE $0x1a // mov r11b, byte [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -3765,10 +4056,10 @@ LBB1_56: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB1_60 + JE LBB1_61 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB1_58: +LBB1_59: WORD $0x3844; BYTE $0x1e // cmp byte [rsi], r11b LONG $0x01768d48 // lea rsi, [rsi + 1] WORD $0x940f; BYTE $0xd2 // sete dl @@ -3777,6 +4068,7 @@ LBB1_58: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 + WORD $0x894d; BYTE $0xf4 // mov r12, r14 LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] WORD $0x3044; BYTE $0xca // xor dl, r9b QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] @@ -3789,148 +4081,147 @@ LBB1_58: LONG $0x3e1c8841 // mov byte [r14 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB1_58 + JNE LBB1_59 LONG $0x01c68349 // add r14, 1 -LBB1_60: +LBB1_61: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB1_61 + JL LBB1_62 LONG $0x10ff8349 // cmp r15, 16 - LONG $0x245c8844; BYTE $0x08 // mov byte [rsp + 8], r11b + LONG $0x245c8844; BYTE $0x04 // mov byte [rsp + 4], r11b QUAD $0x000000902494894c // mov qword [rsp + 144], r10 QUAD $0x0000010024bc894c // mov qword [rsp + 256], r15 - JB LBB1_63 + JB LBB1_64 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi WORD $0x3949; BYTE $0xc6 // cmp r14, rax - JAE LBB1_66 + JAE LBB1_67 LONG $0xbe048d4b // lea rax, [r14 + 4*r15] WORD $0x3948; BYTE $0xc6 // cmp rsi, rax - JAE LBB1_66 + JAE LBB1_67 -LBB1_63: +LBB1_64: WORD $0xc031 // xor eax, eax - QUAD $0x000000f824848948 // mov qword [rsp + 248], rax - LONG $0x2474894c; BYTE $0x50 // mov qword [rsp + 80], r14 - -LBB1_69: - WORD $0x894d; BYTE $0xfe // mov r14, r15 - QUAD $0x000000f824b42b4c // sub r14, qword [rsp + 248] - QUAD $0x0000009824b4894c // mov qword [rsp + 152], r14 + QUAD $0x000000e824848948 // mov qword [rsp + 232], rax + LONG $0x2474894c; BYTE $0x38 // mov qword [rsp + 56], r14 LBB1_70: + QUAD $0x000000e824bc2b4c // sub r15, qword [rsp + 232] + QUAD $0x0000009824bc894c // mov qword [rsp + 152], r15 + +LBB1_71: WORD $0x8948; BYTE $0xf1 // mov rcx, rsi WORD $0x3844; BYTE $0x1e // cmp byte [rsi], r11b - QUAD $0x000000c02494940f // sete byte [rsp + 192] + QUAD $0x000000a02494940f // sete byte [rsp + 160] LONG $0x015e3844 // cmp byte [rsi + 1], r11b LONG $0xd6940f40 // sete sil LONG $0x02593844 // cmp byte [rcx + 2], r11b LONG $0xd7940f41 // sete r15b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x03 // cmp byte [rcx + 3], al LONG $0xd4940f41 // sete r12b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x04 // cmp byte [rcx + 4], al - QUAD $0x000000d02494940f // sete byte [rsp + 208] - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + QUAD $0x000000b02494940f // sete byte [rsp + 176] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x05 // cmp byte [rcx + 5], al LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x06 // cmp byte [rcx + 6], al - QUAD $0x000000e02494940f // sete byte [rsp + 224] - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + QUAD $0x000000d02494940f // sete byte [rsp + 208] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x07 // cmp byte [rcx + 7], al LONG $0xd1940f41 // sete r9b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x08 // cmp byte [rcx + 8], al - QUAD $0x000000a02494940f // sete byte [rsp + 160] - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + QUAD $0x000000c02494940f // sete byte [rsp + 192] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x09 // cmp byte [rcx + 9], al WORD $0x940f; BYTE $0xd2 // sete dl - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x0a // cmp byte [rcx + 10], al LONG $0xd7940f40 // sete dil - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x0b // cmp byte [rcx + 11], al LONG $0xd2940f41 // sete r10b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x0c // cmp byte [rcx + 12], al LONG $0xd6940f41 // sete r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x0d // cmp byte [rcx + 13], al LONG $0xd5940f41 // sete r13b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x0e // cmp byte [rcx + 14], al - QUAD $0x000000b02494940f // sete byte [rsp + 176] - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] WORD $0x4138; BYTE $0x0f // cmp byte [rcx + 15], al LONG $0xd0940f41 // sete r8b - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x10 // cmp byte [rcx + 16], bl - QUAD $0x000000802494940f // sete byte [rsp + 128] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x11 // cmp byte [rcx + 17], bl - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + QUAD $0x000000802494940f // sete byte [rsp + 128] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x12 // cmp byte [rcx + 18], bl - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] - WORD $0x5938; BYTE $0x13 // cmp byte [rcx + 19], bl LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] - WORD $0x5938; BYTE $0x14 // cmp byte [rcx + 20], bl + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] + WORD $0x5938; BYTE $0x13 // cmp byte [rcx + 19], bl LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] + WORD $0x5938; BYTE $0x14 // cmp byte [rcx + 20], bl + LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x15 // cmp byte [rcx + 21], bl LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x16 // cmp byte [rcx + 22], bl - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x17 // cmp byte [rcx + 23], bl LONG $0xd3940f41 // sete r11b - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x18 // cmp byte [rcx + 24], bl - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x19 // cmp byte [rcx + 25], bl - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] - WORD $0x5938; BYTE $0x1a // cmp byte [rcx + 26], bl LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] + WORD $0x5938; BYTE $0x1a // cmp byte [rcx + 26], bl + LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x1b // cmp byte [rcx + 27], bl - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x1c // cmp byte [rcx + 28], bl - LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] - WORD $0x5938; BYTE $0x1d // cmp byte [rcx + 29], bl LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] + WORD $0x5938; BYTE $0x1d // cmp byte [rcx + 29], bl + LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x1e // cmp byte [rcx + 30], bl QUAD $0x000000882494940f // sete byte [rsp + 136] - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x04 // movzx ebx, byte [rsp + 4] WORD $0x5938; BYTE $0x1f // cmp byte [rcx + 31], bl WORD $0x940f; BYTE $0xd3 // sete bl WORD $0x0040; BYTE $0xf6 // add sil, sil - QUAD $0x000000c024b40240 // add sil, byte [rsp + 192] - QUAD $0x000000e02484b60f // movzx eax, byte [rsp + 224] + QUAD $0x000000a024b40240 // add sil, byte [rsp + 160] + QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e1c041 // shl r9b, 7 WORD $0x0841; BYTE $0xc1 // or r9b, al LONG $0x02e7c041 // shl r15b, 2 WORD $0x0841; BYTE $0xf7 // or r15b, sil WORD $0xd200 // add dl, dl - LONG $0xa0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 160] + LONG $0xc0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 192] LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xfc // or r12b, r15b - LONG $0x7cb60f44; WORD $0x0824 // movzx r15d, byte [rsp + 8] + LONG $0x7cb60f44; WORD $0x0424 // movzx r15d, byte [rsp + 4] LONG $0x02e7c040 // shl dil, 2 WORD $0x0840; BYTE $0xd7 // or dil, dl - QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b LONG $0x03e2c041 // shl r10b, 3 @@ -3942,25 +4233,25 @@ LBB1_70: WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x05e5c041 // shl r13b, 5 WORD $0x0845; BYTE $0xf5 // or r13b, r14b - QUAD $0x000000b024b4b60f // movzx esi, byte [rsp + 176] + LONG $0x2474b60f; BYTE $0x70 // movzx esi, byte [rsp + 112] LONG $0x06e6c040 // shl sil, 6 LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xf0 // or r8b, sil WORD $0x0841; BYTE $0xd1 // or r9b, dl WORD $0x0845; BYTE $0xe8 // or r8b, r13b - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] + QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] WORD $0xd200 // add dl, dl - LONG $0x80249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 128] + LONG $0x78245402 // add dl, byte [rsp + 120] WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] + LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] WORD $0xe2c0; BYTE $0x02 // shl dl, 2 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] + LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] WORD $0xe2c0; BYTE $0x03 // shl dl, 3 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] + LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx @@ -3968,31 +4259,31 @@ LBB1_70: WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx - LONG $0x24548b48; BYTE $0x50 // mov rdx, qword [rsp + 80] + LONG $0x24548b48; BYTE $0x38 // mov rdx, qword [rsp + 56] WORD $0x8844; BYTE $0x0a // mov byte [rdx], r9b - LONG $0x247cb60f; BYTE $0x78 // movzx edi, byte [rsp + 120] + LONG $0x247cb60f; BYTE $0x58 // movzx edi, byte [rsp + 88] LONG $0x06e7c040 // shl dil, 6 LONG $0x07e3c041 // shl r11b, 7 WORD $0x0841; BYTE $0xfb // or r11b, dil LONG $0x01428844 // mov byte [rdx + 1], r8b WORD $0x0841; BYTE $0xf3 // or r11b, sil - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xc000 // add al, al - LONG $0x38244402 // add al, byte [rsp + 56] + LONG $0x20244402 // add al, byte [rsp + 32] WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0x0840; BYTE $0xf0 // or al, sil WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0840; BYTE $0xf0 // or al, sil WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0840; BYTE $0xf0 // or al, sil WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0840; BYTE $0xf0 // or al, sil QUAD $0x0000008824b4b60f // movzx esi, byte [rsp + 136] @@ -4005,14 +4296,14 @@ LBB1_70: WORD $0x5a88; BYTE $0x03 // mov byte [rdx + 3], bl LONG $0x20718d48 // lea rsi, [rcx + 32] LONG $0x04c28348 // add rdx, 4 - LONG $0x24548948; BYTE $0x50 // mov qword [rsp + 80], rdx + LONG $0x24548948; BYTE $0x38 // mov qword [rsp + 56], rdx QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 - JNE LBB1_70 + JNE LBB1_71 QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] QUAD $0x0000010024bc8b4c // mov r15, qword [rsp + 256] - JMP LBB1_72 + JMP LBB1_73 -LBB1_148: +LBB1_146: WORD $0x8b44; BYTE $0x2a // mov r13d, dword [rdx] LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -4022,10 +4313,10 @@ LBB1_148: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB1_152 + JE LBB1_150 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB1_150: +LBB1_148: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d LONG $0x04768d48 // lea rsi, [rsi + 4] WORD $0x940f; BYTE $0xd2 // sete dl @@ -4034,6 +4325,7 @@ LBB1_150: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xd8490f48 // cmovns rbx, rax LONG $0x03fbc148 // sar rbx, 3 + WORD $0x894d; BYTE $0xf1 // mov r9, r14 LONG $0x04b60f45; BYTE $0x1e // movzx r8d, byte [r14 + rbx] WORD $0x3044; BYTE $0xc2 // xor dl, r8b LONG $0x00dd3c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rbx] @@ -4046,29 +4338,29 @@ LBB1_150: LONG $0x1e3c8841 // mov byte [r14 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB1_150 + JNE LBB1_148 LONG $0x01c68349 // add r14, 1 -LBB1_152: +LBB1_150: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB1_156 + JL LBB1_154 QUAD $0x000000902494894c // mov qword [rsp + 144], r10 QUAD $0x00000098249c894c // mov qword [rsp + 152], r11 - QUAD $0x000000c0249c894c // mov qword [rsp + 192], r11 + QUAD $0x000000a0249c894c // mov qword [rsp + 160], r11 -LBB1_154: +LBB1_152: QUAD $0x0000008824b4894c // mov qword [rsp + 136], r14 WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d - QUAD $0x000000e02494940f // sete byte [rsp + 224] + QUAD $0x000000d02494940f // sete byte [rsp + 208] LONG $0x046e3944 // cmp dword [rsi + 4], r13d - LONG $0xd7940f40 // sete dil + LONG $0xd2940f41 // sete r10b LONG $0x086e3944 // cmp dword [rsi + 8], r13d LONG $0xd6940f41 // sete r14b LONG $0x0c6e3944 // cmp dword [rsi + 12], r13d - QUAD $0x000000d02494940f // sete byte [rsp + 208] + QUAD $0x000000b02494940f // sete byte [rsp + 176] LONG $0x106e3944 // cmp dword [rsi + 16], r13d - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] LONG $0x146e3944 // cmp dword [rsi + 20], r13d LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] LONG $0x186e3944 // cmp dword [rsi + 24], r13d @@ -4076,175 +4368,176 @@ LBB1_154: LONG $0x1c6e3944 // cmp dword [rsi + 28], r13d WORD $0x940f; BYTE $0xd3 // sete bl LONG $0x206e3944 // cmp dword [rsi + 32], r13d - QUAD $0x000000a02494940f // sete byte [rsp + 160] + QUAD $0x000000c02494940f // sete byte [rsp + 192] LONG $0x246e3944 // cmp dword [rsi + 36], r13d - WORD $0x940f; BYTE $0xd2 // sete dl + LONG $0xd7940f40 // sete dil LONG $0x286e3944 // cmp dword [rsi + 40], r13d - LONG $0xd1940f41 // sete r9b + LONG $0xd0940f41 // sete r8b LONG $0x2c6e3944 // cmp dword [rsi + 44], r13d - LONG $0xd2940f41 // sete r10b + LONG $0xd1940f41 // sete r9b LONG $0x306e3944 // cmp dword [rsi + 48], r13d LONG $0xd3940f41 // sete r11b LONG $0x346e3944 // cmp dword [rsi + 52], r13d LONG $0xd4940f41 // sete r12b LONG $0x386e3944 // cmp dword [rsi + 56], r13d - QUAD $0x000000b02494940f // sete byte [rsp + 176] + LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] LONG $0x3c6e3944 // cmp dword [rsi + 60], r13d WORD $0x940f; BYTE $0xd1 // sete cl LONG $0x406e3944 // cmp dword [rsi + 64], r13d - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] + LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] LONG $0x446e3944 // cmp dword [rsi + 68], r13d - QUAD $0x000000802494940f // sete byte [rsp + 128] + LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] LONG $0x486e3944 // cmp dword [rsi + 72], r13d - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + QUAD $0x000000802494940f // sete byte [rsp + 128] LONG $0x4c6e3944 // cmp dword [rsi + 76], r13d - LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] LONG $0x506e3944 // cmp dword [rsi + 80], r13d - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] LONG $0x546e3944 // cmp dword [rsi + 84], r13d - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] - LONG $0x586e3944 // cmp dword [rsi + 88], r13d LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + LONG $0x586e3944 // cmp dword [rsi + 88], r13d + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] LONG $0x5c6e3944 // cmp dword [rsi + 92], r13d LONG $0xd7940f41 // sete r15b LONG $0x606e3944 // cmp dword [rsi + 96], r13d - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0x646e3944 // cmp dword [rsi + 100], r13d - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] LONG $0x686e3944 // cmp dword [rsi + 104], r13d - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] - LONG $0x6c6e3944 // cmp dword [rsi + 108], r13d LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] - LONG $0x706e3944 // cmp dword [rsi + 112], r13d + LONG $0x6c6e3944 // cmp dword [rsi + 108], r13d LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] - LONG $0x746e3944 // cmp dword [rsi + 116], r13d + LONG $0x706e3944 // cmp dword [rsi + 112], r13d LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] - LONG $0x786e3944 // cmp dword [rsi + 120], r13d + LONG $0x746e3944 // cmp dword [rsi + 116], r13d LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] + LONG $0x786e3944 // cmp dword [rsi + 120], r13d + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] LONG $0x7c6e3944 // cmp dword [rsi + 124], r13d - LONG $0xd0940f41 // sete r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x000000e024bc0240 // add dil, byte [rsp + 224] + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000d024940244 // add r10b, byte [rsp + 208] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0xa0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 160] - QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + QUAD $0x000000c024bc0240 // add dil, byte [rsp + 192] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + QUAD $0x0000008824b48b4c // mov r14, qword [rsp + 136] + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b - QUAD $0x000000b024bcb60f // movzx edi, byte [rsp + 176] + LONG $0x247cb60f; BYTE $0x70 // movzx edi, byte [rsp + 112] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x0000008824b48b4c // mov r14, qword [rsp + 136] - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xd200 // add dl, dl - LONG $0x68245402 // add dl, byte [rsp + 104] - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xc000 // add al, al + LONG $0x50244402 // add al, byte [rsp + 80] + WORD $0xc789 // mov edi, eax + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil WORD $0x8841; BYTE $0x1e // mov byte [r14], bl - LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] + LONG $0x245cb60f; BYTE $0x38 // movzx ebx, byte [rsp + 56] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl LONG $0x014e8841 // mov byte [r14 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0841; BYTE $0xc7 // or r15b, al + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xc000 // add al, al + LONG $0x10244402 // add al, byte [rsp + 16] + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xc808 // or al, cl + LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xca08 // or dl, cl + WORD $0xc208 // or dl, al LONG $0x027e8845 // mov byte [r14 + 2], r15b - LONG $0x03468845 // mov byte [r14 + 3], r8b + LONG $0x03568841 // mov byte [r14 + 3], dl LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 LONG $0x04c68349 // add r14, 4 - QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 - JNE LBB1_154 + QUAD $0x000000a024848348; BYTE $0xff // add qword [rsp + 160], -1 + JNE LBB1_152 QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] QUAD $0x00000098249c8b4c // mov r11, qword [rsp + 152] -LBB1_156: +LBB1_154: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB1_202 + JGE LBB1_199 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 - JNE LBB1_158 + JNE LBB1_156 LBB1_23: WORD $0x3145; BYTE $0xdb // xor r11d, r11d JMP LBB1_24 -LBB1_100: - LONG $0x2ab70f44 // movzx r13d, word [rdx] - LONG $0x1f5a8d4d // lea r11, [r10 + 31] +LBB1_101: + LONG $0x1ab70f44 // movzx r11d, word [rdx] + LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 - LONG $0xda490f4d // cmovns r11, r10 + LONG $0xfa490f4d // cmovns r15, r10 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB1_104 + JE LBB1_105 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB1_102: - LONG $0x2e394466 // cmp word [rsi], r13w +LBB1_103: + LONG $0x1e394466 // cmp word [rsi], r11w LONG $0x02768d48 // lea rsi, [rsi + 2] WORD $0x940f; BYTE $0xd2 // sete dl WORD $0xdaf6 // neg dl @@ -4252,6 +4545,7 @@ LBB1_102: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 + WORD $0x894d; BYTE $0xf4 // mov r12, r14 LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] WORD $0x3044; BYTE $0xca // xor dl, r9b QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] @@ -4264,151 +4558,182 @@ LBB1_102: LONG $0x3e1c8841 // mov byte [r14 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB1_102 + JNE LBB1_103 LONG $0x01c68349 // add r14, 1 -LBB1_104: - LONG $0x05fbc149 // sar r11, 5 - LONG $0x20fa8349 // cmp r10, 32 - JL LBB1_105 - LONG $0x08fb8349 // cmp r11, 8 - QUAD $0x000000902494894c // mov qword [rsp + 144], r10 - QUAD $0x00000098249c894c // mov qword [rsp + 152], r11 - JB LBB1_107 - WORD $0x894c; BYTE $0xd8 // mov rax, r11 - LONG $0x06e0c148 // shl rax, 6 - WORD $0x0148; BYTE $0xf0 // add rax, rsi - WORD $0x3949; BYTE $0xc6 // cmp r14, rax - JAE LBB1_110 - LONG $0x9e048d4b // lea rax, [r14 + 4*r11] - WORD $0x3948; BYTE $0xf0 // cmp rax, rsi - JBE LBB1_110 +LBB1_105: + LONG $0x05ffc149 // sar r15, 5 + LONG $0x20fa8349 // cmp r10, 32 + JL LBB1_106 + LONG $0x08ff8349 // cmp r15, 8 + LONG $0x245c8944; BYTE $0x04 // mov dword [rsp + 4], r11d + QUAD $0x000000902494894c // mov qword [rsp + 144], r10 + QUAD $0x000000f024bc894c // mov qword [rsp + 240], r15 + JB LBB1_108 + WORD $0x894c; BYTE $0xf8 // mov rax, r15 + LONG $0x06e0c148 // shl rax, 6 + WORD $0x0148; BYTE $0xf0 // add rax, rsi + WORD $0x3949; BYTE $0xc6 // cmp r14, rax + JAE LBB1_111 + LONG $0xbe048d4b // lea rax, [r14 + 4*r15] + WORD $0x3948; BYTE $0xf0 // cmp rax, rsi + JBE LBB1_111 -LBB1_107: +LBB1_108: WORD $0xc031 // xor eax, eax - LONG $0x24448948; BYTE $0x10 // mov qword [rsp + 16], rax + LONG $0x24448948; BYTE $0x20 // mov qword [rsp + 32], rax LONG $0x2474894c; BYTE $0x08 // mov qword [rsp + 8], r14 -LBB1_113: - LONG $0x245c2b4c; BYTE $0x10 // sub r11, qword [rsp + 16] - QUAD $0x000000c0249c894c // mov qword [rsp + 192], r11 - LBB1_114: - WORD $0x8949; BYTE $0xf3 // mov r11, rsi - LONG $0x2e394466 // cmp word [rsi], r13w - QUAD $0x000000e02494940f // sete byte [rsp + 224] - LONG $0x6e394466; BYTE $0x02 // cmp word [rsi + 2], r13w + LONG $0x247c2b4c; BYTE $0x20 // sub r15, qword [rsp + 32] + QUAD $0x0000009824bc894c // mov qword [rsp + 152], r15 + +LBB1_115: + WORD $0x8949; BYTE $0xf2 // mov r10, rsi + LONG $0x1e394466 // cmp word [rsi], r11w + QUAD $0x000000a02494940f // sete byte [rsp + 160] + LONG $0x5e394466; BYTE $0x02 // cmp word [rsi + 2], r11w LONG $0xd0940f41 // sete r8b - LONG $0x6e394466; BYTE $0x04 // cmp word [rsi + 4], r13w + LONG $0x5e394466; BYTE $0x04 // cmp word [rsi + 4], r11w LONG $0xd6940f41 // sete r14b - LONG $0x6e394466; BYTE $0x06 // cmp word [rsi + 6], r13w - QUAD $0x000000d02494940f // sete byte [rsp + 208] - LONG $0x6e394466; BYTE $0x08 // cmp word [rsi + 8], r13w + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x06463966 // cmp word [rsi + 6], ax + LONG $0xd5940f41 // sete r13b + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x08463966 // cmp word [rsi + 8], ax + QUAD $0x000000802494940f // sete byte [rsp + 128] + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x0a463966 // cmp word [rsi + 10], ax LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] - LONG $0x6e394466; BYTE $0x0a // cmp word [rsi + 10], r13w - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] - LONG $0x6e394466; BYTE $0x0c // cmp word [rsi + 12], r13w - WORD $0x940f; BYTE $0xd0 // sete al - LONG $0x6e394466; BYTE $0x0e // cmp word [rsi + 14], r13w + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x0c463966 // cmp word [rsi + 12], ax + QUAD $0x000000d02494940f // sete byte [rsp + 208] + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x0e463966 // cmp word [rsi + 14], ax WORD $0x940f; BYTE $0xd3 // sete bl - LONG $0x6e394466; BYTE $0x10 // cmp word [rsi + 16], r13w - QUAD $0x000000a02494940f // sete byte [rsp + 160] - LONG $0x6e394466; BYTE $0x12 // cmp word [rsi + 18], r13w + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x10463966 // cmp word [rsi + 16], ax + QUAD $0x000000c02494940f // sete byte [rsp + 192] + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x12463966 // cmp word [rsi + 18], ax WORD $0x940f; BYTE $0xd1 // sete cl - LONG $0x6e394466; BYTE $0x14 // cmp word [rsi + 20], r13w + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x14463966 // cmp word [rsi + 20], ax LONG $0xd6940f40 // sete sil - LONG $0x6b394566; BYTE $0x16 // cmp word [r11 + 22], r13w + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x42394166; BYTE $0x16 // cmp word [r10 + 22], ax LONG $0xd1940f41 // sete r9b - LONG $0x6b394566; BYTE $0x18 // cmp word [r11 + 24], r13w - LONG $0xd2940f41 // sete r10b - LONG $0x6b394566; BYTE $0x1a // cmp word [r11 + 26], r13w + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x42394166; BYTE $0x18 // cmp word [r10 + 24], ax + LONG $0xd3940f41 // sete r11b + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x42394166; BYTE $0x1a // cmp word [r10 + 26], ax LONG $0xd4940f41 // sete r12b - LONG $0x6b394566; BYTE $0x1c // cmp word [r11 + 28], r13w - QUAD $0x000000b02494940f // sete byte [rsp + 176] - LONG $0x6b394566; BYTE $0x1e // cmp word [r11 + 30], r13w + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x42394166; BYTE $0x1c // cmp word [r10 + 28], ax + LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x42394166; BYTE $0x1e // cmp word [r10 + 30], ax LONG $0xd7940f40 // sete dil - LONG $0x6b394566; BYTE $0x20 // cmp word [r11 + 32], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x20 // cmp word [r10 + 32], dx LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] - LONG $0x6b394566; BYTE $0x22 // cmp word [r11 + 34], r13w - QUAD $0x000000802494940f // sete byte [rsp + 128] - LONG $0x6b394566; BYTE $0x24 // cmp word [r11 + 36], r13w - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] - LONG $0x6b394566; BYTE $0x26 // cmp word [r11 + 38], r13w - LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] - LONG $0x6b394566; BYTE $0x28 // cmp word [r11 + 40], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x22 // cmp word [r10 + 34], dx + QUAD $0x000000b02494940f // sete byte [rsp + 176] + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x24 // cmp word [r10 + 36], dx LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] - LONG $0x6b394566; BYTE $0x2a // cmp word [r11 + 42], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x26 // cmp word [r10 + 38], dx + LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x28 // cmp word [r10 + 40], dx LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] - LONG $0x6b394566; BYTE $0x2c // cmp word [r11 + 44], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x2a // cmp word [r10 + 42], dx + LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x2c // cmp word [r10 + 44], dx LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] - LONG $0x6b394566; BYTE $0x2e // cmp word [r11 + 46], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x2e // cmp word [r10 + 46], dx LONG $0xd7940f41 // sete r15b - LONG $0x6b394566; BYTE $0x30 // cmp word [r11 + 48], r13w - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] - LONG $0x6b394566; BYTE $0x32 // cmp word [r11 + 50], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x30 // cmp word [r10 + 48], dx + LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x32 // cmp word [r10 + 50], dx LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] - LONG $0x6b394566; BYTE $0x34 // cmp word [r11 + 52], r13w - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] - LONG $0x6b394566; BYTE $0x36 // cmp word [r11 + 54], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x34 // cmp word [r10 + 52], dx + LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x36 // cmp word [r10 + 54], dx LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] - LONG $0x6b394566; BYTE $0x38 // cmp word [r11 + 56], r13w - LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] - LONG $0x6b394566; BYTE $0x3a // cmp word [r11 + 58], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x38 // cmp word [r10 + 56], dx + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x3a // cmp word [r10 + 58], dx LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] - LONG $0x6b394566; BYTE $0x3c // cmp word [r11 + 60], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x3c // cmp word [r10 + 60], dx QUAD $0x000000882494940f // sete byte [rsp + 136] - LONG $0x6b394566; BYTE $0x3e // cmp word [r11 + 62], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x3e // cmp word [r10 + 62], dx WORD $0x940f; BYTE $0xd2 // sete dl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - QUAD $0x000000e024840244 // add r8b, byte [rsp + 224] + QUAD $0x000000a024840244 // add r8b, byte [rsp + 160] + QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xc6 // or r14b, r8b WORD $0xc900 // add cl, cl - LONG $0xa0248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 160] - QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b + LONG $0xc0248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 192] + LONG $0x03e5c041 // shl r13b, 3 + WORD $0x0845; BYTE $0xf5 // or r13b, r14b + LONG $0x0424448b // mov eax, dword [rsp + 4] LONG $0x02e6c040 // shl sil, 2 WORD $0x0840; BYTE $0xce // or sil, cl - LONG $0x244cb60f; BYTE $0x58 // movzx ecx, byte [rsp + 88] + QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al + WORD $0x0844; BYTE $0xe9 // or cl, r13b WORD $0x8941; BYTE $0xc8 // mov r8d, ecx LONG $0x03e1c041 // shl r9b, 3 WORD $0x0841; BYTE $0xf1 // or r9b, sil - LONG $0x244cb60f; BYTE $0x48 // movzx ecx, byte [rsp + 72] + LONG $0x244cb60f; BYTE $0x58 // movzx ecx, byte [rsp + 88] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xca // or r10b, r9b + LONG $0x04e3c041 // shl r11b, 4 + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - QUAD $0x000000b024b4b60f // movzx esi, byte [rsp + 176] + WORD $0x0845; BYTE $0xdc // or r12b, r11b + WORD $0x8941; BYTE $0xc3 // mov r11d, eax + LONG $0x2474b60f; BYTE $0x70 // movzx esi, byte [rsp + 112] LONG $0x06e6c040 // shl sil, 6 LONG $0x07e7c040 // shl dil, 7 WORD $0x0840; BYTE $0xf7 // or dil, sil WORD $0xcb08 // or bl, cl WORD $0x0844; BYTE $0xe7 // or dil, r12b - QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] - WORD $0xc900 // add cl, cl - LONG $0x68244c02 // add cl, byte [rsp + 104] - WORD $0xce89 // mov esi, ecx - LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] + WORD $0xc000 // add al, al + LONG $0x68244402 // add al, byte [rsp + 104] + LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0x0840; BYTE $0xf1 // or cl, sil + WORD $0xc108 // or cl, al WORD $0xce89 // mov esi, ecx LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 WORD $0x0840; BYTE $0xf1 // or cl, sil WORD $0xce89 // mov esi, ecx - LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] + LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 WORD $0x0840; BYTE $0xf1 // or cl, sil WORD $0xce89 // mov esi, ecx - LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] + LONG $0x244cb60f; BYTE $0x48 // movzx ecx, byte [rsp + 72] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0x0840; BYTE $0xf1 // or cl, sil WORD $0xce89 // mov esi, ecx @@ -4422,9 +4747,9 @@ LBB1_114: WORD $0x0841; BYTE $0xf7 // or r15b, sil LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xc000 // add al, al - LONG $0x20244402 // add al, byte [rsp + 32] + LONG $0x18244402 // add al, byte [rsp + 24] WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax @@ -4432,7 +4757,7 @@ LBB1_114: WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax @@ -4446,17 +4771,17 @@ LBB1_114: WORD $0xc208 // or dl, al LONG $0x02798844 // mov byte [rcx + 2], r15b WORD $0x5188; BYTE $0x03 // mov byte [rcx + 3], dl - LONG $0x40738d49 // lea rsi, [r11 + 64] + LONG $0x40728d49 // lea rsi, [r10 + 64] LONG $0x04c18348 // add rcx, 4 LONG $0x244c8948; BYTE $0x08 // mov qword [rsp + 8], rcx - QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 - JNE LBB1_114 + QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 + JNE LBB1_115 QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] - QUAD $0x00000098249c8b4c // mov r11, qword [rsp + 152] - JMP LBB1_116 + QUAD $0x000000f024bc8b4c // mov r15, qword [rsp + 240] + JMP LBB1_117 -LBB1_123: - LONG $0x2ab70f44 // movzx r13d, word [rdx] +LBB1_124: + LONG $0x1ab70f44 // movzx r11d, word [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 LONG $0xfa490f4d // cmovns r15, r10 @@ -4465,11 +4790,11 @@ LBB1_123: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB1_127 + JE LBB1_128 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB1_125: - LONG $0x2e394466 // cmp word [rsi], r13w +LBB1_126: + LONG $0x1e394466 // cmp word [rsi], r11w LONG $0x02768d48 // lea rsi, [rsi + 2] WORD $0x940f; BYTE $0xd2 // sete dl WORD $0xdaf6 // neg dl @@ -4477,6 +4802,7 @@ LBB1_125: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 + WORD $0x894d; BYTE $0xf4 // mov r12, r14 LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] WORD $0x3044; BYTE $0xca // xor dl, r9b QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] @@ -4489,153 +4815,182 @@ LBB1_125: LONG $0x3e1c8841 // mov byte [r14 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB1_125 + JNE LBB1_126 LONG $0x01c68349 // add r14, 1 -LBB1_127: - LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fa8349 // cmp r10, 32 - JL LBB1_128 - LONG $0x08ff8349 // cmp r15, 8 - QUAD $0x000000902494894c // mov qword [rsp + 144], r10 - QUAD $0x0000009824bc894c // mov qword [rsp + 152], r15 - JB LBB1_130 - WORD $0x894c; BYTE $0xf8 // mov rax, r15 - LONG $0x06e0c148 // shl rax, 6 - WORD $0x0148; BYTE $0xf0 // add rax, rsi - WORD $0x3949; BYTE $0xc6 // cmp r14, rax - JAE LBB1_133 - LONG $0xbe048d4b // lea rax, [r14 + 4*r15] - WORD $0x3948; BYTE $0xf0 // cmp rax, rsi - JBE LBB1_133 +LBB1_128: + LONG $0x05ffc149 // sar r15, 5 + LONG $0x20fa8349 // cmp r10, 32 + JL LBB1_129 + LONG $0x08ff8349 // cmp r15, 8 + LONG $0x245c8944; BYTE $0x04 // mov dword [rsp + 4], r11d + QUAD $0x000000902494894c // mov qword [rsp + 144], r10 + QUAD $0x000000f024bc894c // mov qword [rsp + 240], r15 + JB LBB1_131 + WORD $0x894c; BYTE $0xf8 // mov rax, r15 + LONG $0x06e0c148 // shl rax, 6 + WORD $0x0148; BYTE $0xf0 // add rax, rsi + WORD $0x3949; BYTE $0xc6 // cmp r14, rax + JAE LBB1_134 + LONG $0xbe048d4b // lea rax, [r14 + 4*r15] + WORD $0x3948; BYTE $0xf0 // cmp rax, rsi + JBE LBB1_134 -LBB1_130: +LBB1_131: WORD $0xc031 // xor eax, eax - LONG $0x24448948; BYTE $0x10 // mov qword [rsp + 16], rax - WORD $0x894d; BYTE $0xf4 // mov r12, r14 - -LBB1_136: - LONG $0x2464894c; BYTE $0x08 // mov qword [rsp + 8], r12 - WORD $0x894d; BYTE $0xfe // mov r14, r15 - LONG $0x24742b4c; BYTE $0x10 // sub r14, qword [rsp + 16] - QUAD $0x000000c024b4894c // mov qword [rsp + 192], r14 + LONG $0x24448948; BYTE $0x20 // mov qword [rsp + 32], rax + LONG $0x2474894c; BYTE $0x08 // mov qword [rsp + 8], r14 LBB1_137: - WORD $0x8949; BYTE $0xf3 // mov r11, rsi - LONG $0x2e394466 // cmp word [rsi], r13w - QUAD $0x000000e02494940f // sete byte [rsp + 224] - LONG $0x6e394466; BYTE $0x02 // cmp word [rsi + 2], r13w + LONG $0x247c2b4c; BYTE $0x20 // sub r15, qword [rsp + 32] + QUAD $0x0000009824bc894c // mov qword [rsp + 152], r15 + +LBB1_138: + WORD $0x8949; BYTE $0xf2 // mov r10, rsi + LONG $0x1e394466 // cmp word [rsi], r11w + QUAD $0x000000a02494940f // sete byte [rsp + 160] + LONG $0x5e394466; BYTE $0x02 // cmp word [rsi + 2], r11w LONG $0xd0940f41 // sete r8b - LONG $0x6e394466; BYTE $0x04 // cmp word [rsi + 4], r13w + LONG $0x5e394466; BYTE $0x04 // cmp word [rsi + 4], r11w LONG $0xd6940f41 // sete r14b - LONG $0x6e394466; BYTE $0x06 // cmp word [rsi + 6], r13w - QUAD $0x000000d02494940f // sete byte [rsp + 208] - LONG $0x6e394466; BYTE $0x08 // cmp word [rsi + 8], r13w + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x06463966 // cmp word [rsi + 6], ax + LONG $0xd5940f41 // sete r13b + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x08463966 // cmp word [rsi + 8], ax + QUAD $0x000000802494940f // sete byte [rsp + 128] + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x0a463966 // cmp word [rsi + 10], ax LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] - LONG $0x6e394466; BYTE $0x0a // cmp word [rsi + 10], r13w - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] - LONG $0x6e394466; BYTE $0x0c // cmp word [rsi + 12], r13w - WORD $0x940f; BYTE $0xd0 // sete al - LONG $0x6e394466; BYTE $0x0e // cmp word [rsi + 14], r13w + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x0c463966 // cmp word [rsi + 12], ax + QUAD $0x000000d02494940f // sete byte [rsp + 208] + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x0e463966 // cmp word [rsi + 14], ax WORD $0x940f; BYTE $0xd3 // sete bl - LONG $0x6e394466; BYTE $0x10 // cmp word [rsi + 16], r13w - QUAD $0x000000a02494940f // sete byte [rsp + 160] - LONG $0x6e394466; BYTE $0x12 // cmp word [rsi + 18], r13w + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x10463966 // cmp word [rsi + 16], ax + QUAD $0x000000c02494940f // sete byte [rsp + 192] + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x12463966 // cmp word [rsi + 18], ax WORD $0x940f; BYTE $0xd1 // sete cl - LONG $0x6e394466; BYTE $0x14 // cmp word [rsi + 20], r13w + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x14463966 // cmp word [rsi + 20], ax LONG $0xd6940f40 // sete sil - LONG $0x6b394566; BYTE $0x16 // cmp word [r11 + 22], r13w + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x42394166; BYTE $0x16 // cmp word [r10 + 22], ax LONG $0xd1940f41 // sete r9b - LONG $0x6b394566; BYTE $0x18 // cmp word [r11 + 24], r13w - LONG $0xd2940f41 // sete r10b - LONG $0x6b394566; BYTE $0x1a // cmp word [r11 + 26], r13w + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x42394166; BYTE $0x18 // cmp word [r10 + 24], ax + LONG $0xd3940f41 // sete r11b + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x42394166; BYTE $0x1a // cmp word [r10 + 26], ax LONG $0xd4940f41 // sete r12b - LONG $0x6b394566; BYTE $0x1c // cmp word [r11 + 28], r13w - QUAD $0x000000b02494940f // sete byte [rsp + 176] - LONG $0x6b394566; BYTE $0x1e // cmp word [r11 + 30], r13w + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x42394166; BYTE $0x1c // cmp word [r10 + 28], ax + LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + LONG $0x0424448b // mov eax, dword [rsp + 4] + LONG $0x42394166; BYTE $0x1e // cmp word [r10 + 30], ax LONG $0xd7940f40 // sete dil - LONG $0x6b394566; BYTE $0x20 // cmp word [r11 + 32], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x20 // cmp word [r10 + 32], dx LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] - LONG $0x6b394566; BYTE $0x22 // cmp word [r11 + 34], r13w - QUAD $0x000000802494940f // sete byte [rsp + 128] - LONG $0x6b394566; BYTE $0x24 // cmp word [r11 + 36], r13w - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] - LONG $0x6b394566; BYTE $0x26 // cmp word [r11 + 38], r13w - LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] - LONG $0x6b394566; BYTE $0x28 // cmp word [r11 + 40], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x22 // cmp word [r10 + 34], dx + QUAD $0x000000b02494940f // sete byte [rsp + 176] + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x24 // cmp word [r10 + 36], dx LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] - LONG $0x6b394566; BYTE $0x2a // cmp word [r11 + 42], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x26 // cmp word [r10 + 38], dx + LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x28 // cmp word [r10 + 40], dx LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] - LONG $0x6b394566; BYTE $0x2c // cmp word [r11 + 44], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x2a // cmp word [r10 + 42], dx + LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x2c // cmp word [r10 + 44], dx LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] - LONG $0x6b394566; BYTE $0x2e // cmp word [r11 + 46], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x2e // cmp word [r10 + 46], dx LONG $0xd7940f41 // sete r15b - LONG $0x6b394566; BYTE $0x30 // cmp word [r11 + 48], r13w - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] - LONG $0x6b394566; BYTE $0x32 // cmp word [r11 + 50], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x30 // cmp word [r10 + 48], dx + LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x32 // cmp word [r10 + 50], dx LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] - LONG $0x6b394566; BYTE $0x34 // cmp word [r11 + 52], r13w - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] - LONG $0x6b394566; BYTE $0x36 // cmp word [r11 + 54], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x34 // cmp word [r10 + 52], dx + LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x36 // cmp word [r10 + 54], dx LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] - LONG $0x6b394566; BYTE $0x38 // cmp word [r11 + 56], r13w - LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] - LONG $0x6b394566; BYTE $0x3a // cmp word [r11 + 58], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x38 // cmp word [r10 + 56], dx + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x3a // cmp word [r10 + 58], dx LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] - LONG $0x6b394566; BYTE $0x3c // cmp word [r11 + 60], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x3c // cmp word [r10 + 60], dx QUAD $0x000000882494940f // sete byte [rsp + 136] - LONG $0x6b394566; BYTE $0x3e // cmp word [r11 + 62], r13w + LONG $0x0424548b // mov edx, dword [rsp + 4] + LONG $0x52394166; BYTE $0x3e // cmp word [r10 + 62], dx WORD $0x940f; BYTE $0xd2 // sete dl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - QUAD $0x000000e024840244 // add r8b, byte [rsp + 224] + QUAD $0x000000a024840244 // add r8b, byte [rsp + 160] + QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xc6 // or r14b, r8b WORD $0xc900 // add cl, cl - LONG $0xa0248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 160] - QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b + LONG $0xc0248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 192] + LONG $0x03e5c041 // shl r13b, 3 + WORD $0x0845; BYTE $0xf5 // or r13b, r14b + LONG $0x0424448b // mov eax, dword [rsp + 4] LONG $0x02e6c040 // shl sil, 2 WORD $0x0840; BYTE $0xce // or sil, cl - LONG $0x244cb60f; BYTE $0x58 // movzx ecx, byte [rsp + 88] + QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al + WORD $0x0844; BYTE $0xe9 // or cl, r13b WORD $0x8941; BYTE $0xc8 // mov r8d, ecx LONG $0x03e1c041 // shl r9b, 3 WORD $0x0841; BYTE $0xf1 // or r9b, sil - LONG $0x244cb60f; BYTE $0x48 // movzx ecx, byte [rsp + 72] + LONG $0x244cb60f; BYTE $0x58 // movzx ecx, byte [rsp + 88] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xca // or r10b, r9b + LONG $0x04e3c041 // shl r11b, 4 + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - QUAD $0x000000b024b4b60f // movzx esi, byte [rsp + 176] + WORD $0x0845; BYTE $0xdc // or r12b, r11b + WORD $0x8941; BYTE $0xc3 // mov r11d, eax + LONG $0x2474b60f; BYTE $0x70 // movzx esi, byte [rsp + 112] LONG $0x06e6c040 // shl sil, 6 LONG $0x07e7c040 // shl dil, 7 WORD $0x0840; BYTE $0xf7 // or dil, sil WORD $0xcb08 // or bl, cl WORD $0x0844; BYTE $0xe7 // or dil, r12b - QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] - WORD $0xc900 // add cl, cl - LONG $0x68244c02 // add cl, byte [rsp + 104] - WORD $0xce89 // mov esi, ecx - LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] + WORD $0xc000 // add al, al + LONG $0x68244402 // add al, byte [rsp + 104] + LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0x0840; BYTE $0xf1 // or cl, sil + WORD $0xc108 // or cl, al WORD $0xce89 // mov esi, ecx LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 WORD $0x0840; BYTE $0xf1 // or cl, sil WORD $0xce89 // mov esi, ecx - LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] + LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 WORD $0x0840; BYTE $0xf1 // or cl, sil WORD $0xce89 // mov esi, ecx - LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] + LONG $0x244cb60f; BYTE $0x48 // movzx ecx, byte [rsp + 72] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0x0840; BYTE $0xf1 // or cl, sil WORD $0xce89 // mov esi, ecx @@ -4649,9 +5004,9 @@ LBB1_137: WORD $0x0841; BYTE $0xf7 // or r15b, sil LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xc000 // add al, al - LONG $0x20244402 // add al, byte [rsp + 32] + LONG $0x18244402 // add al, byte [rsp + 24] WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax @@ -4659,7 +5014,7 @@ LBB1_137: WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax @@ -4673,17 +5028,16 @@ LBB1_137: WORD $0xc208 // or dl, al LONG $0x02798844 // mov byte [rcx + 2], r15b WORD $0x5188; BYTE $0x03 // mov byte [rcx + 3], dl - LONG $0x40738d49 // lea rsi, [r11 + 64] + LONG $0x40728d49 // lea rsi, [r10 + 64] LONG $0x04c18348 // add rcx, 4 LONG $0x244c8948; BYTE $0x08 // mov qword [rsp + 8], rcx - QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 - JNE LBB1_137 + QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 + JNE LBB1_138 QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] - QUAD $0x0000009824bc8b4c // mov r15, qword [rsp + 152] - LONG $0x24648b4c; BYTE $0x08 // mov r12, qword [rsp + 8] - JMP LBB1_139 + QUAD $0x000000f024bc8b4c // mov r15, qword [rsp + 240] + JMP LBB1_140 -LBB1_162: +LBB1_160: WORD $0x8b4c; BYTE $0x2a // mov r13, qword [rdx] LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -4693,10 +5047,10 @@ LBB1_162: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB1_166 + JE LBB1_164 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB1_164: +LBB1_162: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 LONG $0x08768d48 // lea rsi, [rsi + 8] WORD $0x940f; BYTE $0xd2 // sete dl @@ -4705,6 +5059,7 @@ LBB1_164: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xd8490f48 // cmovns rbx, rax LONG $0x03fbc148 // sar rbx, 3 + WORD $0x894d; BYTE $0xf1 // mov r9, r14 LONG $0x04b60f45; BYTE $0x1e // movzx r8d, byte [r14 + rbx] WORD $0x3044; BYTE $0xc2 // xor dl, r8b LONG $0x00dd3c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rbx] @@ -4717,29 +5072,29 @@ LBB1_164: LONG $0x1e3c8841 // mov byte [r14 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB1_164 + JNE LBB1_162 LONG $0x01c68349 // add r14, 1 -LBB1_166: +LBB1_164: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB1_170 + JL LBB1_168 QUAD $0x000000902494894c // mov qword [rsp + 144], r10 QUAD $0x00000098249c894c // mov qword [rsp + 152], r11 - QUAD $0x000000c0249c894c // mov qword [rsp + 192], r11 + QUAD $0x000000a0249c894c // mov qword [rsp + 160], r11 -LBB1_168: +LBB1_166: QUAD $0x0000008824b4894c // mov qword [rsp + 136], r14 WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 - QUAD $0x000000e02494940f // sete byte [rsp + 224] + QUAD $0x000000d02494940f // sete byte [rsp + 208] LONG $0x086e394c // cmp qword [rsi + 8], r13 - LONG $0xd7940f40 // sete dil + LONG $0xd2940f41 // sete r10b LONG $0x106e394c // cmp qword [rsi + 16], r13 LONG $0xd6940f41 // sete r14b LONG $0x186e394c // cmp qword [rsi + 24], r13 - QUAD $0x000000d02494940f // sete byte [rsp + 208] + QUAD $0x000000b02494940f // sete byte [rsp + 176] LONG $0x206e394c // cmp qword [rsi + 32], r13 - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] LONG $0x286e394c // cmp qword [rsi + 40], r13 LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] LONG $0x306e394c // cmp qword [rsi + 48], r13 @@ -4747,161 +5102,162 @@ LBB1_168: LONG $0x386e394c // cmp qword [rsi + 56], r13 WORD $0x940f; BYTE $0xd3 // sete bl LONG $0x406e394c // cmp qword [rsi + 64], r13 - QUAD $0x000000a02494940f // sete byte [rsp + 160] + QUAD $0x000000c02494940f // sete byte [rsp + 192] LONG $0x486e394c // cmp qword [rsi + 72], r13 - WORD $0x940f; BYTE $0xd2 // sete dl + LONG $0xd7940f40 // sete dil LONG $0x506e394c // cmp qword [rsi + 80], r13 - LONG $0xd1940f41 // sete r9b + LONG $0xd0940f41 // sete r8b LONG $0x586e394c // cmp qword [rsi + 88], r13 - LONG $0xd2940f41 // sete r10b + LONG $0xd1940f41 // sete r9b LONG $0x606e394c // cmp qword [rsi + 96], r13 LONG $0xd3940f41 // sete r11b LONG $0x686e394c // cmp qword [rsi + 104], r13 LONG $0xd4940f41 // sete r12b LONG $0x706e394c // cmp qword [rsi + 112], r13 - QUAD $0x000000b02494940f // sete byte [rsp + 176] + LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] LONG $0x786e394c // cmp qword [rsi + 120], r13 WORD $0x940f; BYTE $0xd1 // sete cl LONG $0x80ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 128], r13 - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] + LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] LONG $0x88ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 136], r13 - QUAD $0x000000802494940f // sete byte [rsp + 128] + LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] LONG $0x90ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 144], r13 - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + QUAD $0x000000802494940f // sete byte [rsp + 128] LONG $0x98ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 152], r13 - LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] LONG $0xa0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 160], r13 - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] LONG $0xa8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 168], r13 - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] - LONG $0xb0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 176], r13 LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + LONG $0xb0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 176], r13 + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] LONG $0xb8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 184], r13 LONG $0xd7940f41 // sete r15b LONG $0xc0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 192], r13 - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0xc8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 200], r13 - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] LONG $0xd0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 208], r13 - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] - LONG $0xd8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 216], r13 LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] - LONG $0xe0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 224], r13 + LONG $0xd8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 216], r13 LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] - LONG $0xe8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 232], r13 + LONG $0xe0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 224], r13 LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] - LONG $0xf0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 240], r13 + LONG $0xe8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 232], r13 LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] + LONG $0xf0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 240], r13 + LONG $0x2454940f; BYTE $0x04 // sete byte [rsp + 4] LONG $0xf8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 248], r13 - LONG $0xd0940f41 // sete r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x000000e024bc0240 // add dil, byte [rsp + 224] + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000d024940244 // add r10b, byte [rsp + 208] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0xa0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 160] - QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + QUAD $0x000000c024bc0240 // add dil, byte [rsp + 192] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + QUAD $0x0000008824b48b4c // mov r14, qword [rsp + 136] + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b - QUAD $0x000000b024bcb60f // movzx edi, byte [rsp + 176] + LONG $0x247cb60f; BYTE $0x70 // movzx edi, byte [rsp + 112] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x0000008824b48b4c // mov r14, qword [rsp + 136] - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xd200 // add dl, dl - LONG $0x68245402 // add dl, byte [rsp + 104] - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xc000 // add al, al + LONG $0x50244402 // add al, byte [rsp + 80] + WORD $0xc789 // mov edi, eax + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil WORD $0x8841; BYTE $0x1e // mov byte [r14], bl - LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] + LONG $0x245cb60f; BYTE $0x38 // movzx ebx, byte [rsp + 56] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl LONG $0x014e8841 // mov byte [r14 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0841; BYTE $0xc7 // or r15b, al + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xc000 // add al, al + LONG $0x10244402 // add al, byte [rsp + 16] + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xc808 // or al, cl + LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xca08 // or dl, cl + WORD $0xc208 // or dl, al LONG $0x027e8845 // mov byte [r14 + 2], r15b - LONG $0x03468845 // mov byte [r14 + 3], r8b + LONG $0x03568841 // mov byte [r14 + 3], dl LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 LONG $0x04c68349 // add r14, 4 - QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 - JNE LBB1_168 + QUAD $0x000000a024848348; BYTE $0xff // add qword [rsp + 160], -1 + JNE LBB1_166 QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] QUAD $0x00000098249c8b4c // mov r11, qword [rsp + 152] -LBB1_170: +LBB1_168: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB1_202 + JGE LBB1_199 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 - JNE LBB1_172 + JNE LBB1_170 -LBB1_39: +LBB1_40: WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB1_40 + JMP LBB1_41 -LBB1_174: +LBB1_172: LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 LONG $0xda490f4d // cmovns r11, r10 @@ -4911,18 +5267,21 @@ LBB1_174: WORD $0xe083; BYTE $0xf8 // and eax, -8 LONG $0x02100ff3 // movss xmm0, dword [rdx] WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB1_178 + JE LBB1_176 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB1_176: +LBB1_174: WORD $0x2e0f; BYTE $0x06 // ucomiss xmm0, dword [rsi] LONG $0x04768d48 // lea rsi, [rsi + 4] + WORD $0x9b0f; BYTE $0xd1 // setnp cl WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xca20 // and dl, cl WORD $0xdaf6 // neg dl LONG $0x07788d48 // lea rdi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 + WORD $0x894d; BYTE $0xf7 // mov r15, r14 LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] WORD $0x3044; BYTE $0xca // xor dl, r9b QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] @@ -4935,282 +5294,410 @@ LBB1_176: LONG $0x3e1c8841 // mov byte [r14 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB1_176 + JNE LBB1_174 LONG $0x01c68349 // add r14, 1 -LBB1_178: +LBB1_176: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB1_179 + JL LBB1_177 LONG $0x04fb8349 // cmp r11, 4 - JB LBB1_181 + JB LBB1_179 WORD $0x894c; BYTE $0xd8 // mov rax, r11 LONG $0x07e0c148 // shl rax, 7 WORD $0x0148; BYTE $0xf0 // add rax, rsi WORD $0x3949; BYTE $0xc6 // cmp r14, rax - JAE LBB1_184 + JAE LBB1_182 LONG $0x9e048d4b // lea rax, [r14 + 4*r11] WORD $0x3948; BYTE $0xf0 // cmp rax, rsi - JBE LBB1_184 + JBE LBB1_182 -LBB1_181: +LBB1_179: WORD $0x3145; BYTE $0xc0 // xor r8d, r8d WORD $0x8948; BYTE $0xf3 // mov rbx, rsi WORD $0x894d; BYTE $0xf7 // mov r15, r14 -LBB1_187: - LONG $0x247c894c; BYTE $0x08 // mov qword [rsp + 8], r15 - QUAD $0x000000902494894c // mov qword [rsp + 144], r10 - QUAD $0x000000c0249c894c // mov qword [rsp + 192], r11 - WORD $0x294d; BYTE $0xc3 // sub r11, r8 - QUAD $0x000000e0249c894c // mov qword [rsp + 224], r11 +LBB1_185: + QUAD $0x0000008824bc894c // mov qword [rsp + 136], r15 + QUAD $0x000000902494894c // mov qword [rsp + 144], r10 + QUAD $0x000000f0249c894c // mov qword [rsp + 240], r11 + WORD $0x294d; BYTE $0xc3 // sub r11, r8 + QUAD $0x00000098249c894c // mov qword [rsp + 152], r11 -LBB1_188: +LBB1_186: WORD $0x2e0f; BYTE $0x03 // ucomiss xmm0, dword [rbx] - QUAD $0x000000d02494940f // sete byte [rsp + 208] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + WORD $0x8941; BYTE $0xcd // mov r13d, ecx LONG $0x04432e0f // ucomiss xmm0, dword [rbx + 4] - LONG $0xd0940f41 // sete r8b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xc220 // and dl, al LONG $0x08432e0f // ucomiss xmm0, dword [rbx + 8] - LONG $0xd6940f41 // sete r14b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x10244c88 // mov byte [rsp + 16], cl LONG $0x0c432e0f // ucomiss xmm0, dword [rbx + 12] - LONG $0xd5940f41 // sete r13b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl LONG $0x10432e0f // ucomiss xmm0, dword [rbx + 16] - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x08244c88 // mov byte [rsp + 8], cl LONG $0x14432e0f // ucomiss xmm0, dword [rbx + 20] - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x30244c88 // mov byte [rsp + 48], cl LONG $0x18432e0f // ucomiss xmm0, dword [rbx + 24] - WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl LONG $0x1c432e0f // ucomiss xmm0, dword [rbx + 28] - LONG $0xd3940f41 // sete r11b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x04244c88 // mov byte [rsp + 4], cl LONG $0x20432e0f // ucomiss xmm0, dword [rbx + 32] - QUAD $0x000000b02494940f // sete byte [rsp + 176] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x18244c88 // mov byte [rsp + 24], cl LONG $0x24432e0f // ucomiss xmm0, dword [rbx + 36] - WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x38244c88 // mov byte [rsp + 56], cl LONG $0x28432e0f // ucomiss xmm0, dword [rbx + 40] - LONG $0xd6940f40 // sete sil + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x40244c88 // mov byte [rsp + 64], cl LONG $0x2c432e0f // ucomiss xmm0, dword [rbx + 44] - LONG $0xd7940f40 // sete dil + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x48244c88 // mov byte [rsp + 72], cl LONG $0x30432e0f // ucomiss xmm0, dword [rbx + 48] - LONG $0xd2940f41 // sete r10b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x58244c88 // mov byte [rsp + 88], cl LONG $0x34432e0f // ucomiss xmm0, dword [rbx + 52] - LONG $0xd4940f41 // sete r12b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x68244c88 // mov byte [rsp + 104], cl LONG $0x38432e0f // ucomiss xmm0, dword [rbx + 56] - QUAD $0x000000802494940f // sete byte [rsp + 128] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x80248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 128], cl LONG $0x3c432e0f // ucomiss xmm0, dword [rbx + 60] - LONG $0xd1940f41 // sete r9b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x60244c88 // mov byte [rsp + 96], cl LONG $0x40432e0f // ucomiss xmm0, dword [rbx + 64] - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x50244c88 // mov byte [rsp + 80], cl LONG $0x44432e0f // ucomiss xmm0, dword [rbx + 68] - QUAD $0x000000a02494940f // sete byte [rsp + 160] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd4940f41 // sete r12b + WORD $0x2041; BYTE $0xc4 // and r12b, al LONG $0x48432e0f // ucomiss xmm0, dword [rbx + 72] - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x78244c88 // mov byte [rsp + 120], cl LONG $0x4c432e0f // ucomiss xmm0, dword [rbx + 76] - LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x70244c88 // mov byte [rsp + 112], cl LONG $0x50432e0f // ucomiss xmm0, dword [rbx + 80] - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xc0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 192], cl LONG $0x54432e0f // ucomiss xmm0, dword [rbx + 84] - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xd0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 208], cl LONG $0x58432e0f // ucomiss xmm0, dword [rbx + 88] - LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd6940f41 // sete r14b + WORD $0x2041; BYTE $0xc6 // and r14b, al LONG $0x5c432e0f // ucomiss xmm0, dword [rbx + 92] - LONG $0xd7940f41 // sete r15b + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd0940f41 // sete r8b + WORD $0x2041; BYTE $0xc0 // and r8b, al LONG $0x60432e0f // ucomiss xmm0, dword [rbx + 96] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xb0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 176], cl LONG $0x64432e0f // ucomiss xmm0, dword [rbx + 100] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd3940f41 // sete r11b + WORD $0x2041; BYTE $0xc3 // and r11b, al LONG $0x68432e0f // ucomiss xmm0, dword [rbx + 104] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd2940f41 // sete r10b + WORD $0x2041; BYTE $0xc2 // and r10b, al LONG $0x6c432e0f // ucomiss xmm0, dword [rbx + 108] - LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd1940f41 // sete r9b + WORD $0x2041; BYTE $0xc1 // and r9b, al LONG $0x70432e0f // ucomiss xmm0, dword [rbx + 112] - LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f41 // sete r15b + WORD $0x2041; BYTE $0xc7 // and r15b, al LONG $0x74432e0f // ucomiss xmm0, dword [rbx + 116] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xa0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 160], cl LONG $0x78432e0f // ucomiss xmm0, dword [rbx + 120] - QUAD $0x000000882494940f // sete byte [rsp + 136] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f40 // sete dil + WORD $0x2040; BYTE $0xc7 // and dil, al LONG $0x7c432e0f // ucomiss xmm0, dword [rbx + 124] - WORD $0x940f; BYTE $0xd1 // sete cl - WORD $0x0045; BYTE $0xc0 // add r8b, r8b - QUAD $0x000000d024840244 // add r8b, byte [rsp + 208] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e3c041 // shl r11b, 7 - WORD $0x0841; BYTE $0xc3 // or r11b, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0845; BYTE $0xc6 // or r14b, r8b + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd6940f40 // sete sil + WORD $0x2040; BYTE $0xc6 // and sil, al WORD $0xd200 // add dl, dl - LONG $0xb0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 176] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xf5 // or r13b, r14b - LONG $0x02e6c040 // shl sil, 2 - WORD $0x0840; BYTE $0xd6 // or sil, dl - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0x0844; BYTE $0xea // or dl, r13b - WORD $0x8941; BYTE $0xd0 // mov r8d, edx - LONG $0x03e7c040 // shl dil, 3 - WORD $0x0840; BYTE $0xf7 // or dil, sil - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] + WORD $0x8941; BYTE $0xd5 // mov r13d, edx + LONG $0x2454b60f; BYTE $0x30 // movzx edx, byte [rsp + 48] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0844; BYTE $0xc2 // or dl, r8b - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - QUAD $0x0000008024b4b60f // movzx esi, byte [rsp + 128] - LONG $0x06e6c040 // shl sil, 6 - LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xf1 // or r9b, sil - WORD $0x0841; BYTE $0xd3 // or r11b, dl - WORD $0x0845; BYTE $0xe1 // or r9b, r12b - QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] - WORD $0xc000 // add al, al - LONG $0x68244402 // add al, byte [rsp + 104] - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0xc208 // or dl, al - WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xf2 // or dl, sil - WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xf2 // or dl, sil - WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xf2 // or dl, sil - LONG $0x24748b48; BYTE $0x08 // mov rsi, qword [rsp + 8] - WORD $0x8844; BYTE $0x1e // mov byte [rsi], r11b - LONG $0x247cb60f; BYTE $0x40 // movzx edi, byte [rsp + 64] - LONG $0x06e7c040 // shl dil, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xff // or r15b, dil - LONG $0x014e8844 // mov byte [rsi + 1], r9b - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] - WORD $0xc000 // add al, al - LONG $0x20244402 // add al, byte [rsp + 32] + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0xd008 // or al, dl WORD $0xc289 // mov edx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] + WORD $0xc900 // add cl, cl + LONG $0x18244c02 // add cl, byte [rsp + 24] + LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0xd008 // or al, dl - WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + LONG $0x04244488 // mov byte [rsp + 4], al + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xd008 // or al, dl - WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xd008 // or al, dl - WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0x0844; BYTE $0xe8 // or al, r13b + LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] + WORD $0xe2c0; BYTE $0x04 // shl dl, 4 + WORD $0xca08 // or dl, cl + LONG $0x6cb60f44; WORD $0x6824 // movzx r13d, byte [rsp + 104] + LONG $0x05e5c041 // shl r13b, 5 + QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x0844; BYTE $0xe9 // or cl, r13b + LONG $0x6cb60f44; WORD $0x6024 // movzx r13d, byte [rsp + 96] + LONG $0x07e5c041 // shl r13b, 7 + WORD $0x0841; BYTE $0xcd // or r13b, cl + WORD $0x0045; BYTE $0xe4 // add r12b, r12b + LONG $0x24640244; BYTE $0x50 // add r12b, byte [rsp + 80] + WORD $0x8944; BYTE $0xe1 // mov ecx, r12d + LONG $0x64b60f44; WORD $0x7824 // movzx r12d, byte [rsp + 120] + LONG $0x02e4c041 // shl r12b, 2 + WORD $0x0841; BYTE $0xcc // or r12b, cl + LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] + WORD $0xe1c0; BYTE $0x03 // shl cl, 3 + WORD $0x0844; BYTE $0xe1 // or cl, r12b + WORD $0x8941; BYTE $0xcc // mov r12d, ecx + QUAD $0x000000c0248cb60f // movzx ecx, byte [rsp + 192] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0x0844; BYTE $0xe1 // or cl, r12b + LONG $0x64b60f44; WORD $0x0424 // movzx r12d, byte [rsp + 4] + WORD $0x0841; BYTE $0xc4 // or r12b, al + QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xd008 // or al, dl - QUAD $0x000000882494b60f // movzx edx, byte [rsp + 136] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0xd108 // or cl, dl - WORD $0xc108 // or cl, al - LONG $0x027e8844 // mov byte [rsi + 2], r15b - WORD $0x4e88; BYTE $0x03 // mov byte [rsi + 3], cl + LONG $0x06e6c041 // shl r14b, 6 + WORD $0x0841; BYTE $0xc6 // or r14b, al + WORD $0x0841; BYTE $0xd5 // or r13b, dl + LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xf0 // or r8b, r14b + WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0045; BYTE $0xdb // add r11b, r11b + QUAD $0x000000b0249c0244 // add r11b, byte [rsp + 176] + LONG $0x02e2c041 // shl r10b, 2 + WORD $0x0845; BYTE $0xda // or r10b, r11b + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xd1 // or r9b, r10b + LONG $0x04e7c041 // shl r15b, 4 + WORD $0x0845; BYTE $0xcf // or r15b, r9b + QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] + WORD $0x8844; BYTE $0x20 // mov byte [rax], r12b + QUAD $0x000000a0248cb60f // movzx ecx, byte [rsp + 160] + WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + LONG $0x06e7c040 // shl dil, 6 + WORD $0x0840; BYTE $0xcf // or dil, cl + LONG $0x01688844 // mov byte [rax + 1], r13b + LONG $0x07e6c040 // shl sil, 7 + WORD $0x0840; BYTE $0xfe // or sil, dil + WORD $0x0844; BYTE $0xfe // or sil, r15b + LONG $0x02408844 // mov byte [rax + 2], r8b + LONG $0x03708840 // mov byte [rax + 3], sil LONG $0x80c38148; WORD $0x0000; BYTE $0x00 // add rbx, 128 - LONG $0x04c68348 // add rsi, 4 - LONG $0x24748948; BYTE $0x08 // mov qword [rsp + 8], rsi - QUAD $0x000000e024848348; BYTE $0xff // add qword [rsp + 224], -1 - JNE LBB1_188 - LONG $0x247c8b4c; BYTE $0x08 // mov r15, qword [rsp + 8] + LONG $0x04c08348 // add rax, 4 + QUAD $0x0000008824848948 // mov qword [rsp + 136], rax + QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 + JNE LBB1_186 + QUAD $0x0000008824bc8b4c // mov r15, qword [rsp + 136] QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] - QUAD $0x000000c0249c8b4c // mov r11, qword [rsp + 192] - JMP LBB1_190 + QUAD $0x000000f0249c8b4c // mov r11, qword [rsp + 240] + JMP LBB1_188 LBB1_9: - LONG $0x2474894c; BYTE $0x78 // mov qword [rsp + 120], r14 + LONG $0x2474894c; BYTE $0x58 // mov qword [rsp + 88], r14 -LBB1_92: +LBB1_93: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB1_202 + JGE LBB1_199 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB1_95 + JNE LBB1_96 WORD $0x3145; BYTE $0xc9 // xor r9d, r9d - JMP LBB1_98 + JMP LBB1_99 -LBB1_61: - LONG $0x2474894c; BYTE $0x50 // mov qword [rsp + 80], r14 +LBB1_62: + LONG $0x2474894c; BYTE $0x38 // mov qword [rsp + 56], r14 -LBB1_72: +LBB1_73: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB1_202 + JGE LBB1_199 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB1_75 + JNE LBB1_76 WORD $0x3145; BYTE $0xc9 // xor r9d, r9d - JMP LBB1_78 + JMP LBB1_79 -LBB1_105: +LBB1_106: LONG $0x2474894c; BYTE $0x08 // mov qword [rsp + 8], r14 -LBB1_116: - LONG $0x05e3c149 // shl r11, 5 - WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB1_202 - WORD $0x894d; BYTE $0xd0 // mov r8, r10 - WORD $0x294d; BYTE $0xd8 // sub r8, r11 - WORD $0xf749; BYTE $0xd3 // not r11 - WORD $0x014d; BYTE $0xd3 // add r11, r10 - JNE LBB1_121 - WORD $0x3145; BYTE $0xf6 // xor r14d, r14d - JMP LBB1_119 +LBB1_117: + LONG $0x05e7c149 // shl r15, 5 + WORD $0x394d; BYTE $0xd7 // cmp r15, r10 + JGE LBB1_199 + WORD $0x894d; BYTE $0xd0 // mov r8, r10 + WORD $0x294d; BYTE $0xf8 // sub r8, r15 + WORD $0xf749; BYTE $0xd7 // not r15 + WORD $0x014d; BYTE $0xd7 // add r15, r10 + JE LBB1_119 + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 + WORD $0x3145; BYTE $0xff // xor r15d, r15d + LONG $0x24748b4c; BYTE $0x08 // mov r14, qword [rsp + 8] -LBB1_128: - WORD $0x894d; BYTE $0xf4 // mov r12, r14 +LBB1_123: + WORD $0x8948; BYTE $0xf0 // mov rax, rsi + LONG $0x1e394466 // cmp word [rsi], r11w + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xdaf6 // neg dl + WORD $0x894c; BYTE $0xff // mov rdi, r15 + LONG $0x03efc148 // shr rdi, 3 + LONG $0x14b60f45; BYTE $0x3e // movzx r10d, byte [r14 + rdi] + WORD $0x8944; BYTE $0xf9 // mov ecx, r15d + WORD $0xe180; BYTE $0x06 // and cl, 6 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0x3044; BYTE $0xd2 // xor dl, r10b + WORD $0xd320 // and bl, dl + WORD $0x3044; BYTE $0xd3 // xor bl, r10b + LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x02c78349 // add r15, 2 + LONG $0x5e394466; BYTE $0x02 // cmp word [rsi + 2], r11w + LONG $0x04768d48 // lea rsi, [rsi + 4] + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xdaf6 // neg dl + WORD $0xda30 // xor dl, bl + WORD $0xc980; BYTE $0x01 // or cl, 1 + WORD $0x01b0 // mov al, 1 + WORD $0xe0d2 // shl al, cl + WORD $0xd020 // and al, dl + WORD $0xd830 // xor al, bl + LONG $0x3e048841 // mov byte [r14 + rdi], al + WORD $0x394d; BYTE $0xf9 // cmp r9, r15 + JNE LBB1_123 + JMP LBB1_120 + +LBB1_129: + LONG $0x2474894c; BYTE $0x08 // mov qword [rsp + 8], r14 -LBB1_139: +LBB1_140: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB1_202 + JGE LBB1_199 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB1_144 - WORD $0x3145; BYTE $0xf6 // xor r14d, r14d - JMP LBB1_142 + JNE LBB1_142 -LBB1_179: +LBB1_119: + WORD $0x3145; BYTE $0xff // xor r15d, r15d + JMP LBB1_120 + +LBB1_177: WORD $0x894d; BYTE $0xf7 // mov r15, r14 WORD $0x8948; BYTE $0xf3 // mov rbx, rsi -LBB1_190: +LBB1_188: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB1_202 + JGE LBB1_199 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 - JNE LBB1_195 + JNE LBB1_193 WORD $0xf631 // xor esi, esi - JMP LBB1_193 + JMP LBB1_191 -LBB1_158: +LBB1_156: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d -LBB1_159: +LBB1_157: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d WORD $0x940f; BYTE $0xd0 // sete al WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xdf // mov rdi, r11 LONG $0x03efc148 // shr rdi, 3 + WORD $0x894d; BYTE $0xf7 // mov r15, r14 LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 @@ -5233,21 +5720,21 @@ LBB1_159: WORD $0xda30 // xor dl, bl LONG $0x3e148841 // mov byte [r14 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB1_159 + JNE LBB1_157 LBB1_24: LONG $0x01c0f641 // test r8b, 1 - JE LBB1_202 + JE LBB1_199 WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d - JMP LBB1_201 + JMP LBB1_26 -LBB1_95: +LBB1_96: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xc9 // xor r9d, r9d - LONG $0x24748b4c; BYTE $0x78 // mov r14, qword [rsp + 120] + LONG $0x24748b4c; BYTE $0x58 // mov r14, qword [rsp + 88] -LBB1_96: +LBB1_97: WORD $0x894c; BYTE $0xc8 // mov rax, r9 LONG $0x0e1c3846 // cmp byte [rsi + r9], r11b WORD $0x940f; BYTE $0xd3 // sete bl @@ -5275,27 +5762,27 @@ LBB1_96: WORD $0xd030 // xor al, dl LONG $0x3e048841 // mov byte [r14 + rdi], al WORD $0x394d; BYTE $0xca // cmp r10, r9 - JNE LBB1_96 + JNE LBB1_97 WORD $0x014c; BYTE $0xce // add rsi, r9 -LBB1_98: +LBB1_99: LONG $0x01c0f641 // test r8b, 1 - JE LBB1_202 + JE LBB1_199 WORD $0x3844; BYTE $0x1e // cmp byte [rsi], r11b WORD $0x940f; BYTE $0xd0 // sete al WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xca // mov rdx, r9 LONG $0x03eac148 // shr rdx, 3 - LONG $0x24448b4c; BYTE $0x78 // mov r8, qword [rsp + 120] - JMP LBB1_80 + LONG $0x24448b4c; BYTE $0x58 // mov r8, qword [rsp + 88] + JMP LBB1_81 -LBB1_75: +LBB1_76: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xc9 // xor r9d, r9d - LONG $0x24748b4c; BYTE $0x50 // mov r14, qword [rsp + 80] + LONG $0x24748b4c; BYTE $0x38 // mov r14, qword [rsp + 56] -LBB1_76: +LBB1_77: WORD $0x894c; BYTE $0xc8 // mov rax, r9 LONG $0x0e1c3846 // cmp byte [rsi + r9], r11b WORD $0x940f; BYTE $0xd3 // sete bl @@ -5323,50 +5810,55 @@ LBB1_76: WORD $0xd030 // xor al, dl LONG $0x3e048841 // mov byte [r14 + rdi], al WORD $0x394d; BYTE $0xca // cmp r10, r9 - JNE LBB1_76 + JNE LBB1_77 WORD $0x014c; BYTE $0xce // add rsi, r9 -LBB1_78: +LBB1_79: LONG $0x01c0f641 // test r8b, 1 - JE LBB1_202 + JE LBB1_199 WORD $0x3844; BYTE $0x1e // cmp byte [rsi], r11b WORD $0x940f; BYTE $0xd0 // sete al WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xca // mov rdx, r9 LONG $0x03eac148 // shr rdx, 3 - LONG $0x24448b4c; BYTE $0x50 // mov r8, qword [rsp + 80] + LONG $0x24448b4c; BYTE $0x38 // mov r8, qword [rsp + 56] -LBB1_80: +LBB1_81: LONG $0x103c8a41 // mov dil, byte [r8 + rdx] LONG $0x07e18041 // and r9b, 7 WORD $0x01b3 // mov bl, 1 WORD $0x8944; BYTE $0xc9 // mov ecx, r9d - JMP LBB1_81 + JMP LBB1_82 -LBB1_197: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 +LBB1_195: + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d -LBB1_198: +LBB1_196: LONG $0x062e0f66 // ucomisd xmm0, qword [rsi] + WORD $0x9b0f; BYTE $0xd1 // setnp cl WORD $0x940f; BYTE $0xd0 // sete al + WORD $0xc820 // and al, cl WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xdf // mov rdi, r11 LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] - WORD $0x3044; BYTE $0xc8 // xor al, r9b + WORD $0x894d; BYTE $0xf7 // mov r15, r14 + LONG $0x14b60f45; BYTE $0x3e // movzx r10d, byte [r14 + rdi] WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 WORD $0xe3d2 // shl bl, cl + WORD $0x3044; BYTE $0xd0 // xor al, r10b WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b + WORD $0x3044; BYTE $0xd3 // xor bl, r10b LONG $0x3e1c8841 // mov byte [r14 + rdi], bl LONG $0x02c38349 // add r11, 2 LONG $0x462e0f66; BYTE $0x08 // ucomisd xmm0, qword [rsi + 8] LONG $0x10768d48 // lea rsi, [rsi + 16] + LONG $0xd29b0f41 // setnp r10b WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x2044; BYTE $0xd0 // and al, r10b WORD $0xd8f6 // neg al WORD $0xd830 // xor al, bl WORD $0xc980; BYTE $0x01 // or cl, 1 @@ -5375,26 +5867,42 @@ LBB1_198: WORD $0xc220 // and dl, al WORD $0xda30 // xor dl, bl LONG $0x3e148841 // mov byte [r14 + rdi], dl - WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB1_198 + WORD $0x394d; BYTE $0xd9 // cmp r9, r11 + JNE LBB1_196 -LBB1_199: - LONG $0x01c0f641 // test r8b, 1 - JE LBB1_202 - LONG $0x062e0f66 // ucomisd xmm0, qword [rsi] - JMP LBB1_201 +LBB1_197: + LONG $0x01c0f641 // test r8b, 1 + JE LBB1_199 + LONG $0x062e0f66 // ucomisd xmm0, qword [rsi] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xc220 // and dl, al + WORD $0xdaf6 // neg dl + WORD $0x894c; BYTE $0xd8 // mov rax, r11 + LONG $0x03e8c148 // shr rax, 3 + LONG $0x06348a41 // mov sil, byte [r14 + rax] + LONG $0x07e38041 // and r11b, 7 + WORD $0x01b3 // mov bl, 1 + WORD $0x8944; BYTE $0xd9 // mov ecx, r11d + WORD $0xe3d2 // shl bl, cl + WORD $0x3040; BYTE $0xf2 // xor dl, sil + WORD $0xd320 // and bl, dl + WORD $0x3040; BYTE $0xf3 // xor bl, sil + LONG $0x061c8841 // mov byte [r14 + rax], bl + JMP LBB1_199 -LBB1_172: +LBB1_170: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d -LBB1_173: +LBB1_171: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 WORD $0x940f; BYTE $0xd0 // sete al WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xdf // mov rdi, r11 LONG $0x03efc148 // shr rdi, 3 + WORD $0x894d; BYTE $0xf7 // mov r15, r14 LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 @@ -5417,14 +5925,14 @@ LBB1_173: WORD $0xda30 // xor dl, bl LONG $0x3e148841 // mov byte [r14 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB1_173 + JNE LBB1_171 -LBB1_40: +LBB1_41: LONG $0x01c0f641 // test r8b, 1 - JE LBB1_202 + JE LBB1_199 WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 -LBB1_201: +LBB1_26: WORD $0x940f; BYTE $0xd0 // sete al WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xda // mov rdx, r11 @@ -5438,32 +5946,32 @@ LBB1_201: WORD $0xc320 // and bl, al WORD $0x3040; BYTE $0xf3 // xor bl, sil LONG $0x161c8841 // mov byte [r14 + rdx], bl - JMP LBB1_202 + JMP LBB1_199 -LBB1_121: +LBB1_142: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 - WORD $0x3145; BYTE $0xf6 // xor r14d, r14d - LONG $0x245c8b4c; BYTE $0x08 // mov r11, qword [rsp + 8] + WORD $0x3145; BYTE $0xff // xor r15d, r15d + LONG $0x24748b4c; BYTE $0x08 // mov r14, qword [rsp + 8] -LBB1_122: +LBB1_143: WORD $0x8948; BYTE $0xf0 // mov rax, rsi - LONG $0x2e394466 // cmp word [rsi], r13w + LONG $0x1e394466 // cmp word [rsi], r11w WORD $0x940f; BYTE $0xd2 // sete dl WORD $0xdaf6 // neg dl - WORD $0x894c; BYTE $0xf7 // mov rdi, r14 + WORD $0x894c; BYTE $0xff // mov rdi, r15 LONG $0x03efc148 // shr rdi, 3 - LONG $0x14b60f45; BYTE $0x3b // movzx r10d, byte [r11 + rdi] - WORD $0x8944; BYTE $0xf1 // mov ecx, r14d + LONG $0x14b60f45; BYTE $0x3e // movzx r10d, byte [r14 + rdi] + WORD $0x8944; BYTE $0xf9 // mov ecx, r15d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 WORD $0xe3d2 // shl bl, cl WORD $0x3044; BYTE $0xd2 // xor dl, r10b WORD $0xd320 // and bl, dl WORD $0x3044; BYTE $0xd3 // xor bl, r10b - LONG $0x3b1c8841 // mov byte [r11 + rdi], bl - LONG $0x02c68349 // add r14, 2 - LONG $0x6e394466; BYTE $0x02 // cmp word [rsi + 2], r13w + LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x02c78349 // add r15, 2 + LONG $0x5e394466; BYTE $0x02 // cmp word [rsi + 2], r11w LONG $0x04768d48 // lea rsi, [rsi + 4] WORD $0x940f; BYTE $0xd2 // sete dl WORD $0xdaf6 // neg dl @@ -5473,178 +5981,128 @@ LBB1_122: WORD $0xe0d2 // shl al, cl WORD $0xd020 // and al, dl WORD $0xd830 // xor al, bl - LONG $0x3b048841 // mov byte [r11 + rdi], al - WORD $0x394d; BYTE $0xf1 // cmp r9, r14 - JNE LBB1_122 + LONG $0x3e048841 // mov byte [r14 + rdi], al + WORD $0x394d; BYTE $0xf9 // cmp r9, r15 + JNE LBB1_143 -LBB1_119: +LBB1_120: LONG $0x01c0f641 // test r8b, 1 - JE LBB1_202 - LONG $0x2e394466 // cmp word [rsi], r13w + JE LBB1_199 + LONG $0x1e394466 // cmp word [rsi], r11w WORD $0x940f; BYTE $0xd0 // sete al WORD $0xd8f6 // neg al - WORD $0x894c; BYTE $0xf2 // mov rdx, r14 + WORD $0x894c; BYTE $0xfa // mov rdx, r15 LONG $0x03eac148 // shr rdx, 3 LONG $0x24448b4c; BYTE $0x08 // mov r8, qword [rsp + 8] LONG $0x103c8a41 // mov dil, byte [r8 + rdx] - LONG $0x07e68041 // and r14b, 7 + LONG $0x07e78041 // and r15b, 7 WORD $0x01b3 // mov bl, 1 - WORD $0x8944; BYTE $0xf1 // mov ecx, r14d + WORD $0x8944; BYTE $0xf9 // mov ecx, r15d -LBB1_81: +LBB1_82: WORD $0xe3d2 // shl bl, cl WORD $0x3040; BYTE $0xf8 // xor al, dil WORD $0xc320 // and bl, al WORD $0x3040; BYTE $0xfb // xor bl, dil LONG $0x101c8841 // mov byte [r8 + rdx], bl - JMP LBB1_202 -LBB1_144: +LBB1_199: + MOVQ 304(SP), SP + RET + +LBB1_193: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 - WORD $0x3145; BYTE $0xf6 // xor r14d, r14d - -LBB1_145: - WORD $0x8948; BYTE $0xf0 // mov rax, rsi - LONG $0x2e394466 // cmp word [rsi], r13w - WORD $0x940f; BYTE $0xd2 // sete dl - WORD $0xdaf6 // neg dl - WORD $0x894c; BYTE $0xf7 // mov rdi, r14 - LONG $0x03efc148 // shr rdi, 3 - LONG $0x14b60f45; BYTE $0x3c // movzx r10d, byte [r12 + rdi] - WORD $0x8944; BYTE $0xf1 // mov ecx, r14d - WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b3 // mov bl, 1 - WORD $0xe3d2 // shl bl, cl - WORD $0x3044; BYTE $0xd2 // xor dl, r10b - WORD $0xd320 // and bl, dl - WORD $0x3044; BYTE $0xd3 // xor bl, r10b - LONG $0x3c1c8841 // mov byte [r12 + rdi], bl - LONG $0x02c68349 // add r14, 2 - LONG $0x6e394466; BYTE $0x02 // cmp word [rsi + 2], r13w - LONG $0x04768d48 // lea rsi, [rsi + 4] - WORD $0x940f; BYTE $0xd2 // sete dl - WORD $0xdaf6 // neg dl - WORD $0xda30 // xor dl, bl - WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0xd020 // and al, dl - WORD $0xd830 // xor al, bl - LONG $0x3c048841 // mov byte [r12 + rdi], al - WORD $0x394d; BYTE $0xf1 // cmp r9, r14 - JNE LBB1_145 - -LBB1_142: - LONG $0x01c0f641 // test r8b, 1 - JE LBB1_202 - LONG $0x2e394466 // cmp word [rsi], r13w - WORD $0x940f; BYTE $0xd0 // sete al - WORD $0xd8f6 // neg al - WORD $0x894c; BYTE $0xf2 // mov rdx, r14 - LONG $0x03eac148 // shr rdx, 3 - LONG $0x143c8a41 // mov dil, byte [r12 + rdx] - LONG $0x07e68041 // and r14b, 7 - WORD $0x01b3 // mov bl, 1 - WORD $0x8944; BYTE $0xf1 // mov ecx, r14d - WORD $0xe3d2 // shl bl, cl - WORD $0x3040; BYTE $0xf8 // xor al, dil - WORD $0xc320 // and bl, al - WORD $0x3040; BYTE $0xfb // xor bl, dil - LONG $0x141c8841 // mov byte [r12 + rdx], bl - JMP LBB1_202 - -LBB1_195: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 WORD $0xf631 // xor esi, esi - WORD $0x894d; BYTE $0xfb // mov r11, r15 -LBB1_196: +LBB1_194: WORD $0x2e0f; BYTE $0x03 // ucomiss xmm0, dword [rbx] + WORD $0x9b0f; BYTE $0xd1 // setnp cl WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xca20 // and dl, cl WORD $0xdaf6 // neg dl WORD $0x8948; BYTE $0xf7 // mov rdi, rsi LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3b // movzx r9d, byte [r11 + rdi] - WORD $0x3044; BYTE $0xca // xor dl, r9b + LONG $0x14b60f45; BYTE $0x3f // movzx r10d, byte [r15 + rdi] WORD $0xf189 // mov ecx, esi WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0xd020 // and al, dl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3b048841 // mov byte [r11 + rdi], al + WORD $0xb341; BYTE $0x01 // mov r11b, 1 + WORD $0xd241; BYTE $0xe3 // shl r11b, cl + WORD $0x3044; BYTE $0xd2 // xor dl, r10b + WORD $0x2041; BYTE $0xd3 // and r11b, dl + WORD $0x3045; BYTE $0xd3 // xor r11b, r10b + LONG $0x3f1c8845 // mov byte [r15 + rdi], r11b LONG $0x02c68348 // add rsi, 2 LONG $0x04432e0f // ucomiss xmm0, dword [rbx + 4] LONG $0x085b8d48 // lea rbx, [rbx + 8] - LONG $0xd1940f41 // sete r9b - WORD $0xf641; BYTE $0xd9 // neg r9b - WORD $0x3041; BYTE $0xc1 // xor r9b, al + LONG $0xd29b0f41 // setnp r10b + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0x2044; BYTE $0xd2 // and dl, r10b + WORD $0x894d; BYTE $0xfa // mov r10, r15 + WORD $0xdaf6 // neg dl + WORD $0x3044; BYTE $0xda // xor dl, r11b WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b2 // mov dl, 1 - WORD $0xe2d2 // shl dl, cl - WORD $0x2044; BYTE $0xca // and dl, r9b - WORD $0xc230 // xor dl, al - LONG $0x3b148841 // mov byte [r11 + rdi], dl - WORD $0x3949; BYTE $0xf2 // cmp r10, rsi - JNE LBB1_196 + WORD $0x01b0 // mov al, 1 + WORD $0xe0d2 // shl al, cl + WORD $0xd020 // and al, dl + WORD $0x3044; BYTE $0xd8 // xor al, r11b + LONG $0x3f048841 // mov byte [r15 + rdi], al + WORD $0x3949; BYTE $0xf1 // cmp r9, rsi + JNE LBB1_194 -LBB1_193: +LBB1_191: LONG $0x01c0f641 // test r8b, 1 - JE LBB1_202 + JE LBB1_199 WORD $0x2e0f; BYTE $0x03 // ucomiss xmm0, dword [rbx] - WORD $0x940f; BYTE $0xd0 // sete al - WORD $0xd8f6 // neg al - WORD $0x8948; BYTE $0xf2 // mov rdx, rsi - LONG $0x03eac148 // shr rdx, 3 - WORD $0x894d; BYTE $0xfe // mov r14, r15 - LONG $0x173c8a41 // mov dil, byte [r15 + rdx] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xc220 // and dl, al + WORD $0xdaf6 // neg dl + WORD $0x8948; BYTE $0xf0 // mov rax, rsi + LONG $0x03e8c148 // shr rax, 3 + LONG $0x073c8a41 // mov dil, byte [r15 + rax] LONG $0x07e68040 // and sil, 7 WORD $0x01b3 // mov bl, 1 WORD $0xf189 // mov ecx, esi WORD $0xe3d2 // shl bl, cl - WORD $0x3040; BYTE $0xf8 // xor al, dil - WORD $0xc320 // and bl, al + WORD $0x3040; BYTE $0xfa // xor dl, dil + WORD $0xd320 // and bl, dl WORD $0x3040; BYTE $0xfb // xor bl, dil - LONG $0x171c8841 // mov byte [r15 + rdx], bl - -LBB1_202: - MOVQ 320(SP), SP - RET + LONG $0x071c8841 // mov byte [r15 + rax], bl + JMP LBB1_199 -LBB1_86: +LBB1_87: LONG $0xf0e78349 // and r15, -16 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi QUAD $0x0000010824848948 // mov qword [rsp + 264], rax - QUAD $0x000000f824bc894c // mov qword [rsp + 248], r15 + QUAD $0x000000e824bc894c // mov qword [rsp + 232], r15 LONG $0xbe048d4b // lea rax, [r14 + 4*r15] - LONG $0x24448948; BYTE $0x78 // mov qword [rsp + 120], rax + LONG $0x24448948; BYTE $0x58 // mov qword [rsp + 88], rax LONG $0xc3b60f41 // movzx eax, r11b LONG $0xc86e0f66 // movd xmm1, eax LONG $0xc0ef0f66 // pxor xmm0, xmm0 LONG $0x00380f66; BYTE $0xc8 // pshufb xmm1, xmm0 - QUAD $0x0000d0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 208], xmm1 + QUAD $0x0000c0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 192], xmm1 WORD $0xc031 // xor eax, eax QUAD $0x0000008824b4894c // mov qword [rsp + 136], r14 -LBB1_87: +LBB1_88: WORD $0x8948; BYTE $0xc7 // mov rdi, rax QUAD $0x0000009824848948 // mov qword [rsp + 152], rax LONG $0x05e7c148 // shl rdi, 5 WORD $0x8949; BYTE $0xfb // mov r11, rdi - WORD $0x8949; BYTE $0xfe // mov r14, rdi - WORD $0x8948; BYTE $0xfb // mov rbx, rdi WORD $0x8949; BYTE $0xff // mov r15, rdi + WORD $0x8948; BYTE $0xfb // mov rbx, rdi + WORD $0x8949; BYTE $0xfc // mov r12, rdi WORD $0x8949; BYTE $0xfa // mov r10, rdi + WORD $0x8949; BYTE $0xfe // mov r14, rdi WORD $0x8949; BYTE $0xf8 // mov r8, rdi - WORD $0x8949; BYTE $0xfc // mov r12, rdi WORD $0x8949; BYTE $0xf9 // mov r9, rdi + WORD $0x8948; BYTE $0xf8 // mov rax, rdi WORD $0x8948; BYTE $0xfa // mov rdx, rdi - LONG $0x247c8948; BYTE $0x58 // mov qword [rsp + 88], rdi - LONG $0x247c8948; BYTE $0x38 // mov qword [rsp + 56], rdi + LONG $0x247c8948; BYTE $0x68 // mov qword [rsp + 104], rdi LONG $0x3e0cb60f // movzx ecx, byte [rsi + rdi] LONG $0x6e0f4466; BYTE $0xf9 // movd xmm15, ecx LONG $0x3e4cb60f; BYTE $0x01 // movzx ecx, byte [rsi + rdi + 1] @@ -5661,7 +6119,7 @@ LBB1_87: LONG $0xd96e0f66 // movd xmm3, ecx LONG $0x3e4cb60f; BYTE $0x07 // movzx ecx, byte [rsi + rdi + 7] LONG $0xc16e0f66 // movd xmm0, ecx - QUAD $0x0000e024847f0f66; BYTE $0x00 // movdqa oword [rsp + 224], xmm0 + QUAD $0x0000b024847f0f66; BYTE $0x00 // movdqa oword [rsp + 176], xmm0 LONG $0x3e4cb60f; BYTE $0x08 // movzx ecx, byte [rsi + rdi + 8] LONG $0xc16e0f66 // movd xmm0, ecx QUAD $0x00011024847f0f66; BYTE $0x00 // movdqa oword [rsp + 272], xmm0 @@ -5669,7 +6127,7 @@ LBB1_87: LONG $0x6e0f4466; BYTE $0xd1 // movd xmm10, ecx LONG $0x3e4cb60f; BYTE $0x0a // movzx ecx, byte [rsi + rdi + 10] LONG $0xc16e0f66 // movd xmm0, ecx - QUAD $0x0000c024847f0f66; BYTE $0x00 // movdqa oword [rsp + 192], xmm0 + QUAD $0x0000a024847f0f66; BYTE $0x00 // movdqa oword [rsp + 160], xmm0 LONG $0x3e4cb60f; BYTE $0x0b // movzx ecx, byte [rsi + rdi + 11] LONG $0x6e0f4466; BYTE $0xd9 // movd xmm11, ecx LONG $0x3e4cb60f; BYTE $0x0c // movzx ecx, byte [rsi + rdi + 12] @@ -5678,172 +6136,170 @@ LBB1_87: LONG $0x6e0f4466; BYTE $0xe1 // movd xmm12, ecx LONG $0x3e4cb60f; BYTE $0x0e // movzx ecx, byte [rsi + rdi + 14] LONG $0xc16e0f66 // movd xmm0, ecx - QUAD $0x00012024847f0f66; BYTE $0x00 // movdqa oword [rsp + 288], xmm0 - LONG $0x247c8948; BYTE $0x20 // mov qword [rsp + 32], rdi + QUAD $0x0000f024847f0f66; BYTE $0x00 // movdqa oword [rsp + 240], xmm0 + LONG $0x247c8948; BYTE $0x28 // mov qword [rsp + 40], rdi WORD $0x8949; BYTE $0xfd // mov r13, rdi LONG $0x20cd8349 // or r13, 32 - LONG $0x246c894c; BYTE $0x28 // mov qword [rsp + 40], r13 + LONG $0x246c894c; BYTE $0x08 // mov qword [rsp + 8], r13 WORD $0x8948; BYTE $0xf9 // mov rcx, rdi LONG $0x40c98348 // or rcx, 64 - LONG $0x244c8948; BYTE $0x40 // mov qword [rsp + 64], rcx + LONG $0x244c8948; BYTE $0x50 // mov qword [rsp + 80], rcx LONG $0x60cb8349 // or r11, 96 LONG $0x80cb8148; WORD $0x0000; BYTE $0x00 // or rbx, 128 - LONG $0xa0ce8149; WORD $0x0000; BYTE $0x00 // or r14, 160 - LONG $0xc0cf8149; WORD $0x0000; BYTE $0x00 // or r15, 192 + LONG $0xa0cf8149; WORD $0x0000; BYTE $0x00 // or r15, 160 + LONG $0xc0cc8149; WORD $0x0000; BYTE $0x00 // or r12, 192 LONG $0xe0ca8149; WORD $0x0000; BYTE $0x00 // or r10, 224 - LONG $0x00cc8149; WORD $0x0001; BYTE $0x00 // or r12, 256 + LONG $0x00ce8149; WORD $0x0001; BYTE $0x00 // or r14, 256 LONG $0x20c98149; WORD $0x0001; BYTE $0x00 // or r9, 288 - QUAD $0x00000080248c894c // mov qword [rsp + 128], r9 - LONG $0x40ca8148; WORD $0x0001; BYTE $0x00 // or rdx, 320 - LONG $0x24548948; BYTE $0x30 // mov qword [rsp + 48], rdx - LONG $0x24548b48; BYTE $0x58 // mov rdx, qword [rsp + 88] + LONG $0x244c894c; BYTE $0x78 // mov qword [rsp + 120], r9 + LONG $0x01400d48; WORD $0x0000 // or rax, 320 + LONG $0x24448948; BYTE $0x10 // mov qword [rsp + 16], rax LONG $0x60ca8148; WORD $0x0001; BYTE $0x00 // or rdx, 352 - LONG $0x24548948; BYTE $0x58 // mov qword [rsp + 88], rdx - LONG $0x24448b4c; BYTE $0x38 // mov r8, qword [rsp + 56] + QUAD $0x000000d024948948 // mov qword [rsp + 208], rdx + LONG $0x24448b4c; BYTE $0x68 // mov r8, qword [rsp + 104] LONG $0x80c88149; WORD $0x0001; BYTE $0x00 // or r8, 384 WORD $0x8948; BYTE $0xf8 // mov rax, rdi LONG $0x01a00d48; WORD $0x0000 // or rax, 416 - LONG $0x24448948; BYTE $0x70 // mov qword [rsp + 112], rax + LONG $0x24448948; BYTE $0x18 // mov qword [rsp + 24], rax WORD $0x8948; BYTE $0xf8 // mov rax, rdi LONG $0x01c00d48; WORD $0x0000 // or rax, 448 - LONG $0x24448948; BYTE $0x18 // mov qword [rsp + 24], rax + LONG $0x24448948; BYTE $0x48 // mov qword [rsp + 72], rax WORD $0x8948; BYTE $0xf8 // mov rax, rdi LONG $0x01e00d48; WORD $0x0000 // or rax, 480 - LONG $0x24448948; BYTE $0x10 // mov qword [rsp + 16], rax QUAD $0x012e3c203a0f4666 // pinsrb xmm15, byte [rsi + r13], 1 QUAD $0x020e3c203a0f4466 // pinsrb xmm15, byte [rsi + rcx], 2 - LONG $0x245c894c; BYTE $0x68 // mov qword [rsp + 104], r11 QUAD $0x031e3c203a0f4666 // pinsrb xmm15, byte [rsi + r11], 3 - LONG $0x245c8948; BYTE $0x50 // mov qword [rsp + 80], rbx + LONG $0x245c8948; BYTE $0x30 // mov qword [rsp + 48], rbx QUAD $0x041e3c203a0f4466 // pinsrb xmm15, byte [rsi + rbx], 4 - LONG $0x2474894c; BYTE $0x60 // mov qword [rsp + 96], r14 - QUAD $0x05363c203a0f4666 // pinsrb xmm15, byte [rsi + r14], 5 - QUAD $0x063e3c203a0f4666 // pinsrb xmm15, byte [rsi + r15], 6 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 + QUAD $0x053e3c203a0f4666 // pinsrb xmm15, byte [rsi + r15], 5 + QUAD $0x06263c203a0f4666 // pinsrb xmm15, byte [rsi + r12], 6 WORD $0x894c; BYTE $0xd7 // mov rdi, r10 + QUAD $0x000000802494894c // mov qword [rsp + 128], r10 QUAD $0x07163c203a0f4666 // pinsrb xmm15, byte [rsi + r10], 7 - QUAD $0x08263c203a0f4666 // pinsrb xmm15, byte [rsi + r12], 8 + WORD $0x894d; BYTE $0xf2 // mov r10, r14 + QUAD $0x08363c203a0f4666 // pinsrb xmm15, byte [rsi + r14], 8 QUAD $0x090e3c203a0f4666 // pinsrb xmm15, byte [rsi + r9], 9 - LONG $0x246c8b4c; BYTE $0x30 // mov r13, qword [rsp + 48] + LONG $0x246c8b4c; BYTE $0x10 // mov r13, qword [rsp + 16] QUAD $0x0a2e3c203a0f4666 // pinsrb xmm15, byte [rsi + r13], 10 QUAD $0x0b163c203a0f4466 // pinsrb xmm15, byte [rsi + rdx], 11 QUAD $0x0c063c203a0f4666 // pinsrb xmm15, byte [rsi + r8], 12 - LONG $0x244c8b4c; BYTE $0x70 // mov r9, qword [rsp + 112] - QUAD $0x0d0e3c203a0f4666 // pinsrb xmm15, byte [rsi + r9], 13 - LONG $0x244c8b48; BYTE $0x18 // mov rcx, qword [rsp + 24] - QUAD $0x0e0e3c203a0f4466 // pinsrb xmm15, byte [rsi + rcx], 14 + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + QUAD $0x0d363c203a0f4666 // pinsrb xmm15, byte [rsi + r14], 13 + LONG $0x244c8b4c; BYTE $0x48 // mov r9, qword [rsp + 72] + QUAD $0x0e0e3c203a0f4666 // pinsrb xmm15, byte [rsi + r9], 14 QUAD $0x0f063c203a0f4466 // pinsrb xmm15, byte [rsi + rax], 15 - LONG $0x24548b4c; BYTE $0x28 // mov r10, qword [rsp + 40] - QUAD $0x01166c203a0f4266; BYTE $0x01 // pinsrb xmm5, byte [rsi + r10 + 1], 1 - LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] + LONG $0x244c8b48; BYTE $0x08 // mov rcx, qword [rsp + 8] + QUAD $0x01010e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 1], 1 + LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] QUAD $0x02010e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 1], 2 QUAD $0x011e6c203a0f4266; BYTE $0x03 // pinsrb xmm5, byte [rsi + r11 + 1], 3 + WORD $0x894c; BYTE $0xd9 // mov rcx, r11 QUAD $0x04011e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 1], 4 - QUAD $0x01366c203a0f4266; BYTE $0x05 // pinsrb xmm5, byte [rsi + r14 + 1], 5 - QUAD $0x013e6c203a0f4266; BYTE $0x06 // pinsrb xmm5, byte [rsi + r15 + 1], 6 - QUAD $0x000000b024bc894c // mov qword [rsp + 176], r15 + QUAD $0x013e6c203a0f4266; BYTE $0x05 // pinsrb xmm5, byte [rsi + r15 + 1], 5 + QUAD $0x01266c203a0f4266; BYTE $0x06 // pinsrb xmm5, byte [rsi + r12 + 1], 6 + LONG $0x2464894c; BYTE $0x70 // mov qword [rsp + 112], r12 QUAD $0x07013e6c203a0f66 // pinsrb xmm5, byte [rsi + rdi + 1], 7 - WORD $0x8949; BYTE $0xfe // mov r14, rdi - QUAD $0x000000a024bc8948 // mov qword [rsp + 160], rdi - QUAD $0x01266c203a0f4266; BYTE $0x08 // pinsrb xmm5, byte [rsi + r12 + 1], 8 - WORD $0x894c; BYTE $0xe3 // mov rbx, r12 - LONG $0x2464894c; BYTE $0x48 // mov qword [rsp + 72], r12 - QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] - QUAD $0x09010e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 1], 9 + QUAD $0x01166c203a0f4266; BYTE $0x08 // pinsrb xmm5, byte [rsi + r10 + 1], 8 + WORD $0x894c; BYTE $0xd3 // mov rbx, r10 + LONG $0x2454894c; BYTE $0x38 // mov qword [rsp + 56], r10 + LONG $0x247c8b4c; BYTE $0x78 // mov r15, qword [rsp + 120] + QUAD $0x013e6c203a0f4266; BYTE $0x09 // pinsrb xmm5, byte [rsi + r15 + 1], 9 QUAD $0x012e6c203a0f4266; BYTE $0x0a // pinsrb xmm5, byte [rsi + r13 + 1], 10 QUAD $0x0b01166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 1], 11 QUAD $0x01066c203a0f4266; BYTE $0x0c // pinsrb xmm5, byte [rsi + r8 + 1], 12 WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0x2444894c; BYTE $0x38 // mov qword [rsp + 56], r8 - QUAD $0x010e6c203a0f4266; BYTE $0x0d // pinsrb xmm5, byte [rsi + r9 + 1], 13 - LONG $0x24648b4c; BYTE $0x18 // mov r12, qword [rsp + 24] - QUAD $0x01266c203a0f4266; BYTE $0x0e // pinsrb xmm5, byte [rsi + r12 + 1], 14 + LONG $0x2444894c; BYTE $0x68 // mov qword [rsp + 104], r8 + QUAD $0x01366c203a0f4266; BYTE $0x0d // pinsrb xmm5, byte [rsi + r14 + 1], 13 + QUAD $0x010e6c203a0f4266; BYTE $0x0e // pinsrb xmm5, byte [rsi + r9 + 1], 14 + WORD $0x894d; BYTE $0xce // mov r14, r9 QUAD $0x0f01066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 1], 15 - QUAD $0x00d0248c6f0f4466; WORD $0x0000 // movdqa xmm9, oword [rsp + 208] + WORD $0x8949; BYTE $0xc1 // mov r9, rax + QUAD $0x00c0248c6f0f4466; WORD $0x0000 // movdqa xmm9, oword [rsp + 192] LONG $0x740f4166; BYTE $0xe9 // pcmpeqb xmm5, xmm9 LONG $0xfd6f0f66 // movdqa xmm7, xmm5 QUAD $0x000000a0a56f0f66 // movdqa xmm4, oword 160[rbp] /* [rip + .LCPI1_10] */ LONG $0xfcdb0f66 // pand xmm7, xmm4 LONG $0xfdf80f66 // psubb xmm7, xmm5 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - LONG $0x0654b60f; BYTE $0x0f // movzx edx, byte [rsi + rax + 15] + LONG $0x24448b4c; BYTE $0x28 // mov r8, qword [rsp + 40] + LONG $0x54b60f42; WORD $0x0f06 // movzx edx, byte [rsi + r8 + 15] LONG $0x6e0f4466; BYTE $0xf2 // movd xmm14, edx LONG $0x740f4566; BYTE $0xf9 // pcmpeqb xmm15, xmm9 - LONG $0x24448b4c; BYTE $0x28 // mov r8, qword [rsp + 40] - QUAD $0x020674203a0f4266; BYTE $0x01 // pinsrb xmm6, byte [rsi + r8 + 2], 1 - LONG $0x245c8b4c; BYTE $0x40 // mov r11, qword [rsp + 64] - QUAD $0x021e74203a0f4266; BYTE $0x02 // pinsrb xmm6, byte [rsi + r11 + 2], 2 - LONG $0x246c8b4c; BYTE $0x68 // mov r13, qword [rsp + 104] - QUAD $0x022e74203a0f4266; BYTE $0x03 // pinsrb xmm6, byte [rsi + r13 + 2], 3 - LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] + LONG $0x245c8b4c; BYTE $0x08 // mov r11, qword [rsp + 8] + QUAD $0x021e74203a0f4266; BYTE $0x01 // pinsrb xmm6, byte [rsi + r11 + 2], 1 + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x02020674203a0f66 // pinsrb xmm6, byte [rsi + rax + 2], 2 + WORD $0x8949; BYTE $0xcd // mov r13, rcx + QUAD $0x03020e74203a0f66 // pinsrb xmm6, byte [rsi + rcx + 2], 3 + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] QUAD $0x04020e74203a0f66 // pinsrb xmm6, byte [rsi + rcx + 2], 4 - LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] + LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] QUAD $0x05023e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 2], 5 - QUAD $0x023e74203a0f4266; BYTE $0x06 // pinsrb xmm6, byte [rsi + r15 + 2], 6 - QUAD $0x023674203a0f4266; BYTE $0x07 // pinsrb xmm6, byte [rsi + r14 + 2], 7 + QUAD $0x022674203a0f4266; BYTE $0x06 // pinsrb xmm6, byte [rsi + r12 + 2], 6 + QUAD $0x0000008024948b48 // mov rdx, qword [rsp + 128] + QUAD $0x07021674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 2], 7 QUAD $0x08021e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 2], 8 - QUAD $0x00000080249c8b48 // mov rbx, qword [rsp + 128] - QUAD $0x09021e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 2], 9 - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - QUAD $0x023674203a0f4266; BYTE $0x0a // pinsrb xmm6, byte [rsi + r14 + 2], 10 - LONG $0x247c8b4c; BYTE $0x58 // mov r15, qword [rsp + 88] - QUAD $0x023e74203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rsi + r15 + 2], 11 + WORD $0x894c; BYTE $0xfb // mov rbx, r15 + QUAD $0x023e74203a0f4266; BYTE $0x09 // pinsrb xmm6, byte [rsi + r15 + 2], 9 + LONG $0x247c8b4c; BYTE $0x10 // mov r15, qword [rsp + 16] + QUAD $0x023e74203a0f4266; BYTE $0x0a // pinsrb xmm6, byte [rsi + r15 + 2], 10 + QUAD $0x000000d024a48b4c // mov r12, qword [rsp + 208] + QUAD $0x022674203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rsi + r12 + 2], 11 QUAD $0x021674203a0f4266; BYTE $0x0c // pinsrb xmm6, byte [rsi + r10 + 2], 12 - WORD $0x894d; BYTE $0xca // mov r10, r9 - QUAD $0x020e74203a0f4266; BYTE $0x0d // pinsrb xmm6, byte [rsi + r9 + 2], 13 - QUAD $0x022674203a0f4266; BYTE $0x0e // pinsrb xmm6, byte [rsi + r12 + 2], 14 - LONG $0x244c8b4c; BYTE $0x10 // mov r9, qword [rsp + 16] + LONG $0x24548b4c; BYTE $0x18 // mov r10, qword [rsp + 24] + QUAD $0x021674203a0f4266; BYTE $0x0d // pinsrb xmm6, byte [rsi + r10 + 2], 13 + QUAD $0x023674203a0f4266; BYTE $0x0e // pinsrb xmm6, byte [rsi + r14 + 2], 14 + LONG $0x244c894c; BYTE $0x40 // mov qword [rsp + 64], r9 QUAD $0x020e74203a0f4266; BYTE $0x0f // pinsrb xmm6, byte [rsi + r9 + 2], 15 LONG $0xdb0f4466; BYTE $0xfc // pand xmm15, xmm4 LONG $0x740f4166; BYTE $0xf1 // pcmpeqb xmm6, xmm9 QUAD $0x000000b0856f0f66 // movdqa xmm0, oword 176[rbp] /* [rip + .LCPI1_11] */ LONG $0xf0db0f66 // pand xmm6, xmm0 LONG $0xeb0f4166; BYTE $0xf7 // por xmm6, xmm15 - LONG $0x0654b60f; BYTE $0x10 // movzx edx, byte [rsi + rax + 16] + LONG $0x54b60f42; WORD $0x1006 // movzx edx, byte [rsi + r8 + 16] LONG $0x6e0f4466; BYTE $0xfa // movd xmm15, edx - WORD $0x894c; BYTE $0xc2 // mov rdx, r8 - QUAD $0x030654203a0f4266; BYTE $0x01 // pinsrb xmm2, byte [rsi + r8 + 3], 1 - WORD $0x894c; BYTE $0xd8 // mov rax, r11 - QUAD $0x031e54203a0f4266; BYTE $0x02 // pinsrb xmm2, byte [rsi + r11 + 3], 2 + WORD $0x894c; BYTE $0xda // mov rdx, r11 + QUAD $0x031e54203a0f4266; BYTE $0x01 // pinsrb xmm2, byte [rsi + r11 + 3], 1 + QUAD $0x02030654203a0f66 // pinsrb xmm2, byte [rsi + rax + 3], 2 QUAD $0x032e54203a0f4266; BYTE $0x03 // pinsrb xmm2, byte [rsi + r13 + 3], 3 QUAD $0x04030e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 3], 4 WORD $0x8949; BYTE $0xcb // mov r11, rcx QUAD $0x05033e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 3], 5 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] + LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] QUAD $0x06030e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 3], 6 - QUAD $0x000000a024bc8b48 // mov rdi, qword [rsp + 160] + QUAD $0x0000008024bc8b48 // mov rdi, qword [rsp + 128] QUAD $0x07033e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 3], 7 - LONG $0x24448b4c; BYTE $0x48 // mov r8, qword [rsp + 72] + LONG $0x24448b4c; BYTE $0x38 // mov r8, qword [rsp + 56] QUAD $0x030654203a0f4266; BYTE $0x08 // pinsrb xmm2, byte [rsi + r8 + 3], 8 QUAD $0x09031e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 3], 9 - QUAD $0x033654203a0f4266; BYTE $0x0a // pinsrb xmm2, byte [rsi + r14 + 3], 10 - WORD $0x894d; BYTE $0xfe // mov r14, r15 - QUAD $0x033e54203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rsi + r15 + 3], 11 - LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] - QUAD $0x033e54203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rsi + r15 + 3], 12 + QUAD $0x033e54203a0f4266; BYTE $0x0a // pinsrb xmm2, byte [rsi + r15 + 3], 10 + WORD $0x894d; BYTE $0xe7 // mov r15, r12 + QUAD $0x032654203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rsi + r12 + 3], 11 + LONG $0x24648b4c; BYTE $0x68 // mov r12, qword [rsp + 104] + QUAD $0x032654203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rsi + r12 + 3], 12 QUAD $0x031654203a0f4266; BYTE $0x0d // pinsrb xmm2, byte [rsi + r10 + 3], 13 - QUAD $0x032654203a0f4266; BYTE $0x0e // pinsrb xmm2, byte [rsi + r12 + 3], 14 + QUAD $0x033654203a0f4266; BYTE $0x0e // pinsrb xmm2, byte [rsi + r14 + 3], 14 QUAD $0x030e54203a0f4266; BYTE $0x0f // pinsrb xmm2, byte [rsi + r9 + 3], 15 QUAD $0x0104164c203a0f66 // pinsrb xmm1, byte [rsi + rdx + 4], 1 QUAD $0x0204064c203a0f66 // pinsrb xmm1, byte [rsi + rax + 4], 2 QUAD $0x042e4c203a0f4266; BYTE $0x03 // pinsrb xmm1, byte [rsi + r13 + 4], 3 QUAD $0x041e4c203a0f4266; BYTE $0x04 // pinsrb xmm1, byte [rsi + r11 + 4], 4 - LONG $0x245c8b4c; BYTE $0x60 // mov r11, qword [rsp + 96] + LONG $0x245c8b4c; BYTE $0x20 // mov r11, qword [rsp + 32] QUAD $0x041e4c203a0f4266; BYTE $0x05 // pinsrb xmm1, byte [rsi + r11 + 4], 5 QUAD $0x06040e4c203a0f66 // pinsrb xmm1, byte [rsi + rcx + 4], 6 QUAD $0x07043e4c203a0f66 // pinsrb xmm1, byte [rsi + rdi + 4], 7 QUAD $0x04064c203a0f4266; BYTE $0x08 // pinsrb xmm1, byte [rsi + r8 + 4], 8 QUAD $0x09041e4c203a0f66 // pinsrb xmm1, byte [rsi + rbx + 4], 9 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] + LONG $0x244c8b48; BYTE $0x10 // mov rcx, qword [rsp + 16] QUAD $0x0a040e4c203a0f66 // pinsrb xmm1, byte [rsi + rcx + 4], 10 - QUAD $0x04364c203a0f4266; BYTE $0x0b // pinsrb xmm1, byte [rsi + r14 + 4], 11 - QUAD $0x043e4c203a0f4266; BYTE $0x0c // pinsrb xmm1, byte [rsi + r15 + 4], 12 + QUAD $0x043e4c203a0f4266; BYTE $0x0b // pinsrb xmm1, byte [rsi + r15 + 4], 11 + QUAD $0x04264c203a0f4266; BYTE $0x0c // pinsrb xmm1, byte [rsi + r12 + 4], 12 QUAD $0x04164c203a0f4266; BYTE $0x0d // pinsrb xmm1, byte [rsi + r10 + 4], 13 - WORD $0x894d; BYTE $0xd7 // mov r15, r10 - QUAD $0x04264c203a0f4266; BYTE $0x0e // pinsrb xmm1, byte [rsi + r12 + 4], 14 - WORD $0x894d; BYTE $0xe2 // mov r10, r12 + QUAD $0x04364c203a0f4266; BYTE $0x0e // pinsrb xmm1, byte [rsi + r14 + 4], 14 + WORD $0x894d; BYTE $0xf0 // mov r8, r14 QUAD $0x040e4c203a0f4266; BYTE $0x0f // pinsrb xmm1, byte [rsi + r9 + 4], 15 LONG $0xf7eb0f66 // por xmm6, xmm7 - LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] + LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] LONG $0x3e54b60f; BYTE $0x11 // movzx edx, byte [rsi + rdi + 17] LONG $0xc26e0f66 // movd xmm0, edx LONG $0x740f4166; BYTE $0xd1 // pcmpeqb xmm2, xmm9 @@ -5855,34 +6311,35 @@ LBB1_87: LONG $0xcaeb0f66 // por xmm1, xmm2 LONG $0x3e54b60f; BYTE $0x12 // movzx edx, byte [rsi + rdi + 18] LONG $0xea6e0f66 // movd xmm5, edx - LONG $0x244c8b4c; BYTE $0x28 // mov r9, qword [rsp + 40] + LONG $0x244c8b4c; BYTE $0x08 // mov r9, qword [rsp + 8] QUAD $0x050e44203a0f4666; BYTE $0x01 // pinsrb xmm8, byte [rsi + r9 + 5], 1 QUAD $0x050644203a0f4466; BYTE $0x02 // pinsrb xmm8, byte [rsi + rax + 5], 2 QUAD $0x052e44203a0f4666; BYTE $0x03 // pinsrb xmm8, byte [rsi + r13 + 5], 3 - LONG $0x24548b48; BYTE $0x50 // mov rdx, qword [rsp + 80] + LONG $0x246c894c; BYTE $0x60 // mov qword [rsp + 96], r13 + LONG $0x24548b48; BYTE $0x30 // mov rdx, qword [rsp + 48] QUAD $0x051644203a0f4466; BYTE $0x04 // pinsrb xmm8, byte [rsi + rdx + 5], 4 QUAD $0x051e44203a0f4666; BYTE $0x05 // pinsrb xmm8, byte [rsi + r11 + 5], 5 - QUAD $0x000000b024bc8b48 // mov rdi, qword [rsp + 176] + LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] QUAD $0x053e44203a0f4466; BYTE $0x06 // pinsrb xmm8, byte [rsi + rdi + 5], 6 - QUAD $0x000000a024848b4c // mov r8, qword [rsp + 160] - QUAD $0x050644203a0f4666; BYTE $0x07 // pinsrb xmm8, byte [rsi + r8 + 5], 7 - LONG $0x24548b48; BYTE $0x48 // mov rdx, qword [rsp + 72] + QUAD $0x0000008024a48b4c // mov r12, qword [rsp + 128] + QUAD $0x052644203a0f4666; BYTE $0x07 // pinsrb xmm8, byte [rsi + r12 + 5], 7 + LONG $0x24548b48; BYTE $0x38 // mov rdx, qword [rsp + 56] QUAD $0x051644203a0f4466; BYTE $0x08 // pinsrb xmm8, byte [rsi + rdx + 5], 8 QUAD $0x051e44203a0f4466; BYTE $0x09 // pinsrb xmm8, byte [rsi + rbx + 5], 9 QUAD $0x050e44203a0f4466; BYTE $0x0a // pinsrb xmm8, byte [rsi + rcx + 5], 10 - QUAD $0x053644203a0f4666; BYTE $0x0b // pinsrb xmm8, byte [rsi + r14 + 5], 11 - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] + QUAD $0x053e44203a0f4666; BYTE $0x0b // pinsrb xmm8, byte [rsi + r15 + 5], 11 + LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] QUAD $0x050e44203a0f4466; BYTE $0x0c // pinsrb xmm8, byte [rsi + rcx + 5], 12 - QUAD $0x053e44203a0f4666; BYTE $0x0d // pinsrb xmm8, byte [rsi + r15 + 5], 13 - WORD $0x894d; BYTE $0xfc // mov r12, r15 - QUAD $0x051644203a0f4666; BYTE $0x0e // pinsrb xmm8, byte [rsi + r10 + 5], 14 - LONG $0x24548b4c; BYTE $0x10 // mov r10, qword [rsp + 16] + QUAD $0x051644203a0f4666; BYTE $0x0d // pinsrb xmm8, byte [rsi + r10 + 5], 13 + WORD $0x894d; BYTE $0xd6 // mov r14, r10 + QUAD $0x050644203a0f4666; BYTE $0x0e // pinsrb xmm8, byte [rsi + r8 + 5], 14 + LONG $0x24548b4c; BYTE $0x40 // mov r10, qword [rsp + 64] QUAD $0x051644203a0f4666; BYTE $0x0f // pinsrb xmm8, byte [rsi + r10 + 5], 15 LONG $0x740f4566; BYTE $0xc1 // pcmpeqb xmm8, xmm9 QUAD $0x000000e0956f0f66 // movdqa xmm2, oword 224[rbp] /* [rip + .LCPI1_14] */ LONG $0xdb0f4466; BYTE $0xc2 // pand xmm8, xmm2 LONG $0xeb0f4466; BYTE $0xc1 // por xmm8, xmm1 - LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] LONG $0x0e54b60f; BYTE $0x13 // movzx edx, byte [rsi + rcx + 19] LONG $0xfa6e0f66 // movd xmm7, edx LONG $0xeb0f4466; BYTE $0xc6 // por xmm8, xmm6 @@ -5891,47 +6348,48 @@ LBB1_87: QUAD $0x060e5c203a0f4266; BYTE $0x01 // pinsrb xmm3, byte [rsi + r9 + 6], 1 QUAD $0x0206065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 6], 2 QUAD $0x062e5c203a0f4266; BYTE $0x03 // pinsrb xmm3, byte [rsi + r13 + 6], 3 - LONG $0x245c8b4c; BYTE $0x50 // mov r11, qword [rsp + 80] + LONG $0x245c8b4c; BYTE $0x30 // mov r11, qword [rsp + 48] QUAD $0x061e5c203a0f4266; BYTE $0x04 // pinsrb xmm3, byte [rsi + r11 + 6], 4 - LONG $0x247c8b4c; BYTE $0x60 // mov r15, qword [rsp + 96] - QUAD $0x063e5c203a0f4266; BYTE $0x05 // pinsrb xmm3, byte [rsi + r15 + 6], 5 + LONG $0x24448b4c; BYTE $0x20 // mov r8, qword [rsp + 32] + QUAD $0x06065c203a0f4266; BYTE $0x05 // pinsrb xmm3, byte [rsi + r8 + 6], 5 WORD $0x8948; BYTE $0xf9 // mov rcx, rdi QUAD $0x06063e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 6], 6 - WORD $0x894c; BYTE $0xc7 // mov rdi, r8 - QUAD $0x06065c203a0f4266; BYTE $0x07 // pinsrb xmm3, byte [rsi + r8 + 6], 7 - LONG $0x24548b48; BYTE $0x48 // mov rdx, qword [rsp + 72] + WORD $0x894c; BYTE $0xe7 // mov rdi, r12 + QUAD $0x06265c203a0f4266; BYTE $0x07 // pinsrb xmm3, byte [rsi + r12 + 6], 7 + LONG $0x24548b48; BYTE $0x38 // mov rdx, qword [rsp + 56] QUAD $0x0806165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 6], 8 QUAD $0x09061e5c203a0f66 // pinsrb xmm3, byte [rsi + rbx + 6], 9 - LONG $0x24448b4c; BYTE $0x30 // mov r8, qword [rsp + 48] - QUAD $0x06065c203a0f4266; BYTE $0x0a // pinsrb xmm3, byte [rsi + r8 + 6], 10 - QUAD $0x06365c203a0f4266; BYTE $0x0b // pinsrb xmm3, byte [rsi + r14 + 6], 11 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] - QUAD $0x0c06065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 6], 12 - QUAD $0x06265c203a0f4266; BYTE $0x0d // pinsrb xmm3, byte [rsi + r12 + 6], 13 - WORD $0x894d; BYTE $0xe5 // mov r13, r12 - LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] - QUAD $0x0e06165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 6], 14 + LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] + QUAD $0x0a06165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 6], 10 + QUAD $0x063e5c203a0f4266; BYTE $0x0b // pinsrb xmm3, byte [rsi + r15 + 6], 11 + LONG $0x24648b4c; BYTE $0x68 // mov r12, qword [rsp + 104] + QUAD $0x06265c203a0f4266; BYTE $0x0c // pinsrb xmm3, byte [rsi + r12 + 6], 12 + QUAD $0x06365c203a0f4266; BYTE $0x0d // pinsrb xmm3, byte [rsi + r14 + 6], 13 + WORD $0x894d; BYTE $0xf5 // mov r13, r14 + LONG $0x24748b4c; BYTE $0x48 // mov r14, qword [rsp + 72] + QUAD $0x06365c203a0f4266; BYTE $0x0e // pinsrb xmm3, byte [rsi + r14 + 6], 14 QUAD $0x06165c203a0f4266; BYTE $0x0f // pinsrb xmm3, byte [rsi + r10 + 6], 15 - QUAD $0x0000e024946f0f66; BYTE $0x00 // movdqa xmm2, oword [rsp + 224] + QUAD $0x0000b024946f0f66; BYTE $0x00 // movdqa xmm2, oword [rsp + 176] QUAD $0x070e54203a0f4266; BYTE $0x01 // pinsrb xmm2, byte [rsi + r9 + 7], 1 - LONG $0x24648b4c; BYTE $0x40 // mov r12, qword [rsp + 64] - QUAD $0x072654203a0f4266; BYTE $0x02 // pinsrb xmm2, byte [rsi + r12 + 7], 2 - LONG $0x24548b48; BYTE $0x68 // mov rdx, qword [rsp + 104] - QUAD $0x03071654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 7], 3 + WORD $0x8949; BYTE $0xc2 // mov r10, rax + QUAD $0x02070654203a0f66 // pinsrb xmm2, byte [rsi + rax + 7], 2 + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + QUAD $0x03070654203a0f66 // pinsrb xmm2, byte [rsi + rax + 7], 3 QUAD $0x071e54203a0f4266; BYTE $0x04 // pinsrb xmm2, byte [rsi + r11 + 7], 4 - QUAD $0x073e54203a0f4266; BYTE $0x05 // pinsrb xmm2, byte [rsi + r15 + 7], 5 + QUAD $0x070654203a0f4266; BYTE $0x05 // pinsrb xmm2, byte [rsi + r8 + 7], 5 QUAD $0x06070e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 7], 6 QUAD $0x07073e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 7], 7 - LONG $0x24548b4c; BYTE $0x48 // mov r10, qword [rsp + 72] - QUAD $0x071654203a0f4266; BYTE $0x08 // pinsrb xmm2, byte [rsi + r10 + 7], 8 + WORD $0x8948; BYTE $0xf8 // mov rax, rdi + LONG $0x24448b4c; BYTE $0x38 // mov r8, qword [rsp + 56] + QUAD $0x070654203a0f4266; BYTE $0x08 // pinsrb xmm2, byte [rsi + r8 + 7], 8 QUAD $0x09071e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 7], 9 - QUAD $0x070654203a0f4266; BYTE $0x0a // pinsrb xmm2, byte [rsi + r8 + 7], 10 - QUAD $0x073654203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rsi + r14 + 7], 11 - QUAD $0x0c070654203a0f66 // pinsrb xmm2, byte [rsi + rax + 7], 12 + QUAD $0x0a071654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 7], 10 + QUAD $0x073e54203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rsi + r15 + 7], 11 + QUAD $0x072654203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rsi + r12 + 7], 12 QUAD $0x072e54203a0f4266; BYTE $0x0d // pinsrb xmm2, byte [rsi + r13 + 7], 13 - LONG $0x247c8b48; BYTE $0x18 // mov rdi, qword [rsp + 24] - QUAD $0x0e073e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 7], 14 - LONG $0x244c8b4c; BYTE $0x10 // mov r9, qword [rsp + 16] + WORD $0x894c; BYTE $0xf7 // mov rdi, r14 + QUAD $0x073654203a0f4266; BYTE $0x0e // pinsrb xmm2, byte [rsi + r14 + 7], 14 + LONG $0x244c8b4c; BYTE $0x40 // mov r9, qword [rsp + 64] QUAD $0x070e54203a0f4266; BYTE $0x0f // pinsrb xmm2, byte [rsi + r9 + 7], 15 LONG $0x740f4166; BYTE $0xd9 // pcmpeqb xmm3, xmm9 QUAD $0x000000f08d6f0f66 // movdqa xmm1, oword 240[rbp] /* [rip + .LCPI1_15] */ @@ -5942,38 +6400,36 @@ LBB1_87: LONG $0xd1db0f66 // pand xmm2, xmm1 LONG $0xd3eb0f66 // por xmm2, xmm3 LONG $0xca6f0f66 // movdqa xmm1, xmm2 - LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] + LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] LONG $0x1e54b60f; BYTE $0x15 // movzx edx, byte [rsi + rbx + 21] LONG $0xd26e0f66 // movd xmm2, edx - LONG $0x245c8b4c; BYTE $0x28 // mov r11, qword [rsp + 40] + LONG $0x245c8b4c; BYTE $0x08 // mov r11, qword [rsp + 8] QUAD $0x091e54203a0f4666; BYTE $0x01 // pinsrb xmm10, byte [rsi + r11 + 9], 1 - QUAD $0x092654203a0f4666; BYTE $0x02 // pinsrb xmm10, byte [rsi + r12 + 9], 2 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] - QUAD $0x090654203a0f4466; BYTE $0x03 // pinsrb xmm10, byte [rsi + rax + 9], 3 - LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] + QUAD $0x091654203a0f4666; BYTE $0x02 // pinsrb xmm10, byte [rsi + r10 + 9], 2 + LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] + QUAD $0x090e54203a0f4466; BYTE $0x03 // pinsrb xmm10, byte [rsi + rcx + 9], 3 + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] QUAD $0x090e54203a0f4466; BYTE $0x04 // pinsrb xmm10, byte [rsi + rcx + 9], 4 - LONG $0x247c8b4c; BYTE $0x60 // mov r15, qword [rsp + 96] - QUAD $0x093e54203a0f4666; BYTE $0x05 // pinsrb xmm10, byte [rsi + r15 + 9], 5 - QUAD $0x000000b024a48b4c // mov r12, qword [rsp + 176] - QUAD $0x092654203a0f4666; BYTE $0x06 // pinsrb xmm10, byte [rsi + r12 + 9], 6 - QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] + LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] + QUAD $0x091654203a0f4466; BYTE $0x05 // pinsrb xmm10, byte [rsi + rdx + 9], 5 + LONG $0x24748b4c; BYTE $0x70 // mov r14, qword [rsp + 112] + QUAD $0x093654203a0f4666; BYTE $0x06 // pinsrb xmm10, byte [rsi + r14 + 9], 6 QUAD $0x090654203a0f4466; BYTE $0x07 // pinsrb xmm10, byte [rsi + rax + 9], 7 - QUAD $0x091654203a0f4666; BYTE $0x08 // pinsrb xmm10, byte [rsi + r10 + 9], 8 - WORD $0x894d; BYTE $0xd6 // mov r14, r10 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] + QUAD $0x090654203a0f4666; BYTE $0x08 // pinsrb xmm10, byte [rsi + r8 + 9], 8 + WORD $0x894d; BYTE $0xc7 // mov r15, r8 + LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] QUAD $0x090654203a0f4466; BYTE $0x09 // pinsrb xmm10, byte [rsi + rax + 9], 9 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] - QUAD $0x090654203a0f4466; BYTE $0x0a // pinsrb xmm10, byte [rsi + rax + 9], 10 - LONG $0x24548b48; BYTE $0x58 // mov rdx, qword [rsp + 88] + LONG $0x24548b4c; BYTE $0x10 // mov r10, qword [rsp + 16] + QUAD $0x091654203a0f4666; BYTE $0x0a // pinsrb xmm10, byte [rsi + r10 + 9], 10 + QUAD $0x000000d024948b48 // mov rdx, qword [rsp + 208] QUAD $0x091654203a0f4466; BYTE $0x0b // pinsrb xmm10, byte [rsi + rdx + 9], 11 - LONG $0x24548b48; BYTE $0x38 // mov rdx, qword [rsp + 56] - QUAD $0x091654203a0f4466; BYTE $0x0c // pinsrb xmm10, byte [rsi + rdx + 9], 12 - WORD $0x894d; BYTE $0xea // mov r10, r13 + QUAD $0x092654203a0f4666; BYTE $0x0c // pinsrb xmm10, byte [rsi + r12 + 9], 12 + WORD $0x894c; BYTE $0xe8 // mov rax, r13 QUAD $0x092e54203a0f4666; BYTE $0x0d // pinsrb xmm10, byte [rsi + r13 + 9], 13 QUAD $0x093e54203a0f4466; BYTE $0x0e // pinsrb xmm10, byte [rsi + rdi + 9], 14 QUAD $0x090e54203a0f4666; BYTE $0x0f // pinsrb xmm10, byte [rsi + r9 + 9], 15 LONG $0xeb0f4166; BYTE $0xc8 // por xmm1, xmm8 - QUAD $0x0000e0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 224], xmm1 + QUAD $0x0000b0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 176], xmm1 LONG $0x740f4566; BYTE $0xd1 // pcmpeqb xmm10, xmm9 LONG $0x6f0f4166; BYTE $0xca // movdqa xmm1, xmm10 LONG $0x6f0f4466; BYTE $0xc4 // movdqa xmm8, xmm4 @@ -5983,130 +6439,128 @@ LBB1_87: LONG $0xda6e0f66 // movd xmm3, edx QUAD $0x00011024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 272] QUAD $0x081e64203a0f4266; BYTE $0x01 // pinsrb xmm4, byte [rsi + r11 + 8], 1 - LONG $0x246c8b4c; BYTE $0x40 // mov r13, qword [rsp + 64] + LONG $0x246c8b4c; BYTE $0x50 // mov r13, qword [rsp + 80] QUAD $0x082e64203a0f4266; BYTE $0x02 // pinsrb xmm4, byte [rsi + r13 + 8], 2 - LONG $0x24448b4c; BYTE $0x68 // mov r8, qword [rsp + 104] + LONG $0x24448b4c; BYTE $0x60 // mov r8, qword [rsp + 96] QUAD $0x080664203a0f4266; BYTE $0x03 // pinsrb xmm4, byte [rsi + r8 + 8], 3 QUAD $0x04080e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 8], 4 - WORD $0x894d; BYTE $0xf9 // mov r9, r15 - QUAD $0x083e64203a0f4266; BYTE $0x05 // pinsrb xmm4, byte [rsi + r15 + 8], 5 - QUAD $0x082664203a0f4266; BYTE $0x06 // pinsrb xmm4, byte [rsi + r12 + 8], 6 - QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] - QUAD $0x083e64203a0f4266; BYTE $0x07 // pinsrb xmm4, byte [rsi + r15 + 8], 7 - QUAD $0x083664203a0f4266; BYTE $0x08 // pinsrb xmm4, byte [rsi + r14 + 8], 8 - WORD $0x894c; BYTE $0xf3 // mov rbx, r14 - QUAD $0x0000008024948b48 // mov rdx, qword [rsp + 128] + LONG $0x244c8b4c; BYTE $0x20 // mov r9, qword [rsp + 32] + QUAD $0x080e64203a0f4266; BYTE $0x05 // pinsrb xmm4, byte [rsi + r9 + 8], 5 + QUAD $0x083664203a0f4266; BYTE $0x06 // pinsrb xmm4, byte [rsi + r14 + 8], 6 + QUAD $0x0000008024b48b4c // mov r14, qword [rsp + 128] + QUAD $0x083664203a0f4266; BYTE $0x07 // pinsrb xmm4, byte [rsi + r14 + 8], 7 + QUAD $0x083e64203a0f4266; BYTE $0x08 // pinsrb xmm4, byte [rsi + r15 + 8], 8 + WORD $0x894c; BYTE $0xfb // mov rbx, r15 + LONG $0x24548b48; BYTE $0x78 // mov rdx, qword [rsp + 120] QUAD $0x09081664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 8], 9 - QUAD $0x0a080664203a0f66 // pinsrb xmm4, byte [rsi + rax + 8], 10 - LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] - QUAD $0x0b080664203a0f66 // pinsrb xmm4, byte [rsi + rax + 8], 11 - LONG $0x24748b4c; BYTE $0x38 // mov r14, qword [rsp + 56] - QUAD $0x083664203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r14 + 8], 12 - QUAD $0x081664203a0f4266; BYTE $0x0d // pinsrb xmm4, byte [rsi + r10 + 8], 13 + QUAD $0x081664203a0f4266; BYTE $0x0a // pinsrb xmm4, byte [rsi + r10 + 8], 10 + QUAD $0x000000d024bc8b4c // mov r15, qword [rsp + 208] + QUAD $0x083e64203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r15 + 8], 11 + QUAD $0x082664203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r12 + 8], 12 + QUAD $0x0d080664203a0f66 // pinsrb xmm4, byte [rsi + rax + 8], 13 QUAD $0x0e083e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 8], 14 - LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] QUAD $0x0f080664203a0f66 // pinsrb xmm4, byte [rsi + rax + 8], 15 LONG $0x740f4166; BYTE $0xe1 // pcmpeqb xmm4, xmm9 LONG $0xdb0f4166; BYTE $0xe0 // pand xmm4, xmm8 - QUAD $0x00c024946f0f4466; WORD $0x0000 // movdqa xmm10, oword [rsp + 192] + QUAD $0x00a024946f0f4466; WORD $0x0000 // movdqa xmm10, oword [rsp + 160] QUAD $0x0a1e54203a0f4666; BYTE $0x01 // pinsrb xmm10, byte [rsi + r11 + 10], 1 QUAD $0x0a2e54203a0f4666; BYTE $0x02 // pinsrb xmm10, byte [rsi + r13 + 10], 2 QUAD $0x0a0654203a0f4666; BYTE $0x03 // pinsrb xmm10, byte [rsi + r8 + 10], 3 - WORD $0x894d; BYTE $0xc4 // mov r12, r8 + WORD $0x894d; BYTE $0xc2 // mov r10, r8 QUAD $0x0a0e54203a0f4466; BYTE $0x04 // pinsrb xmm10, byte [rsi + rcx + 10], 4 QUAD $0x0a0e54203a0f4666; BYTE $0x05 // pinsrb xmm10, byte [rsi + r9 + 10], 5 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] + LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] QUAD $0x0a0e54203a0f4466; BYTE $0x06 // pinsrb xmm10, byte [rsi + rcx + 10], 6 - WORD $0x894d; BYTE $0xf8 // mov r8, r15 - QUAD $0x0a3e54203a0f4666; BYTE $0x07 // pinsrb xmm10, byte [rsi + r15 + 10], 7 + WORD $0x894d; BYTE $0xf0 // mov r8, r14 + QUAD $0x0a3654203a0f4666; BYTE $0x07 // pinsrb xmm10, byte [rsi + r14 + 10], 7 QUAD $0x0a1e54203a0f4466; BYTE $0x08 // pinsrb xmm10, byte [rsi + rbx + 10], 8 QUAD $0x0a1654203a0f4466; BYTE $0x09 // pinsrb xmm10, byte [rsi + rdx + 10], 9 - LONG $0x24548b48; BYTE $0x30 // mov rdx, qword [rsp + 48] + LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] QUAD $0x0a1654203a0f4466; BYTE $0x0a // pinsrb xmm10, byte [rsi + rdx + 10], 10 WORD $0x8948; BYTE $0xd3 // mov rbx, rdx - LONG $0x247c8b4c; BYTE $0x58 // mov r15, qword [rsp + 88] QUAD $0x0a3e54203a0f4666; BYTE $0x0b // pinsrb xmm10, byte [rsi + r15 + 10], 11 - QUAD $0x0a3654203a0f4666; BYTE $0x0c // pinsrb xmm10, byte [rsi + r14 + 10], 12 - QUAD $0x0a1654203a0f4666; BYTE $0x0d // pinsrb xmm10, byte [rsi + r10 + 10], 13 + QUAD $0x0a2654203a0f4666; BYTE $0x0c // pinsrb xmm10, byte [rsi + r12 + 10], 12 + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + QUAD $0x0a3654203a0f4666; BYTE $0x0d // pinsrb xmm10, byte [rsi + r14 + 10], 13 QUAD $0x0a3e54203a0f4466; BYTE $0x0e // pinsrb xmm10, byte [rsi + rdi + 10], 14 QUAD $0x0a0654203a0f4466; BYTE $0x0f // pinsrb xmm10, byte [rsi + rax + 10], 15 LONG $0x740f4566; BYTE $0xd1 // pcmpeqb xmm10, xmm9 QUAD $0x0000b095db0f4466; BYTE $0x00 // pand xmm10, oword 176[rbp] /* [rip + .LCPI1_11] */ LONG $0xeb0f4466; BYTE $0xd4 // por xmm10, xmm4 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] LONG $0x0654b60f; BYTE $0x17 // movzx edx, byte [rsi + rax + 23] LONG $0x6e0f4466; BYTE $0xc2 // movd xmm8, edx LONG $0xeb0f4466; BYTE $0xd1 // por xmm10, xmm1 - QUAD $0x00c024947f0f4466; WORD $0x0000 // movdqa oword [rsp + 192], xmm10 + QUAD $0x00a024947f0f4466; WORD $0x0000 // movdqa oword [rsp + 160], xmm10 LONG $0x0654b60f; BYTE $0x18 // movzx edx, byte [rsi + rax + 24] LONG $0x6e0f4466; BYTE $0xd2 // movd xmm10, edx QUAD $0x0b1e5c203a0f4666; BYTE $0x01 // pinsrb xmm11, byte [rsi + r11 + 11], 1 QUAD $0x0b2e5c203a0f4666; BYTE $0x02 // pinsrb xmm11, byte [rsi + r13 + 11], 2 - QUAD $0x0b265c203a0f4666; BYTE $0x03 // pinsrb xmm11, byte [rsi + r12 + 11], 3 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0b165c203a0f4666; BYTE $0x03 // pinsrb xmm11, byte [rsi + r10 + 11], 3 + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x0b065c203a0f4466; BYTE $0x04 // pinsrb xmm11, byte [rsi + rax + 11], 4 QUAD $0x0b0e5c203a0f4666; BYTE $0x05 // pinsrb xmm11, byte [rsi + r9 + 11], 5 QUAD $0x0b0e5c203a0f4466; BYTE $0x06 // pinsrb xmm11, byte [rsi + rcx + 11], 6 WORD $0x894c; BYTE $0xc7 // mov rdi, r8 QUAD $0x0b065c203a0f4666; BYTE $0x07 // pinsrb xmm11, byte [rsi + r8 + 11], 7 - LONG $0x24448b4c; BYTE $0x48 // mov r8, qword [rsp + 72] + LONG $0x24448b4c; BYTE $0x38 // mov r8, qword [rsp + 56] QUAD $0x0b065c203a0f4666; BYTE $0x08 // pinsrb xmm11, byte [rsi + r8 + 11], 8 - QUAD $0x00000080248c8b4c // mov r9, qword [rsp + 128] + LONG $0x244c8b4c; BYTE $0x78 // mov r9, qword [rsp + 120] QUAD $0x0b0e5c203a0f4666; BYTE $0x09 // pinsrb xmm11, byte [rsi + r9 + 11], 9 QUAD $0x0b1e5c203a0f4466; BYTE $0x0a // pinsrb xmm11, byte [rsi + rbx + 11], 10 - WORD $0x894d; BYTE $0xfe // mov r14, r15 QUAD $0x0b3e5c203a0f4666; BYTE $0x0b // pinsrb xmm11, byte [rsi + r15 + 11], 11 - LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] - QUAD $0x0b3e5c203a0f4666; BYTE $0x0c // pinsrb xmm11, byte [rsi + r15 + 11], 12 - QUAD $0x0b165c203a0f4666; BYTE $0x0d // pinsrb xmm11, byte [rsi + r10 + 11], 13 - LONG $0x24648b4c; BYTE $0x18 // mov r12, qword [rsp + 24] - QUAD $0x0b265c203a0f4666; BYTE $0x0e // pinsrb xmm11, byte [rsi + r12 + 11], 14 - LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] + QUAD $0x0b265c203a0f4666; BYTE $0x0c // pinsrb xmm11, byte [rsi + r12 + 11], 12 + WORD $0x894d; BYTE $0xf2 // mov r10, r14 + QUAD $0x0b365c203a0f4666; BYTE $0x0d // pinsrb xmm11, byte [rsi + r14 + 11], 13 + LONG $0x24748b4c; BYTE $0x48 // mov r14, qword [rsp + 72] + QUAD $0x0b365c203a0f4666; BYTE $0x0e // pinsrb xmm11, byte [rsi + r14 + 11], 14 + LONG $0x24548b48; BYTE $0x40 // mov rdx, qword [rsp + 64] QUAD $0x0b165c203a0f4466; BYTE $0x0f // pinsrb xmm11, byte [rsi + rdx + 11], 15 QUAD $0x0c1e6c203a0f4666; BYTE $0x01 // pinsrb xmm13, byte [rsi + r11 + 12], 1 QUAD $0x0c2e6c203a0f4666; BYTE $0x02 // pinsrb xmm13, byte [rsi + r13 + 12], 2 - LONG $0x245c8b48; BYTE $0x68 // mov rbx, qword [rsp + 104] + LONG $0x245c8b48; BYTE $0x60 // mov rbx, qword [rsp + 96] QUAD $0x0c1e6c203a0f4466; BYTE $0x03 // pinsrb xmm13, byte [rsi + rbx + 12], 3 QUAD $0x0c066c203a0f4466; BYTE $0x04 // pinsrb xmm13, byte [rsi + rax + 12], 4 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0c066c203a0f4466; BYTE $0x05 // pinsrb xmm13, byte [rsi + rax + 12], 5 QUAD $0x0c0e6c203a0f4466; BYTE $0x06 // pinsrb xmm13, byte [rsi + rcx + 12], 6 QUAD $0x0c3e6c203a0f4466; BYTE $0x07 // pinsrb xmm13, byte [rsi + rdi + 12], 7 QUAD $0x0c066c203a0f4666; BYTE $0x08 // pinsrb xmm13, byte [rsi + r8 + 12], 8 QUAD $0x0c0e6c203a0f4666; BYTE $0x09 // pinsrb xmm13, byte [rsi + r9 + 12], 9 - LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] + LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] QUAD $0x0c1e6c203a0f4466; BYTE $0x0a // pinsrb xmm13, byte [rsi + rbx + 12], 10 - QUAD $0x0c366c203a0f4666; BYTE $0x0b // pinsrb xmm13, byte [rsi + r14 + 12], 11 - QUAD $0x0c3e6c203a0f4666; BYTE $0x0c // pinsrb xmm13, byte [rsi + r15 + 12], 12 + QUAD $0x0c3e6c203a0f4666; BYTE $0x0b // pinsrb xmm13, byte [rsi + r15 + 12], 11 + QUAD $0x0c266c203a0f4666; BYTE $0x0c // pinsrb xmm13, byte [rsi + r12 + 12], 12 QUAD $0x0c166c203a0f4666; BYTE $0x0d // pinsrb xmm13, byte [rsi + r10 + 12], 13 WORD $0x894d; BYTE $0xd3 // mov r11, r10 - QUAD $0x0c266c203a0f4666; BYTE $0x0e // pinsrb xmm13, byte [rsi + r12 + 12], 14 + QUAD $0x0c366c203a0f4666; BYTE $0x0e // pinsrb xmm13, byte [rsi + r14 + 12], 14 QUAD $0x0c166c203a0f4466; BYTE $0x0f // pinsrb xmm13, byte [rsi + rdx + 12], 15 - LONG $0x24548b4c; BYTE $0x28 // mov r10, qword [rsp + 40] + LONG $0x24548b4c; BYTE $0x08 // mov r10, qword [rsp + 8] QUAD $0x0d1664203a0f4666; BYTE $0x01 // pinsrb xmm12, byte [rsi + r10 + 13], 1 QUAD $0x0d2e64203a0f4666; BYTE $0x02 // pinsrb xmm12, byte [rsi + r13 + 13], 2 - LONG $0x246c8b4c; BYTE $0x68 // mov r13, qword [rsp + 104] + LONG $0x246c8b4c; BYTE $0x60 // mov r13, qword [rsp + 96] QUAD $0x0d2e64203a0f4666; BYTE $0x03 // pinsrb xmm12, byte [rsi + r13 + 13], 3 - LONG $0x245c8b48; BYTE $0x50 // mov rbx, qword [rsp + 80] + LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] QUAD $0x0d1e64203a0f4466; BYTE $0x04 // pinsrb xmm12, byte [rsi + rbx + 13], 4 QUAD $0x0d0664203a0f4466; BYTE $0x05 // pinsrb xmm12, byte [rsi + rax + 13], 5 QUAD $0x0d0e64203a0f4466; BYTE $0x06 // pinsrb xmm12, byte [rsi + rcx + 13], 6 QUAD $0x0d3e64203a0f4466; BYTE $0x07 // pinsrb xmm12, byte [rsi + rdi + 13], 7 QUAD $0x0d0664203a0f4666; BYTE $0x08 // pinsrb xmm12, byte [rsi + r8 + 13], 8 QUAD $0x0d0e64203a0f4666; BYTE $0x09 // pinsrb xmm12, byte [rsi + r9 + 13], 9 - LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] + LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] QUAD $0x0d1e64203a0f4466; BYTE $0x0a // pinsrb xmm12, byte [rsi + rbx + 13], 10 - QUAD $0x0d3664203a0f4666; BYTE $0x0b // pinsrb xmm12, byte [rsi + r14 + 13], 11 - QUAD $0x0d3e64203a0f4666; BYTE $0x0c // pinsrb xmm12, byte [rsi + r15 + 13], 12 + QUAD $0x0d3e64203a0f4666; BYTE $0x0b // pinsrb xmm12, byte [rsi + r15 + 13], 11 + QUAD $0x0d2664203a0f4666; BYTE $0x0c // pinsrb xmm12, byte [rsi + r12 + 13], 12 QUAD $0x0d1e64203a0f4666; BYTE $0x0d // pinsrb xmm12, byte [rsi + r11 + 13], 13 - QUAD $0x0d2664203a0f4666; BYTE $0x0e // pinsrb xmm12, byte [rsi + r12 + 13], 14 + QUAD $0x0d3664203a0f4666; BYTE $0x0e // pinsrb xmm12, byte [rsi + r14 + 13], 14 QUAD $0x0d1664203a0f4466; BYTE $0x0f // pinsrb xmm12, byte [rsi + rdx + 13], 15 LONG $0x740f4566; BYTE $0xd9 // pcmpeqb xmm11, xmm9 QUAD $0x0000c09ddb0f4466; BYTE $0x00 // pand xmm11, oword 192[rbp] /* [rip + .LCPI1_12] */ LONG $0x740f4566; BYTE $0xe9 // pcmpeqb xmm13, xmm9 QUAD $0x0000d0addb0f4466; BYTE $0x00 // pand xmm13, oword 208[rbp] /* [rip + .LCPI1_13] */ LONG $0xeb0f4566; BYTE $0xeb // por xmm13, xmm11 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] LONG $0x0654b60f; BYTE $0x19 // movzx edx, byte [rsi + rax + 25] LONG $0xca6e0f66 // movd xmm1, edx LONG $0x740f4566; BYTE $0xe1 // pcmpeqb xmm12, xmm9 @@ -6114,32 +6568,32 @@ LBB1_87: LONG $0xeb0f4566; BYTE $0xe5 // por xmm12, xmm13 LONG $0x0654b60f; BYTE $0x1a // movzx edx, byte [rsi + rax + 26] LONG $0x6e0f4466; BYTE $0xda // movd xmm11, edx - QUAD $0x00012024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 288] + QUAD $0x0000f024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 240] QUAD $0x0e1664203a0f4266; BYTE $0x01 // pinsrb xmm4, byte [rsi + r10 + 14], 1 - LONG $0x24648b4c; BYTE $0x40 // mov r12, qword [rsp + 64] - QUAD $0x0e2664203a0f4266; BYTE $0x02 // pinsrb xmm4, byte [rsi + r12 + 14], 2 + LONG $0x24748b4c; BYTE $0x50 // mov r14, qword [rsp + 80] + QUAD $0x0e3664203a0f4266; BYTE $0x02 // pinsrb xmm4, byte [rsi + r14 + 14], 2 WORD $0x894d; BYTE $0xea // mov r10, r13 QUAD $0x0e2e64203a0f4266; BYTE $0x03 // pinsrb xmm4, byte [rsi + r13 + 14], 3 - LONG $0x245c8b4c; BYTE $0x50 // mov r11, qword [rsp + 80] + LONG $0x245c8b4c; BYTE $0x30 // mov r11, qword [rsp + 48] QUAD $0x0e1e64203a0f4266; BYTE $0x04 // pinsrb xmm4, byte [rsi + r11 + 14], 4 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x050e0664203a0f66 // pinsrb xmm4, byte [rsi + rax + 14], 5 QUAD $0x060e0e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 14], 6 QUAD $0x070e3e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 14], 7 QUAD $0x0e0664203a0f4266; BYTE $0x08 // pinsrb xmm4, byte [rsi + r8 + 14], 8 QUAD $0x0e0e64203a0f4266; BYTE $0x09 // pinsrb xmm4, byte [rsi + r9 + 14], 9 QUAD $0x0a0e1e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 14], 10 - QUAD $0x0e3664203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r14 + 14], 11 - QUAD $0x0e3e64203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r15 + 14], 12 - LONG $0x24548b48; BYTE $0x70 // mov rdx, qword [rsp + 112] + QUAD $0x0e3e64203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r15 + 14], 11 + QUAD $0x0e2664203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r12 + 14], 12 + LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] QUAD $0x0d0e1664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 14], 13 - LONG $0x246c8b4c; BYTE $0x18 // mov r13, qword [rsp + 24] + LONG $0x246c8b4c; BYTE $0x48 // mov r13, qword [rsp + 72] QUAD $0x0e2e64203a0f4266; BYTE $0x0e // pinsrb xmm4, byte [rsi + r13 + 14], 14 - LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] + LONG $0x24548b48; BYTE $0x40 // mov rdx, qword [rsp + 64] QUAD $0x0f0e1664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 14], 15 - LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] + LONG $0x24548b48; BYTE $0x08 // mov rdx, qword [rsp + 8] QUAD $0x0f1674203a0f4466; BYTE $0x01 // pinsrb xmm14, byte [rsi + rdx + 15], 1 - QUAD $0x0f2674203a0f4666; BYTE $0x02 // pinsrb xmm14, byte [rsi + r12 + 15], 2 + QUAD $0x0f3674203a0f4666; BYTE $0x02 // pinsrb xmm14, byte [rsi + r14 + 15], 2 QUAD $0x0f1674203a0f4666; BYTE $0x03 // pinsrb xmm14, byte [rsi + r10 + 15], 3 QUAD $0x0f1e74203a0f4666; BYTE $0x04 // pinsrb xmm14, byte [rsi + r11 + 15], 4 QUAD $0x0f0674203a0f4466; BYTE $0x05 // pinsrb xmm14, byte [rsi + rax + 15], 5 @@ -6148,16 +6602,16 @@ LBB1_87: QUAD $0x0f0674203a0f4666; BYTE $0x08 // pinsrb xmm14, byte [rsi + r8 + 15], 8 QUAD $0x0f0e74203a0f4666; BYTE $0x09 // pinsrb xmm14, byte [rsi + r9 + 15], 9 QUAD $0x0f1e74203a0f4466; BYTE $0x0a // pinsrb xmm14, byte [rsi + rbx + 15], 10 - QUAD $0x0f3674203a0f4666; BYTE $0x0b // pinsrb xmm14, byte [rsi + r14 + 15], 11 - QUAD $0x0f3e74203a0f4666; BYTE $0x0c // pinsrb xmm14, byte [rsi + r15 + 15], 12 - LONG $0x24548b48; BYTE $0x70 // mov rdx, qword [rsp + 112] + QUAD $0x0f3e74203a0f4666; BYTE $0x0b // pinsrb xmm14, byte [rsi + r15 + 15], 11 + QUAD $0x0f2674203a0f4666; BYTE $0x0c // pinsrb xmm14, byte [rsi + r12 + 15], 12 + LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] QUAD $0x0f1674203a0f4466; BYTE $0x0d // pinsrb xmm14, byte [rsi + rdx + 15], 13 QUAD $0x0f2e74203a0f4666; BYTE $0x0e // pinsrb xmm14, byte [rsi + r13 + 15], 14 - LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] + LONG $0x24548b48; BYTE $0x40 // mov rdx, qword [rsp + 64] QUAD $0x0f1674203a0f4466; BYTE $0x0f // pinsrb xmm14, byte [rsi + rdx + 15], 15 - LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] + LONG $0x24548b48; BYTE $0x08 // mov rdx, qword [rsp + 8] QUAD $0x10167c203a0f4466; BYTE $0x01 // pinsrb xmm15, byte [rsi + rdx + 16], 1 - QUAD $0x10267c203a0f4666; BYTE $0x02 // pinsrb xmm15, byte [rsi + r12 + 16], 2 + QUAD $0x10367c203a0f4666; BYTE $0x02 // pinsrb xmm15, byte [rsi + r14 + 16], 2 QUAD $0x10167c203a0f4666; BYTE $0x03 // pinsrb xmm15, byte [rsi + r10 + 16], 3 QUAD $0x101e7c203a0f4666; BYTE $0x04 // pinsrb xmm15, byte [rsi + r11 + 16], 4 QUAD $0x10067c203a0f4466; BYTE $0x05 // pinsrb xmm15, byte [rsi + rax + 16], 5 @@ -6166,14 +6620,14 @@ LBB1_87: QUAD $0x10067c203a0f4666; BYTE $0x08 // pinsrb xmm15, byte [rsi + r8 + 16], 8 QUAD $0x100e7c203a0f4666; BYTE $0x09 // pinsrb xmm15, byte [rsi + r9 + 16], 9 QUAD $0x101e7c203a0f4466; BYTE $0x0a // pinsrb xmm15, byte [rsi + rbx + 16], 10 - QUAD $0x10367c203a0f4666; BYTE $0x0b // pinsrb xmm15, byte [rsi + r14 + 16], 11 - QUAD $0x103e7c203a0f4666; BYTE $0x0c // pinsrb xmm15, byte [rsi + r15 + 16], 12 - LONG $0x24548b48; BYTE $0x70 // mov rdx, qword [rsp + 112] + QUAD $0x103e7c203a0f4666; BYTE $0x0b // pinsrb xmm15, byte [rsi + r15 + 16], 11 + QUAD $0x10267c203a0f4666; BYTE $0x0c // pinsrb xmm15, byte [rsi + r12 + 16], 12 + LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] QUAD $0x10167c203a0f4466; BYTE $0x0d // pinsrb xmm15, byte [rsi + rdx + 16], 13 QUAD $0x102e7c203a0f4666; BYTE $0x0e // pinsrb xmm15, byte [rsi + r13 + 16], 14 - LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] + LONG $0x24548b48; BYTE $0x08 // mov rdx, qword [rsp + 8] QUAD $0x01111644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 17], 1 - QUAD $0x112644203a0f4266; BYTE $0x02 // pinsrb xmm0, byte [rsi + r12 + 17], 2 + QUAD $0x113644203a0f4266; BYTE $0x02 // pinsrb xmm0, byte [rsi + r14 + 17], 2 QUAD $0x111644203a0f4266; BYTE $0x03 // pinsrb xmm0, byte [rsi + r10 + 17], 3 QUAD $0x111e44203a0f4266; BYTE $0x04 // pinsrb xmm0, byte [rsi + r11 + 17], 4 QUAD $0x05110644203a0f66 // pinsrb xmm0, byte [rsi + rax + 17], 5 @@ -6183,26 +6637,26 @@ LBB1_87: QUAD $0x110644203a0f4266; BYTE $0x08 // pinsrb xmm0, byte [rsi + r8 + 17], 8 QUAD $0x110e44203a0f4266; BYTE $0x09 // pinsrb xmm0, byte [rsi + r9 + 17], 9 QUAD $0x0a111e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 17], 10 - QUAD $0x113644203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r14 + 17], 11 - QUAD $0x113e44203a0f4266; BYTE $0x0c // pinsrb xmm0, byte [rsi + r15 + 17], 12 - LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] + QUAD $0x113e44203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r15 + 17], 11 + QUAD $0x112644203a0f4266; BYTE $0x0c // pinsrb xmm0, byte [rsi + r12 + 17], 12 + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] QUAD $0x0d110644203a0f66 // pinsrb xmm0, byte [rsi + rax + 17], 13 - LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] + LONG $0x24548b48; BYTE $0x48 // mov rdx, qword [rsp + 72] QUAD $0x0e111644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 17], 14 - QUAD $0x00c024a4eb0f4466; WORD $0x0000 // por xmm12, oword [rsp + 192] - LONG $0x24648b4c; BYTE $0x20 // mov r12, qword [rsp + 32] - LONG $0x54b60f42; WORD $0x1b26 // movzx edx, byte [rsi + r12 + 27] + QUAD $0x00a024a4eb0f4466; WORD $0x0000 // por xmm12, oword [rsp + 160] + LONG $0x24748b4c; BYTE $0x28 // mov r14, qword [rsp + 40] + LONG $0x54b60f42; WORD $0x1b36 // movzx edx, byte [rsi + r14 + 27] LONG $0x6e0f4466; BYTE $0xca // movd xmm9, edx - QUAD $0x00d024ac6f0f4466; WORD $0x0000 // movdqa xmm13, oword [rsp + 208] + QUAD $0x00c024ac6f0f4466; WORD $0x0000 // movdqa xmm13, oword [rsp + 192] LONG $0x740f4166; BYTE $0xe5 // pcmpeqb xmm4, xmm13 QUAD $0x000000f0a5db0f66 // pand xmm4, oword 240[rbp] /* [rip + .LCPI1_15] */ LONG $0x740f4566; BYTE $0xf5 // pcmpeqb xmm14, xmm13 LONG $0x710f4166; WORD $0x07f6 // psllw xmm14, 7 LONG $0xdb0f4466; WORD $0x6075 // pand xmm14, oword 96[rbp] /* [rip + .LCPI1_6] */ LONG $0xeb0f4466; BYTE $0xf4 // por xmm14, xmm4 - LONG $0x54b60f42; WORD $0x1c26 // movzx edx, byte [rsi + r12 + 28] + LONG $0x54b60f42; WORD $0x1c36 // movzx edx, byte [rsi + r14 + 28] LONG $0xe26e0f66 // movd xmm4, edx - LONG $0x24448b4c; BYTE $0x10 // mov r8, qword [rsp + 16] + LONG $0x24448b4c; BYTE $0x40 // mov r8, qword [rsp + 64] QUAD $0x110644203a0f4266; BYTE $0x0f // pinsrb xmm0, byte [rsi + r8 + 17], 15 LONG $0xeb0f4566; BYTE $0xf4 // por xmm14, xmm12 LONG $0x740f4166; BYTE $0xc5 // pcmpeqb xmm0, xmm13 @@ -6210,54 +6664,54 @@ LBB1_87: QUAD $0x0000a0a56f0f4466; BYTE $0x00 // movdqa xmm12, oword 160[rbp] /* [rip + .LCPI1_10] */ LONG $0xdb0f4566; BYTE $0xec // pand xmm13, xmm12 LONG $0xf80f4466; BYTE $0xe8 // psubb xmm13, xmm0 - QUAD $0x00c024ac7f0f4466; WORD $0x0000 // movdqa oword [rsp + 192], xmm13 - LONG $0x54b60f42; WORD $0x1d26 // movzx edx, byte [rsi + r12 + 29] + QUAD $0x00a024ac7f0f4466; WORD $0x0000 // movdqa oword [rsp + 160], xmm13 + LONG $0x54b60f42; WORD $0x1d36 // movzx edx, byte [rsi + r14 + 29] LONG $0x6e0f4466; BYTE $0xea // movd xmm13, edx QUAD $0x10067c203a0f4666; BYTE $0x0f // pinsrb xmm15, byte [rsi + r8 + 16], 15 - QUAD $0x0000d024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 208] + QUAD $0x0000c024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 192] LONG $0x740f4466; BYTE $0xf8 // pcmpeqb xmm15, xmm0 - LONG $0x24648b4c; BYTE $0x28 // mov r12, qword [rsp + 40] - QUAD $0x12266c203a0f4266; BYTE $0x01 // pinsrb xmm5, byte [rsi + r12 + 18], 1 - LONG $0x24548b48; BYTE $0x40 // mov rdx, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x08 // mov r14, qword [rsp + 8] + QUAD $0x12366c203a0f4266; BYTE $0x01 // pinsrb xmm5, byte [rsi + r14 + 18], 1 + LONG $0x24548b48; BYTE $0x50 // mov rdx, qword [rsp + 80] QUAD $0x0212166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 18], 2 QUAD $0x12166c203a0f4266; BYTE $0x03 // pinsrb xmm5, byte [rsi + r10 + 18], 3 QUAD $0x121e6c203a0f4266; BYTE $0x04 // pinsrb xmm5, byte [rsi + r11 + 18], 4 QUAD $0x122e6c203a0f4266; BYTE $0x05 // pinsrb xmm5, byte [rsi + r13 + 18], 5 QUAD $0x06120e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 18], 6 QUAD $0x07123e6c203a0f66 // pinsrb xmm5, byte [rsi + rdi + 18], 7 - LONG $0x24548b48; BYTE $0x48 // mov rdx, qword [rsp + 72] + LONG $0x24548b48; BYTE $0x38 // mov rdx, qword [rsp + 56] QUAD $0x0812166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 18], 8 QUAD $0x120e6c203a0f4266; BYTE $0x09 // pinsrb xmm5, byte [rsi + r9 + 18], 9 QUAD $0x0a121e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 18], 10 - QUAD $0x12366c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rsi + r14 + 18], 11 - QUAD $0x123e6c203a0f4266; BYTE $0x0c // pinsrb xmm5, byte [rsi + r15 + 18], 12 + QUAD $0x123e6c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rsi + r15 + 18], 11 + QUAD $0x12266c203a0f4266; BYTE $0x0c // pinsrb xmm5, byte [rsi + r12 + 18], 12 QUAD $0x0d12066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 18], 13 - LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] QUAD $0x0e12066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 18], 14 LONG $0xdb0f4566; BYTE $0xfc // pand xmm15, xmm12 QUAD $0x12066c203a0f4266; BYTE $0x0f // pinsrb xmm5, byte [rsi + r8 + 18], 15 LONG $0xe8740f66 // pcmpeqb xmm5, xmm0 QUAD $0x000000b0addb0f66 // pand xmm5, oword 176[rbp] /* [rip + .LCPI1_11] */ LONG $0xeb0f4166; BYTE $0xef // por xmm5, xmm15 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] LONG $0x0654b60f; BYTE $0x1e // movzx edx, byte [rsi + rax + 30] LONG $0x6e0f4466; BYTE $0xe2 // movd xmm12, edx - QUAD $0x13267c203a0f4266; BYTE $0x01 // pinsrb xmm7, byte [rsi + r12 + 19], 1 - QUAD $0x142674203a0f4266; BYTE $0x01 // pinsrb xmm6, byte [rsi + r12 + 20], 1 - QUAD $0x152654203a0f4266; BYTE $0x01 // pinsrb xmm2, byte [rsi + r12 + 21], 1 - QUAD $0x16265c203a0f4266; BYTE $0x01 // pinsrb xmm3, byte [rsi + r12 + 22], 1 - QUAD $0x172644203a0f4666; BYTE $0x01 // pinsrb xmm8, byte [rsi + r12 + 23], 1 - QUAD $0x182654203a0f4666; BYTE $0x01 // pinsrb xmm10, byte [rsi + r12 + 24], 1 - QUAD $0x19264c203a0f4266; BYTE $0x01 // pinsrb xmm1, byte [rsi + r12 + 25], 1 - QUAD $0x1a265c203a0f4666; BYTE $0x01 // pinsrb xmm11, byte [rsi + r12 + 26], 1 - QUAD $0x1b264c203a0f4666; BYTE $0x01 // pinsrb xmm9, byte [rsi + r12 + 27], 1 - QUAD $0x1c2664203a0f4266; BYTE $0x01 // pinsrb xmm4, byte [rsi + r12 + 28], 1 - QUAD $0x1d266c203a0f4666; BYTE $0x01 // pinsrb xmm13, byte [rsi + r12 + 29], 1 - QUAD $0x1e2664203a0f4666; BYTE $0x01 // pinsrb xmm12, byte [rsi + r12 + 30], 1 + QUAD $0x13367c203a0f4266; BYTE $0x01 // pinsrb xmm7, byte [rsi + r14 + 19], 1 + QUAD $0x143674203a0f4266; BYTE $0x01 // pinsrb xmm6, byte [rsi + r14 + 20], 1 + QUAD $0x153654203a0f4266; BYTE $0x01 // pinsrb xmm2, byte [rsi + r14 + 21], 1 + QUAD $0x16365c203a0f4266; BYTE $0x01 // pinsrb xmm3, byte [rsi + r14 + 22], 1 + QUAD $0x173644203a0f4666; BYTE $0x01 // pinsrb xmm8, byte [rsi + r14 + 23], 1 + QUAD $0x183654203a0f4666; BYTE $0x01 // pinsrb xmm10, byte [rsi + r14 + 24], 1 + QUAD $0x19364c203a0f4266; BYTE $0x01 // pinsrb xmm1, byte [rsi + r14 + 25], 1 + QUAD $0x1a365c203a0f4666; BYTE $0x01 // pinsrb xmm11, byte [rsi + r14 + 26], 1 + QUAD $0x1b364c203a0f4666; BYTE $0x01 // pinsrb xmm9, byte [rsi + r14 + 27], 1 + QUAD $0x1c3664203a0f4266; BYTE $0x01 // pinsrb xmm4, byte [rsi + r14 + 28], 1 + QUAD $0x1d366c203a0f4666; BYTE $0x01 // pinsrb xmm13, byte [rsi + r14 + 29], 1 + QUAD $0x1e3664203a0f4666; BYTE $0x01 // pinsrb xmm12, byte [rsi + r14 + 30], 1 LONG $0x0654b60f; BYTE $0x1f // movzx edx, byte [rsi + rax + 31] LONG $0xc26e0f66 // movd xmm0, edx - QUAD $0x1f2644203a0f4266; BYTE $0x01 // pinsrb xmm0, byte [rsi + r12 + 31], 1 - LONG $0x24548b48; BYTE $0x40 // mov rdx, qword [rsp + 64] + QUAD $0x1f3644203a0f4266; BYTE $0x01 // pinsrb xmm0, byte [rsi + r14 + 31], 1 + LONG $0x24548b48; BYTE $0x50 // mov rdx, qword [rsp + 80] QUAD $0x0213167c203a0f66 // pinsrb xmm7, byte [rsi + rdx + 19], 2 QUAD $0x02141674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 20], 2 QUAD $0x02151654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 21], 2 @@ -6276,15 +6730,15 @@ LBB1_87: QUAD $0x132e7c203a0f4266; BYTE $0x05 // pinsrb xmm7, byte [rsi + r13 + 19], 5 QUAD $0x06130e7c203a0f66 // pinsrb xmm7, byte [rsi + rcx + 19], 6 QUAD $0x07133e7c203a0f66 // pinsrb xmm7, byte [rsi + rdi + 19], 7 - LONG $0x24648b4c; BYTE $0x48 // mov r12, qword [rsp + 72] - QUAD $0x13267c203a0f4266; BYTE $0x08 // pinsrb xmm7, byte [rsi + r12 + 19], 8 + LONG $0x24748b4c; BYTE $0x38 // mov r14, qword [rsp + 56] + QUAD $0x13367c203a0f4266; BYTE $0x08 // pinsrb xmm7, byte [rsi + r14 + 19], 8 QUAD $0x130e7c203a0f4266; BYTE $0x09 // pinsrb xmm7, byte [rsi + r9 + 19], 9 QUAD $0x0a131e7c203a0f66 // pinsrb xmm7, byte [rsi + rbx + 19], 10 - QUAD $0x13367c203a0f4266; BYTE $0x0b // pinsrb xmm7, byte [rsi + r14 + 19], 11 - QUAD $0x133e7c203a0f4266; BYTE $0x0c // pinsrb xmm7, byte [rsi + r15 + 19], 12 - LONG $0x24548b48; BYTE $0x70 // mov rdx, qword [rsp + 112] + QUAD $0x133e7c203a0f4266; BYTE $0x0b // pinsrb xmm7, byte [rsi + r15 + 19], 11 + QUAD $0x13267c203a0f4266; BYTE $0x0c // pinsrb xmm7, byte [rsi + r12 + 19], 12 + LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] QUAD $0x0d13167c203a0f66 // pinsrb xmm7, byte [rsi + rdx + 19], 13 - LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] QUAD $0x0e13067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 19], 14 QUAD $0x13067c203a0f4266; BYTE $0x0f // pinsrb xmm7, byte [rsi + r8 + 19], 15 QUAD $0x141674203a0f4266; BYTE $0x03 // pinsrb xmm6, byte [rsi + r10 + 20], 3 @@ -6292,16 +6746,16 @@ LBB1_87: QUAD $0x142e74203a0f4266; BYTE $0x05 // pinsrb xmm6, byte [rsi + r13 + 20], 5 QUAD $0x06140e74203a0f66 // pinsrb xmm6, byte [rsi + rcx + 20], 6 QUAD $0x07143e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 20], 7 - QUAD $0x142674203a0f4266; BYTE $0x08 // pinsrb xmm6, byte [rsi + r12 + 20], 8 + QUAD $0x143674203a0f4266; BYTE $0x08 // pinsrb xmm6, byte [rsi + r14 + 20], 8 QUAD $0x140e74203a0f4266; BYTE $0x09 // pinsrb xmm6, byte [rsi + r9 + 20], 9 QUAD $0x0a141e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 20], 10 - QUAD $0x143674203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rsi + r14 + 20], 11 - QUAD $0x143e74203a0f4266; BYTE $0x0c // pinsrb xmm6, byte [rsi + r15 + 20], 12 + QUAD $0x143e74203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rsi + r15 + 20], 11 + QUAD $0x142674203a0f4266; BYTE $0x0c // pinsrb xmm6, byte [rsi + r12 + 20], 12 QUAD $0x0d141674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 20], 13 QUAD $0x0e140674203a0f66 // pinsrb xmm6, byte [rsi + rax + 20], 14 - QUAD $0x0000c024aceb0f66; BYTE $0x00 // por xmm5, oword [rsp + 192] + QUAD $0x0000a024aceb0f66; BYTE $0x00 // por xmm5, oword [rsp + 160] QUAD $0x140674203a0f4266; BYTE $0x0f // pinsrb xmm6, byte [rsi + r8 + 20], 15 - QUAD $0x00d024bc6f0f4466; WORD $0x0000 // movdqa xmm15, oword [rsp + 208] + QUAD $0x00c024bc6f0f4466; WORD $0x0000 // movdqa xmm15, oword [rsp + 192] LONG $0x740f4166; BYTE $0xff // pcmpeqb xmm7, xmm15 QUAD $0x000000c0bddb0f66 // pand xmm7, oword 192[rbp] /* [rip + .LCPI1_12] */ LONG $0x740f4166; BYTE $0xf7 // pcmpeqb xmm6, xmm15 @@ -6312,11 +6766,11 @@ LBB1_87: QUAD $0x152e54203a0f4266; BYTE $0x05 // pinsrb xmm2, byte [rsi + r13 + 21], 5 QUAD $0x06150e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 21], 6 QUAD $0x07153e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 21], 7 - QUAD $0x152654203a0f4266; BYTE $0x08 // pinsrb xmm2, byte [rsi + r12 + 21], 8 + QUAD $0x153654203a0f4266; BYTE $0x08 // pinsrb xmm2, byte [rsi + r14 + 21], 8 QUAD $0x150e54203a0f4266; BYTE $0x09 // pinsrb xmm2, byte [rsi + r9 + 21], 9 QUAD $0x0a151e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 21], 10 - QUAD $0x153654203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rsi + r14 + 21], 11 - QUAD $0x153e54203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rsi + r15 + 21], 12 + QUAD $0x153e54203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rsi + r15 + 21], 11 + QUAD $0x152654203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rsi + r12 + 21], 12 QUAD $0x0d151654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 21], 13 QUAD $0x0e150654203a0f66 // pinsrb xmm2, byte [rsi + rax + 21], 14 QUAD $0x150654203a0f4266; BYTE $0x0f // pinsrb xmm2, byte [rsi + r8 + 21], 15 @@ -6330,11 +6784,11 @@ LBB1_87: QUAD $0x162e5c203a0f4266; BYTE $0x05 // pinsrb xmm3, byte [rsi + r13 + 22], 5 QUAD $0x06160e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 22], 6 QUAD $0x07163e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 22], 7 - QUAD $0x16265c203a0f4266; BYTE $0x08 // pinsrb xmm3, byte [rsi + r12 + 22], 8 + QUAD $0x16365c203a0f4266; BYTE $0x08 // pinsrb xmm3, byte [rsi + r14 + 22], 8 QUAD $0x160e5c203a0f4266; BYTE $0x09 // pinsrb xmm3, byte [rsi + r9 + 22], 9 QUAD $0x0a161e5c203a0f66 // pinsrb xmm3, byte [rsi + rbx + 22], 10 - QUAD $0x16365c203a0f4266; BYTE $0x0b // pinsrb xmm3, byte [rsi + r14 + 22], 11 - QUAD $0x163e5c203a0f4266; BYTE $0x0c // pinsrb xmm3, byte [rsi + r15 + 22], 12 + QUAD $0x163e5c203a0f4266; BYTE $0x0b // pinsrb xmm3, byte [rsi + r15 + 22], 11 + QUAD $0x16265c203a0f4266; BYTE $0x0c // pinsrb xmm3, byte [rsi + r12 + 22], 12 QUAD $0x0d16165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 22], 13 QUAD $0x0e16065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 22], 14 QUAD $0x16065c203a0f4266; BYTE $0x0f // pinsrb xmm3, byte [rsi + r8 + 22], 15 @@ -6343,11 +6797,11 @@ LBB1_87: QUAD $0x172e44203a0f4666; BYTE $0x05 // pinsrb xmm8, byte [rsi + r13 + 23], 5 QUAD $0x170e44203a0f4466; BYTE $0x06 // pinsrb xmm8, byte [rsi + rcx + 23], 6 QUAD $0x173e44203a0f4466; BYTE $0x07 // pinsrb xmm8, byte [rsi + rdi + 23], 7 - QUAD $0x172644203a0f4666; BYTE $0x08 // pinsrb xmm8, byte [rsi + r12 + 23], 8 + QUAD $0x173644203a0f4666; BYTE $0x08 // pinsrb xmm8, byte [rsi + r14 + 23], 8 QUAD $0x170e44203a0f4666; BYTE $0x09 // pinsrb xmm8, byte [rsi + r9 + 23], 9 QUAD $0x171e44203a0f4466; BYTE $0x0a // pinsrb xmm8, byte [rsi + rbx + 23], 10 - QUAD $0x173644203a0f4666; BYTE $0x0b // pinsrb xmm8, byte [rsi + r14 + 23], 11 - QUAD $0x173e44203a0f4666; BYTE $0x0c // pinsrb xmm8, byte [rsi + r15 + 23], 12 + QUAD $0x173e44203a0f4666; BYTE $0x0b // pinsrb xmm8, byte [rsi + r15 + 23], 11 + QUAD $0x172644203a0f4666; BYTE $0x0c // pinsrb xmm8, byte [rsi + r12 + 23], 12 QUAD $0x171644203a0f4466; BYTE $0x0d // pinsrb xmm8, byte [rsi + rdx + 23], 13 QUAD $0x170644203a0f4466; BYTE $0x0e // pinsrb xmm8, byte [rsi + rax + 23], 14 QUAD $0x170644203a0f4666; BYTE $0x0f // pinsrb xmm8, byte [rsi + r8 + 23], 15 @@ -6364,11 +6818,11 @@ LBB1_87: QUAD $0x192e4c203a0f4266; BYTE $0x05 // pinsrb xmm1, byte [rsi + r13 + 25], 5 QUAD $0x06190e4c203a0f66 // pinsrb xmm1, byte [rsi + rcx + 25], 6 QUAD $0x07193e4c203a0f66 // pinsrb xmm1, byte [rsi + rdi + 25], 7 - QUAD $0x19264c203a0f4266; BYTE $0x08 // pinsrb xmm1, byte [rsi + r12 + 25], 8 + QUAD $0x19364c203a0f4266; BYTE $0x08 // pinsrb xmm1, byte [rsi + r14 + 25], 8 QUAD $0x190e4c203a0f4266; BYTE $0x09 // pinsrb xmm1, byte [rsi + r9 + 25], 9 QUAD $0x0a191e4c203a0f66 // pinsrb xmm1, byte [rsi + rbx + 25], 10 - QUAD $0x19364c203a0f4266; BYTE $0x0b // pinsrb xmm1, byte [rsi + r14 + 25], 11 - QUAD $0x193e4c203a0f4266; BYTE $0x0c // pinsrb xmm1, byte [rsi + r15 + 25], 12 + QUAD $0x193e4c203a0f4266; BYTE $0x0b // pinsrb xmm1, byte [rsi + r15 + 25], 11 + QUAD $0x19264c203a0f4266; BYTE $0x0c // pinsrb xmm1, byte [rsi + r12 + 25], 12 QUAD $0x0d19164c203a0f66 // pinsrb xmm1, byte [rsi + rdx + 25], 13 QUAD $0x0e19064c203a0f66 // pinsrb xmm1, byte [rsi + rax + 25], 14 QUAD $0x19064c203a0f4266; BYTE $0x0f // pinsrb xmm1, byte [rsi + r8 + 25], 15 @@ -6383,11 +6837,11 @@ LBB1_87: QUAD $0x182e54203a0f4666; BYTE $0x05 // pinsrb xmm10, byte [rsi + r13 + 24], 5 QUAD $0x180e54203a0f4466; BYTE $0x06 // pinsrb xmm10, byte [rsi + rcx + 24], 6 QUAD $0x183e54203a0f4466; BYTE $0x07 // pinsrb xmm10, byte [rsi + rdi + 24], 7 - QUAD $0x182654203a0f4666; BYTE $0x08 // pinsrb xmm10, byte [rsi + r12 + 24], 8 + QUAD $0x183654203a0f4666; BYTE $0x08 // pinsrb xmm10, byte [rsi + r14 + 24], 8 QUAD $0x180e54203a0f4666; BYTE $0x09 // pinsrb xmm10, byte [rsi + r9 + 24], 9 QUAD $0x181e54203a0f4466; BYTE $0x0a // pinsrb xmm10, byte [rsi + rbx + 24], 10 - QUAD $0x183654203a0f4666; BYTE $0x0b // pinsrb xmm10, byte [rsi + r14 + 24], 11 - QUAD $0x183e54203a0f4666; BYTE $0x0c // pinsrb xmm10, byte [rsi + r15 + 24], 12 + QUAD $0x183e54203a0f4666; BYTE $0x0b // pinsrb xmm10, byte [rsi + r15 + 24], 11 + QUAD $0x182654203a0f4666; BYTE $0x0c // pinsrb xmm10, byte [rsi + r12 + 24], 12 QUAD $0x181654203a0f4466; BYTE $0x0d // pinsrb xmm10, byte [rsi + rdx + 24], 13 QUAD $0x180654203a0f4466; BYTE $0x0e // pinsrb xmm10, byte [rsi + rax + 24], 14 QUAD $0x180654203a0f4666; BYTE $0x0f // pinsrb xmm10, byte [rsi + r8 + 24], 15 @@ -6398,11 +6852,11 @@ LBB1_87: QUAD $0x1a2e5c203a0f4666; BYTE $0x05 // pinsrb xmm11, byte [rsi + r13 + 26], 5 QUAD $0x1a0e5c203a0f4466; BYTE $0x06 // pinsrb xmm11, byte [rsi + rcx + 26], 6 QUAD $0x1a3e5c203a0f4466; BYTE $0x07 // pinsrb xmm11, byte [rsi + rdi + 26], 7 - QUAD $0x1a265c203a0f4666; BYTE $0x08 // pinsrb xmm11, byte [rsi + r12 + 26], 8 + QUAD $0x1a365c203a0f4666; BYTE $0x08 // pinsrb xmm11, byte [rsi + r14 + 26], 8 QUAD $0x1a0e5c203a0f4666; BYTE $0x09 // pinsrb xmm11, byte [rsi + r9 + 26], 9 QUAD $0x1a1e5c203a0f4466; BYTE $0x0a // pinsrb xmm11, byte [rsi + rbx + 26], 10 - QUAD $0x1a365c203a0f4666; BYTE $0x0b // pinsrb xmm11, byte [rsi + r14 + 26], 11 - QUAD $0x1a3e5c203a0f4666; BYTE $0x0c // pinsrb xmm11, byte [rsi + r15 + 26], 12 + QUAD $0x1a3e5c203a0f4666; BYTE $0x0b // pinsrb xmm11, byte [rsi + r15 + 26], 11 + QUAD $0x1a265c203a0f4666; BYTE $0x0c // pinsrb xmm11, byte [rsi + r12 + 26], 12 QUAD $0x1a165c203a0f4466; BYTE $0x0d // pinsrb xmm11, byte [rsi + rdx + 26], 13 QUAD $0x1a065c203a0f4466; BYTE $0x0e // pinsrb xmm11, byte [rsi + rax + 26], 14 QUAD $0x1a065c203a0f4666; BYTE $0x0f // pinsrb xmm11, byte [rsi + r8 + 26], 15 @@ -6415,11 +6869,11 @@ LBB1_87: QUAD $0x1b2e4c203a0f4666; BYTE $0x05 // pinsrb xmm9, byte [rsi + r13 + 27], 5 QUAD $0x1b0e4c203a0f4466; BYTE $0x06 // pinsrb xmm9, byte [rsi + rcx + 27], 6 QUAD $0x1b3e4c203a0f4466; BYTE $0x07 // pinsrb xmm9, byte [rsi + rdi + 27], 7 - QUAD $0x1b264c203a0f4666; BYTE $0x08 // pinsrb xmm9, byte [rsi + r12 + 27], 8 + QUAD $0x1b364c203a0f4666; BYTE $0x08 // pinsrb xmm9, byte [rsi + r14 + 27], 8 QUAD $0x1b0e4c203a0f4666; BYTE $0x09 // pinsrb xmm9, byte [rsi + r9 + 27], 9 QUAD $0x1b1e4c203a0f4466; BYTE $0x0a // pinsrb xmm9, byte [rsi + rbx + 27], 10 - QUAD $0x1b364c203a0f4666; BYTE $0x0b // pinsrb xmm9, byte [rsi + r14 + 27], 11 - QUAD $0x1b3e4c203a0f4666; BYTE $0x0c // pinsrb xmm9, byte [rsi + r15 + 27], 12 + QUAD $0x1b3e4c203a0f4666; BYTE $0x0b // pinsrb xmm9, byte [rsi + r15 + 27], 11 + QUAD $0x1b264c203a0f4666; BYTE $0x0c // pinsrb xmm9, byte [rsi + r12 + 27], 12 QUAD $0x1b164c203a0f4466; BYTE $0x0d // pinsrb xmm9, byte [rsi + rdx + 27], 13 QUAD $0x1b064c203a0f4466; BYTE $0x0e // pinsrb xmm9, byte [rsi + rax + 27], 14 QUAD $0x1b064c203a0f4666; BYTE $0x0f // pinsrb xmm9, byte [rsi + r8 + 27], 15 @@ -6428,11 +6882,11 @@ LBB1_87: QUAD $0x1c2e64203a0f4266; BYTE $0x05 // pinsrb xmm4, byte [rsi + r13 + 28], 5 QUAD $0x061c0e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 28], 6 QUAD $0x071c3e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 28], 7 - QUAD $0x1c2664203a0f4266; BYTE $0x08 // pinsrb xmm4, byte [rsi + r12 + 28], 8 + QUAD $0x1c3664203a0f4266; BYTE $0x08 // pinsrb xmm4, byte [rsi + r14 + 28], 8 QUAD $0x1c0e64203a0f4266; BYTE $0x09 // pinsrb xmm4, byte [rsi + r9 + 28], 9 QUAD $0x0a1c1e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 28], 10 - QUAD $0x1c3664203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r14 + 28], 11 - QUAD $0x1c3e64203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r15 + 28], 12 + QUAD $0x1c3e64203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r15 + 28], 11 + QUAD $0x1c2664203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r12 + 28], 12 QUAD $0x0d1c1664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 28], 13 QUAD $0x0e1c0664203a0f66 // pinsrb xmm4, byte [rsi + rax + 28], 14 QUAD $0x1c0664203a0f4266; BYTE $0x0f // pinsrb xmm4, byte [rsi + r8 + 28], 15 @@ -6441,11 +6895,11 @@ LBB1_87: QUAD $0x1d2e6c203a0f4666; BYTE $0x05 // pinsrb xmm13, byte [rsi + r13 + 29], 5 QUAD $0x1d0e6c203a0f4466; BYTE $0x06 // pinsrb xmm13, byte [rsi + rcx + 29], 6 QUAD $0x1d3e6c203a0f4466; BYTE $0x07 // pinsrb xmm13, byte [rsi + rdi + 29], 7 - QUAD $0x1d266c203a0f4666; BYTE $0x08 // pinsrb xmm13, byte [rsi + r12 + 29], 8 + QUAD $0x1d366c203a0f4666; BYTE $0x08 // pinsrb xmm13, byte [rsi + r14 + 29], 8 QUAD $0x1d0e6c203a0f4666; BYTE $0x09 // pinsrb xmm13, byte [rsi + r9 + 29], 9 QUAD $0x1d1e6c203a0f4466; BYTE $0x0a // pinsrb xmm13, byte [rsi + rbx + 29], 10 - QUAD $0x1d366c203a0f4666; BYTE $0x0b // pinsrb xmm13, byte [rsi + r14 + 29], 11 - QUAD $0x1d3e6c203a0f4666; BYTE $0x0c // pinsrb xmm13, byte [rsi + r15 + 29], 12 + QUAD $0x1d3e6c203a0f4666; BYTE $0x0b // pinsrb xmm13, byte [rsi + r15 + 29], 11 + QUAD $0x1d266c203a0f4666; BYTE $0x0c // pinsrb xmm13, byte [rsi + r12 + 29], 12 QUAD $0x1d166c203a0f4466; BYTE $0x0d // pinsrb xmm13, byte [rsi + rdx + 29], 13 QUAD $0x1d066c203a0f4466; BYTE $0x0e // pinsrb xmm13, byte [rsi + rax + 29], 14 LONG $0x6f0f4166; BYTE $0xcf // movdqa xmm1, xmm15 @@ -6468,19 +6922,19 @@ LBB1_87: QUAD $0x061f0e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 31], 6 QUAD $0x1e3e64203a0f4466; BYTE $0x07 // pinsrb xmm12, byte [rsi + rdi + 30], 7 QUAD $0x071f3e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 31], 7 - QUAD $0x1e2664203a0f4666; BYTE $0x08 // pinsrb xmm12, byte [rsi + r12 + 30], 8 - QUAD $0x1f2644203a0f4266; BYTE $0x08 // pinsrb xmm0, byte [rsi + r12 + 31], 8 + QUAD $0x1e3664203a0f4666; BYTE $0x08 // pinsrb xmm12, byte [rsi + r14 + 30], 8 + QUAD $0x1f3644203a0f4266; BYTE $0x08 // pinsrb xmm0, byte [rsi + r14 + 31], 8 QUAD $0x1e0e64203a0f4666; BYTE $0x09 // pinsrb xmm12, byte [rsi + r9 + 30], 9 QUAD $0x1f0e44203a0f4266; BYTE $0x09 // pinsrb xmm0, byte [rsi + r9 + 31], 9 QUAD $0x1e1e64203a0f4466; BYTE $0x0a // pinsrb xmm12, byte [rsi + rbx + 30], 10 QUAD $0x0a1f1e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 31], 10 - QUAD $0x1e3664203a0f4666; BYTE $0x0b // pinsrb xmm12, byte [rsi + r14 + 30], 11 - QUAD $0x1f3644203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r14 + 31], 11 - QUAD $0x1e3e64203a0f4666; BYTE $0x0c // pinsrb xmm12, byte [rsi + r15 + 30], 12 - QUAD $0x1f3e44203a0f4266; BYTE $0x0c // pinsrb xmm0, byte [rsi + r15 + 31], 12 + QUAD $0x0000008824bc8b48 // mov rdi, qword [rsp + 136] + QUAD $0x1e3e64203a0f4666; BYTE $0x0b // pinsrb xmm12, byte [rsi + r15 + 30], 11 + QUAD $0x1f3e44203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r15 + 31], 11 + QUAD $0x1e2664203a0f4666; BYTE $0x0c // pinsrb xmm12, byte [rsi + r12 + 30], 12 + QUAD $0x1f2644203a0f4266; BYTE $0x0c // pinsrb xmm0, byte [rsi + r12 + 31], 12 QUAD $0x1e1664203a0f4466; BYTE $0x0d // pinsrb xmm12, byte [rsi + rdx + 30], 13 QUAD $0x0d1f1644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 31], 13 - QUAD $0x0000008824b48b4c // mov r14, qword [rsp + 136] QUAD $0x1e0664203a0f4466; BYTE $0x0e // pinsrb xmm12, byte [rsi + rax + 30], 14 QUAD $0x0e1f0644203a0f66 // pinsrb xmm0, byte [rsi + rax + 31], 14 QUAD $0x1e0664203a0f4666; BYTE $0x0f // pinsrb xmm12, byte [rsi + r8 + 30], 15 @@ -6495,7 +6949,7 @@ LBB1_87: LONG $0xeb0f4166; BYTE $0xc5 // por xmm0, xmm13 LONG $0x6f0f4166; BYTE $0xc8 // movdqa xmm1, xmm8 LONG $0xc8600f66 // punpcklbw xmm1, xmm0 - QUAD $0x0000e024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 224] + QUAD $0x0000b024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 176] LONG $0xd46f0f66 // movdqa xmm2, xmm4 LONG $0x600f4166; BYTE $0xd6 // punpcklbw xmm2, xmm14 LONG $0xda6f0f66 // movdqa xmm3, xmm2 @@ -6507,40 +6961,40 @@ LBB1_87: LONG $0x610f4166; BYTE $0xc0 // punpcklwd xmm0, xmm8 LONG $0x690f4166; BYTE $0xe0 // punpckhwd xmm4, xmm8 QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] - LONG $0x7f0f41f3; WORD $0x8e64; BYTE $0x30 // movdqu oword [r14 + 4*rcx + 48], xmm4 - LONG $0x7f0f41f3; WORD $0x8e44; BYTE $0x20 // movdqu oword [r14 + 4*rcx + 32], xmm0 - LONG $0x7f0f41f3; WORD $0x8e54; BYTE $0x10 // movdqu oword [r14 + 4*rcx + 16], xmm2 - LONG $0x7f0f41f3; WORD $0x8e1c // movdqu oword [r14 + 4*rcx], xmm3 + LONG $0x647f0ff3; WORD $0x308f // movdqu oword [rdi + 4*rcx + 48], xmm4 + LONG $0x447f0ff3; WORD $0x208f // movdqu oword [rdi + 4*rcx + 32], xmm0 + LONG $0x547f0ff3; WORD $0x108f // movdqu oword [rdi + 4*rcx + 16], xmm2 + LONG $0x1c7f0ff3; BYTE $0x8f // movdqu oword [rdi + 4*rcx], xmm3 LONG $0x10c18348 // add rcx, 16 WORD $0x8948; BYTE $0xc8 // mov rax, rcx - QUAD $0x000000f8248c3b48 // cmp rcx, qword [rsp + 248] - JNE LBB1_87 + QUAD $0x000000e8248c3b48 // cmp rcx, qword [rsp + 232] + JNE LBB1_88 QUAD $0x0000010024bc8b4c // mov r15, qword [rsp + 256] - QUAD $0x000000f824bc3b4c // cmp r15, qword [rsp + 248] - LONG $0x245c8a44; BYTE $0x08 // mov r11b, byte [rsp + 8] + QUAD $0x000000e824bc3b4c // cmp r15, qword [rsp + 232] + LONG $0x245c8a44; BYTE $0x04 // mov r11b, byte [rsp + 4] QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] - JNE LBB1_89 - JMP LBB1_92 + JNE LBB1_90 + JMP LBB1_93 -LBB1_66: +LBB1_67: LONG $0xf0e78349 // and r15, -16 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi QUAD $0x0000010824848948 // mov qword [rsp + 264], rax - QUAD $0x000000f824bc894c // mov qword [rsp + 248], r15 + QUAD $0x000000e824bc894c // mov qword [rsp + 232], r15 LONG $0xbe048d4b // lea rax, [r14 + 4*r15] - LONG $0x24448948; BYTE $0x50 // mov qword [rsp + 80], rax + LONG $0x24448948; BYTE $0x38 // mov qword [rsp + 56], rax LONG $0xc3b60f41 // movzx eax, r11b LONG $0xc86e0f66 // movd xmm1, eax LONG $0xc0ef0f66 // pxor xmm0, xmm0 LONG $0x00380f66; BYTE $0xc8 // pshufb xmm1, xmm0 - QUAD $0x0000b0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 176], xmm1 + QUAD $0x0000c0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 192], xmm1 WORD $0xc031 // xor eax, eax QUAD $0x0000008824b4894c // mov qword [rsp + 136], r14 -LBB1_67: +LBB1_68: WORD $0x8949; BYTE $0xc7 // mov r15, rax QUAD $0x0000009824848948 // mov qword [rsp + 152], rax LONG $0x05e7c149 // shl r15, 5 @@ -6554,7 +7008,7 @@ LBB1_67: WORD $0x894c; BYTE $0xfb // mov rbx, r15 WORD $0x894d; BYTE $0xfe // mov r14, r15 WORD $0x894c; BYTE $0xf8 // mov rax, r15 - LONG $0x247c894c; BYTE $0x70 // mov qword [rsp + 112], r15 + LONG $0x247c894c; BYTE $0x68 // mov qword [rsp + 104], r15 LONG $0x14b60f42; BYTE $0x3e // movzx edx, byte [rsi + r15] LONG $0x6e0f4466; BYTE $0xfa // movd xmm15, edx LONG $0x54b60f42; WORD $0x013e // movzx edx, byte [rsi + r15 + 1] @@ -6574,12 +7028,12 @@ LBB1_67: QUAD $0x0000d024847f0f66; BYTE $0x00 // movdqa oword [rsp + 208], xmm0 LONG $0x54b60f42; WORD $0x083e // movzx edx, byte [rsi + r15 + 8] LONG $0xc26e0f66 // movd xmm0, edx - QUAD $0x00012024847f0f66; BYTE $0x00 // movdqa oword [rsp + 288], xmm0 + QUAD $0x0000f024847f0f66; BYTE $0x00 // movdqa oword [rsp + 240], xmm0 LONG $0x54b60f42; WORD $0x093e // movzx edx, byte [rsi + r15 + 9] LONG $0x6e0f4466; BYTE $0xd2 // movd xmm10, edx LONG $0x54b60f42; WORD $0x0a3e // movzx edx, byte [rsi + r15 + 10] LONG $0xc26e0f66 // movd xmm0, edx - QUAD $0x0000a024847f0f66; BYTE $0x00 // movdqa oword [rsp + 160], xmm0 + QUAD $0x0000b024847f0f66; BYTE $0x00 // movdqa oword [rsp + 176], xmm0 LONG $0x54b60f42; WORD $0x0b3e // movzx edx, byte [rsi + r15 + 11] LONG $0x6e0f4466; BYTE $0xda // movd xmm11, edx LONG $0x54b60f42; WORD $0x0c3e // movzx edx, byte [rsi + r15 + 12] @@ -6589,13 +7043,13 @@ LBB1_67: LONG $0x54b60f42; WORD $0x0e3e // movzx edx, byte [rsi + r15 + 14] LONG $0xc26e0f66 // movd xmm0, edx QUAD $0x00011024847f0f66; BYTE $0x00 // movdqa oword [rsp + 272], xmm0 - LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x30 // mov qword [rsp + 48], r15 WORD $0x894d; BYTE $0xfd // mov r13, r15 LONG $0x20cd8349 // or r13, 32 - LONG $0x246c894c; BYTE $0x18 // mov qword [rsp + 24], r13 + LONG $0x246c894c; BYTE $0x28 // mov qword [rsp + 40], r13 LONG $0x40cf8348 // or rdi, 64 LONG $0x60c98348 // or rcx, 96 - QUAD $0x00000080248c8948 // mov qword [rsp + 128], rcx + LONG $0x244c8948; BYTE $0x78 // mov qword [rsp + 120], rcx LONG $0x80ca8149; WORD $0x0000; BYTE $0x00 // or r10, 128 LONG $0xa0c88149; WORD $0x0000; BYTE $0x00 // or r8, 160 LONG $0xc0cc8149; WORD $0x0000; BYTE $0x00 // or r12, 192 @@ -6604,52 +7058,52 @@ LBB1_67: LONG $0x20cb8148; WORD $0x0001; BYTE $0x00 // or rbx, 288 LONG $0x40ce8149; WORD $0x0001; BYTE $0x00 // or r14, 320 LONG $0x01600d48; WORD $0x0000 // or rax, 352 - LONG $0x24448948; BYTE $0x48 // mov qword [rsp + 72], rax - LONG $0x24548b48; BYTE $0x70 // mov rdx, qword [rsp + 112] + QUAD $0x0000008024848948 // mov qword [rsp + 128], rax + LONG $0x24548b48; BYTE $0x68 // mov rdx, qword [rsp + 104] LONG $0x80ca8148; WORD $0x0001; BYTE $0x00 // or rdx, 384 - LONG $0x24548948; BYTE $0x70 // mov qword [rsp + 112], rdx + LONG $0x24548948; BYTE $0x68 // mov qword [rsp + 104], rdx WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x01a00d48; WORD $0x0000 // or rax, 416 - LONG $0x24448948; BYTE $0x28 // mov qword [rsp + 40], rax + LONG $0x24448948; BYTE $0x08 // mov qword [rsp + 8], rax WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x01c00d48; WORD $0x0000 // or rax, 448 - LONG $0x24448948; BYTE $0x30 // mov qword [rsp + 48], rax + LONG $0x24448948; BYTE $0x20 // mov qword [rsp + 32], rax WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x01e00d48; WORD $0x0000 // or rax, 480 - LONG $0x24448948; BYTE $0x20 // mov qword [rsp + 32], rax + LONG $0x24448948; BYTE $0x10 // mov qword [rsp + 16], rax QUAD $0x012e3c203a0f4666 // pinsrb xmm15, byte [rsi + r13], 1 QUAD $0x023e3c203a0f4466 // pinsrb xmm15, byte [rsi + rdi], 2 QUAD $0x030e3c203a0f4466 // pinsrb xmm15, byte [rsi + rcx], 3 QUAD $0x04163c203a0f4666 // pinsrb xmm15, byte [rsi + r10], 4 WORD $0x894d; BYTE $0xc7 // mov r15, r8 - LONG $0x2444894c; BYTE $0x78 // mov qword [rsp + 120], r8 + LONG $0x2444894c; BYTE $0x48 // mov qword [rsp + 72], r8 QUAD $0x05063c203a0f4666 // pinsrb xmm15, byte [rsi + r8], 5 - LONG $0x2464894c; BYTE $0x68 // mov qword [rsp + 104], r12 + LONG $0x2464894c; BYTE $0x60 // mov qword [rsp + 96], r12 QUAD $0x06263c203a0f4666 // pinsrb xmm15, byte [rsi + r12], 6 WORD $0x894d; BYTE $0xc8 // mov r8, r9 QUAD $0x070e3c203a0f4666 // pinsrb xmm15, byte [rsi + r9], 7 WORD $0x894d; BYTE $0xd9 // mov r9, r11 - LONG $0x245c894c; BYTE $0x10 // mov qword [rsp + 16], r11 + LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 QUAD $0x081e3c203a0f4666 // pinsrb xmm15, byte [rsi + r11], 8 LONG $0x245c8948; BYTE $0x40 // mov qword [rsp + 64], rbx QUAD $0x091e3c203a0f4466 // pinsrb xmm15, byte [rsi + rbx], 9 - LONG $0x2474894c; BYTE $0x60 // mov qword [rsp + 96], r14 + LONG $0x2474894c; BYTE $0x58 // mov qword [rsp + 88], r14 QUAD $0x0a363c203a0f4666 // pinsrb xmm15, byte [rsi + r14], 10 - LONG $0x246c8b4c; BYTE $0x48 // mov r13, qword [rsp + 72] + QUAD $0x0000008024ac8b4c // mov r13, qword [rsp + 128] QUAD $0x0b2e3c203a0f4666 // pinsrb xmm15, byte [rsi + r13], 11 QUAD $0x0c163c203a0f4466 // pinsrb xmm15, byte [rsi + rdx], 12 - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] + LONG $0x244c8b48; BYTE $0x08 // mov rcx, qword [rsp + 8] QUAD $0x0d0e3c203a0f4466 // pinsrb xmm15, byte [rsi + rcx], 13 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] + LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] QUAD $0x0e0e3c203a0f4466 // pinsrb xmm15, byte [rsi + rcx], 14 QUAD $0x0f063c203a0f4466 // pinsrb xmm15, byte [rsi + rax], 15 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] + LONG $0x245c8b4c; BYTE $0x28 // mov r11, qword [rsp + 40] QUAD $0x011e6c203a0f4266; BYTE $0x01 // pinsrb xmm5, byte [rsi + r11 + 1], 1 QUAD $0x02013e6c203a0f66 // pinsrb xmm5, byte [rsi + rdi + 1], 2 - QUAD $0x00000080249c8b4c // mov r11, qword [rsp + 128] + LONG $0x245c8b4c; BYTE $0x78 // mov r11, qword [rsp + 120] QUAD $0x011e6c203a0f4266; BYTE $0x03 // pinsrb xmm5, byte [rsi + r11 + 1], 3 QUAD $0x01166c203a0f4266; BYTE $0x04 // pinsrb xmm5, byte [rsi + r10 + 1], 4 - LONG $0x2454894c; BYTE $0x58 // mov qword [rsp + 88], r10 + LONG $0x2454894c; BYTE $0x50 // mov qword [rsp + 80], r10 QUAD $0x013e6c203a0f4266; BYTE $0x05 // pinsrb xmm5, byte [rsi + r15 + 1], 5 QUAD $0x01266c203a0f4266; BYTE $0x06 // pinsrb xmm5, byte [rsi + r12 + 1], 6 QUAD $0x01066c203a0f4266; BYTE $0x07 // pinsrb xmm5, byte [rsi + r8 + 1], 7 @@ -6660,46 +7114,46 @@ LBB1_67: QUAD $0x012e6c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rsi + r13 + 1], 11 WORD $0x894d; BYTE $0xe8 // mov r8, r13 QUAD $0x0c01166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 1], 12 - LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] + LONG $0x24548b48; BYTE $0x08 // mov rdx, qword [rsp + 8] QUAD $0x0d01166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 1], 13 QUAD $0x0e010e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 1], 14 QUAD $0x0f01066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 1], 15 - QUAD $0x00b0248c6f0f4466; WORD $0x0000 // movdqa xmm9, oword [rsp + 176] + QUAD $0x00c0248c6f0f4466; WORD $0x0000 // movdqa xmm9, oword [rsp + 192] LONG $0x740f4166; BYTE $0xe9 // pcmpeqb xmm5, xmm9 LONG $0xfd6f0f66 // movdqa xmm7, xmm5 QUAD $0x000000a0a56f0f66 // movdqa xmm4, oword 160[rbp] /* [rip + .LCPI1_10] */ LONG $0xfcdb0f66 // pand xmm7, xmm4 LONG $0xfdf80f66 // psubb xmm7, xmm5 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] LONG $0x0654b60f; BYTE $0x0f // movzx edx, byte [rsi + rax + 15] LONG $0x6e0f4466; BYTE $0xf2 // movd xmm14, edx LONG $0x740f4566; BYTE $0xf9 // pcmpeqb xmm15, xmm9 - LONG $0x245c8b48; BYTE $0x18 // mov rbx, qword [rsp + 24] + LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] QUAD $0x01021e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 2], 1 QUAD $0x02023e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 2], 2 WORD $0x894d; BYTE $0xdc // mov r12, r11 QUAD $0x021e74203a0f4266; BYTE $0x03 // pinsrb xmm6, byte [rsi + r11 + 2], 3 QUAD $0x021674203a0f4266; BYTE $0x04 // pinsrb xmm6, byte [rsi + r10 + 2], 4 - LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] + LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] QUAD $0x05020e74203a0f66 // pinsrb xmm6, byte [rsi + rcx + 2], 5 - LONG $0x245c8b4c; BYTE $0x68 // mov r11, qword [rsp + 104] + LONG $0x245c8b4c; BYTE $0x60 // mov r11, qword [rsp + 96] QUAD $0x021e74203a0f4266; BYTE $0x06 // pinsrb xmm6, byte [rsi + r11 + 2], 6 - QUAD $0x000000c024bc894c // mov qword [rsp + 192], r15 + LONG $0x247c894c; BYTE $0x70 // mov qword [rsp + 112], r15 QUAD $0x023e74203a0f4266; BYTE $0x07 // pinsrb xmm6, byte [rsi + r15 + 2], 7 - LONG $0x246c8b4c; BYTE $0x10 // mov r13, qword [rsp + 16] + LONG $0x246c8b4c; BYTE $0x18 // mov r13, qword [rsp + 24] QUAD $0x022e74203a0f4266; BYTE $0x08 // pinsrb xmm6, byte [rsi + r13 + 2], 8 LONG $0x24748b4c; BYTE $0x40 // mov r14, qword [rsp + 64] QUAD $0x023674203a0f4266; BYTE $0x09 // pinsrb xmm6, byte [rsi + r14 + 2], 9 - LONG $0x244c8b4c; BYTE $0x60 // mov r9, qword [rsp + 96] + LONG $0x244c8b4c; BYTE $0x58 // mov r9, qword [rsp + 88] QUAD $0x020e74203a0f4266; BYTE $0x0a // pinsrb xmm6, byte [rsi + r9 + 2], 10 QUAD $0x020674203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rsi + r8 + 2], 11 - LONG $0x24548b48; BYTE $0x70 // mov rdx, qword [rsp + 112] + LONG $0x24548b48; BYTE $0x68 // mov rdx, qword [rsp + 104] QUAD $0x0c021674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 2], 12 - LONG $0x24548b4c; BYTE $0x28 // mov r10, qword [rsp + 40] + LONG $0x24548b4c; BYTE $0x08 // mov r10, qword [rsp + 8] QUAD $0x021674203a0f4266; BYTE $0x0d // pinsrb xmm6, byte [rsi + r10 + 2], 13 - LONG $0x24548b48; BYTE $0x30 // mov rdx, qword [rsp + 48] - QUAD $0x0e021674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 2], 14 LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] + QUAD $0x0e021674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 2], 14 + LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] QUAD $0x0f021674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 2], 15 LONG $0xdb0f4466; BYTE $0xfc // pand xmm15, xmm4 LONG $0x740f4166; BYTE $0xf1 // pcmpeqb xmm6, xmm9 @@ -6712,7 +7166,7 @@ LBB1_67: QUAD $0x02033e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 3], 2 WORD $0x894c; BYTE $0xe0 // mov rax, r12 QUAD $0x032654203a0f4266; BYTE $0x03 // pinsrb xmm2, byte [rsi + r12 + 3], 3 - LONG $0x24648b4c; BYTE $0x58 // mov r12, qword [rsp + 88] + LONG $0x24648b4c; BYTE $0x50 // mov r12, qword [rsp + 80] QUAD $0x032654203a0f4266; BYTE $0x04 // pinsrb xmm2, byte [rsi + r12 + 3], 4 QUAD $0x05030e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 3], 5 QUAD $0x031e54203a0f4266; BYTE $0x06 // pinsrb xmm2, byte [rsi + r11 + 3], 6 @@ -6722,12 +7176,12 @@ LBB1_67: QUAD $0x030e54203a0f4266; BYTE $0x0a // pinsrb xmm2, byte [rsi + r9 + 3], 10 WORD $0x894d; BYTE $0xce // mov r14, r9 QUAD $0x030654203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rsi + r8 + 3], 11 - LONG $0x247c8b4c; BYTE $0x70 // mov r15, qword [rsp + 112] + LONG $0x247c8b4c; BYTE $0x68 // mov r15, qword [rsp + 104] QUAD $0x033e54203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rsi + r15 + 3], 12 QUAD $0x031654203a0f4266; BYTE $0x0d // pinsrb xmm2, byte [rsi + r10 + 3], 13 - LONG $0x246c8b4c; BYTE $0x30 // mov r13, qword [rsp + 48] + LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] QUAD $0x032e54203a0f4266; BYTE $0x0e // pinsrb xmm2, byte [rsi + r13 + 3], 14 - LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] + LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] QUAD $0x0f031654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 3], 15 QUAD $0x01041e4c203a0f66 // pinsrb xmm1, byte [rsi + rbx + 4], 1 QUAD $0x02043e4c203a0f66 // pinsrb xmm1, byte [rsi + rdi + 4], 2 @@ -6736,9 +7190,9 @@ LBB1_67: QUAD $0x05040e4c203a0f66 // pinsrb xmm1, byte [rsi + rcx + 4], 5 WORD $0x894c; BYTE $0xd9 // mov rcx, r11 QUAD $0x041e4c203a0f4266; BYTE $0x06 // pinsrb xmm1, byte [rsi + r11 + 4], 6 - QUAD $0x000000c0249c8b4c // mov r11, qword [rsp + 192] + LONG $0x245c8b4c; BYTE $0x70 // mov r11, qword [rsp + 112] QUAD $0x041e4c203a0f4266; BYTE $0x07 // pinsrb xmm1, byte [rsi + r11 + 4], 7 - LONG $0x244c8b4c; BYTE $0x10 // mov r9, qword [rsp + 16] + LONG $0x244c8b4c; BYTE $0x18 // mov r9, qword [rsp + 24] QUAD $0x040e4c203a0f4266; BYTE $0x08 // pinsrb xmm1, byte [rsi + r9 + 4], 8 LONG $0x245c8b48; BYTE $0x40 // mov rbx, qword [rsp + 64] QUAD $0x09041e4c203a0f66 // pinsrb xmm1, byte [rsi + rbx + 4], 9 @@ -6752,7 +7206,7 @@ LBB1_67: QUAD $0x0f04164c203a0f66 // pinsrb xmm1, byte [rsi + rdx + 4], 15 WORD $0x8949; BYTE $0xd2 // mov r10, rdx LONG $0xf7eb0f66 // por xmm6, xmm7 - LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] + LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] LONG $0x1e54b60f; BYTE $0x11 // movzx edx, byte [rsi + rbx + 17] LONG $0xc26e0f66 // movd xmm0, edx LONG $0x740f4166; BYTE $0xd1 // pcmpeqb xmm2, xmm9 @@ -6764,13 +7218,13 @@ LBB1_67: LONG $0xcaeb0f66 // por xmm1, xmm2 LONG $0x1e54b60f; BYTE $0x12 // movzx edx, byte [rsi + rbx + 18] LONG $0xea6e0f66 // movd xmm5, edx - LONG $0x24448b4c; BYTE $0x18 // mov r8, qword [rsp + 24] + LONG $0x24448b4c; BYTE $0x28 // mov r8, qword [rsp + 40] QUAD $0x050644203a0f4666; BYTE $0x01 // pinsrb xmm8, byte [rsi + r8 + 5], 1 QUAD $0x053e44203a0f4466; BYTE $0x02 // pinsrb xmm8, byte [rsi + rdi + 5], 2 QUAD $0x050644203a0f4466; BYTE $0x03 // pinsrb xmm8, byte [rsi + rax + 5], 3 - LONG $0x24548b48; BYTE $0x58 // mov rdx, qword [rsp + 88] + LONG $0x24548b48; BYTE $0x50 // mov rdx, qword [rsp + 80] QUAD $0x051644203a0f4466; BYTE $0x04 // pinsrb xmm8, byte [rsi + rdx + 5], 4 - LONG $0x24548b48; BYTE $0x78 // mov rdx, qword [rsp + 120] + LONG $0x24548b48; BYTE $0x48 // mov rdx, qword [rsp + 72] QUAD $0x051644203a0f4466; BYTE $0x05 // pinsrb xmm8, byte [rsi + rdx + 5], 5 QUAD $0x050e44203a0f4466; BYTE $0x06 // pinsrb xmm8, byte [rsi + rcx + 5], 6 QUAD $0x051e44203a0f4666; BYTE $0x07 // pinsrb xmm8, byte [rsi + r11 + 5], 7 @@ -6780,7 +7234,7 @@ LBB1_67: QUAD $0x052644203a0f4666; BYTE $0x0a // pinsrb xmm8, byte [rsi + r12 + 5], 10 QUAD $0x053644203a0f4666; BYTE $0x0b // pinsrb xmm8, byte [rsi + r14 + 5], 11 QUAD $0x053e44203a0f4666; BYTE $0x0c // pinsrb xmm8, byte [rsi + r15 + 5], 12 - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] + LONG $0x244c8b48; BYTE $0x08 // mov rcx, qword [rsp + 8] QUAD $0x050e44203a0f4466; BYTE $0x0d // pinsrb xmm8, byte [rsi + rcx + 5], 13 QUAD $0x052e44203a0f4666; BYTE $0x0e // pinsrb xmm8, byte [rsi + r13 + 5], 14 QUAD $0x051644203a0f4666; BYTE $0x0f // pinsrb xmm8, byte [rsi + r10 + 5], 15 @@ -6797,33 +7251,33 @@ LBB1_67: QUAD $0x06065c203a0f4266; BYTE $0x01 // pinsrb xmm3, byte [rsi + r8 + 6], 1 QUAD $0x02063e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 6], 2 QUAD $0x0306065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 6], 3 - LONG $0x245c8b4c; BYTE $0x58 // mov r11, qword [rsp + 88] + LONG $0x245c8b4c; BYTE $0x50 // mov r11, qword [rsp + 80] QUAD $0x061e5c203a0f4266; BYTE $0x04 // pinsrb xmm3, byte [rsi + r11 + 6], 4 - LONG $0x244c8b4c; BYTE $0x78 // mov r9, qword [rsp + 120] + LONG $0x244c8b4c; BYTE $0x48 // mov r9, qword [rsp + 72] QUAD $0x060e5c203a0f4266; BYTE $0x05 // pinsrb xmm3, byte [rsi + r9 + 6], 5 - LONG $0x24448b4c; BYTE $0x68 // mov r8, qword [rsp + 104] + LONG $0x24448b4c; BYTE $0x60 // mov r8, qword [rsp + 96] QUAD $0x06065c203a0f4266; BYTE $0x06 // pinsrb xmm3, byte [rsi + r8 + 6], 6 - QUAD $0x000000c024a48b4c // mov r12, qword [rsp + 192] + LONG $0x24648b4c; BYTE $0x70 // mov r12, qword [rsp + 112] QUAD $0x06265c203a0f4266; BYTE $0x07 // pinsrb xmm3, byte [rsi + r12 + 6], 7 - LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] QUAD $0x0806065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 6], 8 LONG $0x245c8b48; BYTE $0x40 // mov rbx, qword [rsp + 64] QUAD $0x09061e5c203a0f66 // pinsrb xmm3, byte [rsi + rbx + 6], 9 - LONG $0x24748b4c; BYTE $0x60 // mov r14, qword [rsp + 96] + LONG $0x24748b4c; BYTE $0x58 // mov r14, qword [rsp + 88] QUAD $0x06365c203a0f4266; BYTE $0x0a // pinsrb xmm3, byte [rsi + r14 + 6], 10 - LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] + QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] QUAD $0x0b060e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 6], 11 QUAD $0x063e5c203a0f4266; BYTE $0x0c // pinsrb xmm3, byte [rsi + r15 + 6], 12 - LONG $0x24548b4c; BYTE $0x28 // mov r10, qword [rsp + 40] + LONG $0x24548b4c; BYTE $0x08 // mov r10, qword [rsp + 8] QUAD $0x06165c203a0f4266; BYTE $0x0d // pinsrb xmm3, byte [rsi + r10 + 6], 13 QUAD $0x062e5c203a0f4266; BYTE $0x0e // pinsrb xmm3, byte [rsi + r13 + 6], 14 - LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + LONG $0x244c8b48; BYTE $0x10 // mov rcx, qword [rsp + 16] QUAD $0x0f060e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 6], 15 QUAD $0x0000d024946f0f66; BYTE $0x00 // movdqa xmm2, oword [rsp + 208] QUAD $0x01071654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 7], 1 QUAD $0x02073e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 7], 2 - QUAD $0x000000e024bc8948 // mov qword [rsp + 224], rdi - QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] + QUAD $0x000000a024bc8948 // mov qword [rsp + 160], rdi + LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] QUAD $0x03070e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 7], 3 QUAD $0x071e54203a0f4266; BYTE $0x04 // pinsrb xmm2, byte [rsi + r11 + 7], 4 QUAD $0x070e54203a0f4266; BYTE $0x05 // pinsrb xmm2, byte [rsi + r9 + 7], 5 @@ -6834,12 +7288,12 @@ LBB1_67: QUAD $0x09071e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 7], 9 QUAD $0x073654203a0f4266; BYTE $0x0a // pinsrb xmm2, byte [rsi + r14 + 7], 10 WORD $0x894d; BYTE $0xf4 // mov r12, r14 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x0b070654203a0f66 // pinsrb xmm2, byte [rsi + rax + 7], 11 QUAD $0x073e54203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rsi + r15 + 7], 12 QUAD $0x071654203a0f4266; BYTE $0x0d // pinsrb xmm2, byte [rsi + r10 + 7], 13 QUAD $0x072e54203a0f4266; BYTE $0x0e // pinsrb xmm2, byte [rsi + r13 + 7], 14 - LONG $0x24748b4c; BYTE $0x20 // mov r14, qword [rsp + 32] + LONG $0x24748b4c; BYTE $0x10 // mov r14, qword [rsp + 16] QUAD $0x073654203a0f4266; BYTE $0x0f // pinsrb xmm2, byte [rsi + r14 + 7], 15 LONG $0x740f4166; BYTE $0xd9 // pcmpeqb xmm3, xmm9 QUAD $0x000000f08d6f0f66 // movdqa xmm1, oword 240[rbp] /* [rip + .LCPI1_15] */ @@ -6850,19 +7304,19 @@ LBB1_67: LONG $0xd1db0f66 // pand xmm2, xmm1 LONG $0xd3eb0f66 // por xmm2, xmm3 LONG $0xca6f0f66 // movdqa xmm1, xmm2 - LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] + LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] LONG $0x1e54b60f; BYTE $0x15 // movzx edx, byte [rsi + rbx + 21] LONG $0xd26e0f66 // movd xmm2, edx - LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] + LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] QUAD $0x091654203a0f4466; BYTE $0x01 // pinsrb xmm10, byte [rsi + rdx + 9], 1 QUAD $0x093e54203a0f4466; BYTE $0x02 // pinsrb xmm10, byte [rsi + rdi + 9], 2 QUAD $0x090e54203a0f4466; BYTE $0x03 // pinsrb xmm10, byte [rsi + rcx + 9], 3 - LONG $0x247c8b48; BYTE $0x58 // mov rdi, qword [rsp + 88] + LONG $0x247c8b48; BYTE $0x50 // mov rdi, qword [rsp + 80] QUAD $0x093e54203a0f4466; BYTE $0x04 // pinsrb xmm10, byte [rsi + rdi + 9], 4 QUAD $0x090e54203a0f4666; BYTE $0x05 // pinsrb xmm10, byte [rsi + r9 + 9], 5 QUAD $0x090654203a0f4666; BYTE $0x06 // pinsrb xmm10, byte [rsi + r8 + 9], 6 QUAD $0x091e54203a0f4666; BYTE $0x07 // pinsrb xmm10, byte [rsi + r11 + 9], 7 - LONG $0x244c8b48; BYTE $0x10 // mov rcx, qword [rsp + 16] + LONG $0x244c8b48; BYTE $0x18 // mov rcx, qword [rsp + 24] QUAD $0x090e54203a0f4466; BYTE $0x08 // pinsrb xmm10, byte [rsi + rcx + 9], 8 LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] QUAD $0x090e54203a0f4466; BYTE $0x09 // pinsrb xmm10, byte [rsi + rcx + 9], 9 @@ -6881,132 +7335,130 @@ LBB1_67: LONG $0xf80f4166; BYTE $0xca // psubb xmm1, xmm10 LONG $0x1e54b60f; BYTE $0x16 // movzx edx, byte [rsi + rbx + 22] LONG $0xda6e0f66 // movd xmm3, edx - QUAD $0x00012024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 288] - LONG $0x24548b4c; BYTE $0x18 // mov r10, qword [rsp + 24] + QUAD $0x0000f024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 240] + LONG $0x24548b4c; BYTE $0x28 // mov r10, qword [rsp + 40] QUAD $0x081664203a0f4266; BYTE $0x01 // pinsrb xmm4, byte [rsi + r10 + 8], 1 - QUAD $0x000000e024a48b4c // mov r12, qword [rsp + 224] + QUAD $0x000000a024a48b4c // mov r12, qword [rsp + 160] QUAD $0x082664203a0f4266; BYTE $0x02 // pinsrb xmm4, byte [rsi + r12 + 8], 2 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] + LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] QUAD $0x03080664203a0f66 // pinsrb xmm4, byte [rsi + rax + 8], 3 QUAD $0x04083e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 8], 4 QUAD $0x080e64203a0f4266; BYTE $0x05 // pinsrb xmm4, byte [rsi + r9 + 8], 5 QUAD $0x080664203a0f4266; BYTE $0x06 // pinsrb xmm4, byte [rsi + r8 + 8], 6 WORD $0x894c; BYTE $0xdb // mov rbx, r11 QUAD $0x081e64203a0f4266; BYTE $0x07 // pinsrb xmm4, byte [rsi + r11 + 8], 7 - LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] + LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] QUAD $0x08081664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 8], 8 QUAD $0x09080e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 8], 9 - LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] + LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] QUAD $0x0a080e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 8], 10 - LONG $0x24748b4c; BYTE $0x48 // mov r14, qword [rsp + 72] + QUAD $0x0000008024b48b4c // mov r14, qword [rsp + 128] QUAD $0x083664203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r14 + 8], 11 QUAD $0x083e64203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r15 + 8], 12 - LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] + LONG $0x247c8b48; BYTE $0x08 // mov rdi, qword [rsp + 8] QUAD $0x0d083e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 8], 13 QUAD $0x082e64203a0f4266; BYTE $0x0e // pinsrb xmm4, byte [rsi + r13 + 8], 14 - LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] + LONG $0x247c8b48; BYTE $0x10 // mov rdi, qword [rsp + 16] QUAD $0x0f083e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 8], 15 LONG $0x740f4166; BYTE $0xe1 // pcmpeqb xmm4, xmm9 LONG $0xdb0f4166; BYTE $0xe0 // pand xmm4, xmm8 - QUAD $0x00a024946f0f4466; WORD $0x0000 // movdqa xmm10, oword [rsp + 160] + QUAD $0x00b024946f0f4466; WORD $0x0000 // movdqa xmm10, oword [rsp + 176] QUAD $0x0a1654203a0f4666; BYTE $0x01 // pinsrb xmm10, byte [rsi + r10 + 10], 1 QUAD $0x0a2654203a0f4666; BYTE $0x02 // pinsrb xmm10, byte [rsi + r12 + 10], 2 QUAD $0x0a0654203a0f4466; BYTE $0x03 // pinsrb xmm10, byte [rsi + rax + 10], 3 - LONG $0x245c8b4c; BYTE $0x58 // mov r11, qword [rsp + 88] + LONG $0x245c8b4c; BYTE $0x50 // mov r11, qword [rsp + 80] QUAD $0x0a1e54203a0f4666; BYTE $0x04 // pinsrb xmm10, byte [rsi + r11 + 10], 4 QUAD $0x0a0e54203a0f4666; BYTE $0x05 // pinsrb xmm10, byte [rsi + r9 + 10], 5 QUAD $0x0a0654203a0f4666; BYTE $0x06 // pinsrb xmm10, byte [rsi + r8 + 10], 6 + WORD $0x894d; BYTE $0xc2 // mov r10, r8 QUAD $0x0a1e54203a0f4466; BYTE $0x07 // pinsrb xmm10, byte [rsi + rbx + 10], 7 - WORD $0x8949; BYTE $0xda // mov r10, rbx + WORD $0x8949; BYTE $0xd8 // mov r8, rbx QUAD $0x0a1654203a0f4466; BYTE $0x08 // pinsrb xmm10, byte [rsi + rdx + 10], 8 - LONG $0x24448b4c; BYTE $0x40 // mov r8, qword [rsp + 64] - QUAD $0x0a0654203a0f4666; BYTE $0x09 // pinsrb xmm10, byte [rsi + r8 + 10], 9 + LONG $0x245c8b48; BYTE $0x40 // mov rbx, qword [rsp + 64] + QUAD $0x0a1e54203a0f4466; BYTE $0x09 // pinsrb xmm10, byte [rsi + rbx + 10], 9 QUAD $0x0a0e54203a0f4466; BYTE $0x0a // pinsrb xmm10, byte [rsi + rcx + 10], 10 QUAD $0x0a3654203a0f4666; BYTE $0x0b // pinsrb xmm10, byte [rsi + r14 + 10], 11 - WORD $0x894d; BYTE $0xf5 // mov r13, r14 QUAD $0x0a3e54203a0f4666; BYTE $0x0c // pinsrb xmm10, byte [rsi + r15 + 10], 12 - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] + LONG $0x244c8b48; BYTE $0x08 // mov rcx, qword [rsp + 8] QUAD $0x0a0e54203a0f4466; BYTE $0x0d // pinsrb xmm10, byte [rsi + rcx + 10], 13 - LONG $0x24548b48; BYTE $0x30 // mov rdx, qword [rsp + 48] - QUAD $0x0a1654203a0f4466; BYTE $0x0e // pinsrb xmm10, byte [rsi + rdx + 10], 14 + QUAD $0x0a2e54203a0f4666; BYTE $0x0e // pinsrb xmm10, byte [rsi + r13 + 10], 14 QUAD $0x0a3e54203a0f4466; BYTE $0x0f // pinsrb xmm10, byte [rsi + rdi + 10], 15 LONG $0x740f4566; BYTE $0xd1 // pcmpeqb xmm10, xmm9 QUAD $0x0000b095db0f4466; BYTE $0x00 // pand xmm10, oword 176[rbp] /* [rip + .LCPI1_11] */ LONG $0xeb0f4466; BYTE $0xd4 // por xmm10, xmm4 - LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] + LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] LONG $0x3e54b60f; BYTE $0x17 // movzx edx, byte [rsi + rdi + 23] LONG $0x6e0f4466; BYTE $0xc2 // movd xmm8, edx LONG $0xeb0f4466; BYTE $0xd1 // por xmm10, xmm1 - QUAD $0x00a024947f0f4466; WORD $0x0000 // movdqa oword [rsp + 160], xmm10 + QUAD $0x00b024947f0f4466; WORD $0x0000 // movdqa oword [rsp + 176], xmm10 LONG $0x3e54b60f; BYTE $0x18 // movzx edx, byte [rsi + rdi + 24] LONG $0x6e0f4466; BYTE $0xd2 // movd xmm10, edx - LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] + LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] QUAD $0x0b165c203a0f4466; BYTE $0x01 // pinsrb xmm11, byte [rsi + rdx + 11], 1 QUAD $0x0b265c203a0f4666; BYTE $0x02 // pinsrb xmm11, byte [rsi + r12 + 11], 2 QUAD $0x0b065c203a0f4466; BYTE $0x03 // pinsrb xmm11, byte [rsi + rax + 11], 3 QUAD $0x0b1e5c203a0f4666; BYTE $0x04 // pinsrb xmm11, byte [rsi + r11 + 11], 4 QUAD $0x0b0e5c203a0f4666; BYTE $0x05 // pinsrb xmm11, byte [rsi + r9 + 11], 5 - LONG $0x245c8b48; BYTE $0x68 // mov rbx, qword [rsp + 104] - QUAD $0x0b1e5c203a0f4466; BYTE $0x06 // pinsrb xmm11, byte [rsi + rbx + 11], 6 - WORD $0x894d; BYTE $0xd6 // mov r14, r10 - QUAD $0x0b165c203a0f4666; BYTE $0x07 // pinsrb xmm11, byte [rsi + r10 + 11], 7 - LONG $0x24548b4c; BYTE $0x10 // mov r10, qword [rsp + 16] - QUAD $0x0b165c203a0f4666; BYTE $0x08 // pinsrb xmm11, byte [rsi + r10 + 11], 8 - QUAD $0x0b065c203a0f4666; BYTE $0x09 // pinsrb xmm11, byte [rsi + r8 + 11], 9 - LONG $0x244c8b4c; BYTE $0x60 // mov r9, qword [rsp + 96] - QUAD $0x0b0e5c203a0f4666; BYTE $0x0a // pinsrb xmm11, byte [rsi + r9 + 11], 10 - QUAD $0x0b2e5c203a0f4666; BYTE $0x0b // pinsrb xmm11, byte [rsi + r13 + 11], 11 + QUAD $0x0b165c203a0f4666; BYTE $0x06 // pinsrb xmm11, byte [rsi + r10 + 11], 6 + QUAD $0x0b065c203a0f4666; BYTE $0x07 // pinsrb xmm11, byte [rsi + r8 + 11], 7 + LONG $0x244c8b4c; BYTE $0x18 // mov r9, qword [rsp + 24] + QUAD $0x0b0e5c203a0f4666; BYTE $0x08 // pinsrb xmm11, byte [rsi + r9 + 11], 8 + WORD $0x8949; BYTE $0xd8 // mov r8, rbx + QUAD $0x0b1e5c203a0f4466; BYTE $0x09 // pinsrb xmm11, byte [rsi + rbx + 11], 9 + LONG $0x247c8b48; BYTE $0x58 // mov rdi, qword [rsp + 88] + QUAD $0x0b3e5c203a0f4466; BYTE $0x0a // pinsrb xmm11, byte [rsi + rdi + 11], 10 + QUAD $0x0b365c203a0f4666; BYTE $0x0b // pinsrb xmm11, byte [rsi + r14 + 11], 11 QUAD $0x0b3e5c203a0f4666; BYTE $0x0c // pinsrb xmm11, byte [rsi + r15 + 11], 12 QUAD $0x0b0e5c203a0f4466; BYTE $0x0d // pinsrb xmm11, byte [rsi + rcx + 11], 13 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] - QUAD $0x0b3e5c203a0f4466; BYTE $0x0e // pinsrb xmm11, byte [rsi + rdi + 11], 14 - LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] - QUAD $0x0b3e5c203a0f4466; BYTE $0x0f // pinsrb xmm11, byte [rsi + rdi + 11], 15 + QUAD $0x0b2e5c203a0f4666; BYTE $0x0e // pinsrb xmm11, byte [rsi + r13 + 11], 14 + LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] + QUAD $0x0b1e5c203a0f4466; BYTE $0x0f // pinsrb xmm11, byte [rsi + rbx + 11], 15 QUAD $0x0c166c203a0f4466; BYTE $0x01 // pinsrb xmm13, byte [rsi + rdx + 12], 1 QUAD $0x0c266c203a0f4666; BYTE $0x02 // pinsrb xmm13, byte [rsi + r12 + 12], 2 QUAD $0x0c066c203a0f4466; BYTE $0x03 // pinsrb xmm13, byte [rsi + rax + 12], 3 QUAD $0x0c1e6c203a0f4666; BYTE $0x04 // pinsrb xmm13, byte [rsi + r11 + 12], 4 - LONG $0x246c8b4c; BYTE $0x78 // mov r13, qword [rsp + 120] + LONG $0x246c8b4c; BYTE $0x48 // mov r13, qword [rsp + 72] QUAD $0x0c2e6c203a0f4666; BYTE $0x05 // pinsrb xmm13, byte [rsi + r13 + 12], 5 - QUAD $0x0c1e6c203a0f4466; BYTE $0x06 // pinsrb xmm13, byte [rsi + rbx + 12], 6 - QUAD $0x0c366c203a0f4666; BYTE $0x07 // pinsrb xmm13, byte [rsi + r14 + 12], 7 - QUAD $0x0c166c203a0f4666; BYTE $0x08 // pinsrb xmm13, byte [rsi + r10 + 12], 8 + QUAD $0x0c166c203a0f4666; BYTE $0x06 // pinsrb xmm13, byte [rsi + r10 + 12], 6 + LONG $0x245c8b48; BYTE $0x70 // mov rbx, qword [rsp + 112] + QUAD $0x0c1e6c203a0f4466; BYTE $0x07 // pinsrb xmm13, byte [rsi + rbx + 12], 7 + QUAD $0x0c0e6c203a0f4666; BYTE $0x08 // pinsrb xmm13, byte [rsi + r9 + 12], 8 + WORD $0x894d; BYTE $0xca // mov r10, r9 QUAD $0x0c066c203a0f4666; BYTE $0x09 // pinsrb xmm13, byte [rsi + r8 + 12], 9 - WORD $0x894c; BYTE $0xc3 // mov rbx, r8 - QUAD $0x0c0e6c203a0f4666; BYTE $0x0a // pinsrb xmm13, byte [rsi + r9 + 12], 10 - WORD $0x894d; BYTE $0xc8 // mov r8, r9 - LONG $0x246c8b4c; BYTE $0x48 // mov r13, qword [rsp + 72] - QUAD $0x0c2e6c203a0f4666; BYTE $0x0b // pinsrb xmm13, byte [rsi + r13 + 12], 11 + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + QUAD $0x0c3e6c203a0f4466; BYTE $0x0a // pinsrb xmm13, byte [rsi + rdi + 12], 10 + WORD $0x8949; BYTE $0xf8 // mov r8, rdi + QUAD $0x0c366c203a0f4666; BYTE $0x0b // pinsrb xmm13, byte [rsi + r14 + 12], 11 QUAD $0x0c3e6c203a0f4666; BYTE $0x0c // pinsrb xmm13, byte [rsi + r15 + 12], 12 QUAD $0x0c0e6c203a0f4466; BYTE $0x0d // pinsrb xmm13, byte [rsi + rcx + 12], 13 - LONG $0x244c8b4c; BYTE $0x30 // mov r9, qword [rsp + 48] - QUAD $0x0c0e6c203a0f4666; BYTE $0x0e // pinsrb xmm13, byte [rsi + r9 + 12], 14 - LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] + LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] + QUAD $0x0c2e6c203a0f4666; BYTE $0x0e // pinsrb xmm13, byte [rsi + r13 + 12], 14 + LONG $0x247c8b48; BYTE $0x10 // mov rdi, qword [rsp + 16] QUAD $0x0c3e6c203a0f4466; BYTE $0x0f // pinsrb xmm13, byte [rsi + rdi + 12], 15 QUAD $0x0d1664203a0f4466; BYTE $0x01 // pinsrb xmm12, byte [rsi + rdx + 13], 1 QUAD $0x0d2664203a0f4666; BYTE $0x02 // pinsrb xmm12, byte [rsi + r12 + 13], 2 QUAD $0x0d0664203a0f4466; BYTE $0x03 // pinsrb xmm12, byte [rsi + rax + 13], 3 QUAD $0x0d1e64203a0f4666; BYTE $0x04 // pinsrb xmm12, byte [rsi + r11 + 13], 4 - LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] QUAD $0x0d0664203a0f4466; BYTE $0x05 // pinsrb xmm12, byte [rsi + rax + 13], 5 - LONG $0x24548b48; BYTE $0x68 // mov rdx, qword [rsp + 104] + LONG $0x24548b48; BYTE $0x60 // mov rdx, qword [rsp + 96] QUAD $0x0d1664203a0f4466; BYTE $0x06 // pinsrb xmm12, byte [rsi + rdx + 13], 6 - QUAD $0x0d3664203a0f4666; BYTE $0x07 // pinsrb xmm12, byte [rsi + r14 + 13], 7 + LONG $0x245c8b48; BYTE $0x70 // mov rbx, qword [rsp + 112] + QUAD $0x0d1e64203a0f4466; BYTE $0x07 // pinsrb xmm12, byte [rsi + rbx + 13], 7 QUAD $0x0d1664203a0f4666; BYTE $0x08 // pinsrb xmm12, byte [rsi + r10 + 13], 8 - QUAD $0x0d1e64203a0f4466; BYTE $0x09 // pinsrb xmm12, byte [rsi + rbx + 13], 9 + QUAD $0x0d0e64203a0f4666; BYTE $0x09 // pinsrb xmm12, byte [rsi + r9 + 13], 9 QUAD $0x0d0664203a0f4666; BYTE $0x0a // pinsrb xmm12, byte [rsi + r8 + 13], 10 - QUAD $0x0d2e64203a0f4666; BYTE $0x0b // pinsrb xmm12, byte [rsi + r13 + 13], 11 + QUAD $0x0d3664203a0f4666; BYTE $0x0b // pinsrb xmm12, byte [rsi + r14 + 13], 11 QUAD $0x0d3e64203a0f4666; BYTE $0x0c // pinsrb xmm12, byte [rsi + r15 + 13], 12 QUAD $0x0d0e64203a0f4466; BYTE $0x0d // pinsrb xmm12, byte [rsi + rcx + 13], 13 - WORD $0x894d; BYTE $0xcd // mov r13, r9 - QUAD $0x0d0e64203a0f4666; BYTE $0x0e // pinsrb xmm12, byte [rsi + r9 + 13], 14 + QUAD $0x0d2e64203a0f4666; BYTE $0x0e // pinsrb xmm12, byte [rsi + r13 + 13], 14 QUAD $0x0d3e64203a0f4466; BYTE $0x0f // pinsrb xmm12, byte [rsi + rdi + 13], 15 LONG $0x740f4566; BYTE $0xd9 // pcmpeqb xmm11, xmm9 QUAD $0x0000c09ddb0f4466; BYTE $0x00 // pand xmm11, oword 192[rbp] /* [rip + .LCPI1_12] */ LONG $0x740f4566; BYTE $0xe9 // pcmpeqb xmm13, xmm9 QUAD $0x0000d0addb0f4466; BYTE $0x00 // pand xmm13, oword 208[rbp] /* [rip + .LCPI1_13] */ LONG $0xeb0f4566; BYTE $0xeb // por xmm13, xmm11 - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] LONG $0x0e54b60f; BYTE $0x19 // movzx edx, byte [rsi + rcx + 25] LONG $0xca6e0f66 // movd xmm1, edx LONG $0x740f4566; BYTE $0xe1 // pcmpeqb xmm12, xmm9 @@ -7015,32 +7467,30 @@ LBB1_67: LONG $0x0e54b60f; BYTE $0x1a // movzx edx, byte [rsi + rcx + 26] LONG $0x6e0f4466; BYTE $0xda // movd xmm11, edx QUAD $0x00011024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 272] - LONG $0x244c8b48; BYTE $0x18 // mov rcx, qword [rsp + 24] + LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] QUAD $0x010e0e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 14], 1 QUAD $0x0e2664203a0f4266; BYTE $0x02 // pinsrb xmm4, byte [rsi + r12 + 14], 2 - QUAD $0x0000008024948b4c // mov r10, qword [rsp + 128] + LONG $0x24548b4c; BYTE $0x78 // mov r10, qword [rsp + 120] QUAD $0x0e1664203a0f4266; BYTE $0x03 // pinsrb xmm4, byte [rsi + r10 + 14], 3 QUAD $0x0e1e64203a0f4266; BYTE $0x04 // pinsrb xmm4, byte [rsi + r11 + 14], 4 QUAD $0x050e0664203a0f66 // pinsrb xmm4, byte [rsi + rax + 14], 5 - LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] + LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] QUAD $0x060e0e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 14], 6 - WORD $0x894c; BYTE $0xf7 // mov rdi, r14 - QUAD $0x0e3664203a0f4266; BYTE $0x07 // pinsrb xmm4, byte [rsi + r14 + 14], 7 - LONG $0x24448b4c; BYTE $0x10 // mov r8, qword [rsp + 16] + WORD $0x8948; BYTE $0xdf // mov rdi, rbx + QUAD $0x070e1e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 14], 7 + LONG $0x24448b4c; BYTE $0x18 // mov r8, qword [rsp + 24] QUAD $0x0e0664203a0f4266; BYTE $0x08 // pinsrb xmm4, byte [rsi + r8 + 14], 8 - LONG $0x244c8b4c; BYTE $0x40 // mov r9, qword [rsp + 64] QUAD $0x0e0e64203a0f4266; BYTE $0x09 // pinsrb xmm4, byte [rsi + r9 + 14], 9 - LONG $0x245c8b48; BYTE $0x60 // mov rbx, qword [rsp + 96] + LONG $0x245c8b48; BYTE $0x58 // mov rbx, qword [rsp + 88] QUAD $0x0a0e1e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 14], 10 - LONG $0x24748b4c; BYTE $0x48 // mov r14, qword [rsp + 72] QUAD $0x0e3664203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r14 + 14], 11 QUAD $0x0e3e64203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r15 + 14], 12 - LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] + LONG $0x24548b48; BYTE $0x08 // mov rdx, qword [rsp + 8] QUAD $0x0d0e1664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 14], 13 QUAD $0x0e2e64203a0f4266; BYTE $0x0e // pinsrb xmm4, byte [rsi + r13 + 14], 14 - LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] + LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] QUAD $0x0f0e1664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 14], 15 - LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] + LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] QUAD $0x0f1674203a0f4466; BYTE $0x01 // pinsrb xmm14, byte [rsi + rdx + 15], 1 QUAD $0x0f2674203a0f4666; BYTE $0x02 // pinsrb xmm14, byte [rsi + r12 + 15], 2 QUAD $0x0f1674203a0f4666; BYTE $0x03 // pinsrb xmm14, byte [rsi + r10 + 15], 3 @@ -7053,12 +7503,12 @@ LBB1_67: QUAD $0x0f1e74203a0f4466; BYTE $0x0a // pinsrb xmm14, byte [rsi + rbx + 15], 10 QUAD $0x0f3674203a0f4666; BYTE $0x0b // pinsrb xmm14, byte [rsi + r14 + 15], 11 QUAD $0x0f3e74203a0f4666; BYTE $0x0c // pinsrb xmm14, byte [rsi + r15 + 15], 12 - LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] + LONG $0x24548b48; BYTE $0x08 // mov rdx, qword [rsp + 8] QUAD $0x0f1674203a0f4466; BYTE $0x0d // pinsrb xmm14, byte [rsi + rdx + 15], 13 QUAD $0x0f2e74203a0f4666; BYTE $0x0e // pinsrb xmm14, byte [rsi + r13 + 15], 14 - LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] + LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] QUAD $0x0f1674203a0f4466; BYTE $0x0f // pinsrb xmm14, byte [rsi + rdx + 15], 15 - LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] + LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] QUAD $0x10167c203a0f4466; BYTE $0x01 // pinsrb xmm15, byte [rsi + rdx + 16], 1 QUAD $0x10267c203a0f4666; BYTE $0x02 // pinsrb xmm15, byte [rsi + r12 + 16], 2 QUAD $0x10167c203a0f4666; BYTE $0x03 // pinsrb xmm15, byte [rsi + r10 + 16], 3 @@ -7071,10 +7521,10 @@ LBB1_67: QUAD $0x101e7c203a0f4466; BYTE $0x0a // pinsrb xmm15, byte [rsi + rbx + 16], 10 QUAD $0x10367c203a0f4666; BYTE $0x0b // pinsrb xmm15, byte [rsi + r14 + 16], 11 QUAD $0x103e7c203a0f4666; BYTE $0x0c // pinsrb xmm15, byte [rsi + r15 + 16], 12 - LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] + LONG $0x24548b48; BYTE $0x08 // mov rdx, qword [rsp + 8] QUAD $0x10167c203a0f4466; BYTE $0x0d // pinsrb xmm15, byte [rsi + rdx + 16], 13 QUAD $0x102e7c203a0f4666; BYTE $0x0e // pinsrb xmm15, byte [rsi + r13 + 16], 14 - LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] + LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] QUAD $0x01111644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 17], 1 QUAD $0x112644203a0f4266; BYTE $0x02 // pinsrb xmm0, byte [rsi + r12 + 17], 2 QUAD $0x111644203a0f4266; BYTE $0x03 // pinsrb xmm0, byte [rsi + r10 + 17], 3 @@ -7084,19 +7534,20 @@ LBB1_67: QUAD $0x06110e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 17], 6 QUAD $0x07113e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 17], 7 QUAD $0x110644203a0f4266; BYTE $0x08 // pinsrb xmm0, byte [rsi + r8 + 17], 8 + WORD $0x894c; BYTE $0xc0 // mov rax, r8 QUAD $0x110e44203a0f4266; BYTE $0x09 // pinsrb xmm0, byte [rsi + r9 + 17], 9 QUAD $0x0a111e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 17], 10 QUAD $0x113644203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r14 + 17], 11 QUAD $0x113e44203a0f4266; BYTE $0x0c // pinsrb xmm0, byte [rsi + r15 + 17], 12 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] - QUAD $0x0d110644203a0f66 // pinsrb xmm0, byte [rsi + rax + 17], 13 - LONG $0x24548b48; BYTE $0x30 // mov rdx, qword [rsp + 48] + LONG $0x24548b48; BYTE $0x08 // mov rdx, qword [rsp + 8] + QUAD $0x0d111644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 17], 13 + LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] QUAD $0x0e111644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 17], 14 - QUAD $0x00a024a4eb0f4466; WORD $0x0000 // por xmm12, oword [rsp + 160] - LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] + QUAD $0x00b024a4eb0f4466; WORD $0x0000 // por xmm12, oword [rsp + 176] + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] LONG $0x54b60f42; WORD $0x1b26 // movzx edx, byte [rsi + r12 + 27] LONG $0x6e0f4466; BYTE $0xca // movd xmm9, edx - QUAD $0x00b024ac6f0f4466; WORD $0x0000 // movdqa xmm13, oword [rsp + 176] + QUAD $0x00c024ac6f0f4466; WORD $0x0000 // movdqa xmm13, oword [rsp + 192] LONG $0x740f4166; BYTE $0xe5 // pcmpeqb xmm4, xmm13 QUAD $0x000000f0a5db0f66 // pand xmm4, oword 240[rbp] /* [rip + .LCPI1_15] */ LONG $0x740f4566; BYTE $0xf5 // pcmpeqb xmm14, xmm13 @@ -7105,7 +7556,7 @@ LBB1_67: LONG $0xeb0f4466; BYTE $0xf4 // por xmm14, xmm4 LONG $0x54b60f42; WORD $0x1c26 // movzx edx, byte [rsi + r12 + 28] LONG $0xe26e0f66 // movd xmm4, edx - LONG $0x24448b4c; BYTE $0x20 // mov r8, qword [rsp + 32] + LONG $0x24448b4c; BYTE $0x10 // mov r8, qword [rsp + 16] QUAD $0x110644203a0f4266; BYTE $0x0f // pinsrb xmm0, byte [rsi + r8 + 17], 15 LONG $0xeb0f4566; BYTE $0xf4 // por xmm14, xmm12 LONG $0x740f4166; BYTE $0xc5 // pcmpeqb xmm0, xmm13 @@ -7113,36 +7564,36 @@ LBB1_67: QUAD $0x0000a0a56f0f4466; BYTE $0x00 // movdqa xmm12, oword 160[rbp] /* [rip + .LCPI1_10] */ LONG $0xdb0f4566; BYTE $0xec // pand xmm13, xmm12 LONG $0xf80f4466; BYTE $0xe8 // psubb xmm13, xmm0 - QUAD $0x00a024ac7f0f4466; WORD $0x0000 // movdqa oword [rsp + 160], xmm13 + QUAD $0x00b024ac7f0f4466; WORD $0x0000 // movdqa oword [rsp + 176], xmm13 LONG $0x54b60f42; WORD $0x1d26 // movzx edx, byte [rsi + r12 + 29] LONG $0x6e0f4466; BYTE $0xea // movd xmm13, edx QUAD $0x10067c203a0f4666; BYTE $0x0f // pinsrb xmm15, byte [rsi + r8 + 16], 15 - QUAD $0x0000b024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 176] + QUAD $0x0000c024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 192] LONG $0x740f4466; BYTE $0xf8 // pcmpeqb xmm15, xmm0 - LONG $0x24648b4c; BYTE $0x18 // mov r12, qword [rsp + 24] + LONG $0x24648b4c; BYTE $0x28 // mov r12, qword [rsp + 40] QUAD $0x12266c203a0f4266; BYTE $0x01 // pinsrb xmm5, byte [rsi + r12 + 18], 1 - QUAD $0x000000e024948b48 // mov rdx, qword [rsp + 224] + QUAD $0x000000a024948b48 // mov rdx, qword [rsp + 160] QUAD $0x0212166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 18], 2 QUAD $0x12166c203a0f4266; BYTE $0x03 // pinsrb xmm5, byte [rsi + r10 + 18], 3 QUAD $0x121e6c203a0f4266; BYTE $0x04 // pinsrb xmm5, byte [rsi + r11 + 18], 4 QUAD $0x122e6c203a0f4266; BYTE $0x05 // pinsrb xmm5, byte [rsi + r13 + 18], 5 QUAD $0x06120e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 18], 6 QUAD $0x07123e6c203a0f66 // pinsrb xmm5, byte [rsi + rdi + 18], 7 - LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] - QUAD $0x0812166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 18], 8 + QUAD $0x0812066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 18], 8 QUAD $0x120e6c203a0f4266; BYTE $0x09 // pinsrb xmm5, byte [rsi + r9 + 18], 9 QUAD $0x0a121e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 18], 10 QUAD $0x12366c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rsi + r14 + 18], 11 QUAD $0x123e6c203a0f4266; BYTE $0x0c // pinsrb xmm5, byte [rsi + r15 + 18], 12 - QUAD $0x0d12066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 18], 13 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] - QUAD $0x0e12066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 18], 14 + LONG $0x24548b48; BYTE $0x08 // mov rdx, qword [rsp + 8] + QUAD $0x0d12166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 18], 13 + LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] + QUAD $0x0e12166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 18], 14 LONG $0xdb0f4566; BYTE $0xfc // pand xmm15, xmm12 QUAD $0x12066c203a0f4266; BYTE $0x0f // pinsrb xmm5, byte [rsi + r8 + 18], 15 LONG $0xe8740f66 // pcmpeqb xmm5, xmm0 QUAD $0x000000b0addb0f66 // pand xmm5, oword 176[rbp] /* [rip + .LCPI1_11] */ LONG $0xeb0f4166; BYTE $0xef // por xmm5, xmm15 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] LONG $0x0654b60f; BYTE $0x1e // movzx edx, byte [rsi + rax + 30] LONG $0x6e0f4466; BYTE $0xe2 // movd xmm12, edx QUAD $0x13267c203a0f4266; BYTE $0x01 // pinsrb xmm7, byte [rsi + r12 + 19], 1 @@ -7160,7 +7611,7 @@ LBB1_67: LONG $0x0654b60f; BYTE $0x1f // movzx edx, byte [rsi + rax + 31] LONG $0xc26e0f66 // movd xmm0, edx QUAD $0x1f2644203a0f4266; BYTE $0x01 // pinsrb xmm0, byte [rsi + r12 + 31], 1 - QUAD $0x000000e024948b48 // mov rdx, qword [rsp + 224] + QUAD $0x000000a024948b48 // mov rdx, qword [rsp + 160] QUAD $0x0213167c203a0f66 // pinsrb xmm7, byte [rsi + rdx + 19], 2 QUAD $0x02141674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 20], 2 QUAD $0x02151654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 21], 2 @@ -7179,32 +7630,32 @@ LBB1_67: QUAD $0x132e7c203a0f4266; BYTE $0x05 // pinsrb xmm7, byte [rsi + r13 + 19], 5 QUAD $0x06130e7c203a0f66 // pinsrb xmm7, byte [rsi + rcx + 19], 6 QUAD $0x07133e7c203a0f66 // pinsrb xmm7, byte [rsi + rdi + 19], 7 - LONG $0x24648b4c; BYTE $0x10 // mov r12, qword [rsp + 16] - QUAD $0x13267c203a0f4266; BYTE $0x08 // pinsrb xmm7, byte [rsi + r12 + 19], 8 + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + QUAD $0x0813067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 19], 8 QUAD $0x130e7c203a0f4266; BYTE $0x09 // pinsrb xmm7, byte [rsi + r9 + 19], 9 QUAD $0x0a131e7c203a0f66 // pinsrb xmm7, byte [rsi + rbx + 19], 10 QUAD $0x13367c203a0f4266; BYTE $0x0b // pinsrb xmm7, byte [rsi + r14 + 19], 11 QUAD $0x133e7c203a0f4266; BYTE $0x0c // pinsrb xmm7, byte [rsi + r15 + 19], 12 - LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] + LONG $0x24548b48; BYTE $0x08 // mov rdx, qword [rsp + 8] QUAD $0x0d13167c203a0f66 // pinsrb xmm7, byte [rsi + rdx + 19], 13 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] - QUAD $0x0e13067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 19], 14 + LONG $0x24648b4c; BYTE $0x20 // mov r12, qword [rsp + 32] + QUAD $0x13267c203a0f4266; BYTE $0x0e // pinsrb xmm7, byte [rsi + r12 + 19], 14 QUAD $0x13067c203a0f4266; BYTE $0x0f // pinsrb xmm7, byte [rsi + r8 + 19], 15 QUAD $0x141674203a0f4266; BYTE $0x03 // pinsrb xmm6, byte [rsi + r10 + 20], 3 QUAD $0x141e74203a0f4266; BYTE $0x04 // pinsrb xmm6, byte [rsi + r11 + 20], 4 QUAD $0x142e74203a0f4266; BYTE $0x05 // pinsrb xmm6, byte [rsi + r13 + 20], 5 QUAD $0x06140e74203a0f66 // pinsrb xmm6, byte [rsi + rcx + 20], 6 QUAD $0x07143e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 20], 7 - QUAD $0x142674203a0f4266; BYTE $0x08 // pinsrb xmm6, byte [rsi + r12 + 20], 8 + QUAD $0x08140674203a0f66 // pinsrb xmm6, byte [rsi + rax + 20], 8 QUAD $0x140e74203a0f4266; BYTE $0x09 // pinsrb xmm6, byte [rsi + r9 + 20], 9 QUAD $0x0a141e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 20], 10 QUAD $0x143674203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rsi + r14 + 20], 11 QUAD $0x143e74203a0f4266; BYTE $0x0c // pinsrb xmm6, byte [rsi + r15 + 20], 12 QUAD $0x0d141674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 20], 13 - QUAD $0x0e140674203a0f66 // pinsrb xmm6, byte [rsi + rax + 20], 14 - QUAD $0x0000a024aceb0f66; BYTE $0x00 // por xmm5, oword [rsp + 160] + QUAD $0x142674203a0f4266; BYTE $0x0e // pinsrb xmm6, byte [rsi + r12 + 20], 14 + QUAD $0x0000b024aceb0f66; BYTE $0x00 // por xmm5, oword [rsp + 176] QUAD $0x140674203a0f4266; BYTE $0x0f // pinsrb xmm6, byte [rsi + r8 + 20], 15 - QUAD $0x00b024bc6f0f4466; WORD $0x0000 // movdqa xmm15, oword [rsp + 176] + QUAD $0x00c024bc6f0f4466; WORD $0x0000 // movdqa xmm15, oword [rsp + 192] LONG $0x740f4166; BYTE $0xff // pcmpeqb xmm7, xmm15 QUAD $0x000000c0bddb0f66 // pand xmm7, oword 192[rbp] /* [rip + .LCPI1_12] */ LONG $0x740f4166; BYTE $0xf7 // pcmpeqb xmm6, xmm15 @@ -7215,13 +7666,13 @@ LBB1_67: QUAD $0x152e54203a0f4266; BYTE $0x05 // pinsrb xmm2, byte [rsi + r13 + 21], 5 QUAD $0x06150e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 21], 6 QUAD $0x07153e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 21], 7 - QUAD $0x152654203a0f4266; BYTE $0x08 // pinsrb xmm2, byte [rsi + r12 + 21], 8 + QUAD $0x08150654203a0f66 // pinsrb xmm2, byte [rsi + rax + 21], 8 QUAD $0x150e54203a0f4266; BYTE $0x09 // pinsrb xmm2, byte [rsi + r9 + 21], 9 QUAD $0x0a151e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 21], 10 QUAD $0x153654203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rsi + r14 + 21], 11 QUAD $0x153e54203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rsi + r15 + 21], 12 QUAD $0x0d151654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 21], 13 - QUAD $0x0e150654203a0f66 // pinsrb xmm2, byte [rsi + rax + 21], 14 + QUAD $0x152654203a0f4266; BYTE $0x0e // pinsrb xmm2, byte [rsi + r12 + 21], 14 QUAD $0x150654203a0f4266; BYTE $0x0f // pinsrb xmm2, byte [rsi + r8 + 21], 15 LONG $0x740f4166; BYTE $0xd7 // pcmpeqb xmm2, xmm15 QUAD $0x000000e0bd6f0f66 // movdqa xmm7, oword 224[rbp] /* [rip + .LCPI1_14] */ @@ -7233,26 +7684,26 @@ LBB1_67: QUAD $0x162e5c203a0f4266; BYTE $0x05 // pinsrb xmm3, byte [rsi + r13 + 22], 5 QUAD $0x06160e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 22], 6 QUAD $0x07163e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 22], 7 - QUAD $0x16265c203a0f4266; BYTE $0x08 // pinsrb xmm3, byte [rsi + r12 + 22], 8 + QUAD $0x0816065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 22], 8 QUAD $0x160e5c203a0f4266; BYTE $0x09 // pinsrb xmm3, byte [rsi + r9 + 22], 9 QUAD $0x0a161e5c203a0f66 // pinsrb xmm3, byte [rsi + rbx + 22], 10 QUAD $0x16365c203a0f4266; BYTE $0x0b // pinsrb xmm3, byte [rsi + r14 + 22], 11 QUAD $0x163e5c203a0f4266; BYTE $0x0c // pinsrb xmm3, byte [rsi + r15 + 22], 12 QUAD $0x0d16165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 22], 13 - QUAD $0x0e16065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 22], 14 + QUAD $0x16265c203a0f4266; BYTE $0x0e // pinsrb xmm3, byte [rsi + r12 + 22], 14 QUAD $0x16065c203a0f4266; BYTE $0x0f // pinsrb xmm3, byte [rsi + r8 + 22], 15 QUAD $0x171644203a0f4666; BYTE $0x03 // pinsrb xmm8, byte [rsi + r10 + 23], 3 QUAD $0x171e44203a0f4666; BYTE $0x04 // pinsrb xmm8, byte [rsi + r11 + 23], 4 QUAD $0x172e44203a0f4666; BYTE $0x05 // pinsrb xmm8, byte [rsi + r13 + 23], 5 QUAD $0x170e44203a0f4466; BYTE $0x06 // pinsrb xmm8, byte [rsi + rcx + 23], 6 QUAD $0x173e44203a0f4466; BYTE $0x07 // pinsrb xmm8, byte [rsi + rdi + 23], 7 - QUAD $0x172644203a0f4666; BYTE $0x08 // pinsrb xmm8, byte [rsi + r12 + 23], 8 + QUAD $0x170644203a0f4466; BYTE $0x08 // pinsrb xmm8, byte [rsi + rax + 23], 8 QUAD $0x170e44203a0f4666; BYTE $0x09 // pinsrb xmm8, byte [rsi + r9 + 23], 9 QUAD $0x171e44203a0f4466; BYTE $0x0a // pinsrb xmm8, byte [rsi + rbx + 23], 10 QUAD $0x173644203a0f4666; BYTE $0x0b // pinsrb xmm8, byte [rsi + r14 + 23], 11 QUAD $0x173e44203a0f4666; BYTE $0x0c // pinsrb xmm8, byte [rsi + r15 + 23], 12 QUAD $0x171644203a0f4466; BYTE $0x0d // pinsrb xmm8, byte [rsi + rdx + 23], 13 - QUAD $0x170644203a0f4466; BYTE $0x0e // pinsrb xmm8, byte [rsi + rax + 23], 14 + QUAD $0x172644203a0f4666; BYTE $0x0e // pinsrb xmm8, byte [rsi + r12 + 23], 14 QUAD $0x170644203a0f4666; BYTE $0x0f // pinsrb xmm8, byte [rsi + r8 + 23], 15 LONG $0x740f4166; BYTE $0xdf // pcmpeqb xmm3, xmm15 QUAD $0x000000f0ad6f0f66 // movdqa xmm5, oword 240[rbp] /* [rip + .LCPI1_15] */ @@ -7267,13 +7718,13 @@ LBB1_67: QUAD $0x192e4c203a0f4266; BYTE $0x05 // pinsrb xmm1, byte [rsi + r13 + 25], 5 QUAD $0x06190e4c203a0f66 // pinsrb xmm1, byte [rsi + rcx + 25], 6 QUAD $0x07193e4c203a0f66 // pinsrb xmm1, byte [rsi + rdi + 25], 7 - QUAD $0x19264c203a0f4266; BYTE $0x08 // pinsrb xmm1, byte [rsi + r12 + 25], 8 + QUAD $0x0819064c203a0f66 // pinsrb xmm1, byte [rsi + rax + 25], 8 QUAD $0x190e4c203a0f4266; BYTE $0x09 // pinsrb xmm1, byte [rsi + r9 + 25], 9 QUAD $0x0a191e4c203a0f66 // pinsrb xmm1, byte [rsi + rbx + 25], 10 QUAD $0x19364c203a0f4266; BYTE $0x0b // pinsrb xmm1, byte [rsi + r14 + 25], 11 QUAD $0x193e4c203a0f4266; BYTE $0x0c // pinsrb xmm1, byte [rsi + r15 + 25], 12 QUAD $0x0d19164c203a0f66 // pinsrb xmm1, byte [rsi + rdx + 25], 13 - QUAD $0x0e19064c203a0f66 // pinsrb xmm1, byte [rsi + rax + 25], 14 + QUAD $0x19264c203a0f4266; BYTE $0x0e // pinsrb xmm1, byte [rsi + r12 + 25], 14 QUAD $0x19064c203a0f4266; BYTE $0x0f // pinsrb xmm1, byte [rsi + r8 + 25], 15 LONG $0xeb0f4466; BYTE $0xc2 // por xmm8, xmm2 LONG $0x740f4166; BYTE $0xcf // pcmpeqb xmm1, xmm15 @@ -7286,13 +7737,13 @@ LBB1_67: QUAD $0x182e54203a0f4666; BYTE $0x05 // pinsrb xmm10, byte [rsi + r13 + 24], 5 QUAD $0x180e54203a0f4466; BYTE $0x06 // pinsrb xmm10, byte [rsi + rcx + 24], 6 QUAD $0x183e54203a0f4466; BYTE $0x07 // pinsrb xmm10, byte [rsi + rdi + 24], 7 - QUAD $0x182654203a0f4666; BYTE $0x08 // pinsrb xmm10, byte [rsi + r12 + 24], 8 + QUAD $0x180654203a0f4466; BYTE $0x08 // pinsrb xmm10, byte [rsi + rax + 24], 8 QUAD $0x180e54203a0f4666; BYTE $0x09 // pinsrb xmm10, byte [rsi + r9 + 24], 9 QUAD $0x181e54203a0f4466; BYTE $0x0a // pinsrb xmm10, byte [rsi + rbx + 24], 10 QUAD $0x183654203a0f4666; BYTE $0x0b // pinsrb xmm10, byte [rsi + r14 + 24], 11 QUAD $0x183e54203a0f4666; BYTE $0x0c // pinsrb xmm10, byte [rsi + r15 + 24], 12 QUAD $0x181654203a0f4466; BYTE $0x0d // pinsrb xmm10, byte [rsi + rdx + 24], 13 - QUAD $0x180654203a0f4466; BYTE $0x0e // pinsrb xmm10, byte [rsi + rax + 24], 14 + QUAD $0x182654203a0f4666; BYTE $0x0e // pinsrb xmm10, byte [rsi + r12 + 24], 14 QUAD $0x180654203a0f4666; BYTE $0x0f // pinsrb xmm10, byte [rsi + r8 + 24], 15 LONG $0x740f4566; BYTE $0xd7 // pcmpeqb xmm10, xmm15 LONG $0xdb0f4466; BYTE $0xd3 // pand xmm10, xmm3 @@ -7301,13 +7752,13 @@ LBB1_67: QUAD $0x1a2e5c203a0f4666; BYTE $0x05 // pinsrb xmm11, byte [rsi + r13 + 26], 5 QUAD $0x1a0e5c203a0f4466; BYTE $0x06 // pinsrb xmm11, byte [rsi + rcx + 26], 6 QUAD $0x1a3e5c203a0f4466; BYTE $0x07 // pinsrb xmm11, byte [rsi + rdi + 26], 7 - QUAD $0x1a265c203a0f4666; BYTE $0x08 // pinsrb xmm11, byte [rsi + r12 + 26], 8 + QUAD $0x1a065c203a0f4466; BYTE $0x08 // pinsrb xmm11, byte [rsi + rax + 26], 8 QUAD $0x1a0e5c203a0f4666; BYTE $0x09 // pinsrb xmm11, byte [rsi + r9 + 26], 9 QUAD $0x1a1e5c203a0f4466; BYTE $0x0a // pinsrb xmm11, byte [rsi + rbx + 26], 10 QUAD $0x1a365c203a0f4666; BYTE $0x0b // pinsrb xmm11, byte [rsi + r14 + 26], 11 QUAD $0x1a3e5c203a0f4666; BYTE $0x0c // pinsrb xmm11, byte [rsi + r15 + 26], 12 QUAD $0x1a165c203a0f4466; BYTE $0x0d // pinsrb xmm11, byte [rsi + rdx + 26], 13 - QUAD $0x1a065c203a0f4466; BYTE $0x0e // pinsrb xmm11, byte [rsi + rax + 26], 14 + QUAD $0x1a265c203a0f4666; BYTE $0x0e // pinsrb xmm11, byte [rsi + r12 + 26], 14 QUAD $0x1a065c203a0f4666; BYTE $0x0f // pinsrb xmm11, byte [rsi + r8 + 26], 15 LONG $0x740f4566; BYTE $0xdf // pcmpeqb xmm11, xmm15 QUAD $0x0000b09ddb0f4466; BYTE $0x00 // pand xmm11, oword 176[rbp] /* [rip + .LCPI1_11] */ @@ -7318,39 +7769,39 @@ LBB1_67: QUAD $0x1b2e4c203a0f4666; BYTE $0x05 // pinsrb xmm9, byte [rsi + r13 + 27], 5 QUAD $0x1b0e4c203a0f4466; BYTE $0x06 // pinsrb xmm9, byte [rsi + rcx + 27], 6 QUAD $0x1b3e4c203a0f4466; BYTE $0x07 // pinsrb xmm9, byte [rsi + rdi + 27], 7 - QUAD $0x1b264c203a0f4666; BYTE $0x08 // pinsrb xmm9, byte [rsi + r12 + 27], 8 + QUAD $0x1b064c203a0f4466; BYTE $0x08 // pinsrb xmm9, byte [rsi + rax + 27], 8 QUAD $0x1b0e4c203a0f4666; BYTE $0x09 // pinsrb xmm9, byte [rsi + r9 + 27], 9 QUAD $0x1b1e4c203a0f4466; BYTE $0x0a // pinsrb xmm9, byte [rsi + rbx + 27], 10 QUAD $0x1b364c203a0f4666; BYTE $0x0b // pinsrb xmm9, byte [rsi + r14 + 27], 11 QUAD $0x1b3e4c203a0f4666; BYTE $0x0c // pinsrb xmm9, byte [rsi + r15 + 27], 12 QUAD $0x1b164c203a0f4466; BYTE $0x0d // pinsrb xmm9, byte [rsi + rdx + 27], 13 - QUAD $0x1b064c203a0f4466; BYTE $0x0e // pinsrb xmm9, byte [rsi + rax + 27], 14 + QUAD $0x1b264c203a0f4666; BYTE $0x0e // pinsrb xmm9, byte [rsi + r12 + 27], 14 QUAD $0x1b064c203a0f4666; BYTE $0x0f // pinsrb xmm9, byte [rsi + r8 + 27], 15 QUAD $0x1c1664203a0f4266; BYTE $0x03 // pinsrb xmm4, byte [rsi + r10 + 28], 3 QUAD $0x1c1e64203a0f4266; BYTE $0x04 // pinsrb xmm4, byte [rsi + r11 + 28], 4 QUAD $0x1c2e64203a0f4266; BYTE $0x05 // pinsrb xmm4, byte [rsi + r13 + 28], 5 QUAD $0x061c0e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 28], 6 QUAD $0x071c3e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 28], 7 - QUAD $0x1c2664203a0f4266; BYTE $0x08 // pinsrb xmm4, byte [rsi + r12 + 28], 8 + QUAD $0x081c0664203a0f66 // pinsrb xmm4, byte [rsi + rax + 28], 8 QUAD $0x1c0e64203a0f4266; BYTE $0x09 // pinsrb xmm4, byte [rsi + r9 + 28], 9 QUAD $0x0a1c1e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 28], 10 QUAD $0x1c3664203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r14 + 28], 11 QUAD $0x1c3e64203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r15 + 28], 12 QUAD $0x0d1c1664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 28], 13 - QUAD $0x0e1c0664203a0f66 // pinsrb xmm4, byte [rsi + rax + 28], 14 + QUAD $0x1c2664203a0f4266; BYTE $0x0e // pinsrb xmm4, byte [rsi + r12 + 28], 14 QUAD $0x1c0664203a0f4266; BYTE $0x0f // pinsrb xmm4, byte [rsi + r8 + 28], 15 QUAD $0x1d166c203a0f4666; BYTE $0x03 // pinsrb xmm13, byte [rsi + r10 + 29], 3 QUAD $0x1d1e6c203a0f4666; BYTE $0x04 // pinsrb xmm13, byte [rsi + r11 + 29], 4 QUAD $0x1d2e6c203a0f4666; BYTE $0x05 // pinsrb xmm13, byte [rsi + r13 + 29], 5 QUAD $0x1d0e6c203a0f4466; BYTE $0x06 // pinsrb xmm13, byte [rsi + rcx + 29], 6 QUAD $0x1d3e6c203a0f4466; BYTE $0x07 // pinsrb xmm13, byte [rsi + rdi + 29], 7 - QUAD $0x1d266c203a0f4666; BYTE $0x08 // pinsrb xmm13, byte [rsi + r12 + 29], 8 + QUAD $0x1d066c203a0f4466; BYTE $0x08 // pinsrb xmm13, byte [rsi + rax + 29], 8 QUAD $0x1d0e6c203a0f4666; BYTE $0x09 // pinsrb xmm13, byte [rsi + r9 + 29], 9 QUAD $0x1d1e6c203a0f4466; BYTE $0x0a // pinsrb xmm13, byte [rsi + rbx + 29], 10 QUAD $0x1d366c203a0f4666; BYTE $0x0b // pinsrb xmm13, byte [rsi + r14 + 29], 11 QUAD $0x1d3e6c203a0f4666; BYTE $0x0c // pinsrb xmm13, byte [rsi + r15 + 29], 12 QUAD $0x1d166c203a0f4466; BYTE $0x0d // pinsrb xmm13, byte [rsi + rdx + 29], 13 - QUAD $0x1d066c203a0f4466; BYTE $0x0e // pinsrb xmm13, byte [rsi + rax + 29], 14 + QUAD $0x1d266c203a0f4666; BYTE $0x0e // pinsrb xmm13, byte [rsi + r12 + 29], 14 LONG $0x6f0f4166; BYTE $0xcf // movdqa xmm1, xmm15 LONG $0x740f4566; BYTE $0xcf // pcmpeqb xmm9, xmm15 QUAD $0x0000c08ddb0f4466; BYTE $0x00 // pand xmm9, oword 192[rbp] /* [rip + .LCPI1_12] */ @@ -7371,21 +7822,21 @@ LBB1_67: QUAD $0x061f0e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 31], 6 QUAD $0x1e3e64203a0f4466; BYTE $0x07 // pinsrb xmm12, byte [rsi + rdi + 30], 7 QUAD $0x071f3e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 31], 7 - QUAD $0x1e2664203a0f4666; BYTE $0x08 // pinsrb xmm12, byte [rsi + r12 + 30], 8 - QUAD $0x1f2644203a0f4266; BYTE $0x08 // pinsrb xmm0, byte [rsi + r12 + 31], 8 + QUAD $0x1e0664203a0f4466; BYTE $0x08 // pinsrb xmm12, byte [rsi + rax + 30], 8 + QUAD $0x081f0644203a0f66 // pinsrb xmm0, byte [rsi + rax + 31], 8 QUAD $0x1e0e64203a0f4666; BYTE $0x09 // pinsrb xmm12, byte [rsi + r9 + 30], 9 QUAD $0x1f0e44203a0f4266; BYTE $0x09 // pinsrb xmm0, byte [rsi + r9 + 31], 9 QUAD $0x1e1e64203a0f4466; BYTE $0x0a // pinsrb xmm12, byte [rsi + rbx + 30], 10 QUAD $0x0a1f1e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 31], 10 QUAD $0x1e3664203a0f4666; BYTE $0x0b // pinsrb xmm12, byte [rsi + r14 + 30], 11 QUAD $0x1f3644203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r14 + 31], 11 + QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] QUAD $0x1e3e64203a0f4666; BYTE $0x0c // pinsrb xmm12, byte [rsi + r15 + 30], 12 QUAD $0x1f3e44203a0f4266; BYTE $0x0c // pinsrb xmm0, byte [rsi + r15 + 31], 12 QUAD $0x1e1664203a0f4466; BYTE $0x0d // pinsrb xmm12, byte [rsi + rdx + 30], 13 QUAD $0x0d1f1644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 31], 13 - QUAD $0x0000008824b48b4c // mov r14, qword [rsp + 136] - QUAD $0x1e0664203a0f4466; BYTE $0x0e // pinsrb xmm12, byte [rsi + rax + 30], 14 - QUAD $0x0e1f0644203a0f66 // pinsrb xmm0, byte [rsi + rax + 31], 14 + QUAD $0x1e2664203a0f4666; BYTE $0x0e // pinsrb xmm12, byte [rsi + r12 + 30], 14 + QUAD $0x1f2644203a0f4266; BYTE $0x0e // pinsrb xmm0, byte [rsi + r12 + 31], 14 QUAD $0x1e0664203a0f4666; BYTE $0x0f // pinsrb xmm12, byte [rsi + r8 + 30], 15 QUAD $0x1f0644203a0f4266; BYTE $0x0f // pinsrb xmm0, byte [rsi + r8 + 31], 15 LONG $0xeb0f4566; BYTE $0xeb // por xmm13, xmm11 @@ -7410,33 +7861,32 @@ LBB1_67: LONG $0x610f4166; BYTE $0xc0 // punpcklwd xmm0, xmm8 LONG $0x690f4166; BYTE $0xe0 // punpckhwd xmm4, xmm8 QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] - LONG $0x7f0f41f3; WORD $0x8e64; BYTE $0x30 // movdqu oword [r14 + 4*rcx + 48], xmm4 - LONG $0x7f0f41f3; WORD $0x8e44; BYTE $0x20 // movdqu oword [r14 + 4*rcx + 32], xmm0 - LONG $0x7f0f41f3; WORD $0x8e54; BYTE $0x10 // movdqu oword [r14 + 4*rcx + 16], xmm2 - LONG $0x7f0f41f3; WORD $0x8e1c // movdqu oword [r14 + 4*rcx], xmm3 + LONG $0x647f0ff3; WORD $0x3088 // movdqu oword [rax + 4*rcx + 48], xmm4 + LONG $0x447f0ff3; WORD $0x2088 // movdqu oword [rax + 4*rcx + 32], xmm0 + LONG $0x547f0ff3; WORD $0x1088 // movdqu oword [rax + 4*rcx + 16], xmm2 + LONG $0x1c7f0ff3; BYTE $0x88 // movdqu oword [rax + 4*rcx], xmm3 LONG $0x10c18348 // add rcx, 16 WORD $0x8948; BYTE $0xc8 // mov rax, rcx - QUAD $0x000000f8248c3b48 // cmp rcx, qword [rsp + 248] - JNE LBB1_67 + QUAD $0x000000e8248c3b48 // cmp rcx, qword [rsp + 232] + JNE LBB1_68 QUAD $0x0000010024bc8b4c // mov r15, qword [rsp + 256] - QUAD $0x000000f824bc3b4c // cmp r15, qword [rsp + 248] - LONG $0x245c8a44; BYTE $0x08 // mov r11b, byte [rsp + 8] + QUAD $0x000000e824bc3b4c // cmp r15, qword [rsp + 232] + LONG $0x245c8a44; BYTE $0x04 // mov r11b, byte [rsp + 4] QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] - JNE LBB1_69 - JMP LBB1_72 + JNE LBB1_70 + JMP LBB1_73 -LBB1_110: - LONG $0xf8e38349 // and r11, -8 - WORD $0x894c; BYTE $0xd8 // mov rax, r11 +LBB1_111: + LONG $0xf8e78349 // and r15, -8 + WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x06e0c148 // shl rax, 6 WORD $0x0148; BYTE $0xf0 // add rax, rsi - LONG $0x24448948; BYTE $0x40 // mov qword [rsp + 64], rax - LONG $0x245c894c; BYTE $0x10 // mov qword [rsp + 16], r11 - LONG $0x9e048d4b // lea rax, [r14 + 4*r11] + LONG $0x24448948; BYTE $0x38 // mov qword [rsp + 56], rax + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 + LONG $0xbe048d4b // lea rax, [r14 + 4*r15] LONG $0x24448948; BYTE $0x08 // mov qword [rsp + 8], rax - LONG $0x246c8944; BYTE $0x38 // mov dword [rsp + 56], r13d - LONG $0x6e0f4166; BYTE $0xc5 // movd xmm0, r13d + LONG $0x6e0f4166; BYTE $0xc3 // movd xmm0, r11d LONG $0xc0700ff2; BYTE $0xe0 // pshuflw xmm0, xmm0, 224 LONG $0xc0700f66; BYTE $0x00 // pshufd xmm0, xmm0, 0 WORD $0x3145; BYTE $0xff // xor r15d, r15d @@ -7449,27 +7899,27 @@ LBB1_110: LONG $0x6f0f4466; WORD $0x6075 // movdqa xmm14, oword 96[rbp] /* [rip + .LCPI1_6] */ QUAD $0x0000008824b4894c // mov qword [rsp + 136], r14 -LBB1_111: +LBB1_112: LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 LONG $0x06e7c149 // shl r15, 6 WORD $0x894d; BYTE $0xf9 // mov r9, r15 WORD $0x894d; BYTE $0xfc // mov r12, r15 WORD $0x894d; BYTE $0xfd // mov r13, r15 WORD $0x894c; BYTE $0xf9 // mov rcx, r15 - WORD $0x894c; BYTE $0xff // mov rdi, r15 + WORD $0x894c; BYTE $0xfa // mov rdx, r15 WORD $0x894c; BYTE $0xfb // mov rbx, r15 LONG $0x34b70f46; BYTE $0x3e // movzx r14d, word [rsi + r15] LONG $0x44b70f42; WORD $0x023e // movzx eax, word [rsi + r15 + 2] - LONG $0x54b70f42; WORD $0x043e // movzx edx, word [rsi + r15 + 4] - LONG $0x5cb70f46; WORD $0x063e // movzx r11d, word [rsi + r15 + 6] - LONG $0x54b70f46; WORD $0x083e // movzx r10d, word [rsi + r15 + 8] + LONG $0x54b70f46; WORD $0x043e // movzx r10d, word [rsi + r15 + 4] + LONG $0x7cb70f42; WORD $0x063e // movzx edi, word [rsi + r15 + 6] + LONG $0x5cb70f46; WORD $0x083e // movzx r11d, word [rsi + r15 + 8] WORD $0x894d; BYTE $0xf8 // mov r8, r15 LONG $0x40c88349 // or r8, 64 LONG $0x80c98149; WORD $0x0000; BYTE $0x00 // or r9, 128 LONG $0xc0cc8149; WORD $0x0000; BYTE $0x00 // or r12, 192 LONG $0x00cd8149; WORD $0x0001; BYTE $0x00 // or r13, 256 LONG $0x40c98148; WORD $0x0001; BYTE $0x00 // or rcx, 320 - LONG $0x80cf8148; WORD $0x0001; BYTE $0x00 // or rdi, 384 + LONG $0x80ca8148; WORD $0x0001; BYTE $0x00 // or rdx, 384 LONG $0xc0cb8148; WORD $0x0001; BYTE $0x00 // or rbx, 448 LONG $0x6e0f4166; BYTE $0xe6 // movd xmm4, r14d LONG $0xc40f4266; WORD $0x0624; BYTE $0x01 // pinsrw xmm4, word [rsi + r8], 1 @@ -7477,7 +7927,7 @@ LBB1_111: LONG $0xc40f4266; WORD $0x2624; BYTE $0x03 // pinsrw xmm4, word [rsi + r12], 3 LONG $0xc40f4266; WORD $0x2e24; BYTE $0x04 // pinsrw xmm4, word [rsi + r13], 4 LONG $0x24c40f66; WORD $0x050e // pinsrw xmm4, word [rsi + rcx], 5 - LONG $0x24c40f66; WORD $0x063e // pinsrw xmm4, word [rsi + rdi], 6 + LONG $0x24c40f66; WORD $0x0616 // pinsrw xmm4, word [rsi + rdx], 6 LONG $0x24c40f66; WORD $0x071e // pinsrw xmm4, word [rsi + rbx], 7 LONG $0x74b70f46; WORD $0x0a3e // movzx r14d, word [rsi + r15 + 10] LONG $0xf06e0f66 // movd xmm6, eax @@ -7485,16 +7935,16 @@ LBB1_111: QUAD $0x02020e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 2], 2 QUAD $0x03022674c40f4266 // pinsrw xmm6, word [rsi + r12 + 2], 3 LONG $0x44b70f42; WORD $0x0c3e // movzx eax, word [rsi + r15 + 12] - LONG $0x20244489 // mov dword [rsp + 32], eax + LONG $0x18244489 // mov dword [rsp + 24], eax QUAD $0x04022e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 2], 4 - LONG $0xd26e0f66 // movd xmm2, edx - LONG $0x54b70f42; WORD $0x0e3e // movzx edx, word [rsi + r15 + 14] + LONG $0x6e0f4166; BYTE $0xd2 // movd xmm2, r10d + LONG $0x44b70f42; WORD $0x0e3e // movzx eax, word [rsi + r15 + 14] + LONG $0x10244489 // mov dword [rsp + 16], eax LONG $0x74c40f66; WORD $0x020e; BYTE $0x05 // pinsrw xmm6, word [rsi + rcx + 2], 5 - LONG $0x6e0f4166; BYTE $0xeb // movd xmm5, r11d - LONG $0x44b70f42; WORD $0x103e // movzx eax, word [rsi + r15 + 16] - LONG $0x18244489 // mov dword [rsp + 24], eax - LONG $0x74c40f66; WORD $0x023e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 2], 6 - LONG $0x6e0f4166; BYTE $0xda // movd xmm3, r10d + LONG $0xef6e0f66 // movd xmm5, edi + LONG $0x7cb70f42; WORD $0x103e // movzx edi, word [rsi + r15 + 16] + LONG $0x74c40f66; WORD $0x0216; BYTE $0x06 // pinsrw xmm6, word [rsi + rdx + 2], 6 + LONG $0x6e0f4166; BYTE $0xdb // movd xmm3, r11d LONG $0x44b70f42; WORD $0x123e // movzx eax, word [rsi + r15 + 18] LONG $0x30244489 // mov dword [rsp + 48], eax LONG $0x74c40f66; WORD $0x021e; BYTE $0x07 // pinsrw xmm6, word [rsi + rbx + 2], 7 @@ -7504,7 +7954,7 @@ LBB1_111: LONG $0xdb0f4166; BYTE $0xcf // pand xmm1, xmm15 LONG $0xcef80f66 // psubb xmm1, xmm6 LONG $0x6e0f4166; BYTE $0xf6 // movd xmm6, r14d - LONG $0x5cb70f46; WORD $0x143e // movzx r11d, word [rsi + r15 + 20] + LONG $0x54b70f46; WORD $0x143e // movzx r10d, word [rsi + r15 + 20] LONG $0xe0750f66 // pcmpeqw xmm4, xmm0 LONG $0xe4630f66 // packsswb xmm4, xmm4 LONG $0xdb0f4166; BYTE $0xe7 // pand xmm4, xmm15 @@ -7513,24 +7963,24 @@ LBB1_111: QUAD $0x03042654c40f4266 // pinsrw xmm2, word [rsi + r12 + 4], 3 QUAD $0x04042e54c40f4266 // pinsrw xmm2, word [rsi + r13 + 4], 4 LONG $0x54c40f66; WORD $0x040e; BYTE $0x05 // pinsrw xmm2, word [rsi + rcx + 4], 5 - LONG $0x54c40f66; WORD $0x043e; BYTE $0x06 // pinsrw xmm2, word [rsi + rdi + 4], 6 + LONG $0x54c40f66; WORD $0x0416; BYTE $0x06 // pinsrw xmm2, word [rsi + rdx + 4], 6 LONG $0x54c40f66; WORD $0x041e; BYTE $0x07 // pinsrw xmm2, word [rsi + rbx + 4], 7 QUAD $0x0106066cc40f4266 // pinsrw xmm5, word [rsi + r8 + 6], 1 QUAD $0x02060e6cc40f4266 // pinsrw xmm5, word [rsi + r9 + 6], 2 QUAD $0x0306266cc40f4266 // pinsrw xmm5, word [rsi + r12 + 6], 3 QUAD $0x04062e6cc40f4266 // pinsrw xmm5, word [rsi + r13 + 6], 4 LONG $0x6cc40f66; WORD $0x060e; BYTE $0x05 // pinsrw xmm5, word [rsi + rcx + 6], 5 - LONG $0x6cc40f66; WORD $0x063e; BYTE $0x06 // pinsrw xmm5, word [rsi + rdi + 6], 6 + LONG $0x6cc40f66; WORD $0x0616; BYTE $0x06 // pinsrw xmm5, word [rsi + rdx + 6], 6 LONG $0x6cc40f66; WORD $0x061e; BYTE $0x07 // pinsrw xmm5, word [rsi + rbx + 6], 7 QUAD $0x0108065cc40f4266 // pinsrw xmm3, word [rsi + r8 + 8], 1 QUAD $0x02080e5cc40f4266 // pinsrw xmm3, word [rsi + r9 + 8], 2 QUAD $0x0308265cc40f4266 // pinsrw xmm3, word [rsi + r12 + 8], 3 QUAD $0x04082e5cc40f4266 // pinsrw xmm3, word [rsi + r13 + 8], 4 LONG $0x5cc40f66; WORD $0x080e; BYTE $0x05 // pinsrw xmm3, word [rsi + rcx + 8], 5 - LONG $0x5cc40f66; WORD $0x083e; BYTE $0x06 // pinsrw xmm3, word [rsi + rdi + 8], 6 + LONG $0x5cc40f66; WORD $0x0816; BYTE $0x06 // pinsrw xmm3, word [rsi + rdx + 8], 6 LONG $0x5cc40f66; WORD $0x081e; BYTE $0x07 // pinsrw xmm3, word [rsi + rbx + 8], 7 LONG $0xcceb0f66 // por xmm1, xmm4 - LONG $0x7c6e0f66; WORD $0x2024 // movd xmm7, dword [rsp + 32] + LONG $0x7c6e0f66; WORD $0x1824 // movd xmm7, dword [rsp + 24] LONG $0x44b70f42; WORD $0x163e // movzx eax, word [rsi + r15 + 22] LONG $0xd0750f66 // pcmpeqw xmm2, xmm0 LONG $0xd2630f66 // packsswb xmm2, xmm2 @@ -7538,8 +7988,8 @@ LBB1_111: LONG $0xf2710f66; BYTE $0x02 // psllw xmm2, 2 LONG $0xdb0f4166; BYTE $0xd1 // pand xmm2, xmm9 LONG $0xd1eb0f66 // por xmm2, xmm1 - LONG $0xe26e0f66 // movd xmm4, edx - LONG $0x54b70f42; WORD $0x183e // movzx edx, word [rsi + r15 + 24] + LONG $0x646e0f66; WORD $0x1024 // movd xmm4, dword [rsp + 16] + LONG $0x5cb70f46; WORD $0x183e // movzx r11d, word [rsi + r15 + 24] LONG $0xe8750f66 // pcmpeqw xmm5, xmm0 LONG $0xed630f66 // packsswb xmm5, xmm5 LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 @@ -7551,21 +8001,21 @@ LBB1_111: LONG $0xf3710f66; BYTE $0x04 // psllw xmm3, 4 LONG $0xdb0f4166; BYTE $0xdb // pand xmm3, xmm11 LONG $0xddeb0f66 // por xmm3, xmm5 - LONG $0x4c6e0f66; WORD $0x1824 // movd xmm1, dword [rsp + 24] - LONG $0x54b70f46; WORD $0x1a3e // movzx r10d, word [rsi + r15 + 26] + LONG $0xcf6e0f66 // movd xmm1, edi + LONG $0x7cb70f42; WORD $0x1a3e // movzx edi, word [rsi + r15 + 26] QUAD $0x010a0674c40f4266 // pinsrw xmm6, word [rsi + r8 + 10], 1 QUAD $0x020a0e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 10], 2 QUAD $0x030a2674c40f4266 // pinsrw xmm6, word [rsi + r12 + 10], 3 QUAD $0x040a2e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 10], 4 LONG $0x74c40f66; WORD $0x0a0e; BYTE $0x05 // pinsrw xmm6, word [rsi + rcx + 10], 5 - LONG $0x74c40f66; WORD $0x0a3e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 10], 6 + LONG $0x74c40f66; WORD $0x0a16; BYTE $0x06 // pinsrw xmm6, word [rsi + rdx + 10], 6 LONG $0x74c40f66; WORD $0x0a1e; BYTE $0x07 // pinsrw xmm6, word [rsi + rbx + 10], 7 QUAD $0x010c067cc40f4266 // pinsrw xmm7, word [rsi + r8 + 12], 1 QUAD $0x020c0e7cc40f4266 // pinsrw xmm7, word [rsi + r9 + 12], 2 QUAD $0x030c267cc40f4266 // pinsrw xmm7, word [rsi + r12 + 12], 3 QUAD $0x040c2e7cc40f4266 // pinsrw xmm7, word [rsi + r13 + 12], 4 LONG $0x7cc40f66; WORD $0x0c0e; BYTE $0x05 // pinsrw xmm7, word [rsi + rcx + 12], 5 - LONG $0x7cc40f66; WORD $0x0c3e; BYTE $0x06 // pinsrw xmm7, word [rsi + rdi + 12], 6 + LONG $0x7cc40f66; WORD $0x0c16; BYTE $0x06 // pinsrw xmm7, word [rsi + rdx + 12], 6 LONG $0x7cc40f66; WORD $0x0c1e; BYTE $0x07 // pinsrw xmm7, word [rsi + rbx + 12], 7 LONG $0xdaeb0f66 // por xmm3, xmm2 LONG $0x6e0f4466; WORD $0x2444; BYTE $0x30 // movd xmm8, dword [rsp + 48] @@ -7581,21 +8031,21 @@ LBB1_111: LONG $0xf7710f66; BYTE $0x06 // psllw xmm7, 6 LONG $0xdb0f4166; BYTE $0xfd // pand xmm7, xmm13 LONG $0xfeeb0f66 // por xmm7, xmm6 - LONG $0x6e0f4166; BYTE $0xeb // movd xmm5, r11d - LONG $0x5cb70f46; WORD $0x1e3e // movzx r11d, word [rsi + r15 + 30] + LONG $0x6e0f4166; BYTE $0xea // movd xmm5, r10d + LONG $0x54b70f46; WORD $0x1e3e // movzx r10d, word [rsi + r15 + 30] QUAD $0x010e0664c40f4266 // pinsrw xmm4, word [rsi + r8 + 14], 1 QUAD $0x020e0e64c40f4266 // pinsrw xmm4, word [rsi + r9 + 14], 2 QUAD $0x030e2664c40f4266 // pinsrw xmm4, word [rsi + r12 + 14], 3 QUAD $0x040e2e64c40f4266 // pinsrw xmm4, word [rsi + r13 + 14], 4 LONG $0x64c40f66; WORD $0x0e0e; BYTE $0x05 // pinsrw xmm4, word [rsi + rcx + 14], 5 - LONG $0x64c40f66; WORD $0x0e3e; BYTE $0x06 // pinsrw xmm4, word [rsi + rdi + 14], 6 + LONG $0x64c40f66; WORD $0x0e16; BYTE $0x06 // pinsrw xmm4, word [rsi + rdx + 14], 6 LONG $0x64c40f66; WORD $0x0e1e; BYTE $0x07 // pinsrw xmm4, word [rsi + rbx + 14], 7 QUAD $0x01120644c40f4666 // pinsrw xmm8, word [rsi + r8 + 18], 1 QUAD $0x02120e44c40f4666 // pinsrw xmm8, word [rsi + r9 + 18], 2 QUAD $0x03122644c40f4666 // pinsrw xmm8, word [rsi + r12 + 18], 3 QUAD $0x04122e44c40f4666 // pinsrw xmm8, word [rsi + r13 + 18], 4 QUAD $0x05120e44c40f4466 // pinsrw xmm8, word [rsi + rcx + 18], 5 - QUAD $0x06123e44c40f4466 // pinsrw xmm8, word [rsi + rdi + 18], 6 + QUAD $0x06121644c40f4466 // pinsrw xmm8, word [rsi + rdx + 18], 6 QUAD $0x07121e44c40f4466 // pinsrw xmm8, word [rsi + rbx + 18], 7 LONG $0xe0750f66 // pcmpeqw xmm4, xmm0 LONG $0xe4630f66 // packsswb xmm4, xmm4 @@ -7610,28 +8060,28 @@ LBB1_111: LONG $0x6f0f4166; BYTE $0xf8 // movdqa xmm7, xmm8 LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 LONG $0xf80f4166; BYTE $0xf8 // psubb xmm7, xmm8 - LONG $0xda6e0f66 // movd xmm3, edx - LONG $0x54b70f42; WORD $0x223e // movzx edx, word [rsi + r15 + 34] - LONG $0x20245489 // mov dword [rsp + 32], edx + LONG $0x6e0f4166; BYTE $0xdb // movd xmm3, r11d + LONG $0x5cb70f46; WORD $0x223e // movzx r11d, word [rsi + r15 + 34] QUAD $0x0110064cc40f4266 // pinsrw xmm1, word [rsi + r8 + 16], 1 QUAD $0x02100e4cc40f4266 // pinsrw xmm1, word [rsi + r9 + 16], 2 QUAD $0x0310264cc40f4266 // pinsrw xmm1, word [rsi + r12 + 16], 3 QUAD $0x04102e4cc40f4266 // pinsrw xmm1, word [rsi + r13 + 16], 4 LONG $0x4cc40f66; WORD $0x100e; BYTE $0x05 // pinsrw xmm1, word [rsi + rcx + 16], 5 - LONG $0x4cc40f66; WORD $0x103e; BYTE $0x06 // pinsrw xmm1, word [rsi + rdi + 16], 6 + LONG $0x4cc40f66; WORD $0x1016; BYTE $0x06 // pinsrw xmm1, word [rsi + rdx + 16], 6 LONG $0x4cc40f66; WORD $0x101e; BYTE $0x07 // pinsrw xmm1, word [rsi + rbx + 16], 7 LONG $0xc8750f66 // pcmpeqw xmm1, xmm0 LONG $0xc9630f66 // packsswb xmm1, xmm1 LONG $0xdb0f4166; BYTE $0xcf // pand xmm1, xmm15 LONG $0xf9eb0f66 // por xmm7, xmm1 - LONG $0x6e0f4166; BYTE $0xf2 // movd xmm6, r10d - LONG $0x54b70f46; WORD $0x243e // movzx r10d, word [rsi + r15 + 36] + LONG $0xf76e0f66 // movd xmm6, edi + LONG $0x7cb70f42; WORD $0x243e // movzx edi, word [rsi + r15 + 36] + LONG $0x30247c89 // mov dword [rsp + 48], edi QUAD $0x0114066cc40f4266 // pinsrw xmm5, word [rsi + r8 + 20], 1 QUAD $0x02140e6cc40f4266 // pinsrw xmm5, word [rsi + r9 + 20], 2 QUAD $0x0314266cc40f4266 // pinsrw xmm5, word [rsi + r12 + 20], 3 QUAD $0x04142e6cc40f4266 // pinsrw xmm5, word [rsi + r13 + 20], 4 LONG $0x6cc40f66; WORD $0x140e; BYTE $0x05 // pinsrw xmm5, word [rsi + rcx + 20], 5 - LONG $0x6cc40f66; WORD $0x143e; BYTE $0x06 // pinsrw xmm5, word [rsi + rdi + 20], 6 + LONG $0x6cc40f66; WORD $0x1416; BYTE $0x06 // pinsrw xmm5, word [rsi + rdx + 20], 6 LONG $0x6cc40f66; WORD $0x141e; BYTE $0x07 // pinsrw xmm5, word [rsi + rbx + 20], 7 LONG $0xe8750f66 // pcmpeqw xmm5, xmm0 LONG $0xed630f66 // packsswb xmm5, xmm5 @@ -7640,21 +8090,21 @@ LBB1_111: LONG $0xdb0f4166; BYTE $0xe9 // pand xmm5, xmm9 LONG $0xefeb0f66 // por xmm5, xmm7 LONG $0x6e0f4166; BYTE $0xfe // movd xmm7, r14d - LONG $0x54b70f42; WORD $0x263e // movzx edx, word [rsi + r15 + 38] - LONG $0x18245489 // mov dword [rsp + 24], edx + LONG $0x7cb70f42; WORD $0x263e // movzx edi, word [rsi + r15 + 38] + LONG $0x10247c89 // mov dword [rsp + 16], edi QUAD $0x01160654c40f4266 // pinsrw xmm2, word [rsi + r8 + 22], 1 QUAD $0x02160e54c40f4266 // pinsrw xmm2, word [rsi + r9 + 22], 2 QUAD $0x03162654c40f4266 // pinsrw xmm2, word [rsi + r12 + 22], 3 QUAD $0x04162e54c40f4266 // pinsrw xmm2, word [rsi + r13 + 22], 4 LONG $0x54c40f66; WORD $0x160e; BYTE $0x05 // pinsrw xmm2, word [rsi + rcx + 22], 5 - LONG $0x54c40f66; WORD $0x163e; BYTE $0x06 // pinsrw xmm2, word [rsi + rdi + 22], 6 + LONG $0x54c40f66; WORD $0x1616; BYTE $0x06 // pinsrw xmm2, word [rsi + rdx + 22], 6 LONG $0x54c40f66; WORD $0x161e; BYTE $0x07 // pinsrw xmm2, word [rsi + rbx + 22], 7 QUAD $0x0118065cc40f4266 // pinsrw xmm3, word [rsi + r8 + 24], 1 QUAD $0x02180e5cc40f4266 // pinsrw xmm3, word [rsi + r9 + 24], 2 QUAD $0x0318265cc40f4266 // pinsrw xmm3, word [rsi + r12 + 24], 3 QUAD $0x04182e5cc40f4266 // pinsrw xmm3, word [rsi + r13 + 24], 4 LONG $0x5cc40f66; WORD $0x180e; BYTE $0x05 // pinsrw xmm3, word [rsi + rcx + 24], 5 - LONG $0x5cc40f66; WORD $0x183e; BYTE $0x06 // pinsrw xmm3, word [rsi + rdi + 24], 6 + LONG $0x5cc40f66; WORD $0x1816; BYTE $0x06 // pinsrw xmm3, word [rsi + rdx + 24], 6 LONG $0x5cc40f66; WORD $0x181e; BYTE $0x07 // pinsrw xmm3, word [rsi + rbx + 24], 7 LONG $0xd0750f66 // pcmpeqw xmm2, xmm0 LONG $0xd2630f66 // packsswb xmm2, xmm2 @@ -7667,31 +8117,32 @@ LBB1_111: LONG $0xf3710f66; BYTE $0x04 // psllw xmm3, 4 LONG $0xdb0f4166; BYTE $0xdb // pand xmm3, xmm11 LONG $0xdaeb0f66 // por xmm3, xmm2 - LONG $0x6e0f4166; BYTE $0xd3 // movd xmm2, r11d - LONG $0x74b70f46; WORD $0x283e // movzx r14d, word [rsi + r15 + 40] + LONG $0x6e0f4166; BYTE $0xd2 // movd xmm2, r10d + LONG $0x7cb70f42; WORD $0x283e // movzx edi, word [rsi + r15 + 40] LONG $0xddeb0f66 // por xmm3, xmm5 LONG $0xe86e0f66 // movd xmm5, eax - LONG $0x5cb70f46; WORD $0x2a3e // movzx r11d, word [rsi + r15 + 42] + LONG $0x44b70f42; WORD $0x2a3e // movzx eax, word [rsi + r15 + 42] + LONG $0x18244489 // mov dword [rsp + 24], eax QUAD $0x011a0674c40f4266 // pinsrw xmm6, word [rsi + r8 + 26], 1 QUAD $0x021a0e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 26], 2 QUAD $0x031a2674c40f4266 // pinsrw xmm6, word [rsi + r12 + 26], 3 QUAD $0x041a2e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 26], 4 LONG $0x74c40f66; WORD $0x1a0e; BYTE $0x05 // pinsrw xmm6, word [rsi + rcx + 26], 5 - LONG $0x74c40f66; WORD $0x1a3e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 26], 6 + LONG $0x74c40f66; WORD $0x1a16; BYTE $0x06 // pinsrw xmm6, word [rsi + rdx + 26], 6 LONG $0x74c40f66; WORD $0x1a1e; BYTE $0x07 // pinsrw xmm6, word [rsi + rbx + 26], 7 QUAD $0x011c067cc40f4266 // pinsrw xmm7, word [rsi + r8 + 28], 1 QUAD $0x021c0e7cc40f4266 // pinsrw xmm7, word [rsi + r9 + 28], 2 QUAD $0x031c267cc40f4266 // pinsrw xmm7, word [rsi + r12 + 28], 3 QUAD $0x041c2e7cc40f4266 // pinsrw xmm7, word [rsi + r13 + 28], 4 LONG $0x7cc40f66; WORD $0x1c0e; BYTE $0x05 // pinsrw xmm7, word [rsi + rcx + 28], 5 - LONG $0x7cc40f66; WORD $0x1c3e; BYTE $0x06 // pinsrw xmm7, word [rsi + rdi + 28], 6 + LONG $0x7cc40f66; WORD $0x1c16; BYTE $0x06 // pinsrw xmm7, word [rsi + rdx + 28], 6 LONG $0x7cc40f66; WORD $0x1c1e; BYTE $0x07 // pinsrw xmm7, word [rsi + rbx + 28], 7 QUAD $0x011e0654c40f4266 // pinsrw xmm2, word [rsi + r8 + 30], 1 QUAD $0x021e0e54c40f4266 // pinsrw xmm2, word [rsi + r9 + 30], 2 QUAD $0x031e2654c40f4266 // pinsrw xmm2, word [rsi + r12 + 30], 3 QUAD $0x041e2e54c40f4266 // pinsrw xmm2, word [rsi + r13 + 30], 4 LONG $0x54c40f66; WORD $0x1e0e; BYTE $0x05 // pinsrw xmm2, word [rsi + rcx + 30], 5 - LONG $0x54c40f66; WORD $0x1e3e; BYTE $0x06 // pinsrw xmm2, word [rsi + rdi + 30], 6 + LONG $0x54c40f66; WORD $0x1e16; BYTE $0x06 // pinsrw xmm2, word [rsi + rdx + 30], 6 LONG $0x54c40f66; WORD $0x1e1e; BYTE $0x07 // pinsrw xmm2, word [rsi + rbx + 30], 7 LONG $0xf0750f66 // pcmpeqw xmm6, xmm0 LONG $0xf6630f66 // packsswb xmm6, xmm6 @@ -7704,27 +8155,27 @@ LBB1_111: LONG $0xf7710f66; BYTE $0x06 // psllw xmm7, 6 LONG $0xdb0f4166; BYTE $0xfd // pand xmm7, xmm13 LONG $0xfeeb0f66 // por xmm7, xmm6 - LONG $0x4c6e0f66; WORD $0x2024 // movd xmm1, dword [rsp + 32] - LONG $0x54b70f42; WORD $0x2c3e // movzx edx, word [rsi + r15 + 44] + LONG $0x6e0f4166; BYTE $0xcb // movd xmm1, r11d + LONG $0x54b70f46; WORD $0x2c3e // movzx r10d, word [rsi + r15 + 44] LONG $0xd0750f66 // pcmpeqw xmm2, xmm0 LONG $0xd2630f66 // packsswb xmm2, xmm2 LONG $0xf2710f66; BYTE $0x07 // psllw xmm2, 7 LONG $0xdb0f4166; BYTE $0xd6 // pand xmm2, xmm14 LONG $0xd7eb0f66 // por xmm2, xmm7 - LONG $0x6e0f4166; BYTE $0xf2 // movd xmm6, r10d - LONG $0x44b70f42; WORD $0x2e3e // movzx eax, word [rsi + r15 + 46] + LONG $0x746e0f66; WORD $0x3024 // movd xmm6, dword [rsp + 48] + LONG $0x74b70f46; WORD $0x2e3e // movzx r14d, word [rsi + r15 + 46] QUAD $0x0120066cc40f4266 // pinsrw xmm5, word [rsi + r8 + 32], 1 QUAD $0x02200e6cc40f4266 // pinsrw xmm5, word [rsi + r9 + 32], 2 QUAD $0x0320266cc40f4266 // pinsrw xmm5, word [rsi + r12 + 32], 3 QUAD $0x04202e6cc40f4266 // pinsrw xmm5, word [rsi + r13 + 32], 4 LONG $0x6cc40f66; WORD $0x200e; BYTE $0x05 // pinsrw xmm5, word [rsi + rcx + 32], 5 - LONG $0x6cc40f66; WORD $0x203e; BYTE $0x06 // pinsrw xmm5, word [rsi + rdi + 32], 6 + LONG $0x6cc40f66; WORD $0x2016; BYTE $0x06 // pinsrw xmm5, word [rsi + rdx + 32], 6 QUAD $0x0122064cc40f4266 // pinsrw xmm1, word [rsi + r8 + 34], 1 QUAD $0x02220e4cc40f4266 // pinsrw xmm1, word [rsi + r9 + 34], 2 QUAD $0x0322264cc40f4266 // pinsrw xmm1, word [rsi + r12 + 34], 3 QUAD $0x04222e4cc40f4266 // pinsrw xmm1, word [rsi + r13 + 34], 4 LONG $0x4cc40f66; WORD $0x220e; BYTE $0x05 // pinsrw xmm1, word [rsi + rcx + 34], 5 - LONG $0x4cc40f66; WORD $0x223e; BYTE $0x06 // pinsrw xmm1, word [rsi + rdi + 34], 6 + LONG $0x4cc40f66; WORD $0x2216; BYTE $0x06 // pinsrw xmm1, word [rsi + rdx + 34], 6 LONG $0x4cc40f66; WORD $0x221e; BYTE $0x07 // pinsrw xmm1, word [rsi + rbx + 34], 7 LONG $0xd3eb0f66 // por xmm2, xmm3 LONG $0xc8750f66 // pcmpeqw xmm1, xmm0 @@ -7732,8 +8183,9 @@ LBB1_111: LONG $0xf96f0f66 // movdqa xmm7, xmm1 LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 LONG $0xf9f80f66 // psubb xmm7, xmm1 - LONG $0x5c6e0f66; WORD $0x1824 // movd xmm3, dword [rsp + 24] - LONG $0x54b70f46; WORD $0x303e // movzx r10d, word [rsi + r15 + 48] + LONG $0x5c6e0f66; WORD $0x1024 // movd xmm3, dword [rsp + 16] + LONG $0x44b70f42; WORD $0x303e // movzx eax, word [rsi + r15 + 48] + LONG $0x10244489 // mov dword [rsp + 16], eax LONG $0x6cc40f66; WORD $0x201e; BYTE $0x07 // pinsrw xmm5, word [rsi + rbx + 32], 7 LONG $0xe8750f66 // pcmpeqw xmm5, xmm0 LONG $0xed630f66 // packsswb xmm5, xmm5 @@ -7743,32 +8195,33 @@ LBB1_111: QUAD $0x03242674c40f4266 // pinsrw xmm6, word [rsi + r12 + 36], 3 QUAD $0x04242e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 36], 4 LONG $0x74c40f66; WORD $0x240e; BYTE $0x05 // pinsrw xmm6, word [rsi + rcx + 36], 5 - LONG $0x74c40f66; WORD $0x243e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 36], 6 + LONG $0x74c40f66; WORD $0x2416; BYTE $0x06 // pinsrw xmm6, word [rsi + rdx + 36], 6 LONG $0x74c40f66; WORD $0x241e; BYTE $0x07 // pinsrw xmm6, word [rsi + rbx + 36], 7 QUAD $0x0126065cc40f4266 // pinsrw xmm3, word [rsi + r8 + 38], 1 QUAD $0x02260e5cc40f4266 // pinsrw xmm3, word [rsi + r9 + 38], 2 QUAD $0x0326265cc40f4266 // pinsrw xmm3, word [rsi + r12 + 38], 3 QUAD $0x04262e5cc40f4266 // pinsrw xmm3, word [rsi + r13 + 38], 4 LONG $0x5cc40f66; WORD $0x260e; BYTE $0x05 // pinsrw xmm3, word [rsi + rcx + 38], 5 - LONG $0x5cc40f66; WORD $0x263e; BYTE $0x06 // pinsrw xmm3, word [rsi + rdi + 38], 6 + LONG $0x5cc40f66; WORD $0x2616; BYTE $0x06 // pinsrw xmm3, word [rsi + rdx + 38], 6 LONG $0x5cc40f66; WORD $0x261e; BYTE $0x07 // pinsrw xmm3, word [rsi + rbx + 38], 7 LONG $0xfdeb0f66 // por xmm7, xmm5 - LONG $0x6e0f4166; BYTE $0xee // movd xmm5, r14d + LONG $0xef6e0f66 // movd xmm5, edi QUAD $0x0128066cc40f4266 // pinsrw xmm5, word [rsi + r8 + 40], 1 QUAD $0x02280e6cc40f4266 // pinsrw xmm5, word [rsi + r9 + 40], 2 QUAD $0x0328266cc40f4266 // pinsrw xmm5, word [rsi + r12 + 40], 3 QUAD $0x04282e6cc40f4266 // pinsrw xmm5, word [rsi + r13 + 40], 4 LONG $0x6cc40f66; WORD $0x280e; BYTE $0x05 // pinsrw xmm5, word [rsi + rcx + 40], 5 - LONG $0x6cc40f66; WORD $0x283e; BYTE $0x06 // pinsrw xmm5, word [rsi + rdi + 40], 6 - LONG $0x74b70f46; WORD $0x323e // movzx r14d, word [rsi + r15 + 50] + LONG $0x6cc40f66; WORD $0x2816; BYTE $0x06 // pinsrw xmm5, word [rsi + rdx + 40], 6 + LONG $0x44b70f42; WORD $0x323e // movzx eax, word [rsi + r15 + 50] LONG $0xf0750f66 // pcmpeqw xmm6, xmm0 LONG $0xf6630f66 // packsswb xmm6, xmm6 LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 LONG $0xf6710f66; BYTE $0x02 // psllw xmm6, 2 LONG $0xdb0f4166; BYTE $0xf1 // pand xmm6, xmm9 LONG $0xf7eb0f66 // por xmm6, xmm7 - LONG $0x6e0f4166; BYTE $0xcb // movd xmm1, r11d - LONG $0x5cb70f46; WORD $0x343e // movzx r11d, word [rsi + r15 + 52] + LONG $0x4c6e0f66; WORD $0x1824 // movd xmm1, dword [rsp + 24] + LONG $0x7cb70f42; WORD $0x343e // movzx edi, word [rsi + r15 + 52] + LONG $0x18247c89 // mov dword [rsp + 24], edi LONG $0x6cc40f66; WORD $0x281e; BYTE $0x07 // pinsrw xmm5, word [rsi + rbx + 40], 7 LONG $0xd8750f66 // pcmpeqw xmm3, xmm0 LONG $0xdb630f66 // packsswb xmm3, xmm3 @@ -7781,24 +8234,24 @@ LBB1_111: LONG $0xf5710f66; BYTE $0x04 // psllw xmm5, 4 LONG $0xdb0f4166; BYTE $0xeb // pand xmm5, xmm11 LONG $0xebeb0f66 // por xmm5, xmm3 - LONG $0xfa6e0f66 // movd xmm7, edx - LONG $0x54b70f42; WORD $0x363e // movzx edx, word [rsi + r15 + 54] + LONG $0x6e0f4166; BYTE $0xfa // movd xmm7, r10d + LONG $0x5cb70f46; WORD $0x363e // movzx r11d, word [rsi + r15 + 54] QUAD $0x012a064cc40f4266 // pinsrw xmm1, word [rsi + r8 + 42], 1 QUAD $0x022a0e4cc40f4266 // pinsrw xmm1, word [rsi + r9 + 42], 2 QUAD $0x032a264cc40f4266 // pinsrw xmm1, word [rsi + r12 + 42], 3 QUAD $0x042a2e4cc40f4266 // pinsrw xmm1, word [rsi + r13 + 42], 4 LONG $0x4cc40f66; WORD $0x2a0e; BYTE $0x05 // pinsrw xmm1, word [rsi + rcx + 42], 5 - LONG $0x4cc40f66; WORD $0x2a3e; BYTE $0x06 // pinsrw xmm1, word [rsi + rdi + 42], 6 + LONG $0x4cc40f66; WORD $0x2a16; BYTE $0x06 // pinsrw xmm1, word [rsi + rdx + 42], 6 LONG $0x4cc40f66; WORD $0x2a1e; BYTE $0x07 // pinsrw xmm1, word [rsi + rbx + 42], 7 QUAD $0x012c067cc40f4266 // pinsrw xmm7, word [rsi + r8 + 44], 1 QUAD $0x022c0e7cc40f4266 // pinsrw xmm7, word [rsi + r9 + 44], 2 QUAD $0x032c267cc40f4266 // pinsrw xmm7, word [rsi + r12 + 44], 3 QUAD $0x042c2e7cc40f4266 // pinsrw xmm7, word [rsi + r13 + 44], 4 LONG $0x7cc40f66; WORD $0x2c0e; BYTE $0x05 // pinsrw xmm7, word [rsi + rcx + 44], 5 - LONG $0x7cc40f66; WORD $0x2c3e; BYTE $0x06 // pinsrw xmm7, word [rsi + rdi + 44], 6 + LONG $0x7cc40f66; WORD $0x2c16; BYTE $0x06 // pinsrw xmm7, word [rsi + rdx + 44], 6 LONG $0xeeeb0f66 // por xmm5, xmm6 - LONG $0xd86e0f66 // movd xmm3, eax - LONG $0x44b70f42; WORD $0x383e // movzx eax, word [rsi + r15 + 56] + LONG $0x6e0f4166; BYTE $0xde // movd xmm3, r14d + LONG $0x54b70f46; WORD $0x383e // movzx r10d, word [rsi + r15 + 56] LONG $0x7cc40f66; WORD $0x2c1e; BYTE $0x07 // pinsrw xmm7, word [rsi + rbx + 44], 7 LONG $0xc8750f66 // pcmpeqw xmm1, xmm0 LONG $0xc9630f66 // packsswb xmm1, xmm1 @@ -7811,29 +8264,29 @@ LBB1_111: LONG $0xf7710f66; BYTE $0x06 // psllw xmm7, 6 LONG $0xdb0f4166; BYTE $0xfd // pand xmm7, xmm13 LONG $0xf9eb0f66 // por xmm7, xmm1 - LONG $0x6e0f4166; BYTE $0xf2 // movd xmm6, r10d - LONG $0x54b70f46; WORD $0x3a3e // movzx r10d, word [rsi + r15 + 58] + LONG $0x746e0f66; WORD $0x1024 // movd xmm6, dword [rsp + 16] + LONG $0x74b70f46; WORD $0x3a3e // movzx r14d, word [rsi + r15 + 58] QUAD $0x012e065cc40f4266 // pinsrw xmm3, word [rsi + r8 + 46], 1 QUAD $0x022e0e5cc40f4266 // pinsrw xmm3, word [rsi + r9 + 46], 2 QUAD $0x032e265cc40f4266 // pinsrw xmm3, word [rsi + r12 + 46], 3 QUAD $0x042e2e5cc40f4266 // pinsrw xmm3, word [rsi + r13 + 46], 4 LONG $0x5cc40f66; WORD $0x2e0e; BYTE $0x05 // pinsrw xmm3, word [rsi + rcx + 46], 5 - LONG $0x5cc40f66; WORD $0x2e3e; BYTE $0x06 // pinsrw xmm3, word [rsi + rdi + 46], 6 + LONG $0x5cc40f66; WORD $0x2e16; BYTE $0x06 // pinsrw xmm3, word [rsi + rdx + 46], 6 LONG $0x5cc40f66; WORD $0x2e1e; BYTE $0x07 // pinsrw xmm3, word [rsi + rbx + 46], 7 LONG $0xd8750f66 // pcmpeqw xmm3, xmm0 LONG $0xdb630f66 // packsswb xmm3, xmm3 LONG $0xf3710f66; BYTE $0x07 // psllw xmm3, 7 LONG $0xdb0f4166; BYTE $0xde // pand xmm3, xmm14 LONG $0xdfeb0f66 // por xmm3, xmm7 - LONG $0x6e0f4166; BYTE $0xce // movd xmm1, r14d - LONG $0x74b70f46; WORD $0x3c3e // movzx r14d, word [rsi + r15 + 60] + LONG $0xc86e0f66 // movd xmm1, eax + LONG $0x7cb70f42; WORD $0x3c3e // movzx edi, word [rsi + r15 + 60] LONG $0x7cb70f46; WORD $0x3e3e // movzx r15d, word [rsi + r15 + 62] QUAD $0x0132064cc40f4266 // pinsrw xmm1, word [rsi + r8 + 50], 1 QUAD $0x02320e4cc40f4266 // pinsrw xmm1, word [rsi + r9 + 50], 2 QUAD $0x0332264cc40f4266 // pinsrw xmm1, word [rsi + r12 + 50], 3 QUAD $0x04322e4cc40f4266 // pinsrw xmm1, word [rsi + r13 + 50], 4 LONG $0x4cc40f66; WORD $0x320e; BYTE $0x05 // pinsrw xmm1, word [rsi + rcx + 50], 5 - LONG $0x4cc40f66; WORD $0x323e; BYTE $0x06 // pinsrw xmm1, word [rsi + rdi + 50], 6 + LONG $0x4cc40f66; WORD $0x3216; BYTE $0x06 // pinsrw xmm1, word [rsi + rdx + 50], 6 LONG $0x4cc40f66; WORD $0x321e; BYTE $0x07 // pinsrw xmm1, word [rsi + rbx + 50], 7 LONG $0xddeb0f66 // por xmm3, xmm5 LONG $0xc8750f66 // pcmpeqw xmm1, xmm0 @@ -7841,13 +8294,14 @@ LBB1_111: LONG $0xe96f0f66 // movdqa xmm5, xmm1 LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 LONG $0xe9f80f66 // psubb xmm5, xmm1 - LONG $0x6e0f4166; BYTE $0xcb // movd xmm1, r11d + LONG $0x4c6e0f66; WORD $0x1824 // movd xmm1, dword [rsp + 24] + QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] QUAD $0x01300674c40f4266 // pinsrw xmm6, word [rsi + r8 + 48], 1 QUAD $0x02300e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 48], 2 QUAD $0x03302674c40f4266 // pinsrw xmm6, word [rsi + r12 + 48], 3 QUAD $0x04302e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 48], 4 LONG $0x74c40f66; WORD $0x300e; BYTE $0x05 // pinsrw xmm6, word [rsi + rcx + 48], 5 - LONG $0x74c40f66; WORD $0x303e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 48], 6 + LONG $0x74c40f66; WORD $0x3016; BYTE $0x06 // pinsrw xmm6, word [rsi + rdx + 48], 6 LONG $0x74c40f66; WORD $0x301e; BYTE $0x07 // pinsrw xmm6, word [rsi + rbx + 48], 7 LONG $0xf0750f66 // pcmpeqw xmm6, xmm0 LONG $0xf6630f66 // packsswb xmm6, xmm6 @@ -7857,9 +8311,9 @@ LBB1_111: QUAD $0x04342e4cc40f4266 // pinsrw xmm1, word [rsi + r13 + 52], 4 LONG $0x4cc40f66; WORD $0x340e; BYTE $0x05 // pinsrw xmm1, word [rsi + rcx + 52], 5 LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 - LONG $0x4cc40f66; WORD $0x343e; BYTE $0x06 // pinsrw xmm1, word [rsi + rdi + 52], 6 + LONG $0x4cc40f66; WORD $0x3416; BYTE $0x06 // pinsrw xmm1, word [rsi + rdx + 52], 6 LONG $0xeeeb0f66 // por xmm5, xmm6 - LONG $0xf26e0f66 // movd xmm6, edx + LONG $0x6e0f4166; BYTE $0xf3 // movd xmm6, r11d LONG $0x4cc40f66; WORD $0x341e; BYTE $0x07 // pinsrw xmm1, word [rsi + rbx + 52], 7 LONG $0xc8750f66 // pcmpeqw xmm1, xmm0 LONG $0xc9630f66 // packsswb xmm1, xmm1 @@ -7867,20 +8321,20 @@ LBB1_111: LONG $0xf1710f66; BYTE $0x02 // psllw xmm1, 2 LONG $0xdb0f4166; BYTE $0xc9 // pand xmm1, xmm9 LONG $0xcdeb0f66 // por xmm1, xmm5 - LONG $0xe86e0f66 // movd xmm5, eax + LONG $0x6e0f4166; BYTE $0xea // movd xmm5, r10d QUAD $0x01360674c40f4266 // pinsrw xmm6, word [rsi + r8 + 54], 1 QUAD $0x02360e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 54], 2 QUAD $0x03362674c40f4266 // pinsrw xmm6, word [rsi + r12 + 54], 3 QUAD $0x04362e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 54], 4 LONG $0x74c40f66; WORD $0x360e; BYTE $0x05 // pinsrw xmm6, word [rsi + rcx + 54], 5 - LONG $0x74c40f66; WORD $0x363e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 54], 6 + LONG $0x74c40f66; WORD $0x3616; BYTE $0x06 // pinsrw xmm6, word [rsi + rdx + 54], 6 LONG $0x74c40f66; WORD $0x361e; BYTE $0x07 // pinsrw xmm6, word [rsi + rbx + 54], 7 QUAD $0x0138066cc40f4266 // pinsrw xmm5, word [rsi + r8 + 56], 1 QUAD $0x02380e6cc40f4266 // pinsrw xmm5, word [rsi + r9 + 56], 2 QUAD $0x0338266cc40f4266 // pinsrw xmm5, word [rsi + r12 + 56], 3 QUAD $0x04382e6cc40f4266 // pinsrw xmm5, word [rsi + r13 + 56], 4 LONG $0x6cc40f66; WORD $0x380e; BYTE $0x05 // pinsrw xmm5, word [rsi + rcx + 56], 5 - LONG $0x6cc40f66; WORD $0x383e; BYTE $0x06 // pinsrw xmm5, word [rsi + rdi + 56], 6 + LONG $0x6cc40f66; WORD $0x3816; BYTE $0x06 // pinsrw xmm5, word [rsi + rdx + 56], 6 LONG $0x6cc40f66; WORD $0x381e; BYTE $0x07 // pinsrw xmm5, word [rsi + rbx + 56], 7 LONG $0xf0750f66 // pcmpeqw xmm6, xmm0 LONG $0xf6630f66 // packsswb xmm6, xmm6 @@ -7893,22 +8347,22 @@ LBB1_111: LONG $0xf5710f66; BYTE $0x04 // psllw xmm5, 4 LONG $0xdb0f4166; BYTE $0xeb // pand xmm5, xmm11 LONG $0xeeeb0f66 // por xmm5, xmm6 - LONG $0x6e0f4166; BYTE $0xf2 // movd xmm6, r10d + LONG $0x6e0f4166; BYTE $0xf6 // movd xmm6, r14d QUAD $0x013a0674c40f4266 // pinsrw xmm6, word [rsi + r8 + 58], 1 QUAD $0x023a0e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 58], 2 QUAD $0x033a2674c40f4266 // pinsrw xmm6, word [rsi + r12 + 58], 3 QUAD $0x043a2e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 58], 4 LONG $0x74c40f66; WORD $0x3a0e; BYTE $0x05 // pinsrw xmm6, word [rsi + rcx + 58], 5 - LONG $0x74c40f66; WORD $0x3a3e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 58], 6 + LONG $0x74c40f66; WORD $0x3a16; BYTE $0x06 // pinsrw xmm6, word [rsi + rdx + 58], 6 LONG $0x74c40f66; WORD $0x3a1e; BYTE $0x07 // pinsrw xmm6, word [rsi + rbx + 58], 7 LONG $0xe9eb0f66 // por xmm5, xmm1 - LONG $0x6e0f4166; BYTE $0xce // movd xmm1, r14d + LONG $0xcf6e0f66 // movd xmm1, edi QUAD $0x013c064cc40f4266 // pinsrw xmm1, word [rsi + r8 + 60], 1 QUAD $0x023c0e4cc40f4266 // pinsrw xmm1, word [rsi + r9 + 60], 2 QUAD $0x033c264cc40f4266 // pinsrw xmm1, word [rsi + r12 + 60], 3 QUAD $0x043c2e4cc40f4266 // pinsrw xmm1, word [rsi + r13 + 60], 4 LONG $0x4cc40f66; WORD $0x3c0e; BYTE $0x05 // pinsrw xmm1, word [rsi + rcx + 60], 5 - LONG $0x4cc40f66; WORD $0x3c3e; BYTE $0x06 // pinsrw xmm1, word [rsi + rdi + 60], 6 + LONG $0x4cc40f66; WORD $0x3c16; BYTE $0x06 // pinsrw xmm1, word [rsi + rdx + 60], 6 LONG $0x4cc40f66; WORD $0x3c1e; BYTE $0x07 // pinsrw xmm1, word [rsi + rbx + 60], 7 LONG $0xf0750f66 // pcmpeqw xmm6, xmm0 LONG $0xf6630f66 // packsswb xmm6, xmm6 @@ -7925,10 +8379,9 @@ LBB1_111: QUAD $0x013e0674c40f4266 // pinsrw xmm6, word [rsi + r8 + 62], 1 QUAD $0x023e0e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 62], 2 QUAD $0x033e2674c40f4266 // pinsrw xmm6, word [rsi + r12 + 62], 3 - QUAD $0x0000008824b48b4c // mov r14, qword [rsp + 136] QUAD $0x043e2e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 62], 4 LONG $0x74c40f66; WORD $0x3e0e; BYTE $0x05 // pinsrw xmm6, word [rsi + rcx + 62], 5 - LONG $0x74c40f66; WORD $0x3e3e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 62], 6 + LONG $0x74c40f66; WORD $0x3e16; BYTE $0x06 // pinsrw xmm6, word [rsi + rdx + 62], 6 LONG $0x74c40f66; WORD $0x3e1e; BYTE $0x07 // pinsrw xmm6, word [rsi + rbx + 62], 7 LONG $0xf0750f66 // pcmpeqw xmm6, xmm0 LONG $0xf6630f66 // packsswb xmm6, xmm6 @@ -7948,31 +8401,30 @@ LBB1_111: LONG $0xe2600f66 // punpcklbw xmm4, xmm2 LONG $0xe3610f66 // punpcklwd xmm4, xmm3 LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] - LONG $0x7f0f41f3; WORD $0x8e24 // movdqu oword [r14 + 4*rcx], xmm4 - LONG $0x7f0f41f3; WORD $0x8e4c; BYTE $0x10 // movdqu oword [r14 + 4*rcx + 16], xmm1 + LONG $0x247f0ff3; BYTE $0x88 // movdqu oword [rax + 4*rcx], xmm4 + LONG $0x4c7f0ff3; WORD $0x1088 // movdqu oword [rax + 4*rcx + 16], xmm1 LONG $0x08c18348 // add rcx, 8 WORD $0x8949; BYTE $0xcf // mov r15, rcx - LONG $0x244c3b48; BYTE $0x10 // cmp rcx, qword [rsp + 16] - JNE LBB1_111 - QUAD $0x00000098249c8b4c // mov r11, qword [rsp + 152] - LONG $0x245c3b4c; BYTE $0x10 // cmp r11, qword [rsp + 16] + LONG $0x244c3b48; BYTE $0x20 // cmp rcx, qword [rsp + 32] + JNE LBB1_112 + QUAD $0x000000f024bc8b4c // mov r15, qword [rsp + 240] + LONG $0x247c3b4c; BYTE $0x20 // cmp r15, qword [rsp + 32] QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] - LONG $0x246c8b44; BYTE $0x38 // mov r13d, dword [rsp + 56] - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] - JNE LBB1_113 - JMP LBB1_116 + LONG $0x245c8b44; BYTE $0x04 // mov r11d, dword [rsp + 4] + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + JNE LBB1_114 + JMP LBB1_117 -LBB1_133: +LBB1_134: LONG $0xf8e78349 // and r15, -8 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x06e0c148 // shl rax, 6 WORD $0x0148; BYTE $0xf0 // add rax, rsi - LONG $0x24448948; BYTE $0x40 // mov qword [rsp + 64], rax - LONG $0x247c894c; BYTE $0x10 // mov qword [rsp + 16], r15 + LONG $0x24448948; BYTE $0x38 // mov qword [rsp + 56], rax + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LONG $0xbe048d4b // lea rax, [r14 + 4*r15] LONG $0x24448948; BYTE $0x08 // mov qword [rsp + 8], rax - LONG $0x246c8944; BYTE $0x38 // mov dword [rsp + 56], r13d - LONG $0x6e0f4166; BYTE $0xc5 // movd xmm0, r13d + LONG $0x6e0f4166; BYTE $0xc3 // movd xmm0, r11d LONG $0xc0700ff2; BYTE $0xe0 // pshuflw xmm0, xmm0, 224 LONG $0xc0700f66; BYTE $0x00 // pshufd xmm0, xmm0, 0 WORD $0x3145; BYTE $0xff // xor r15d, r15d @@ -7985,27 +8437,27 @@ LBB1_133: LONG $0x6f0f4466; WORD $0x6075 // movdqa xmm14, oword 96[rbp] /* [rip + .LCPI1_6] */ QUAD $0x0000008824b4894c // mov qword [rsp + 136], r14 -LBB1_134: +LBB1_135: LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 LONG $0x06e7c149 // shl r15, 6 WORD $0x894d; BYTE $0xf9 // mov r9, r15 WORD $0x894d; BYTE $0xfc // mov r12, r15 WORD $0x894d; BYTE $0xfd // mov r13, r15 WORD $0x894c; BYTE $0xf9 // mov rcx, r15 - WORD $0x894c; BYTE $0xff // mov rdi, r15 + WORD $0x894c; BYTE $0xfa // mov rdx, r15 WORD $0x894c; BYTE $0xfb // mov rbx, r15 LONG $0x34b70f46; BYTE $0x3e // movzx r14d, word [rsi + r15] LONG $0x44b70f42; WORD $0x023e // movzx eax, word [rsi + r15 + 2] - LONG $0x54b70f42; WORD $0x043e // movzx edx, word [rsi + r15 + 4] - LONG $0x5cb70f46; WORD $0x063e // movzx r11d, word [rsi + r15 + 6] - LONG $0x54b70f46; WORD $0x083e // movzx r10d, word [rsi + r15 + 8] + LONG $0x54b70f46; WORD $0x043e // movzx r10d, word [rsi + r15 + 4] + LONG $0x7cb70f42; WORD $0x063e // movzx edi, word [rsi + r15 + 6] + LONG $0x5cb70f46; WORD $0x083e // movzx r11d, word [rsi + r15 + 8] WORD $0x894d; BYTE $0xf8 // mov r8, r15 LONG $0x40c88349 // or r8, 64 LONG $0x80c98149; WORD $0x0000; BYTE $0x00 // or r9, 128 LONG $0xc0cc8149; WORD $0x0000; BYTE $0x00 // or r12, 192 LONG $0x00cd8149; WORD $0x0001; BYTE $0x00 // or r13, 256 LONG $0x40c98148; WORD $0x0001; BYTE $0x00 // or rcx, 320 - LONG $0x80cf8148; WORD $0x0001; BYTE $0x00 // or rdi, 384 + LONG $0x80ca8148; WORD $0x0001; BYTE $0x00 // or rdx, 384 LONG $0xc0cb8148; WORD $0x0001; BYTE $0x00 // or rbx, 448 LONG $0x6e0f4166; BYTE $0xe6 // movd xmm4, r14d LONG $0xc40f4266; WORD $0x0624; BYTE $0x01 // pinsrw xmm4, word [rsi + r8], 1 @@ -8013,7 +8465,7 @@ LBB1_134: LONG $0xc40f4266; WORD $0x2624; BYTE $0x03 // pinsrw xmm4, word [rsi + r12], 3 LONG $0xc40f4266; WORD $0x2e24; BYTE $0x04 // pinsrw xmm4, word [rsi + r13], 4 LONG $0x24c40f66; WORD $0x050e // pinsrw xmm4, word [rsi + rcx], 5 - LONG $0x24c40f66; WORD $0x063e // pinsrw xmm4, word [rsi + rdi], 6 + LONG $0x24c40f66; WORD $0x0616 // pinsrw xmm4, word [rsi + rdx], 6 LONG $0x24c40f66; WORD $0x071e // pinsrw xmm4, word [rsi + rbx], 7 LONG $0x74b70f46; WORD $0x0a3e // movzx r14d, word [rsi + r15 + 10] LONG $0xf06e0f66 // movd xmm6, eax @@ -8021,16 +8473,16 @@ LBB1_134: QUAD $0x02020e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 2], 2 QUAD $0x03022674c40f4266 // pinsrw xmm6, word [rsi + r12 + 2], 3 LONG $0x44b70f42; WORD $0x0c3e // movzx eax, word [rsi + r15 + 12] - LONG $0x20244489 // mov dword [rsp + 32], eax + LONG $0x18244489 // mov dword [rsp + 24], eax QUAD $0x04022e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 2], 4 - LONG $0xd26e0f66 // movd xmm2, edx - LONG $0x54b70f42; WORD $0x0e3e // movzx edx, word [rsi + r15 + 14] + LONG $0x6e0f4166; BYTE $0xd2 // movd xmm2, r10d + LONG $0x44b70f42; WORD $0x0e3e // movzx eax, word [rsi + r15 + 14] + LONG $0x10244489 // mov dword [rsp + 16], eax LONG $0x74c40f66; WORD $0x020e; BYTE $0x05 // pinsrw xmm6, word [rsi + rcx + 2], 5 - LONG $0x6e0f4166; BYTE $0xeb // movd xmm5, r11d - LONG $0x44b70f42; WORD $0x103e // movzx eax, word [rsi + r15 + 16] - LONG $0x18244489 // mov dword [rsp + 24], eax - LONG $0x74c40f66; WORD $0x023e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 2], 6 - LONG $0x6e0f4166; BYTE $0xda // movd xmm3, r10d + LONG $0xef6e0f66 // movd xmm5, edi + LONG $0x7cb70f42; WORD $0x103e // movzx edi, word [rsi + r15 + 16] + LONG $0x74c40f66; WORD $0x0216; BYTE $0x06 // pinsrw xmm6, word [rsi + rdx + 2], 6 + LONG $0x6e0f4166; BYTE $0xdb // movd xmm3, r11d LONG $0x44b70f42; WORD $0x123e // movzx eax, word [rsi + r15 + 18] LONG $0x30244489 // mov dword [rsp + 48], eax LONG $0x74c40f66; WORD $0x021e; BYTE $0x07 // pinsrw xmm6, word [rsi + rbx + 2], 7 @@ -8040,7 +8492,7 @@ LBB1_134: LONG $0xdb0f4166; BYTE $0xcf // pand xmm1, xmm15 LONG $0xcef80f66 // psubb xmm1, xmm6 LONG $0x6e0f4166; BYTE $0xf6 // movd xmm6, r14d - LONG $0x5cb70f46; WORD $0x143e // movzx r11d, word [rsi + r15 + 20] + LONG $0x54b70f46; WORD $0x143e // movzx r10d, word [rsi + r15 + 20] LONG $0xe0750f66 // pcmpeqw xmm4, xmm0 LONG $0xe4630f66 // packsswb xmm4, xmm4 LONG $0xdb0f4166; BYTE $0xe7 // pand xmm4, xmm15 @@ -8049,24 +8501,24 @@ LBB1_134: QUAD $0x03042654c40f4266 // pinsrw xmm2, word [rsi + r12 + 4], 3 QUAD $0x04042e54c40f4266 // pinsrw xmm2, word [rsi + r13 + 4], 4 LONG $0x54c40f66; WORD $0x040e; BYTE $0x05 // pinsrw xmm2, word [rsi + rcx + 4], 5 - LONG $0x54c40f66; WORD $0x043e; BYTE $0x06 // pinsrw xmm2, word [rsi + rdi + 4], 6 + LONG $0x54c40f66; WORD $0x0416; BYTE $0x06 // pinsrw xmm2, word [rsi + rdx + 4], 6 LONG $0x54c40f66; WORD $0x041e; BYTE $0x07 // pinsrw xmm2, word [rsi + rbx + 4], 7 QUAD $0x0106066cc40f4266 // pinsrw xmm5, word [rsi + r8 + 6], 1 QUAD $0x02060e6cc40f4266 // pinsrw xmm5, word [rsi + r9 + 6], 2 QUAD $0x0306266cc40f4266 // pinsrw xmm5, word [rsi + r12 + 6], 3 QUAD $0x04062e6cc40f4266 // pinsrw xmm5, word [rsi + r13 + 6], 4 LONG $0x6cc40f66; WORD $0x060e; BYTE $0x05 // pinsrw xmm5, word [rsi + rcx + 6], 5 - LONG $0x6cc40f66; WORD $0x063e; BYTE $0x06 // pinsrw xmm5, word [rsi + rdi + 6], 6 + LONG $0x6cc40f66; WORD $0x0616; BYTE $0x06 // pinsrw xmm5, word [rsi + rdx + 6], 6 LONG $0x6cc40f66; WORD $0x061e; BYTE $0x07 // pinsrw xmm5, word [rsi + rbx + 6], 7 QUAD $0x0108065cc40f4266 // pinsrw xmm3, word [rsi + r8 + 8], 1 QUAD $0x02080e5cc40f4266 // pinsrw xmm3, word [rsi + r9 + 8], 2 QUAD $0x0308265cc40f4266 // pinsrw xmm3, word [rsi + r12 + 8], 3 QUAD $0x04082e5cc40f4266 // pinsrw xmm3, word [rsi + r13 + 8], 4 LONG $0x5cc40f66; WORD $0x080e; BYTE $0x05 // pinsrw xmm3, word [rsi + rcx + 8], 5 - LONG $0x5cc40f66; WORD $0x083e; BYTE $0x06 // pinsrw xmm3, word [rsi + rdi + 8], 6 + LONG $0x5cc40f66; WORD $0x0816; BYTE $0x06 // pinsrw xmm3, word [rsi + rdx + 8], 6 LONG $0x5cc40f66; WORD $0x081e; BYTE $0x07 // pinsrw xmm3, word [rsi + rbx + 8], 7 LONG $0xcceb0f66 // por xmm1, xmm4 - LONG $0x7c6e0f66; WORD $0x2024 // movd xmm7, dword [rsp + 32] + LONG $0x7c6e0f66; WORD $0x1824 // movd xmm7, dword [rsp + 24] LONG $0x44b70f42; WORD $0x163e // movzx eax, word [rsi + r15 + 22] LONG $0xd0750f66 // pcmpeqw xmm2, xmm0 LONG $0xd2630f66 // packsswb xmm2, xmm2 @@ -8074,8 +8526,8 @@ LBB1_134: LONG $0xf2710f66; BYTE $0x02 // psllw xmm2, 2 LONG $0xdb0f4166; BYTE $0xd1 // pand xmm2, xmm9 LONG $0xd1eb0f66 // por xmm2, xmm1 - LONG $0xe26e0f66 // movd xmm4, edx - LONG $0x54b70f42; WORD $0x183e // movzx edx, word [rsi + r15 + 24] + LONG $0x646e0f66; WORD $0x1024 // movd xmm4, dword [rsp + 16] + LONG $0x5cb70f46; WORD $0x183e // movzx r11d, word [rsi + r15 + 24] LONG $0xe8750f66 // pcmpeqw xmm5, xmm0 LONG $0xed630f66 // packsswb xmm5, xmm5 LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 @@ -8087,21 +8539,21 @@ LBB1_134: LONG $0xf3710f66; BYTE $0x04 // psllw xmm3, 4 LONG $0xdb0f4166; BYTE $0xdb // pand xmm3, xmm11 LONG $0xddeb0f66 // por xmm3, xmm5 - LONG $0x4c6e0f66; WORD $0x1824 // movd xmm1, dword [rsp + 24] - LONG $0x54b70f46; WORD $0x1a3e // movzx r10d, word [rsi + r15 + 26] + LONG $0xcf6e0f66 // movd xmm1, edi + LONG $0x7cb70f42; WORD $0x1a3e // movzx edi, word [rsi + r15 + 26] QUAD $0x010a0674c40f4266 // pinsrw xmm6, word [rsi + r8 + 10], 1 QUAD $0x020a0e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 10], 2 QUAD $0x030a2674c40f4266 // pinsrw xmm6, word [rsi + r12 + 10], 3 QUAD $0x040a2e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 10], 4 LONG $0x74c40f66; WORD $0x0a0e; BYTE $0x05 // pinsrw xmm6, word [rsi + rcx + 10], 5 - LONG $0x74c40f66; WORD $0x0a3e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 10], 6 + LONG $0x74c40f66; WORD $0x0a16; BYTE $0x06 // pinsrw xmm6, word [rsi + rdx + 10], 6 LONG $0x74c40f66; WORD $0x0a1e; BYTE $0x07 // pinsrw xmm6, word [rsi + rbx + 10], 7 QUAD $0x010c067cc40f4266 // pinsrw xmm7, word [rsi + r8 + 12], 1 QUAD $0x020c0e7cc40f4266 // pinsrw xmm7, word [rsi + r9 + 12], 2 QUAD $0x030c267cc40f4266 // pinsrw xmm7, word [rsi + r12 + 12], 3 QUAD $0x040c2e7cc40f4266 // pinsrw xmm7, word [rsi + r13 + 12], 4 LONG $0x7cc40f66; WORD $0x0c0e; BYTE $0x05 // pinsrw xmm7, word [rsi + rcx + 12], 5 - LONG $0x7cc40f66; WORD $0x0c3e; BYTE $0x06 // pinsrw xmm7, word [rsi + rdi + 12], 6 + LONG $0x7cc40f66; WORD $0x0c16; BYTE $0x06 // pinsrw xmm7, word [rsi + rdx + 12], 6 LONG $0x7cc40f66; WORD $0x0c1e; BYTE $0x07 // pinsrw xmm7, word [rsi + rbx + 12], 7 LONG $0xdaeb0f66 // por xmm3, xmm2 LONG $0x6e0f4466; WORD $0x2444; BYTE $0x30 // movd xmm8, dword [rsp + 48] @@ -8117,21 +8569,21 @@ LBB1_134: LONG $0xf7710f66; BYTE $0x06 // psllw xmm7, 6 LONG $0xdb0f4166; BYTE $0xfd // pand xmm7, xmm13 LONG $0xfeeb0f66 // por xmm7, xmm6 - LONG $0x6e0f4166; BYTE $0xeb // movd xmm5, r11d - LONG $0x5cb70f46; WORD $0x1e3e // movzx r11d, word [rsi + r15 + 30] + LONG $0x6e0f4166; BYTE $0xea // movd xmm5, r10d + LONG $0x54b70f46; WORD $0x1e3e // movzx r10d, word [rsi + r15 + 30] QUAD $0x010e0664c40f4266 // pinsrw xmm4, word [rsi + r8 + 14], 1 QUAD $0x020e0e64c40f4266 // pinsrw xmm4, word [rsi + r9 + 14], 2 QUAD $0x030e2664c40f4266 // pinsrw xmm4, word [rsi + r12 + 14], 3 QUAD $0x040e2e64c40f4266 // pinsrw xmm4, word [rsi + r13 + 14], 4 LONG $0x64c40f66; WORD $0x0e0e; BYTE $0x05 // pinsrw xmm4, word [rsi + rcx + 14], 5 - LONG $0x64c40f66; WORD $0x0e3e; BYTE $0x06 // pinsrw xmm4, word [rsi + rdi + 14], 6 + LONG $0x64c40f66; WORD $0x0e16; BYTE $0x06 // pinsrw xmm4, word [rsi + rdx + 14], 6 LONG $0x64c40f66; WORD $0x0e1e; BYTE $0x07 // pinsrw xmm4, word [rsi + rbx + 14], 7 QUAD $0x01120644c40f4666 // pinsrw xmm8, word [rsi + r8 + 18], 1 QUAD $0x02120e44c40f4666 // pinsrw xmm8, word [rsi + r9 + 18], 2 QUAD $0x03122644c40f4666 // pinsrw xmm8, word [rsi + r12 + 18], 3 QUAD $0x04122e44c40f4666 // pinsrw xmm8, word [rsi + r13 + 18], 4 QUAD $0x05120e44c40f4466 // pinsrw xmm8, word [rsi + rcx + 18], 5 - QUAD $0x06123e44c40f4466 // pinsrw xmm8, word [rsi + rdi + 18], 6 + QUAD $0x06121644c40f4466 // pinsrw xmm8, word [rsi + rdx + 18], 6 QUAD $0x07121e44c40f4466 // pinsrw xmm8, word [rsi + rbx + 18], 7 LONG $0xe0750f66 // pcmpeqw xmm4, xmm0 LONG $0xe4630f66 // packsswb xmm4, xmm4 @@ -8146,28 +8598,28 @@ LBB1_134: LONG $0x6f0f4166; BYTE $0xf8 // movdqa xmm7, xmm8 LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 LONG $0xf80f4166; BYTE $0xf8 // psubb xmm7, xmm8 - LONG $0xda6e0f66 // movd xmm3, edx - LONG $0x54b70f42; WORD $0x223e // movzx edx, word [rsi + r15 + 34] - LONG $0x20245489 // mov dword [rsp + 32], edx + LONG $0x6e0f4166; BYTE $0xdb // movd xmm3, r11d + LONG $0x5cb70f46; WORD $0x223e // movzx r11d, word [rsi + r15 + 34] QUAD $0x0110064cc40f4266 // pinsrw xmm1, word [rsi + r8 + 16], 1 QUAD $0x02100e4cc40f4266 // pinsrw xmm1, word [rsi + r9 + 16], 2 QUAD $0x0310264cc40f4266 // pinsrw xmm1, word [rsi + r12 + 16], 3 QUAD $0x04102e4cc40f4266 // pinsrw xmm1, word [rsi + r13 + 16], 4 LONG $0x4cc40f66; WORD $0x100e; BYTE $0x05 // pinsrw xmm1, word [rsi + rcx + 16], 5 - LONG $0x4cc40f66; WORD $0x103e; BYTE $0x06 // pinsrw xmm1, word [rsi + rdi + 16], 6 + LONG $0x4cc40f66; WORD $0x1016; BYTE $0x06 // pinsrw xmm1, word [rsi + rdx + 16], 6 LONG $0x4cc40f66; WORD $0x101e; BYTE $0x07 // pinsrw xmm1, word [rsi + rbx + 16], 7 LONG $0xc8750f66 // pcmpeqw xmm1, xmm0 LONG $0xc9630f66 // packsswb xmm1, xmm1 LONG $0xdb0f4166; BYTE $0xcf // pand xmm1, xmm15 LONG $0xf9eb0f66 // por xmm7, xmm1 - LONG $0x6e0f4166; BYTE $0xf2 // movd xmm6, r10d - LONG $0x54b70f46; WORD $0x243e // movzx r10d, word [rsi + r15 + 36] + LONG $0xf76e0f66 // movd xmm6, edi + LONG $0x7cb70f42; WORD $0x243e // movzx edi, word [rsi + r15 + 36] + LONG $0x30247c89 // mov dword [rsp + 48], edi QUAD $0x0114066cc40f4266 // pinsrw xmm5, word [rsi + r8 + 20], 1 QUAD $0x02140e6cc40f4266 // pinsrw xmm5, word [rsi + r9 + 20], 2 QUAD $0x0314266cc40f4266 // pinsrw xmm5, word [rsi + r12 + 20], 3 QUAD $0x04142e6cc40f4266 // pinsrw xmm5, word [rsi + r13 + 20], 4 LONG $0x6cc40f66; WORD $0x140e; BYTE $0x05 // pinsrw xmm5, word [rsi + rcx + 20], 5 - LONG $0x6cc40f66; WORD $0x143e; BYTE $0x06 // pinsrw xmm5, word [rsi + rdi + 20], 6 + LONG $0x6cc40f66; WORD $0x1416; BYTE $0x06 // pinsrw xmm5, word [rsi + rdx + 20], 6 LONG $0x6cc40f66; WORD $0x141e; BYTE $0x07 // pinsrw xmm5, word [rsi + rbx + 20], 7 LONG $0xe8750f66 // pcmpeqw xmm5, xmm0 LONG $0xed630f66 // packsswb xmm5, xmm5 @@ -8176,21 +8628,21 @@ LBB1_134: LONG $0xdb0f4166; BYTE $0xe9 // pand xmm5, xmm9 LONG $0xefeb0f66 // por xmm5, xmm7 LONG $0x6e0f4166; BYTE $0xfe // movd xmm7, r14d - LONG $0x54b70f42; WORD $0x263e // movzx edx, word [rsi + r15 + 38] - LONG $0x18245489 // mov dword [rsp + 24], edx + LONG $0x7cb70f42; WORD $0x263e // movzx edi, word [rsi + r15 + 38] + LONG $0x10247c89 // mov dword [rsp + 16], edi QUAD $0x01160654c40f4266 // pinsrw xmm2, word [rsi + r8 + 22], 1 QUAD $0x02160e54c40f4266 // pinsrw xmm2, word [rsi + r9 + 22], 2 QUAD $0x03162654c40f4266 // pinsrw xmm2, word [rsi + r12 + 22], 3 QUAD $0x04162e54c40f4266 // pinsrw xmm2, word [rsi + r13 + 22], 4 LONG $0x54c40f66; WORD $0x160e; BYTE $0x05 // pinsrw xmm2, word [rsi + rcx + 22], 5 - LONG $0x54c40f66; WORD $0x163e; BYTE $0x06 // pinsrw xmm2, word [rsi + rdi + 22], 6 + LONG $0x54c40f66; WORD $0x1616; BYTE $0x06 // pinsrw xmm2, word [rsi + rdx + 22], 6 LONG $0x54c40f66; WORD $0x161e; BYTE $0x07 // pinsrw xmm2, word [rsi + rbx + 22], 7 QUAD $0x0118065cc40f4266 // pinsrw xmm3, word [rsi + r8 + 24], 1 QUAD $0x02180e5cc40f4266 // pinsrw xmm3, word [rsi + r9 + 24], 2 QUAD $0x0318265cc40f4266 // pinsrw xmm3, word [rsi + r12 + 24], 3 QUAD $0x04182e5cc40f4266 // pinsrw xmm3, word [rsi + r13 + 24], 4 LONG $0x5cc40f66; WORD $0x180e; BYTE $0x05 // pinsrw xmm3, word [rsi + rcx + 24], 5 - LONG $0x5cc40f66; WORD $0x183e; BYTE $0x06 // pinsrw xmm3, word [rsi + rdi + 24], 6 + LONG $0x5cc40f66; WORD $0x1816; BYTE $0x06 // pinsrw xmm3, word [rsi + rdx + 24], 6 LONG $0x5cc40f66; WORD $0x181e; BYTE $0x07 // pinsrw xmm3, word [rsi + rbx + 24], 7 LONG $0xd0750f66 // pcmpeqw xmm2, xmm0 LONG $0xd2630f66 // packsswb xmm2, xmm2 @@ -8203,31 +8655,32 @@ LBB1_134: LONG $0xf3710f66; BYTE $0x04 // psllw xmm3, 4 LONG $0xdb0f4166; BYTE $0xdb // pand xmm3, xmm11 LONG $0xdaeb0f66 // por xmm3, xmm2 - LONG $0x6e0f4166; BYTE $0xd3 // movd xmm2, r11d - LONG $0x74b70f46; WORD $0x283e // movzx r14d, word [rsi + r15 + 40] + LONG $0x6e0f4166; BYTE $0xd2 // movd xmm2, r10d + LONG $0x7cb70f42; WORD $0x283e // movzx edi, word [rsi + r15 + 40] LONG $0xddeb0f66 // por xmm3, xmm5 LONG $0xe86e0f66 // movd xmm5, eax - LONG $0x5cb70f46; WORD $0x2a3e // movzx r11d, word [rsi + r15 + 42] + LONG $0x44b70f42; WORD $0x2a3e // movzx eax, word [rsi + r15 + 42] + LONG $0x18244489 // mov dword [rsp + 24], eax QUAD $0x011a0674c40f4266 // pinsrw xmm6, word [rsi + r8 + 26], 1 QUAD $0x021a0e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 26], 2 QUAD $0x031a2674c40f4266 // pinsrw xmm6, word [rsi + r12 + 26], 3 QUAD $0x041a2e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 26], 4 LONG $0x74c40f66; WORD $0x1a0e; BYTE $0x05 // pinsrw xmm6, word [rsi + rcx + 26], 5 - LONG $0x74c40f66; WORD $0x1a3e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 26], 6 + LONG $0x74c40f66; WORD $0x1a16; BYTE $0x06 // pinsrw xmm6, word [rsi + rdx + 26], 6 LONG $0x74c40f66; WORD $0x1a1e; BYTE $0x07 // pinsrw xmm6, word [rsi + rbx + 26], 7 QUAD $0x011c067cc40f4266 // pinsrw xmm7, word [rsi + r8 + 28], 1 QUAD $0x021c0e7cc40f4266 // pinsrw xmm7, word [rsi + r9 + 28], 2 QUAD $0x031c267cc40f4266 // pinsrw xmm7, word [rsi + r12 + 28], 3 QUAD $0x041c2e7cc40f4266 // pinsrw xmm7, word [rsi + r13 + 28], 4 LONG $0x7cc40f66; WORD $0x1c0e; BYTE $0x05 // pinsrw xmm7, word [rsi + rcx + 28], 5 - LONG $0x7cc40f66; WORD $0x1c3e; BYTE $0x06 // pinsrw xmm7, word [rsi + rdi + 28], 6 + LONG $0x7cc40f66; WORD $0x1c16; BYTE $0x06 // pinsrw xmm7, word [rsi + rdx + 28], 6 LONG $0x7cc40f66; WORD $0x1c1e; BYTE $0x07 // pinsrw xmm7, word [rsi + rbx + 28], 7 QUAD $0x011e0654c40f4266 // pinsrw xmm2, word [rsi + r8 + 30], 1 QUAD $0x021e0e54c40f4266 // pinsrw xmm2, word [rsi + r9 + 30], 2 QUAD $0x031e2654c40f4266 // pinsrw xmm2, word [rsi + r12 + 30], 3 QUAD $0x041e2e54c40f4266 // pinsrw xmm2, word [rsi + r13 + 30], 4 LONG $0x54c40f66; WORD $0x1e0e; BYTE $0x05 // pinsrw xmm2, word [rsi + rcx + 30], 5 - LONG $0x54c40f66; WORD $0x1e3e; BYTE $0x06 // pinsrw xmm2, word [rsi + rdi + 30], 6 + LONG $0x54c40f66; WORD $0x1e16; BYTE $0x06 // pinsrw xmm2, word [rsi + rdx + 30], 6 LONG $0x54c40f66; WORD $0x1e1e; BYTE $0x07 // pinsrw xmm2, word [rsi + rbx + 30], 7 LONG $0xf0750f66 // pcmpeqw xmm6, xmm0 LONG $0xf6630f66 // packsswb xmm6, xmm6 @@ -8240,27 +8693,27 @@ LBB1_134: LONG $0xf7710f66; BYTE $0x06 // psllw xmm7, 6 LONG $0xdb0f4166; BYTE $0xfd // pand xmm7, xmm13 LONG $0xfeeb0f66 // por xmm7, xmm6 - LONG $0x4c6e0f66; WORD $0x2024 // movd xmm1, dword [rsp + 32] - LONG $0x54b70f42; WORD $0x2c3e // movzx edx, word [rsi + r15 + 44] + LONG $0x6e0f4166; BYTE $0xcb // movd xmm1, r11d + LONG $0x54b70f46; WORD $0x2c3e // movzx r10d, word [rsi + r15 + 44] LONG $0xd0750f66 // pcmpeqw xmm2, xmm0 LONG $0xd2630f66 // packsswb xmm2, xmm2 LONG $0xf2710f66; BYTE $0x07 // psllw xmm2, 7 LONG $0xdb0f4166; BYTE $0xd6 // pand xmm2, xmm14 LONG $0xd7eb0f66 // por xmm2, xmm7 - LONG $0x6e0f4166; BYTE $0xf2 // movd xmm6, r10d - LONG $0x44b70f42; WORD $0x2e3e // movzx eax, word [rsi + r15 + 46] + LONG $0x746e0f66; WORD $0x3024 // movd xmm6, dword [rsp + 48] + LONG $0x74b70f46; WORD $0x2e3e // movzx r14d, word [rsi + r15 + 46] QUAD $0x0120066cc40f4266 // pinsrw xmm5, word [rsi + r8 + 32], 1 QUAD $0x02200e6cc40f4266 // pinsrw xmm5, word [rsi + r9 + 32], 2 QUAD $0x0320266cc40f4266 // pinsrw xmm5, word [rsi + r12 + 32], 3 QUAD $0x04202e6cc40f4266 // pinsrw xmm5, word [rsi + r13 + 32], 4 LONG $0x6cc40f66; WORD $0x200e; BYTE $0x05 // pinsrw xmm5, word [rsi + rcx + 32], 5 - LONG $0x6cc40f66; WORD $0x203e; BYTE $0x06 // pinsrw xmm5, word [rsi + rdi + 32], 6 + LONG $0x6cc40f66; WORD $0x2016; BYTE $0x06 // pinsrw xmm5, word [rsi + rdx + 32], 6 QUAD $0x0122064cc40f4266 // pinsrw xmm1, word [rsi + r8 + 34], 1 QUAD $0x02220e4cc40f4266 // pinsrw xmm1, word [rsi + r9 + 34], 2 QUAD $0x0322264cc40f4266 // pinsrw xmm1, word [rsi + r12 + 34], 3 QUAD $0x04222e4cc40f4266 // pinsrw xmm1, word [rsi + r13 + 34], 4 LONG $0x4cc40f66; WORD $0x220e; BYTE $0x05 // pinsrw xmm1, word [rsi + rcx + 34], 5 - LONG $0x4cc40f66; WORD $0x223e; BYTE $0x06 // pinsrw xmm1, word [rsi + rdi + 34], 6 + LONG $0x4cc40f66; WORD $0x2216; BYTE $0x06 // pinsrw xmm1, word [rsi + rdx + 34], 6 LONG $0x4cc40f66; WORD $0x221e; BYTE $0x07 // pinsrw xmm1, word [rsi + rbx + 34], 7 LONG $0xd3eb0f66 // por xmm2, xmm3 LONG $0xc8750f66 // pcmpeqw xmm1, xmm0 @@ -8268,8 +8721,9 @@ LBB1_134: LONG $0xf96f0f66 // movdqa xmm7, xmm1 LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 LONG $0xf9f80f66 // psubb xmm7, xmm1 - LONG $0x5c6e0f66; WORD $0x1824 // movd xmm3, dword [rsp + 24] - LONG $0x54b70f46; WORD $0x303e // movzx r10d, word [rsi + r15 + 48] + LONG $0x5c6e0f66; WORD $0x1024 // movd xmm3, dword [rsp + 16] + LONG $0x44b70f42; WORD $0x303e // movzx eax, word [rsi + r15 + 48] + LONG $0x10244489 // mov dword [rsp + 16], eax LONG $0x6cc40f66; WORD $0x201e; BYTE $0x07 // pinsrw xmm5, word [rsi + rbx + 32], 7 LONG $0xe8750f66 // pcmpeqw xmm5, xmm0 LONG $0xed630f66 // packsswb xmm5, xmm5 @@ -8279,32 +8733,33 @@ LBB1_134: QUAD $0x03242674c40f4266 // pinsrw xmm6, word [rsi + r12 + 36], 3 QUAD $0x04242e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 36], 4 LONG $0x74c40f66; WORD $0x240e; BYTE $0x05 // pinsrw xmm6, word [rsi + rcx + 36], 5 - LONG $0x74c40f66; WORD $0x243e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 36], 6 + LONG $0x74c40f66; WORD $0x2416; BYTE $0x06 // pinsrw xmm6, word [rsi + rdx + 36], 6 LONG $0x74c40f66; WORD $0x241e; BYTE $0x07 // pinsrw xmm6, word [rsi + rbx + 36], 7 QUAD $0x0126065cc40f4266 // pinsrw xmm3, word [rsi + r8 + 38], 1 QUAD $0x02260e5cc40f4266 // pinsrw xmm3, word [rsi + r9 + 38], 2 QUAD $0x0326265cc40f4266 // pinsrw xmm3, word [rsi + r12 + 38], 3 QUAD $0x04262e5cc40f4266 // pinsrw xmm3, word [rsi + r13 + 38], 4 LONG $0x5cc40f66; WORD $0x260e; BYTE $0x05 // pinsrw xmm3, word [rsi + rcx + 38], 5 - LONG $0x5cc40f66; WORD $0x263e; BYTE $0x06 // pinsrw xmm3, word [rsi + rdi + 38], 6 + LONG $0x5cc40f66; WORD $0x2616; BYTE $0x06 // pinsrw xmm3, word [rsi + rdx + 38], 6 LONG $0x5cc40f66; WORD $0x261e; BYTE $0x07 // pinsrw xmm3, word [rsi + rbx + 38], 7 LONG $0xfdeb0f66 // por xmm7, xmm5 - LONG $0x6e0f4166; BYTE $0xee // movd xmm5, r14d + LONG $0xef6e0f66 // movd xmm5, edi QUAD $0x0128066cc40f4266 // pinsrw xmm5, word [rsi + r8 + 40], 1 QUAD $0x02280e6cc40f4266 // pinsrw xmm5, word [rsi + r9 + 40], 2 QUAD $0x0328266cc40f4266 // pinsrw xmm5, word [rsi + r12 + 40], 3 QUAD $0x04282e6cc40f4266 // pinsrw xmm5, word [rsi + r13 + 40], 4 LONG $0x6cc40f66; WORD $0x280e; BYTE $0x05 // pinsrw xmm5, word [rsi + rcx + 40], 5 - LONG $0x6cc40f66; WORD $0x283e; BYTE $0x06 // pinsrw xmm5, word [rsi + rdi + 40], 6 - LONG $0x74b70f46; WORD $0x323e // movzx r14d, word [rsi + r15 + 50] + LONG $0x6cc40f66; WORD $0x2816; BYTE $0x06 // pinsrw xmm5, word [rsi + rdx + 40], 6 + LONG $0x44b70f42; WORD $0x323e // movzx eax, word [rsi + r15 + 50] LONG $0xf0750f66 // pcmpeqw xmm6, xmm0 LONG $0xf6630f66 // packsswb xmm6, xmm6 LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 LONG $0xf6710f66; BYTE $0x02 // psllw xmm6, 2 LONG $0xdb0f4166; BYTE $0xf1 // pand xmm6, xmm9 LONG $0xf7eb0f66 // por xmm6, xmm7 - LONG $0x6e0f4166; BYTE $0xcb // movd xmm1, r11d - LONG $0x5cb70f46; WORD $0x343e // movzx r11d, word [rsi + r15 + 52] + LONG $0x4c6e0f66; WORD $0x1824 // movd xmm1, dword [rsp + 24] + LONG $0x7cb70f42; WORD $0x343e // movzx edi, word [rsi + r15 + 52] + LONG $0x18247c89 // mov dword [rsp + 24], edi LONG $0x6cc40f66; WORD $0x281e; BYTE $0x07 // pinsrw xmm5, word [rsi + rbx + 40], 7 LONG $0xd8750f66 // pcmpeqw xmm3, xmm0 LONG $0xdb630f66 // packsswb xmm3, xmm3 @@ -8317,24 +8772,24 @@ LBB1_134: LONG $0xf5710f66; BYTE $0x04 // psllw xmm5, 4 LONG $0xdb0f4166; BYTE $0xeb // pand xmm5, xmm11 LONG $0xebeb0f66 // por xmm5, xmm3 - LONG $0xfa6e0f66 // movd xmm7, edx - LONG $0x54b70f42; WORD $0x363e // movzx edx, word [rsi + r15 + 54] + LONG $0x6e0f4166; BYTE $0xfa // movd xmm7, r10d + LONG $0x5cb70f46; WORD $0x363e // movzx r11d, word [rsi + r15 + 54] QUAD $0x012a064cc40f4266 // pinsrw xmm1, word [rsi + r8 + 42], 1 QUAD $0x022a0e4cc40f4266 // pinsrw xmm1, word [rsi + r9 + 42], 2 QUAD $0x032a264cc40f4266 // pinsrw xmm1, word [rsi + r12 + 42], 3 QUAD $0x042a2e4cc40f4266 // pinsrw xmm1, word [rsi + r13 + 42], 4 LONG $0x4cc40f66; WORD $0x2a0e; BYTE $0x05 // pinsrw xmm1, word [rsi + rcx + 42], 5 - LONG $0x4cc40f66; WORD $0x2a3e; BYTE $0x06 // pinsrw xmm1, word [rsi + rdi + 42], 6 + LONG $0x4cc40f66; WORD $0x2a16; BYTE $0x06 // pinsrw xmm1, word [rsi + rdx + 42], 6 LONG $0x4cc40f66; WORD $0x2a1e; BYTE $0x07 // pinsrw xmm1, word [rsi + rbx + 42], 7 QUAD $0x012c067cc40f4266 // pinsrw xmm7, word [rsi + r8 + 44], 1 QUAD $0x022c0e7cc40f4266 // pinsrw xmm7, word [rsi + r9 + 44], 2 QUAD $0x032c267cc40f4266 // pinsrw xmm7, word [rsi + r12 + 44], 3 QUAD $0x042c2e7cc40f4266 // pinsrw xmm7, word [rsi + r13 + 44], 4 LONG $0x7cc40f66; WORD $0x2c0e; BYTE $0x05 // pinsrw xmm7, word [rsi + rcx + 44], 5 - LONG $0x7cc40f66; WORD $0x2c3e; BYTE $0x06 // pinsrw xmm7, word [rsi + rdi + 44], 6 + LONG $0x7cc40f66; WORD $0x2c16; BYTE $0x06 // pinsrw xmm7, word [rsi + rdx + 44], 6 LONG $0xeeeb0f66 // por xmm5, xmm6 - LONG $0xd86e0f66 // movd xmm3, eax - LONG $0x44b70f42; WORD $0x383e // movzx eax, word [rsi + r15 + 56] + LONG $0x6e0f4166; BYTE $0xde // movd xmm3, r14d + LONG $0x54b70f46; WORD $0x383e // movzx r10d, word [rsi + r15 + 56] LONG $0x7cc40f66; WORD $0x2c1e; BYTE $0x07 // pinsrw xmm7, word [rsi + rbx + 44], 7 LONG $0xc8750f66 // pcmpeqw xmm1, xmm0 LONG $0xc9630f66 // packsswb xmm1, xmm1 @@ -8347,29 +8802,29 @@ LBB1_134: LONG $0xf7710f66; BYTE $0x06 // psllw xmm7, 6 LONG $0xdb0f4166; BYTE $0xfd // pand xmm7, xmm13 LONG $0xf9eb0f66 // por xmm7, xmm1 - LONG $0x6e0f4166; BYTE $0xf2 // movd xmm6, r10d - LONG $0x54b70f46; WORD $0x3a3e // movzx r10d, word [rsi + r15 + 58] + LONG $0x746e0f66; WORD $0x1024 // movd xmm6, dword [rsp + 16] + LONG $0x74b70f46; WORD $0x3a3e // movzx r14d, word [rsi + r15 + 58] QUAD $0x012e065cc40f4266 // pinsrw xmm3, word [rsi + r8 + 46], 1 QUAD $0x022e0e5cc40f4266 // pinsrw xmm3, word [rsi + r9 + 46], 2 QUAD $0x032e265cc40f4266 // pinsrw xmm3, word [rsi + r12 + 46], 3 QUAD $0x042e2e5cc40f4266 // pinsrw xmm3, word [rsi + r13 + 46], 4 LONG $0x5cc40f66; WORD $0x2e0e; BYTE $0x05 // pinsrw xmm3, word [rsi + rcx + 46], 5 - LONG $0x5cc40f66; WORD $0x2e3e; BYTE $0x06 // pinsrw xmm3, word [rsi + rdi + 46], 6 + LONG $0x5cc40f66; WORD $0x2e16; BYTE $0x06 // pinsrw xmm3, word [rsi + rdx + 46], 6 LONG $0x5cc40f66; WORD $0x2e1e; BYTE $0x07 // pinsrw xmm3, word [rsi + rbx + 46], 7 LONG $0xd8750f66 // pcmpeqw xmm3, xmm0 LONG $0xdb630f66 // packsswb xmm3, xmm3 LONG $0xf3710f66; BYTE $0x07 // psllw xmm3, 7 LONG $0xdb0f4166; BYTE $0xde // pand xmm3, xmm14 LONG $0xdfeb0f66 // por xmm3, xmm7 - LONG $0x6e0f4166; BYTE $0xce // movd xmm1, r14d - LONG $0x74b70f46; WORD $0x3c3e // movzx r14d, word [rsi + r15 + 60] + LONG $0xc86e0f66 // movd xmm1, eax + LONG $0x7cb70f42; WORD $0x3c3e // movzx edi, word [rsi + r15 + 60] LONG $0x7cb70f46; WORD $0x3e3e // movzx r15d, word [rsi + r15 + 62] QUAD $0x0132064cc40f4266 // pinsrw xmm1, word [rsi + r8 + 50], 1 QUAD $0x02320e4cc40f4266 // pinsrw xmm1, word [rsi + r9 + 50], 2 QUAD $0x0332264cc40f4266 // pinsrw xmm1, word [rsi + r12 + 50], 3 QUAD $0x04322e4cc40f4266 // pinsrw xmm1, word [rsi + r13 + 50], 4 LONG $0x4cc40f66; WORD $0x320e; BYTE $0x05 // pinsrw xmm1, word [rsi + rcx + 50], 5 - LONG $0x4cc40f66; WORD $0x323e; BYTE $0x06 // pinsrw xmm1, word [rsi + rdi + 50], 6 + LONG $0x4cc40f66; WORD $0x3216; BYTE $0x06 // pinsrw xmm1, word [rsi + rdx + 50], 6 LONG $0x4cc40f66; WORD $0x321e; BYTE $0x07 // pinsrw xmm1, word [rsi + rbx + 50], 7 LONG $0xddeb0f66 // por xmm3, xmm5 LONG $0xc8750f66 // pcmpeqw xmm1, xmm0 @@ -8377,13 +8832,14 @@ LBB1_134: LONG $0xe96f0f66 // movdqa xmm5, xmm1 LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 LONG $0xe9f80f66 // psubb xmm5, xmm1 - LONG $0x6e0f4166; BYTE $0xcb // movd xmm1, r11d + LONG $0x4c6e0f66; WORD $0x1824 // movd xmm1, dword [rsp + 24] + QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] QUAD $0x01300674c40f4266 // pinsrw xmm6, word [rsi + r8 + 48], 1 QUAD $0x02300e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 48], 2 QUAD $0x03302674c40f4266 // pinsrw xmm6, word [rsi + r12 + 48], 3 QUAD $0x04302e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 48], 4 LONG $0x74c40f66; WORD $0x300e; BYTE $0x05 // pinsrw xmm6, word [rsi + rcx + 48], 5 - LONG $0x74c40f66; WORD $0x303e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 48], 6 + LONG $0x74c40f66; WORD $0x3016; BYTE $0x06 // pinsrw xmm6, word [rsi + rdx + 48], 6 LONG $0x74c40f66; WORD $0x301e; BYTE $0x07 // pinsrw xmm6, word [rsi + rbx + 48], 7 LONG $0xf0750f66 // pcmpeqw xmm6, xmm0 LONG $0xf6630f66 // packsswb xmm6, xmm6 @@ -8393,9 +8849,9 @@ LBB1_134: QUAD $0x04342e4cc40f4266 // pinsrw xmm1, word [rsi + r13 + 52], 4 LONG $0x4cc40f66; WORD $0x340e; BYTE $0x05 // pinsrw xmm1, word [rsi + rcx + 52], 5 LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 - LONG $0x4cc40f66; WORD $0x343e; BYTE $0x06 // pinsrw xmm1, word [rsi + rdi + 52], 6 + LONG $0x4cc40f66; WORD $0x3416; BYTE $0x06 // pinsrw xmm1, word [rsi + rdx + 52], 6 LONG $0xeeeb0f66 // por xmm5, xmm6 - LONG $0xf26e0f66 // movd xmm6, edx + LONG $0x6e0f4166; BYTE $0xf3 // movd xmm6, r11d LONG $0x4cc40f66; WORD $0x341e; BYTE $0x07 // pinsrw xmm1, word [rsi + rbx + 52], 7 LONG $0xc8750f66 // pcmpeqw xmm1, xmm0 LONG $0xc9630f66 // packsswb xmm1, xmm1 @@ -8403,20 +8859,20 @@ LBB1_134: LONG $0xf1710f66; BYTE $0x02 // psllw xmm1, 2 LONG $0xdb0f4166; BYTE $0xc9 // pand xmm1, xmm9 LONG $0xcdeb0f66 // por xmm1, xmm5 - LONG $0xe86e0f66 // movd xmm5, eax + LONG $0x6e0f4166; BYTE $0xea // movd xmm5, r10d QUAD $0x01360674c40f4266 // pinsrw xmm6, word [rsi + r8 + 54], 1 QUAD $0x02360e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 54], 2 QUAD $0x03362674c40f4266 // pinsrw xmm6, word [rsi + r12 + 54], 3 QUAD $0x04362e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 54], 4 LONG $0x74c40f66; WORD $0x360e; BYTE $0x05 // pinsrw xmm6, word [rsi + rcx + 54], 5 - LONG $0x74c40f66; WORD $0x363e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 54], 6 + LONG $0x74c40f66; WORD $0x3616; BYTE $0x06 // pinsrw xmm6, word [rsi + rdx + 54], 6 LONG $0x74c40f66; WORD $0x361e; BYTE $0x07 // pinsrw xmm6, word [rsi + rbx + 54], 7 QUAD $0x0138066cc40f4266 // pinsrw xmm5, word [rsi + r8 + 56], 1 QUAD $0x02380e6cc40f4266 // pinsrw xmm5, word [rsi + r9 + 56], 2 QUAD $0x0338266cc40f4266 // pinsrw xmm5, word [rsi + r12 + 56], 3 QUAD $0x04382e6cc40f4266 // pinsrw xmm5, word [rsi + r13 + 56], 4 LONG $0x6cc40f66; WORD $0x380e; BYTE $0x05 // pinsrw xmm5, word [rsi + rcx + 56], 5 - LONG $0x6cc40f66; WORD $0x383e; BYTE $0x06 // pinsrw xmm5, word [rsi + rdi + 56], 6 + LONG $0x6cc40f66; WORD $0x3816; BYTE $0x06 // pinsrw xmm5, word [rsi + rdx + 56], 6 LONG $0x6cc40f66; WORD $0x381e; BYTE $0x07 // pinsrw xmm5, word [rsi + rbx + 56], 7 LONG $0xf0750f66 // pcmpeqw xmm6, xmm0 LONG $0xf6630f66 // packsswb xmm6, xmm6 @@ -8429,22 +8885,22 @@ LBB1_134: LONG $0xf5710f66; BYTE $0x04 // psllw xmm5, 4 LONG $0xdb0f4166; BYTE $0xeb // pand xmm5, xmm11 LONG $0xeeeb0f66 // por xmm5, xmm6 - LONG $0x6e0f4166; BYTE $0xf2 // movd xmm6, r10d + LONG $0x6e0f4166; BYTE $0xf6 // movd xmm6, r14d QUAD $0x013a0674c40f4266 // pinsrw xmm6, word [rsi + r8 + 58], 1 QUAD $0x023a0e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 58], 2 QUAD $0x033a2674c40f4266 // pinsrw xmm6, word [rsi + r12 + 58], 3 QUAD $0x043a2e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 58], 4 LONG $0x74c40f66; WORD $0x3a0e; BYTE $0x05 // pinsrw xmm6, word [rsi + rcx + 58], 5 - LONG $0x74c40f66; WORD $0x3a3e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 58], 6 + LONG $0x74c40f66; WORD $0x3a16; BYTE $0x06 // pinsrw xmm6, word [rsi + rdx + 58], 6 LONG $0x74c40f66; WORD $0x3a1e; BYTE $0x07 // pinsrw xmm6, word [rsi + rbx + 58], 7 LONG $0xe9eb0f66 // por xmm5, xmm1 - LONG $0x6e0f4166; BYTE $0xce // movd xmm1, r14d + LONG $0xcf6e0f66 // movd xmm1, edi QUAD $0x013c064cc40f4266 // pinsrw xmm1, word [rsi + r8 + 60], 1 QUAD $0x023c0e4cc40f4266 // pinsrw xmm1, word [rsi + r9 + 60], 2 QUAD $0x033c264cc40f4266 // pinsrw xmm1, word [rsi + r12 + 60], 3 QUAD $0x043c2e4cc40f4266 // pinsrw xmm1, word [rsi + r13 + 60], 4 LONG $0x4cc40f66; WORD $0x3c0e; BYTE $0x05 // pinsrw xmm1, word [rsi + rcx + 60], 5 - LONG $0x4cc40f66; WORD $0x3c3e; BYTE $0x06 // pinsrw xmm1, word [rsi + rdi + 60], 6 + LONG $0x4cc40f66; WORD $0x3c16; BYTE $0x06 // pinsrw xmm1, word [rsi + rdx + 60], 6 LONG $0x4cc40f66; WORD $0x3c1e; BYTE $0x07 // pinsrw xmm1, word [rsi + rbx + 60], 7 LONG $0xf0750f66 // pcmpeqw xmm6, xmm0 LONG $0xf6630f66 // packsswb xmm6, xmm6 @@ -8461,10 +8917,9 @@ LBB1_134: QUAD $0x013e0674c40f4266 // pinsrw xmm6, word [rsi + r8 + 62], 1 QUAD $0x023e0e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 62], 2 QUAD $0x033e2674c40f4266 // pinsrw xmm6, word [rsi + r12 + 62], 3 - QUAD $0x0000008824b48b4c // mov r14, qword [rsp + 136] QUAD $0x043e2e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 62], 4 LONG $0x74c40f66; WORD $0x3e0e; BYTE $0x05 // pinsrw xmm6, word [rsi + rcx + 62], 5 - LONG $0x74c40f66; WORD $0x3e3e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 62], 6 + LONG $0x74c40f66; WORD $0x3e16; BYTE $0x06 // pinsrw xmm6, word [rsi + rdx + 62], 6 LONG $0x74c40f66; WORD $0x3e1e; BYTE $0x07 // pinsrw xmm6, word [rsi + rbx + 62], 7 LONG $0xf0750f66 // pcmpeqw xmm6, xmm0 LONG $0xf6630f66 // packsswb xmm6, xmm6 @@ -8484,22 +8939,21 @@ LBB1_134: LONG $0xe2600f66 // punpcklbw xmm4, xmm2 LONG $0xe3610f66 // punpcklwd xmm4, xmm3 LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] - LONG $0x7f0f41f3; WORD $0x8e24 // movdqu oword [r14 + 4*rcx], xmm4 - LONG $0x7f0f41f3; WORD $0x8e4c; BYTE $0x10 // movdqu oword [r14 + 4*rcx + 16], xmm1 + LONG $0x247f0ff3; BYTE $0x88 // movdqu oword [rax + 4*rcx], xmm4 + LONG $0x4c7f0ff3; WORD $0x1088 // movdqu oword [rax + 4*rcx + 16], xmm1 LONG $0x08c18348 // add rcx, 8 WORD $0x8949; BYTE $0xcf // mov r15, rcx - LONG $0x244c3b48; BYTE $0x10 // cmp rcx, qword [rsp + 16] - JNE LBB1_134 - QUAD $0x0000009824bc8b4c // mov r15, qword [rsp + 152] - LONG $0x247c3b4c; BYTE $0x10 // cmp r15, qword [rsp + 16] + LONG $0x244c3b48; BYTE $0x20 // cmp rcx, qword [rsp + 32] + JNE LBB1_135 + QUAD $0x000000f024bc8b4c // mov r15, qword [rsp + 240] + LONG $0x247c3b4c; BYTE $0x20 // cmp r15, qword [rsp + 32] QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] - LONG $0x246c8b44; BYTE $0x38 // mov r13d, dword [rsp + 56] - LONG $0x24648b4c; BYTE $0x08 // mov r12, qword [rsp + 8] - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] - JNE LBB1_136 - JMP LBB1_139 + LONG $0x245c8b44; BYTE $0x04 // mov r11d, dword [rsp + 4] + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + JNE LBB1_137 + JMP LBB1_140 -LBB1_184: +LBB1_182: WORD $0x894d; BYTE $0xd8 // mov r8, r11 LONG $0xfce08349 // and r8, -4 WORD $0x894c; BYTE $0xc3 // mov rbx, r8 @@ -8519,7 +8973,7 @@ LBB1_184: LONG $0x6f0f4466; WORD $0x6075 // movdqa xmm14, oword 96[rbp] /* [rip + .LCPI1_6] */ LONG $0x6f0f4466; WORD $0x704d // movdqa xmm9, oword 112[rbp] /* [rip + .LCPI1_7] */ -LBB1_185: +LBB1_183: QUAD $0xfffffe04b6100ff3 // movss xmm6, dword [rsi - 508] QUAD $0xfffffe08be100ff3 // movss xmm7, dword [rsi - 504] QUAD $0xfffffe0cae100ff3 // movss xmm5, dword [rsi - 500] @@ -8864,10 +9318,10 @@ LBB1_185: LONG $0x04c18348 // add rcx, 4 LONG $0x00c68148; WORD $0x0002; BYTE $0x00 // add rsi, 512 WORD $0x3949; BYTE $0xc8 // cmp r8, rcx - JNE LBB1_185 + JNE LBB1_183 WORD $0x394d; BYTE $0xc3 // cmp r11, r8 - JNE LBB1_187 - JMP LBB1_190 + JNE LBB1_185 + JMP LBB1_188 DATA LCDATA2<>+0x000(SB)/8, $0x0000000001010101 DATA LCDATA2<>+0x008(SB)/8, $0x0000000000000000 @@ -8928,7 +9382,7 @@ TEXT ·_comparison_equal_scalar_arr_sse4(SB), $328-48 WORD $0xff83; BYTE $0x05 // cmp edi, 5 JE LBB2_95 WORD $0xff83; BYTE $0x06 // cmp edi, 6 - JNE LBB2_176 + JNE LBB2_177 WORD $0x8b44; BYTE $0x2e // mov r13d, dword [rsi] LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -8978,7 +9432,7 @@ LBB2_11: WORD $0x3b44; BYTE $0x2a // cmp r13d, dword [rdx] QUAD $0x000000c02494940f // sete byte [rsp + 192] LONG $0x046a3b44 // cmp r13d, dword [rdx + 4] - LONG $0xd7940f40 // sete dil + LONG $0xd2940f41 // sete r10b LONG $0x086a3b44 // cmp r13d, dword [rdx + 8] LONG $0xd6940f41 // sete r14b LONG $0x0c6a3b44 // cmp r13d, dword [rdx + 12] @@ -8988,9 +9442,9 @@ LBB2_11: LONG $0x146a3b44 // cmp r13d, dword [rdx + 20] LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] LONG $0x186a3b44 // cmp r13d, dword [rdx + 24] - WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x940f; BYTE $0xd3 // sete bl LONG $0x1c6a3b44 // cmp r13d, dword [rdx + 28] - LONG $0xd3940f41 // sete r11b + LONG $0xd7940f40 // sete dil LONG $0x206a3b44 // cmp r13d, dword [rdx + 32] QUAD $0x000000d02494940f // sete byte [rsp + 208] LONG $0x246a3b44 // cmp r13d, dword [rdx + 36] @@ -9000,13 +9454,13 @@ LBB2_11: LONG $0x2c6a3b44 // cmp r13d, dword [rdx + 44] LONG $0xd1940f41 // sete r9b LONG $0x306a3b44 // cmp r13d, dword [rdx + 48] - LONG $0xd2940f41 // sete r10b + LONG $0xd3940f41 // sete r11b LONG $0x346a3b44 // cmp r13d, dword [rdx + 52] LONG $0xd4940f41 // sete r12b LONG $0x386a3b44 // cmp r13d, dword [rdx + 56] QUAD $0x000000b02494940f // sete byte [rsp + 176] LONG $0x3c6a3b44 // cmp r13d, dword [rdx + 60] - WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x940f; BYTE $0xd0 // sete al LONG $0x406a3b44 // cmp r13d, dword [rdx + 64] LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] LONG $0x446a3b44 // cmp r13d, dword [rdx + 68] @@ -9026,107 +9480,106 @@ LBB2_11: LONG $0x606a3b44 // cmp r13d, dword [rdx + 96] LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] LONG $0x646a3b44 // cmp r13d, dword [rdx + 100] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] - LONG $0x686a3b44 // cmp r13d, dword [rdx + 104] LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x686a3b44 // cmp r13d, dword [rdx + 104] + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] LONG $0x6c6a3b44 // cmp r13d, dword [rdx + 108] LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] LONG $0x706a3b44 // cmp r13d, dword [rdx + 112] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] - LONG $0x746a3b44 // cmp r13d, dword [rdx + 116] LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + LONG $0x746a3b44 // cmp r13d, dword [rdx + 116] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0x786a3b44 // cmp r13d, dword [rdx + 120] LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0x7c6a3b44 // cmp r13d, dword [rdx + 124] - WORD $0x940f; BYTE $0xd3 // sete bl - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x000000c024bc0240 // add dil, byte [rsp + 192] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e3c041 // shl r11b, 7 - WORD $0x0841; BYTE $0xc3 // or r11b, al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000c024940244 // add r10b, byte [rsp + 192] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0840; BYTE $0xdf // or dil, bl LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil + WORD $0x0845; BYTE $0xd6 // or r14b, r10b WORD $0x0040; BYTE $0xf6 // add sil, sil QUAD $0x000000d024b40240 // add sil, byte [rsp + 208] - QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b - WORD $0xc789 // mov edi, eax + QUAD $0x000000a0249cb60f // movzx ebx, byte [rsp + 160] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0844; BYTE $0xf3 // or bl, r14b + WORD $0x8941; BYTE $0xda // mov r10d, ebx LONG $0x02e0c041 // shl r8b, 2 WORD $0x0841; BYTE $0xf0 // or r8b, sil - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf8 // or al, dil - WORD $0xc789 // mov edi, eax + LONG $0x245cb60f; BYTE $0x70 // movzx ebx, byte [rsp + 112] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xd3 // or bl, r10b + WORD $0xde89 // mov esi, ebx LONG $0x03e1c041 // shl r9b, 3 WORD $0x0845; BYTE $0xc1 // or r9b, r8b - LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf8 // or al, dil - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xca // or r10b, r9b + LONG $0x245cb60f; BYTE $0x58 // movzx ebx, byte [rsp + 88] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xf3 // or bl, sil + LONG $0x04e3c041 // shl r11b, 4 + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - QUAD $0x000000b024b4b60f // movzx esi, byte [rsp + 176] - LONG $0x06e6c040 // shl sil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf1 // or cl, sil - WORD $0x0841; BYTE $0xc3 // or r11b, al - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] - WORD $0xc000 // add al, al - LONG $0x48244402 // add al, byte [rsp + 72] - WORD $0xc689 // mov esi, eax - QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc789 // mov edi, eax - LONG $0x24048b48 // mov rax, qword [rsp] - WORD $0x8844; BYTE $0x18 // mov byte [rax], r11b + WORD $0x0845; BYTE $0xdc // or r12b, r11b LONG $0x24348b48 // mov rsi, qword [rsp] - LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 + QUAD $0x0000b02484b60f44; BYTE $0x00 // movzx r8d, byte [rsp + 176] + LONG $0x06e0c041 // shl r8b, 6 + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0844; BYTE $0xc0 // or al, r8b + WORD $0x0840; BYTE $0xdf // or dil, bl + WORD $0x0844; BYTE $0xe0 // or al, r12b + LONG $0x245cb60f; BYTE $0x78 // movzx ebx, byte [rsp + 120] + WORD $0xdb00 // add bl, bl + LONG $0x48245c02 // add bl, byte [rsp + 72] + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx + QUAD $0x00000080249cb60f // movzx ebx, byte [rsp + 128] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx + LONG $0x245cb60f; BYTE $0x60 // movzx ebx, byte [rsp + 96] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx + LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx + LONG $0x245cb60f; BYTE $0x68 // movzx ebx, byte [rsp + 104] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + WORD $0x8840; BYTE $0x3e // mov byte [rsi], dil + LONG $0x247cb60f; BYTE $0x40 // movzx edi, byte [rsp + 64] + LONG $0x06e7c040 // shl dil, 6 LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xc7 // or r15b, al - WORD $0x4e88; BYTE $0x01 // mov byte [rsi + 1], cl WORD $0x0841; BYTE $0xff // or r15b, dil - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + WORD $0x4688; BYTE $0x01 // mov byte [rsi + 1], al + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xc000 // add al, al LONG $0x18244402 // add al, byte [rsp + 24] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl WORD $0xc108 // or cl, al - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - WORD $0xcb08 // or bl, cl LONG $0x027e8844 // mov byte [rsi + 2], r15b - WORD $0x5e88; BYTE $0x03 // mov byte [rsi + 3], bl + WORD $0x4e88; BYTE $0x03 // mov byte [rsi + 3], cl LONG $0x80c28148; WORD $0x0000; BYTE $0x00 // add rdx, 128 LONG $0x04c68348 // add rsi, 4 LONG $0x24348948 // mov qword [rsp], rsi @@ -9138,7 +9591,7 @@ LBB2_11: LBB2_13: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB2_176 + JGE LBB2_177 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 @@ -9178,7 +9631,7 @@ LBB2_16: LONG $0x33048841 // mov byte [r11 + rsi], al WORD $0x3949; BYTE $0xfa // cmp r10, rdi JNE LBB2_16 - JMP LBB2_152 + JMP LBB2_153 LBB2_17: WORD $0xff83; BYTE $0x08 // cmp edi, 8 @@ -9188,7 +9641,7 @@ LBB2_17: WORD $0xff83; BYTE $0x0b // cmp edi, 11 JE LBB2_118 WORD $0xff83; BYTE $0x0c // cmp edi, 12 - JNE LBB2_176 + JNE LBB2_177 LONG $0x1f728d4d // lea r14, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 LONG $0xf2490f4d // cmovns r14, r10 @@ -9205,7 +9658,9 @@ LBB2_17: LBB2_23: LONG $0x022e0f66 // ucomisd xmm0, qword [rdx] LONG $0x08528d48 // lea rdx, [rdx + 8] + WORD $0x9b0f; BYTE $0xd1 // setnp cl WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0xcb20 // and bl, cl WORD $0xdbf6 // neg bl LONG $0x07708d48 // lea rsi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax @@ -9231,184 +9686,270 @@ LBB2_25: LONG $0x20fa8349 // cmp r10, 32 JL LBB2_29 QUAD $0x000000902494894c // mov qword [rsp + 144], r10 - QUAD $0x0000008824b4894c // mov qword [rsp + 136], r14 - QUAD $0x000000c024b4894c // mov qword [rsp + 192], r14 + QUAD $0x000000f024b4894c // mov qword [rsp + 240], r14 + QUAD $0x0000009824b4894c // mov qword [rsp + 152], r14 LBB2_27: LONG $0x022e0f66 // ucomisd xmm0, qword [rdx] - QUAD $0x000000a02494940f // sete byte [rsp + 160] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x18244c88 // mov byte [rsp + 24], cl LONG $0x422e0f66; BYTE $0x08 // ucomisd xmm0, qword [rdx + 8] - LONG $0xd0940f41 // sete r8b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0xc320 // and bl, al LONG $0x422e0f66; BYTE $0x10 // ucomisd xmm0, qword [rdx + 16] - LONG $0xd3940f41 // sete r11b - LONG $0x422e0f66; BYTE $0x18 // ucomisd xmm0, qword [rdx + 24] + WORD $0x9b0f; BYTE $0xd0 // setnp al LONG $0xd5940f41 // sete r13b + WORD $0x2041; BYTE $0xc5 // and r13b, al + LONG $0x422e0f66; BYTE $0x18 // ucomisd xmm0, qword [rdx + 24] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x30244c88 // mov byte [rsp + 48], cl LONG $0x422e0f66; BYTE $0x20 // ucomisd xmm0, qword [rdx + 32] - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x10244c88 // mov byte [rsp + 16], cl LONG $0x422e0f66; BYTE $0x28 // ucomisd xmm0, qword [rdx + 40] - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f40 // sete dil + WORD $0x2040; BYTE $0xc7 // and dil, al LONG $0x422e0f66; BYTE $0x30 // ucomisd xmm0, qword [rdx + 48] - WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x38244c88 // mov byte [rsp + 56], cl LONG $0x422e0f66; BYTE $0x38 // ucomisd xmm0, qword [rdx + 56] - LONG $0xd6940f41 // sete r14b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x08244c88 // mov byte [rsp + 8], cl LONG $0x422e0f66; BYTE $0x40 // ucomisd xmm0, qword [rdx + 64] - QUAD $0x000000b02494940f // sete byte [rsp + 176] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl LONG $0x422e0f66; BYTE $0x48 // ucomisd xmm0, qword [rdx + 72] - LONG $0xd6940f40 // sete sil + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl LONG $0x422e0f66; BYTE $0x50 // ucomisd xmm0, qword [rdx + 80] - LONG $0xd7940f40 // sete dil + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x40244c88 // mov byte [rsp + 64], cl LONG $0x422e0f66; BYTE $0x58 // ucomisd xmm0, qword [rdx + 88] - LONG $0xd1940f41 // sete r9b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x68244c88 // mov byte [rsp + 104], cl LONG $0x422e0f66; BYTE $0x60 // ucomisd xmm0, qword [rdx + 96] - LONG $0xd2940f41 // sete r10b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x58244c88 // mov byte [rsp + 88], cl LONG $0x422e0f66; BYTE $0x68 // ucomisd xmm0, qword [rdx + 104] - LONG $0xd4940f41 // sete r12b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x48244c88 // mov byte [rsp + 72], cl LONG $0x422e0f66; BYTE $0x70 // ucomisd xmm0, qword [rdx + 112] - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x60244c88 // mov byte [rsp + 96], cl LONG $0x422e0f66; BYTE $0x78 // ucomisd xmm0, qword [rdx + 120] + WORD $0x9b0f; BYTE $0xd0 // setnp al WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x70244c88 // mov byte [rsp + 112], cl QUAD $0x00000080822e0f66 // ucomisd xmm0, qword [rdx + 128] - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x50244c88 // mov byte [rsp + 80], cl QUAD $0x00000088822e0f66 // ucomisd xmm0, qword [rdx + 136] - QUAD $0x000000d02494940f // sete byte [rsp + 208] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x80248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 128], cl QUAD $0x00000090822e0f66 // ucomisd xmm0, qword [rdx + 144] - QUAD $0x000000802494940f // sete byte [rsp + 128] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x78244c88 // mov byte [rsp + 120], cl QUAD $0x00000098822e0f66 // ucomisd xmm0, qword [rdx + 152] - LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xb0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 176], cl QUAD $0x000000a0822e0f66 // ucomisd xmm0, qword [rdx + 160] - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xd0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 208], cl QUAD $0x000000a8822e0f66 // ucomisd xmm0, qword [rdx + 168] - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xc0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 192], cl QUAD $0x000000b0822e0f66 // ucomisd xmm0, qword [rdx + 176] - LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] - QUAD $0x000000b8822e0f66 // ucomisd xmm0, qword [rdx + 184] + WORD $0x9b0f; BYTE $0xd0 // setnp al LONG $0xd7940f41 // sete r15b + WORD $0x2041; BYTE $0xc7 // and r15b, al + QUAD $0x000000b8822e0f66 // ucomisd xmm0, qword [rdx + 184] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd1940f41 // sete r9b + WORD $0x2041; BYTE $0xc1 // and r9b, al QUAD $0x000000c0822e0f66 // ucomisd xmm0, qword [rdx + 192] - LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xa0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 160], cl QUAD $0x000000c8822e0f66 // ucomisd xmm0, qword [rdx + 200] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd6940f41 // sete r14b + WORD $0x2041; BYTE $0xc6 // and r14b, al QUAD $0x000000d0822e0f66 // ucomisd xmm0, qword [rdx + 208] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd3940f41 // sete r11b + WORD $0x2041; BYTE $0xc3 // and r11b, al QUAD $0x000000d8822e0f66 // ucomisd xmm0, qword [rdx + 216] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd2940f41 // sete r10b + WORD $0x2041; BYTE $0xc2 // and r10b, al QUAD $0x000000e0822e0f66 // ucomisd xmm0, qword [rdx + 224] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd4940f41 // sete r12b + WORD $0x2041; BYTE $0xc4 // and r12b, al QUAD $0x000000e8822e0f66 // ucomisd xmm0, qword [rdx + 232] - LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x88248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 136], cl QUAD $0x000000f0822e0f66 // ucomisd xmm0, qword [rdx + 240] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd0940f41 // sete r8b + WORD $0x2041; BYTE $0xc0 // and r8b, al QUAD $0x000000f8822e0f66 // ucomisd xmm0, qword [rdx + 248] - WORD $0x940f; BYTE $0xd3 // sete bl - WORD $0x0045; BYTE $0xc0 // add r8b, r8b - QUAD $0x000000a024840244 // add r8b, byte [rsp + 160] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd6940f40 // sete sil + WORD $0x2040; BYTE $0xc6 // and sil, al + WORD $0xdb00 // add bl, bl + LONG $0x18245c02 // add bl, byte [rsp + 24] + LONG $0x05e7c040 // shl dil, 5 + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e6c041 // shl r14b, 7 - WORD $0x0841; BYTE $0xc6 // or r14b, al - LONG $0x02e3c041 // shl r11b, 2 - WORD $0x0845; BYTE $0xc3 // or r11b, r8b - WORD $0x0040; BYTE $0xf6 // add sil, sil - QUAD $0x000000b024b40240 // add sil, byte [rsp + 176] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xdd // or r13b, r11b - LONG $0x24048b4c // mov r8, qword [rsp] - LONG $0x02e7c040 // shl dil, 2 - WORD $0x0840; BYTE $0xf7 // or dil, sil - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0844; BYTE $0xe8 // or al, r13b - WORD $0x8941; BYTE $0xc3 // mov r11d, eax - LONG $0x03e1c041 // shl r9b, 3 - WORD $0x0841; BYTE $0xf9 // or r9b, dil - LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0844; BYTE $0xd8 // or al, r11b - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - LONG $0x2474b60f; BYTE $0x78 // movzx esi, byte [rsp + 120] - LONG $0x06e6c040 // shl sil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf1 // or cl, sil - WORD $0x0841; BYTE $0xc6 // or r14b, al - WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x02e5c041 // shl r13b, 2 + WORD $0x0841; BYTE $0xdd // or r13b, bl + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xc000 // add al, al - LONG $0x48244402 // add al, byte [rsp + 72] - WORD $0xc689 // mov esi, eax - QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + LONG $0x28244402 // add al, byte [rsp + 40] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x08244488 // mov byte [rsp + 8], al + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0x8941; BYTE $0xc5 // mov r13d, eax LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0x8845; BYTE $0x30 // mov byte [r8], r14b - LONG $0x2474b60f; BYTE $0x40 // movzx esi, byte [rsp + 64] - LONG $0x06e6c040 // shl sil, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xf7 // or r15b, sil - LONG $0x01488841 // mov byte [r8 + 1], cl - WORD $0x0841; BYTE $0xc7 // or r15b, al - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] - WORD $0xc000 // add al, al - LONG $0x18244402 // add al, byte [rsp + 24] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc789 // mov edi, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x08 // movzx ecx, byte [rsp + 8] + WORD $0x0844; BYTE $0xe8 // or al, r13b + LONG $0x245cb60f; BYTE $0x58 // movzx ebx, byte [rsp + 88] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0840; BYTE $0xfb // or bl, dil + LONG $0x247cb60f; BYTE $0x48 // movzx edi, byte [rsp + 72] + LONG $0x05e7c040 // shl dil, 5 + LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xcb08 // or bl, cl - WORD $0xc308 // or bl, al - LONG $0x02788845 // mov byte [r8 + 2], r15b - LONG $0x03588841 // mov byte [r8 + 3], bl + WORD $0x0840; BYTE $0xf9 // or cl, dil + LONG $0x6cb60f44; WORD $0x7024 // movzx r13d, byte [rsp + 112] + LONG $0x07e5c041 // shl r13b, 7 + WORD $0x0841; BYTE $0xcd // or r13b, cl + QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] + WORD $0xc900 // add cl, cl + LONG $0x50244c02 // add cl, byte [rsp + 80] + LONG $0x247cb60f; BYTE $0x78 // movzx edi, byte [rsp + 120] + LONG $0x02e7c040 // shl dil, 2 + WORD $0x0840; BYTE $0xcf // or dil, cl + QUAD $0x000000b0248cb60f // movzx ecx, byte [rsp + 176] + WORD $0xe1c0; BYTE $0x03 // shl cl, 3 + WORD $0x0840; BYTE $0xf9 // or cl, dil + WORD $0xcf89 // mov edi, ecx + QUAD $0x000000d0248cb60f // movzx ecx, byte [rsp + 208] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0x0840; BYTE $0xf9 // or cl, dil + LONG $0x247cb60f; BYTE $0x08 // movzx edi, byte [rsp + 8] + WORD $0x0840; BYTE $0xc7 // or dil, al + QUAD $0x000000c02484b60f // movzx eax, byte [rsp + 192] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + LONG $0x06e7c041 // shl r15b, 6 + WORD $0x0841; BYTE $0xc7 // or r15b, al + WORD $0x0841; BYTE $0xdd // or r13b, bl + LONG $0x07e1c041 // shl r9b, 7 + WORD $0x0845; BYTE $0xf9 // or r9b, r15b + LONG $0x24048b48 // mov rax, qword [rsp] + WORD $0x0841; BYTE $0xc9 // or r9b, cl + WORD $0x0045; BYTE $0xf6 // add r14b, r14b + QUAD $0x000000a024b40244 // add r14b, byte [rsp + 160] + LONG $0x02e3c041 // shl r11b, 2 + WORD $0x0845; BYTE $0xf3 // or r11b, r14b + LONG $0x03e2c041 // shl r10b, 3 + WORD $0x0845; BYTE $0xda // or r10b, r11b + LONG $0x04e4c041 // shl r12b, 4 + WORD $0x0845; BYTE $0xd4 // or r12b, r10b + WORD $0x8840; BYTE $0x38 // mov byte [rax], dil + QUAD $0x00000088248cb60f // movzx ecx, byte [rsp + 136] + WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + LONG $0x06e0c041 // shl r8b, 6 + WORD $0x0841; BYTE $0xc8 // or r8b, cl + LONG $0x01688844 // mov byte [rax + 1], r13b + LONG $0x07e6c040 // shl sil, 7 + WORD $0x0844; BYTE $0xc6 // or sil, r8b + WORD $0x0844; BYTE $0xe6 // or sil, r12b + LONG $0x02488844 // mov byte [rax + 2], r9b + LONG $0x03708840 // mov byte [rax + 3], sil LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 - LONG $0x04c08349 // add r8, 4 - LONG $0x2404894c // mov qword [rsp], r8 - QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 + LONG $0x04c08348 // add rax, 4 + LONG $0x24048948 // mov qword [rsp], rax + QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 JNE LBB2_27 QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] - QUAD $0x0000008824b48b4c // mov r14, qword [rsp + 136] + QUAD $0x000000f024b48b4c // mov r14, qword [rsp + 240] LBB2_29: LONG $0x05e6c149 // shl r14, 5 WORD $0x394d; BYTE $0xd6 // cmp r14, r10 - JGE LBB2_176 + JGE LBB2_177 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf0 // sub r8, r14 WORD $0xf749; BYTE $0xd6 // not r14 WORD $0x014d; BYTE $0xd6 // add r14, r10 - JNE LBB2_161 + JNE LBB2_162 WORD $0xff31 // xor edi, edi - JMP LBB2_163 + JMP LBB2_164 LBB2_32: WORD $0xff83; BYTE $0x02 // cmp edi, 2 JE LBB2_60 WORD $0xff83; BYTE $0x03 // cmp edi, 3 - JNE LBB2_176 + JNE LBB2_177 WORD $0x8a44; BYTE $0x36 // mov r14b, byte [rsi] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -9453,27 +9994,27 @@ LBB2_38: LONG $0x10ff8349 // cmp r15, 16 LONG $0x24748844; BYTE $0x08 // mov byte [rsp + 8], r14b QUAD $0x000000902494894c // mov qword [rsp + 144], r10 - QUAD $0x000000f024bc894c // mov qword [rsp + 240], r15 + QUAD $0x000000e824bc894c // mov qword [rsp + 232], r15 JB LBB2_42 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xd0 // add rax, rdx LONG $0x24043948 // cmp qword [rsp], rax - JAE LBB2_185 + JAE LBB2_182 LONG $0x24048b48 // mov rax, qword [rsp] LONG $0xb8048d4a // lea rax, [rax + 4*r15] WORD $0x3948; BYTE $0xc2 // cmp rdx, rax - JAE LBB2_185 + JAE LBB2_182 LBB2_42: WORD $0xc031 // xor eax, eax - QUAD $0x000000e824848948 // mov qword [rsp + 232], rax + QUAD $0x000000e024848948 // mov qword [rsp + 224], rax WORD $0x8948; BYTE $0xd6 // mov rsi, rdx LONG $0x24048b48 // mov rax, qword [rsp] LONG $0x24448948; BYTE $0x68 // mov qword [rsp + 104], rax LBB2_43: - QUAD $0x000000e824bc2b4c // sub r15, qword [rsp + 232] + QUAD $0x000000e024bc2b4c // sub r15, qword [rsp + 224] QUAD $0x0000008824bc894c // mov qword [rsp + 136], r15 LBB2_44: @@ -9539,10 +10080,10 @@ LBB2_44: LONG $0xd2940f41 // sete r10b LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] WORD $0x513a; BYTE $0x18 // cmp dl, byte [rcx + 24] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] WORD $0x513a; BYTE $0x19 // cmp dl, byte [rcx + 25] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] WORD $0x513a; BYTE $0x1a // cmp dl, byte [rcx + 26] LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] @@ -9551,10 +10092,10 @@ LBB2_44: LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] WORD $0x513a; BYTE $0x1c // cmp dl, byte [rcx + 28] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] WORD $0x513a; BYTE $0x1d // cmp dl, byte [rcx + 29] - LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] WORD $0x513a; BYTE $0x1e // cmp dl, byte [rcx + 30] LONG $0x2414940f // sete byte [rsp] @@ -9621,9 +10162,9 @@ LBB2_44: WORD $0x0841; BYTE $0xf2 // or r10b, sil WORD $0x4788; BYTE $0x01 // mov byte [rdi + 1], al WORD $0x0841; BYTE $0xda // or r10b, bl - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xc000 // add al, al - LONG $0x38244402 // add al, byte [rsp + 56] + LONG $0x20244402 // add al, byte [rsp + 32] WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x02 // shl al, 2 @@ -9633,11 +10174,11 @@ LBB2_44: WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xd808 // or al, bl LONG $0x241cb60f // movzx ebx, byte [rsp] @@ -9653,14 +10194,14 @@ LBB2_44: QUAD $0x0000008824848348; BYTE $0xff // add qword [rsp + 136], -1 JNE LBB2_44 QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] - QUAD $0x000000f024bc8b4c // mov r15, qword [rsp + 240] + QUAD $0x000000e824bc8b4c // mov r15, qword [rsp + 232] JMP LBB2_131 LBB2_46: WORD $0xff83; BYTE $0x07 // cmp edi, 7 JE LBB2_72 WORD $0xff83; BYTE $0x08 // cmp edi, 8 - JNE LBB2_176 + JNE LBB2_177 WORD $0x8b4c; BYTE $0x2e // mov r13, qword [rsi] LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -9710,7 +10251,7 @@ LBB2_54: WORD $0x3b4c; BYTE $0x2a // cmp r13, qword [rdx] QUAD $0x000000c02494940f // sete byte [rsp + 192] LONG $0x086a3b4c // cmp r13, qword [rdx + 8] - LONG $0xd7940f40 // sete dil + LONG $0xd2940f41 // sete r10b LONG $0x106a3b4c // cmp r13, qword [rdx + 16] LONG $0xd6940f41 // sete r14b LONG $0x186a3b4c // cmp r13, qword [rdx + 24] @@ -9720,9 +10261,9 @@ LBB2_54: LONG $0x286a3b4c // cmp r13, qword [rdx + 40] LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] LONG $0x306a3b4c // cmp r13, qword [rdx + 48] - WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x940f; BYTE $0xd3 // sete bl LONG $0x386a3b4c // cmp r13, qword [rdx + 56] - LONG $0xd3940f41 // sete r11b + LONG $0xd7940f40 // sete dil LONG $0x406a3b4c // cmp r13, qword [rdx + 64] QUAD $0x000000d02494940f // sete byte [rsp + 208] LONG $0x486a3b4c // cmp r13, qword [rdx + 72] @@ -9732,13 +10273,13 @@ LBB2_54: LONG $0x586a3b4c // cmp r13, qword [rdx + 88] LONG $0xd1940f41 // sete r9b LONG $0x606a3b4c // cmp r13, qword [rdx + 96] - LONG $0xd2940f41 // sete r10b + LONG $0xd3940f41 // sete r11b LONG $0x686a3b4c // cmp r13, qword [rdx + 104] LONG $0xd4940f41 // sete r12b LONG $0x706a3b4c // cmp r13, qword [rdx + 112] QUAD $0x000000b02494940f // sete byte [rsp + 176] LONG $0x786a3b4c // cmp r13, qword [rdx + 120] - WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x940f; BYTE $0xd0 // sete al LONG $0x80aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 128] LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] LONG $0x88aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 136] @@ -9758,107 +10299,106 @@ LBB2_54: LONG $0xc0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 192] LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] LONG $0xc8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 200] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] - LONG $0xd0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 208] LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0xd0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 208] + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] LONG $0xd8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 216] LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] LONG $0xe0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 224] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] - LONG $0xe8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 232] LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + LONG $0xe8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 232] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0xf0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 240] LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0xf8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 248] - WORD $0x940f; BYTE $0xd3 // sete bl - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x000000c024bc0240 // add dil, byte [rsp + 192] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e3c041 // shl r11b, 7 - WORD $0x0841; BYTE $0xc3 // or r11b, al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000c024940244 // add r10b, byte [rsp + 192] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0840; BYTE $0xdf // or dil, bl LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil + WORD $0x0845; BYTE $0xd6 // or r14b, r10b WORD $0x0040; BYTE $0xf6 // add sil, sil QUAD $0x000000d024b40240 // add sil, byte [rsp + 208] - QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b - WORD $0xc789 // mov edi, eax + QUAD $0x000000a0249cb60f // movzx ebx, byte [rsp + 160] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0844; BYTE $0xf3 // or bl, r14b + WORD $0x8941; BYTE $0xda // mov r10d, ebx LONG $0x02e0c041 // shl r8b, 2 WORD $0x0841; BYTE $0xf0 // or r8b, sil - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf8 // or al, dil - WORD $0xc789 // mov edi, eax + LONG $0x245cb60f; BYTE $0x70 // movzx ebx, byte [rsp + 112] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xd3 // or bl, r10b + WORD $0xde89 // mov esi, ebx LONG $0x03e1c041 // shl r9b, 3 WORD $0x0845; BYTE $0xc1 // or r9b, r8b - LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf8 // or al, dil - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xca // or r10b, r9b + LONG $0x245cb60f; BYTE $0x58 // movzx ebx, byte [rsp + 88] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xf3 // or bl, sil + LONG $0x04e3c041 // shl r11b, 4 + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - QUAD $0x000000b024b4b60f // movzx esi, byte [rsp + 176] - LONG $0x06e6c040 // shl sil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf1 // or cl, sil - WORD $0x0841; BYTE $0xc3 // or r11b, al - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] - WORD $0xc000 // add al, al - LONG $0x48244402 // add al, byte [rsp + 72] - WORD $0xc689 // mov esi, eax - QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc789 // mov edi, eax - LONG $0x24048b48 // mov rax, qword [rsp] - WORD $0x8844; BYTE $0x18 // mov byte [rax], r11b + WORD $0x0845; BYTE $0xdc // or r12b, r11b LONG $0x24348b48 // mov rsi, qword [rsp] - LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 + QUAD $0x0000b02484b60f44; BYTE $0x00 // movzx r8d, byte [rsp + 176] + LONG $0x06e0c041 // shl r8b, 6 + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0844; BYTE $0xc0 // or al, r8b + WORD $0x0840; BYTE $0xdf // or dil, bl + WORD $0x0844; BYTE $0xe0 // or al, r12b + LONG $0x245cb60f; BYTE $0x78 // movzx ebx, byte [rsp + 120] + WORD $0xdb00 // add bl, bl + LONG $0x48245c02 // add bl, byte [rsp + 72] + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx + QUAD $0x00000080249cb60f // movzx ebx, byte [rsp + 128] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx + LONG $0x245cb60f; BYTE $0x60 // movzx ebx, byte [rsp + 96] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx + LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx + LONG $0x245cb60f; BYTE $0x68 // movzx ebx, byte [rsp + 104] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + WORD $0x8840; BYTE $0x3e // mov byte [rsi], dil + LONG $0x247cb60f; BYTE $0x40 // movzx edi, byte [rsp + 64] + LONG $0x06e7c040 // shl dil, 6 LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xc7 // or r15b, al - WORD $0x4e88; BYTE $0x01 // mov byte [rsi + 1], cl WORD $0x0841; BYTE $0xff // or r15b, dil - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + WORD $0x4688; BYTE $0x01 // mov byte [rsi + 1], al + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xc000 // add al, al LONG $0x18244402 // add al, byte [rsp + 24] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl WORD $0xc108 // or cl, al - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - WORD $0xcb08 // or bl, cl LONG $0x027e8844 // mov byte [rsi + 2], r15b - WORD $0x5e88; BYTE $0x03 // mov byte [rsi + 3], bl + WORD $0x4e88; BYTE $0x03 // mov byte [rsi + 3], cl LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 LONG $0x04c68348 // add rsi, 4 LONG $0x24348948 // mov qword [rsp], rsi @@ -9870,7 +10410,7 @@ LBB2_54: LBB2_56: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB2_176 + JGE LBB2_177 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 @@ -9910,7 +10450,7 @@ LBB2_59: LONG $0x33048841 // mov byte [r11 + rsi], al WORD $0x3949; BYTE $0xfa // cmp r10, rdi JNE LBB2_59 - JMP LBB2_167 + JMP LBB2_168 LBB2_60: WORD $0x8a44; BYTE $0x36 // mov r14b, byte [rsi] @@ -9957,27 +10497,27 @@ LBB2_64: LONG $0x10ff8349 // cmp r15, 16 LONG $0x24748844; BYTE $0x08 // mov byte [rsp + 8], r14b QUAD $0x000000902494894c // mov qword [rsp + 144], r10 - QUAD $0x000000f024bc894c // mov qword [rsp + 240], r15 + QUAD $0x000000e824bc894c // mov qword [rsp + 232], r15 JB LBB2_68 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xd0 // add rax, rdx LONG $0x24043948 // cmp qword [rsp], rax - JAE LBB2_188 + JAE LBB2_185 LONG $0x24048b48 // mov rax, qword [rsp] LONG $0xb8048d4a // lea rax, [rax + 4*r15] WORD $0x3948; BYTE $0xc2 // cmp rdx, rax - JAE LBB2_188 + JAE LBB2_185 LBB2_68: WORD $0xc031 // xor eax, eax - QUAD $0x000000e824848948 // mov qword [rsp + 232], rax + QUAD $0x000000e024848948 // mov qword [rsp + 224], rax WORD $0x8948; BYTE $0xd6 // mov rsi, rdx LONG $0x24048b48 // mov rax, qword [rsp] LONG $0x24448948; BYTE $0x68 // mov qword [rsp + 104], rax LBB2_69: - QUAD $0x000000e824bc2b4c // sub r15, qword [rsp + 232] + QUAD $0x000000e024bc2b4c // sub r15, qword [rsp + 224] QUAD $0x0000008824bc894c // mov qword [rsp + 136], r15 LBB2_70: @@ -10043,10 +10583,10 @@ LBB2_70: LONG $0xd2940f41 // sete r10b LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] WORD $0x513a; BYTE $0x18 // cmp dl, byte [rcx + 24] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] WORD $0x513a; BYTE $0x19 // cmp dl, byte [rcx + 25] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] WORD $0x513a; BYTE $0x1a // cmp dl, byte [rcx + 26] LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] @@ -10055,10 +10595,10 @@ LBB2_70: LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] WORD $0x513a; BYTE $0x1c // cmp dl, byte [rcx + 28] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] WORD $0x513a; BYTE $0x1d // cmp dl, byte [rcx + 29] - LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] WORD $0x513a; BYTE $0x1e // cmp dl, byte [rcx + 30] LONG $0x2414940f // sete byte [rsp] @@ -10125,9 +10665,9 @@ LBB2_70: WORD $0x0841; BYTE $0xf2 // or r10b, sil WORD $0x4788; BYTE $0x01 // mov byte [rdi + 1], al WORD $0x0841; BYTE $0xda // or r10b, bl - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xc000 // add al, al - LONG $0x38244402 // add al, byte [rsp + 56] + LONG $0x20244402 // add al, byte [rsp + 32] WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x02 // shl al, 2 @@ -10137,11 +10677,11 @@ LBB2_70: WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xd808 // or al, bl LONG $0x241cb60f // movzx ebx, byte [rsp] @@ -10157,7 +10697,7 @@ LBB2_70: QUAD $0x0000008824848348; BYTE $0xff // add qword [rsp + 136], -1 JNE LBB2_70 QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] - QUAD $0x000000f024bc8b4c // mov r15, qword [rsp + 240] + QUAD $0x000000e824bc8b4c // mov r15, qword [rsp + 232] JMP LBB2_135 LBB2_72: @@ -10210,7 +10750,7 @@ LBB2_78: WORD $0x3b44; BYTE $0x2a // cmp r13d, dword [rdx] QUAD $0x000000c02494940f // sete byte [rsp + 192] LONG $0x046a3b44 // cmp r13d, dword [rdx + 4] - LONG $0xd7940f40 // sete dil + LONG $0xd2940f41 // sete r10b LONG $0x086a3b44 // cmp r13d, dword [rdx + 8] LONG $0xd6940f41 // sete r14b LONG $0x0c6a3b44 // cmp r13d, dword [rdx + 12] @@ -10220,9 +10760,9 @@ LBB2_78: LONG $0x146a3b44 // cmp r13d, dword [rdx + 20] LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] LONG $0x186a3b44 // cmp r13d, dword [rdx + 24] - WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x940f; BYTE $0xd3 // sete bl LONG $0x1c6a3b44 // cmp r13d, dword [rdx + 28] - LONG $0xd3940f41 // sete r11b + LONG $0xd7940f40 // sete dil LONG $0x206a3b44 // cmp r13d, dword [rdx + 32] QUAD $0x000000d02494940f // sete byte [rsp + 208] LONG $0x246a3b44 // cmp r13d, dword [rdx + 36] @@ -10232,13 +10772,13 @@ LBB2_78: LONG $0x2c6a3b44 // cmp r13d, dword [rdx + 44] LONG $0xd1940f41 // sete r9b LONG $0x306a3b44 // cmp r13d, dword [rdx + 48] - LONG $0xd2940f41 // sete r10b + LONG $0xd3940f41 // sete r11b LONG $0x346a3b44 // cmp r13d, dword [rdx + 52] LONG $0xd4940f41 // sete r12b LONG $0x386a3b44 // cmp r13d, dword [rdx + 56] QUAD $0x000000b02494940f // sete byte [rsp + 176] LONG $0x3c6a3b44 // cmp r13d, dword [rdx + 60] - WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x940f; BYTE $0xd0 // sete al LONG $0x406a3b44 // cmp r13d, dword [rdx + 64] LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] LONG $0x446a3b44 // cmp r13d, dword [rdx + 68] @@ -10258,107 +10798,106 @@ LBB2_78: LONG $0x606a3b44 // cmp r13d, dword [rdx + 96] LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] LONG $0x646a3b44 // cmp r13d, dword [rdx + 100] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] - LONG $0x686a3b44 // cmp r13d, dword [rdx + 104] LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0x686a3b44 // cmp r13d, dword [rdx + 104] + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] LONG $0x6c6a3b44 // cmp r13d, dword [rdx + 108] LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] LONG $0x706a3b44 // cmp r13d, dword [rdx + 112] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] - LONG $0x746a3b44 // cmp r13d, dword [rdx + 116] LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + LONG $0x746a3b44 // cmp r13d, dword [rdx + 116] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0x786a3b44 // cmp r13d, dword [rdx + 120] LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0x7c6a3b44 // cmp r13d, dword [rdx + 124] - WORD $0x940f; BYTE $0xd3 // sete bl - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x000000c024bc0240 // add dil, byte [rsp + 192] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e3c041 // shl r11b, 7 - WORD $0x0841; BYTE $0xc3 // or r11b, al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000c024940244 // add r10b, byte [rsp + 192] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0840; BYTE $0xdf // or dil, bl LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil + WORD $0x0845; BYTE $0xd6 // or r14b, r10b WORD $0x0040; BYTE $0xf6 // add sil, sil QUAD $0x000000d024b40240 // add sil, byte [rsp + 208] - QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b - WORD $0xc789 // mov edi, eax + QUAD $0x000000a0249cb60f // movzx ebx, byte [rsp + 160] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0844; BYTE $0xf3 // or bl, r14b + WORD $0x8941; BYTE $0xda // mov r10d, ebx LONG $0x02e0c041 // shl r8b, 2 WORD $0x0841; BYTE $0xf0 // or r8b, sil - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf8 // or al, dil - WORD $0xc789 // mov edi, eax + LONG $0x245cb60f; BYTE $0x70 // movzx ebx, byte [rsp + 112] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xd3 // or bl, r10b + WORD $0xde89 // mov esi, ebx LONG $0x03e1c041 // shl r9b, 3 WORD $0x0845; BYTE $0xc1 // or r9b, r8b - LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf8 // or al, dil - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xca // or r10b, r9b + LONG $0x245cb60f; BYTE $0x58 // movzx ebx, byte [rsp + 88] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xf3 // or bl, sil + LONG $0x04e3c041 // shl r11b, 4 + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - QUAD $0x000000b024b4b60f // movzx esi, byte [rsp + 176] - LONG $0x06e6c040 // shl sil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf1 // or cl, sil - WORD $0x0841; BYTE $0xc3 // or r11b, al - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] - WORD $0xc000 // add al, al - LONG $0x48244402 // add al, byte [rsp + 72] - WORD $0xc689 // mov esi, eax - QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc789 // mov edi, eax - LONG $0x24048b48 // mov rax, qword [rsp] - WORD $0x8844; BYTE $0x18 // mov byte [rax], r11b + WORD $0x0845; BYTE $0xdc // or r12b, r11b LONG $0x24348b48 // mov rsi, qword [rsp] - LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 + QUAD $0x0000b02484b60f44; BYTE $0x00 // movzx r8d, byte [rsp + 176] + LONG $0x06e0c041 // shl r8b, 6 + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0844; BYTE $0xc0 // or al, r8b + WORD $0x0840; BYTE $0xdf // or dil, bl + WORD $0x0844; BYTE $0xe0 // or al, r12b + LONG $0x245cb60f; BYTE $0x78 // movzx ebx, byte [rsp + 120] + WORD $0xdb00 // add bl, bl + LONG $0x48245c02 // add bl, byte [rsp + 72] + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx + QUAD $0x00000080249cb60f // movzx ebx, byte [rsp + 128] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx + LONG $0x245cb60f; BYTE $0x60 // movzx ebx, byte [rsp + 96] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx + LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx + LONG $0x245cb60f; BYTE $0x68 // movzx ebx, byte [rsp + 104] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + WORD $0x8840; BYTE $0x3e // mov byte [rsi], dil + LONG $0x247cb60f; BYTE $0x40 // movzx edi, byte [rsp + 64] + LONG $0x06e7c040 // shl dil, 6 LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xc7 // or r15b, al - WORD $0x4e88; BYTE $0x01 // mov byte [rsi + 1], cl WORD $0x0841; BYTE $0xff // or r15b, dil - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + WORD $0x4688; BYTE $0x01 // mov byte [rsi + 1], al + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xc000 // add al, al LONG $0x18244402 // add al, byte [rsp + 24] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl WORD $0xc108 // or cl, al - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - WORD $0xcb08 // or bl, cl LONG $0x027e8844 // mov byte [rsi + 2], r15b - WORD $0x5e88; BYTE $0x03 // mov byte [rsi + 3], bl + WORD $0x4e88; BYTE $0x03 // mov byte [rsi + 3], cl LONG $0x80c28148; WORD $0x0000; BYTE $0x00 // add rdx, 128 LONG $0x04c68348 // add rsi, 4 LONG $0x24348948 // mov qword [rsp], rsi @@ -10370,22 +10909,22 @@ LBB2_78: LBB2_80: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB2_176 + JGE LBB2_177 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 - JNE LBB2_150 + JNE LBB2_151 LBB2_82: WORD $0xff31 // xor edi, edi - JMP LBB2_152 + JMP LBB2_153 LBB2_83: - LONG $0x2eb70f44 // movzx r13d, word [rsi] - LONG $0x1f728d4d // lea r14, [r10 + 31] + LONG $0x36b70f44 // movzx r14d, word [rsi] + LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 - LONG $0xf2490f4d // cmovns r14, r10 + LONG $0xfa490f4d // cmovns r15, r10 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d @@ -10396,7 +10935,7 @@ LBB2_83: LONG $0x241c8b4c // mov r11, qword [rsp] LBB2_85: - LONG $0x2a3b4466 // cmp r13w, word [rdx] + LONG $0x323b4466 // cmp r14w, word [rdx] LONG $0x02528d48 // lea rdx, [rdx + 2] WORD $0x940f; BYTE $0xd3 // sete bl WORD $0xdbf6 // neg bl @@ -10420,121 +10959,129 @@ LBB2_85: LONG $0x24048348; BYTE $0x01 // add qword [rsp], 1 LBB2_87: - LONG $0x05fec149 // sar r14, 5 - LONG $0x20fa8349 // cmp r10, 32 + LONG $0x05ffc149 // sar r15, 5 + LONG $0x20fa8349 // cmp r10, 32 JL LBB2_138 - LONG $0x08fe8349 // cmp r14, 8 - QUAD $0x000000902494894c // mov qword [rsp + 144], r10 - QUAD $0x0000009824b4894c // mov qword [rsp + 152], r14 + LONG $0x08ff8349 // cmp r15, 8 + LONG $0x24748944; BYTE $0x08 // mov dword [rsp + 8], r14d + QUAD $0x000000902494894c // mov qword [rsp + 144], r10 + QUAD $0x0000009824bc894c // mov qword [rsp + 152], r15 JB LBB2_91 - WORD $0x894c; BYTE $0xf0 // mov rax, r14 - LONG $0x06e0c148 // shl rax, 6 - WORD $0x0148; BYTE $0xd0 // add rax, rdx - LONG $0x24043948 // cmp qword [rsp], rax - JAE LBB2_191 - LONG $0x24048b48 // mov rax, qword [rsp] - LONG $0xb0048d4a // lea rax, [rax + 4*r14] - WORD $0x3948; BYTE $0xd0 // cmp rax, rdx - JBE LBB2_191 + WORD $0x894c; BYTE $0xf8 // mov rax, r15 + LONG $0x06e0c148 // shl rax, 6 + WORD $0x0148; BYTE $0xd0 // add rax, rdx + LONG $0x24043948 // cmp qword [rsp], rax + JAE LBB2_188 + LONG $0x24048b48 // mov rax, qword [rsp] + LONG $0xb8048d4a // lea rax, [rax + 4*r15] + WORD $0x3948; BYTE $0xd0 // cmp rax, rdx + JBE LBB2_188 LBB2_91: WORD $0xc031 // xor eax, eax LONG $0x24448948; BYTE $0x20 // mov qword [rsp + 32], rax WORD $0x8948; BYTE $0xd6 // mov rsi, rdx LONG $0x24048b48 // mov rax, qword [rsp] - LONG $0x24448948; BYTE $0x08 // mov qword [rsp + 8], rax + LONG $0x24448948; BYTE $0x10 // mov qword [rsp + 16], rax LBB2_92: - LONG $0x24742b4c; BYTE $0x20 // sub r14, qword [rsp + 32] - QUAD $0x0000008824b4894c // mov qword [rsp + 136], r14 + LONG $0x247c2b4c; BYTE $0x20 // sub r15, qword [rsp + 32] + QUAD $0x0000008824bc894c // mov qword [rsp + 136], r15 LBB2_93: - WORD $0x8949; BYTE $0xf3 // mov r11, rsi - LONG $0x2e3b4466 // cmp r13w, word [rsi] + WORD $0x8949; BYTE $0xf2 // mov r10, rsi + LONG $0x363b4466 // cmp r14w, word [rsi] QUAD $0x000000c02494940f // sete byte [rsp + 192] - LONG $0x6e3b4466; BYTE $0x02 // cmp r13w, word [rsi + 2] + LONG $0x763b4466; BYTE $0x02 // cmp r14w, word [rsi + 2] LONG $0xd7940f40 // sete dil - LONG $0x6e3b4466; BYTE $0x04 // cmp r13w, word [rsi + 4] - LONG $0xd6940f41 // sete r14b - LONG $0x6e3b4466; BYTE $0x06 // cmp r13w, word [rsi + 6] - QUAD $0x000000a02494940f // sete byte [rsp + 160] - LONG $0x6e3b4466; BYTE $0x08 // cmp r13w, word [rsi + 8] - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] - LONG $0x6e3b4466; BYTE $0x0a // cmp r13w, word [rsi + 10] - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] - LONG $0x6e3b4466; BYTE $0x0c // cmp r13w, word [rsi + 12] + LONG $0x763b4466; BYTE $0x04 // cmp r14w, word [rsi + 4] + LONG $0xd7940f41 // sete r15b + LONG $0x763b4466; BYTE $0x06 // cmp r14w, word [rsi + 6] + LONG $0xd5940f41 // sete r13b + LONG $0x763b4466; BYTE $0x08 // cmp r14w, word [rsi + 8] + QUAD $0x000000802494940f // sete byte [rsp + 128] + LONG $0x763b4466; BYTE $0x0a // cmp r14w, word [rsi + 10] + LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] + LONG $0x763b4466; BYTE $0x0c // cmp r14w, word [rsi + 12] WORD $0x940f; BYTE $0xd0 // sete al - LONG $0x6e3b4466; BYTE $0x0e // cmp r13w, word [rsi + 14] - LONG $0xd2940f41 // sete r10b - LONG $0x6e3b4466; BYTE $0x10 // cmp r13w, word [rsi + 16] + LONG $0x763b4466; BYTE $0x0e // cmp r14w, word [rsi + 14] + LONG $0xd3940f41 // sete r11b + LONG $0x763b4466; BYTE $0x10 // cmp r14w, word [rsi + 16] QUAD $0x000000d02494940f // sete byte [rsp + 208] - LONG $0x6e3b4466; BYTE $0x12 // cmp r13w, word [rsi + 18] + LONG $0x763b4466; BYTE $0x12 // cmp r14w, word [rsi + 18] WORD $0x940f; BYTE $0xd1 // sete cl - LONG $0x6e3b4466; BYTE $0x14 // cmp r13w, word [rsi + 20] + LONG $0x763b4466; BYTE $0x14 // cmp r14w, word [rsi + 20] WORD $0x940f; BYTE $0xd2 // sete dl - LONG $0x6e3b4466; BYTE $0x16 // cmp r13w, word [rsi + 22] + LONG $0x763b4466; BYTE $0x16 // cmp r14w, word [rsi + 22] LONG $0xd6940f40 // sete sil - LONG $0x6b3b4566; BYTE $0x18 // cmp r13w, word [r11 + 24] + LONG $0x723b4566; BYTE $0x18 // cmp r14w, word [r10 + 24] LONG $0xd1940f41 // sete r9b - LONG $0x6b3b4566; BYTE $0x1a // cmp r13w, word [r11 + 26] + LONG $0x723b4566; BYTE $0x1a // cmp r14w, word [r10 + 26] LONG $0xd4940f41 // sete r12b - LONG $0x6b3b4566; BYTE $0x1c // cmp r13w, word [r11 + 28] + LONG $0x723b4566; BYTE $0x1c // cmp r14w, word [r10 + 28] QUAD $0x000000b02494940f // sete byte [rsp + 176] - LONG $0x6b3b4566; BYTE $0x1e // cmp r13w, word [r11 + 30] + LONG $0x723b4566; BYTE $0x1e // cmp r14w, word [r10 + 30] LONG $0xd0940f41 // sete r8b - LONG $0x6b3b4566; BYTE $0x20 // cmp r13w, word [r11 + 32] - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] - LONG $0x6b3b4566; BYTE $0x22 // cmp r13w, word [r11 + 34] - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] - LONG $0x6b3b4566; BYTE $0x24 // cmp r13w, word [r11 + 36] - QUAD $0x000000802494940f // sete byte [rsp + 128] - LONG $0x6b3b4566; BYTE $0x26 // cmp r13w, word [r11 + 38] + LONG $0x723b4566; BYTE $0x20 // cmp r14w, word [r10 + 32] LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] - LONG $0x6b3b4566; BYTE $0x28 // cmp r13w, word [r11 + 40] - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] - LONG $0x6b3b4566; BYTE $0x2a // cmp r13w, word [r11 + 42] + LONG $0x723b4566; BYTE $0x22 // cmp r14w, word [r10 + 34] + QUAD $0x000000a02494940f // sete byte [rsp + 160] + LONG $0x723b4566; BYTE $0x24 // cmp r14w, word [r10 + 36] + LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + LONG $0x723b4566; BYTE $0x26 // cmp r14w, word [r10 + 38] + LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + LONG $0x723b4566; BYTE $0x28 // cmp r14w, word [r10 + 40] + LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + LONG $0x723b4566; BYTE $0x2a // cmp r14w, word [r10 + 42] + LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + LONG $0x723b4566; BYTE $0x2c // cmp r14w, word [r10 + 44] LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] - LONG $0x6b3b4566; BYTE $0x2c // cmp r13w, word [r11 + 44] + LONG $0x723b4566; BYTE $0x2e // cmp r14w, word [r10 + 46] + LONG $0xd6940f41 // sete r14b + LONG $0x08245c8b // mov ebx, dword [rsp + 8] + LONG $0x5a3b4166; BYTE $0x30 // cmp bx, word [r10 + 48] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x08245c8b // mov ebx, dword [rsp + 8] + LONG $0x5a3b4166; BYTE $0x32 // cmp bx, word [r10 + 50] LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] - LONG $0x6b3b4566; BYTE $0x2e // cmp r13w, word [r11 + 46] - LONG $0xd7940f41 // sete r15b - LONG $0x6b3b4566; BYTE $0x30 // cmp r13w, word [r11 + 48] - LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] - LONG $0x6b3b4566; BYTE $0x32 // cmp r13w, word [r11 + 50] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] - LONG $0x6b3b4566; BYTE $0x34 // cmp r13w, word [r11 + 52] + LONG $0x08245c8b // mov ebx, dword [rsp + 8] + LONG $0x5a3b4166; BYTE $0x34 // cmp bx, word [r10 + 52] LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] - LONG $0x6b3b4566; BYTE $0x36 // cmp r13w, word [r11 + 54] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] - LONG $0x6b3b4566; BYTE $0x38 // cmp r13w, word [r11 + 56] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] - LONG $0x6b3b4566; BYTE $0x3a // cmp r13w, word [r11 + 58] + LONG $0x08245c8b // mov ebx, dword [rsp + 8] + LONG $0x5a3b4166; BYTE $0x36 // cmp bx, word [r10 + 54] + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + LONG $0x08245c8b // mov ebx, dword [rsp + 8] + LONG $0x5a3b4166; BYTE $0x38 // cmp bx, word [r10 + 56] + LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] + LONG $0x08245c8b // mov ebx, dword [rsp + 8] + LONG $0x5a3b4166; BYTE $0x3a // cmp bx, word [r10 + 58] LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] - LONG $0x6b3b4566; BYTE $0x3c // cmp r13w, word [r11 + 60] + LONG $0x08245c8b // mov ebx, dword [rsp + 8] + LONG $0x5a3b4166; BYTE $0x3c // cmp bx, word [r10 + 60] LONG $0x2414940f // sete byte [rsp] - LONG $0x6b3b4566; BYTE $0x3e // cmp r13w, word [r11 + 62] + LONG $0x08245c8b // mov ebx, dword [rsp + 8] + LONG $0x5a3b4166; BYTE $0x3e // cmp bx, word [r10 + 62] WORD $0x940f; BYTE $0xd3 // sete bl WORD $0x0040; BYTE $0xff // add dil, dil QUAD $0x000000c024bc0240 // add dil, byte [rsp + 192] WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e2c041 // shl r10b, 7 - WORD $0x0841; BYTE $0xc2 // or r10b, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil + LONG $0x07e3c041 // shl r11b, 7 + WORD $0x0841; BYTE $0xc3 // or r11b, al + LONG $0x02e7c041 // shl r15b, 2 + WORD $0x0841; BYTE $0xff // or r15b, dil WORD $0xc900 // add cl, cl LONG $0xd0248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 208] - QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b + LONG $0x03e5c041 // shl r13b, 3 + WORD $0x0845; BYTE $0xfd // or r13b, r15b WORD $0xe2c0; BYTE $0x02 // shl dl, 2 WORD $0xca08 // or dl, cl - LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] + QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al + WORD $0x0844; BYTE $0xe9 // or cl, r13b WORD $0xcf89 // mov edi, ecx LONG $0x03e6c040 // shl sil, 3 WORD $0x0840; BYTE $0xd6 // or sil, dl - LONG $0x244cb60f; BYTE $0x58 // movzx ecx, byte [rsp + 88] + LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0x0840; BYTE $0xf9 // or cl, dil LONG $0x04e1c041 // shl r9b, 4 @@ -10545,49 +11092,48 @@ LBB2_93: WORD $0xe2c0; BYTE $0x06 // shl dl, 6 LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xca // or r10b, cl + WORD $0x0841; BYTE $0xcb // or r11b, cl WORD $0x0845; BYTE $0xe0 // or r8b, r12b + QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] + WORD $0xc000 // add al, al + LONG $0x60244402 // add al, byte [rsp + 96] LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] - WORD $0xc900 // add cl, cl - LONG $0x48244c02 // add cl, byte [rsp + 72] - WORD $0xca89 // mov edx, ecx - QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl + WORD $0xc108 // or cl, al WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] + LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] + LONG $0x244cb60f; BYTE $0x48 // movzx ecx, byte [rsp + 72] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x68 // movzx ecx, byte [rsp + 104] + LONG $0x244cb60f; BYTE $0x58 // movzx ecx, byte [rsp + 88] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0xd108 // or cl, dl WORD $0xce89 // mov esi, ecx - LONG $0x244c8b48; BYTE $0x08 // mov rcx, qword [rsp + 8] - WORD $0x8844; BYTE $0x11 // mov byte [rcx], r10b - LONG $0x2454b60f; BYTE $0x40 // movzx edx, byte [rsp + 64] + LONG $0x244c8b48; BYTE $0x10 // mov rcx, qword [rsp + 16] + WORD $0x8844; BYTE $0x19 // mov byte [rcx], r11b + LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xd7 // or r15b, dl + LONG $0x07e6c041 // shl r14b, 7 + WORD $0x0841; BYTE $0xd6 // or r14b, dl LONG $0x01418844 // mov byte [rcx + 1], r8b - WORD $0x0841; BYTE $0xf7 // or r15b, sil - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + WORD $0x0841; BYTE $0xf6 // or r14b, sil + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] WORD $0xc000 // add al, al - LONG $0x18244402 // add al, byte [rsp + 24] + LONG $0x28244402 // add al, byte [rsp + 40] WORD $0xc289 // mov edx, eax LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xd008 // or al, dl WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xd008 // or al, dl WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xd008 // or al, dl WORD $0xc289 // mov edx, eax @@ -10599,19 +11145,20 @@ LBB2_93: WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xd308 // or bl, dl WORD $0xc308 // or bl, al - LONG $0x02798844 // mov byte [rcx + 2], r15b + LONG $0x02718844 // mov byte [rcx + 2], r14b + LONG $0x24748b44; BYTE $0x08 // mov r14d, dword [rsp + 8] WORD $0x5988; BYTE $0x03 // mov byte [rcx + 3], bl - LONG $0x40738d49 // lea rsi, [r11 + 64] + LONG $0x40728d49 // lea rsi, [r10 + 64] LONG $0x04c18348 // add rcx, 4 - LONG $0x244c8948; BYTE $0x08 // mov qword [rsp + 8], rcx + LONG $0x244c8948; BYTE $0x10 // mov qword [rsp + 16], rcx QUAD $0x0000008824848348; BYTE $0xff // add qword [rsp + 136], -1 JNE LBB2_93 QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] - QUAD $0x0000009824b48b4c // mov r14, qword [rsp + 152] + QUAD $0x0000009824bc8b4c // mov r15, qword [rsp + 152] JMP LBB2_139 LBB2_95: - LONG $0x2eb70f44 // movzx r13d, word [rsi] + LONG $0x36b70f44 // movzx r14d, word [rsi] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 LONG $0xfa490f4d // cmovns r15, r10 @@ -10625,7 +11172,7 @@ LBB2_95: LONG $0x241c8b4c // mov r11, qword [rsp] LBB2_97: - LONG $0x2a3b4466 // cmp r13w, word [rdx] + LONG $0x323b4466 // cmp r14w, word [rdx] LONG $0x02528d48 // lea rdx, [rdx + 2] WORD $0x940f; BYTE $0xd3 // sete bl WORD $0xdbf6 // neg bl @@ -10649,121 +11196,129 @@ LBB2_97: LONG $0x24048348; BYTE $0x01 // add qword [rsp], 1 LBB2_99: - LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fa8349 // cmp r10, 32 - JL LBB2_142 - LONG $0x08ff8349 // cmp r15, 8 - QUAD $0x000000902494894c // mov qword [rsp + 144], r10 - QUAD $0x0000009824bc894c // mov qword [rsp + 152], r15 + LONG $0x05ffc149 // sar r15, 5 + LONG $0x20fa8349 // cmp r10, 32 + JL LBB2_143 + LONG $0x08ff8349 // cmp r15, 8 + LONG $0x24748944; BYTE $0x08 // mov dword [rsp + 8], r14d + QUAD $0x000000902494894c // mov qword [rsp + 144], r10 + QUAD $0x0000009824bc894c // mov qword [rsp + 152], r15 JB LBB2_103 - WORD $0x894c; BYTE $0xf8 // mov rax, r15 - LONG $0x06e0c148 // shl rax, 6 - WORD $0x0148; BYTE $0xd0 // add rax, rdx - LONG $0x24043948 // cmp qword [rsp], rax - JAE LBB2_194 - LONG $0x24048b48 // mov rax, qword [rsp] - LONG $0xb8048d4a // lea rax, [rax + 4*r15] - WORD $0x3948; BYTE $0xd0 // cmp rax, rdx - JBE LBB2_194 + WORD $0x894c; BYTE $0xf8 // mov rax, r15 + LONG $0x06e0c148 // shl rax, 6 + WORD $0x0148; BYTE $0xd0 // add rax, rdx + LONG $0x24043948 // cmp qword [rsp], rax + JAE LBB2_191 + LONG $0x24048b48 // mov rax, qword [rsp] + LONG $0xb8048d4a // lea rax, [rax + 4*r15] + WORD $0x3948; BYTE $0xd0 // cmp rax, rdx + JBE LBB2_191 LBB2_103: WORD $0xc031 // xor eax, eax LONG $0x24448948; BYTE $0x20 // mov qword [rsp + 32], rax WORD $0x8948; BYTE $0xd6 // mov rsi, rdx - LONG $0x24348b4c // mov r14, qword [rsp] + LONG $0x24048b48 // mov rax, qword [rsp] + LONG $0x24448948; BYTE $0x10 // mov qword [rsp + 16], rax LBB2_104: - LONG $0x2474894c; BYTE $0x08 // mov qword [rsp + 8], r14 LONG $0x247c2b4c; BYTE $0x20 // sub r15, qword [rsp + 32] QUAD $0x0000008824bc894c // mov qword [rsp + 136], r15 LBB2_105: - WORD $0x8949; BYTE $0xf3 // mov r11, rsi - LONG $0x2e3b4466 // cmp r13w, word [rsi] + WORD $0x8949; BYTE $0xf2 // mov r10, rsi + LONG $0x363b4466 // cmp r14w, word [rsi] QUAD $0x000000c02494940f // sete byte [rsp + 192] - LONG $0x6e3b4466; BYTE $0x02 // cmp r13w, word [rsi + 2] + LONG $0x763b4466; BYTE $0x02 // cmp r14w, word [rsi + 2] LONG $0xd7940f40 // sete dil - LONG $0x6e3b4466; BYTE $0x04 // cmp r13w, word [rsi + 4] - LONG $0xd6940f41 // sete r14b - LONG $0x6e3b4466; BYTE $0x06 // cmp r13w, word [rsi + 6] - QUAD $0x000000a02494940f // sete byte [rsp + 160] - LONG $0x6e3b4466; BYTE $0x08 // cmp r13w, word [rsi + 8] - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] - LONG $0x6e3b4466; BYTE $0x0a // cmp r13w, word [rsi + 10] - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] - LONG $0x6e3b4466; BYTE $0x0c // cmp r13w, word [rsi + 12] + LONG $0x763b4466; BYTE $0x04 // cmp r14w, word [rsi + 4] + LONG $0xd7940f41 // sete r15b + LONG $0x763b4466; BYTE $0x06 // cmp r14w, word [rsi + 6] + LONG $0xd5940f41 // sete r13b + LONG $0x763b4466; BYTE $0x08 // cmp r14w, word [rsi + 8] + QUAD $0x000000802494940f // sete byte [rsp + 128] + LONG $0x763b4466; BYTE $0x0a // cmp r14w, word [rsi + 10] + LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] + LONG $0x763b4466; BYTE $0x0c // cmp r14w, word [rsi + 12] WORD $0x940f; BYTE $0xd0 // sete al - LONG $0x6e3b4466; BYTE $0x0e // cmp r13w, word [rsi + 14] - LONG $0xd2940f41 // sete r10b - LONG $0x6e3b4466; BYTE $0x10 // cmp r13w, word [rsi + 16] + LONG $0x763b4466; BYTE $0x0e // cmp r14w, word [rsi + 14] + LONG $0xd3940f41 // sete r11b + LONG $0x763b4466; BYTE $0x10 // cmp r14w, word [rsi + 16] QUAD $0x000000d02494940f // sete byte [rsp + 208] - LONG $0x6e3b4466; BYTE $0x12 // cmp r13w, word [rsi + 18] + LONG $0x763b4466; BYTE $0x12 // cmp r14w, word [rsi + 18] WORD $0x940f; BYTE $0xd1 // sete cl - LONG $0x6e3b4466; BYTE $0x14 // cmp r13w, word [rsi + 20] + LONG $0x763b4466; BYTE $0x14 // cmp r14w, word [rsi + 20] WORD $0x940f; BYTE $0xd2 // sete dl - LONG $0x6e3b4466; BYTE $0x16 // cmp r13w, word [rsi + 22] + LONG $0x763b4466; BYTE $0x16 // cmp r14w, word [rsi + 22] LONG $0xd6940f40 // sete sil - LONG $0x6b3b4566; BYTE $0x18 // cmp r13w, word [r11 + 24] + LONG $0x723b4566; BYTE $0x18 // cmp r14w, word [r10 + 24] LONG $0xd1940f41 // sete r9b - LONG $0x6b3b4566; BYTE $0x1a // cmp r13w, word [r11 + 26] + LONG $0x723b4566; BYTE $0x1a // cmp r14w, word [r10 + 26] LONG $0xd4940f41 // sete r12b - LONG $0x6b3b4566; BYTE $0x1c // cmp r13w, word [r11 + 28] + LONG $0x723b4566; BYTE $0x1c // cmp r14w, word [r10 + 28] QUAD $0x000000b02494940f // sete byte [rsp + 176] - LONG $0x6b3b4566; BYTE $0x1e // cmp r13w, word [r11 + 30] + LONG $0x723b4566; BYTE $0x1e // cmp r14w, word [r10 + 30] LONG $0xd0940f41 // sete r8b - LONG $0x6b3b4566; BYTE $0x20 // cmp r13w, word [r11 + 32] - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] - LONG $0x6b3b4566; BYTE $0x22 // cmp r13w, word [r11 + 34] - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] - LONG $0x6b3b4566; BYTE $0x24 // cmp r13w, word [r11 + 36] - QUAD $0x000000802494940f // sete byte [rsp + 128] - LONG $0x6b3b4566; BYTE $0x26 // cmp r13w, word [r11 + 38] + LONG $0x723b4566; BYTE $0x20 // cmp r14w, word [r10 + 32] LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] - LONG $0x6b3b4566; BYTE $0x28 // cmp r13w, word [r11 + 40] - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] - LONG $0x6b3b4566; BYTE $0x2a // cmp r13w, word [r11 + 42] + LONG $0x723b4566; BYTE $0x22 // cmp r14w, word [r10 + 34] + QUAD $0x000000a02494940f // sete byte [rsp + 160] + LONG $0x723b4566; BYTE $0x24 // cmp r14w, word [r10 + 36] + LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + LONG $0x723b4566; BYTE $0x26 // cmp r14w, word [r10 + 38] + LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + LONG $0x723b4566; BYTE $0x28 // cmp r14w, word [r10 + 40] + LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + LONG $0x723b4566; BYTE $0x2a // cmp r14w, word [r10 + 42] + LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + LONG $0x723b4566; BYTE $0x2c // cmp r14w, word [r10 + 44] LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] - LONG $0x6b3b4566; BYTE $0x2c // cmp r13w, word [r11 + 44] + LONG $0x723b4566; BYTE $0x2e // cmp r14w, word [r10 + 46] + LONG $0xd6940f41 // sete r14b + LONG $0x08245c8b // mov ebx, dword [rsp + 8] + LONG $0x5a3b4166; BYTE $0x30 // cmp bx, word [r10 + 48] + LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + LONG $0x08245c8b // mov ebx, dword [rsp + 8] + LONG $0x5a3b4166; BYTE $0x32 // cmp bx, word [r10 + 50] LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] - LONG $0x6b3b4566; BYTE $0x2e // cmp r13w, word [r11 + 46] - LONG $0xd7940f41 // sete r15b - LONG $0x6b3b4566; BYTE $0x30 // cmp r13w, word [r11 + 48] - LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] - LONG $0x6b3b4566; BYTE $0x32 // cmp r13w, word [r11 + 50] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] - LONG $0x6b3b4566; BYTE $0x34 // cmp r13w, word [r11 + 52] + LONG $0x08245c8b // mov ebx, dword [rsp + 8] + LONG $0x5a3b4166; BYTE $0x34 // cmp bx, word [r10 + 52] LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] - LONG $0x6b3b4566; BYTE $0x36 // cmp r13w, word [r11 + 54] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] - LONG $0x6b3b4566; BYTE $0x38 // cmp r13w, word [r11 + 56] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] - LONG $0x6b3b4566; BYTE $0x3a // cmp r13w, word [r11 + 58] + LONG $0x08245c8b // mov ebx, dword [rsp + 8] + LONG $0x5a3b4166; BYTE $0x36 // cmp bx, word [r10 + 54] + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + LONG $0x08245c8b // mov ebx, dword [rsp + 8] + LONG $0x5a3b4166; BYTE $0x38 // cmp bx, word [r10 + 56] + LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] + LONG $0x08245c8b // mov ebx, dword [rsp + 8] + LONG $0x5a3b4166; BYTE $0x3a // cmp bx, word [r10 + 58] LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] - LONG $0x6b3b4566; BYTE $0x3c // cmp r13w, word [r11 + 60] + LONG $0x08245c8b // mov ebx, dword [rsp + 8] + LONG $0x5a3b4166; BYTE $0x3c // cmp bx, word [r10 + 60] LONG $0x2414940f // sete byte [rsp] - LONG $0x6b3b4566; BYTE $0x3e // cmp r13w, word [r11 + 62] + LONG $0x08245c8b // mov ebx, dword [rsp + 8] + LONG $0x5a3b4166; BYTE $0x3e // cmp bx, word [r10 + 62] WORD $0x940f; BYTE $0xd3 // sete bl WORD $0x0040; BYTE $0xff // add dil, dil QUAD $0x000000c024bc0240 // add dil, byte [rsp + 192] WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e2c041 // shl r10b, 7 - WORD $0x0841; BYTE $0xc2 // or r10b, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil + LONG $0x07e3c041 // shl r11b, 7 + WORD $0x0841; BYTE $0xc3 // or r11b, al + LONG $0x02e7c041 // shl r15b, 2 + WORD $0x0841; BYTE $0xff // or r15b, dil WORD $0xc900 // add cl, cl LONG $0xd0248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 208] - QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b + LONG $0x03e5c041 // shl r13b, 3 + WORD $0x0845; BYTE $0xfd // or r13b, r15b WORD $0xe2c0; BYTE $0x02 // shl dl, 2 WORD $0xca08 // or dl, cl - LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] + QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al + WORD $0x0844; BYTE $0xe9 // or cl, r13b WORD $0xcf89 // mov edi, ecx LONG $0x03e6c040 // shl sil, 3 WORD $0x0840; BYTE $0xd6 // or sil, dl - LONG $0x244cb60f; BYTE $0x58 // movzx ecx, byte [rsp + 88] + LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0x0840; BYTE $0xf9 // or cl, dil LONG $0x04e1c041 // shl r9b, 4 @@ -10774,49 +11329,48 @@ LBB2_105: WORD $0xe2c0; BYTE $0x06 // shl dl, 6 LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xca // or r10b, cl + WORD $0x0841; BYTE $0xcb // or r11b, cl WORD $0x0845; BYTE $0xe0 // or r8b, r12b + QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] + WORD $0xc000 // add al, al + LONG $0x60244402 // add al, byte [rsp + 96] LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] - WORD $0xc900 // add cl, cl - LONG $0x48244c02 // add cl, byte [rsp + 72] - WORD $0xca89 // mov edx, ecx - QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl + WORD $0xc108 // or cl, al WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] + LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] + LONG $0x244cb60f; BYTE $0x48 // movzx ecx, byte [rsp + 72] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x68 // movzx ecx, byte [rsp + 104] + LONG $0x244cb60f; BYTE $0x58 // movzx ecx, byte [rsp + 88] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0xd108 // or cl, dl WORD $0xce89 // mov esi, ecx - LONG $0x244c8b48; BYTE $0x08 // mov rcx, qword [rsp + 8] - WORD $0x8844; BYTE $0x11 // mov byte [rcx], r10b - LONG $0x2454b60f; BYTE $0x40 // movzx edx, byte [rsp + 64] + LONG $0x244c8b48; BYTE $0x10 // mov rcx, qword [rsp + 16] + WORD $0x8844; BYTE $0x19 // mov byte [rcx], r11b + LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xd7 // or r15b, dl + LONG $0x07e6c041 // shl r14b, 7 + WORD $0x0841; BYTE $0xd6 // or r14b, dl LONG $0x01418844 // mov byte [rcx + 1], r8b - WORD $0x0841; BYTE $0xf7 // or r15b, sil - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + WORD $0x0841; BYTE $0xf6 // or r14b, sil + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] WORD $0xc000 // add al, al - LONG $0x18244402 // add al, byte [rsp + 24] + LONG $0x28244402 // add al, byte [rsp + 40] WORD $0xc289 // mov edx, eax LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xd008 // or al, dl WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xd008 // or al, dl WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xd008 // or al, dl WORD $0xc289 // mov edx, eax @@ -10828,17 +11382,17 @@ LBB2_105: WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xd308 // or bl, dl WORD $0xc308 // or bl, al - LONG $0x02798844 // mov byte [rcx + 2], r15b + LONG $0x02718844 // mov byte [rcx + 2], r14b + LONG $0x24748b44; BYTE $0x08 // mov r14d, dword [rsp + 8] WORD $0x5988; BYTE $0x03 // mov byte [rcx + 3], bl - LONG $0x40738d49 // lea rsi, [r11 + 64] + LONG $0x40728d49 // lea rsi, [r10 + 64] LONG $0x04c18348 // add rcx, 4 - LONG $0x244c8948; BYTE $0x08 // mov qword [rsp + 8], rcx + LONG $0x244c8948; BYTE $0x10 // mov qword [rsp + 16], rcx QUAD $0x0000008824848348; BYTE $0xff // add qword [rsp + 136], -1 JNE LBB2_105 QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] QUAD $0x0000009824bc8b4c // mov r15, qword [rsp + 152] - LONG $0x24748b4c; BYTE $0x08 // mov r14, qword [rsp + 8] - JMP LBB2_143 + JMP LBB2_144 LBB2_107: WORD $0x8b4c; BYTE $0x2e // mov r13, qword [rsi] @@ -10890,7 +11444,7 @@ LBB2_113: WORD $0x3b4c; BYTE $0x2a // cmp r13, qword [rdx] QUAD $0x000000c02494940f // sete byte [rsp + 192] LONG $0x086a3b4c // cmp r13, qword [rdx + 8] - LONG $0xd7940f40 // sete dil + LONG $0xd2940f41 // sete r10b LONG $0x106a3b4c // cmp r13, qword [rdx + 16] LONG $0xd6940f41 // sete r14b LONG $0x186a3b4c // cmp r13, qword [rdx + 24] @@ -10900,9 +11454,9 @@ LBB2_113: LONG $0x286a3b4c // cmp r13, qword [rdx + 40] LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] LONG $0x306a3b4c // cmp r13, qword [rdx + 48] - WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x940f; BYTE $0xd3 // sete bl LONG $0x386a3b4c // cmp r13, qword [rdx + 56] - LONG $0xd3940f41 // sete r11b + LONG $0xd7940f40 // sete dil LONG $0x406a3b4c // cmp r13, qword [rdx + 64] QUAD $0x000000d02494940f // sete byte [rsp + 208] LONG $0x486a3b4c // cmp r13, qword [rdx + 72] @@ -10912,13 +11466,13 @@ LBB2_113: LONG $0x586a3b4c // cmp r13, qword [rdx + 88] LONG $0xd1940f41 // sete r9b LONG $0x606a3b4c // cmp r13, qword [rdx + 96] - LONG $0xd2940f41 // sete r10b + LONG $0xd3940f41 // sete r11b LONG $0x686a3b4c // cmp r13, qword [rdx + 104] LONG $0xd4940f41 // sete r12b LONG $0x706a3b4c // cmp r13, qword [rdx + 112] QUAD $0x000000b02494940f // sete byte [rsp + 176] LONG $0x786a3b4c // cmp r13, qword [rdx + 120] - WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x940f; BYTE $0xd0 // sete al LONG $0x80aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 128] LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] LONG $0x88aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 136] @@ -10938,107 +11492,106 @@ LBB2_113: LONG $0xc0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 192] LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] LONG $0xc8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 200] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] - LONG $0xd0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 208] LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + LONG $0xd0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 208] + LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] LONG $0xd8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 216] LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] LONG $0xe0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 224] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] - LONG $0xe8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 232] LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + LONG $0xe8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 232] + LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] LONG $0xf0aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 240] LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] LONG $0xf8aa3b4c; WORD $0x0000; BYTE $0x00 // cmp r13, qword [rdx + 248] - WORD $0x940f; BYTE $0xd3 // sete bl - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x000000c024bc0240 // add dil, byte [rsp + 192] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e3c041 // shl r11b, 7 - WORD $0x0841; BYTE $0xc3 // or r11b, al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000c024940244 // add r10b, byte [rsp + 192] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0840; BYTE $0xdf // or dil, bl LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil + WORD $0x0845; BYTE $0xd6 // or r14b, r10b WORD $0x0040; BYTE $0xf6 // add sil, sil QUAD $0x000000d024b40240 // add sil, byte [rsp + 208] - QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b - WORD $0xc789 // mov edi, eax + QUAD $0x000000a0249cb60f // movzx ebx, byte [rsp + 160] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0844; BYTE $0xf3 // or bl, r14b + WORD $0x8941; BYTE $0xda // mov r10d, ebx LONG $0x02e0c041 // shl r8b, 2 WORD $0x0841; BYTE $0xf0 // or r8b, sil - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf8 // or al, dil - WORD $0xc789 // mov edi, eax + LONG $0x245cb60f; BYTE $0x70 // movzx ebx, byte [rsp + 112] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xd3 // or bl, r10b + WORD $0xde89 // mov esi, ebx LONG $0x03e1c041 // shl r9b, 3 WORD $0x0845; BYTE $0xc1 // or r9b, r8b - LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf8 // or al, dil - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xca // or r10b, r9b + LONG $0x245cb60f; BYTE $0x58 // movzx ebx, byte [rsp + 88] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xf3 // or bl, sil + LONG $0x04e3c041 // shl r11b, 4 + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - QUAD $0x000000b024b4b60f // movzx esi, byte [rsp + 176] - LONG $0x06e6c040 // shl sil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf1 // or cl, sil - WORD $0x0841; BYTE $0xc3 // or r11b, al - WORD $0x0844; BYTE $0xe1 // or cl, r12b - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0x0845; BYTE $0xdc // or r12b, r11b + LONG $0x24348b48 // mov rsi, qword [rsp] + QUAD $0x0000b02484b60f44; BYTE $0x00 // movzx r8d, byte [rsp + 176] + LONG $0x06e0c041 // shl r8b, 6 + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0844; BYTE $0xc0 // or al, r8b + WORD $0x0840; BYTE $0xdf // or dil, bl + WORD $0x0844; BYTE $0xe0 // or al, r12b + LONG $0x245cb60f; BYTE $0x78 // movzx ebx, byte [rsp + 120] + WORD $0xdb00 // add bl, bl + LONG $0x48245c02 // add bl, byte [rsp + 72] + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx + QUAD $0x00000080249cb60f // movzx ebx, byte [rsp + 128] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx + LONG $0x245cb60f; BYTE $0x60 // movzx ebx, byte [rsp + 96] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx + LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx + LONG $0x245cb60f; BYTE $0x68 // movzx ebx, byte [rsp + 104] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + WORD $0x8840; BYTE $0x3e // mov byte [rsi], dil + LONG $0x247cb60f; BYTE $0x40 // movzx edi, byte [rsp + 64] + LONG $0x06e7c040 // shl dil, 6 + LONG $0x07e7c041 // shl r15b, 7 + WORD $0x0841; BYTE $0xff // or r15b, dil + WORD $0x4688; BYTE $0x01 // mov byte [rsi + 1], al + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xc000 // add al, al - LONG $0x48244402 // add al, byte [rsp + 72] - WORD $0xc689 // mov esi, eax - QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + LONG $0x18244402 // add al, byte [rsp + 24] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0840; BYTE $0xf0 // or al, sil - WORD $0xc789 // mov edi, eax - LONG $0x24048b48 // mov rax, qword [rsp] - WORD $0x8844; BYTE $0x18 // mov byte [rax], r11b - LONG $0x24348b48 // mov rsi, qword [rsp] - LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xc7 // or r15b, al - WORD $0x4e88; BYTE $0x01 // mov byte [rsi + 1], cl - WORD $0x0841; BYTE $0xff // or r15b, dil - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] - WORD $0xc000 // add al, al - LONG $0x18244402 // add al, byte [rsp + 24] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl WORD $0xc108 // or cl, al - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - WORD $0xcb08 // or bl, cl LONG $0x027e8844 // mov byte [rsi + 2], r15b - WORD $0x5e88; BYTE $0x03 // mov byte [rsi + 3], bl + WORD $0x4e88; BYTE $0x03 // mov byte [rsi + 3], cl LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 LONG $0x04c68348 // add rsi, 4 LONG $0x24348948 // mov qword [rsp], rsi @@ -11050,16 +11603,16 @@ LBB2_113: LBB2_115: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB2_176 + JGE LBB2_177 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 - JNE LBB2_165 + JNE LBB2_166 LBB2_117: WORD $0xff31 // xor edi, edi - JMP LBB2_167 + JMP LBB2_168 LBB2_118: LONG $0x1f728d4d // lea r14, [r10 + 31] @@ -11078,7 +11631,9 @@ LBB2_118: LBB2_120: WORD $0x2e0f; BYTE $0x02 // ucomiss xmm0, dword [rdx] LONG $0x04528d48 // lea rdx, [rdx + 4] + WORD $0x9b0f; BYTE $0xd1 // setnp cl WORD $0x940f; BYTE $0xd3 // sete bl + WORD $0xcb20 // and bl, cl WORD $0xdbf6 // neg bl LONG $0x07708d48 // lea rsi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax @@ -11102,189 +11657,280 @@ LBB2_120: LBB2_122: LONG $0x05fec149 // sar r14, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB2_146 + JL LBB2_147 LONG $0x04fe8349 // cmp r14, 4 JB LBB2_126 WORD $0x894c; BYTE $0xf0 // mov rax, r14 LONG $0x07e0c148 // shl rax, 7 WORD $0x0148; BYTE $0xd0 // add rax, rdx LONG $0x24043948 // cmp qword [rsp], rax - JAE LBB2_197 + JAE LBB2_194 LONG $0x24048b48 // mov rax, qword [rsp] LONG $0xb0048d4a // lea rax, [rax + 4*r14] WORD $0x3948; BYTE $0xd0 // cmp rax, rdx - JBE LBB2_197 + JBE LBB2_194 LBB2_126: WORD $0x3145; BYTE $0xc0 // xor r8d, r8d WORD $0x8948; BYTE $0xd3 // mov rbx, rdx - LONG $0x241c8b4c // mov r11, qword [rsp] + LONG $0x243c8b4c // mov r15, qword [rsp] LBB2_127: - LONG $0x241c894c // mov qword [rsp], r11 - QUAD $0x000000902494894c // mov qword [rsp + 144], r10 - QUAD $0x0000008824b4894c // mov qword [rsp + 136], r14 - WORD $0x294d; BYTE $0xc6 // sub r14, r8 - QUAD $0x000000c024b4894c // mov qword [rsp + 192], r14 + LONG $0x247c894c; BYTE $0x08 // mov qword [rsp + 8], r15 + QUAD $0x000000902494894c // mov qword [rsp + 144], r10 + QUAD $0x000000f024b4894c // mov qword [rsp + 240], r14 + WORD $0x294d; BYTE $0xc6 // sub r14, r8 + QUAD $0x0000009824b4894c // mov qword [rsp + 152], r14 LBB2_128: WORD $0x2e0f; BYTE $0x03 // ucomiss xmm0, dword [rbx] - QUAD $0x000000a02494940f // sete byte [rsp + 160] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + WORD $0x8941; BYTE $0xcd // mov r13d, ecx LONG $0x04432e0f // ucomiss xmm0, dword [rbx + 4] - LONG $0xd0940f41 // sete r8b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xc220 // and dl, al LONG $0x08432e0f // ucomiss xmm0, dword [rbx + 8] - LONG $0xd6940f41 // sete r14b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x18244c88 // mov byte [rsp + 24], cl LONG $0x0c432e0f // ucomiss xmm0, dword [rbx + 12] - LONG $0xd5940f41 // sete r13b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x30244c88 // mov byte [rsp + 48], cl LONG $0x10432e0f // ucomiss xmm0, dword [rbx + 16] - LONG $0x2454940f; BYTE $0x70 // sete byte [rsp + 112] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x10244c88 // mov byte [rsp + 16], cl LONG $0x14432e0f // ucomiss xmm0, dword [rbx + 20] - LONG $0x2454940f; BYTE $0x58 // sete byte [rsp + 88] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x38244c88 // mov byte [rsp + 56], cl LONG $0x18432e0f // ucomiss xmm0, dword [rbx + 24] - WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl LONG $0x1c432e0f // ucomiss xmm0, dword [rbx + 28] - LONG $0xd3940f41 // sete r11b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + WORD $0x0c88; BYTE $0x24 // mov byte [rsp], cl LONG $0x20432e0f // ucomiss xmm0, dword [rbx + 32] - QUAD $0x000000b02494940f // sete byte [rsp + 176] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl LONG $0x24432e0f // ucomiss xmm0, dword [rbx + 36] - WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x40244c88 // mov byte [rsp + 64], cl LONG $0x28432e0f // ucomiss xmm0, dword [rbx + 40] - LONG $0xd6940f40 // sete sil + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x68244c88 // mov byte [rsp + 104], cl LONG $0x2c432e0f // ucomiss xmm0, dword [rbx + 44] - LONG $0xd7940f40 // sete dil + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x58244c88 // mov byte [rsp + 88], cl LONG $0x30432e0f // ucomiss xmm0, dword [rbx + 48] - LONG $0xd2940f41 // sete r10b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x50244c88 // mov byte [rsp + 80], cl LONG $0x34432e0f // ucomiss xmm0, dword [rbx + 52] - LONG $0xd4940f41 // sete r12b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x60244c88 // mov byte [rsp + 96], cl LONG $0x38432e0f // ucomiss xmm0, dword [rbx + 56] - LONG $0x2454940f; BYTE $0x78 // sete byte [rsp + 120] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x80248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 128], cl LONG $0x3c432e0f // ucomiss xmm0, dword [rbx + 60] - LONG $0xd1940f41 // sete r9b + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x70244c88 // mov byte [rsp + 112], cl LONG $0x40432e0f // ucomiss xmm0, dword [rbx + 64] - LONG $0x2454940f; BYTE $0x48 // sete byte [rsp + 72] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x48244c88 // mov byte [rsp + 72], cl LONG $0x44432e0f // ucomiss xmm0, dword [rbx + 68] - QUAD $0x000000d02494940f // sete byte [rsp + 208] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd4940f41 // sete r12b + WORD $0x2041; BYTE $0xc4 // and r12b, al LONG $0x48432e0f // ucomiss xmm0, dword [rbx + 72] - QUAD $0x000000802494940f // sete byte [rsp + 128] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x78244c88 // mov byte [rsp + 120], cl LONG $0x4c432e0f // ucomiss xmm0, dword [rbx + 76] - LONG $0x2454940f; BYTE $0x60 // sete byte [rsp + 96] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xb0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 176], cl LONG $0x50432e0f // ucomiss xmm0, dword [rbx + 80] - LONG $0x2454940f; BYTE $0x50 // sete byte [rsp + 80] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xd0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 208], cl LONG $0x54432e0f // ucomiss xmm0, dword [rbx + 84] - LONG $0x2454940f; BYTE $0x68 // sete byte [rsp + 104] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xc0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 192], cl LONG $0x58432e0f // ucomiss xmm0, dword [rbx + 88] - LONG $0x2454940f; BYTE $0x40 // sete byte [rsp + 64] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd6940f41 // sete r14b + WORD $0x2041; BYTE $0xc6 // and r14b, al LONG $0x5c432e0f // ucomiss xmm0, dword [rbx + 92] - LONG $0xd7940f41 // sete r15b + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd0940f41 // sete r8b + WORD $0x2041; BYTE $0xc0 // and r8b, al LONG $0x60432e0f // ucomiss xmm0, dword [rbx + 96] - LONG $0x2454940f; BYTE $0x18 // sete byte [rsp + 24] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0xa0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 160], cl LONG $0x64432e0f // ucomiss xmm0, dword [rbx + 100] - LONG $0x2454940f; BYTE $0x38 // sete byte [rsp + 56] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd3940f41 // sete r11b + WORD $0x2041; BYTE $0xc3 // and r11b, al LONG $0x68432e0f // ucomiss xmm0, dword [rbx + 104] - LONG $0x2454940f; BYTE $0x20 // sete byte [rsp + 32] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd2940f41 // sete r10b + WORD $0x2041; BYTE $0xc2 // and r10b, al LONG $0x6c432e0f // ucomiss xmm0, dword [rbx + 108] - LONG $0x2454940f; BYTE $0x28 // sete byte [rsp + 40] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd1940f41 // sete r9b + WORD $0x2041; BYTE $0xc1 // and r9b, al LONG $0x70432e0f // ucomiss xmm0, dword [rbx + 112] - LONG $0x2454940f; BYTE $0x10 // sete byte [rsp + 16] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f41 // sete r15b + WORD $0x2041; BYTE $0xc7 // and r15b, al LONG $0x74432e0f // ucomiss xmm0, dword [rbx + 116] - LONG $0x2454940f; BYTE $0x30 // sete byte [rsp + 48] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd1 // sete cl + WORD $0xc120 // and cl, al + LONG $0x88248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 136], cl LONG $0x78432e0f // ucomiss xmm0, dword [rbx + 120] - LONG $0x2454940f; BYTE $0x08 // sete byte [rsp + 8] + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd7940f40 // sete dil + WORD $0x2040; BYTE $0xc7 // and dil, al LONG $0x7c432e0f // ucomiss xmm0, dword [rbx + 124] - WORD $0x940f; BYTE $0xd1 // sete cl - WORD $0x0045; BYTE $0xc0 // add r8b, r8b - QUAD $0x000000a024840244 // add r8b, byte [rsp + 160] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e3c041 // shl r11b, 7 - WORD $0x0841; BYTE $0xc3 // or r11b, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0845; BYTE $0xc6 // or r14b, r8b + WORD $0x9b0f; BYTE $0xd0 // setnp al + LONG $0xd6940f40 // sete sil + WORD $0x2040; BYTE $0xc6 // and sil, al WORD $0xd200 // add dl, dl - LONG $0xb0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 176] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xf5 // or r13b, r14b - LONG $0x02e6c040 // shl sil, 2 - WORD $0x0840; BYTE $0xd6 // or sil, dl - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0x0844; BYTE $0xea // or dl, r13b - WORD $0x8941; BYTE $0xd0 // mov r8d, edx - LONG $0x03e7c040 // shl dil, 3 - WORD $0x0840; BYTE $0xf7 // or dil, sil - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0844; BYTE $0xc2 // or dl, r8b - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - LONG $0x2474b60f; BYTE $0x78 // movzx esi, byte [rsp + 120] - LONG $0x06e6c040 // shl sil, 6 - LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xf1 // or r9b, sil - WORD $0x0841; BYTE $0xd3 // or r11b, dl - WORD $0x0845; BYTE $0xe1 // or r9b, r12b - QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] - WORD $0xc000 // add al, al - LONG $0x48244402 // add al, byte [rsp + 72] - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0xc208 // or dl, al - WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xf2 // or dl, sil - WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xf2 // or dl, sil - WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] + WORD $0x8941; BYTE $0xd5 // mov r13d, edx + LONG $0x2454b60f; BYTE $0x38 // movzx edx, byte [rsp + 56] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xf2 // or dl, sil - LONG $0x24348b48 // mov rsi, qword [rsp] - WORD $0x8844; BYTE $0x1e // mov byte [rsi], r11b - LONG $0x247cb60f; BYTE $0x40 // movzx edi, byte [rsp + 64] - LONG $0x06e7c040 // shl dil, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xff // or r15b, dil - LONG $0x014e8844 // mov byte [rsi + 1], r9b - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] - WORD $0xc000 // add al, al - LONG $0x18244402 // add al, byte [rsp + 24] - WORD $0xc289 // mov edx, eax LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xd008 // or al, dl WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x244cb60f; BYTE $0x40 // movzx ecx, byte [rsp + 64] + WORD $0xc900 // add cl, cl + LONG $0x28244c02 // add cl, byte [rsp + 40] + LONG $0x2404b60f // movzx eax, byte [rsp] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0xd008 // or al, dl - WORD $0xc289 // mov edx, eax + WORD $0x0488; BYTE $0x24 // mov byte [rsp], al + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xd008 // or al, dl - WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0x0844; BYTE $0xe8 // or al, r13b + LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] + WORD $0xe2c0; BYTE $0x04 // shl dl, 4 + WORD $0xca08 // or dl, cl + LONG $0x6cb60f44; WORD $0x6024 // movzx r13d, byte [rsp + 96] + LONG $0x05e5c041 // shl r13b, 5 + QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x0844; BYTE $0xe9 // or cl, r13b + LONG $0x6cb60f44; WORD $0x7024 // movzx r13d, byte [rsp + 112] + LONG $0x07e5c041 // shl r13b, 7 + WORD $0x0841; BYTE $0xcd // or r13b, cl + WORD $0x0045; BYTE $0xe4 // add r12b, r12b + LONG $0x24640244; BYTE $0x48 // add r12b, byte [rsp + 72] + WORD $0x8944; BYTE $0xe1 // mov ecx, r12d + LONG $0x64b60f44; WORD $0x7824 // movzx r12d, byte [rsp + 120] + LONG $0x02e4c041 // shl r12b, 2 + WORD $0x0841; BYTE $0xcc // or r12b, cl + QUAD $0x000000b0248cb60f // movzx ecx, byte [rsp + 176] + WORD $0xe1c0; BYTE $0x03 // shl cl, 3 + WORD $0x0844; BYTE $0xe1 // or cl, r12b + WORD $0x8941; BYTE $0xcc // mov r12d, ecx + QUAD $0x000000d0248cb60f // movzx ecx, byte [rsp + 208] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0x0844; BYTE $0xe1 // or cl, r12b + LONG $0x24b60f44; BYTE $0x24 // movzx r12d, byte [rsp] + WORD $0x0841; BYTE $0xc4 // or r12b, al + QUAD $0x000000c02484b60f // movzx eax, byte [rsp + 192] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xd008 // or al, dl - LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0xd108 // or cl, dl - WORD $0xc108 // or cl, al - LONG $0x027e8844 // mov byte [rsi + 2], r15b - WORD $0x4e88; BYTE $0x03 // mov byte [rsi + 3], cl + LONG $0x06e6c041 // shl r14b, 6 + WORD $0x0841; BYTE $0xc6 // or r14b, al + WORD $0x0841; BYTE $0xd5 // or r13b, dl + LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xf0 // or r8b, r14b + WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0045; BYTE $0xdb // add r11b, r11b + QUAD $0x000000a0249c0244 // add r11b, byte [rsp + 160] + LONG $0x02e2c041 // shl r10b, 2 + WORD $0x0845; BYTE $0xda // or r10b, r11b + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xd1 // or r9b, r10b + LONG $0x04e7c041 // shl r15b, 4 + WORD $0x0845; BYTE $0xcf // or r15b, r9b + LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] + WORD $0x8844; BYTE $0x20 // mov byte [rax], r12b + QUAD $0x00000088248cb60f // movzx ecx, byte [rsp + 136] + WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + LONG $0x06e7c040 // shl dil, 6 + WORD $0x0840; BYTE $0xcf // or dil, cl + LONG $0x01688844 // mov byte [rax + 1], r13b + LONG $0x07e6c040 // shl sil, 7 + WORD $0x0840; BYTE $0xfe // or sil, dil + WORD $0x0844; BYTE $0xfe // or sil, r15b + LONG $0x02408844 // mov byte [rax + 2], r8b + LONG $0x03708840 // mov byte [rax + 3], sil LONG $0x80c38148; WORD $0x0000; BYTE $0x00 // add rbx, 128 - LONG $0x04c68348 // add rsi, 4 - LONG $0x24348948 // mov qword [rsp], rsi - QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 + LONG $0x04c08348 // add rax, 4 + LONG $0x24448948; BYTE $0x08 // mov qword [rsp + 8], rax + QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 JNE LBB2_128 - LONG $0x241c8b4c // mov r11, qword [rsp] + LONG $0x247c8b4c; BYTE $0x08 // mov r15, qword [rsp + 8] QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] - QUAD $0x0000008824b48b4c // mov r14, qword [rsp + 136] - JMP LBB2_147 + QUAD $0x000000f024b48b4c // mov r14, qword [rsp + 240] + JMP LBB2_148 LBB2_130: LONG $0x24048b48 // mov rax, qword [rsp] @@ -11294,7 +11940,7 @@ LBB2_130: LBB2_131: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB2_176 + JGE LBB2_177 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 @@ -11305,7 +11951,7 @@ LBB2_131: WORD $0x3145; BYTE $0xc9 // xor r9d, r9d LONG $0x245c8b4c; BYTE $0x68 // mov r11, qword [rsp + 104] -LBB2_155: +LBB2_156: WORD $0x894c; BYTE $0xc8 // mov rax, r9 LONG $0x0e343a46 // cmp r14b, byte [rsi + r9] WORD $0x940f; BYTE $0xd3 // sete bl @@ -11333,8 +11979,8 @@ LBB2_155: WORD $0xd030 // xor al, dl LONG $0x3b048841 // mov byte [r11 + rdi], al WORD $0x394d; BYTE $0xca // cmp r10, r9 - JNE LBB2_155 - JMP LBB2_158 + JNE LBB2_156 + JMP LBB2_159 LBB2_134: LONG $0x24048b48 // mov rax, qword [rsp] @@ -11344,75 +11990,112 @@ LBB2_134: LBB2_135: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB2_176 + JGE LBB2_177 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB2_156 + JNE LBB2_157 LBB2_137: WORD $0x3145; BYTE $0xc9 // xor r9d, r9d LONG $0x01c0f641 // test r8b, 1 - JE LBB2_176 - JMP LBB2_160 + JE LBB2_177 + JMP LBB2_161 LBB2_138: LONG $0x24048b48 // mov rax, qword [rsp] - LONG $0x24448948; BYTE $0x08 // mov qword [rsp + 8], rax + LONG $0x24448948; BYTE $0x10 // mov qword [rsp + 16], rax WORD $0x8948; BYTE $0xd6 // mov rsi, rdx LBB2_139: - LONG $0x05e6c149 // shl r14, 5 - WORD $0x394d; BYTE $0xd6 // cmp r14, r10 - JGE LBB2_176 - WORD $0x894d; BYTE $0xd0 // mov r8, r10 - WORD $0x294d; BYTE $0xf0 // sub r8, r14 - WORD $0xf749; BYTE $0xd6 // not r14 - WORD $0x014d; BYTE $0xd6 // add r14, r10 - JNE LBB2_170 - WORD $0x3145; BYTE $0xf6 // xor r14d, r14d - JMP LBB2_172 + LONG $0x05e7c149 // shl r15, 5 + WORD $0x394d; BYTE $0xd7 // cmp r15, r10 + JGE LBB2_177 + WORD $0x894d; BYTE $0xd0 // mov r8, r10 + WORD $0x294d; BYTE $0xf8 // sub r8, r15 + WORD $0xf749; BYTE $0xd7 // not r15 + WORD $0x014d; BYTE $0xd7 // add r15, r10 + JE LBB2_146 + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 + WORD $0x3145; BYTE $0xff // xor r15d, r15d + LONG $0x245c8b4c; BYTE $0x10 // mov r11, qword [rsp + 16] LBB2_142: - LONG $0x24348b4c // mov r14, qword [rsp] - WORD $0x8948; BYTE $0xd6 // mov rsi, rdx + WORD $0x8948; BYTE $0xf0 // mov rax, rsi + LONG $0x363b4466 // cmp r14w, word [rsi] + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xdaf6 // neg dl + WORD $0x894c; BYTE $0xff // mov rdi, r15 + LONG $0x03efc148 // shr rdi, 3 + LONG $0x14b60f45; BYTE $0x3b // movzx r10d, byte [r11 + rdi] + WORD $0x8944; BYTE $0xf9 // mov ecx, r15d + WORD $0xe180; BYTE $0x06 // and cl, 6 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0x3044; BYTE $0xd2 // xor dl, r10b + WORD $0xd320 // and bl, dl + WORD $0x3044; BYTE $0xd3 // xor bl, r10b + LONG $0x3b1c8841 // mov byte [r11 + rdi], bl + LONG $0x02c78349 // add r15, 2 + LONG $0x763b4466; BYTE $0x02 // cmp r14w, word [rsi + 2] + LONG $0x04768d48 // lea rsi, [rsi + 4] + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xdaf6 // neg dl + WORD $0xda30 // xor dl, bl + WORD $0xc980; BYTE $0x01 // or cl, 1 + WORD $0x01b0 // mov al, 1 + WORD $0xe0d2 // shl al, cl + WORD $0xd020 // and al, dl + WORD $0xd830 // xor al, bl + LONG $0x3b048841 // mov byte [r11 + rdi], al + WORD $0x394d; BYTE $0xf9 // cmp r9, r15 + JNE LBB2_142 + JMP LBB2_173 LBB2_143: + LONG $0x24048b48 // mov rax, qword [rsp] + LONG $0x24448948; BYTE $0x10 // mov qword [rsp + 16], rax + WORD $0x8948; BYTE $0xd6 // mov rsi, rdx + +LBB2_144: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB2_176 + JGE LBB2_177 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB2_177 - WORD $0x3145; BYTE $0xff // xor r15d, r15d - JMP LBB2_179 + JNE LBB2_171 LBB2_146: - LONG $0x241c8b4c // mov r11, qword [rsp] - WORD $0x8948; BYTE $0xd3 // mov rbx, rdx + WORD $0x3145; BYTE $0xff // xor r15d, r15d + JMP LBB2_173 LBB2_147: + LONG $0x243c8b4c // mov r15, qword [rsp] + WORD $0x8948; BYTE $0xd3 // mov rbx, rdx + +LBB2_148: LONG $0x05e6c149 // shl r14, 5 WORD $0x394d; BYTE $0xd6 // cmp r14, r10 - JGE LBB2_176 + JGE LBB2_177 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf0 // sub r8, r14 WORD $0xf749; BYTE $0xd6 // not r14 WORD $0x014d; BYTE $0xd6 // add r14, r10 - JNE LBB2_181 + JNE LBB2_178 WORD $0xf631 // xor esi, esi - JMP LBB2_183 + JMP LBB2_180 -LBB2_150: +LBB2_151: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0xff31 // xor edi, edi LONG $0x241c8b4c // mov r11, qword [rsp] -LBB2_151: +LBB2_152: WORD $0x3b44; BYTE $0x2a // cmp r13d, dword [rdx] WORD $0x940f; BYTE $0xd0 // sete al WORD $0xd8f6 // neg al @@ -11440,21 +12123,21 @@ LBB2_151: WORD $0xd830 // xor al, bl LONG $0x33048841 // mov byte [r11 + rsi], al WORD $0x3949; BYTE $0xfa // cmp r10, rdi - JNE LBB2_151 + JNE LBB2_152 -LBB2_152: +LBB2_153: LONG $0x01c0f641 // test r8b, 1 - JE LBB2_176 + JE LBB2_177 WORD $0x3b44; BYTE $0x2a // cmp r13d, dword [rdx] - JMP LBB2_169 + JMP LBB2_170 -LBB2_156: +LBB2_157: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xc9 // xor r9d, r9d LONG $0x245c8b4c; BYTE $0x68 // mov r11, qword [rsp + 104] -LBB2_157: +LBB2_158: WORD $0x894c; BYTE $0xc8 // mov rax, r9 LONG $0x0e343a46 // cmp r14b, byte [rsi + r9] WORD $0x940f; BYTE $0xd3 // sete bl @@ -11482,14 +12165,14 @@ LBB2_157: WORD $0xd030 // xor al, dl LONG $0x3b048841 // mov byte [r11 + rdi], al WORD $0x394d; BYTE $0xca // cmp r10, r9 - JNE LBB2_157 + JNE LBB2_158 -LBB2_158: +LBB2_159: WORD $0x014c; BYTE $0xce // add rsi, r9 LONG $0x01c0f641 // test r8b, 1 - JE LBB2_176 + JE LBB2_177 -LBB2_160: +LBB2_161: WORD $0x3a44; BYTE $0x36 // cmp r14b, byte [rsi] WORD $0x940f; BYTE $0xd0 // sete al WORD $0xd8f6 // neg al @@ -11500,57 +12183,77 @@ LBB2_160: LONG $0x07e18041 // and r9b, 7 WORD $0x01b3 // mov bl, 1 WORD $0x8944; BYTE $0xc9 // mov ecx, r9d - JMP LBB2_174 + JMP LBB2_175 -LBB2_161: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 +LBB2_162: + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 WORD $0xff31 // xor edi, edi - LONG $0x241c8b4c // mov r11, qword [rsp] + LONG $0x24348b4c // mov r14, qword [rsp] -LBB2_162: +LBB2_163: LONG $0x022e0f66 // ucomisd xmm0, qword [rdx] + WORD $0x9b0f; BYTE $0xd1 // setnp cl WORD $0x940f; BYTE $0xd0 // sete al + WORD $0xc820 // and al, cl WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xfe // mov rsi, rdi LONG $0x03eec148 // shr rsi, 3 - LONG $0x0cb60f45; BYTE $0x33 // movzx r9d, byte [r11 + rsi] - WORD $0x3044; BYTE $0xc8 // xor al, r9b + LONG $0x14b60f45; BYTE $0x36 // movzx r10d, byte [r14 + rsi] WORD $0xf989 // mov ecx, edi WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b3 // mov bl, 1 - WORD $0xe3d2 // shl bl, cl - WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x331c8841 // mov byte [r11 + rsi], bl + WORD $0xb341; BYTE $0x01 // mov r11b, 1 + WORD $0xd241; BYTE $0xe3 // shl r11b, cl + WORD $0x3044; BYTE $0xd0 // xor al, r10b + WORD $0x2041; BYTE $0xc3 // and r11b, al + WORD $0x3045; BYTE $0xd3 // xor r11b, r10b + LONG $0x361c8845 // mov byte [r14 + rsi], r11b LONG $0x02c78348 // add rdi, 2 LONG $0x422e0f66; BYTE $0x08 // ucomisd xmm0, qword [rdx + 8] LONG $0x10528d48 // lea rdx, [rdx + 16] - LONG $0xd1940f41 // sete r9b - WORD $0xf641; BYTE $0xd9 // neg r9b - WORD $0x3041; BYTE $0xd9 // xor r9b, bl + LONG $0xd29b0f41 // setnp r10b + WORD $0x940f; BYTE $0xd0 // sete al + WORD $0x2044; BYTE $0xd0 // and al, r10b + WORD $0xd8f6 // neg al + WORD $0x3044; BYTE $0xd8 // xor al, r11b WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0x2044; BYTE $0xc8 // and al, r9b - WORD $0xd830 // xor al, bl - LONG $0x33048841 // mov byte [r11 + rsi], al - WORD $0x3949; BYTE $0xfa // cmp r10, rdi - JNE LBB2_162 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xdb // xor bl, r11b + LONG $0x361c8841 // mov byte [r14 + rsi], bl + WORD $0x3949; BYTE $0xf9 // cmp r9, rdi + JNE LBB2_163 -LBB2_163: - LONG $0x01c0f641 // test r8b, 1 - JE LBB2_176 - LONG $0x022e0f66 // ucomisd xmm0, qword [rdx] - JMP LBB2_169 +LBB2_164: + LONG $0x01c0f641 // test r8b, 1 + JE LBB2_177 + LONG $0x022e0f66 // ucomisd xmm0, qword [rdx] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xc220 // and dl, al + WORD $0xdaf6 // neg dl + WORD $0x8948; BYTE $0xf8 // mov rax, rdi + LONG $0x03e8c148 // shr rax, 3 + LONG $0x24048b4c // mov r8, qword [rsp] + LONG $0x00348a41 // mov sil, byte [r8 + rax] + LONG $0x07e78040 // and dil, 7 + WORD $0x01b3 // mov bl, 1 + WORD $0xf989 // mov ecx, edi + WORD $0xe3d2 // shl bl, cl + WORD $0x3040; BYTE $0xf2 // xor dl, sil + WORD $0xd320 // and bl, dl + WORD $0x3040; BYTE $0xf3 // xor bl, sil + LONG $0x001c8841 // mov byte [r8 + rax], bl + JMP LBB2_177 -LBB2_165: +LBB2_166: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0xff31 // xor edi, edi LONG $0x241c8b4c // mov r11, qword [rsp] -LBB2_166: +LBB2_167: WORD $0x3b4c; BYTE $0x2a // cmp r13, qword [rdx] WORD $0x940f; BYTE $0xd0 // sete al WORD $0xd8f6 // neg al @@ -11578,14 +12281,14 @@ LBB2_166: WORD $0xd830 // xor al, bl LONG $0x33048841 // mov byte [r11 + rsi], al WORD $0x3949; BYTE $0xfa // cmp r10, rdi - JNE LBB2_166 + JNE LBB2_167 -LBB2_167: +LBB2_168: LONG $0x01c0f641 // test r8b, 1 - JE LBB2_176 + JE LBB2_177 WORD $0x3b4c; BYTE $0x2a // cmp r13, qword [rdx] -LBB2_169: +LBB2_170: WORD $0x940f; BYTE $0xd0 // sete al WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xfa // mov rdx, rdi @@ -11599,23 +12302,23 @@ LBB2_169: WORD $0x3040; BYTE $0xf0 // xor al, sil WORD $0xc320 // and bl, al WORD $0x3040; BYTE $0xf3 // xor bl, sil - JMP LBB2_175 + JMP LBB2_176 -LBB2_170: +LBB2_171: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 - WORD $0x3145; BYTE $0xf6 // xor r14d, r14d - LONG $0x245c8b4c; BYTE $0x08 // mov r11, qword [rsp + 8] + WORD $0x3145; BYTE $0xff // xor r15d, r15d + LONG $0x245c8b4c; BYTE $0x10 // mov r11, qword [rsp + 16] -LBB2_171: +LBB2_172: WORD $0x8948; BYTE $0xf0 // mov rax, rsi - LONG $0x2e3b4466 // cmp r13w, word [rsi] + LONG $0x363b4466 // cmp r14w, word [rsi] WORD $0x940f; BYTE $0xd2 // sete dl WORD $0xdaf6 // neg dl - WORD $0x894c; BYTE $0xf7 // mov rdi, r14 + WORD $0x894c; BYTE $0xff // mov rdi, r15 LONG $0x03efc148 // shr rdi, 3 LONG $0x14b60f45; BYTE $0x3b // movzx r10d, byte [r11 + rdi] - WORD $0x8944; BYTE $0xf1 // mov ecx, r14d + WORD $0x8944; BYTE $0xf9 // mov ecx, r15d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 WORD $0xe3d2 // shl bl, cl @@ -11623,8 +12326,8 @@ LBB2_171: WORD $0xd320 // and bl, dl WORD $0x3044; BYTE $0xd3 // xor bl, r10b LONG $0x3b1c8841 // mov byte [r11 + rdi], bl - LONG $0x02c68349 // add r14, 2 - LONG $0x6e3b4466; BYTE $0x02 // cmp r13w, word [rsi + 2] + LONG $0x02c78349 // add r15, 2 + LONG $0x763b4466; BYTE $0x02 // cmp r14w, word [rsi + 2] LONG $0x04768d48 // lea rsi, [rsi + 4] WORD $0x940f; BYTE $0xd2 // sete dl WORD $0xdaf6 // neg dl @@ -11635,153 +12338,104 @@ LBB2_171: WORD $0xd020 // and al, dl WORD $0xd830 // xor al, bl LONG $0x3b048841 // mov byte [r11 + rdi], al - WORD $0x394d; BYTE $0xf1 // cmp r9, r14 - JNE LBB2_171 + WORD $0x394d; BYTE $0xf9 // cmp r9, r15 + JNE LBB2_172 -LBB2_172: +LBB2_173: LONG $0x01c0f641 // test r8b, 1 - JE LBB2_176 - LONG $0x2e3b4466 // cmp r13w, word [rsi] + JE LBB2_177 + LONG $0x363b4466 // cmp r14w, word [rsi] WORD $0x940f; BYTE $0xd0 // sete al WORD $0xd8f6 // neg al - WORD $0x894c; BYTE $0xf2 // mov rdx, r14 + WORD $0x894c; BYTE $0xfa // mov rdx, r15 LONG $0x03eac148 // shr rdx, 3 - LONG $0x24448b4c; BYTE $0x08 // mov r8, qword [rsp + 8] + LONG $0x24448b4c; BYTE $0x10 // mov r8, qword [rsp + 16] LONG $0x103c8a41 // mov dil, byte [r8 + rdx] - LONG $0x07e68041 // and r14b, 7 + LONG $0x07e78041 // and r15b, 7 WORD $0x01b3 // mov bl, 1 - WORD $0x8944; BYTE $0xf1 // mov ecx, r14d + WORD $0x8944; BYTE $0xf9 // mov ecx, r15d -LBB2_174: +LBB2_175: WORD $0xe3d2 // shl bl, cl WORD $0x3040; BYTE $0xf8 // xor al, dil WORD $0xc320 // and bl, al WORD $0x3040; BYTE $0xfb // xor bl, dil -LBB2_175: +LBB2_176: LONG $0x101c8841 // mov byte [r8 + rdx], bl -LBB2_176: +LBB2_177: MOVQ 304(SP), SP RET -LBB2_177: +LBB2_178: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 - WORD $0x3145; BYTE $0xff // xor r15d, r15d + WORD $0xf631 // xor esi, esi + WORD $0x894d; BYTE $0xfe // mov r14, r15 -LBB2_178: - WORD $0x8948; BYTE $0xf0 // mov rax, rsi - LONG $0x2e3b4466 // cmp r13w, word [rsi] +LBB2_179: + WORD $0x2e0f; BYTE $0x03 // ucomiss xmm0, dword [rbx] + WORD $0x9b0f; BYTE $0xd1 // setnp cl WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xca20 // and dl, cl WORD $0xdaf6 // neg dl - WORD $0x894c; BYTE $0xff // mov rdi, r15 + WORD $0x8948; BYTE $0xf7 // mov rdi, rsi LONG $0x03efc148 // shr rdi, 3 LONG $0x14b60f45; BYTE $0x3e // movzx r10d, byte [r14 + rdi] - WORD $0x8944; BYTE $0xf9 // mov ecx, r15d + WORD $0xf189 // mov ecx, esi WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b3 // mov bl, 1 - WORD $0xe3d2 // shl bl, cl + WORD $0xb341; BYTE $0x01 // mov r11b, 1 + WORD $0xd241; BYTE $0xe3 // shl r11b, cl WORD $0x3044; BYTE $0xd2 // xor dl, r10b - WORD $0xd320 // and bl, dl - WORD $0x3044; BYTE $0xd3 // xor bl, r10b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl - LONG $0x02c78349 // add r15, 2 - LONG $0x6e3b4466; BYTE $0x02 // cmp r13w, word [rsi + 2] - LONG $0x04768d48 // lea rsi, [rsi + 4] + WORD $0x2041; BYTE $0xd3 // and r11b, dl + WORD $0x3045; BYTE $0xd3 // xor r11b, r10b + LONG $0x3e1c8845 // mov byte [r14 + rdi], r11b + LONG $0x02c68348 // add rsi, 2 + LONG $0x04432e0f // ucomiss xmm0, dword [rbx + 4] + LONG $0x085b8d48 // lea rbx, [rbx + 8] + LONG $0xd29b0f41 // setnp r10b WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0x2044; BYTE $0xd2 // and dl, r10b WORD $0xdaf6 // neg dl - WORD $0xda30 // xor dl, bl + WORD $0x3044; BYTE $0xda // xor dl, r11b WORD $0xc980; BYTE $0x01 // or cl, 1 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd020 // and al, dl - WORD $0xd830 // xor al, bl - LONG $0x3e048841 // mov byte [r14 + rdi], al - WORD $0x394d; BYTE $0xf9 // cmp r9, r15 - JNE LBB2_178 - -LBB2_179: - LONG $0x01c0f641 // test r8b, 1 - JE LBB2_176 - LONG $0x2e3b4466 // cmp r13w, word [rsi] - WORD $0x940f; BYTE $0xd0 // sete al - WORD $0xd8f6 // neg al - WORD $0x894c; BYTE $0xfa // mov rdx, r15 - LONG $0x03eac148 // shr rdx, 3 - LONG $0x163c8a41 // mov dil, byte [r14 + rdx] - LONG $0x07e78041 // and r15b, 7 - WORD $0x01b3 // mov bl, 1 - WORD $0x8944; BYTE $0xf9 // mov ecx, r15d - WORD $0xe3d2 // shl bl, cl - WORD $0x3040; BYTE $0xf8 // xor al, dil - WORD $0xc320 // and bl, al - WORD $0x3040; BYTE $0xfb // xor bl, dil - LONG $0x161c8841 // mov byte [r14 + rdx], bl - JMP LBB2_176 - -LBB2_181: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 - WORD $0xf631 // xor esi, esi - WORD $0x894d; BYTE $0xde // mov r14, r11 - -LBB2_182: - WORD $0x2e0f; BYTE $0x03 // ucomiss xmm0, dword [rbx] - WORD $0x940f; BYTE $0xd2 // sete dl - WORD $0xdaf6 // neg dl - WORD $0x8948; BYTE $0xf7 // mov rdi, rsi - LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] - WORD $0x3044; BYTE $0xca // xor dl, r9b - WORD $0xf189 // mov ecx, esi - WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0xd020 // and al, dl - WORD $0x3044; BYTE $0xc8 // xor al, r9b + WORD $0x3044; BYTE $0xd8 // xor al, r11b LONG $0x3e048841 // mov byte [r14 + rdi], al - LONG $0x02c68348 // add rsi, 2 - LONG $0x04432e0f // ucomiss xmm0, dword [rbx + 4] - LONG $0x085b8d48 // lea rbx, [rbx + 8] - LONG $0xd1940f41 // sete r9b - WORD $0xf641; BYTE $0xd9 // neg r9b - WORD $0x3041; BYTE $0xc1 // xor r9b, al - WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b2 // mov dl, 1 - WORD $0xe2d2 // shl dl, cl - WORD $0x2044; BYTE $0xca // and dl, r9b - WORD $0xc230 // xor dl, al - LONG $0x3e148841 // mov byte [r14 + rdi], dl - WORD $0x3949; BYTE $0xf2 // cmp r10, rsi - JNE LBB2_182 + WORD $0x3949; BYTE $0xf1 // cmp r9, rsi + JNE LBB2_179 -LBB2_183: +LBB2_180: LONG $0x01c0f641 // test r8b, 1 - JE LBB2_176 + JE LBB2_177 WORD $0x2e0f; BYTE $0x03 // ucomiss xmm0, dword [rbx] - WORD $0x940f; BYTE $0xd0 // sete al - WORD $0xd8f6 // neg al - WORD $0x8948; BYTE $0xf2 // mov rdx, rsi - LONG $0x03eac148 // shr rdx, 3 - LONG $0x133c8a41 // mov dil, byte [r11 + rdx] + WORD $0x9b0f; BYTE $0xd0 // setnp al + WORD $0x940f; BYTE $0xd2 // sete dl + WORD $0xc220 // and dl, al + WORD $0xdaf6 // neg dl + WORD $0x8948; BYTE $0xf0 // mov rax, rsi + LONG $0x03e8c148 // shr rax, 3 + LONG $0x073c8a41 // mov dil, byte [r15 + rax] LONG $0x07e68040 // and sil, 7 WORD $0x01b3 // mov bl, 1 WORD $0xf189 // mov ecx, esi WORD $0xe3d2 // shl bl, cl - WORD $0x3040; BYTE $0xf8 // xor al, dil - WORD $0xc320 // and bl, al + WORD $0x3040; BYTE $0xfa // xor dl, dil + WORD $0xd320 // and bl, dl WORD $0x3040; BYTE $0xfb // xor bl, dil - LONG $0x131c8841 // mov byte [r11 + rdx], bl - JMP LBB2_176 + LONG $0x071c8841 // mov byte [r15 + rax], bl + JMP LBB2_177 -LBB2_185: +LBB2_182: LONG $0xf0e78349 // and r15, -16 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xd0 // add rax, rdx - QUAD $0x000000f824848948 // mov qword [rsp + 248], rax - QUAD $0x000000e824bc894c // mov qword [rsp + 232], r15 + QUAD $0x0000010824848948 // mov qword [rsp + 264], rax + QUAD $0x000000e024bc894c // mov qword [rsp + 224], r15 LONG $0x24048b48 // mov rax, qword [rsp] LONG $0xb8048d4a // lea rax, [rax + 4*r15] LONG $0x24448948; BYTE $0x68 // mov qword [rsp + 104], rax @@ -11792,7 +12446,7 @@ LBB2_185: QUAD $0x0000b0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 176], xmm1 WORD $0xc031 // xor eax, eax -LBB2_186: +LBB2_183: WORD $0x8948; BYTE $0xc7 // mov rdi, rax QUAD $0x0000009824848948 // mov qword [rsp + 152], rax LONG $0x05e7c148 // shl rdi, 5 @@ -11826,7 +12480,7 @@ LBB2_186: QUAD $0x0000d024847f0f66; BYTE $0x00 // movdqa oword [rsp + 208], xmm0 LONG $0x3a4cb60f; BYTE $0x08 // movzx ecx, byte [rdx + rdi + 8] LONG $0xc16e0f66 // movd xmm0, ecx - QUAD $0x00010024847f0f66; BYTE $0x00 // movdqa oword [rsp + 256], xmm0 + QUAD $0x00011024847f0f66; BYTE $0x00 // movdqa oword [rsp + 272], xmm0 LONG $0x3a4cb60f; BYTE $0x09 // movzx ecx, byte [rdx + rdi + 9] LONG $0x6e0f4466; BYTE $0xd1 // movd xmm10, ecx LONG $0x3a4cb60f; BYTE $0x0a // movzx ecx, byte [rdx + rdi + 10] @@ -11840,7 +12494,7 @@ LBB2_186: LONG $0x6e0f4466; BYTE $0xe1 // movd xmm12, ecx LONG $0x3a4cb60f; BYTE $0x0e // movzx ecx, byte [rdx + rdi + 14] LONG $0xc16e0f66 // movd xmm0, ecx - QUAD $0x00011024847f0f66; BYTE $0x00 // movdqa oword [rsp + 272], xmm0 + QUAD $0x0000f024847f0f66; BYTE $0x00 // movdqa oword [rsp + 240], xmm0 LONG $0x247c8948; BYTE $0x40 // mov qword [rsp + 64], rdi WORD $0x8949; BYTE $0xfd // mov r13, rdi LONG $0x20cd8349 // or r13, 32 @@ -11865,15 +12519,15 @@ LBB2_186: LONG $0x80c88149; WORD $0x0001; BYTE $0x00 // or r8, 384 LONG $0x2444894c; BYTE $0x60 // mov qword [rsp + 96], r8 LONG $0x01a00d48; WORD $0x0000 // or rax, 416 - LONG $0x24448948; BYTE $0x30 // mov qword [rsp + 48], rax + LONG $0x24448948; BYTE $0x10 // mov qword [rsp + 16], rax WORD $0x8948; BYTE $0xf8 // mov rax, rdi LONG $0x01c00d48; WORD $0x0000 // or rax, 448 - LONG $0x24448948; BYTE $0x10 // mov qword [rsp + 16], rax + LONG $0x24448948; BYTE $0x30 // mov qword [rsp + 48], rax WORD $0x8948; BYTE $0xf8 // mov rax, rdi LONG $0x01e00d48; WORD $0x0000 // or rax, 480 QUAD $0x012a3c203a0f4666 // pinsrb xmm15, byte [rdx + r13], 1 QUAD $0x02323c203a0f4466 // pinsrb xmm15, byte [rdx + rsi], 2 - LONG $0x244c8948; BYTE $0x20 // mov qword [rsp + 32], rcx + LONG $0x244c8948; BYTE $0x38 // mov qword [rsp + 56], rcx QUAD $0x030a3c203a0f4466 // pinsrb xmm15, byte [rdx + rcx], 3 LONG $0x2474894c; BYTE $0x70 // mov qword [rsp + 112], r14 QUAD $0x04323c203a0f4666 // pinsrb xmm15, byte [rdx + r14], 4 @@ -11890,9 +12544,9 @@ LBB2_186: QUAD $0x0a2a3c203a0f4666 // pinsrb xmm15, byte [rdx + r13], 10 QUAD $0x0b1a3c203a0f4466 // pinsrb xmm15, byte [rdx + rbx], 11 QUAD $0x0c023c203a0f4666 // pinsrb xmm15, byte [rdx + r8], 12 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] - QUAD $0x0d323c203a0f4466 // pinsrb xmm15, byte [rdx + rsi], 13 LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] + QUAD $0x0d323c203a0f4466 // pinsrb xmm15, byte [rdx + rsi], 13 + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] QUAD $0x0e323c203a0f4466 // pinsrb xmm15, byte [rdx + rsi], 14 QUAD $0x0f023c203a0f4466 // pinsrb xmm15, byte [rdx + rax], 15 LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] @@ -11912,9 +12566,9 @@ LBB2_186: WORD $0x894d; BYTE $0xef // mov r15, r13 QUAD $0x0b011a6c203a0f66 // pinsrb xmm5, byte [rdx + rbx + 1], 11 QUAD $0x01026c203a0f4266; BYTE $0x0c // pinsrb xmm5, byte [rdx + r8 + 1], 12 - LONG $0x244c8b4c; BYTE $0x30 // mov r9, qword [rsp + 48] + LONG $0x244c8b4c; BYTE $0x10 // mov r9, qword [rsp + 16] QUAD $0x010a6c203a0f4266; BYTE $0x0d // pinsrb xmm5, byte [rdx + r9 + 1], 13 - LONG $0x245c8b4c; BYTE $0x10 // mov r11, qword [rsp + 16] + LONG $0x245c8b4c; BYTE $0x30 // mov r11, qword [rsp + 48] QUAD $0x011a6c203a0f4266; BYTE $0x0e // pinsrb xmm5, byte [rdx + r11 + 1], 14 QUAD $0x0f01026c203a0f66 // pinsrb xmm5, byte [rdx + rax + 1], 15 QUAD $0x00b0248c6f0f4466; WORD $0x0000 // movdqa xmm9, oword [rsp + 176] @@ -11931,7 +12585,7 @@ LBB2_186: QUAD $0x020274203a0f4266; BYTE $0x01 // pinsrb xmm6, byte [rdx + r8 + 2], 1 LONG $0x24548b4c; BYTE $0x28 // mov r10, qword [rsp + 40] QUAD $0x021274203a0f4266; BYTE $0x02 // pinsrb xmm6, byte [rdx + r10 + 2], 2 - LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] QUAD $0x03020a74203a0f66 // pinsrb xmm6, byte [rdx + rcx + 2], 3 LONG $0x245c8b48; BYTE $0x70 // mov rbx, qword [rsp + 112] QUAD $0x04021a74203a0f66 // pinsrb xmm6, byte [rdx + rbx + 2], 4 @@ -11978,13 +12632,13 @@ LBB2_186: QUAD $0x0a031a54203a0f66 // pinsrb xmm2, byte [rdx + rbx + 3], 10 QUAD $0x033254203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rdx + r14 + 3], 11 QUAD $0x033a54203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rdx + r15 + 3], 12 - LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x24648b4c; BYTE $0x10 // mov r12, qword [rsp + 16] QUAD $0x032254203a0f4266; BYTE $0x0d // pinsrb xmm2, byte [rdx + r12 + 3], 13 QUAD $0x031a54203a0f4266; BYTE $0x0e // pinsrb xmm2, byte [rdx + r11 + 3], 14 QUAD $0x030a54203a0f4266; BYTE $0x0f // pinsrb xmm2, byte [rdx + r9 + 3], 15 QUAD $0x0104324c203a0f66 // pinsrb xmm1, byte [rdx + rsi + 4], 1 QUAD $0x0204024c203a0f66 // pinsrb xmm1, byte [rdx + rax + 4], 2 - LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] QUAD $0x0304324c203a0f66 // pinsrb xmm1, byte [rdx + rsi + 4], 3 LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] QUAD $0x0404324c203a0f66 // pinsrb xmm1, byte [rdx + rsi + 4], 4 @@ -12000,7 +12654,7 @@ LBB2_186: QUAD $0x041a4c203a0f4266; BYTE $0x0e // pinsrb xmm1, byte [rdx + r11 + 4], 14 QUAD $0x040a4c203a0f4266; BYTE $0x0f // pinsrb xmm1, byte [rdx + r9 + 4], 15 WORD $0x894c; BYTE $0xc9 // mov rcx, r9 - LONG $0x244c894c; BYTE $0x38 // mov qword [rsp + 56], r9 + LONG $0x244c894c; BYTE $0x20 // mov qword [rsp + 32], r9 LONG $0xf7eb0f66 // por xmm6, xmm7 LONG $0x244c8b4c; BYTE $0x40 // mov r9, qword [rsp + 64] LONG $0x74b60f42; WORD $0x110a // movzx esi, byte [rdx + r9 + 17] @@ -12017,7 +12671,7 @@ LBB2_186: LONG $0x246c8b4c; BYTE $0x18 // mov r13, qword [rsp + 24] QUAD $0x052a44203a0f4666; BYTE $0x01 // pinsrb xmm8, byte [rdx + r13 + 5], 1 QUAD $0x050244203a0f4466; BYTE $0x02 // pinsrb xmm8, byte [rdx + rax + 5], 2 - LONG $0x245c8b4c; BYTE $0x20 // mov r11, qword [rsp + 32] + LONG $0x245c8b4c; BYTE $0x38 // mov r11, qword [rsp + 56] QUAD $0x051a44203a0f4666; BYTE $0x03 // pinsrb xmm8, byte [rdx + r11 + 5], 3 LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] QUAD $0x050244203a0f4466; BYTE $0x04 // pinsrb xmm8, byte [rdx + rax + 5], 4 @@ -12037,9 +12691,9 @@ LBB2_186: QUAD $0x053a44203a0f4666; BYTE $0x0b // pinsrb xmm8, byte [rdx + r15 + 5], 11 LONG $0x24648b4c; BYTE $0x60 // mov r12, qword [rsp + 96] QUAD $0x052244203a0f4666; BYTE $0x0c // pinsrb xmm8, byte [rdx + r12 + 5], 12 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] - QUAD $0x053244203a0f4466; BYTE $0x0d // pinsrb xmm8, byte [rdx + rsi + 5], 13 LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] + QUAD $0x053244203a0f4466; BYTE $0x0d // pinsrb xmm8, byte [rdx + rsi + 5], 13 + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] QUAD $0x053244203a0f4466; BYTE $0x0e // pinsrb xmm8, byte [rdx + rsi + 5], 14 QUAD $0x050a44203a0f4466; BYTE $0x0f // pinsrb xmm8, byte [rdx + rcx + 5], 15 LONG $0x740f4566; BYTE $0xc1 // pcmpeqb xmm8, xmm9 @@ -12071,11 +12725,11 @@ LBB2_186: QUAD $0x063a5c203a0f4266; BYTE $0x0b // pinsrb xmm3, byte [rdx + r15 + 6], 11 WORD $0x894d; BYTE $0xe7 // mov r15, r12 QUAD $0x06225c203a0f4266; BYTE $0x0c // pinsrb xmm3, byte [rdx + r12 + 6], 12 - LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x24648b4c; BYTE $0x10 // mov r12, qword [rsp + 16] QUAD $0x06225c203a0f4266; BYTE $0x0d // pinsrb xmm3, byte [rdx + r12 + 6], 13 - LONG $0x24748b4c; BYTE $0x10 // mov r14, qword [rsp + 16] + LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] QUAD $0x06325c203a0f4266; BYTE $0x0e // pinsrb xmm3, byte [rdx + r14 + 6], 14 - LONG $0x24448b4c; BYTE $0x38 // mov r8, qword [rsp + 56] + LONG $0x24448b4c; BYTE $0x20 // mov r8, qword [rsp + 32] QUAD $0x06025c203a0f4266; BYTE $0x0f // pinsrb xmm3, byte [rdx + r8 + 6], 15 QUAD $0x0000d024946f0f66; BYTE $0x00 // movdqa xmm2, oword [rsp + 208] QUAD $0x072a54203a0f4266; BYTE $0x01 // pinsrb xmm2, byte [rdx + r13 + 7], 1 @@ -12131,9 +12785,9 @@ LBB2_186: LONG $0x245c8b48; BYTE $0x60 // mov rbx, qword [rsp + 96] QUAD $0x091a54203a0f4466; BYTE $0x0c // pinsrb xmm10, byte [rdx + rbx + 9], 12 QUAD $0x093a54203a0f4666; BYTE $0x0d // pinsrb xmm10, byte [rdx + r15 + 9], 13 - LONG $0x247c8b48; BYTE $0x10 // mov rdi, qword [rsp + 16] + LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] QUAD $0x093a54203a0f4466; BYTE $0x0e // pinsrb xmm10, byte [rdx + rdi + 9], 14 - LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] QUAD $0x093254203a0f4466; BYTE $0x0f // pinsrb xmm10, byte [rdx + rsi + 9], 15 LONG $0xeb0f4166; BYTE $0xc8 // por xmm1, xmm8 QUAD $0x0000d0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 208], xmm1 @@ -12144,10 +12798,10 @@ LBB2_186: LONG $0xf80f4166; BYTE $0xca // psubb xmm1, xmm10 LONG $0x0274b60f; BYTE $0x16 // movzx esi, byte [rdx + rax + 22] LONG $0xde6e0f66 // movd xmm3, esi - QUAD $0x00010024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 256] + QUAD $0x00011024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 272] QUAD $0x01080a64203a0f66 // pinsrb xmm4, byte [rdx + rcx + 8], 1 QUAD $0x081a64203a0f4266; BYTE $0x02 // pinsrb xmm4, byte [rdx + r11 + 8], 2 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] QUAD $0x03080264203a0f66 // pinsrb xmm4, byte [rdx + rax + 8], 3 QUAD $0x080a64203a0f4266; BYTE $0x04 // pinsrb xmm4, byte [rdx + r9 + 8], 4 QUAD $0x082a64203a0f4266; BYTE $0x05 // pinsrb xmm4, byte [rdx + r13 + 8], 5 @@ -12160,11 +12814,11 @@ LBB2_186: QUAD $0x082264203a0f4266; BYTE $0x0a // pinsrb xmm4, byte [rdx + r12 + 8], 10 QUAD $0x081264203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rdx + r10 + 8], 11 QUAD $0x0c081a64203a0f66 // pinsrb xmm4, byte [rdx + rbx + 8], 12 - LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] + LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] QUAD $0x0d081a64203a0f66 // pinsrb xmm4, byte [rdx + rbx + 8], 13 QUAD $0x0e083a64203a0f66 // pinsrb xmm4, byte [rdx + rdi + 8], 14 WORD $0x8949; BYTE $0xfa // mov r10, rdi - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] + LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] QUAD $0x0f080a64203a0f66 // pinsrb xmm4, byte [rdx + rcx + 8], 15 LONG $0x740f4166; BYTE $0xe1 // pcmpeqb xmm4, xmm9 LONG $0xdb0f4166; BYTE $0xe0 // pand xmm4, xmm8 @@ -12204,7 +12858,7 @@ LBB2_186: QUAD $0x0b3a5c203a0f4466; BYTE $0x01 // pinsrb xmm11, byte [rdx + rdi + 11], 1 LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] QUAD $0x0b0a5c203a0f4466; BYTE $0x02 // pinsrb xmm11, byte [rdx + rcx + 11], 2 - LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] QUAD $0x0b0a5c203a0f4466; BYTE $0x03 // pinsrb xmm11, byte [rdx + rcx + 11], 3 QUAD $0x0b025c203a0f4466; BYTE $0x04 // pinsrb xmm11, byte [rdx + rax + 11], 4 WORD $0x894c; BYTE $0xd9 // mov rcx, r11 @@ -12221,15 +12875,15 @@ LBB2_186: QUAD $0x0b3a5c203a0f4666; BYTE $0x0c // pinsrb xmm11, byte [rdx + r15 + 11], 12 WORD $0x8949; BYTE $0xda // mov r10, rbx QUAD $0x0b1a5c203a0f4466; BYTE $0x0d // pinsrb xmm11, byte [rdx + rbx + 11], 13 - LONG $0x24648b4c; BYTE $0x10 // mov r12, qword [rsp + 16] + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] QUAD $0x0b225c203a0f4666; BYTE $0x0e // pinsrb xmm11, byte [rdx + r12 + 11], 14 - LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] QUAD $0x0b325c203a0f4466; BYTE $0x0f // pinsrb xmm11, byte [rdx + rsi + 11], 15 LONG $0x246c8b4c; BYTE $0x18 // mov r13, qword [rsp + 24] QUAD $0x0c2a6c203a0f4666; BYTE $0x01 // pinsrb xmm13, byte [rdx + r13 + 12], 1 LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] QUAD $0x0c1a6c203a0f4466; BYTE $0x02 // pinsrb xmm13, byte [rdx + rbx + 12], 2 - LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] + LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] QUAD $0x0c1a6c203a0f4466; BYTE $0x03 // pinsrb xmm13, byte [rdx + rbx + 12], 3 QUAD $0x0c026c203a0f4466; BYTE $0x04 // pinsrb xmm13, byte [rdx + rax + 12], 4 QUAD $0x0c0a6c203a0f4466; BYTE $0x05 // pinsrb xmm13, byte [rdx + rcx + 12], 5 @@ -12249,7 +12903,7 @@ LBB2_186: QUAD $0x0d1264203a0f4666; BYTE $0x01 // pinsrb xmm12, byte [rdx + r10 + 13], 1 LONG $0x24748b48; BYTE $0x28 // mov rsi, qword [rsp + 40] QUAD $0x0d3264203a0f4466; BYTE $0x02 // pinsrb xmm12, byte [rdx + rsi + 13], 2 - LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] QUAD $0x0d3264203a0f4466; BYTE $0x03 // pinsrb xmm12, byte [rdx + rsi + 13], 3 QUAD $0x0d0264203a0f4466; BYTE $0x04 // pinsrb xmm12, byte [rdx + rax + 13], 4 QUAD $0x0d0a64203a0f4466; BYTE $0x05 // pinsrb xmm12, byte [rdx + rcx + 13], 5 @@ -12262,7 +12916,7 @@ LBB2_186: QUAD $0x0d3a64203a0f4666; BYTE $0x0c // pinsrb xmm12, byte [rdx + r15 + 13], 12 QUAD $0x0d2a64203a0f4666; BYTE $0x0d // pinsrb xmm12, byte [rdx + r13 + 13], 13 QUAD $0x0d2264203a0f4666; BYTE $0x0e // pinsrb xmm12, byte [rdx + r12 + 13], 14 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0d0264203a0f4466; BYTE $0x0f // pinsrb xmm12, byte [rdx + rax + 13], 15 LONG $0x740f4566; BYTE $0xd9 // pcmpeqb xmm11, xmm9 QUAD $0x0000c09ddb0f4466; BYTE $0x00 // pand xmm11, oword 192[rbp] /* [rip + .LCPI2_12] */ @@ -12277,12 +12931,12 @@ LBB2_186: LONG $0xeb0f4566; BYTE $0xe5 // por xmm12, xmm13 LONG $0x0274b60f; BYTE $0x1a // movzx esi, byte [rdx + rax + 26] LONG $0x6e0f4466; BYTE $0xde // movd xmm11, esi - QUAD $0x00011024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 272] + QUAD $0x0000f024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 240] QUAD $0x0e1264203a0f4266; BYTE $0x01 // pinsrb xmm4, byte [rdx + r10 + 14], 1 WORD $0x894c; BYTE $0xd6 // mov rsi, r10 LONG $0x24648b4c; BYTE $0x28 // mov r12, qword [rsp + 40] QUAD $0x0e2264203a0f4266; BYTE $0x02 // pinsrb xmm4, byte [rdx + r12 + 14], 2 - LONG $0x24548b4c; BYTE $0x20 // mov r10, qword [rsp + 32] + LONG $0x24548b4c; BYTE $0x38 // mov r10, qword [rsp + 56] QUAD $0x0e1264203a0f4266; BYTE $0x03 // pinsrb xmm4, byte [rdx + r10 + 14], 3 LONG $0x246c8b4c; BYTE $0x70 // mov r13, qword [rsp + 112] QUAD $0x0e2a64203a0f4266; BYTE $0x04 // pinsrb xmm4, byte [rdx + r13 + 14], 4 @@ -12294,11 +12948,11 @@ LBB2_186: QUAD $0x0a0e1a64203a0f66 // pinsrb xmm4, byte [rdx + rbx + 14], 10 QUAD $0x0e3264203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rdx + r14 + 14], 11 QUAD $0x0e3a64203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rdx + r15 + 14], 12 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] - QUAD $0x0d0e0264203a0f66 // pinsrb xmm4, byte [rdx + rax + 14], 13 LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] + QUAD $0x0d0e0264203a0f66 // pinsrb xmm4, byte [rdx + rax + 14], 13 + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x0e0e0264203a0f66 // pinsrb xmm4, byte [rdx + rax + 14], 14 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0f0e0264203a0f66 // pinsrb xmm4, byte [rdx + rax + 14], 15 QUAD $0x0f3274203a0f4466; BYTE $0x01 // pinsrb xmm14, byte [rdx + rsi + 15], 1 QUAD $0x0f2274203a0f4666; BYTE $0x02 // pinsrb xmm14, byte [rdx + r12 + 15], 2 @@ -12312,11 +12966,11 @@ LBB2_186: QUAD $0x0f1a74203a0f4466; BYTE $0x0a // pinsrb xmm14, byte [rdx + rbx + 15], 10 QUAD $0x0f3274203a0f4666; BYTE $0x0b // pinsrb xmm14, byte [rdx + r14 + 15], 11 QUAD $0x0f3a74203a0f4666; BYTE $0x0c // pinsrb xmm14, byte [rdx + r15 + 15], 12 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] QUAD $0x0f3274203a0f4466; BYTE $0x0d // pinsrb xmm14, byte [rdx + rsi + 15], 13 - LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x0f0274203a0f4466; BYTE $0x0e // pinsrb xmm14, byte [rdx + rax + 15], 14 - LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] QUAD $0x0f3274203a0f4466; BYTE $0x0f // pinsrb xmm14, byte [rdx + rsi + 15], 15 LONG $0x24748b48; BYTE $0x18 // mov rsi, qword [rsp + 24] QUAD $0x10327c203a0f4466; BYTE $0x01 // pinsrb xmm15, byte [rdx + rsi + 16], 1 @@ -12331,7 +12985,7 @@ LBB2_186: QUAD $0x101a7c203a0f4466; BYTE $0x0a // pinsrb xmm15, byte [rdx + rbx + 16], 10 QUAD $0x10327c203a0f4666; BYTE $0x0b // pinsrb xmm15, byte [rdx + r14 + 16], 11 QUAD $0x103a7c203a0f4666; BYTE $0x0c // pinsrb xmm15, byte [rdx + r15 + 16], 12 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] QUAD $0x10327c203a0f4466; BYTE $0x0d // pinsrb xmm15, byte [rdx + rsi + 16], 13 QUAD $0x10027c203a0f4466; BYTE $0x0e // pinsrb xmm15, byte [rdx + rax + 16], 14 LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] @@ -12348,9 +13002,9 @@ LBB2_186: QUAD $0x0a111a44203a0f66 // pinsrb xmm0, byte [rdx + rbx + 17], 10 QUAD $0x113244203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rdx + r14 + 17], 11 QUAD $0x113a44203a0f4266; BYTE $0x0c // pinsrb xmm0, byte [rdx + r15 + 17], 12 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] - QUAD $0x0d113244203a0f66 // pinsrb xmm0, byte [rdx + rsi + 17], 13 LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] + QUAD $0x0d113244203a0f66 // pinsrb xmm0, byte [rdx + rsi + 17], 13 + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] QUAD $0x0e113244203a0f66 // pinsrb xmm0, byte [rdx + rsi + 17], 14 QUAD $0x00a024a4eb0f4466; WORD $0x0000 // por xmm12, oword [rsp + 160] LONG $0x24648b4c; BYTE $0x40 // mov r12, qword [rsp + 64] @@ -12365,7 +13019,7 @@ LBB2_186: LONG $0xeb0f4466; BYTE $0xf4 // por xmm14, xmm4 LONG $0x74b60f42; WORD $0x1c22 // movzx esi, byte [rdx + r12 + 28] LONG $0xe66e0f66 // movd xmm4, esi - LONG $0x24448b4c; BYTE $0x38 // mov r8, qword [rsp + 56] + LONG $0x24448b4c; BYTE $0x20 // mov r8, qword [rsp + 32] QUAD $0x110244203a0f4266; BYTE $0x0f // pinsrb xmm0, byte [rdx + r8 + 17], 15 LONG $0xeb0f4566; BYTE $0xf4 // por xmm14, xmm12 LONG $0x740f4166; BYTE $0xc5 // pcmpeqb xmm0, xmm13 @@ -12393,9 +13047,9 @@ LBB2_186: QUAD $0x0a121a6c203a0f66 // pinsrb xmm5, byte [rdx + rbx + 18], 10 QUAD $0x12326c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rdx + r14 + 18], 11 QUAD $0x123a6c203a0f4266; BYTE $0x0c // pinsrb xmm5, byte [rdx + r15 + 18], 12 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] - QUAD $0x0d12326c203a0f66 // pinsrb xmm5, byte [rdx + rsi + 18], 13 LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] + QUAD $0x0d12326c203a0f66 // pinsrb xmm5, byte [rdx + rsi + 18], 13 + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] QUAD $0x0e12326c203a0f66 // pinsrb xmm5, byte [rdx + rsi + 18], 14 LONG $0xdb0f4566; BYTE $0xfc // pand xmm15, xmm12 QUAD $0x12026c203a0f4266; BYTE $0x0f // pinsrb xmm5, byte [rdx + r8 + 18], 15 @@ -12445,9 +13099,9 @@ LBB2_186: QUAD $0x0a131a7c203a0f66 // pinsrb xmm7, byte [rdx + rbx + 19], 10 QUAD $0x13327c203a0f4266; BYTE $0x0b // pinsrb xmm7, byte [rdx + r14 + 19], 11 QUAD $0x133a7c203a0f4266; BYTE $0x0c // pinsrb xmm7, byte [rdx + r15 + 19], 12 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] QUAD $0x0d13327c203a0f66 // pinsrb xmm7, byte [rdx + rsi + 19], 13 - LONG $0x24648b4c; BYTE $0x10 // mov r12, qword [rsp + 16] + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] QUAD $0x13227c203a0f4266; BYTE $0x0e // pinsrb xmm7, byte [rdx + r12 + 19], 14 QUAD $0x13027c203a0f4266; BYTE $0x0f // pinsrb xmm7, byte [rdx + r8 + 19], 15 QUAD $0x141274203a0f4266; BYTE $0x03 // pinsrb xmm6, byte [rdx + r10 + 20], 3 @@ -12676,23 +13330,23 @@ LBB2_186: LONG $0x1c7f0ff3; BYTE $0x88 // movdqu oword [rax + 4*rcx], xmm3 LONG $0x10c18348 // add rcx, 16 WORD $0x8948; BYTE $0xc8 // mov rax, rcx - QUAD $0x000000e8248c3b48 // cmp rcx, qword [rsp + 232] - JNE LBB2_186 - QUAD $0x000000f024bc8b4c // mov r15, qword [rsp + 240] - QUAD $0x000000e824bc3b4c // cmp r15, qword [rsp + 232] + QUAD $0x000000e0248c3b48 // cmp rcx, qword [rsp + 224] + JNE LBB2_183 + QUAD $0x000000e824bc8b4c // mov r15, qword [rsp + 232] + QUAD $0x000000e024bc3b4c // cmp r15, qword [rsp + 224] LONG $0x24748a44; BYTE $0x08 // mov r14b, byte [rsp + 8] - QUAD $0x000000f824b48b48 // mov rsi, qword [rsp + 248] + QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] JNE LBB2_43 JMP LBB2_131 -LBB2_188: +LBB2_185: LONG $0xf0e78349 // and r15, -16 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xd0 // add rax, rdx - QUAD $0x000000f824848948 // mov qword [rsp + 248], rax - QUAD $0x000000e824bc894c // mov qword [rsp + 232], r15 + QUAD $0x0000010824848948 // mov qword [rsp + 264], rax + QUAD $0x000000e024bc894c // mov qword [rsp + 224], r15 LONG $0x24048b48 // mov rax, qword [rsp] LONG $0xb8048d4a // lea rax, [rax + 4*r15] LONG $0x24448948; BYTE $0x68 // mov qword [rsp + 104], rax @@ -12703,7 +13357,7 @@ LBB2_188: QUAD $0x0000b0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 176], xmm1 WORD $0xc031 // xor eax, eax -LBB2_189: +LBB2_186: WORD $0x8949; BYTE $0xc7 // mov r15, rax QUAD $0x0000009824848948 // mov qword [rsp + 152], rax LONG $0x05e7c149 // shl r15, 5 @@ -12717,7 +13371,7 @@ LBB2_189: WORD $0x894d; BYTE $0xfc // mov r12, r15 WORD $0x894d; BYTE $0xfa // mov r10, r15 WORD $0x894d; BYTE $0xfd // mov r13, r15 - LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 + LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 LONG $0x34b60f42; BYTE $0x3a // movzx esi, byte [rdx + r15] LONG $0x6e0f4466; BYTE $0xfe // movd xmm15, esi LONG $0x74b60f42; WORD $0x013a // movzx esi, byte [rdx + r15 + 1] @@ -12737,7 +13391,7 @@ LBB2_189: QUAD $0x0000c024847f0f66; BYTE $0x00 // movdqa oword [rsp + 192], xmm0 LONG $0x74b60f42; WORD $0x083a // movzx esi, byte [rdx + r15 + 8] LONG $0xc66e0f66 // movd xmm0, esi - QUAD $0x00011024847f0f66; BYTE $0x00 // movdqa oword [rsp + 272], xmm0 + QUAD $0x0000f024847f0f66; BYTE $0x00 // movdqa oword [rsp + 240], xmm0 LONG $0x74b60f42; WORD $0x093a // movzx esi, byte [rdx + r15 + 9] LONG $0x6e0f4466; BYTE $0xd6 // movd xmm10, esi LONG $0x74b60f42; WORD $0x0a3a // movzx esi, byte [rdx + r15 + 10] @@ -12751,11 +13405,11 @@ LBB2_189: LONG $0x6e0f4466; BYTE $0xe6 // movd xmm12, esi LONG $0x74b60f42; WORD $0x0e3a // movzx esi, byte [rdx + r15 + 14] LONG $0xc66e0f66 // movd xmm0, esi - QUAD $0x00010024847f0f66; BYTE $0x00 // movdqa oword [rsp + 256], xmm0 - LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + QUAD $0x00011024847f0f66; BYTE $0x00 // movdqa oword [rsp + 272], xmm0 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 WORD $0x894d; BYTE $0xfe // mov r14, r15 LONG $0x20ce8349 // or r14, 32 - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2474894c; BYTE $0x10 // mov qword [rsp + 16], r14 LONG $0x40cb8348 // or rbx, 64 LONG $0x245c8948; BYTE $0x48 // mov qword [rsp + 72], rbx LONG $0x60c88348 // or rax, 96 @@ -12772,11 +13426,11 @@ LBB2_189: WORD $0x894d; BYTE $0xfa // mov r10, r15 LONG $0x60ca8149; WORD $0x0001; BYTE $0x00 // or r10, 352 LONG $0x2454894c; BYTE $0x50 // mov qword [rsp + 80], r10 - LONG $0x24648b4c; BYTE $0x20 // mov r12, qword [rsp + 32] + LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] LONG $0x80cc8149; WORD $0x0001; BYTE $0x00 // or r12, 384 WORD $0x894c; BYTE $0xfe // mov rsi, r15 LONG $0xa0ce8148; WORD $0x0001; BYTE $0x00 // or rsi, 416 - LONG $0x24748948; BYTE $0x10 // mov qword [rsp + 16], rsi + LONG $0x24748948; BYTE $0x30 // mov qword [rsp + 48], rsi LONG $0xc0cd8149; WORD $0x0001; BYTE $0x00 // or r13, 448 LONG $0x246c894c; BYTE $0x18 // mov qword [rsp + 24], r13 WORD $0x894c; BYTE $0xfe // mov rsi, r15 @@ -12799,13 +13453,13 @@ LBB2_189: LONG $0x247c8b4c; BYTE $0x58 // mov r15, qword [rsp + 88] QUAD $0x0a3a3c203a0f4666 // pinsrb xmm15, byte [rdx + r15], 10 QUAD $0x0b123c203a0f4666 // pinsrb xmm15, byte [rdx + r10], 11 - LONG $0x2464894c; BYTE $0x20 // mov qword [rsp + 32], r12 + LONG $0x2464894c; BYTE $0x38 // mov qword [rsp + 56], r12 QUAD $0x0c223c203a0f4666 // pinsrb xmm15, byte [rdx + r12], 12 - LONG $0x24548b4c; BYTE $0x10 // mov r10, qword [rsp + 16] + LONG $0x24548b4c; BYTE $0x30 // mov r10, qword [rsp + 48] QUAD $0x0d123c203a0f4666 // pinsrb xmm15, byte [rdx + r10], 13 QUAD $0x0e2a3c203a0f4666 // pinsrb xmm15, byte [rdx + r13], 14 QUAD $0x0f323c203a0f4466 // pinsrb xmm15, byte [rdx + rsi], 15 - LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] + LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] QUAD $0x01011a6c203a0f66 // pinsrb xmm5, byte [rdx + rbx + 1], 1 LONG $0x245c8b48; BYTE $0x48 // mov rbx, qword [rsp + 72] QUAD $0x02011a6c203a0f66 // pinsrb xmm5, byte [rdx + rbx + 1], 2 @@ -12830,11 +13484,11 @@ LBB2_189: QUAD $0x000000a0a56f0f66 // movdqa xmm4, oword 160[rbp] /* [rip + .LCPI2_10] */ LONG $0xfcdb0f66 // pand xmm7, xmm4 LONG $0xfdf80f66 // psubb xmm7, xmm5 - LONG $0x246c8b4c; BYTE $0x38 // mov r13, qword [rsp + 56] + LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] LONG $0x74b60f42; WORD $0x0f2a // movzx esi, byte [rdx + r13 + 15] LONG $0x6e0f4466; BYTE $0xf6 // movd xmm14, esi LONG $0x740f4566; BYTE $0xf9 // pcmpeqb xmm15, xmm9 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] + LONG $0x244c8b48; BYTE $0x10 // mov rcx, qword [rsp + 16] QUAD $0x01020a74203a0f66 // pinsrb xmm6, byte [rdx + rcx + 2], 1 QUAD $0x02021a74203a0f66 // pinsrb xmm6, byte [rdx + rbx + 2], 2 LONG $0x245c8b4c; BYTE $0x70 // mov r11, qword [rsp + 112] @@ -12853,9 +13507,9 @@ LBB2_189: QUAD $0x0a023274203a0f66 // pinsrb xmm6, byte [rdx + rsi + 2], 10 LONG $0x24548b4c; BYTE $0x50 // mov r10, qword [rsp + 80] QUAD $0x021274203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rdx + r10 + 2], 11 - LONG $0x244c8b4c; BYTE $0x20 // mov r9, qword [rsp + 32] + LONG $0x244c8b4c; BYTE $0x38 // mov r9, qword [rsp + 56] QUAD $0x020a74203a0f4266; BYTE $0x0c // pinsrb xmm6, byte [rdx + r9 + 2], 12 - LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] QUAD $0x0d023274203a0f66 // pinsrb xmm6, byte [rdx + rsi + 2], 13 LONG $0x24748b48; BYTE $0x18 // mov rsi, qword [rsp + 24] QUAD $0x0e023274203a0f66 // pinsrb xmm6, byte [rdx + rsi + 2], 14 @@ -12885,13 +13539,13 @@ LBB2_189: QUAD $0x033a54203a0f4266; BYTE $0x0a // pinsrb xmm2, byte [rdx + r15 + 3], 10 QUAD $0x031254203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rdx + r10 + 3], 11 QUAD $0x030a54203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rdx + r9 + 3], 12 - LONG $0x24648b4c; BYTE $0x10 // mov r12, qword [rsp + 16] + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] QUAD $0x032254203a0f4266; BYTE $0x0d // pinsrb xmm2, byte [rdx + r12 + 3], 13 LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] QUAD $0x0e030254203a0f66 // pinsrb xmm2, byte [rdx + rax + 3], 14 LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0f030254203a0f66 // pinsrb xmm2, byte [rdx + rax + 3], 15 - LONG $0x246c8b4c; BYTE $0x30 // mov r13, qword [rsp + 48] + LONG $0x246c8b4c; BYTE $0x10 // mov r13, qword [rsp + 16] QUAD $0x042a4c203a0f4266; BYTE $0x01 // pinsrb xmm1, byte [rdx + r13 + 4], 1 LONG $0x245c8b48; BYTE $0x48 // mov rbx, qword [rsp + 72] QUAD $0x02041a4c203a0f66 // pinsrb xmm1, byte [rdx + rbx + 4], 2 @@ -12914,7 +13568,7 @@ LBB2_189: QUAD $0x0f04024c203a0f66 // pinsrb xmm1, byte [rdx + rax + 4], 15 WORD $0x8949; BYTE $0xc2 // mov r10, rax LONG $0xf7eb0f66 // por xmm6, xmm7 - LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] + LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] LONG $0x3a74b60f; BYTE $0x11 // movzx esi, byte [rdx + rdi + 17] LONG $0xc66e0f66 // movd xmm0, esi LONG $0x740f4166; BYTE $0xd1 // pcmpeqb xmm2, xmm9 @@ -12926,7 +13580,7 @@ LBB2_189: LONG $0xcaeb0f66 // por xmm1, xmm2 LONG $0x3a74b60f; BYTE $0x12 // movzx esi, byte [rdx + rdi + 18] LONG $0xee6e0f66 // movd xmm5, esi - LONG $0x246c8b4c; BYTE $0x30 // mov r13, qword [rsp + 48] + LONG $0x246c8b4c; BYTE $0x10 // mov r13, qword [rsp + 16] QUAD $0x052a44203a0f4666; BYTE $0x01 // pinsrb xmm8, byte [rdx + r13 + 5], 1 LONG $0x245c8b4c; BYTE $0x48 // mov r11, qword [rsp + 72] QUAD $0x051a44203a0f4666; BYTE $0x02 // pinsrb xmm8, byte [rdx + r11 + 5], 2 @@ -12946,9 +13600,9 @@ LBB2_189: LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] QUAD $0x053244203a0f4466; BYTE $0x0a // pinsrb xmm8, byte [rdx + rsi + 5], 10 QUAD $0x053a44203a0f4666; BYTE $0x0b // pinsrb xmm8, byte [rdx + r15 + 5], 11 - LONG $0x24648b4c; BYTE $0x20 // mov r12, qword [rsp + 32] + LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] QUAD $0x052244203a0f4666; BYTE $0x0c // pinsrb xmm8, byte [rdx + r12 + 5], 12 - LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] QUAD $0x053244203a0f4466; BYTE $0x0d // pinsrb xmm8, byte [rdx + rsi + 5], 13 QUAD $0x051a44203a0f4466; BYTE $0x0e // pinsrb xmm8, byte [rdx + rbx + 5], 14 QUAD $0x051244203a0f4666; BYTE $0x0f // pinsrb xmm8, byte [rdx + r10 + 5], 15 @@ -12981,7 +13635,7 @@ LBB2_189: QUAD $0x0b06025c203a0f66 // pinsrb xmm3, byte [rdx + rax + 6], 11 WORD $0x894c; BYTE $0xe3 // mov rbx, r12 QUAD $0x06225c203a0f4266; BYTE $0x0c // pinsrb xmm3, byte [rdx + r12 + 6], 12 - LONG $0x24648b4c; BYTE $0x10 // mov r12, qword [rsp + 16] + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] QUAD $0x06225c203a0f4266; BYTE $0x0d // pinsrb xmm3, byte [rdx + r12 + 6], 13 LONG $0x244c8b48; BYTE $0x18 // mov rcx, qword [rsp + 24] QUAD $0x0e060a5c203a0f66 // pinsrb xmm3, byte [rdx + rcx + 6], 14 @@ -13019,10 +13673,10 @@ LBB2_189: LONG $0xd1db0f66 // pand xmm2, xmm1 LONG $0xd3eb0f66 // por xmm2, xmm3 LONG $0xca6f0f66 // movdqa xmm1, xmm2 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] LONG $0x0274b60f; BYTE $0x15 // movzx esi, byte [rdx + rax + 21] LONG $0xd66e0f66 // movd xmm2, esi - LONG $0x244c8b4c; BYTE $0x30 // mov r9, qword [rsp + 48] + LONG $0x244c8b4c; BYTE $0x10 // mov r9, qword [rsp + 16] QUAD $0x090a54203a0f4666; BYTE $0x01 // pinsrb xmm10, byte [rdx + r9 + 9], 1 QUAD $0x092a54203a0f4666; BYTE $0x02 // pinsrb xmm10, byte [rdx + r13 + 9], 2 LONG $0x24448b4c; BYTE $0x70 // mov r8, qword [rsp + 112] @@ -13039,7 +13693,7 @@ LBB2_189: QUAD $0x093a54203a0f4666; BYTE $0x0a // pinsrb xmm10, byte [rdx + r15 + 9], 10 LONG $0x24748b48; BYTE $0x50 // mov rsi, qword [rsp + 80] QUAD $0x093254203a0f4466; BYTE $0x0b // pinsrb xmm10, byte [rdx + rsi + 9], 11 - LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] QUAD $0x093254203a0f4466; BYTE $0x0c // pinsrb xmm10, byte [rdx + rsi + 9], 12 QUAD $0x091a54203a0f4666; BYTE $0x0d // pinsrb xmm10, byte [rdx + r11 + 9], 13 QUAD $0x092254203a0f4666; BYTE $0x0e // pinsrb xmm10, byte [rdx + r12 + 9], 14 @@ -13053,7 +13707,7 @@ LBB2_189: LONG $0xf80f4166; BYTE $0xca // psubb xmm1, xmm10 LONG $0x0274b60f; BYTE $0x16 // movzx esi, byte [rdx + rax + 22] LONG $0xde6e0f66 // movd xmm3, esi - QUAD $0x00011024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 272] + QUAD $0x0000f024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 240] QUAD $0x080a64203a0f4266; BYTE $0x01 // pinsrb xmm4, byte [rdx + r9 + 8], 1 LONG $0x24648b4c; BYTE $0x48 // mov r12, qword [rsp + 72] QUAD $0x082264203a0f4266; BYTE $0x02 // pinsrb xmm4, byte [rdx + r12 + 8], 2 @@ -13069,7 +13723,7 @@ LBB2_189: QUAD $0x083a64203a0f4266; BYTE $0x0a // pinsrb xmm4, byte [rdx + r15 + 8], 10 LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] QUAD $0x0b080264203a0f66 // pinsrb xmm4, byte [rdx + rax + 8], 11 - LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] QUAD $0x0c083264203a0f66 // pinsrb xmm4, byte [rdx + rsi + 8], 12 QUAD $0x081a64203a0f4266; BYTE $0x0d // pinsrb xmm4, byte [rdx + r11 + 8], 13 LONG $0x24548b4c; BYTE $0x18 // mov r10, qword [rsp + 24] @@ -13102,14 +13756,14 @@ LBB2_189: LONG $0x740f4566; BYTE $0xd1 // pcmpeqb xmm10, xmm9 QUAD $0x0000b095db0f4466; BYTE $0x00 // pand xmm10, oword 176[rbp] /* [rip + .LCPI2_11] */ LONG $0xeb0f4466; BYTE $0xd4 // por xmm10, xmm4 - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] + LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] LONG $0x0a74b60f; BYTE $0x17 // movzx esi, byte [rdx + rcx + 23] LONG $0x6e0f4466; BYTE $0xc6 // movd xmm8, esi LONG $0xeb0f4466; BYTE $0xd1 // por xmm10, xmm1 QUAD $0x00a024947f0f4466; WORD $0x0000 // movdqa oword [rsp + 160], xmm10 LONG $0x0a74b60f; BYTE $0x18 // movzx esi, byte [rdx + rcx + 24] LONG $0x6e0f4466; BYTE $0xd6 // movd xmm10, esi - LONG $0x24548b4c; BYTE $0x30 // mov r10, qword [rsp + 48] + LONG $0x24548b4c; BYTE $0x10 // mov r10, qword [rsp + 16] QUAD $0x0b125c203a0f4666; BYTE $0x01 // pinsrb xmm11, byte [rdx + r10 + 11], 1 QUAD $0x0b225c203a0f4666; BYTE $0x02 // pinsrb xmm11, byte [rdx + r12 + 11], 2 WORD $0x894c; BYTE $0xc9 // mov rcx, r9 @@ -13126,9 +13780,9 @@ LBB2_189: QUAD $0x0b1a5c203a0f4466; BYTE $0x0a // pinsrb xmm11, byte [rdx + rbx + 11], 10 WORD $0x8948; BYTE $0xc3 // mov rbx, rax QUAD $0x0b025c203a0f4466; BYTE $0x0b // pinsrb xmm11, byte [rdx + rax + 11], 11 - LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] + LONG $0x246c8b4c; BYTE $0x38 // mov r13, qword [rsp + 56] QUAD $0x0b2a5c203a0f4666; BYTE $0x0c // pinsrb xmm11, byte [rdx + r13 + 11], 12 - LONG $0x244c8b4c; BYTE $0x10 // mov r9, qword [rsp + 16] + LONG $0x244c8b4c; BYTE $0x30 // mov r9, qword [rsp + 48] QUAD $0x0b0a5c203a0f4666; BYTE $0x0d // pinsrb xmm11, byte [rdx + r9 + 11], 13 LONG $0x24748b48; BYTE $0x18 // mov rsi, qword [rsp + 24] QUAD $0x0b325c203a0f4466; BYTE $0x0e // pinsrb xmm11, byte [rdx + rsi + 11], 14 @@ -13176,7 +13830,7 @@ LBB2_189: LONG $0x740f4566; BYTE $0xe9 // pcmpeqb xmm13, xmm9 QUAD $0x0000d0addb0f4466; BYTE $0x00 // pand xmm13, oword 208[rbp] /* [rip + .LCPI2_13] */ LONG $0xeb0f4566; BYTE $0xeb // por xmm13, xmm11 - LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] + LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] LONG $0x1a74b60f; BYTE $0x19 // movzx esi, byte [rdx + rbx + 25] LONG $0xce6e0f66 // movd xmm1, esi LONG $0x740f4566; BYTE $0xe1 // pcmpeqb xmm12, xmm9 @@ -13184,8 +13838,8 @@ LBB2_189: LONG $0xeb0f4566; BYTE $0xe5 // por xmm12, xmm13 LONG $0x1a74b60f; BYTE $0x1a // movzx esi, byte [rdx + rbx + 26] LONG $0x6e0f4466; BYTE $0xde // movd xmm11, esi - QUAD $0x00010024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 256] - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + QUAD $0x00011024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 272] + LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] QUAD $0x010e0264203a0f66 // pinsrb xmm4, byte [rdx + rax + 14], 1 QUAD $0x0e2264203a0f4266; BYTE $0x02 // pinsrb xmm4, byte [rdx + r12 + 14], 2 QUAD $0x0e1264203a0f4266; BYTE $0x03 // pinsrb xmm4, byte [rdx + r10 + 14], 3 @@ -13204,14 +13858,14 @@ LBB2_189: QUAD $0x0e3a64203a0f4266; BYTE $0x0a // pinsrb xmm4, byte [rdx + r15 + 14], 10 LONG $0x24748b4c; BYTE $0x50 // mov r14, qword [rsp + 80] QUAD $0x0e3264203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rdx + r14 + 14], 11 - LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] QUAD $0x0e3a64203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rdx + r15 + 14], 12 QUAD $0x0e2a64203a0f4266; BYTE $0x0d // pinsrb xmm4, byte [rdx + r13 + 14], 13 LONG $0x246c8b4c; BYTE $0x18 // mov r13, qword [rsp + 24] QUAD $0x0e2a64203a0f4266; BYTE $0x0e // pinsrb xmm4, byte [rdx + r13 + 14], 14 LONG $0x24748b48; BYTE $0x28 // mov rsi, qword [rsp + 40] QUAD $0x0f0e3264203a0f66 // pinsrb xmm4, byte [rdx + rsi + 14], 15 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] QUAD $0x0f3274203a0f4466; BYTE $0x01 // pinsrb xmm14, byte [rdx + rsi + 15], 1 QUAD $0x0f2274203a0f4666; BYTE $0x02 // pinsrb xmm14, byte [rdx + r12 + 15], 2 QUAD $0x0f1274203a0f4666; BYTE $0x03 // pinsrb xmm14, byte [rdx + r10 + 15], 3 @@ -13224,12 +13878,12 @@ LBB2_189: QUAD $0x0f1a74203a0f4666; BYTE $0x0a // pinsrb xmm14, byte [rdx + r11 + 15], 10 QUAD $0x0f3274203a0f4666; BYTE $0x0b // pinsrb xmm14, byte [rdx + r14 + 15], 11 QUAD $0x0f3a74203a0f4666; BYTE $0x0c // pinsrb xmm14, byte [rdx + r15 + 15], 12 - LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] QUAD $0x0f3274203a0f4466; BYTE $0x0d // pinsrb xmm14, byte [rdx + rsi + 15], 13 QUAD $0x0f2a74203a0f4666; BYTE $0x0e // pinsrb xmm14, byte [rdx + r13 + 15], 14 LONG $0x24748b48; BYTE $0x28 // mov rsi, qword [rsp + 40] QUAD $0x0f3274203a0f4466; BYTE $0x0f // pinsrb xmm14, byte [rdx + rsi + 15], 15 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] QUAD $0x10327c203a0f4466; BYTE $0x01 // pinsrb xmm15, byte [rdx + rsi + 16], 1 QUAD $0x10227c203a0f4666; BYTE $0x02 // pinsrb xmm15, byte [rdx + r12 + 16], 2 QUAD $0x10127c203a0f4666; BYTE $0x03 // pinsrb xmm15, byte [rdx + r10 + 16], 3 @@ -13242,10 +13896,10 @@ LBB2_189: QUAD $0x101a7c203a0f4666; BYTE $0x0a // pinsrb xmm15, byte [rdx + r11 + 16], 10 QUAD $0x10327c203a0f4666; BYTE $0x0b // pinsrb xmm15, byte [rdx + r14 + 16], 11 QUAD $0x103a7c203a0f4666; BYTE $0x0c // pinsrb xmm15, byte [rdx + r15 + 16], 12 - LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] QUAD $0x10327c203a0f4466; BYTE $0x0d // pinsrb xmm15, byte [rdx + rsi + 16], 13 QUAD $0x102a7c203a0f4666; BYTE $0x0e // pinsrb xmm15, byte [rdx + r13 + 16], 14 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] QUAD $0x01113244203a0f66 // pinsrb xmm0, byte [rdx + rsi + 17], 1 QUAD $0x112244203a0f4266; BYTE $0x02 // pinsrb xmm0, byte [rdx + r12 + 17], 2 QUAD $0x111244203a0f4266; BYTE $0x03 // pinsrb xmm0, byte [rdx + r10 + 17], 3 @@ -13260,12 +13914,12 @@ LBB2_189: QUAD $0x111a44203a0f4266; BYTE $0x0a // pinsrb xmm0, byte [rdx + r11 + 17], 10 QUAD $0x113244203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rdx + r14 + 17], 11 QUAD $0x113a44203a0f4266; BYTE $0x0c // pinsrb xmm0, byte [rdx + r15 + 17], 12 - LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] QUAD $0x0d113244203a0f66 // pinsrb xmm0, byte [rdx + rsi + 17], 13 LONG $0x24748b48; BYTE $0x18 // mov rsi, qword [rsp + 24] QUAD $0x0e113244203a0f66 // pinsrb xmm0, byte [rdx + rsi + 17], 14 QUAD $0x00a024a4eb0f4466; WORD $0x0000 // por xmm12, oword [rsp + 160] - LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] + LONG $0x24648b4c; BYTE $0x20 // mov r12, qword [rsp + 32] LONG $0x74b60f42; WORD $0x1b22 // movzx esi, byte [rdx + r12 + 27] LONG $0x6e0f4466; BYTE $0xce // movd xmm9, esi QUAD $0x00b024ac6f0f4466; WORD $0x0000 // movdqa xmm13, oword [rsp + 176] @@ -13291,7 +13945,7 @@ LBB2_189: QUAD $0x10027c203a0f4666; BYTE $0x0f // pinsrb xmm15, byte [rdx + r8 + 16], 15 QUAD $0x0000b024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 176] LONG $0x740f4466; BYTE $0xf8 // pcmpeqb xmm15, xmm0 - LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x24648b4c; BYTE $0x10 // mov r12, qword [rsp + 16] QUAD $0x12226c203a0f4266; BYTE $0x01 // pinsrb xmm5, byte [rdx + r12 + 18], 1 LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] QUAD $0x0212326c203a0f66 // pinsrb xmm5, byte [rdx + rsi + 18], 2 @@ -13305,7 +13959,7 @@ LBB2_189: QUAD $0x121a6c203a0f4266; BYTE $0x0a // pinsrb xmm5, byte [rdx + r11 + 18], 10 QUAD $0x12326c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rdx + r14 + 18], 11 QUAD $0x123a6c203a0f4266; BYTE $0x0c // pinsrb xmm5, byte [rdx + r15 + 18], 12 - LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] QUAD $0x0d12326c203a0f66 // pinsrb xmm5, byte [rdx + rsi + 18], 13 LONG $0x24748b48; BYTE $0x18 // mov rsi, qword [rsp + 24] QUAD $0x0e12326c203a0f66 // pinsrb xmm5, byte [rdx + rsi + 18], 14 @@ -13314,7 +13968,7 @@ LBB2_189: LONG $0xe8740f66 // pcmpeqb xmm5, xmm0 QUAD $0x000000b0addb0f66 // pand xmm5, oword 176[rbp] /* [rip + .LCPI2_11] */ LONG $0xeb0f4166; BYTE $0xef // por xmm5, xmm15 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] LONG $0x0274b60f; BYTE $0x1e // movzx esi, byte [rdx + rax + 30] LONG $0x6e0f4466; BYTE $0xe6 // movd xmm12, esi QUAD $0x13227c203a0f4266; BYTE $0x01 // pinsrb xmm7, byte [rdx + r12 + 19], 1 @@ -13357,7 +14011,7 @@ LBB2_189: QUAD $0x131a7c203a0f4266; BYTE $0x0a // pinsrb xmm7, byte [rdx + r11 + 19], 10 QUAD $0x13327c203a0f4266; BYTE $0x0b // pinsrb xmm7, byte [rdx + r14 + 19], 11 QUAD $0x133a7c203a0f4266; BYTE $0x0c // pinsrb xmm7, byte [rdx + r15 + 19], 12 - LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] QUAD $0x0d13327c203a0f66 // pinsrb xmm7, byte [rdx + rsi + 19], 13 LONG $0x24648b4c; BYTE $0x18 // mov r12, qword [rsp + 24] QUAD $0x13227c203a0f4266; BYTE $0x0e // pinsrb xmm7, byte [rdx + r12 + 19], 14 @@ -13588,28 +14242,27 @@ LBB2_189: LONG $0x1c7f0ff3; BYTE $0x88 // movdqu oword [rax + 4*rcx], xmm3 LONG $0x10c18348 // add rcx, 16 WORD $0x8948; BYTE $0xc8 // mov rax, rcx - QUAD $0x000000e8248c3b48 // cmp rcx, qword [rsp + 232] - JNE LBB2_189 - QUAD $0x000000f024bc8b4c // mov r15, qword [rsp + 240] - QUAD $0x000000e824bc3b4c // cmp r15, qword [rsp + 232] + QUAD $0x000000e0248c3b48 // cmp rcx, qword [rsp + 224] + JNE LBB2_186 + QUAD $0x000000e824bc8b4c // mov r15, qword [rsp + 232] + QUAD $0x000000e024bc3b4c // cmp r15, qword [rsp + 224] LONG $0x24748a44; BYTE $0x08 // mov r14b, byte [rsp + 8] - QUAD $0x000000f824b48b48 // mov rsi, qword [rsp + 248] + QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] JNE LBB2_69 JMP LBB2_135 -LBB2_191: - LONG $0xf8e68349 // and r14, -8 - WORD $0x894c; BYTE $0xf0 // mov rax, r14 +LBB2_188: + LONG $0xf8e78349 // and r15, -8 + WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x06e0c148 // shl rax, 6 WORD $0x0148; BYTE $0xd0 // add rax, rdx LONG $0x24448948; BYTE $0x40 // mov qword [rsp + 64], rax LONG $0x24048b48 // mov rax, qword [rsp] - LONG $0x2474894c; BYTE $0x20 // mov qword [rsp + 32], r14 - LONG $0xb0048d4a // lea rax, [rax + 4*r14] - LONG $0x24448948; BYTE $0x08 // mov qword [rsp + 8], rax - LONG $0x246c8944; BYTE $0x38 // mov dword [rsp + 56], r13d - LONG $0x6e0f4166; BYTE $0xc5 // movd xmm0, r13d + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 + LONG $0xb8048d4a // lea rax, [rax + 4*r15] + LONG $0x24448948; BYTE $0x10 // mov qword [rsp + 16], rax + LONG $0x6e0f4166; BYTE $0xc6 // movd xmm0, r14d LONG $0xc0700ff2; BYTE $0xe0 // pshuflw xmm0, xmm0, 224 LONG $0xc0700f66; BYTE $0x00 // pshufd xmm0, xmm0, 0 WORD $0x3145; BYTE $0xff // xor r15d, r15d @@ -13621,7 +14274,7 @@ LBB2_191: LONG $0x6f0f4466; WORD $0x506d // movdqa xmm13, oword 80[rbp] /* [rip + .LCPI2_5] */ LONG $0x6f0f4466; WORD $0x6075 // movdqa xmm14, oword 96[rbp] /* [rip + .LCPI2_6] */ -LBB2_192: +LBB2_189: LONG $0x247c894c; BYTE $0x30 // mov qword [rsp + 48], r15 LONG $0x06e7c149 // shl r15, 6 WORD $0x894d; BYTE $0xf9 // mov r9, r15 @@ -13630,9 +14283,9 @@ LBB2_192: WORD $0x894c; BYTE $0xf9 // mov rcx, r15 WORD $0x894c; BYTE $0xff // mov rdi, r15 WORD $0x894c; BYTE $0xfb // mov rbx, r15 - LONG $0x04b70f42; BYTE $0x3a // movzx eax, word [rdx + r15] - LONG $0x54b70f46; WORD $0x023a // movzx r10d, word [rdx + r15 + 2] - LONG $0x74b70f46; WORD $0x043a // movzx r14d, word [rdx + r15 + 4] + LONG $0x34b70f46; BYTE $0x3a // movzx r14d, word [rdx + r15] + LONG $0x44b70f42; WORD $0x023a // movzx eax, word [rdx + r15 + 2] + LONG $0x54b70f46; WORD $0x043a // movzx r10d, word [rdx + r15 + 4] LONG $0x74b70f42; WORD $0x063a // movzx esi, word [rdx + r15 + 6] LONG $0x5cb70f46; WORD $0x083a // movzx r11d, word [rdx + r15 + 8] WORD $0x894d; BYTE $0xf8 // mov r8, r15 @@ -13643,7 +14296,7 @@ LBB2_192: LONG $0x40c98148; WORD $0x0001; BYTE $0x00 // or rcx, 320 LONG $0x80cf8148; WORD $0x0001; BYTE $0x00 // or rdi, 384 LONG $0xc0cb8148; WORD $0x0001; BYTE $0x00 // or rbx, 448 - LONG $0xe06e0f66 // movd xmm4, eax + LONG $0x6e0f4166; BYTE $0xe6 // movd xmm4, r14d LONG $0xc40f4266; WORD $0x0224; BYTE $0x01 // pinsrw xmm4, word [rdx + r8], 1 LONG $0xc40f4266; WORD $0x0a24; BYTE $0x02 // pinsrw xmm4, word [rdx + r9], 2 LONG $0xc40f4266; WORD $0x2224; BYTE $0x03 // pinsrw xmm4, word [rdx + r12], 3 @@ -13651,31 +14304,31 @@ LBB2_192: LONG $0x24c40f66; WORD $0x050a // pinsrw xmm4, word [rdx + rcx], 5 LONG $0x24c40f66; WORD $0x063a // pinsrw xmm4, word [rdx + rdi], 6 LONG $0x24c40f66; WORD $0x071a // pinsrw xmm4, word [rdx + rbx], 7 - LONG $0x44b70f42; WORD $0x0a3a // movzx eax, word [rdx + r15 + 10] - LONG $0x18244489 // mov dword [rsp + 24], eax - LONG $0x6e0f4166; BYTE $0xf2 // movd xmm6, r10d + LONG $0x74b70f46; WORD $0x0a3a // movzx r14d, word [rdx + r15 + 10] + LONG $0xf06e0f66 // movd xmm6, eax QUAD $0x01020274c40f4266 // pinsrw xmm6, word [rdx + r8 + 2], 1 QUAD $0x02020a74c40f4266 // pinsrw xmm6, word [rdx + r9 + 2], 2 QUAD $0x03022274c40f4266 // pinsrw xmm6, word [rdx + r12 + 2], 3 LONG $0x44b70f42; WORD $0x0c3a // movzx eax, word [rdx + r15 + 12] - LONG $0x10244489 // mov dword [rsp + 16], eax + LONG $0x28244489 // mov dword [rsp + 40], eax QUAD $0x04022a74c40f4266 // pinsrw xmm6, word [rdx + r13 + 2], 4 - LONG $0x6e0f4166; BYTE $0xd6 // movd xmm2, r14d - LONG $0x74b70f46; WORD $0x0e3a // movzx r14d, word [rdx + r15 + 14] + LONG $0x6e0f4166; BYTE $0xd2 // movd xmm2, r10d + LONG $0x44b70f42; WORD $0x0e3a // movzx eax, word [rdx + r15 + 14] + LONG $0x18244489 // mov dword [rsp + 24], eax LONG $0x74c40f66; WORD $0x020a; BYTE $0x05 // pinsrw xmm6, word [rdx + rcx + 2], 5 LONG $0xee6e0f66 // movd xmm5, esi LONG $0x74b70f42; WORD $0x103a // movzx esi, word [rdx + r15 + 16] LONG $0x74c40f66; WORD $0x023a; BYTE $0x06 // pinsrw xmm6, word [rdx + rdi + 2], 6 LONG $0x6e0f4166; BYTE $0xdb // movd xmm3, r11d LONG $0x44b70f42; WORD $0x123a // movzx eax, word [rdx + r15 + 18] - LONG $0x28244489 // mov dword [rsp + 40], eax + LONG $0x38244489 // mov dword [rsp + 56], eax LONG $0x74c40f66; WORD $0x021a; BYTE $0x07 // pinsrw xmm6, word [rdx + rbx + 2], 7 LONG $0xf0750f66 // pcmpeqw xmm6, xmm0 LONG $0xf6630f66 // packsswb xmm6, xmm6 LONG $0xce6f0f66 // movdqa xmm1, xmm6 LONG $0xdb0f4166; BYTE $0xcf // pand xmm1, xmm15 LONG $0xcef80f66 // psubb xmm1, xmm6 - LONG $0x746e0f66; WORD $0x1824 // movd xmm6, dword [rsp + 24] + LONG $0x6e0f4166; BYTE $0xf6 // movd xmm6, r14d LONG $0x54b70f46; WORD $0x143a // movzx r10d, word [rdx + r15 + 20] LONG $0xe0750f66 // pcmpeqw xmm4, xmm0 LONG $0xe4630f66 // packsswb xmm4, xmm4 @@ -13702,7 +14355,7 @@ LBB2_192: LONG $0x5cc40f66; WORD $0x083a; BYTE $0x06 // pinsrw xmm3, word [rdx + rdi + 8], 6 LONG $0x5cc40f66; WORD $0x081a; BYTE $0x07 // pinsrw xmm3, word [rdx + rbx + 8], 7 LONG $0xcceb0f66 // por xmm1, xmm4 - LONG $0x7c6e0f66; WORD $0x1024 // movd xmm7, dword [rsp + 16] + LONG $0x7c6e0f66; WORD $0x2824 // movd xmm7, dword [rsp + 40] LONG $0x44b70f42; WORD $0x163a // movzx eax, word [rdx + r15 + 22] LONG $0xd0750f66 // pcmpeqw xmm2, xmm0 LONG $0xd2630f66 // packsswb xmm2, xmm2 @@ -13710,7 +14363,7 @@ LBB2_192: LONG $0xf2710f66; BYTE $0x02 // psllw xmm2, 2 LONG $0xdb0f4166; BYTE $0xd1 // pand xmm2, xmm9 LONG $0xd1eb0f66 // por xmm2, xmm1 - LONG $0x6e0f4166; BYTE $0xe6 // movd xmm4, r14d + LONG $0x646e0f66; WORD $0x1824 // movd xmm4, dword [rsp + 24] LONG $0x5cb70f46; WORD $0x183a // movzx r11d, word [rdx + r15 + 24] LONG $0xe8750f66 // pcmpeqw xmm5, xmm0 LONG $0xed630f66 // packsswb xmm5, xmm5 @@ -13740,7 +14393,7 @@ LBB2_192: LONG $0x7cc40f66; WORD $0x0c3a; BYTE $0x06 // pinsrw xmm7, word [rdx + rdi + 12], 6 LONG $0x7cc40f66; WORD $0x0c1a; BYTE $0x07 // pinsrw xmm7, word [rdx + rbx + 12], 7 LONG $0xdaeb0f66 // por xmm3, xmm2 - LONG $0x6e0f4466; WORD $0x2444; BYTE $0x28 // movd xmm8, dword [rsp + 40] + LONG $0x6e0f4466; WORD $0x2444; BYTE $0x38 // movd xmm8, dword [rsp + 56] LONG $0x74b70f46; WORD $0x1c3a // movzx r14d, word [rdx + r15 + 28] LONG $0xf0750f66 // pcmpeqw xmm6, xmm0 LONG $0xf6630f66 // packsswb xmm6, xmm6 @@ -13797,7 +14450,7 @@ LBB2_192: LONG $0xf9eb0f66 // por xmm7, xmm1 LONG $0xf66e0f66 // movd xmm6, esi LONG $0x74b70f42; WORD $0x243a // movzx esi, word [rdx + r15 + 36] - LONG $0x28247489 // mov dword [rsp + 40], esi + LONG $0x38247489 // mov dword [rsp + 56], esi QUAD $0x0114026cc40f4266 // pinsrw xmm5, word [rdx + r8 + 20], 1 QUAD $0x02140a6cc40f4266 // pinsrw xmm5, word [rdx + r9 + 20], 2 QUAD $0x0314226cc40f4266 // pinsrw xmm5, word [rdx + r12 + 20], 3 @@ -13813,7 +14466,7 @@ LBB2_192: LONG $0xefeb0f66 // por xmm5, xmm7 LONG $0x6e0f4166; BYTE $0xfe // movd xmm7, r14d LONG $0x74b70f42; WORD $0x263a // movzx esi, word [rdx + r15 + 38] - LONG $0x10247489 // mov dword [rsp + 16], esi + LONG $0x18247489 // mov dword [rsp + 24], esi QUAD $0x01160254c40f4266 // pinsrw xmm2, word [rdx + r8 + 22], 1 QUAD $0x02160a54c40f4266 // pinsrw xmm2, word [rdx + r9 + 22], 2 QUAD $0x03162254c40f4266 // pinsrw xmm2, word [rdx + r12 + 22], 3 @@ -13844,7 +14497,7 @@ LBB2_192: LONG $0xddeb0f66 // por xmm3, xmm5 LONG $0xe86e0f66 // movd xmm5, eax LONG $0x44b70f42; WORD $0x2a3a // movzx eax, word [rdx + r15 + 42] - LONG $0x18244489 // mov dword [rsp + 24], eax + LONG $0x28244489 // mov dword [rsp + 40], eax QUAD $0x011a0274c40f4266 // pinsrw xmm6, word [rdx + r8 + 26], 1 QUAD $0x021a0a74c40f4266 // pinsrw xmm6, word [rdx + r9 + 26], 2 QUAD $0x031a2274c40f4266 // pinsrw xmm6, word [rdx + r12 + 26], 3 @@ -13884,7 +14537,7 @@ LBB2_192: LONG $0xf2710f66; BYTE $0x07 // psllw xmm2, 7 LONG $0xdb0f4166; BYTE $0xd6 // pand xmm2, xmm14 LONG $0xd7eb0f66 // por xmm2, xmm7 - LONG $0x746e0f66; WORD $0x2824 // movd xmm6, dword [rsp + 40] + LONG $0x746e0f66; WORD $0x3824 // movd xmm6, dword [rsp + 56] LONG $0x74b70f42; WORD $0x2e3a // movzx esi, word [rdx + r15 + 46] QUAD $0x0120026cc40f4266 // pinsrw xmm5, word [rdx + r8 + 32], 1 QUAD $0x02200a6cc40f4266 // pinsrw xmm5, word [rdx + r9 + 32], 2 @@ -13905,7 +14558,7 @@ LBB2_192: LONG $0xf96f0f66 // movdqa xmm7, xmm1 LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 LONG $0xf9f80f66 // psubb xmm7, xmm1 - LONG $0x5c6e0f66; WORD $0x1024 // movd xmm3, dword [rsp + 16] + LONG $0x5c6e0f66; WORD $0x1824 // movd xmm3, dword [rsp + 24] LONG $0x5cb70f46; WORD $0x303a // movzx r11d, word [rdx + r15 + 48] LONG $0x6cc40f66; WORD $0x201a; BYTE $0x07 // pinsrw xmm5, word [rdx + rbx + 32], 7 LONG $0xe8750f66 // pcmpeqw xmm5, xmm0 @@ -13940,7 +14593,7 @@ LBB2_192: LONG $0xf6710f66; BYTE $0x02 // psllw xmm6, 2 LONG $0xdb0f4166; BYTE $0xf1 // pand xmm6, xmm9 LONG $0xf7eb0f66 // por xmm6, xmm7 - LONG $0x4c6e0f66; WORD $0x1824 // movd xmm1, dword [rsp + 24] + LONG $0x4c6e0f66; WORD $0x2824 // movd xmm1, dword [rsp + 40] LONG $0x74b70f46; WORD $0x343a // movzx r14d, word [rdx + r15 + 52] LONG $0x6cc40f66; WORD $0x281a; BYTE $0x07 // pinsrw xmm5, word [rdx + rbx + 40], 7 LONG $0xd8750f66 // pcmpeqw xmm3, xmm0 @@ -14127,16 +14780,16 @@ LBB2_192: LONG $0x08c18348 // add rcx, 8 WORD $0x8949; BYTE $0xcf // mov r15, rcx LONG $0x244c3b48; BYTE $0x20 // cmp rcx, qword [rsp + 32] - JNE LBB2_192 - QUAD $0x0000009824b48b4c // mov r14, qword [rsp + 152] - LONG $0x24743b4c; BYTE $0x20 // cmp r14, qword [rsp + 32] + JNE LBB2_189 + QUAD $0x0000009824bc8b4c // mov r15, qword [rsp + 152] + LONG $0x247c3b4c; BYTE $0x20 // cmp r15, qword [rsp + 32] QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] - LONG $0x246c8b44; BYTE $0x38 // mov r13d, dword [rsp + 56] + LONG $0x24748b44; BYTE $0x08 // mov r14d, dword [rsp + 8] LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] JNE LBB2_92 JMP LBB2_139 -LBB2_194: +LBB2_191: LONG $0xf8e78349 // and r15, -8 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x06e0c148 // shl rax, 6 @@ -14145,9 +14798,8 @@ LBB2_194: LONG $0x24048b48 // mov rax, qword [rsp] LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LONG $0xb8048d4a // lea rax, [rax + 4*r15] - LONG $0x24448948; BYTE $0x08 // mov qword [rsp + 8], rax - LONG $0x246c8944; BYTE $0x38 // mov dword [rsp + 56], r13d - LONG $0x6e0f4166; BYTE $0xc5 // movd xmm0, r13d + LONG $0x24448948; BYTE $0x10 // mov qword [rsp + 16], rax + LONG $0x6e0f4166; BYTE $0xc6 // movd xmm0, r14d LONG $0xc0700ff2; BYTE $0xe0 // pshuflw xmm0, xmm0, 224 LONG $0xc0700f66; BYTE $0x00 // pshufd xmm0, xmm0, 0 WORD $0x3145; BYTE $0xff // xor r15d, r15d @@ -14159,7 +14811,7 @@ LBB2_194: LONG $0x6f0f4466; WORD $0x506d // movdqa xmm13, oword 80[rbp] /* [rip + .LCPI2_5] */ LONG $0x6f0f4466; WORD $0x6075 // movdqa xmm14, oword 96[rbp] /* [rip + .LCPI2_6] */ -LBB2_195: +LBB2_192: LONG $0x247c894c; BYTE $0x30 // mov qword [rsp + 48], r15 LONG $0x06e7c149 // shl r15, 6 WORD $0x894d; BYTE $0xf9 // mov r9, r15 @@ -14168,9 +14820,9 @@ LBB2_195: WORD $0x894c; BYTE $0xf9 // mov rcx, r15 WORD $0x894c; BYTE $0xff // mov rdi, r15 WORD $0x894c; BYTE $0xfb // mov rbx, r15 - LONG $0x04b70f42; BYTE $0x3a // movzx eax, word [rdx + r15] - LONG $0x54b70f46; WORD $0x023a // movzx r10d, word [rdx + r15 + 2] - LONG $0x74b70f46; WORD $0x043a // movzx r14d, word [rdx + r15 + 4] + LONG $0x34b70f46; BYTE $0x3a // movzx r14d, word [rdx + r15] + LONG $0x44b70f42; WORD $0x023a // movzx eax, word [rdx + r15 + 2] + LONG $0x54b70f46; WORD $0x043a // movzx r10d, word [rdx + r15 + 4] LONG $0x74b70f42; WORD $0x063a // movzx esi, word [rdx + r15 + 6] LONG $0x5cb70f46; WORD $0x083a // movzx r11d, word [rdx + r15 + 8] WORD $0x894d; BYTE $0xf8 // mov r8, r15 @@ -14181,7 +14833,7 @@ LBB2_195: LONG $0x40c98148; WORD $0x0001; BYTE $0x00 // or rcx, 320 LONG $0x80cf8148; WORD $0x0001; BYTE $0x00 // or rdi, 384 LONG $0xc0cb8148; WORD $0x0001; BYTE $0x00 // or rbx, 448 - LONG $0xe06e0f66 // movd xmm4, eax + LONG $0x6e0f4166; BYTE $0xe6 // movd xmm4, r14d LONG $0xc40f4266; WORD $0x0224; BYTE $0x01 // pinsrw xmm4, word [rdx + r8], 1 LONG $0xc40f4266; WORD $0x0a24; BYTE $0x02 // pinsrw xmm4, word [rdx + r9], 2 LONG $0xc40f4266; WORD $0x2224; BYTE $0x03 // pinsrw xmm4, word [rdx + r12], 3 @@ -14189,31 +14841,31 @@ LBB2_195: LONG $0x24c40f66; WORD $0x050a // pinsrw xmm4, word [rdx + rcx], 5 LONG $0x24c40f66; WORD $0x063a // pinsrw xmm4, word [rdx + rdi], 6 LONG $0x24c40f66; WORD $0x071a // pinsrw xmm4, word [rdx + rbx], 7 - LONG $0x44b70f42; WORD $0x0a3a // movzx eax, word [rdx + r15 + 10] - LONG $0x18244489 // mov dword [rsp + 24], eax - LONG $0x6e0f4166; BYTE $0xf2 // movd xmm6, r10d + LONG $0x74b70f46; WORD $0x0a3a // movzx r14d, word [rdx + r15 + 10] + LONG $0xf06e0f66 // movd xmm6, eax QUAD $0x01020274c40f4266 // pinsrw xmm6, word [rdx + r8 + 2], 1 QUAD $0x02020a74c40f4266 // pinsrw xmm6, word [rdx + r9 + 2], 2 QUAD $0x03022274c40f4266 // pinsrw xmm6, word [rdx + r12 + 2], 3 LONG $0x44b70f42; WORD $0x0c3a // movzx eax, word [rdx + r15 + 12] - LONG $0x10244489 // mov dword [rsp + 16], eax + LONG $0x28244489 // mov dword [rsp + 40], eax QUAD $0x04022a74c40f4266 // pinsrw xmm6, word [rdx + r13 + 2], 4 - LONG $0x6e0f4166; BYTE $0xd6 // movd xmm2, r14d - LONG $0x74b70f46; WORD $0x0e3a // movzx r14d, word [rdx + r15 + 14] + LONG $0x6e0f4166; BYTE $0xd2 // movd xmm2, r10d + LONG $0x44b70f42; WORD $0x0e3a // movzx eax, word [rdx + r15 + 14] + LONG $0x18244489 // mov dword [rsp + 24], eax LONG $0x74c40f66; WORD $0x020a; BYTE $0x05 // pinsrw xmm6, word [rdx + rcx + 2], 5 LONG $0xee6e0f66 // movd xmm5, esi LONG $0x74b70f42; WORD $0x103a // movzx esi, word [rdx + r15 + 16] LONG $0x74c40f66; WORD $0x023a; BYTE $0x06 // pinsrw xmm6, word [rdx + rdi + 2], 6 LONG $0x6e0f4166; BYTE $0xdb // movd xmm3, r11d LONG $0x44b70f42; WORD $0x123a // movzx eax, word [rdx + r15 + 18] - LONG $0x28244489 // mov dword [rsp + 40], eax + LONG $0x38244489 // mov dword [rsp + 56], eax LONG $0x74c40f66; WORD $0x021a; BYTE $0x07 // pinsrw xmm6, word [rdx + rbx + 2], 7 LONG $0xf0750f66 // pcmpeqw xmm6, xmm0 LONG $0xf6630f66 // packsswb xmm6, xmm6 LONG $0xce6f0f66 // movdqa xmm1, xmm6 LONG $0xdb0f4166; BYTE $0xcf // pand xmm1, xmm15 LONG $0xcef80f66 // psubb xmm1, xmm6 - LONG $0x746e0f66; WORD $0x1824 // movd xmm6, dword [rsp + 24] + LONG $0x6e0f4166; BYTE $0xf6 // movd xmm6, r14d LONG $0x54b70f46; WORD $0x143a // movzx r10d, word [rdx + r15 + 20] LONG $0xe0750f66 // pcmpeqw xmm4, xmm0 LONG $0xe4630f66 // packsswb xmm4, xmm4 @@ -14240,7 +14892,7 @@ LBB2_195: LONG $0x5cc40f66; WORD $0x083a; BYTE $0x06 // pinsrw xmm3, word [rdx + rdi + 8], 6 LONG $0x5cc40f66; WORD $0x081a; BYTE $0x07 // pinsrw xmm3, word [rdx + rbx + 8], 7 LONG $0xcceb0f66 // por xmm1, xmm4 - LONG $0x7c6e0f66; WORD $0x1024 // movd xmm7, dword [rsp + 16] + LONG $0x7c6e0f66; WORD $0x2824 // movd xmm7, dword [rsp + 40] LONG $0x44b70f42; WORD $0x163a // movzx eax, word [rdx + r15 + 22] LONG $0xd0750f66 // pcmpeqw xmm2, xmm0 LONG $0xd2630f66 // packsswb xmm2, xmm2 @@ -14248,7 +14900,7 @@ LBB2_195: LONG $0xf2710f66; BYTE $0x02 // psllw xmm2, 2 LONG $0xdb0f4166; BYTE $0xd1 // pand xmm2, xmm9 LONG $0xd1eb0f66 // por xmm2, xmm1 - LONG $0x6e0f4166; BYTE $0xe6 // movd xmm4, r14d + LONG $0x646e0f66; WORD $0x1824 // movd xmm4, dword [rsp + 24] LONG $0x5cb70f46; WORD $0x183a // movzx r11d, word [rdx + r15 + 24] LONG $0xe8750f66 // pcmpeqw xmm5, xmm0 LONG $0xed630f66 // packsswb xmm5, xmm5 @@ -14278,7 +14930,7 @@ LBB2_195: LONG $0x7cc40f66; WORD $0x0c3a; BYTE $0x06 // pinsrw xmm7, word [rdx + rdi + 12], 6 LONG $0x7cc40f66; WORD $0x0c1a; BYTE $0x07 // pinsrw xmm7, word [rdx + rbx + 12], 7 LONG $0xdaeb0f66 // por xmm3, xmm2 - LONG $0x6e0f4466; WORD $0x2444; BYTE $0x28 // movd xmm8, dword [rsp + 40] + LONG $0x6e0f4466; WORD $0x2444; BYTE $0x38 // movd xmm8, dword [rsp + 56] LONG $0x74b70f46; WORD $0x1c3a // movzx r14d, word [rdx + r15 + 28] LONG $0xf0750f66 // pcmpeqw xmm6, xmm0 LONG $0xf6630f66 // packsswb xmm6, xmm6 @@ -14335,7 +14987,7 @@ LBB2_195: LONG $0xf9eb0f66 // por xmm7, xmm1 LONG $0xf66e0f66 // movd xmm6, esi LONG $0x74b70f42; WORD $0x243a // movzx esi, word [rdx + r15 + 36] - LONG $0x28247489 // mov dword [rsp + 40], esi + LONG $0x38247489 // mov dword [rsp + 56], esi QUAD $0x0114026cc40f4266 // pinsrw xmm5, word [rdx + r8 + 20], 1 QUAD $0x02140a6cc40f4266 // pinsrw xmm5, word [rdx + r9 + 20], 2 QUAD $0x0314226cc40f4266 // pinsrw xmm5, word [rdx + r12 + 20], 3 @@ -14351,7 +15003,7 @@ LBB2_195: LONG $0xefeb0f66 // por xmm5, xmm7 LONG $0x6e0f4166; BYTE $0xfe // movd xmm7, r14d LONG $0x74b70f42; WORD $0x263a // movzx esi, word [rdx + r15 + 38] - LONG $0x10247489 // mov dword [rsp + 16], esi + LONG $0x18247489 // mov dword [rsp + 24], esi QUAD $0x01160254c40f4266 // pinsrw xmm2, word [rdx + r8 + 22], 1 QUAD $0x02160a54c40f4266 // pinsrw xmm2, word [rdx + r9 + 22], 2 QUAD $0x03162254c40f4266 // pinsrw xmm2, word [rdx + r12 + 22], 3 @@ -14382,7 +15034,7 @@ LBB2_195: LONG $0xddeb0f66 // por xmm3, xmm5 LONG $0xe86e0f66 // movd xmm5, eax LONG $0x44b70f42; WORD $0x2a3a // movzx eax, word [rdx + r15 + 42] - LONG $0x18244489 // mov dword [rsp + 24], eax + LONG $0x28244489 // mov dword [rsp + 40], eax QUAD $0x011a0274c40f4266 // pinsrw xmm6, word [rdx + r8 + 26], 1 QUAD $0x021a0a74c40f4266 // pinsrw xmm6, word [rdx + r9 + 26], 2 QUAD $0x031a2274c40f4266 // pinsrw xmm6, word [rdx + r12 + 26], 3 @@ -14422,7 +15074,7 @@ LBB2_195: LONG $0xf2710f66; BYTE $0x07 // psllw xmm2, 7 LONG $0xdb0f4166; BYTE $0xd6 // pand xmm2, xmm14 LONG $0xd7eb0f66 // por xmm2, xmm7 - LONG $0x746e0f66; WORD $0x2824 // movd xmm6, dword [rsp + 40] + LONG $0x746e0f66; WORD $0x3824 // movd xmm6, dword [rsp + 56] LONG $0x74b70f42; WORD $0x2e3a // movzx esi, word [rdx + r15 + 46] QUAD $0x0120026cc40f4266 // pinsrw xmm5, word [rdx + r8 + 32], 1 QUAD $0x02200a6cc40f4266 // pinsrw xmm5, word [rdx + r9 + 32], 2 @@ -14443,7 +15095,7 @@ LBB2_195: LONG $0xf96f0f66 // movdqa xmm7, xmm1 LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 LONG $0xf9f80f66 // psubb xmm7, xmm1 - LONG $0x5c6e0f66; WORD $0x1024 // movd xmm3, dword [rsp + 16] + LONG $0x5c6e0f66; WORD $0x1824 // movd xmm3, dword [rsp + 24] LONG $0x5cb70f46; WORD $0x303a // movzx r11d, word [rdx + r15 + 48] LONG $0x6cc40f66; WORD $0x201a; BYTE $0x07 // pinsrw xmm5, word [rdx + rbx + 32], 7 LONG $0xe8750f66 // pcmpeqw xmm5, xmm0 @@ -14478,7 +15130,7 @@ LBB2_195: LONG $0xf6710f66; BYTE $0x02 // psllw xmm6, 2 LONG $0xdb0f4166; BYTE $0xf1 // pand xmm6, xmm9 LONG $0xf7eb0f66 // por xmm6, xmm7 - LONG $0x4c6e0f66; WORD $0x1824 // movd xmm1, dword [rsp + 24] + LONG $0x4c6e0f66; WORD $0x2824 // movd xmm1, dword [rsp + 40] LONG $0x74b70f46; WORD $0x343a // movzx r14d, word [rdx + r15 + 52] LONG $0x6cc40f66; WORD $0x281a; BYTE $0x07 // pinsrw xmm5, word [rdx + rbx + 40], 7 LONG $0xd8750f66 // pcmpeqw xmm3, xmm0 @@ -14665,24 +15317,23 @@ LBB2_195: LONG $0x08c18348 // add rcx, 8 WORD $0x8949; BYTE $0xcf // mov r15, rcx LONG $0x244c3b48; BYTE $0x20 // cmp rcx, qword [rsp + 32] - JNE LBB2_195 + JNE LBB2_192 QUAD $0x0000009824bc8b4c // mov r15, qword [rsp + 152] LONG $0x247c3b4c; BYTE $0x20 // cmp r15, qword [rsp + 32] QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] - LONG $0x246c8b44; BYTE $0x38 // mov r13d, dword [rsp + 56] - LONG $0x24748b4c; BYTE $0x08 // mov r14, qword [rsp + 8] + LONG $0x24748b44; BYTE $0x08 // mov r14d, dword [rsp + 8] LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] JNE LBB2_104 - JMP LBB2_143 + JMP LBB2_144 -LBB2_197: +LBB2_194: WORD $0x894d; BYTE $0xf0 // mov r8, r14 LONG $0xfce08349 // and r8, -4 WORD $0x894c; BYTE $0xc3 // mov rbx, r8 LONG $0x07e3c148 // shl rbx, 7 WORD $0x0148; BYTE $0xd3 // add rbx, rdx LONG $0x24048b48 // mov rax, qword [rsp] - LONG $0x801c8d4e // lea r11, [rax + 4*r8] + LONG $0x803c8d4e // lea r15, [rax + 4*r8] WORD $0x280f; BYTE $0xc8 // movaps xmm1, xmm0 LONG $0x00c8c60f // shufps xmm1, xmm0, 0 LONG $0xfcc28148; WORD $0x0001; BYTE $0x00 // add rdx, 508 @@ -14697,7 +15348,7 @@ LBB2_197: LONG $0x6f0f4466; WORD $0x704d // movdqa xmm9, oword 112[rbp] /* [rip + .LCPI2_7] */ LONG $0x24048b48 // mov rax, qword [rsp] -LBB2_198: +LBB2_195: QUAD $0xfffffe04b2100ff3 // movss xmm6, dword [rdx - 508] QUAD $0xfffffe08ba100ff3 // movss xmm7, dword [rdx - 504] QUAD $0xfffffe0caa100ff3 // movss xmm5, dword [rdx - 500] @@ -15042,10 +15693,10 @@ LBB2_198: LONG $0x04c18348 // add rcx, 4 LONG $0x00c28148; WORD $0x0002; BYTE $0x00 // add rdx, 512 WORD $0x3949; BYTE $0xc8 // cmp r8, rcx - JNE LBB2_198 + JNE LBB2_195 WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB2_127 - JMP LBB2_147 + JMP LBB2_148 TEXT ·_comparison_not_equal_arr_arr_sse4(SB), $80-48 @@ -15057,8 +15708,9 @@ TEXT ·_comparison_not_equal_arr_arr_sse4(SB), $80-48 MOVQ offset+40(FP), R9 ADDQ $8, SP - WORD $0x894d; BYTE $0xc3 // mov r11, r8 - WORD $0x8949; BYTE $0xce // mov r14, rcx + WORD $0x8944; BYTE $0xc8 // mov eax, r9d + WORD $0x894d; BYTE $0xc6 // mov r14, r8 + WORD $0x8949; BYTE $0xcc // mov r12, rcx WORD $0xff83; BYTE $0x06 // cmp edi, 6 JG LBB3_29 WORD $0xff83; BYTE $0x03 // cmp edi, 3 @@ -15069,16 +15721,16 @@ TEXT ·_comparison_not_equal_arr_arr_sse4(SB), $80-48 JE LBB3_79 WORD $0xff83; BYTE $0x06 // cmp edi, 6 JNE LBB3_123 - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_22 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB3_20: WORD $0x0e8b // mov ecx, dword [rsi] @@ -15091,7 +15743,7 @@ LBB3_20: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -15100,49 +15752,49 @@ LBB3_20: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB3_20 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_22: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_26 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB3_24: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0x068b // mov eax, dword [rsi] WORD $0x4e8b; BYTE $0x04 // mov ecx, dword [rsi + 4] WORD $0x023b // cmp eax, dword [rdx] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] WORD $0x4a3b; BYTE $0x04 // cmp ecx, dword [rdx + 4] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] WORD $0x468b; BYTE $0x08 // mov eax, dword [rsi + 8] WORD $0x423b; BYTE $0x08 // cmp eax, dword [rdx + 8] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] + LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] WORD $0x468b; BYTE $0x0c // mov eax, dword [rsi + 12] WORD $0x423b; BYTE $0x0c // cmp eax, dword [rdx + 12] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] + LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] WORD $0x468b; BYTE $0x10 // mov eax, dword [rsi + 16] WORD $0x423b; BYTE $0x10 // cmp eax, dword [rdx + 16] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] WORD $0x468b; BYTE $0x14 // mov eax, dword [rsi + 20] WORD $0x423b; BYTE $0x14 // cmp eax, dword [rdx + 20] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + LONG $0x2454950f; BYTE $0x03 // setne byte [rsp + 3] WORD $0x468b; BYTE $0x18 // mov eax, dword [rsi + 24] WORD $0x423b; BYTE $0x18 // cmp eax, dword [rdx + 24] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] + LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] WORD $0x468b; BYTE $0x1c // mov eax, dword [rsi + 28] WORD $0x423b; BYTE $0x1c // cmp eax, dword [rdx + 28] LONG $0xd5950f41 // setne r13b WORD $0x468b; BYTE $0x20 // mov eax, dword [rsi + 32] WORD $0x423b; BYTE $0x20 // cmp eax, dword [rdx + 32] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] WORD $0x468b; BYTE $0x24 // mov eax, dword [rsi + 36] WORD $0x423b; BYTE $0x24 // cmp eax, dword [rdx + 36] LONG $0xd0950f41 // setne r8b @@ -15154,165 +15806,165 @@ LBB3_24: LONG $0xd7950f41 // setne r15b WORD $0x468b; BYTE $0x30 // mov eax, dword [rsi + 48] WORD $0x423b; BYTE $0x30 // cmp eax, dword [rdx + 48] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] + LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] WORD $0x468b; BYTE $0x34 // mov eax, dword [rsi + 52] WORD $0x423b; BYTE $0x34 // cmp eax, dword [rdx + 52] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] + LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] WORD $0x468b; BYTE $0x38 // mov eax, dword [rsi + 56] WORD $0x423b; BYTE $0x38 // cmp eax, dword [rdx + 56] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] WORD $0x468b; BYTE $0x3c // mov eax, dword [rsi + 60] WORD $0x423b; BYTE $0x3c // cmp eax, dword [rdx + 60] - WORD $0x950f; BYTE $0xd3 // setne bl + LONG $0xd7950f40 // setne dil WORD $0x468b; BYTE $0x40 // mov eax, dword [rsi + 64] - WORD $0x4e8b; BYTE $0x44 // mov ecx, dword [rsi + 68] + WORD $0x5e8b; BYTE $0x44 // mov ebx, dword [rsi + 68] WORD $0x423b; BYTE $0x40 // cmp eax, dword [rdx + 64] WORD $0x468b; BYTE $0x48 // mov eax, dword [rsi + 72] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] - WORD $0x4a3b; BYTE $0x44 // cmp ecx, dword [rdx + 68] - WORD $0x4e8b; BYTE $0x4c // mov ecx, dword [rsi + 76] + LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + WORD $0x5a3b; BYTE $0x44 // cmp ebx, dword [rdx + 68] + WORD $0x5e8b; BYTE $0x4c // mov ebx, dword [rsi + 76] LONG $0xd2950f41 // setne r10b WORD $0x423b; BYTE $0x48 // cmp eax, dword [rdx + 72] WORD $0x468b; BYTE $0x50 // mov eax, dword [rsi + 80] LONG $0xd6950f41 // setne r14b - WORD $0x4a3b; BYTE $0x4c // cmp ecx, dword [rdx + 76] - WORD $0x4e8b; BYTE $0x54 // mov ecx, dword [rsi + 84] + WORD $0x5a3b; BYTE $0x4c // cmp ebx, dword [rdx + 76] + WORD $0x5e8b; BYTE $0x54 // mov ebx, dword [rsi + 84] LONG $0xd4950f41 // setne r12b WORD $0x423b; BYTE $0x50 // cmp eax, dword [rdx + 80] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] - WORD $0x4a3b; BYTE $0x54 // cmp ecx, dword [rdx + 84] + LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + WORD $0x5a3b; BYTE $0x54 // cmp ebx, dword [rdx + 84] WORD $0x468b; BYTE $0x58 // mov eax, dword [rsi + 88] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] WORD $0x423b; BYTE $0x58 // cmp eax, dword [rdx + 88] WORD $0x468b; BYTE $0x5c // mov eax, dword [rsi + 92] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] + LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] WORD $0x423b; BYTE $0x5c // cmp eax, dword [rdx + 92] WORD $0x468b; BYTE $0x60 // mov eax, dword [rsi + 96] LONG $0xd1950f41 // setne r9b WORD $0x423b; BYTE $0x60 // cmp eax, dword [rdx + 96] WORD $0x468b; BYTE $0x64 // mov eax, dword [rsi + 100] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] + LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] WORD $0x423b; BYTE $0x64 // cmp eax, dword [rdx + 100] WORD $0x468b; BYTE $0x68 // mov eax, dword [rsi + 104] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] + LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] WORD $0x423b; BYTE $0x68 // cmp eax, dword [rdx + 104] WORD $0x468b; BYTE $0x6c // mov eax, dword [rsi + 108] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] + LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] WORD $0x423b; BYTE $0x6c // cmp eax, dword [rdx + 108] WORD $0x468b; BYTE $0x70 // mov eax, dword [rsi + 112] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] + LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] WORD $0x423b; BYTE $0x70 // cmp eax, dword [rdx + 112] WORD $0x468b; BYTE $0x74 // mov eax, dword [rsi + 116] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] WORD $0x423b; BYTE $0x74 // cmp eax, dword [rdx + 116] WORD $0x468b; BYTE $0x78 // mov eax, dword [rsi + 120] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] + LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] WORD $0x423b; BYTE $0x78 // cmp eax, dword [rdx + 120] WORD $0x468b; BYTE $0x7c // mov eax, dword [rsi + 124] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] + LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x80ee8348 // sub rsi, -128 WORD $0x423b; BYTE $0x7c // cmp eax, dword [rdx + 124] - LONG $0xd7950f40 // setne dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x950f; BYTE $0xd1 // setne cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x80c28148; WORD $0x0000; BYTE $0x00 // add rdx, 128 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB3_24 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB3_26: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_28: @@ -15323,16 +15975,16 @@ LBB3_28: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB3_28 JMP LBB3_123 @@ -15345,266 +15997,361 @@ LBB3_29: JE LBB3_112 WORD $0xff83; BYTE $0x0c // cmp edi, 12 JNE LBB3_123 - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_50 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x634c; BYTE $0xd0 // movsxd r10, eax LBB3_48: LONG $0x06100ff2 // movsd xmm0, qword [rsi] LONG $0x08c68348 // add rsi, 8 LONG $0x022e0f66 // ucomisd xmm0, qword [rdx] LONG $0x08528d48 // lea rdx, [rdx + 8] - LONG $0xd2950f41 // setne r10b - WORD $0xf641; BYTE $0xda // neg r10b - LONG $0x07788d48 // lea rdi, [rax + 7] - WORD $0x8548; BYTE $0xc0 // test rax, rax - LONG $0xf8490f48 // cmovns rdi, rax + WORD $0x9a0f; BYTE $0xd1 // setp cl + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xcb08 // or bl, cl + WORD $0xdbf6 // neg bl + LONG $0x077a8d49 // lea rdi, [r10 + 7] + WORD $0x854d; BYTE $0xd2 // test r10, r10 + LONG $0xfa490f49 // cmovns rdi, r10 LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] - WORD $0x3045; BYTE $0xc2 // xor r10b, r8b + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] + WORD $0x3044; BYTE $0xc3 // xor bl, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] - WORD $0xc189 // mov ecx, eax + WORD $0x8944; BYTE $0xd1 // mov ecx, r10d WORD $0x2944; BYTE $0xc9 // sub ecx, r9d - LONG $0x000001bb; BYTE $0x00 // mov ebx, 1 - WORD $0xe3d3 // shl ebx, cl - WORD $0x2044; BYTE $0xd3 // and bl, r10b - WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl - LONG $0x01c08348 // add rax, 1 - LONG $0x08f88348 // cmp rax, 8 + LONG $0x000001b8; BYTE $0x00 // mov eax, 1 + WORD $0xe0d3 // shl eax, cl + WORD $0xd820 // and al, bl + WORD $0x3044; BYTE $0xc0 // xor al, r8b + LONG $0x3c048841 // mov byte [r12 + rdi], al + LONG $0x01c28349 // add r10, 1 + LONG $0x08fa8349 // cmp r10, 8 JNE LBB3_48 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_50: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_54 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 - LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 + LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 LBB3_52: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 LONG $0x06100ff2 // movsd xmm0, qword [rsi] - LONG $0x4e100ff2; BYTE $0x08 // movsd xmm1, qword [rsi + 8] LONG $0x022e0f66 // ucomisd xmm0, qword [rdx] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] - LONG $0x4a2e0f66; BYTE $0x08 // ucomisd xmm1, qword [rdx + 8] - WORD $0x950f; BYTE $0xd0 // setne al + LONG $0x46100ff2; BYTE $0x08 // movsd xmm0, qword [rsi + 8] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x15244c88 // mov byte [rsp + 21], cl + LONG $0x422e0f66; BYTE $0x08 // ucomisd xmm0, qword [rdx + 8] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0d244c88 // mov byte [rsp + 13], cl LONG $0x46100ff2; BYTE $0x10 // movsd xmm0, qword [rsi + 16] LONG $0x422e0f66; BYTE $0x10 // ucomisd xmm0, qword [rdx + 16] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x14244c88 // mov byte [rsp + 20], cl LONG $0x46100ff2; BYTE $0x18 // movsd xmm0, qword [rsi + 24] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] LONG $0x422e0f66; BYTE $0x18 // ucomisd xmm0, qword [rdx + 24] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x17244c88 // mov byte [rsp + 23], cl LONG $0x46100ff2; BYTE $0x20 // movsd xmm0, qword [rsi + 32] LONG $0x422e0f66; BYTE $0x20 // ucomisd xmm0, qword [rdx + 32] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x16244c88 // mov byte [rsp + 22], cl LONG $0x46100ff2; BYTE $0x28 // movsd xmm0, qword [rsi + 40] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] LONG $0x422e0f66; BYTE $0x28 // ucomisd xmm0, qword [rdx + 40] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f40 // setne dil + WORD $0x0840; BYTE $0xc7 // or dil, al LONG $0x46100ff2; BYTE $0x30 // movsd xmm0, qword [rsi + 48] LONG $0x422e0f66; BYTE $0x30 // ucomisd xmm0, qword [rdx + 48] - LONG $0x46100ff2; BYTE $0x38 // movsd xmm0, qword [rsi + 56] + WORD $0x9a0f; BYTE $0xd0 // setp al LONG $0xd5950f41 // setne r13b + WORD $0x0841; BYTE $0xc5 // or r13b, al + LONG $0x46100ff2; BYTE $0x38 // movsd xmm0, qword [rsi + 56] LONG $0x422e0f66; BYTE $0x38 // ucomisd xmm0, qword [rdx + 56] - LONG $0xd7950f41 // setne r15b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x03244c88 // mov byte [rsp + 3], cl LONG $0x46100ff2; BYTE $0x40 // movsd xmm0, qword [rsi + 64] LONG $0x422e0f66; BYTE $0x40 // ucomisd xmm0, qword [rdx + 64] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x13244c88 // mov byte [rsp + 19], cl LONG $0x46100ff2; BYTE $0x48 // movsd xmm0, qword [rsi + 72] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x422e0f66; BYTE $0x48 // ucomisd xmm0, qword [rdx + 72] - WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xc308 // or bl, al LONG $0x46100ff2; BYTE $0x50 // movsd xmm0, qword [rsi + 80] LONG $0x422e0f66; BYTE $0x50 // ucomisd xmm0, qword [rdx + 80] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x12244c88 // mov byte [rsp + 18], cl LONG $0x46100ff2; BYTE $0x58 // movsd xmm0, qword [rsi + 88] - LONG $0xd1950f41 // setne r9b LONG $0x422e0f66; BYTE $0x58 // ucomisd xmm0, qword [rdx + 88] - LONG $0xd3950f41 // setne r11b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x11244c88 // mov byte [rsp + 17], cl LONG $0x46100ff2; BYTE $0x60 // movsd xmm0, qword [rsi + 96] LONG $0x422e0f66; BYTE $0x60 // ucomisd xmm0, qword [rdx + 96] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x10244c88 // mov byte [rsp + 16], cl LONG $0x46100ff2; BYTE $0x68 // movsd xmm0, qword [rsi + 104] - LONG $0xd2950f41 // setne r10b LONG $0x422e0f66; BYTE $0x68 // ucomisd xmm0, qword [rdx + 104] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0f244c88 // mov byte [rsp + 15], cl LONG $0x46100ff2; BYTE $0x70 // movsd xmm0, qword [rsi + 112] LONG $0x422e0f66; BYTE $0x70 // ucomisd xmm0, qword [rdx + 112] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0c244c88 // mov byte [rsp + 12], cl LONG $0x46100ff2; BYTE $0x78 // movsd xmm0, qword [rsi + 120] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] LONG $0x422e0f66; BYTE $0x78 // ucomisd xmm0, qword [rdx + 120] - WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0b244c88 // mov byte [rsp + 11], cl QUAD $0x0000008086100ff2 // movsd xmm0, qword [rsi + 128] QUAD $0x00000080822e0f66 // ucomisd xmm0, qword [rdx + 128] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0e244c88 // mov byte [rsp + 14], cl QUAD $0x0000008886100ff2 // movsd xmm0, qword [rsi + 136] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] QUAD $0x00000088822e0f66 // ucomisd xmm0, qword [rdx + 136] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0a244c88 // mov byte [rsp + 10], cl QUAD $0x0000009086100ff2 // movsd xmm0, qword [rsi + 144] - LONG $0xd6950f41 // setne r14b QUAD $0x00000090822e0f66 // ucomisd xmm0, qword [rdx + 144] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x09244c88 // mov byte [rsp + 9], cl QUAD $0x0000009886100ff2 // movsd xmm0, qword [rsi + 152] - LONG $0xd4950f41 // setne r12b QUAD $0x00000098822e0f66 // ucomisd xmm0, qword [rdx + 152] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd6950f41 // setne r14b + WORD $0x0841; BYTE $0xc6 // or r14b, al QUAD $0x000000a086100ff2 // movsd xmm0, qword [rsi + 160] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] QUAD $0x000000a0822e0f66 // ucomisd xmm0, qword [rdx + 160] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x08244c88 // mov byte [rsp + 8], cl QUAD $0x000000a886100ff2 // movsd xmm0, qword [rsi + 168] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] QUAD $0x000000a8822e0f66 // ucomisd xmm0, qword [rdx + 168] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x07244c88 // mov byte [rsp + 7], cl QUAD $0x000000b086100ff2 // movsd xmm0, qword [rsi + 176] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] QUAD $0x000000b0822e0f66 // ucomisd xmm0, qword [rdx + 176] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x05244c88 // mov byte [rsp + 5], cl QUAD $0x000000b886100ff2 // movsd xmm0, qword [rsi + 184] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] QUAD $0x000000b8822e0f66 // ucomisd xmm0, qword [rdx + 184] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f41 // setne r15b + WORD $0x0841; BYTE $0xc7 // or r15b, al QUAD $0x000000c086100ff2 // movsd xmm0, qword [rsi + 192] - LONG $0xd0950f41 // setne r8b QUAD $0x000000c0822e0f66 // ucomisd xmm0, qword [rdx + 192] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x06244c88 // mov byte [rsp + 6], cl QUAD $0x000000c886100ff2 // movsd xmm0, qword [rsi + 200] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] QUAD $0x000000c8822e0f66 // ucomisd xmm0, qword [rdx + 200] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl QUAD $0x000000d086100ff2 // movsd xmm0, qword [rsi + 208] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] QUAD $0x000000d0822e0f66 // ucomisd xmm0, qword [rdx + 208] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd3950f41 // setne r11b + WORD $0x0841; BYTE $0xc3 // or r11b, al QUAD $0x000000d886100ff2 // movsd xmm0, qword [rsi + 216] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] QUAD $0x000000d8822e0f66 // ucomisd xmm0, qword [rdx + 216] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd2950f41 // setne r10b + WORD $0x0841; BYTE $0xc2 // or r10b, al QUAD $0x000000e086100ff2 // movsd xmm0, qword [rsi + 224] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] QUAD $0x000000e0822e0f66 // ucomisd xmm0, qword [rdx + 224] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x04244c88 // mov byte [rsp + 4], cl QUAD $0x000000e886100ff2 // movsd xmm0, qword [rsi + 232] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] QUAD $0x000000e8822e0f66 // ucomisd xmm0, qword [rdx + 232] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl QUAD $0x000000f086100ff2 // movsd xmm0, qword [rsi + 240] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] QUAD $0x000000f0822e0f66 // ucomisd xmm0, qword [rdx + 240] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd1950f41 // setne r9b + WORD $0x0841; BYTE $0xc1 // or r9b, al QUAD $0x000000f886100ff2 // movsd xmm0, qword [rsi + 248] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 QUAD $0x000000f8822e0f66 // ucomisd xmm0, qword [rdx + 248] - LONG $0xd7950f40 // setne dil + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd0950f41 // setne r8b + WORD $0x0841; BYTE $0xc0 // or r8b, al + LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] WORD $0xc000 // add al, al - LONG $0x04244402 // add al, byte [rsp + 4] + LONG $0x15244402 // add al, byte [rsp + 21] + LONG $0x05e7c040 // shl dil, 5 LONG $0x06e5c041 // shl r13b, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0845; BYTE $0xef // or r15b, r13b - LONG $0x6cb60f44; WORD $0x0524 // movzx r13d, byte [rsp + 5] - LONG $0x02e5c041 // shl r13b, 2 - WORD $0x0841; BYTE $0xc5 // or r13b, al - WORD $0x8944; BYTE $0xe8 // mov eax, r13d - WORD $0xc900 // add cl, cl - LONG $0x08244c02 // add cl, byte [rsp + 8] + WORD $0x0841; BYTE $0xfd // or r13b, dil + WORD $0x8944; BYTE $0xef // mov edi, r13d + LONG $0x244cb60f; BYTE $0x14 // movzx ecx, byte [rsp + 20] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xc108 // or cl, al + WORD $0xd889 // mov eax, ebx + WORD $0xd800 // add al, bl + LONG $0x13244402 // add al, byte [rsp + 19] + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x2444b60f; BYTE $0x03 // movzx eax, byte [rsp + 3] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x03244488 // mov byte [rsp + 3], al + LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x17 // movzx eax, byte [rsp + 23] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + LONG $0x245cb60f; BYTE $0x11 // movzx ebx, byte [rsp + 17] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0840; BYTE $0xfb // or bl, dil LONG $0x6cb60f44; WORD $0x1624 // movzx r13d, byte [rsp + 22] - LONG $0x03e5c041 // shl r13b, 3 + LONG $0x04e5c041 // shl r13b, 4 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0x0844; BYTE $0xe9 // or cl, r13b - WORD $0x8941; BYTE $0xcd // mov r13d, ecx - LONG $0x03e3c041 // shl r11b, 3 - WORD $0x0845; BYTE $0xcb // or r11b, r9b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xe9 // or cl, r13b - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xda // or r10b, r11b - LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0844; BYTE $0xd0 // or al, r10b - LONG $0x4cb60f44; WORD $0x0624 // movzx r9d, byte [rsp + 6] - LONG $0x06e1c041 // shl r9b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xcb // or bl, r9b - WORD $0x0841; BYTE $0xcf // or r15b, cl - WORD $0xc308 // or bl, al - WORD $0x0045; BYTE $0xf6 // add r14b, r14b - LONG $0x24740244; BYTE $0x0e // add r14b, byte [rsp + 14] - LONG $0x02e4c041 // shl r12b, 2 - WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0a // movzx eax, byte [rsp + 10] + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc789 // mov edi, eax + LONG $0x245cb60f; BYTE $0x0f // movzx ebx, byte [rsp + 15] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x3e // mov byte [r14], r15b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x0a // movzx ebx, byte [rsp + 10] + WORD $0xdb00 // add bl, bl + LONG $0x0e245c02 // add bl, byte [rsp + 14] + LONG $0x244cb60f; BYTE $0x09 // movzx ecx, byte [rsp + 9] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xd908 // or cl, bl + LONG $0x03e6c041 // shl r14b, 3 + WORD $0x0841; BYTE $0xce // or r14b, cl + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xf3 // or bl, r14b + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x74b60f44; WORD $0x0324 // movzx r14d, byte [rsp + 3] + WORD $0x0845; BYTE $0xee // or r14b, r13b + LONG $0x6cb60f44; WORD $0x0724 // movzx r13d, byte [rsp + 7] + LONG $0x05e5c041 // shl r13b, 5 + LONG $0x244cb60f; BYTE $0x05 // movzx ecx, byte [rsp + 5] WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x0844; BYTE $0xe9 // or cl, r13b + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x07e7c041 // shl r15b, 7 + WORD $0x0841; BYTE $0xcf // or r15b, cl + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] + WORD $0xc900 // add cl, cl + LONG $0x06244c02 // add cl, byte [rsp + 6] + LONG $0x02e3c041 // shl r11b, 2 + WORD $0x0841; BYTE $0xcb // or r11b, cl + LONG $0x03e2c041 // shl r10b, 3 + WORD $0x0845; BYTE $0xda // or r10b, r11b + LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0x0844; BYTE $0xd1 // or cl, r10b + LONG $0x24348845 // mov byte [r12], r14b + LONG $0x245cb60f; BYTE $0x28 // movzx ebx, byte [rsp + 40] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e1c041 // shl r9b, 6 + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x24448841; BYTE $0x01 // mov byte [r12 + 1], al LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xc8 // or r8b, r9b WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl - WORD $0x0841; BYTE $0xc0 // or r8b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x14244402 // add al, byte [rsp + 20] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x13 // movzx ecx, byte [rsp + 19] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xc108 // or cl, al - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xc7 // or dil, al - WORD $0x0840; BYTE $0xcf // or dil, cl - LONG $0x02468845 // mov byte [r14 + 2], r8b - LONG $0x037e8841 // mov byte [r14 + 3], dil + LONG $0x247c8845; BYTE $0x02 // mov byte [r12 + 2], r15b + LONG $0x24448845; BYTE $0x03 // mov byte [r12 + 3], r8b LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff28 // add qword [rsp + 40], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 JNE LBB3_52 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] LBB3_54: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_56: + LONG $0x01498d4c // lea r9, [rcx + 1] LONG $0x04100ff2; BYTE $0xce // movsd xmm0, qword [rsi + 8*rcx] LONG $0x042e0f66; BYTE $0xca // ucomisd xmm0, qword [rdx + 8*rcx] - LONG $0x01418d4c // lea r8, [rcx + 1] - WORD $0x950f; BYTE $0xd3 // setne bl - WORD $0xdbf6 // neg bl + WORD $0x9a0f; BYTE $0xd3 // setp bl + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xd808 // or al, bl + WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] - WORD $0x3044; BYTE $0xcb // xor bl, r9b + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] + WORD $0x3044; BYTE $0xc0 // xor al, r8b WORD $0xe180; BYTE $0x07 // and cl, 7 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0xd820 // and al, bl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al - WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xc3 // xor bl, r8b + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl + WORD $0x894c; BYTE $0xc9 // mov rcx, r9 + WORD $0x394d; BYTE $0xce // cmp r14, r9 JNE LBB3_56 JMP LBB3_123 @@ -15613,16 +16360,16 @@ LBB3_2: JE LBB3_57 WORD $0xff83; BYTE $0x03 // cmp edi, 3 JNE LBB3_123 - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_8 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB3_6: WORD $0xb60f; BYTE $0x0e // movzx ecx, byte [rsi] @@ -15635,7 +16382,7 @@ LBB3_6: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -15644,49 +16391,49 @@ LBB3_6: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB3_6 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_8: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_12 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 + LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 LBB3_10: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0xb60f; BYTE $0x06 // movzx eax, byte [rsi] LONG $0x014eb60f // movzx ecx, byte [rsi + 1] WORD $0x023a // cmp al, byte [rdx] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] WORD $0x4a3a; BYTE $0x01 // cmp cl, byte [rdx + 1] - WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0x950f; BYTE $0xd3 // setne bl LONG $0x0246b60f // movzx eax, byte [rsi + 2] WORD $0x423a; BYTE $0x02 // cmp al, byte [rdx + 2] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] + LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] LONG $0x0346b60f // movzx eax, byte [rsi + 3] WORD $0x423a; BYTE $0x03 // cmp al, byte [rdx + 3] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] + LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] LONG $0x0446b60f // movzx eax, byte [rsi + 4] WORD $0x423a; BYTE $0x04 // cmp al, byte [rdx + 4] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] LONG $0x0546b60f // movzx eax, byte [rsi + 5] WORD $0x423a; BYTE $0x05 // cmp al, byte [rdx + 5] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + LONG $0x2454950f; BYTE $0x03 // setne byte [rsp + 3] LONG $0x0646b60f // movzx eax, byte [rsi + 6] WORD $0x423a; BYTE $0x06 // cmp al, byte [rdx + 6] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] + LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] LONG $0x0746b60f // movzx eax, byte [rsi + 7] WORD $0x423a; BYTE $0x07 // cmp al, byte [rdx + 7] LONG $0xd7950f41 // setne r15b LONG $0x0846b60f // movzx eax, byte [rsi + 8] WORD $0x423a; BYTE $0x08 // cmp al, byte [rdx + 8] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x0946b60f // movzx eax, byte [rsi + 9] WORD $0x423a; BYTE $0x09 // cmp al, byte [rdx + 9] LONG $0xd7950f40 // setne dil @@ -15701,16 +16448,16 @@ LBB3_10: LONG $0xd6950f41 // setne r14b LONG $0x0d46b60f // movzx eax, byte [rsi + 13] WORD $0x423a; BYTE $0x0d // cmp al, byte [rdx + 13] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] + LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] LONG $0x0e46b60f // movzx eax, byte [rsi + 14] WORD $0x423a; BYTE $0x0e // cmp al, byte [rdx + 14] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] + LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] LONG $0x0f46b60f // movzx eax, byte [rsi + 15] WORD $0x423a; BYTE $0x0f // cmp al, byte [rdx + 15] - WORD $0x950f; BYTE $0xd3 // setne bl + LONG $0xd0950f41 // setne r8b LONG $0x1046b60f // movzx eax, byte [rsi + 16] WORD $0x423a; BYTE $0x10 // cmp al, byte [rdx + 16] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] + LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] LONG $0x1146b60f // movzx eax, byte [rsi + 17] WORD $0x423a; BYTE $0x11 // cmp al, byte [rdx + 17] LONG $0xd4950f41 // setne r12b @@ -15719,144 +16466,144 @@ LBB3_10: LONG $0xd5950f41 // setne r13b LONG $0x1346b60f // movzx eax, byte [rsi + 19] WORD $0x423a; BYTE $0x13 // cmp al, byte [rdx + 19] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] + LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] LONG $0x1446b60f // movzx eax, byte [rsi + 20] WORD $0x423a; BYTE $0x14 // cmp al, byte [rdx + 20] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] LONG $0x1546b60f // movzx eax, byte [rsi + 21] WORD $0x423a; BYTE $0x15 // cmp al, byte [rdx + 21] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] + LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] LONG $0x1646b60f // movzx eax, byte [rsi + 22] WORD $0x423a; BYTE $0x16 // cmp al, byte [rdx + 22] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] LONG $0x1746b60f // movzx eax, byte [rsi + 23] WORD $0x423a; BYTE $0x17 // cmp al, byte [rdx + 23] LONG $0xd1950f41 // setne r9b LONG $0x1846b60f // movzx eax, byte [rsi + 24] WORD $0x423a; BYTE $0x18 // cmp al, byte [rdx + 24] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] + LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] LONG $0x1946b60f // movzx eax, byte [rsi + 25] WORD $0x423a; BYTE $0x19 // cmp al, byte [rdx + 25] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] + LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] LONG $0x1a46b60f // movzx eax, byte [rsi + 26] WORD $0x423a; BYTE $0x1a // cmp al, byte [rdx + 26] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] + LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] LONG $0x1b46b60f // movzx eax, byte [rsi + 27] WORD $0x423a; BYTE $0x1b // cmp al, byte [rdx + 27] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] + LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0x1c46b60f // movzx eax, byte [rsi + 28] WORD $0x423a; BYTE $0x1c // cmp al, byte [rdx + 28] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] LONG $0x1d46b60f // movzx eax, byte [rsi + 29] WORD $0x423a; BYTE $0x1d // cmp al, byte [rdx + 29] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] + LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x1e46b60f // movzx eax, byte [rsi + 30] WORD $0x423a; BYTE $0x1e // cmp al, byte [rdx + 30] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] + LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] LONG $0x1f46b60f // movzx eax, byte [rsi + 31] LONG $0x20c68348 // add rsi, 32 WORD $0x423a; BYTE $0x1f // cmp al, byte [rdx + 31] - LONG $0xd0950f41 // setne r8b - WORD $0xc900 // add cl, cl - LONG $0x28244c02 // add cl, byte [rsp + 40] - WORD $0xc889 // mov eax, ecx - LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xdb00 // add bl, bl + LONG $0x04245c02 // add bl, byte [rsp + 4] + WORD $0xd889 // mov eax, ebx + LONG $0x245cb60f; BYTE $0x05 // movzx ebx, byte [rsp + 5] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xcf // or r15b, cl - LONG $0x244cb60f; BYTE $0x14 // movzx ecx, byte [rsp + 20] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x245cb60f; BYTE $0x15 // movzx ebx, byte [rsp + 21] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx WORD $0x0040; BYTE $0xff // add dil, dil - LONG $0x247c0240; BYTE $0x07 // add dil, byte [rsp + 7] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x247c0240; BYTE $0x08 // add dil, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e2c041 // shl r10b, 2 WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0xcf89 // mov edi, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0xdf89 // mov edi, ebx LONG $0x03e3c041 // shl r11b, 3 WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0840; BYTE $0xf9 // or cl, dil + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xfb // or bl, dil LONG $0x04e6c041 // shl r14b, 4 WORD $0x0845; BYTE $0xde // or r14b, r11b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x247cb60f; BYTE $0x06 // movzx edi, byte [rsp + 6] + LONG $0x247cb60f; BYTE $0x07 // movzx edi, byte [rsp + 7] LONG $0x06e7c040 // shl dil, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0840; BYTE $0xfb // or bl, dil - WORD $0x0841; BYTE $0xcf // or r15b, cl - WORD $0xc308 // or bl, al + LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + WORD $0x0841; BYTE $0xdf // or r15b, bl + WORD $0x0841; BYTE $0xc0 // or r8b, al WORD $0x0045; BYTE $0xe4 // add r12b, r12b - LONG $0x24640244; BYTE $0x0d // add r12b, byte [rsp + 13] + LONG $0x24640244; BYTE $0x0e // add r12b, byte [rsp + 14] LONG $0x02e5c041 // shl r13b, 2 WORD $0x0845; BYTE $0xe5 // or r13b, r12b - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xe8 // or al, r13b - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0a // movzx eax, byte [rsp + 10] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x3e // mov byte [r14], r15b - LONG $0x244cb60f; BYTE $0x0b // movzx ecx, byte [rsp + 11] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x243c8845 // mov byte [r12], r15b + LONG $0x245cb60f; BYTE $0x0c // movzx ebx, byte [rsp + 12] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x24448845; BYTE $0x01 // mov byte [r12 + 1], r8b WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] + LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x12 // movzx ecx, byte [rsp + 18] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xc8 // or r8b, cl - WORD $0x0841; BYTE $0xc0 // or r8b, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x03468845 // mov byte [r14 + 3], r8b + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x13 // movzx ebx, byte [rsp + 19] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x20c28348 // add rdx, 32 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff28 // add qword [rsp + 40], -1 JNE LBB3_10 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] LBB3_12: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_14: @@ -15867,16 +16614,16 @@ LBB3_14: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB3_14 JMP LBB3_123 @@ -15885,16 +16632,16 @@ LBB3_30: JE LBB3_90 WORD $0xff83; BYTE $0x08 // cmp edi, 8 JNE LBB3_123 - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_36 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB3_34: WORD $0x8b48; BYTE $0x0e // mov rcx, qword [rsi] @@ -15907,7 +16654,7 @@ LBB3_34: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -15916,49 +16663,49 @@ LBB3_34: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB3_34 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_36: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_40 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB3_38: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0x8b48; BYTE $0x06 // mov rax, qword [rsi] LONG $0x084e8b48 // mov rcx, qword [rsi + 8] WORD $0x3b48; BYTE $0x02 // cmp rax, qword [rdx] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] LONG $0x084a3b48 // cmp rcx, qword [rdx + 8] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x10468b48 // mov rax, qword [rsi + 16] LONG $0x10423b48 // cmp rax, qword [rdx + 16] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] + LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] LONG $0x18468b48 // mov rax, qword [rsi + 24] LONG $0x18423b48 // cmp rax, qword [rdx + 24] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] + LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] LONG $0x20468b48 // mov rax, qword [rsi + 32] LONG $0x20423b48 // cmp rax, qword [rdx + 32] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] LONG $0x28468b48 // mov rax, qword [rsi + 40] LONG $0x28423b48 // cmp rax, qword [rdx + 40] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + LONG $0x2454950f; BYTE $0x03 // setne byte [rsp + 3] LONG $0x30468b48 // mov rax, qword [rsi + 48] LONG $0x30423b48 // cmp rax, qword [rdx + 48] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] + LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] LONG $0x38468b48 // mov rax, qword [rsi + 56] LONG $0x38423b48 // cmp rax, qword [rdx + 56] LONG $0xd5950f41 // setne r13b LONG $0x40468b48 // mov rax, qword [rsi + 64] LONG $0x40423b48 // cmp rax, qword [rdx + 64] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] LONG $0x48468b48 // mov rax, qword [rsi + 72] LONG $0x48423b48 // cmp rax, qword [rdx + 72] LONG $0xd0950f41 // setne r8b @@ -15970,165 +16717,165 @@ LBB3_38: LONG $0xd7950f41 // setne r15b LONG $0x60468b48 // mov rax, qword [rsi + 96] LONG $0x60423b48 // cmp rax, qword [rdx + 96] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] + LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] LONG $0x68468b48 // mov rax, qword [rsi + 104] LONG $0x68423b48 // cmp rax, qword [rdx + 104] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] + LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] LONG $0x70468b48 // mov rax, qword [rsi + 112] LONG $0x70423b48 // cmp rax, qword [rdx + 112] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x78468b48 // mov rax, qword [rsi + 120] LONG $0x78423b48 // cmp rax, qword [rdx + 120] - WORD $0x950f; BYTE $0xd3 // setne bl + LONG $0xd7950f40 // setne dil LONG $0x80868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 128] - LONG $0x888e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 136] + LONG $0x889e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 136] LONG $0x80823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 128] LONG $0x90868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 144] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] - LONG $0x888a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 136] - LONG $0x988e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 152] + LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x889a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 136] + LONG $0x989e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 152] LONG $0xd2950f41 // setne r10b LONG $0x90823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 144] LONG $0xa0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 160] LONG $0xd6950f41 // setne r14b - LONG $0x988a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 152] - LONG $0xa88e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 168] + LONG $0x989a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 152] + LONG $0xa89e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 168] LONG $0xd4950f41 // setne r12b LONG $0xa0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 160] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] - LONG $0xa88a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 168] + LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0xa89a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 168] LONG $0xb0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 176] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] LONG $0xb0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 176] LONG $0xb8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 184] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] + LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] LONG $0xb8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 184] LONG $0xc0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 192] LONG $0xd1950f41 // setne r9b LONG $0xc0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 192] LONG $0xc8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 200] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] + LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] LONG $0xc8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 200] LONG $0xd0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 208] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] + LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] LONG $0xd0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 208] LONG $0xd8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 216] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] + LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] LONG $0xd8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 216] LONG $0xe0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 224] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] + LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0xe0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 224] LONG $0xe8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 232] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] LONG $0xe8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 232] LONG $0xf0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 240] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] + LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] LONG $0xf0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 240] LONG $0xf8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 248] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] + LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 LONG $0xf8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 248] - LONG $0xd7950f40 // setne dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x950f; BYTE $0xd1 // setne cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB3_38 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB3_40: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_42: @@ -16139,30 +16886,30 @@ LBB3_42: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB3_42 JMP LBB3_123 LBB3_68: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_72 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB3_70: WORD $0xb70f; BYTE $0x0e // movzx ecx, word [rsi] @@ -16175,7 +16922,7 @@ LBB3_70: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -16184,49 +16931,49 @@ LBB3_70: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB3_70 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_72: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_76 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB3_74: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0xb70f; BYTE $0x06 // movzx eax, word [rsi] LONG $0x024eb70f // movzx ecx, word [rsi + 2] WORD $0x3b66; BYTE $0x02 // cmp ax, word [rdx] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] LONG $0x024a3b66 // cmp cx, word [rdx + 2] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x0446b70f // movzx eax, word [rsi + 4] LONG $0x04423b66 // cmp ax, word [rdx + 4] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] + LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] LONG $0x0646b70f // movzx eax, word [rsi + 6] LONG $0x06423b66 // cmp ax, word [rdx + 6] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] + LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] LONG $0x0846b70f // movzx eax, word [rsi + 8] LONG $0x08423b66 // cmp ax, word [rdx + 8] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] LONG $0x0a46b70f // movzx eax, word [rsi + 10] LONG $0x0a423b66 // cmp ax, word [rdx + 10] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + LONG $0x2454950f; BYTE $0x03 // setne byte [rsp + 3] LONG $0x0c46b70f // movzx eax, word [rsi + 12] LONG $0x0c423b66 // cmp ax, word [rdx + 12] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] + LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] LONG $0x0e46b70f // movzx eax, word [rsi + 14] LONG $0x0e423b66 // cmp ax, word [rdx + 14] LONG $0xd5950f41 // setne r13b LONG $0x1046b70f // movzx eax, word [rsi + 16] LONG $0x10423b66 // cmp ax, word [rdx + 16] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] LONG $0x1246b70f // movzx eax, word [rsi + 18] LONG $0x12423b66 // cmp ax, word [rdx + 18] LONG $0xd0950f41 // setne r8b @@ -16238,165 +16985,165 @@ LBB3_74: LONG $0xd7950f41 // setne r15b LONG $0x1846b70f // movzx eax, word [rsi + 24] LONG $0x18423b66 // cmp ax, word [rdx + 24] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] + LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] LONG $0x1a46b70f // movzx eax, word [rsi + 26] LONG $0x1a423b66 // cmp ax, word [rdx + 26] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] + LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] LONG $0x1c46b70f // movzx eax, word [rsi + 28] LONG $0x1c423b66 // cmp ax, word [rdx + 28] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x1e46b70f // movzx eax, word [rsi + 30] LONG $0x1e423b66 // cmp ax, word [rdx + 30] - WORD $0x950f; BYTE $0xd3 // setne bl + LONG $0xd7950f40 // setne dil LONG $0x2046b70f // movzx eax, word [rsi + 32] - LONG $0x224eb70f // movzx ecx, word [rsi + 34] + LONG $0x225eb70f // movzx ebx, word [rsi + 34] LONG $0x20423b66 // cmp ax, word [rdx + 32] LONG $0x2446b70f // movzx eax, word [rsi + 36] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] - LONG $0x224a3b66 // cmp cx, word [rdx + 34] - LONG $0x264eb70f // movzx ecx, word [rsi + 38] + LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x225a3b66 // cmp bx, word [rdx + 34] + LONG $0x265eb70f // movzx ebx, word [rsi + 38] LONG $0xd2950f41 // setne r10b LONG $0x24423b66 // cmp ax, word [rdx + 36] LONG $0x2846b70f // movzx eax, word [rsi + 40] LONG $0xd6950f41 // setne r14b - LONG $0x264a3b66 // cmp cx, word [rdx + 38] - LONG $0x2a4eb70f // movzx ecx, word [rsi + 42] + LONG $0x265a3b66 // cmp bx, word [rdx + 38] + LONG $0x2a5eb70f // movzx ebx, word [rsi + 42] LONG $0xd4950f41 // setne r12b LONG $0x28423b66 // cmp ax, word [rdx + 40] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] - LONG $0x2a4a3b66 // cmp cx, word [rdx + 42] + LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2a5a3b66 // cmp bx, word [rdx + 42] LONG $0x2c46b70f // movzx eax, word [rsi + 44] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] LONG $0x2c423b66 // cmp ax, word [rdx + 44] LONG $0x2e46b70f // movzx eax, word [rsi + 46] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] + LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] LONG $0x2e423b66 // cmp ax, word [rdx + 46] LONG $0x3046b70f // movzx eax, word [rsi + 48] LONG $0xd1950f41 // setne r9b LONG $0x30423b66 // cmp ax, word [rdx + 48] LONG $0x3246b70f // movzx eax, word [rsi + 50] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] + LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] LONG $0x32423b66 // cmp ax, word [rdx + 50] LONG $0x3446b70f // movzx eax, word [rsi + 52] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] + LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] LONG $0x34423b66 // cmp ax, word [rdx + 52] LONG $0x3646b70f // movzx eax, word [rsi + 54] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] + LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] LONG $0x36423b66 // cmp ax, word [rdx + 54] LONG $0x3846b70f // movzx eax, word [rsi + 56] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] + LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0x38423b66 // cmp ax, word [rdx + 56] LONG $0x3a46b70f // movzx eax, word [rsi + 58] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] LONG $0x3a423b66 // cmp ax, word [rdx + 58] LONG $0x3c46b70f // movzx eax, word [rsi + 60] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] + LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] LONG $0x3c423b66 // cmp ax, word [rdx + 60] LONG $0x3e46b70f // movzx eax, word [rsi + 62] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] + LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x40c68348 // add rsi, 64 LONG $0x3e423b66 // cmp ax, word [rdx + 62] - LONG $0xd7950f40 // setne dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x950f; BYTE $0xd1 // setne cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x40c28348 // add rdx, 64 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB3_74 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB3_76: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_78: @@ -16407,30 +17154,30 @@ LBB3_78: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB3_78 JMP LBB3_123 LBB3_79: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_83 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB3_81: WORD $0xb70f; BYTE $0x0e // movzx ecx, word [rsi] @@ -16443,7 +17190,7 @@ LBB3_81: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -16452,49 +17199,49 @@ LBB3_81: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB3_81 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_83: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_87 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB3_85: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0xb70f; BYTE $0x06 // movzx eax, word [rsi] LONG $0x024eb70f // movzx ecx, word [rsi + 2] WORD $0x3b66; BYTE $0x02 // cmp ax, word [rdx] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] LONG $0x024a3b66 // cmp cx, word [rdx + 2] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x0446b70f // movzx eax, word [rsi + 4] LONG $0x04423b66 // cmp ax, word [rdx + 4] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] + LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] LONG $0x0646b70f // movzx eax, word [rsi + 6] LONG $0x06423b66 // cmp ax, word [rdx + 6] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] + LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] LONG $0x0846b70f // movzx eax, word [rsi + 8] LONG $0x08423b66 // cmp ax, word [rdx + 8] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] LONG $0x0a46b70f // movzx eax, word [rsi + 10] LONG $0x0a423b66 // cmp ax, word [rdx + 10] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + LONG $0x2454950f; BYTE $0x03 // setne byte [rsp + 3] LONG $0x0c46b70f // movzx eax, word [rsi + 12] LONG $0x0c423b66 // cmp ax, word [rdx + 12] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] + LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] LONG $0x0e46b70f // movzx eax, word [rsi + 14] LONG $0x0e423b66 // cmp ax, word [rdx + 14] LONG $0xd5950f41 // setne r13b LONG $0x1046b70f // movzx eax, word [rsi + 16] LONG $0x10423b66 // cmp ax, word [rdx + 16] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] LONG $0x1246b70f // movzx eax, word [rsi + 18] LONG $0x12423b66 // cmp ax, word [rdx + 18] LONG $0xd0950f41 // setne r8b @@ -16506,165 +17253,165 @@ LBB3_85: LONG $0xd7950f41 // setne r15b LONG $0x1846b70f // movzx eax, word [rsi + 24] LONG $0x18423b66 // cmp ax, word [rdx + 24] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] + LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] LONG $0x1a46b70f // movzx eax, word [rsi + 26] LONG $0x1a423b66 // cmp ax, word [rdx + 26] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] + LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] LONG $0x1c46b70f // movzx eax, word [rsi + 28] LONG $0x1c423b66 // cmp ax, word [rdx + 28] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x1e46b70f // movzx eax, word [rsi + 30] LONG $0x1e423b66 // cmp ax, word [rdx + 30] - WORD $0x950f; BYTE $0xd3 // setne bl + LONG $0xd7950f40 // setne dil LONG $0x2046b70f // movzx eax, word [rsi + 32] - LONG $0x224eb70f // movzx ecx, word [rsi + 34] + LONG $0x225eb70f // movzx ebx, word [rsi + 34] LONG $0x20423b66 // cmp ax, word [rdx + 32] LONG $0x2446b70f // movzx eax, word [rsi + 36] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] - LONG $0x224a3b66 // cmp cx, word [rdx + 34] - LONG $0x264eb70f // movzx ecx, word [rsi + 38] + LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x225a3b66 // cmp bx, word [rdx + 34] + LONG $0x265eb70f // movzx ebx, word [rsi + 38] LONG $0xd2950f41 // setne r10b LONG $0x24423b66 // cmp ax, word [rdx + 36] LONG $0x2846b70f // movzx eax, word [rsi + 40] LONG $0xd6950f41 // setne r14b - LONG $0x264a3b66 // cmp cx, word [rdx + 38] - LONG $0x2a4eb70f // movzx ecx, word [rsi + 42] + LONG $0x265a3b66 // cmp bx, word [rdx + 38] + LONG $0x2a5eb70f // movzx ebx, word [rsi + 42] LONG $0xd4950f41 // setne r12b LONG $0x28423b66 // cmp ax, word [rdx + 40] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] - LONG $0x2a4a3b66 // cmp cx, word [rdx + 42] + LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2a5a3b66 // cmp bx, word [rdx + 42] LONG $0x2c46b70f // movzx eax, word [rsi + 44] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] LONG $0x2c423b66 // cmp ax, word [rdx + 44] LONG $0x2e46b70f // movzx eax, word [rsi + 46] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] + LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] LONG $0x2e423b66 // cmp ax, word [rdx + 46] LONG $0x3046b70f // movzx eax, word [rsi + 48] LONG $0xd1950f41 // setne r9b LONG $0x30423b66 // cmp ax, word [rdx + 48] LONG $0x3246b70f // movzx eax, word [rsi + 50] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] + LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] LONG $0x32423b66 // cmp ax, word [rdx + 50] LONG $0x3446b70f // movzx eax, word [rsi + 52] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] + LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] LONG $0x34423b66 // cmp ax, word [rdx + 52] LONG $0x3646b70f // movzx eax, word [rsi + 54] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] + LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] LONG $0x36423b66 // cmp ax, word [rdx + 54] LONG $0x3846b70f // movzx eax, word [rsi + 56] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] + LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0x38423b66 // cmp ax, word [rdx + 56] LONG $0x3a46b70f // movzx eax, word [rsi + 58] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] LONG $0x3a423b66 // cmp ax, word [rdx + 58] LONG $0x3c46b70f // movzx eax, word [rsi + 60] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] + LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] LONG $0x3c423b66 // cmp ax, word [rdx + 60] LONG $0x3e46b70f // movzx eax, word [rsi + 62] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] + LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x40c68348 // add rsi, 64 LONG $0x3e423b66 // cmp ax, word [rdx + 62] - LONG $0xd7950f40 // setne dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x950f; BYTE $0xd1 // setne cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x40c28348 // add rdx, 64 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB3_85 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB3_87: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_89: @@ -16675,30 +17422,30 @@ LBB3_89: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB3_89 JMP LBB3_123 LBB3_101: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_105 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB3_103: WORD $0x8b48; BYTE $0x0e // mov rcx, qword [rsi] @@ -16711,7 +17458,7 @@ LBB3_103: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -16720,49 +17467,49 @@ LBB3_103: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB3_103 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_105: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_109 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB3_107: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0x8b48; BYTE $0x06 // mov rax, qword [rsi] LONG $0x084e8b48 // mov rcx, qword [rsi + 8] WORD $0x3b48; BYTE $0x02 // cmp rax, qword [rdx] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] LONG $0x084a3b48 // cmp rcx, qword [rdx + 8] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x10468b48 // mov rax, qword [rsi + 16] LONG $0x10423b48 // cmp rax, qword [rdx + 16] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] + LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] LONG $0x18468b48 // mov rax, qword [rsi + 24] LONG $0x18423b48 // cmp rax, qword [rdx + 24] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] + LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] LONG $0x20468b48 // mov rax, qword [rsi + 32] LONG $0x20423b48 // cmp rax, qword [rdx + 32] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] LONG $0x28468b48 // mov rax, qword [rsi + 40] LONG $0x28423b48 // cmp rax, qword [rdx + 40] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + LONG $0x2454950f; BYTE $0x03 // setne byte [rsp + 3] LONG $0x30468b48 // mov rax, qword [rsi + 48] LONG $0x30423b48 // cmp rax, qword [rdx + 48] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] + LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] LONG $0x38468b48 // mov rax, qword [rsi + 56] LONG $0x38423b48 // cmp rax, qword [rdx + 56] LONG $0xd5950f41 // setne r13b LONG $0x40468b48 // mov rax, qword [rsi + 64] LONG $0x40423b48 // cmp rax, qword [rdx + 64] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] LONG $0x48468b48 // mov rax, qword [rsi + 72] LONG $0x48423b48 // cmp rax, qword [rdx + 72] LONG $0xd0950f41 // setne r8b @@ -16774,165 +17521,165 @@ LBB3_107: LONG $0xd7950f41 // setne r15b LONG $0x60468b48 // mov rax, qword [rsi + 96] LONG $0x60423b48 // cmp rax, qword [rdx + 96] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] + LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] LONG $0x68468b48 // mov rax, qword [rsi + 104] LONG $0x68423b48 // cmp rax, qword [rdx + 104] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] + LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] LONG $0x70468b48 // mov rax, qword [rsi + 112] LONG $0x70423b48 // cmp rax, qword [rdx + 112] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x78468b48 // mov rax, qword [rsi + 120] LONG $0x78423b48 // cmp rax, qword [rdx + 120] - WORD $0x950f; BYTE $0xd3 // setne bl + LONG $0xd7950f40 // setne dil LONG $0x80868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 128] - LONG $0x888e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 136] + LONG $0x889e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 136] LONG $0x80823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 128] LONG $0x90868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 144] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] - LONG $0x888a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 136] - LONG $0x988e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 152] + LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x889a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 136] + LONG $0x989e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 152] LONG $0xd2950f41 // setne r10b LONG $0x90823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 144] LONG $0xa0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 160] LONG $0xd6950f41 // setne r14b - LONG $0x988a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 152] - LONG $0xa88e8b48; WORD $0x0000; BYTE $0x00 // mov rcx, qword [rsi + 168] + LONG $0x989a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 152] + LONG $0xa89e8b48; WORD $0x0000; BYTE $0x00 // mov rbx, qword [rsi + 168] LONG $0xd4950f41 // setne r12b LONG $0xa0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 160] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] - LONG $0xa88a3b48; WORD $0x0000; BYTE $0x00 // cmp rcx, qword [rdx + 168] + LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0xa89a3b48; WORD $0x0000; BYTE $0x00 // cmp rbx, qword [rdx + 168] LONG $0xb0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 176] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] LONG $0xb0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 176] LONG $0xb8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 184] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] + LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] LONG $0xb8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 184] LONG $0xc0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 192] LONG $0xd1950f41 // setne r9b LONG $0xc0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 192] LONG $0xc8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 200] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] + LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] LONG $0xc8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 200] LONG $0xd0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 208] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] + LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] LONG $0xd0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 208] LONG $0xd8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 216] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] + LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] LONG $0xd8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 216] LONG $0xe0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 224] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] + LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0xe0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 224] LONG $0xe8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 232] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] LONG $0xe8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 232] LONG $0xf0868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 240] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] + LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] LONG $0xf0823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 240] LONG $0xf8868b48; WORD $0x0000; BYTE $0x00 // mov rax, qword [rsi + 248] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] + LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 LONG $0xf8823b48; WORD $0x0000; BYTE $0x00 // cmp rax, qword [rdx + 248] - LONG $0xd7950f40 // setne dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x950f; BYTE $0xd1 // setne cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x00c28148; WORD $0x0001; BYTE $0x00 // add rdx, 256 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB3_107 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB3_109: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_111: @@ -16943,294 +17690,389 @@ LBB3_111: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB3_111 JMP LBB3_123 LBB3_112: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_116 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x634c; BYTE $0xd0 // movsxd r10, eax LBB3_114: LONG $0x06100ff3 // movss xmm0, dword [rsi] LONG $0x04c68348 // add rsi, 4 WORD $0x2e0f; BYTE $0x02 // ucomiss xmm0, dword [rdx] LONG $0x04528d48 // lea rdx, [rdx + 4] - LONG $0xd2950f41 // setne r10b - WORD $0xf641; BYTE $0xda // neg r10b - LONG $0x07788d48 // lea rdi, [rax + 7] - WORD $0x8548; BYTE $0xc0 // test rax, rax - LONG $0xf8490f48 // cmovns rdi, rax + WORD $0x9a0f; BYTE $0xd1 // setp cl + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xcb08 // or bl, cl + WORD $0xdbf6 // neg bl + LONG $0x077a8d49 // lea rdi, [r10 + 7] + WORD $0x854d; BYTE $0xd2 // test r10, r10 + LONG $0xfa490f49 // cmovns rdi, r10 LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] - WORD $0x3045; BYTE $0xc2 // xor r10b, r8b + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] + WORD $0x3044; BYTE $0xc3 // xor bl, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] - WORD $0xc189 // mov ecx, eax + WORD $0x8944; BYTE $0xd1 // mov ecx, r10d WORD $0x2944; BYTE $0xc9 // sub ecx, r9d - LONG $0x000001bb; BYTE $0x00 // mov ebx, 1 - WORD $0xe3d3 // shl ebx, cl - WORD $0x2044; BYTE $0xd3 // and bl, r10b - WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl - LONG $0x01c08348 // add rax, 1 - LONG $0x08f88348 // cmp rax, 8 + LONG $0x000001b8; BYTE $0x00 // mov eax, 1 + WORD $0xe0d3 // shl eax, cl + WORD $0xd820 // and al, bl + WORD $0x3044; BYTE $0xc0 // xor al, r8b + LONG $0x3c048841 // mov byte [r12 + rdi], al + LONG $0x01c28349 // add r10, 1 + LONG $0x08fa8349 // cmp r10, 8 JNE LBB3_114 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_116: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_120 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 - LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 + LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 LBB3_118: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 LONG $0x06100ff3 // movss xmm0, dword [rsi] - LONG $0x4e100ff3; BYTE $0x04 // movss xmm1, dword [rsi + 4] WORD $0x2e0f; BYTE $0x02 // ucomiss xmm0, dword [rdx] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] - LONG $0x044a2e0f // ucomiss xmm1, dword [rdx + 4] - WORD $0x950f; BYTE $0xd0 // setne al + LONG $0x46100ff3; BYTE $0x04 // movss xmm0, dword [rsi + 4] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x15244c88 // mov byte [rsp + 21], cl + LONG $0x04422e0f // ucomiss xmm0, dword [rdx + 4] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0d244c88 // mov byte [rsp + 13], cl LONG $0x46100ff3; BYTE $0x08 // movss xmm0, dword [rsi + 8] LONG $0x08422e0f // ucomiss xmm0, dword [rdx + 8] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x14244c88 // mov byte [rsp + 20], cl LONG $0x46100ff3; BYTE $0x0c // movss xmm0, dword [rsi + 12] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] LONG $0x0c422e0f // ucomiss xmm0, dword [rdx + 12] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x17244c88 // mov byte [rsp + 23], cl LONG $0x46100ff3; BYTE $0x10 // movss xmm0, dword [rsi + 16] LONG $0x10422e0f // ucomiss xmm0, dword [rdx + 16] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x16244c88 // mov byte [rsp + 22], cl LONG $0x46100ff3; BYTE $0x14 // movss xmm0, dword [rsi + 20] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] LONG $0x14422e0f // ucomiss xmm0, dword [rdx + 20] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f40 // setne dil + WORD $0x0840; BYTE $0xc7 // or dil, al LONG $0x46100ff3; BYTE $0x18 // movss xmm0, dword [rsi + 24] LONG $0x18422e0f // ucomiss xmm0, dword [rdx + 24] - LONG $0x46100ff3; BYTE $0x1c // movss xmm0, dword [rsi + 28] + WORD $0x9a0f; BYTE $0xd0 // setp al LONG $0xd5950f41 // setne r13b + WORD $0x0841; BYTE $0xc5 // or r13b, al + LONG $0x46100ff3; BYTE $0x1c // movss xmm0, dword [rsi + 28] LONG $0x1c422e0f // ucomiss xmm0, dword [rdx + 28] - LONG $0xd7950f41 // setne r15b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x03244c88 // mov byte [rsp + 3], cl LONG $0x46100ff3; BYTE $0x20 // movss xmm0, dword [rsi + 32] LONG $0x20422e0f // ucomiss xmm0, dword [rdx + 32] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x13244c88 // mov byte [rsp + 19], cl LONG $0x46100ff3; BYTE $0x24 // movss xmm0, dword [rsi + 36] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x24422e0f // ucomiss xmm0, dword [rdx + 36] - WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xc308 // or bl, al LONG $0x46100ff3; BYTE $0x28 // movss xmm0, dword [rsi + 40] LONG $0x28422e0f // ucomiss xmm0, dword [rdx + 40] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x12244c88 // mov byte [rsp + 18], cl LONG $0x46100ff3; BYTE $0x2c // movss xmm0, dword [rsi + 44] - LONG $0xd1950f41 // setne r9b LONG $0x2c422e0f // ucomiss xmm0, dword [rdx + 44] - LONG $0xd3950f41 // setne r11b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x11244c88 // mov byte [rsp + 17], cl LONG $0x46100ff3; BYTE $0x30 // movss xmm0, dword [rsi + 48] LONG $0x30422e0f // ucomiss xmm0, dword [rdx + 48] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x10244c88 // mov byte [rsp + 16], cl LONG $0x46100ff3; BYTE $0x34 // movss xmm0, dword [rsi + 52] - LONG $0xd2950f41 // setne r10b LONG $0x34422e0f // ucomiss xmm0, dword [rdx + 52] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0f244c88 // mov byte [rsp + 15], cl LONG $0x46100ff3; BYTE $0x38 // movss xmm0, dword [rsi + 56] LONG $0x38422e0f // ucomiss xmm0, dword [rdx + 56] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0c244c88 // mov byte [rsp + 12], cl LONG $0x46100ff3; BYTE $0x3c // movss xmm0, dword [rsi + 60] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] LONG $0x3c422e0f // ucomiss xmm0, dword [rdx + 60] - WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0b244c88 // mov byte [rsp + 11], cl LONG $0x46100ff3; BYTE $0x40 // movss xmm0, dword [rsi + 64] LONG $0x40422e0f // ucomiss xmm0, dword [rdx + 64] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0e244c88 // mov byte [rsp + 14], cl LONG $0x46100ff3; BYTE $0x44 // movss xmm0, dword [rsi + 68] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] LONG $0x44422e0f // ucomiss xmm0, dword [rdx + 68] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x0a244c88 // mov byte [rsp + 10], cl LONG $0x46100ff3; BYTE $0x48 // movss xmm0, dword [rsi + 72] - LONG $0xd6950f41 // setne r14b LONG $0x48422e0f // ucomiss xmm0, dword [rdx + 72] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x09244c88 // mov byte [rsp + 9], cl LONG $0x46100ff3; BYTE $0x4c // movss xmm0, dword [rsi + 76] - LONG $0xd4950f41 // setne r12b LONG $0x4c422e0f // ucomiss xmm0, dword [rdx + 76] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd3950f41 // setne r11b + WORD $0x0841; BYTE $0xc3 // or r11b, al LONG $0x46100ff3; BYTE $0x50 // movss xmm0, dword [rsi + 80] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] LONG $0x50422e0f // ucomiss xmm0, dword [rdx + 80] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x08244c88 // mov byte [rsp + 8], cl LONG $0x46100ff3; BYTE $0x54 // movss xmm0, dword [rsi + 84] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] LONG $0x54422e0f // ucomiss xmm0, dword [rdx + 84] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x07244c88 // mov byte [rsp + 7], cl LONG $0x46100ff3; BYTE $0x58 // movss xmm0, dword [rsi + 88] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] LONG $0x58422e0f // ucomiss xmm0, dword [rdx + 88] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x05244c88 // mov byte [rsp + 5], cl LONG $0x46100ff3; BYTE $0x5c // movss xmm0, dword [rsi + 92] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] LONG $0x5c422e0f // ucomiss xmm0, dword [rdx + 92] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd2950f41 // setne r10b + WORD $0x0841; BYTE $0xc2 // or r10b, al LONG $0x46100ff3; BYTE $0x60 // movss xmm0, dword [rsi + 96] - LONG $0xd0950f41 // setne r8b LONG $0x60422e0f // ucomiss xmm0, dword [rdx + 96] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x06244c88 // mov byte [rsp + 6], cl LONG $0x46100ff3; BYTE $0x64 // movss xmm0, dword [rsi + 100] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] LONG $0x64422e0f // ucomiss xmm0, dword [rdx + 100] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl LONG $0x46100ff3; BYTE $0x68 // movss xmm0, dword [rsi + 104] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] LONG $0x68422e0f // ucomiss xmm0, dword [rdx + 104] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f41 // setne r15b + WORD $0x0841; BYTE $0xc7 // or r15b, al LONG $0x46100ff3; BYTE $0x6c // movss xmm0, dword [rsi + 108] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] LONG $0x6c422e0f // ucomiss xmm0, dword [rdx + 108] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd6950f41 // setne r14b + WORD $0x0841; BYTE $0xc6 // or r14b, al LONG $0x46100ff3; BYTE $0x70 // movss xmm0, dword [rsi + 112] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0x70422e0f // ucomiss xmm0, dword [rdx + 112] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x04244c88 // mov byte [rsp + 4], cl LONG $0x46100ff3; BYTE $0x74 // movss xmm0, dword [rsi + 116] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] LONG $0x74422e0f // ucomiss xmm0, dword [rdx + 116] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl LONG $0x46100ff3; BYTE $0x78 // movss xmm0, dword [rsi + 120] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] LONG $0x78422e0f // ucomiss xmm0, dword [rdx + 120] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd1950f41 // setne r9b + WORD $0x0841; BYTE $0xc1 // or r9b, al LONG $0x46100ff3; BYTE $0x7c // movss xmm0, dword [rsi + 124] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x80ee8348 // sub rsi, -128 LONG $0x7c422e0f // ucomiss xmm0, dword [rdx + 124] - LONG $0xd7950f40 // setne dil + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd0950f41 // setne r8b + WORD $0x0841; BYTE $0xc0 // or r8b, al + LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] WORD $0xc000 // add al, al - LONG $0x04244402 // add al, byte [rsp + 4] + LONG $0x15244402 // add al, byte [rsp + 21] + LONG $0x05e7c040 // shl dil, 5 LONG $0x06e5c041 // shl r13b, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0845; BYTE $0xef // or r15b, r13b - LONG $0x6cb60f44; WORD $0x0524 // movzx r13d, byte [rsp + 5] - LONG $0x02e5c041 // shl r13b, 2 - WORD $0x0841; BYTE $0xc5 // or r13b, al - WORD $0x8944; BYTE $0xe8 // mov eax, r13d - WORD $0xc900 // add cl, cl - LONG $0x08244c02 // add cl, byte [rsp + 8] + WORD $0x0841; BYTE $0xfd // or r13b, dil + WORD $0x8944; BYTE $0xef // mov edi, r13d + LONG $0x244cb60f; BYTE $0x14 // movzx ecx, byte [rsp + 20] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xc108 // or cl, al + WORD $0xd889 // mov eax, ebx + WORD $0xd800 // add al, bl + LONG $0x13244402 // add al, byte [rsp + 19] + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x2444b60f; BYTE $0x03 // movzx eax, byte [rsp + 3] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x03244488 // mov byte [rsp + 3], al + LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x17 // movzx eax, byte [rsp + 23] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + LONG $0x245cb60f; BYTE $0x11 // movzx ebx, byte [rsp + 17] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0840; BYTE $0xfb // or bl, dil LONG $0x6cb60f44; WORD $0x1624 // movzx r13d, byte [rsp + 22] - LONG $0x03e5c041 // shl r13b, 3 + LONG $0x04e5c041 // shl r13b, 4 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0x0844; BYTE $0xe9 // or cl, r13b - WORD $0x8941; BYTE $0xcd // mov r13d, ecx - LONG $0x03e3c041 // shl r11b, 3 - WORD $0x0845; BYTE $0xcb // or r11b, r9b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xe9 // or cl, r13b - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xda // or r10b, r11b - LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0x0844; BYTE $0xd0 // or al, r10b - LONG $0x4cb60f44; WORD $0x0624 // movzx r9d, byte [rsp + 6] - LONG $0x06e1c041 // shl r9b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xcb // or bl, r9b - WORD $0x0841; BYTE $0xcf // or r15b, cl - WORD $0xc308 // or bl, al - WORD $0x0045; BYTE $0xf6 // add r14b, r14b - LONG $0x24740244; BYTE $0x0e // add r14b, byte [rsp + 14] - LONG $0x02e4c041 // shl r12b, 2 - WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0a // movzx eax, byte [rsp + 10] + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xd808 // or al, bl + WORD $0xc789 // mov edi, eax + LONG $0x245cb60f; BYTE $0x0f // movzx ebx, byte [rsp + 15] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x3e // mov byte [r14], r15b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x0a // movzx ebx, byte [rsp + 10] + WORD $0xdb00 // add bl, bl + LONG $0x0e245c02 // add bl, byte [rsp + 14] + LONG $0x244cb60f; BYTE $0x09 // movzx ecx, byte [rsp + 9] + WORD $0xe1c0; BYTE $0x02 // shl cl, 2 + WORD $0xd908 // or cl, bl + LONG $0x03e3c041 // shl r11b, 3 + WORD $0x0841; BYTE $0xcb // or r11b, cl + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xdb // or bl, r11b + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x5cb60f44; WORD $0x0324 // movzx r11d, byte [rsp + 3] + WORD $0x0845; BYTE $0xeb // or r11b, r13b + LONG $0x6cb60f44; WORD $0x0724 // movzx r13d, byte [rsp + 7] + LONG $0x05e5c041 // shl r13b, 5 + LONG $0x244cb60f; BYTE $0x05 // movzx ecx, byte [rsp + 5] WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x0844; BYTE $0xe9 // or cl, r13b + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x07e2c041 // shl r10b, 7 + WORD $0x0841; BYTE $0xca // or r10b, cl + WORD $0x0841; BYTE $0xda // or r10b, bl + LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] + WORD $0xc900 // add cl, cl + LONG $0x06244c02 // add cl, byte [rsp + 6] + LONG $0x02e7c041 // shl r15b, 2 + WORD $0x0841; BYTE $0xcf // or r15b, cl + LONG $0x03e6c041 // shl r14b, 3 + WORD $0x0845; BYTE $0xfe // or r14b, r15b + LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0x0844; BYTE $0xf1 // or cl, r14b + LONG $0x241c8845 // mov byte [r12], r11b + LONG $0x245cb60f; BYTE $0x28 // movzx ebx, byte [rsp + 40] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e1c041 // shl r9b, 6 + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x24448841; BYTE $0x01 // mov byte [r12 + 1], al LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xc8 // or r8b, r9b WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl - WORD $0x0841; BYTE $0xc0 // or r8b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x14244402 // add al, byte [rsp + 20] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x13 // movzx ecx, byte [rsp + 19] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xc108 // or cl, al - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xc7 // or dil, al - WORD $0x0840; BYTE $0xcf // or dil, cl - LONG $0x02468845 // mov byte [r14 + 2], r8b - LONG $0x037e8841 // mov byte [r14 + 3], dil + LONG $0x24548845; BYTE $0x02 // mov byte [r12 + 2], r10b + LONG $0x24448845; BYTE $0x03 // mov byte [r12 + 3], r8b LONG $0x80c28148; WORD $0x0000; BYTE $0x00 // add rdx, 128 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff28 // add qword [rsp + 40], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 JNE LBB3_118 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] LBB3_120: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_122: + LONG $0x01498d4c // lea r9, [rcx + 1] LONG $0x04100ff3; BYTE $0x8e // movss xmm0, dword [rsi + 4*rcx] LONG $0x8a042e0f // ucomiss xmm0, dword [rdx + 4*rcx] - LONG $0x01418d4c // lea r8, [rcx + 1] - WORD $0x950f; BYTE $0xd3 // setne bl - WORD $0xdbf6 // neg bl + WORD $0x9a0f; BYTE $0xd3 // setp bl + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xd808 // or al, bl + WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] - WORD $0x3044; BYTE $0xcb // xor bl, r9b + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] + WORD $0x3044; BYTE $0xc0 // xor al, r8b WORD $0xe180; BYTE $0x07 // and cl, 7 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0xd820 // and al, bl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al - WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xc3 // xor bl, r8b + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl + WORD $0x894c; BYTE $0xc9 // mov rcx, r9 + WORD $0x394d; BYTE $0xce // cmp r14, r9 JNE LBB3_122 JMP LBB3_123 LBB3_57: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_61 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB3_59: WORD $0xb60f; BYTE $0x0e // movzx ecx, byte [rsi] @@ -17243,7 +18085,7 @@ LBB3_59: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -17252,49 +18094,49 @@ LBB3_59: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB3_59 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_61: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_65 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 + LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 LBB3_63: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0xb60f; BYTE $0x06 // movzx eax, byte [rsi] LONG $0x014eb60f // movzx ecx, byte [rsi + 1] WORD $0x023a // cmp al, byte [rdx] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] WORD $0x4a3a; BYTE $0x01 // cmp cl, byte [rdx + 1] - WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0x950f; BYTE $0xd3 // setne bl LONG $0x0246b60f // movzx eax, byte [rsi + 2] WORD $0x423a; BYTE $0x02 // cmp al, byte [rdx + 2] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] + LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] LONG $0x0346b60f // movzx eax, byte [rsi + 3] WORD $0x423a; BYTE $0x03 // cmp al, byte [rdx + 3] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] + LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] LONG $0x0446b60f // movzx eax, byte [rsi + 4] WORD $0x423a; BYTE $0x04 // cmp al, byte [rdx + 4] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] LONG $0x0546b60f // movzx eax, byte [rsi + 5] WORD $0x423a; BYTE $0x05 // cmp al, byte [rdx + 5] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + LONG $0x2454950f; BYTE $0x03 // setne byte [rsp + 3] LONG $0x0646b60f // movzx eax, byte [rsi + 6] WORD $0x423a; BYTE $0x06 // cmp al, byte [rdx + 6] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] + LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] LONG $0x0746b60f // movzx eax, byte [rsi + 7] WORD $0x423a; BYTE $0x07 // cmp al, byte [rdx + 7] LONG $0xd7950f41 // setne r15b LONG $0x0846b60f // movzx eax, byte [rsi + 8] WORD $0x423a; BYTE $0x08 // cmp al, byte [rdx + 8] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x0946b60f // movzx eax, byte [rsi + 9] WORD $0x423a; BYTE $0x09 // cmp al, byte [rdx + 9] LONG $0xd7950f40 // setne dil @@ -17309,16 +18151,16 @@ LBB3_63: LONG $0xd6950f41 // setne r14b LONG $0x0d46b60f // movzx eax, byte [rsi + 13] WORD $0x423a; BYTE $0x0d // cmp al, byte [rdx + 13] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] + LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] LONG $0x0e46b60f // movzx eax, byte [rsi + 14] WORD $0x423a; BYTE $0x0e // cmp al, byte [rdx + 14] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] + LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] LONG $0x0f46b60f // movzx eax, byte [rsi + 15] WORD $0x423a; BYTE $0x0f // cmp al, byte [rdx + 15] - WORD $0x950f; BYTE $0xd3 // setne bl + LONG $0xd0950f41 // setne r8b LONG $0x1046b60f // movzx eax, byte [rsi + 16] WORD $0x423a; BYTE $0x10 // cmp al, byte [rdx + 16] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] + LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] LONG $0x1146b60f // movzx eax, byte [rsi + 17] WORD $0x423a; BYTE $0x11 // cmp al, byte [rdx + 17] LONG $0xd4950f41 // setne r12b @@ -17327,144 +18169,144 @@ LBB3_63: LONG $0xd5950f41 // setne r13b LONG $0x1346b60f // movzx eax, byte [rsi + 19] WORD $0x423a; BYTE $0x13 // cmp al, byte [rdx + 19] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] + LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] LONG $0x1446b60f // movzx eax, byte [rsi + 20] WORD $0x423a; BYTE $0x14 // cmp al, byte [rdx + 20] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] LONG $0x1546b60f // movzx eax, byte [rsi + 21] WORD $0x423a; BYTE $0x15 // cmp al, byte [rdx + 21] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] + LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] LONG $0x1646b60f // movzx eax, byte [rsi + 22] WORD $0x423a; BYTE $0x16 // cmp al, byte [rdx + 22] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] LONG $0x1746b60f // movzx eax, byte [rsi + 23] WORD $0x423a; BYTE $0x17 // cmp al, byte [rdx + 23] LONG $0xd1950f41 // setne r9b LONG $0x1846b60f // movzx eax, byte [rsi + 24] WORD $0x423a; BYTE $0x18 // cmp al, byte [rdx + 24] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] + LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] LONG $0x1946b60f // movzx eax, byte [rsi + 25] WORD $0x423a; BYTE $0x19 // cmp al, byte [rdx + 25] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] + LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] LONG $0x1a46b60f // movzx eax, byte [rsi + 26] WORD $0x423a; BYTE $0x1a // cmp al, byte [rdx + 26] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] + LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] LONG $0x1b46b60f // movzx eax, byte [rsi + 27] WORD $0x423a; BYTE $0x1b // cmp al, byte [rdx + 27] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] + LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0x1c46b60f // movzx eax, byte [rsi + 28] WORD $0x423a; BYTE $0x1c // cmp al, byte [rdx + 28] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] LONG $0x1d46b60f // movzx eax, byte [rsi + 29] WORD $0x423a; BYTE $0x1d // cmp al, byte [rdx + 29] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] + LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x1e46b60f // movzx eax, byte [rsi + 30] WORD $0x423a; BYTE $0x1e // cmp al, byte [rdx + 30] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] + LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] LONG $0x1f46b60f // movzx eax, byte [rsi + 31] LONG $0x20c68348 // add rsi, 32 WORD $0x423a; BYTE $0x1f // cmp al, byte [rdx + 31] - LONG $0xd0950f41 // setne r8b - WORD $0xc900 // add cl, cl - LONG $0x28244c02 // add cl, byte [rsp + 40] - WORD $0xc889 // mov eax, ecx - LONG $0x244cb60f; BYTE $0x04 // movzx ecx, byte [rsp + 4] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xdb00 // add bl, bl + LONG $0x04245c02 // add bl, byte [rsp + 4] + WORD $0xd889 // mov eax, ebx + LONG $0x245cb60f; BYTE $0x05 // movzx ebx, byte [rsp + 5] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xcf // or r15b, cl - LONG $0x244cb60f; BYTE $0x14 // movzx ecx, byte [rsp + 20] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x245cb60f; BYTE $0x15 // movzx ebx, byte [rsp + 21] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx WORD $0x0040; BYTE $0xff // add dil, dil - LONG $0x247c0240; BYTE $0x07 // add dil, byte [rsp + 7] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x247c0240; BYTE $0x08 // add dil, byte [rsp + 8] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e2c041 // shl r10b, 2 WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0xcf89 // mov edi, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0xdf89 // mov edi, ebx LONG $0x03e3c041 // shl r11b, 3 WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0840; BYTE $0xf9 // or cl, dil + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xfb // or bl, dil LONG $0x04e6c041 // shl r14b, 4 WORD $0x0845; BYTE $0xde // or r14b, r11b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x247cb60f; BYTE $0x06 // movzx edi, byte [rsp + 6] + LONG $0x247cb60f; BYTE $0x07 // movzx edi, byte [rsp + 7] LONG $0x06e7c040 // shl dil, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0840; BYTE $0xfb // or bl, dil - WORD $0x0841; BYTE $0xcf // or r15b, cl - WORD $0xc308 // or bl, al + LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + WORD $0x0841; BYTE $0xdf // or r15b, bl + WORD $0x0841; BYTE $0xc0 // or r8b, al WORD $0x0045; BYTE $0xe4 // add r12b, r12b - LONG $0x24640244; BYTE $0x0d // add r12b, byte [rsp + 13] + LONG $0x24640244; BYTE $0x0e // add r12b, byte [rsp + 14] LONG $0x02e5c041 // shl r13b, 2 WORD $0x0845; BYTE $0xe5 // or r13b, r12b - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xe8 // or al, r13b - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0a // movzx eax, byte [rsp + 10] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x3e // mov byte [r14], r15b - LONG $0x244cb60f; BYTE $0x0b // movzx ecx, byte [rsp + 11] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x243c8845 // mov byte [r12], r15b + LONG $0x245cb60f; BYTE $0x0c // movzx ebx, byte [rsp + 12] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x24448845; BYTE $0x01 // mov byte [r12 + 1], r8b WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] + LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x12 // movzx ecx, byte [rsp + 18] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xc8 // or r8b, cl - WORD $0x0841; BYTE $0xc0 // or r8b, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x03468845 // mov byte [r14 + 3], r8b + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x13 // movzx ebx, byte [rsp + 19] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x20c28348 // add rdx, 32 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff28 // add qword [rsp + 40], -1 JNE LBB3_63 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] LBB3_65: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_67: @@ -17475,30 +18317,30 @@ LBB3_67: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB3_67 JMP LBB3_123 LBB3_90: - LONG $0x1f7b8d4d // lea r15, [r11 + 31] - WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xfb490f4d // cmovns r15, r11 - LONG $0x07418d41 // lea eax, [r9 + 7] - WORD $0x8545; BYTE $0xc9 // test r9d, r9d - LONG $0xc1490f41 // cmovns eax, r9d - WORD $0xe083; BYTE $0xf8 // and eax, -8 - WORD $0x2941; BYTE $0xc1 // sub r9d, eax + LONG $0x1f7e8d4d // lea r15, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xfe490f4d // cmovns r15, r14 + WORD $0x488d; BYTE $0x07 // lea ecx, [rax + 7] + WORD $0xc085 // test eax, eax + WORD $0x490f; BYTE $0xc8 // cmovns ecx, eax + WORD $0xe183; BYTE $0xf8 // and ecx, -8 + WORD $0xc829 // sub eax, ecx JE LBB3_94 - WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + WORD $0x9848 // cdqe LBB3_92: WORD $0x0e8b // mov ecx, dword [rsi] @@ -17511,7 +18353,7 @@ LBB3_92: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x04b60f45; BYTE $0x3e // movzx r8d, byte [r14 + rdi] + LONG $0x04b60f45; BYTE $0x3c // movzx r8d, byte [r12 + rdi] WORD $0x3045; BYTE $0xc2 // xor r10b, r8b QUAD $0x00000000fd0c8d44 // lea r9d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -17520,49 +18362,49 @@ LBB3_92: WORD $0xe3d3 // shl ebx, cl WORD $0x2044; BYTE $0xd3 // and bl, r10b WORD $0x3044; BYTE $0xc3 // xor bl, r8b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB3_92 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB3_94: LONG $0x05ffc149 // sar r15, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB3_98 - LONG $0x245c894c; BYTE $0x18 // mov qword [rsp + 24], r11 - LONG $0x247c894c; BYTE $0x40 // mov qword [rsp + 64], r15 + LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 LONG $0x247c894c; BYTE $0x38 // mov qword [rsp + 56], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LBB3_96: - LONG $0x2474894c; BYTE $0x30 // mov qword [rsp + 48], r14 + LONG $0x2464894c; BYTE $0x30 // mov qword [rsp + 48], r12 WORD $0x068b // mov eax, dword [rsi] WORD $0x4e8b; BYTE $0x04 // mov ecx, dword [rsi + 4] WORD $0x023b // cmp eax, dword [rdx] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] WORD $0x4a3b; BYTE $0x04 // cmp ecx, dword [rdx + 4] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] WORD $0x468b; BYTE $0x08 // mov eax, dword [rsi + 8] WORD $0x423b; BYTE $0x08 // cmp eax, dword [rdx + 8] - LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] + LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] WORD $0x468b; BYTE $0x0c // mov eax, dword [rsi + 12] WORD $0x423b; BYTE $0x0c // cmp eax, dword [rdx + 12] - LONG $0x2454950f; BYTE $0x15 // setne byte [rsp + 21] + LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] WORD $0x468b; BYTE $0x10 // mov eax, dword [rsi + 16] WORD $0x423b; BYTE $0x10 // cmp eax, dword [rdx + 16] - LONG $0x2454950f; BYTE $0x16 // setne byte [rsp + 22] + LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] WORD $0x468b; BYTE $0x14 // mov eax, dword [rsi + 20] WORD $0x423b; BYTE $0x14 // cmp eax, dword [rdx + 20] - LONG $0x2454950f; BYTE $0x17 // setne byte [rsp + 23] + LONG $0x2454950f; BYTE $0x03 // setne byte [rsp + 3] WORD $0x468b; BYTE $0x18 // mov eax, dword [rsi + 24] WORD $0x423b; BYTE $0x18 // cmp eax, dword [rdx + 24] - LONG $0x2454950f; BYTE $0x04 // setne byte [rsp + 4] + LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] WORD $0x468b; BYTE $0x1c // mov eax, dword [rsi + 28] WORD $0x423b; BYTE $0x1c // cmp eax, dword [rdx + 28] LONG $0xd5950f41 // setne r13b WORD $0x468b; BYTE $0x20 // mov eax, dword [rsi + 32] WORD $0x423b; BYTE $0x20 // cmp eax, dword [rdx + 32] - LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] WORD $0x468b; BYTE $0x24 // mov eax, dword [rsi + 36] WORD $0x423b; BYTE $0x24 // cmp eax, dword [rdx + 36] LONG $0xd0950f41 // setne r8b @@ -17574,165 +18416,165 @@ LBB3_96: LONG $0xd7950f41 // setne r15b WORD $0x468b; BYTE $0x30 // mov eax, dword [rsi + 48] WORD $0x423b; BYTE $0x30 // cmp eax, dword [rdx + 48] - LONG $0x2454950f; BYTE $0x05 // setne byte [rsp + 5] + LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] WORD $0x468b; BYTE $0x34 // mov eax, dword [rsi + 52] WORD $0x423b; BYTE $0x34 // cmp eax, dword [rdx + 52] - LONG $0x2454950f; BYTE $0x06 // setne byte [rsp + 6] + LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] WORD $0x468b; BYTE $0x38 // mov eax, dword [rsi + 56] WORD $0x423b; BYTE $0x38 // cmp eax, dword [rdx + 56] - LONG $0x2454950f; BYTE $0x07 // setne byte [rsp + 7] + LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] WORD $0x468b; BYTE $0x3c // mov eax, dword [rsi + 60] WORD $0x423b; BYTE $0x3c // cmp eax, dword [rdx + 60] - WORD $0x950f; BYTE $0xd3 // setne bl + LONG $0xd7950f40 // setne dil WORD $0x468b; BYTE $0x40 // mov eax, dword [rsi + 64] - WORD $0x4e8b; BYTE $0x44 // mov ecx, dword [rsi + 68] + WORD $0x5e8b; BYTE $0x44 // mov ebx, dword [rsi + 68] WORD $0x423b; BYTE $0x40 // cmp eax, dword [rdx + 64] WORD $0x468b; BYTE $0x48 // mov eax, dword [rsi + 72] - LONG $0x2454950f; BYTE $0x0a // setne byte [rsp + 10] - WORD $0x4a3b; BYTE $0x44 // cmp ecx, dword [rdx + 68] - WORD $0x4e8b; BYTE $0x4c // mov ecx, dword [rsi + 76] + LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + WORD $0x5a3b; BYTE $0x44 // cmp ebx, dword [rdx + 68] + WORD $0x5e8b; BYTE $0x4c // mov ebx, dword [rsi + 76] LONG $0xd2950f41 // setne r10b WORD $0x423b; BYTE $0x48 // cmp eax, dword [rdx + 72] WORD $0x468b; BYTE $0x50 // mov eax, dword [rsi + 80] LONG $0xd6950f41 // setne r14b - WORD $0x4a3b; BYTE $0x4c // cmp ecx, dword [rdx + 76] - WORD $0x4e8b; BYTE $0x54 // mov ecx, dword [rsi + 84] + WORD $0x5a3b; BYTE $0x4c // cmp ebx, dword [rdx + 76] + WORD $0x5e8b; BYTE $0x54 // mov ebx, dword [rsi + 84] LONG $0xd4950f41 // setne r12b WORD $0x423b; BYTE $0x50 // cmp eax, dword [rdx + 80] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] - WORD $0x4a3b; BYTE $0x54 // cmp ecx, dword [rdx + 84] + LONG $0x2454950f; BYTE $0x09 // setne byte [rsp + 9] + WORD $0x5a3b; BYTE $0x54 // cmp ebx, dword [rdx + 84] WORD $0x468b; BYTE $0x58 // mov eax, dword [rsi + 88] - LONG $0x2454950f; BYTE $0x0b // setne byte [rsp + 11] + LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] WORD $0x423b; BYTE $0x58 // cmp eax, dword [rdx + 88] WORD $0x468b; BYTE $0x5c // mov eax, dword [rsi + 92] - LONG $0x2454950f; BYTE $0x0c // setne byte [rsp + 12] + LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] WORD $0x423b; BYTE $0x5c // cmp eax, dword [rdx + 92] WORD $0x468b; BYTE $0x60 // mov eax, dword [rsi + 96] LONG $0xd1950f41 // setne r9b WORD $0x423b; BYTE $0x60 // cmp eax, dword [rdx + 96] WORD $0x468b; BYTE $0x64 // mov eax, dword [rsi + 100] - LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] + LONG $0x2454950f; BYTE $0x14 // setne byte [rsp + 20] WORD $0x423b; BYTE $0x64 // cmp eax, dword [rdx + 100] WORD $0x468b; BYTE $0x68 // mov eax, dword [rsi + 104] - LONG $0x2454950f; BYTE $0x0d // setne byte [rsp + 13] + LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] WORD $0x423b; BYTE $0x68 // cmp eax, dword [rdx + 104] WORD $0x468b; BYTE $0x6c // mov eax, dword [rsi + 108] - LONG $0x2454950f; BYTE $0x0e // setne byte [rsp + 14] + LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] WORD $0x423b; BYTE $0x6c // cmp eax, dword [rdx + 108] WORD $0x468b; BYTE $0x70 // mov eax, dword [rsi + 112] - LONG $0x2454950f; BYTE $0x0f // setne byte [rsp + 15] + LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] WORD $0x423b; BYTE $0x70 // cmp eax, dword [rdx + 112] WORD $0x468b; BYTE $0x74 // mov eax, dword [rsi + 116] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] WORD $0x423b; BYTE $0x74 // cmp eax, dword [rdx + 116] WORD $0x468b; BYTE $0x78 // mov eax, dword [rsi + 120] - LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] + LONG $0x2454950f; BYTE $0x13 // setne byte [rsp + 19] WORD $0x423b; BYTE $0x78 // cmp eax, dword [rdx + 120] WORD $0x468b; BYTE $0x7c // mov eax, dword [rsi + 124] - LONG $0x2454950f; BYTE $0x11 // setne byte [rsp + 17] + LONG $0x2454950f; BYTE $0x12 // setne byte [rsp + 18] LONG $0x80ee8348 // sub rsi, -128 WORD $0x423b; BYTE $0x7c // cmp eax, dword [rdx + 124] - LONG $0xd7950f40 // setne dil - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x950f; BYTE $0xd1 // setne cl + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x28244402 // add al, byte [rsp + 40] - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x04 // movzx eax, byte [rsp + 4] + LONG $0x04244402 // add al, byte [rsp + 4] + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e5c041 // shl r13b, 7 WORD $0x0841; BYTE $0xc5 // or r13b, al - LONG $0x2444b60f; BYTE $0x14 // movzx eax, byte [rsp + 20] + LONG $0x2444b60f; BYTE $0x15 // movzx eax, byte [rsp + 21] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl + WORD $0xd808 // or al, bl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - LONG $0x24440244; BYTE $0x09 // add r8b, byte [rsp + 9] - LONG $0x244cb60f; BYTE $0x15 // movzx ecx, byte [rsp + 21] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xc108 // or cl, al - WORD $0xc889 // mov eax, ecx + LONG $0x24440244; BYTE $0x0a // add r8b, byte [rsp + 10] + LONG $0x245cb60f; BYTE $0x16 // movzx ebx, byte [rsp + 22] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xc308 // or bl, al + WORD $0xd889 // mov eax, ebx LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xc3 // or r11b, r8b - LONG $0x244cb60f; BYTE $0x16 // movzx ecx, byte [rsp + 22] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xc108 // or cl, al - WORD $0x8941; BYTE $0xc8 // mov r8d, ecx + LONG $0x245cb60f; BYTE $0x17 // movzx ebx, byte [rsp + 23] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0xc308 // or bl, al + WORD $0x8941; BYTE $0xd8 // mov r8d, ebx LONG $0x03e7c041 // shl r15b, 3 WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x244cb60f; BYTE $0x17 // movzx ecx, byte [rsp + 23] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0x0844; BYTE $0xc1 // or cl, r8b - LONG $0x2444b60f; BYTE $0x05 // movzx eax, byte [rsp + 5] + LONG $0x245cb60f; BYTE $0x03 // movzx ebx, byte [rsp + 3] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xc3 // or bl, r8b + LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x8941; BYTE $0xc0 // mov r8d, eax - LONG $0x2444b60f; BYTE $0x06 // movzx eax, byte [rsp + 6] + LONG $0x2444b60f; BYTE $0x07 // movzx eax, byte [rsp + 7] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xc0 // or al, r8b - LONG $0x44b60f44; WORD $0x0724 // movzx r8d, byte [rsp + 7] + LONG $0x44b60f44; WORD $0x0824 // movzx r8d, byte [rsp + 8] LONG $0x06e0c041 // shl r8b, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0x0844; BYTE $0xc3 // or bl, r8b - WORD $0x0841; BYTE $0xcd // or r13b, cl - WORD $0xc308 // or bl, al + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0844; BYTE $0xc7 // or dil, r8b + WORD $0x0841; BYTE $0xdd // or r13b, bl + WORD $0x0840; BYTE $0xc7 // or dil, al WORD $0x0045; BYTE $0xd2 // add r10b, r10b - LONG $0x24540244; BYTE $0x0a // add r10b, byte [rsp + 10] + LONG $0x24540244; BYTE $0x0b // add r10b, byte [rsp + 11] LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xf4 // or r12b, r14b - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x09 // movzx eax, byte [rsp + 9] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b - WORD $0xc189 // mov ecx, eax - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - LONG $0x2444b60f; BYTE $0x0b // movzx eax, byte [rsp + 11] + WORD $0xc389 // mov ebx, eax + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + LONG $0x2444b60f; BYTE $0x0c // movzx eax, byte [rsp + 12] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - WORD $0x8845; BYTE $0x2e // mov byte [r14], r13b - LONG $0x244cb60f; BYTE $0x0c // movzx ecx, byte [rsp + 12] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xd808 // or al, bl + LONG $0x242c8845 // mov byte [r12], r13b + LONG $0x245cb60f; BYTE $0x0d // movzx ebx, byte [rsp + 13] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xc9 // or r9b, cl - LONG $0x015e8841 // mov byte [r14 + 1], bl + WORD $0x0841; BYTE $0xd9 // or r9b, bl + LONG $0x247c8841; BYTE $0x01 // mov byte [r12 + 1], dil WORD $0x0841; BYTE $0xc1 // or r9b, al - LONG $0x2444b60f; BYTE $0x0d // movzx eax, byte [rsp + 13] - WORD $0xc000 // add al, al - LONG $0x13244402 // add al, byte [rsp + 19] - WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x0e // movzx eax, byte [rsp + 14] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xc000 // add al, al + LONG $0x14244402 // add al, byte [rsp + 20] + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x0f // movzx eax, byte [rsp + 15] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x11 // movzx eax, byte [rsp + 17] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xc808 // or al, cl - WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x12 // movzx eax, byte [rsp + 18] + WORD $0xd808 // or al, bl + WORD $0xc389 // mov ebx, eax + LONG $0x2444b60f; BYTE $0x13 // movzx eax, byte [rsp + 19] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xc808 // or al, cl - LONG $0x244cb60f; BYTE $0x11 // movzx ecx, byte [rsp + 17] - WORD $0xe1c0; BYTE $0x06 // shl cl, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xcf // or dil, cl - WORD $0x0840; BYTE $0xc7 // or dil, al - LONG $0x024e8845 // mov byte [r14 + 2], r9b - LONG $0x037e8841 // mov byte [r14 + 3], dil + WORD $0xd808 // or al, bl + LONG $0x245cb60f; BYTE $0x12 // movzx ebx, byte [rsp + 18] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + WORD $0xc108 // or cl, al + LONG $0x244c8845; BYTE $0x02 // mov byte [r12 + 2], r9b + LONG $0x244c8841; BYTE $0x03 // mov byte [r12 + 3], cl LONG $0x80c28148; WORD $0x0000; BYTE $0x00 // add rdx, 128 - LONG $0x04c68349 // add r14, 4 - LONG $0x24448348; WORD $0xff38 // add qword [rsp + 56], -1 + LONG $0x04c48349 // add r12, 4 + LONG $0x24448348; WORD $0xff20 // add qword [rsp + 32], -1 JNE LBB3_96 - LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + LONG $0x247c8b4c; BYTE $0x38 // mov r15, qword [rsp + 56] LBB3_98: LONG $0x05e7c149 // shl r15, 5 - WORD $0x394d; BYTE $0xdf // cmp r15, r11 + WORD $0x394d; BYTE $0xf7 // cmp r15, r14 JGE LBB3_123 - WORD $0x294d; BYTE $0xfb // sub r11, r15 + WORD $0x294d; BYTE $0xfe // sub r14, r15 WORD $0xc931 // xor ecx, ecx LBB3_100: @@ -17743,16 +18585,16 @@ LBB3_100: WORD $0xdbf6 // neg bl WORD $0x8948; BYTE $0xcf // mov rdi, rcx LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xe180; BYTE $0x07 // and cl, 7 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd820 // and al, bl WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 + WORD $0x394d; BYTE $0xc6 // cmp r14, r8 JNE LBB3_100 LBB3_123: @@ -17807,7 +18649,7 @@ DATA LCDATA3<>+0x160(SB)/8, $0xffffffffffffffff DATA LCDATA3<>+0x168(SB)/8, $0xffffffffffffffff GLOBL LCDATA3<>(SB), 8, $368 -TEXT ·_comparison_not_equal_arr_scalar_sse4(SB), $328-48 +TEXT ·_comparison_not_equal_arr_scalar_sse4(SB), $344-48 MOVQ typ+0(FP), DI MOVQ left+8(FP), SI @@ -17818,11 +18660,11 @@ TEXT ·_comparison_not_equal_arr_scalar_sse4(SB), $328-48 MOVQ SP, BP ADDQ $16, SP ANDQ $-16, SP - MOVQ BP, 304(SP) + MOVQ BP, 320(SP) LEAQ LCDATA3<>(SB), BP - WORD $0x894d; BYTE $0xc7 // mov r15, r8 - WORD $0x8949; BYTE $0xce // mov r14, rcx + WORD $0x894d; BYTE $0xc6 // mov r14, r8 + WORD $0x8949; BYTE $0xcc // mov r12, rcx WORD $0xff83; BYTE $0x06 // cmp edi, 6 JG LBB4_17 WORD $0xff83; BYTE $0x03 // cmp edi, 3 @@ -17830,13 +18672,13 @@ TEXT ·_comparison_not_equal_arr_scalar_sse4(SB), $328-48 WORD $0xff83; BYTE $0x04 // cmp edi, 4 JE LBB4_83 WORD $0xff83; BYTE $0x05 // cmp edi, 5 - JE LBB4_95 + JE LBB4_99 WORD $0xff83; BYTE $0x06 // cmp edi, 6 - JNE LBB4_179 + JNE LBB4_174 WORD $0x8b44; BYTE $0x2a // mov r13d, dword [rdx] - LONG $0x1f578d4d // lea r10, [r15 + 31] - WORD $0x854d; BYTE $0xff // test r15, r15 - LONG $0xd7490f4d // cmovns r10, r15 + LONG $0x1f568d4d // lea r10, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xd6490f4d // cmovns r10, r14 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d @@ -17854,7 +18696,8 @@ LBB4_7: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xd8490f48 // cmovns rbx, rax LONG $0x03fbc148 // sar rbx, 3 - LONG $0x04b60f45; BYTE $0x1e // movzx r8d, byte [r14 + rbx] + WORD $0x894d; BYTE $0xe1 // mov r9, r12 + LONG $0x04b60f45; BYTE $0x1c // movzx r8d, byte [r12 + rbx] WORD $0x3044; BYTE $0xc2 // xor dl, r8b LONG $0x00dd3c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rbx] WORD $0xc189 // mov ecx, eax @@ -17863,26 +18706,26 @@ LBB4_7: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xd7 // and dil, dl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x1e3c8841 // mov byte [r14 + rbx], dil + LONG $0x1c3c8841 // mov byte [r12 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB4_7 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB4_9: LONG $0x05fac149 // sar r10, 5 - LONG $0x20ff8349 // cmp r15, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB4_13 - QUAD $0x0000009024bc894c // mov qword [rsp + 144], r15 - QUAD $0x000000d02494894c // mov qword [rsp + 208], r10 - QUAD $0x000000e02494894c // mov qword [rsp + 224], r10 + QUAD $0x0000009024b4894c // mov qword [rsp + 144], r14 + QUAD $0x000000c02494894c // mov qword [rsp + 192], r10 + QUAD $0x000000f02494894c // mov qword [rsp + 240], r10 LBB4_11: - QUAD $0x0000008024b4894c // mov qword [rsp + 128], r14 + QUAD $0x0000008024a4894c // mov qword [rsp + 128], r12 WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x046e3944 // cmp dword [rsi + 4], r13d - LONG $0xd7950f40 // setne dil + LONG $0xd2950f41 // setne r10b LONG $0x086e3944 // cmp dword [rsi + 8], r13d LONG $0xd6950f41 // setne r14b LONG $0x0c6e3944 // cmp dword [rsi + 12], r13d @@ -17896,13 +18739,13 @@ LBB4_11: LONG $0x1c6e3944 // cmp dword [rsi + 28], r13d WORD $0x950f; BYTE $0xd3 // setne bl LONG $0x206e3944 // cmp dword [rsi + 32], r13d - QUAD $0x000000c02494950f // setne byte [rsp + 192] + QUAD $0x000000e02494950f // setne byte [rsp + 224] LONG $0x246e3944 // cmp dword [rsi + 36], r13d - WORD $0x950f; BYTE $0xd2 // setne dl + LONG $0xd7950f40 // setne dil LONG $0x286e3944 // cmp dword [rsi + 40], r13d - LONG $0xd1950f41 // setne r9b + LONG $0xd0950f41 // setne r8b LONG $0x2c6e3944 // cmp dword [rsi + 44], r13d - LONG $0xd2950f41 // setne r10b + LONG $0xd1950f41 // setne r9b LONG $0x306e3944 // cmp dword [rsi + 48], r13d LONG $0xd3950f41 // setne r11b LONG $0x346e3944 // cmp dword [rsi + 52], r13d @@ -17928,122 +18771,123 @@ LBB4_11: LONG $0x5c6e3944 // cmp dword [rsi + 92], r13d LONG $0xd7950f41 // setne r15b LONG $0x606e3944 // cmp dword [rsi + 96], r13d - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x646e3944 // cmp dword [rsi + 100], r13d LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0x686e3944 // cmp dword [rsi + 104], r13d - LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] + LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] LONG $0x6c6e3944 // cmp dword [rsi + 108], r13d LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] LONG $0x706e3944 // cmp dword [rsi + 112], r13d LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0x746e3944 // cmp dword [rsi + 116], r13d - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] LONG $0x786e3944 // cmp dword [rsi + 120], r13d LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x7c6e3944 // cmp dword [rsi + 124], r13d - LONG $0xd0950f41 // setne r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009824bc0240 // add dil, byte [rsp + 152] + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009824940244 // add r10b, byte [rsp + 152] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0xc0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 192] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + QUAD $0x000000e024bc0240 // add dil, byte [rsp + 224] QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b QUAD $0x000000a024bcb60f // movzx edi, byte [rsp + 160] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x0000008024b48b4c // mov r14, qword [rsp + 128] - QUAD $0x000000b02494b60f // movzx edx, byte [rsp + 176] - WORD $0xd200 // add dl, dl - LONG $0x60245402 // add dl, byte [rsp + 96] - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0x8841; BYTE $0x1e // mov byte [r14], bl + QUAD $0x0000008024a48b4c // mov r12, qword [rsp + 128] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] + WORD $0xc000 // add al, al + LONG $0x60244402 // add al, byte [rsp + 96] + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x241c8841 // mov byte [r12], bl LONG $0x245cb60f; BYTE $0x38 // movzx ebx, byte [rsp + 56] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl - LONG $0x014e8841 // mov byte [r14 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x40 // movzx ecx, byte [rsp + 64] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027e8845 // mov byte [r14 + 2], r15b - LONG $0x03468845 // mov byte [r14 + 3], r8b + LONG $0x244c8841; BYTE $0x01 // mov byte [r12 + 1], cl + WORD $0x0841; BYTE $0xc7 // or r15b, al + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + WORD $0xc000 // add al, al + LONG $0x28244402 // add al, byte [rsp + 40] + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xc808 // or al, cl + LONG $0x244cb60f; BYTE $0x08 // movzx ecx, byte [rsp + 8] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xca08 // or dl, cl + WORD $0xc208 // or dl, al + LONG $0x247c8845; BYTE $0x02 // mov byte [r12 + 2], r15b + LONG $0x24548841; BYTE $0x03 // mov byte [r12 + 3], dl LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 - LONG $0x04c68349 // add r14, 4 - QUAD $0x000000e024848348; BYTE $0xff // add qword [rsp + 224], -1 + LONG $0x04c48349 // add r12, 4 + QUAD $0x000000f024848348; BYTE $0xff // add qword [rsp + 240], -1 JNE LBB4_11 - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] - QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] + QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] + QUAD $0x000000c024948b4c // mov r10, qword [rsp + 192] LBB4_13: LONG $0x05e2c149 // shl r10, 5 - WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB4_179 - WORD $0x894d; BYTE $0xf8 // mov r8, r15 + WORD $0x394d; BYTE $0xf2 // cmp r10, r14 + JGE LBB4_174 + WORD $0x894d; BYTE $0xf0 // mov r8, r14 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 - WORD $0x014d; BYTE $0xfa // add r10, r15 + WORD $0x014d; BYTE $0xf2 // add r10, r14 JE LBB4_82 WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 @@ -18055,7 +18899,8 @@ LBB4_16: WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xdf // mov rdi, r11 LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + WORD $0x894d; BYTE $0xe6 // mov r14, r12 + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 @@ -18063,7 +18908,7 @@ LBB4_16: WORD $0x3044; BYTE $0xc8 // xor al, r9b WORD $0xc320 // and bl, al WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x02c38349 // add r11, 2 LONG $0x046e3944 // cmp dword [rsi + 4], r13d LONG $0x08768d48 // lea rsi, [rsi + 8] @@ -18075,23 +18920,23 @@ LBB4_16: WORD $0xe2d2 // shl dl, cl WORD $0xc220 // and dl, al WORD $0xda30 // xor dl, bl - LONG $0x3e148841 // mov byte [r14 + rdi], dl + LONG $0x3c148841 // mov byte [r12 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 JNE LBB4_16 - JMP LBB4_153 + JMP LBB4_151 LBB4_17: WORD $0xff83; BYTE $0x08 // cmp edi, 8 JLE LBB4_46 WORD $0xff83; BYTE $0x09 // cmp edi, 9 - JE LBB4_107 + JE LBB4_114 WORD $0xff83; BYTE $0x0b // cmp edi, 11 - JE LBB4_118 + JE LBB4_125 WORD $0xff83; BYTE $0x0c // cmp edi, 12 - JNE LBB4_179 - LONG $0x1f578d4d // lea r10, [r15 + 31] - WORD $0x854d; BYTE $0xff // test r15, r15 - LONG $0xd7490f4d // cmovns r10, r15 + JNE LBB4_174 + LONG $0x1f568d4d // lea r10, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xd6490f4d // cmovns r10, r14 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d @@ -18104,13 +18949,16 @@ LBB4_17: LBB4_23: LONG $0x062e0f66 // ucomisd xmm0, qword [rsi] LONG $0x08768d48 // lea rsi, [rsi + 8] + WORD $0x9a0f; BYTE $0xd1 // setp cl WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xca08 // or dl, cl WORD $0xdaf6 // neg dl LONG $0x07788d48 // lea rdi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + WORD $0x894d; BYTE $0xe3 // mov r11, r12 + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xca // xor dl, r9b QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -18119,198 +18967,287 @@ LBB4_23: WORD $0xe3d3 // shl ebx, cl WORD $0xd320 // and bl, dl WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB4_23 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB4_25: LONG $0x05fac149 // sar r10, 5 - LONG $0x20ff8349 // cmp r15, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB4_29 - QUAD $0x0000009024bc894c // mov qword [rsp + 144], r15 - QUAD $0x000000e02494894c // mov qword [rsp + 224], r10 - QUAD $0x000000982494894c // mov qword [rsp + 152], r10 + QUAD $0x0000009024b4894c // mov qword [rsp + 144], r14 + QUAD $0x000000d82494894c // mov qword [rsp + 216], r10 + QUAD $0x000001102494894c // mov qword [rsp + 272], r10 LBB4_27: - QUAD $0x0000008024b4894c // mov qword [rsp + 128], r14 + QUAD $0x0000008024a4894c // mov qword [rsp + 128], r12 LONG $0x062e0f66 // ucomisd xmm0, qword [rsi] - QUAD $0x000000882494950f // setne byte [rsp + 136] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl LONG $0x462e0f66; BYTE $0x08 // ucomisd xmm0, qword [rsi + 8] - LONG $0xd1950f41 // setne r9b + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd5950f41 // setne r13b + WORD $0x0841; BYTE $0xc5 // or r13b, al LONG $0x462e0f66; BYTE $0x10 // ucomisd xmm0, qword [rsi + 16] - LONG $0xd6950f41 // setne r14b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x30244c88 // mov byte [rsp + 48], cl LONG $0x462e0f66; BYTE $0x18 // ucomisd xmm0, qword [rsi + 24] - LONG $0xd5950f41 // setne r13b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x10244c88 // mov byte [rsp + 16], cl LONG $0x462e0f66; BYTE $0x20 // ucomisd xmm0, qword [rsi + 32] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl LONG $0x462e0f66; BYTE $0x28 // ucomisd xmm0, qword [rsi + 40] - LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd4950f41 // setne r12b + WORD $0x0841; BYTE $0xc4 // or r12b, al LONG $0x462e0f66; BYTE $0x30 // ucomisd xmm0, qword [rsi + 48] - WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x38244c88 // mov byte [rsp + 56], cl LONG $0x462e0f66; BYTE $0x38 // ucomisd xmm0, qword [rsi + 56] - WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x08244c88 // mov byte [rsp + 8], cl LONG $0x462e0f66; BYTE $0x40 // ucomisd xmm0, qword [rsi + 64] - QUAD $0x000000a02494950f // setne byte [rsp + 160] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x40244c88 // mov byte [rsp + 64], cl LONG $0x462e0f66; BYTE $0x48 // ucomisd xmm0, qword [rsi + 72] - WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x68244c88 // mov byte [rsp + 104], cl LONG $0x462e0f66; BYTE $0x50 // ucomisd xmm0, qword [rsi + 80] - LONG $0xd7950f40 // setne dil + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x48244c88 // mov byte [rsp + 72], cl LONG $0x462e0f66; BYTE $0x58 // ucomisd xmm0, qword [rsi + 88] - LONG $0xd2950f41 // setne r10b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xc308 // or bl, al LONG $0x462e0f66; BYTE $0x60 // ucomisd xmm0, qword [rsi + 96] - LONG $0xd3950f41 // setne r11b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x18244c88 // mov byte [rsp + 24], cl LONG $0x462e0f66; BYTE $0x68 // ucomisd xmm0, qword [rsi + 104] - LONG $0xd4950f41 // setne r12b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x60244c88 // mov byte [rsp + 96], cl LONG $0x462e0f66; BYTE $0x70 // ucomisd xmm0, qword [rsi + 112] - QUAD $0x000000b02494950f // setne byte [rsp + 176] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x58244c88 // mov byte [rsp + 88], cl LONG $0x462e0f66; BYTE $0x78 // ucomisd xmm0, qword [rsi + 120] + WORD $0x9a0f; BYTE $0xd0 // setp al WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x70244c88 // mov byte [rsp + 112], cl QUAD $0x00000080862e0f66 // ucomisd xmm0, qword [rsi + 128] - LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x50244c88 // mov byte [rsp + 80], cl QUAD $0x00000088862e0f66 // ucomisd xmm0, qword [rsi + 136] - QUAD $0x000000c02494950f // setne byte [rsp + 192] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x78244c88 // mov byte [rsp + 120], cl QUAD $0x00000090862e0f66 // ucomisd xmm0, qword [rsi + 144] - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xb0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 176], cl QUAD $0x00000098862e0f66 // ucomisd xmm0, qword [rsi + 152] - LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xa0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 160], cl QUAD $0x000000a0862e0f66 // ucomisd xmm0, qword [rsi + 160] - LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xe0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 224], cl QUAD $0x000000a8862e0f66 // ucomisd xmm0, qword [rsi + 168] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x98248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 152], cl QUAD $0x000000b0862e0f66 // ucomisd xmm0, qword [rsi + 176] - LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] - QUAD $0x000000b8862e0f66 // ucomisd xmm0, qword [rsi + 184] + WORD $0x9a0f; BYTE $0xd0 // setp al LONG $0xd7950f41 // setne r15b + WORD $0x0841; BYTE $0xc7 // or r15b, al + QUAD $0x000000b8862e0f66 // ucomisd xmm0, qword [rsi + 184] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd0950f41 // setne r8b + WORD $0x0841; BYTE $0xc0 // or r8b, al QUAD $0x000000c0862e0f66 // ucomisd xmm0, qword [rsi + 192] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x88248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 136], cl QUAD $0x000000c8862e0f66 // ucomisd xmm0, qword [rsi + 200] - LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd3950f41 // setne r11b + WORD $0x0841; BYTE $0xc3 // or r11b, al QUAD $0x000000d0862e0f66 // ucomisd xmm0, qword [rsi + 208] - LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd2950f41 // setne r10b + WORD $0x0841; BYTE $0xc2 // or r10b, al QUAD $0x000000d8862e0f66 // ucomisd xmm0, qword [rsi + 216] - LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd1950f41 // setne r9b + WORD $0x0841; BYTE $0xc1 // or r9b, al QUAD $0x000000e0862e0f66 // ucomisd xmm0, qword [rsi + 224] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xc0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 192], cl QUAD $0x000000e8862e0f66 // ucomisd xmm0, qword [rsi + 232] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xf0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 240], cl QUAD $0x000000f0862e0f66 // ucomisd xmm0, qword [rsi + 240] - LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f40 // setne dil + WORD $0x0840; BYTE $0xc7 // or dil, al QUAD $0x000000f8862e0f66 // ucomisd xmm0, qword [rsi + 248] - LONG $0xd0950f41 // setne r8b - WORD $0x0045; BYTE $0xc9 // add r9b, r9b - QUAD $0x00000088248c0244 // add r9b, byte [rsp + 136] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0845; BYTE $0xce // or r14b, r9b - WORD $0xd200 // add dl, dl - LONG $0xa0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 160] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xf5 // or r13b, r14b - LONG $0x02e7c040 // shl dil, 2 - WORD $0x0840; BYTE $0xd7 // or dil, dl - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0844; BYTE $0xea // or dl, r13b - WORD $0x8941; BYTE $0xd1 // mov r9d, edx - QUAD $0x0000008024b48b4c // mov r14, qword [rsp + 128] - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0844; BYTE $0xca // or dl, r9b - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b - QUAD $0x000000b024bcb60f // movzx edi, byte [rsp + 176] - LONG $0x06e7c040 // shl dil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl - WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x000000c02484b60f // movzx eax, byte [rsp + 192] - WORD $0xc000 // add al, al - LONG $0x60244402 // add al, byte [rsp + 96] - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd2 // setne dl WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0x8841; BYTE $0x1e // mov byte [r14], bl - LONG $0x245cb60f; BYTE $0x38 // movzx ebx, byte [rsp + 56] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xdf // or r15b, bl - LONG $0x014e8841 // mov byte [r14 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x40 // movzx ecx, byte [rsp + 64] + WORD $0x0045; BYTE $0xed // add r13b, r13b + LONG $0x246c0244; BYTE $0x20 // add r13b, byte [rsp + 32] + WORD $0x8944; BYTE $0xe8 // mov eax, r13d + LONG $0x05e4c041 // shl r12b, 5 + LONG $0x6cb60f44; WORD $0x3824 // movzx r13d, byte [rsp + 56] + LONG $0x06e5c041 // shl r13b, 6 + WORD $0x0845; BYTE $0xe5 // or r13b, r12b + LONG $0x64b60f44; WORD $0x3024 // movzx r12d, byte [rsp + 48] + LONG $0x02e4c041 // shl r12b, 2 + WORD $0x0841; BYTE $0xc4 // or r12b, al + LONG $0x244cb60f; BYTE $0x68 // movzx ecx, byte [rsp + 104] WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] + LONG $0x40244c02 // add cl, byte [rsp + 64] + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0844; BYTE $0xe8 // or al, r13b + LONG $0x08244488 // mov byte [rsp + 8], al + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0844; BYTE $0xe0 // or al, r12b + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0xcb08 // or bl, cl + LONG $0x6cb60f44; WORD $0x2824 // movzx r13d, byte [rsp + 40] + LONG $0x04e5c041 // shl r13b, 4 + WORD $0x0841; BYTE $0xc5 // or r13b, al + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd808 // or al, bl + LONG $0x18244488 // mov byte [rsp + 24], al + LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] + WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x74b60f44; WORD $0x7024 // movzx r14d, byte [rsp + 112] + LONG $0x07e6c041 // shl r14b, 7 + WORD $0x0841; BYTE $0xc6 // or r14b, al + LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] + WORD $0xc900 // add cl, cl + LONG $0x50244c02 // add cl, byte [rsp + 80] + QUAD $0x000000b0249cb60f // movzx ebx, byte [rsp + 176] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0xcb08 // or bl, cl + QUAD $0x0000008024a48b4c // mov r12, qword [rsp + 128] + QUAD $0x000000a0248cb60f // movzx ecx, byte [rsp + 160] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] + WORD $0xd908 // or cl, bl + WORD $0xcb89 // mov ebx, ecx + QUAD $0x000000e0248cb60f // movzx ecx, byte [rsp + 224] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 + WORD $0xd908 // or cl, bl + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0x0844; BYTE $0xe8 // or al, r13b + QUAD $0x00000098249cb60f // movzx ebx, byte [rsp + 152] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e7c041 // shl r15b, 6 + WORD $0x0841; BYTE $0xdf // or r15b, bl + LONG $0x24740a44; BYTE $0x18 // or r14b, byte [rsp + 24] LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl + WORD $0x0845; BYTE $0xf8 // or r8b, r15b WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027e8845 // mov byte [r14 + 2], r15b - LONG $0x03468845 // mov byte [r14 + 3], r8b + WORD $0x0045; BYTE $0xdb // add r11b, r11b + QUAD $0x00000088249c0244 // add r11b, byte [rsp + 136] + LONG $0x02e2c041 // shl r10b, 2 + WORD $0x0845; BYTE $0xda // or r10b, r11b + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xd1 // or r9b, r10b + QUAD $0x000000c0248cb60f // movzx ecx, byte [rsp + 192] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0x0844; BYTE $0xc9 // or cl, r9b + WORD $0xcb89 // mov ebx, ecx + LONG $0x24048841 // mov byte [r12], al + QUAD $0x000000f0248cb60f // movzx ecx, byte [rsp + 240] + WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + LONG $0x06e7c040 // shl dil, 6 + WORD $0x0840; BYTE $0xcf // or dil, cl + LONG $0x24748845; BYTE $0x01 // mov byte [r12 + 1], r14b + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0xda08 // or dl, bl + LONG $0x24448845; BYTE $0x02 // mov byte [r12 + 2], r8b + LONG $0x24548841; BYTE $0x03 // mov byte [r12 + 3], dl LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 - LONG $0x04c68349 // add r14, 4 - QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 + LONG $0x04c48349 // add r12, 4 + QUAD $0x0000011024848348; BYTE $0xff // add qword [rsp + 272], -1 JNE LBB4_27 - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] - QUAD $0x000000e024948b4c // mov r10, qword [rsp + 224] + QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] + QUAD $0x000000d824948b4c // mov r10, qword [rsp + 216] LBB4_29: LONG $0x05e2c149 // shl r10, 5 - WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB4_179 - WORD $0x894d; BYTE $0xf8 // mov r8, r15 + WORD $0x394d; BYTE $0xf2 // cmp r10, r14 + JGE LBB4_174 + WORD $0x894d; BYTE $0xf0 // mov r8, r14 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 - WORD $0x014d; BYTE $0xfa // add r10, r15 - JNE LBB4_162 + WORD $0x014d; BYTE $0xf2 // add r10, r14 + JNE LBB4_160 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB4_164 + JMP LBB4_162 LBB4_32: WORD $0xff83; BYTE $0x02 // cmp edi, 2 JE LBB4_60 WORD $0xff83; BYTE $0x03 // cmp edi, 3 - JNE LBB4_179 + JNE LBB4_174 WORD $0x8a44; BYTE $0x1a // mov r11b, byte [rdx] - LONG $0x1f578d4d // lea r10, [r15 + 31] - WORD $0x854d; BYTE $0xff // test r15, r15 - LONG $0xd7490f4d // cmovns r10, r15 + LONG $0x1f568d4d // lea r10, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xd6490f4d // cmovns r10, r14 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d @@ -18328,7 +19265,8 @@ LBB4_36: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + WORD $0x894d; BYTE $0xe7 // mov r15, r12 + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xca // xor dl, r9b QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -18337,43 +19275,43 @@ LBB4_36: WORD $0xe3d3 // shl ebx, cl WORD $0xd320 // and bl, dl WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB4_36 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB4_38: LONG $0x05fac149 // sar r10, 5 - LONG $0x20ff8349 // cmp r15, 32 - JL LBB4_130 + LONG $0x20fe8349 // cmp r14, 32 + JL LBB4_137 LONG $0x10fa8349 // cmp r10, 16 LONG $0x245c8844; BYTE $0x08 // mov byte [rsp + 8], r11b - QUAD $0x0000009024bc894c // mov qword [rsp + 144], r15 - QUAD $0x000000f82494894c // mov qword [rsp + 248], r10 + QUAD $0x0000009024b4894c // mov qword [rsp + 144], r14 + QUAD $0x000001082494894c // mov qword [rsp + 264], r10 JB LBB4_42 WORD $0x894c; BYTE $0xd0 // mov rax, r10 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi - WORD $0x3949; BYTE $0xc6 // cmp r14, rax - JAE LBB4_180 - LONG $0x96048d4b // lea rax, [r14 + 4*r10] + WORD $0x3949; BYTE $0xc4 // cmp r12, rax + JAE LBB4_179 + LONG $0x94048d4b // lea rax, [r12 + 4*r10] WORD $0x3948; BYTE $0xc6 // cmp rsi, rax - JAE LBB4_180 + JAE LBB4_179 LBB4_42: WORD $0xc031 // xor eax, eax - QUAD $0x000000f024848948 // mov qword [rsp + 240], rax - LONG $0x2474894c; BYTE $0x68 // mov qword [rsp + 104], r14 + QUAD $0x000000d824848948 // mov qword [rsp + 216], rax + LONG $0x2464894c; BYTE $0x68 // mov qword [rsp + 104], r12 LBB4_43: - QUAD $0x000000f024942b4c // sub r10, qword [rsp + 240] - QUAD $0x000000d02494894c // mov qword [rsp + 208], r10 + QUAD $0x000000d824942b4c // sub r10, qword [rsp + 216] + QUAD $0x000000c02494894c // mov qword [rsp + 192], r10 LBB4_44: WORD $0x8948; BYTE $0xf1 // mov rcx, rsi WORD $0x3844; BYTE $0x1e // cmp byte [rsi], r11b - QUAD $0x000000e02494950f // setne byte [rsp + 224] + QUAD $0x000000f02494950f // setne byte [rsp + 240] LONG $0x015e3844 // cmp byte [rsi + 1], r11b LONG $0xd6950f40 // setne sil LONG $0x02593844 // cmp byte [rcx + 2], r11b @@ -18395,7 +19333,7 @@ LBB4_44: LONG $0xd1950f41 // setne r9b LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x08 // cmp byte [rcx + 8], al - QUAD $0x000000c02494950f // setne byte [rsp + 192] + QUAD $0x000000e02494950f // setne byte [rsp + 224] LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x09 // cmp byte [rcx + 9], al WORD $0x950f; BYTE $0xd2 // setne dl @@ -18446,19 +19384,19 @@ LBB4_44: LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x19 // cmp byte [rcx + 25], bl - LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] + LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x1a // cmp byte [rcx + 26], bl LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x1b // cmp byte [rcx + 27], bl - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x1c // cmp byte [rcx + 28], bl LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x1d // cmp byte [rcx + 29], bl - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x1e // cmp byte [rcx + 30], bl QUAD $0x000000802494950f // setne byte [rsp + 128] @@ -18466,7 +19404,7 @@ LBB4_44: WORD $0x5938; BYTE $0x1f // cmp byte [rcx + 31], bl WORD $0x950f; BYTE $0xd3 // setne bl WORD $0x0040; BYTE $0xf6 // add sil, sil - QUAD $0x000000e024b40240 // add sil, byte [rsp + 224] + QUAD $0x000000f024b40240 // add sil, byte [rsp + 240] QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e1c041 // shl r9b, 7 @@ -18474,7 +19412,7 @@ LBB4_44: LONG $0x02e7c041 // shl r15b, 2 WORD $0x0841; BYTE $0xf7 // or r15b, sil WORD $0xd200 // add dl, dl - LONG $0xc0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 192] + LONG $0xe0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 224] LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xfc // or r12b, r15b LONG $0x7cb60f44; WORD $0x0824 // movzx r15d, byte [rsp + 8] @@ -18526,7 +19464,7 @@ LBB4_44: WORD $0x0841; BYTE $0xfb // or r11b, dil LONG $0x01428844 // mov byte [rdx + 1], r8b WORD $0x0841; BYTE $0xf3 // or r11b, sil - LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xc000 // add al, al LONG $0x40244402 // add al, byte [rsp + 64] WORD $0xc689 // mov esi, eax @@ -18534,7 +19472,7 @@ LBB4_44: WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0x0840; BYTE $0xf0 // or al, sil WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0840; BYTE $0xf0 // or al, sil WORD $0xc689 // mov esi, eax @@ -18542,7 +19480,7 @@ LBB4_44: WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0840; BYTE $0xf0 // or al, sil WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0840; BYTE $0xf0 // or al, sil QUAD $0x0000008024b4b60f // movzx esi, byte [rsp + 128] @@ -18556,21 +19494,21 @@ LBB4_44: LONG $0x20718d48 // lea rsi, [rcx + 32] LONG $0x04c28348 // add rdx, 4 LONG $0x24548948; BYTE $0x68 // mov qword [rsp + 104], rdx - QUAD $0x000000d024848348; BYTE $0xff // add qword [rsp + 208], -1 + QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 JNE LBB4_44 - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] - QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] - JMP LBB4_131 + QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] + QUAD $0x0000010824948b4c // mov r10, qword [rsp + 264] + JMP LBB4_138 LBB4_46: WORD $0xff83; BYTE $0x07 // cmp edi, 7 JE LBB4_72 WORD $0xff83; BYTE $0x08 // cmp edi, 8 - JNE LBB4_179 + JNE LBB4_174 WORD $0x8b4c; BYTE $0x2a // mov r13, qword [rdx] - LONG $0x1f578d4d // lea r10, [r15 + 31] - WORD $0x854d; BYTE $0xff // test r15, r15 - LONG $0xd7490f4d // cmovns r10, r15 + LONG $0x1f568d4d // lea r10, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xd6490f4d // cmovns r10, r14 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d @@ -18588,7 +19526,8 @@ LBB4_50: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xd8490f48 // cmovns rbx, rax LONG $0x03fbc148 // sar rbx, 3 - LONG $0x04b60f45; BYTE $0x1e // movzx r8d, byte [r14 + rbx] + WORD $0x894d; BYTE $0xe1 // mov r9, r12 + LONG $0x04b60f45; BYTE $0x1c // movzx r8d, byte [r12 + rbx] WORD $0x3044; BYTE $0xc2 // xor dl, r8b LONG $0x00dd3c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rbx] WORD $0xc189 // mov ecx, eax @@ -18597,26 +19536,26 @@ LBB4_50: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xd7 // and dil, dl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x1e3c8841 // mov byte [r14 + rbx], dil + LONG $0x1c3c8841 // mov byte [r12 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB4_50 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB4_52: LONG $0x05fac149 // sar r10, 5 - LONG $0x20ff8349 // cmp r15, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB4_56 - QUAD $0x0000009024bc894c // mov qword [rsp + 144], r15 - QUAD $0x000000d02494894c // mov qword [rsp + 208], r10 - QUAD $0x000000e02494894c // mov qword [rsp + 224], r10 + QUAD $0x0000009024b4894c // mov qword [rsp + 144], r14 + QUAD $0x000000c02494894c // mov qword [rsp + 192], r10 + QUAD $0x000000f02494894c // mov qword [rsp + 240], r10 LBB4_54: - QUAD $0x0000008024b4894c // mov qword [rsp + 128], r14 + QUAD $0x0000008024a4894c // mov qword [rsp + 128], r12 WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x086e394c // cmp qword [rsi + 8], r13 - LONG $0xd7950f40 // setne dil + LONG $0xd2950f41 // setne r10b LONG $0x106e394c // cmp qword [rsi + 16], r13 LONG $0xd6950f41 // setne r14b LONG $0x186e394c // cmp qword [rsi + 24], r13 @@ -18630,13 +19569,13 @@ LBB4_54: LONG $0x386e394c // cmp qword [rsi + 56], r13 WORD $0x950f; BYTE $0xd3 // setne bl LONG $0x406e394c // cmp qword [rsi + 64], r13 - QUAD $0x000000c02494950f // setne byte [rsp + 192] + QUAD $0x000000e02494950f // setne byte [rsp + 224] LONG $0x486e394c // cmp qword [rsi + 72], r13 - WORD $0x950f; BYTE $0xd2 // setne dl + LONG $0xd7950f40 // setne dil LONG $0x506e394c // cmp qword [rsi + 80], r13 - LONG $0xd1950f41 // setne r9b + LONG $0xd0950f41 // setne r8b LONG $0x586e394c // cmp qword [rsi + 88], r13 - LONG $0xd2950f41 // setne r10b + LONG $0xd1950f41 // setne r9b LONG $0x606e394c // cmp qword [rsi + 96], r13 LONG $0xd3950f41 // setne r11b LONG $0x686e394c // cmp qword [rsi + 104], r13 @@ -18662,123 +19601,124 @@ LBB4_54: LONG $0xb8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 184], r13 LONG $0xd7950f41 // setne r15b LONG $0xc0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 192], r13 - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0xc8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 200], r13 LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0xd0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 208], r13 - LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] + LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] LONG $0xd8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 216], r13 LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] LONG $0xe0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 224], r13 LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0xe8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 232], r13 - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] LONG $0xf0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 240], r13 LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0xf8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 248], r13 - LONG $0xd0950f41 // setne r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009824bc0240 // add dil, byte [rsp + 152] + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009824940244 // add r10b, byte [rsp + 152] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0xc0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 192] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + QUAD $0x000000e024bc0240 // add dil, byte [rsp + 224] QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b QUAD $0x000000a024bcb60f // movzx edi, byte [rsp + 160] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x0000008024b48b4c // mov r14, qword [rsp + 128] - QUAD $0x000000b02494b60f // movzx edx, byte [rsp + 176] - WORD $0xd200 // add dl, dl - LONG $0x60245402 // add dl, byte [rsp + 96] - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0x8841; BYTE $0x1e // mov byte [r14], bl + QUAD $0x0000008024a48b4c // mov r12, qword [rsp + 128] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] + WORD $0xc000 // add al, al + LONG $0x60244402 // add al, byte [rsp + 96] + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x241c8841 // mov byte [r12], bl LONG $0x245cb60f; BYTE $0x38 // movzx ebx, byte [rsp + 56] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl - LONG $0x014e8841 // mov byte [r14 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x40 // movzx ecx, byte [rsp + 64] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027e8845 // mov byte [r14 + 2], r15b - LONG $0x03468845 // mov byte [r14 + 3], r8b + LONG $0x244c8841; BYTE $0x01 // mov byte [r12 + 1], cl + WORD $0x0841; BYTE $0xc7 // or r15b, al + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + WORD $0xc000 // add al, al + LONG $0x28244402 // add al, byte [rsp + 40] + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xc808 // or al, cl + LONG $0x244cb60f; BYTE $0x08 // movzx ecx, byte [rsp + 8] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xca08 // or dl, cl + WORD $0xc208 // or dl, al + LONG $0x247c8845; BYTE $0x02 // mov byte [r12 + 2], r15b + LONG $0x24548841; BYTE $0x03 // mov byte [r12 + 3], dl LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 - LONG $0x04c68349 // add r14, 4 - QUAD $0x000000e024848348; BYTE $0xff // add qword [rsp + 224], -1 + LONG $0x04c48349 // add r12, 4 + QUAD $0x000000f024848348; BYTE $0xff // add qword [rsp + 240], -1 JNE LBB4_54 - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] - QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] + QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] + QUAD $0x000000c024948b4c // mov r10, qword [rsp + 192] LBB4_56: LONG $0x05e2c149 // shl r10, 5 - WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB4_179 - WORD $0x894d; BYTE $0xf8 // mov r8, r15 + WORD $0x394d; BYTE $0xf2 // cmp r10, r14 + JGE LBB4_174 + WORD $0x894d; BYTE $0xf0 // mov r8, r14 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 - WORD $0x014d; BYTE $0xfa // add r10, r15 - JE LBB4_117 + WORD $0x014d; BYTE $0xf2 // add r10, r14 + JE LBB4_124 WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d @@ -18789,7 +19729,8 @@ LBB4_59: WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xdf // mov rdi, r11 LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + WORD $0x894d; BYTE $0xe6 // mov r14, r12 + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 @@ -18797,7 +19738,7 @@ LBB4_59: WORD $0x3044; BYTE $0xc8 // xor al, r9b WORD $0xc320 // and bl, al WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x02c38349 // add r11, 2 LONG $0x086e394c // cmp qword [rsi + 8], r13 LONG $0x10768d48 // lea rsi, [rsi + 16] @@ -18809,16 +19750,16 @@ LBB4_59: WORD $0xe2d2 // shl dl, cl WORD $0xc220 // and dl, al WORD $0xda30 // xor dl, bl - LONG $0x3e148841 // mov byte [r14 + rdi], dl + LONG $0x3c148841 // mov byte [r12 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 JNE LBB4_59 - JMP LBB4_168 + JMP LBB4_170 LBB4_60: WORD $0x8a44; BYTE $0x1a // mov r11b, byte [rdx] - LONG $0x1f578d4d // lea r10, [r15 + 31] - WORD $0x854d; BYTE $0xff // test r15, r15 - LONG $0xd7490f4d // cmovns r10, r15 + LONG $0x1f568d4d // lea r10, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xd6490f4d // cmovns r10, r14 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d @@ -18836,7 +19777,8 @@ LBB4_62: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + WORD $0x894d; BYTE $0xe7 // mov r15, r12 + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xca // xor dl, r9b QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -18845,43 +19787,43 @@ LBB4_62: WORD $0xe3d3 // shl ebx, cl WORD $0xd320 // and bl, dl WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB4_62 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB4_64: LONG $0x05fac149 // sar r10, 5 - LONG $0x20ff8349 // cmp r15, 32 - JL LBB4_134 + LONG $0x20fe8349 // cmp r14, 32 + JL LBB4_141 LONG $0x10fa8349 // cmp r10, 16 LONG $0x245c8844; BYTE $0x08 // mov byte [rsp + 8], r11b - QUAD $0x0000009024bc894c // mov qword [rsp + 144], r15 - QUAD $0x000001002494894c // mov qword [rsp + 256], r10 + QUAD $0x0000009024b4894c // mov qword [rsp + 144], r14 + QUAD $0x000001202494894c // mov qword [rsp + 288], r10 JB LBB4_68 WORD $0x894c; BYTE $0xd0 // mov rax, r10 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi - WORD $0x3949; BYTE $0xc6 // cmp r14, rax - JAE LBB4_183 - LONG $0x96048d4b // lea rax, [r14 + 4*r10] + WORD $0x3949; BYTE $0xc4 // cmp r12, rax + JAE LBB4_182 + LONG $0x94048d4b // lea rax, [r12 + 4*r10] WORD $0x3948; BYTE $0xc6 // cmp rsi, rax - JAE LBB4_183 + JAE LBB4_182 LBB4_68: WORD $0xc031 // xor eax, eax - QUAD $0x000000f024848948 // mov qword [rsp + 240], rax - LONG $0x2474894c; BYTE $0x68 // mov qword [rsp + 104], r14 + QUAD $0x000000d824848948 // mov qword [rsp + 216], rax + LONG $0x2464894c; BYTE $0x68 // mov qword [rsp + 104], r12 LBB4_69: - QUAD $0x000000f024942b4c // sub r10, qword [rsp + 240] - QUAD $0x000000d02494894c // mov qword [rsp + 208], r10 + QUAD $0x000000d824942b4c // sub r10, qword [rsp + 216] + QUAD $0x000000c02494894c // mov qword [rsp + 192], r10 LBB4_70: WORD $0x8948; BYTE $0xf1 // mov rcx, rsi WORD $0x3844; BYTE $0x1e // cmp byte [rsi], r11b - QUAD $0x000000e02494950f // setne byte [rsp + 224] + QUAD $0x000000f02494950f // setne byte [rsp + 240] LONG $0x015e3844 // cmp byte [rsi + 1], r11b LONG $0xd6950f40 // setne sil LONG $0x02593844 // cmp byte [rcx + 2], r11b @@ -18903,7 +19845,7 @@ LBB4_70: LONG $0xd1950f41 // setne r9b LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x08 // cmp byte [rcx + 8], al - QUAD $0x000000c02494950f // setne byte [rsp + 192] + QUAD $0x000000e02494950f // setne byte [rsp + 224] LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x09 // cmp byte [rcx + 9], al WORD $0x950f; BYTE $0xd2 // setne dl @@ -18954,19 +19896,19 @@ LBB4_70: LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x19 // cmp byte [rcx + 25], bl - LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] + LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x1a // cmp byte [rcx + 26], bl LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x1b // cmp byte [rcx + 27], bl - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x1c // cmp byte [rcx + 28], bl LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x1d // cmp byte [rcx + 29], bl - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x1e // cmp byte [rcx + 30], bl QUAD $0x000000802494950f // setne byte [rsp + 128] @@ -18974,7 +19916,7 @@ LBB4_70: WORD $0x5938; BYTE $0x1f // cmp byte [rcx + 31], bl WORD $0x950f; BYTE $0xd3 // setne bl WORD $0x0040; BYTE $0xf6 // add sil, sil - QUAD $0x000000e024b40240 // add sil, byte [rsp + 224] + QUAD $0x000000f024b40240 // add sil, byte [rsp + 240] QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e1c041 // shl r9b, 7 @@ -18982,7 +19924,7 @@ LBB4_70: LONG $0x02e7c041 // shl r15b, 2 WORD $0x0841; BYTE $0xf7 // or r15b, sil WORD $0xd200 // add dl, dl - LONG $0xc0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 192] + LONG $0xe0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 224] LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xfc // or r12b, r15b LONG $0x7cb60f44; WORD $0x0824 // movzx r15d, byte [rsp + 8] @@ -19034,7 +19976,7 @@ LBB4_70: WORD $0x0841; BYTE $0xfb // or r11b, dil LONG $0x01428844 // mov byte [rdx + 1], r8b WORD $0x0841; BYTE $0xf3 // or r11b, sil - LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xc000 // add al, al LONG $0x40244402 // add al, byte [rsp + 64] WORD $0xc689 // mov esi, eax @@ -19042,7 +19984,7 @@ LBB4_70: WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0x0840; BYTE $0xf0 // or al, sil WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0840; BYTE $0xf0 // or al, sil WORD $0xc689 // mov esi, eax @@ -19050,7 +19992,7 @@ LBB4_70: WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0840; BYTE $0xf0 // or al, sil WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0840; BYTE $0xf0 // or al, sil QUAD $0x0000008024b4b60f // movzx esi, byte [rsp + 128] @@ -19064,17 +20006,17 @@ LBB4_70: LONG $0x20718d48 // lea rsi, [rcx + 32] LONG $0x04c28348 // add rdx, 4 LONG $0x24548948; BYTE $0x68 // mov qword [rsp + 104], rdx - QUAD $0x000000d024848348; BYTE $0xff // add qword [rsp + 208], -1 + QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 JNE LBB4_70 - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] - QUAD $0x0000010024948b4c // mov r10, qword [rsp + 256] - JMP LBB4_135 + QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] + QUAD $0x0000012024948b4c // mov r10, qword [rsp + 288] + JMP LBB4_142 LBB4_72: WORD $0x8b44; BYTE $0x2a // mov r13d, dword [rdx] - LONG $0x1f578d4d // lea r10, [r15 + 31] - WORD $0x854d; BYTE $0xff // test r15, r15 - LONG $0xd7490f4d // cmovns r10, r15 + LONG $0x1f568d4d // lea r10, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xd6490f4d // cmovns r10, r14 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d @@ -19092,7 +20034,8 @@ LBB4_74: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xd8490f48 // cmovns rbx, rax LONG $0x03fbc148 // sar rbx, 3 - LONG $0x04b60f45; BYTE $0x1e // movzx r8d, byte [r14 + rbx] + WORD $0x894d; BYTE $0xe1 // mov r9, r12 + LONG $0x04b60f45; BYTE $0x1c // movzx r8d, byte [r12 + rbx] WORD $0x3044; BYTE $0xc2 // xor dl, r8b LONG $0x00dd3c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rbx] WORD $0xc189 // mov ecx, eax @@ -19101,26 +20044,26 @@ LBB4_74: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xd7 // and dil, dl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x1e3c8841 // mov byte [r14 + rbx], dil + LONG $0x1c3c8841 // mov byte [r12 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB4_74 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB4_76: LONG $0x05fac149 // sar r10, 5 - LONG $0x20ff8349 // cmp r15, 32 + LONG $0x20fe8349 // cmp r14, 32 JL LBB4_80 - QUAD $0x0000009024bc894c // mov qword [rsp + 144], r15 - QUAD $0x000000d02494894c // mov qword [rsp + 208], r10 - QUAD $0x000000e02494894c // mov qword [rsp + 224], r10 + QUAD $0x0000009024b4894c // mov qword [rsp + 144], r14 + QUAD $0x000000c02494894c // mov qword [rsp + 192], r10 + QUAD $0x000000f02494894c // mov qword [rsp + 240], r10 LBB4_78: - QUAD $0x0000008024b4894c // mov qword [rsp + 128], r14 + QUAD $0x0000008024a4894c // mov qword [rsp + 128], r12 WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x046e3944 // cmp dword [rsi + 4], r13d - LONG $0xd7950f40 // setne dil + LONG $0xd2950f41 // setne r10b LONG $0x086e3944 // cmp dword [rsi + 8], r13d LONG $0xd6950f41 // setne r14b LONG $0x0c6e3944 // cmp dword [rsi + 12], r13d @@ -19134,13 +20077,13 @@ LBB4_78: LONG $0x1c6e3944 // cmp dword [rsi + 28], r13d WORD $0x950f; BYTE $0xd3 // setne bl LONG $0x206e3944 // cmp dword [rsi + 32], r13d - QUAD $0x000000c02494950f // setne byte [rsp + 192] + QUAD $0x000000e02494950f // setne byte [rsp + 224] LONG $0x246e3944 // cmp dword [rsi + 36], r13d - WORD $0x950f; BYTE $0xd2 // setne dl + LONG $0xd7950f40 // setne dil LONG $0x286e3944 // cmp dword [rsi + 40], r13d - LONG $0xd1950f41 // setne r9b + LONG $0xd0950f41 // setne r8b LONG $0x2c6e3944 // cmp dword [rsi + 44], r13d - LONG $0xd2950f41 // setne r10b + LONG $0xd1950f41 // setne r9b LONG $0x306e3944 // cmp dword [rsi + 48], r13d LONG $0xd3950f41 // setne r11b LONG $0x346e3944 // cmp dword [rsi + 52], r13d @@ -19166,133 +20109,134 @@ LBB4_78: LONG $0x5c6e3944 // cmp dword [rsi + 92], r13d LONG $0xd7950f41 // setne r15b LONG $0x606e3944 // cmp dword [rsi + 96], r13d - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x646e3944 // cmp dword [rsi + 100], r13d LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0x686e3944 // cmp dword [rsi + 104], r13d - LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] + LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] LONG $0x6c6e3944 // cmp dword [rsi + 108], r13d LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] LONG $0x706e3944 // cmp dword [rsi + 112], r13d LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0x746e3944 // cmp dword [rsi + 116], r13d - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] LONG $0x786e3944 // cmp dword [rsi + 120], r13d LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x7c6e3944 // cmp dword [rsi + 124], r13d - LONG $0xd0950f41 // setne r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009824bc0240 // add dil, byte [rsp + 152] + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009824940244 // add r10b, byte [rsp + 152] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0xc0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 192] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + QUAD $0x000000e024bc0240 // add dil, byte [rsp + 224] QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b QUAD $0x000000a024bcb60f // movzx edi, byte [rsp + 160] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x0000008024b48b4c // mov r14, qword [rsp + 128] - QUAD $0x000000b02494b60f // movzx edx, byte [rsp + 176] - WORD $0xd200 // add dl, dl - LONG $0x60245402 // add dl, byte [rsp + 96] - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0x8841; BYTE $0x1e // mov byte [r14], bl + QUAD $0x0000008024a48b4c // mov r12, qword [rsp + 128] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] + WORD $0xc000 // add al, al + LONG $0x60244402 // add al, byte [rsp + 96] + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x241c8841 // mov byte [r12], bl LONG $0x245cb60f; BYTE $0x38 // movzx ebx, byte [rsp + 56] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl - LONG $0x014e8841 // mov byte [r14 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x40 // movzx ecx, byte [rsp + 64] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027e8845 // mov byte [r14 + 2], r15b - LONG $0x03468845 // mov byte [r14 + 3], r8b + LONG $0x244c8841; BYTE $0x01 // mov byte [r12 + 1], cl + WORD $0x0841; BYTE $0xc7 // or r15b, al + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + WORD $0xc000 // add al, al + LONG $0x28244402 // add al, byte [rsp + 40] + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xc808 // or al, cl + LONG $0x244cb60f; BYTE $0x08 // movzx ecx, byte [rsp + 8] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xca08 // or dl, cl + WORD $0xc208 // or dl, al + LONG $0x247c8845; BYTE $0x02 // mov byte [r12 + 2], r15b + LONG $0x24548841; BYTE $0x03 // mov byte [r12 + 3], dl LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 - LONG $0x04c68349 // add r14, 4 - QUAD $0x000000e024848348; BYTE $0xff // add qword [rsp + 224], -1 + LONG $0x04c48349 // add r12, 4 + QUAD $0x000000f024848348; BYTE $0xff // add qword [rsp + 240], -1 JNE LBB4_78 - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] - QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] + QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] + QUAD $0x000000c024948b4c // mov r10, qword [rsp + 192] LBB4_80: LONG $0x05e2c149 // shl r10, 5 - WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB4_179 - WORD $0x894d; BYTE $0xf8 // mov r8, r15 + WORD $0x394d; BYTE $0xf2 // cmp r10, r14 + JGE LBB4_174 + WORD $0x894d; BYTE $0xf0 // mov r8, r14 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 - WORD $0x014d; BYTE $0xfa // add r10, r15 - JNE LBB4_151 + WORD $0x014d; BYTE $0xf2 // add r10, r14 + JNE LBB4_149 LBB4_82: WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB4_153 + JMP LBB4_151 LBB4_83: LONG $0x2ab70f44 // movzx r13d, word [rdx] - LONG $0x1f578d4d // lea r10, [r15 + 31] - WORD $0x854d; BYTE $0xff // test r15, r15 - LONG $0xd7490f4d // cmovns r10, r15 + LONG $0x1f568d4d // lea r10, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xd6490f4d // cmovns r10, r14 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d @@ -19310,7 +20254,8 @@ LBB4_85: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + WORD $0x894d; BYTE $0xe7 // mov r15, r12 + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xca // xor dl, r9b QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -19319,38 +20264,37 @@ LBB4_85: WORD $0xe3d3 // shl ebx, cl WORD $0xd320 // and bl, dl WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB4_85 - LONG $0x01c68349 // add r14, 1 + LONG $0x01c48349 // add r12, 1 LBB4_87: LONG $0x05fac149 // sar r10, 5 - LONG $0x20ff8349 // cmp r15, 32 - JL LBB4_138 + LONG $0x20fe8349 // cmp r14, 32 + JL LBB4_95 LONG $0x08fa8349 // cmp r10, 8 - QUAD $0x0000009024bc894c // mov qword [rsp + 144], r15 - QUAD $0x000000d02494894c // mov qword [rsp + 208], r10 + QUAD $0x0000009024b4894c // mov qword [rsp + 144], r14 + QUAD $0x000000c02494894c // mov qword [rsp + 192], r10 JB LBB4_91 WORD $0x894c; BYTE $0xd0 // mov rax, r10 LONG $0x06e0c148 // shl rax, 6 WORD $0x0148; BYTE $0xf0 // add rax, rsi - WORD $0x3949; BYTE $0xc6 // cmp r14, rax - JAE LBB4_186 - LONG $0x96048d4b // lea rax, [r14 + 4*r10] + WORD $0x3949; BYTE $0xc4 // cmp r12, rax + JAE LBB4_185 + LONG $0x94048d4b // lea rax, [r12 + 4*r10] WORD $0x3948; BYTE $0xf0 // cmp rax, rsi - JBE LBB4_186 + JBE LBB4_185 LBB4_91: WORD $0xc031 // xor eax, eax - LONG $0x24448948; BYTE $0x18 // mov qword [rsp + 24], rax - WORD $0x894d; BYTE $0xf4 // mov r12, r14 + LONG $0x24448948; BYTE $0x20 // mov qword [rsp + 32], rax LBB4_92: LONG $0x2464894c; BYTE $0x08 // mov qword [rsp + 8], r12 - LONG $0x24542b4c; BYTE $0x18 // sub r10, qword [rsp + 24] - QUAD $0x000000e02494894c // mov qword [rsp + 224], r10 + LONG $0x24542b4c; BYTE $0x20 // sub r10, qword [rsp + 32] + QUAD $0x000000f02494894c // mov qword [rsp + 240], r10 LBB4_93: WORD $0x8949; BYTE $0xf3 // mov r11, rsi @@ -19371,7 +20315,7 @@ LBB4_93: LONG $0x6b394566; BYTE $0x0e // cmp word [r11 + 14], r13w WORD $0x950f; BYTE $0xd3 // setne bl LONG $0x6b394566; BYTE $0x10 // cmp word [r11 + 16], r13w - QUAD $0x000000c02494950f // setne byte [rsp + 192] + QUAD $0x000000e02494950f // setne byte [rsp + 224] LONG $0x6b394566; BYTE $0x12 // cmp word [r11 + 18], r13w WORD $0x950f; BYTE $0xd1 // setne cl LONG $0x6b394566; BYTE $0x14 // cmp word [r11 + 20], r13w @@ -19407,13 +20351,13 @@ LBB4_93: LONG $0x6b394566; BYTE $0x32 // cmp word [r11 + 50], r13w LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0x6b394566; BYTE $0x34 // cmp word [r11 + 52], r13w - LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] - LONG $0x6b394566; BYTE $0x36 // cmp word [r11 + 54], r13w LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x6b394566; BYTE $0x36 // cmp word [r11 + 54], r13w + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x6b394566; BYTE $0x38 // cmp word [r11 + 56], r13w LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0x6b394566; BYTE $0x3a // cmp word [r11 + 58], r13w - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] LONG $0x6b394566; BYTE $0x3c // cmp word [r11 + 60], r13w QUAD $0x000000802494950f // setne byte [rsp + 128] LONG $0x6b394566; BYTE $0x3e // cmp word [r11 + 62], r13w @@ -19426,7 +20370,7 @@ LBB4_93: LONG $0x02e7c041 // shl r15b, 2 WORD $0x0841; BYTE $0xf7 // or r15b, sil WORD $0xc900 // add cl, cl - LONG $0xc0248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 192] + LONG $0xe0248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 224] LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xfc // or r12b, r15b LONG $0x02e0c041 // shl r8b, 2 @@ -19483,11 +20427,11 @@ LBB4_93: WORD $0xc000 // add al, al LONG $0x30244402 // add al, byte [rsp + 48] WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax @@ -19495,7 +20439,7 @@ LBB4_93: WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xd808 // or al, bl QUAD $0x00000080249cb60f // movzx ebx, byte [rsp + 128] @@ -19508,27 +20452,71 @@ LBB4_93: LONG $0x40738d49 // lea rsi, [r11 + 64] LONG $0x04c18348 // add rcx, 4 LONG $0x244c8948; BYTE $0x08 // mov qword [rsp + 8], rcx - QUAD $0x000000e024848348; BYTE $0xff // add qword [rsp + 224], -1 + QUAD $0x000000f024848348; BYTE $0xff // add qword [rsp + 240], -1 JNE LBB4_93 - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] - QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] + QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] + QUAD $0x000000c024948b4c // mov r10, qword [rsp + 192] LONG $0x24648b4c; BYTE $0x08 // mov r12, qword [rsp + 8] - JMP LBB4_139 LBB4_95: + LONG $0x05e2c149 // shl r10, 5 + WORD $0x394d; BYTE $0xf2 // cmp r10, r14 + JGE LBB4_174 + WORD $0x894d; BYTE $0xf0 // mov r8, r14 + WORD $0x294d; BYTE $0xd0 // sub r8, r10 + WORD $0xf749; BYTE $0xd2 // not r10 + WORD $0x014d; BYTE $0xf2 // add r10, r14 + JE LBB4_113 + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 + WORD $0x3145; BYTE $0xf6 // xor r14d, r14d + +LBB4_98: + WORD $0x8948; BYTE $0xf0 // mov rax, rsi + LONG $0x2e394466 // cmp word [rsi], r13w + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xdaf6 // neg dl + WORD $0x894c; BYTE $0xf7 // mov rdi, r14 + LONG $0x03efc148 // shr rdi, 3 + LONG $0x14b60f45; BYTE $0x3c // movzx r10d, byte [r12 + rdi] + WORD $0x8944; BYTE $0xf1 // mov ecx, r14d + WORD $0xe180; BYTE $0x06 // and cl, 6 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0x3044; BYTE $0xd2 // xor dl, r10b + WORD $0xd320 // and bl, dl + WORD $0x3044; BYTE $0xd3 // xor bl, r10b + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl + LONG $0x02c68349 // add r14, 2 + LONG $0x6e394466; BYTE $0x02 // cmp word [rsi + 2], r13w + LONG $0x04768d48 // lea rsi, [rsi + 4] + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xdaf6 // neg dl + WORD $0xda30 // xor dl, bl + WORD $0xc980; BYTE $0x01 // or cl, 1 + WORD $0x01b0 // mov al, 1 + WORD $0xe0d2 // shl al, cl + WORD $0xd020 // and al, dl + WORD $0xd830 // xor al, bl + LONG $0x3c048841 // mov byte [r12 + rdi], al + WORD $0x394d; BYTE $0xf1 // cmp r9, r14 + JNE LBB4_98 + JMP LBB4_166 + +LBB4_99: LONG $0x2ab70f44 // movzx r13d, word [rdx] - LONG $0x1f578d4d // lea r10, [r15 + 31] - WORD $0x854d; BYTE $0xff // test r15, r15 - LONG $0xd7490f4d // cmovns r10, r15 + LONG $0x1f568d4d // lea r10, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xd6490f4d // cmovns r10, r14 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB4_99 + JE LBB4_103 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB4_97: +LBB4_101: LONG $0x2e394466 // cmp word [rsi], r13w LONG $0x02768d48 // lea rsi, [rsi + 2] WORD $0x950f; BYTE $0xd2 // setne dl @@ -19537,7 +20525,8 @@ LBB4_97: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + WORD $0x894d; BYTE $0xe7 // mov r15, r12 + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xca // xor dl, r9b QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -19546,40 +20535,39 @@ LBB4_97: WORD $0xe3d3 // shl ebx, cl WORD $0xd320 // and bl, dl WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB4_97 - LONG $0x01c68349 // add r14, 1 + JNE LBB4_101 + LONG $0x01c48349 // add r12, 1 -LBB4_99: +LBB4_103: LONG $0x05fac149 // sar r10, 5 - LONG $0x20ff8349 // cmp r15, 32 - JL LBB4_143 + LONG $0x20fe8349 // cmp r14, 32 + JL LBB4_111 LONG $0x08fa8349 // cmp r10, 8 - QUAD $0x0000009024bc894c // mov qword [rsp + 144], r15 - QUAD $0x000000d02494894c // mov qword [rsp + 208], r10 - JB LBB4_103 + QUAD $0x0000009024b4894c // mov qword [rsp + 144], r14 + QUAD $0x000000c02494894c // mov qword [rsp + 192], r10 + JB LBB4_107 WORD $0x894c; BYTE $0xd0 // mov rax, r10 LONG $0x06e0c148 // shl rax, 6 WORD $0x0148; BYTE $0xf0 // add rax, rsi - WORD $0x3949; BYTE $0xc6 // cmp r14, rax - JAE LBB4_189 - LONG $0x96048d4b // lea rax, [r14 + 4*r10] + WORD $0x3949; BYTE $0xc4 // cmp r12, rax + JAE LBB4_191 + LONG $0x94048d4b // lea rax, [r12 + 4*r10] WORD $0x3948; BYTE $0xf0 // cmp rax, rsi - JBE LBB4_189 + JBE LBB4_191 -LBB4_103: +LBB4_107: WORD $0xc031 // xor eax, eax - LONG $0x24448948; BYTE $0x18 // mov qword [rsp + 24], rax - WORD $0x894d; BYTE $0xf4 // mov r12, r14 + LONG $0x24448948; BYTE $0x20 // mov qword [rsp + 32], rax -LBB4_104: +LBB4_108: LONG $0x2464894c; BYTE $0x08 // mov qword [rsp + 8], r12 - LONG $0x24542b4c; BYTE $0x18 // sub r10, qword [rsp + 24] - QUAD $0x000000e02494894c // mov qword [rsp + 224], r10 + LONG $0x24542b4c; BYTE $0x20 // sub r10, qword [rsp + 32] + QUAD $0x000000f02494894c // mov qword [rsp + 240], r10 -LBB4_105: +LBB4_109: WORD $0x8949; BYTE $0xf3 // mov r11, rsi LONG $0x2e394466 // cmp word [rsi], r13w QUAD $0x000000982494950f // setne byte [rsp + 152] @@ -19598,7 +20586,7 @@ LBB4_105: LONG $0x6b394566; BYTE $0x0e // cmp word [r11 + 14], r13w WORD $0x950f; BYTE $0xd3 // setne bl LONG $0x6b394566; BYTE $0x10 // cmp word [r11 + 16], r13w - QUAD $0x000000c02494950f // setne byte [rsp + 192] + QUAD $0x000000e02494950f // setne byte [rsp + 224] LONG $0x6b394566; BYTE $0x12 // cmp word [r11 + 18], r13w WORD $0x950f; BYTE $0xd1 // setne cl LONG $0x6b394566; BYTE $0x14 // cmp word [r11 + 20], r13w @@ -19634,13 +20622,13 @@ LBB4_105: LONG $0x6b394566; BYTE $0x32 // cmp word [r11 + 50], r13w LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0x6b394566; BYTE $0x34 // cmp word [r11 + 52], r13w - LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] - LONG $0x6b394566; BYTE $0x36 // cmp word [r11 + 54], r13w LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x6b394566; BYTE $0x36 // cmp word [r11 + 54], r13w + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x6b394566; BYTE $0x38 // cmp word [r11 + 56], r13w LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0x6b394566; BYTE $0x3a // cmp word [r11 + 58], r13w - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] LONG $0x6b394566; BYTE $0x3c // cmp word [r11 + 60], r13w QUAD $0x000000802494950f // setne byte [rsp + 128] LONG $0x6b394566; BYTE $0x3e // cmp word [r11 + 62], r13w @@ -19653,7 +20641,7 @@ LBB4_105: LONG $0x02e7c041 // shl r15b, 2 WORD $0x0841; BYTE $0xf7 // or r15b, sil WORD $0xc900 // add cl, cl - LONG $0xc0248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 192] + LONG $0xe0248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 224] LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xfc // or r12b, r15b LONG $0x02e0c041 // shl r8b, 2 @@ -19710,11 +20698,11 @@ LBB4_105: WORD $0xc000 // add al, al LONG $0x30244402 // add al, byte [rsp + 48] WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax @@ -19722,7 +20710,7 @@ LBB4_105: WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xd808 // or al, bl QUAD $0x00000080249cb60f // movzx ebx, byte [rsp + 128] @@ -19735,27 +20723,40 @@ LBB4_105: LONG $0x40738d49 // lea rsi, [r11 + 64] LONG $0x04c18348 // add rcx, 4 LONG $0x244c8948; BYTE $0x08 // mov qword [rsp + 8], rcx - QUAD $0x000000e024848348; BYTE $0xff // add qword [rsp + 224], -1 - JNE LBB4_105 - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] - QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] + QUAD $0x000000f024848348; BYTE $0xff // add qword [rsp + 240], -1 + JNE LBB4_109 + QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] + QUAD $0x000000c024948b4c // mov r10, qword [rsp + 192] LONG $0x24648b4c; BYTE $0x08 // mov r12, qword [rsp + 8] - JMP LBB4_144 -LBB4_107: +LBB4_111: + LONG $0x05e2c149 // shl r10, 5 + WORD $0x394d; BYTE $0xf2 // cmp r10, r14 + JGE LBB4_174 + WORD $0x894d; BYTE $0xf0 // mov r8, r14 + WORD $0x294d; BYTE $0xd0 // sub r8, r10 + WORD $0xf749; BYTE $0xd2 // not r10 + WORD $0x014d; BYTE $0xf2 // add r10, r14 + JNE LBB4_164 + +LBB4_113: + WORD $0x3145; BYTE $0xf6 // xor r14d, r14d + JMP LBB4_166 + +LBB4_114: WORD $0x8b4c; BYTE $0x2a // mov r13, qword [rdx] - LONG $0x1f578d4d // lea r10, [r15 + 31] - WORD $0x854d; BYTE $0xff // test r15, r15 - LONG $0xd7490f4d // cmovns r10, r15 + LONG $0x1f568d4d // lea r10, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xd6490f4d // cmovns r10, r14 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB4_111 + JE LBB4_118 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB4_109: +LBB4_116: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 LONG $0x08768d48 // lea rsi, [rsi + 8] WORD $0x950f; BYTE $0xd2 // setne dl @@ -19764,7 +20765,8 @@ LBB4_109: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xd8490f48 // cmovns rbx, rax LONG $0x03fbc148 // sar rbx, 3 - LONG $0x04b60f45; BYTE $0x1e // movzx r8d, byte [r14 + rbx] + WORD $0x894d; BYTE $0xe1 // mov r9, r12 + LONG $0x04b60f45; BYTE $0x1c // movzx r8d, byte [r12 + rbx] WORD $0x3044; BYTE $0xc2 // xor dl, r8b LONG $0x00dd3c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rbx] WORD $0xc189 // mov ecx, eax @@ -19773,26 +20775,26 @@ LBB4_109: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xd7 // and dil, dl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x1e3c8841 // mov byte [r14 + rbx], dil + LONG $0x1c3c8841 // mov byte [r12 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB4_109 - LONG $0x01c68349 // add r14, 1 + JNE LBB4_116 + LONG $0x01c48349 // add r12, 1 -LBB4_111: +LBB4_118: LONG $0x05fac149 // sar r10, 5 - LONG $0x20ff8349 // cmp r15, 32 - JL LBB4_115 - QUAD $0x0000009024bc894c // mov qword [rsp + 144], r15 - QUAD $0x000000d02494894c // mov qword [rsp + 208], r10 - QUAD $0x000000e02494894c // mov qword [rsp + 224], r10 + LONG $0x20fe8349 // cmp r14, 32 + JL LBB4_122 + QUAD $0x0000009024b4894c // mov qword [rsp + 144], r14 + QUAD $0x000000c02494894c // mov qword [rsp + 192], r10 + QUAD $0x000000f02494894c // mov qword [rsp + 240], r10 -LBB4_113: - QUAD $0x0000008024b4894c // mov qword [rsp + 128], r14 +LBB4_120: + QUAD $0x0000008024a4894c // mov qword [rsp + 128], r12 WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x086e394c // cmp qword [rsi + 8], r13 - LONG $0xd7950f40 // setne dil + LONG $0xd2950f41 // setne r10b LONG $0x106e394c // cmp qword [rsi + 16], r13 LONG $0xd6950f41 // setne r14b LONG $0x186e394c // cmp qword [rsi + 24], r13 @@ -19806,13 +20808,13 @@ LBB4_113: LONG $0x386e394c // cmp qword [rsi + 56], r13 WORD $0x950f; BYTE $0xd3 // setne bl LONG $0x406e394c // cmp qword [rsi + 64], r13 - QUAD $0x000000c02494950f // setne byte [rsp + 192] + QUAD $0x000000e02494950f // setne byte [rsp + 224] LONG $0x486e394c // cmp qword [rsi + 72], r13 - WORD $0x950f; BYTE $0xd2 // setne dl + LONG $0xd7950f40 // setne dil LONG $0x506e394c // cmp qword [rsi + 80], r13 - LONG $0xd1950f41 // setne r9b + LONG $0xd0950f41 // setne r8b LONG $0x586e394c // cmp qword [rsi + 88], r13 - LONG $0xd2950f41 // setne r10b + LONG $0xd1950f41 // setne r9b LONG $0x606e394c // cmp qword [rsi + 96], r13 LONG $0xd3950f41 // setne r11b LONG $0x686e394c // cmp qword [rsi + 104], r13 @@ -19838,151 +20840,155 @@ LBB4_113: LONG $0xb8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 184], r13 LONG $0xd7950f41 // setne r15b LONG $0xc0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 192], r13 - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0xc8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 200], r13 LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0xd0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 208], r13 - LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] + LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] LONG $0xd8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 216], r13 LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] LONG $0xe0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 224], r13 LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0xe8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 232], r13 - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] LONG $0xf0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 240], r13 LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0xf8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 248], r13 - LONG $0xd0950f41 // setne r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x0000009824bc0240 // add dil, byte [rsp + 152] + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009824940244 // add r10b, byte [rsp + 152] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0xc0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 192] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + QUAD $0x000000e024bc0240 // add dil, byte [rsp + 224] QUAD $0x000000882484b60f // movzx eax, byte [rsp + 136] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b QUAD $0x000000a024bcb60f // movzx edi, byte [rsp + 160] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x0000008024b48b4c // mov r14, qword [rsp + 128] - QUAD $0x000000b02494b60f // movzx edx, byte [rsp + 176] - WORD $0xd200 // add dl, dl - LONG $0x60245402 // add dl, byte [rsp + 96] - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0x8841; BYTE $0x1e // mov byte [r14], bl + QUAD $0x0000008024a48b4c // mov r12, qword [rsp + 128] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] + WORD $0xc000 // add al, al + LONG $0x60244402 // add al, byte [rsp + 96] + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x241c8841 // mov byte [r12], bl LONG $0x245cb60f; BYTE $0x38 // movzx ebx, byte [rsp + 56] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl - LONG $0x014e8841 // mov byte [r14 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x40 // movzx ecx, byte [rsp + 64] - WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027e8845 // mov byte [r14 + 2], r15b - LONG $0x03468845 // mov byte [r14 + 3], r8b + LONG $0x244c8841; BYTE $0x01 // mov byte [r12 + 1], cl + WORD $0x0841; BYTE $0xc7 // or r15b, al + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + WORD $0xc000 // add al, al + LONG $0x28244402 // add al, byte [rsp + 40] + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xc808 // or al, cl + LONG $0x244cb60f; BYTE $0x08 // movzx ecx, byte [rsp + 8] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xca08 // or dl, cl + WORD $0xc208 // or dl, al + LONG $0x247c8845; BYTE $0x02 // mov byte [r12 + 2], r15b + LONG $0x24548841; BYTE $0x03 // mov byte [r12 + 3], dl LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 - LONG $0x04c68349 // add r14, 4 - QUAD $0x000000e024848348; BYTE $0xff // add qword [rsp + 224], -1 - JNE LBB4_113 - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] - QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] + LONG $0x04c48349 // add r12, 4 + QUAD $0x000000f024848348; BYTE $0xff // add qword [rsp + 240], -1 + JNE LBB4_120 + QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] + QUAD $0x000000c024948b4c // mov r10, qword [rsp + 192] -LBB4_115: +LBB4_122: LONG $0x05e2c149 // shl r10, 5 - WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB4_179 - WORD $0x894d; BYTE $0xf8 // mov r8, r15 + WORD $0x394d; BYTE $0xf2 // cmp r10, r14 + JGE LBB4_174 + WORD $0x894d; BYTE $0xf0 // mov r8, r14 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 - WORD $0x014d; BYTE $0xfa // add r10, r15 - JNE LBB4_166 + WORD $0x014d; BYTE $0xf2 // add r10, r14 + JNE LBB4_168 -LBB4_117: +LBB4_124: WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB4_168 + JMP LBB4_170 -LBB4_118: - LONG $0x1f578d4d // lea r10, [r15 + 31] - WORD $0x854d; BYTE $0xff // test r15, r15 - LONG $0xd7490f4d // cmovns r10, r15 +LBB4_125: + LONG $0x1f568d4d // lea r10, [r14 + 31] + WORD $0x854d; BYTE $0xf6 // test r14, r14 + LONG $0xd6490f4d // cmovns r10, r14 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 LONG $0x02100ff3 // movss xmm0, dword [rdx] WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB4_122 + JE LBB4_129 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB4_120: +LBB4_127: WORD $0x2e0f; BYTE $0x06 // ucomiss xmm0, dword [rsi] LONG $0x04768d48 // lea rsi, [rsi + 4] + WORD $0x9a0f; BYTE $0xd1 // setp cl WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xca08 // or dl, cl WORD $0xdaf6 // neg dl LONG $0x07788d48 // lea rdi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + WORD $0x894d; BYTE $0xe3 // mov r11, r12 + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] WORD $0x3044; BYTE $0xca // xor dl, r9b QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -19991,216 +20997,307 @@ LBB4_120: WORD $0xe3d3 // shl ebx, cl WORD $0xd320 // and bl, dl WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB4_120 - LONG $0x01c68349 // add r14, 1 + JNE LBB4_127 + LONG $0x01c48349 // add r12, 1 -LBB4_122: +LBB4_129: LONG $0x05fac149 // sar r10, 5 - LONG $0x20ff8349 // cmp r15, 32 - JL LBB4_147 + LONG $0x20fe8349 // cmp r14, 32 + JL LBB4_145 LONG $0x04fa8349 // cmp r10, 4 - JB LBB4_126 + JB LBB4_133 WORD $0x894c; BYTE $0xd0 // mov rax, r10 LONG $0x07e0c148 // shl rax, 7 WORD $0x0148; BYTE $0xf0 // add rax, rsi - WORD $0x3949; BYTE $0xc6 // cmp r14, rax - JAE LBB4_192 - LONG $0x96048d4b // lea rax, [r14 + 4*r10] + WORD $0x3949; BYTE $0xc4 // cmp r12, rax + JAE LBB4_188 + LONG $0x94048d4b // lea rax, [r12 + 4*r10] WORD $0x3948; BYTE $0xf0 // cmp rax, rsi - JBE LBB4_192 + JBE LBB4_188 -LBB4_126: +LBB4_133: WORD $0x3145; BYTE $0xc0 // xor r8d, r8d WORD $0x8948; BYTE $0xf3 // mov rbx, rsi - WORD $0x894d; BYTE $0xf3 // mov r11, r14 + WORD $0x894d; BYTE $0xe7 // mov r15, r12 -LBB4_127: - LONG $0x245c894c; BYTE $0x08 // mov qword [rsp + 8], r11 - QUAD $0x0000009024bc894c // mov qword [rsp + 144], r15 - QUAD $0x000000e02494894c // mov qword [rsp + 224], r10 - WORD $0x294d; BYTE $0xc2 // sub r10, r8 - QUAD $0x000000982494894c // mov qword [rsp + 152], r10 +LBB4_134: + QUAD $0x0000008024bc894c // mov qword [rsp + 128], r15 + QUAD $0x0000009024b4894c // mov qword [rsp + 144], r14 + QUAD $0x000001102494894c // mov qword [rsp + 272], r10 + WORD $0x294d; BYTE $0xc2 // sub r10, r8 + QUAD $0x000000c02494894c // mov qword [rsp + 192], r10 -LBB4_128: +LBB4_135: WORD $0x2e0f; BYTE $0x03 // ucomiss xmm0, dword [rbx] - QUAD $0x000000882494950f // setne byte [rsp + 136] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + WORD $0x8941; BYTE $0xcd // mov r13d, ecx LONG $0x04432e0f // ucomiss xmm0, dword [rbx + 4] - LONG $0xd0950f41 // setne r8b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xc208 // or dl, al LONG $0x08432e0f // ucomiss xmm0, dword [rbx + 8] - LONG $0xd6950f41 // setne r14b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl LONG $0x0c432e0f // ucomiss xmm0, dword [rbx + 12] - LONG $0xd5950f41 // setne r13b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x10244c88 // mov byte [rsp + 16], cl LONG $0x10432e0f // ucomiss xmm0, dword [rbx + 16] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x18244c88 // mov byte [rsp + 24], cl LONG $0x14432e0f // ucomiss xmm0, dword [rbx + 20] - LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl LONG $0x18432e0f // ucomiss xmm0, dword [rbx + 24] - WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x40244c88 // mov byte [rsp + 64], cl LONG $0x1c432e0f // ucomiss xmm0, dword [rbx + 28] - LONG $0xd3950f41 // setne r11b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x08244c88 // mov byte [rsp + 8], cl LONG $0x20432e0f // ucomiss xmm0, dword [rbx + 32] - QUAD $0x000000a02494950f // setne byte [rsp + 160] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x30244c88 // mov byte [rsp + 48], cl LONG $0x24432e0f // ucomiss xmm0, dword [rbx + 36] - WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x38244c88 // mov byte [rsp + 56], cl LONG $0x28432e0f // ucomiss xmm0, dword [rbx + 40] - LONG $0xd6950f40 // setne sil + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x68244c88 // mov byte [rsp + 104], cl LONG $0x2c432e0f // ucomiss xmm0, dword [rbx + 44] - LONG $0xd7950f40 // setne dil + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x48244c88 // mov byte [rsp + 72], cl LONG $0x30432e0f // ucomiss xmm0, dword [rbx + 48] - LONG $0xd2950f41 // setne r10b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x50244c88 // mov byte [rsp + 80], cl LONG $0x34432e0f // ucomiss xmm0, dword [rbx + 52] - LONG $0xd4950f41 // setne r12b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x58244c88 // mov byte [rsp + 88], cl LONG $0x38432e0f // ucomiss xmm0, dword [rbx + 56] - QUAD $0x000000b02494950f // setne byte [rsp + 176] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x78244c88 // mov byte [rsp + 120], cl LONG $0x3c432e0f // ucomiss xmm0, dword [rbx + 60] - LONG $0xd1950f41 // setne r9b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x70244c88 // mov byte [rsp + 112], cl LONG $0x40432e0f // ucomiss xmm0, dword [rbx + 64] - LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x60244c88 // mov byte [rsp + 96], cl LONG $0x44432e0f // ucomiss xmm0, dword [rbx + 68] - QUAD $0x000000c02494950f // setne byte [rsp + 192] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd4950f41 // setne r12b + WORD $0x0841; BYTE $0xc4 // or r12b, al LONG $0x48432e0f // ucomiss xmm0, dword [rbx + 72] - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xb0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 176], cl LONG $0x4c432e0f // ucomiss xmm0, dword [rbx + 76] - LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xa0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 160], cl LONG $0x50432e0f // ucomiss xmm0, dword [rbx + 80] - LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xe0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 224], cl LONG $0x54432e0f // ucomiss xmm0, dword [rbx + 84] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x98248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 152], cl LONG $0x58432e0f // ucomiss xmm0, dword [rbx + 88] - LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd6950f41 // setne r14b + WORD $0x0841; BYTE $0xc6 // or r14b, al LONG $0x5c432e0f // ucomiss xmm0, dword [rbx + 92] - LONG $0xd7950f41 // setne r15b + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd0950f41 // setne r8b + WORD $0x0841; BYTE $0xc0 // or r8b, al LONG $0x60432e0f // ucomiss xmm0, dword [rbx + 96] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x88248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 136], cl LONG $0x64432e0f // ucomiss xmm0, dword [rbx + 100] - LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd3950f41 // setne r11b + WORD $0x0841; BYTE $0xc3 // or r11b, al LONG $0x68432e0f // ucomiss xmm0, dword [rbx + 104] - LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd2950f41 // setne r10b + WORD $0x0841; BYTE $0xc2 // or r10b, al LONG $0x6c432e0f // ucomiss xmm0, dword [rbx + 108] - LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd1950f41 // setne r9b + WORD $0x0841; BYTE $0xc1 // or r9b, al LONG $0x70432e0f // ucomiss xmm0, dword [rbx + 112] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f41 // setne r15b + WORD $0x0841; BYTE $0xc7 // or r15b, al LONG $0x74432e0f // ucomiss xmm0, dword [rbx + 116] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xf0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 240], cl LONG $0x78432e0f // ucomiss xmm0, dword [rbx + 120] - QUAD $0x000000802494950f // setne byte [rsp + 128] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f40 // setne dil + WORD $0x0840; BYTE $0xc7 // or dil, al LONG $0x7c432e0f // ucomiss xmm0, dword [rbx + 124] - WORD $0x950f; BYTE $0xd1 // setne cl - WORD $0x0045; BYTE $0xc0 // add r8b, r8b - QUAD $0x0000008824840244 // add r8b, byte [rsp + 136] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e3c041 // shl r11b, 7 - WORD $0x0841; BYTE $0xc3 // or r11b, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0845; BYTE $0xc6 // or r14b, r8b + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd6950f40 // setne sil + WORD $0x0840; BYTE $0xc6 // or sil, al WORD $0xd200 // add dl, dl - LONG $0xa0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 160] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xf5 // or r13b, r14b - LONG $0x02e6c040 // shl sil, 2 - WORD $0x0840; BYTE $0xd6 // or sil, dl - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0x0844; BYTE $0xea // or dl, r13b - WORD $0x8941; BYTE $0xd0 // mov r8d, edx - LONG $0x03e7c040 // shl dil, 3 - WORD $0x0840; BYTE $0xf7 // or dil, sil - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0844; BYTE $0xc2 // or dl, r8b - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - QUAD $0x000000b024b4b60f // movzx esi, byte [rsp + 176] - LONG $0x06e6c040 // shl sil, 6 - LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xf1 // or r9b, sil - WORD $0x0841; BYTE $0xd3 // or r11b, dl - WORD $0x0845; BYTE $0xe1 // or r9b, r12b - QUAD $0x000000c02484b60f // movzx eax, byte [rsp + 192] - WORD $0xc000 // add al, al - LONG $0x60244402 // add al, byte [rsp + 96] - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0xc208 // or dl, al - WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xf2 // or dl, sil - WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xf2 // or dl, sil - WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] + WORD $0x8941; BYTE $0xd5 // mov r13d, edx + LONG $0x2454b60f; BYTE $0x20 // movzx edx, byte [rsp + 32] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xf2 // or dl, sil - LONG $0x24748b48; BYTE $0x08 // mov rsi, qword [rsp + 8] - WORD $0x8844; BYTE $0x1e // mov byte [rsi], r11b - LONG $0x247cb60f; BYTE $0x38 // movzx edi, byte [rsp + 56] - LONG $0x06e7c040 // shl dil, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xff // or r15b, dil - LONG $0x014e8844 // mov byte [rsi + 1], r9b - WORD $0x0841; BYTE $0xd7 // or r15b, dl LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] - WORD $0xc000 // add al, al - LONG $0x20244402 // add al, byte [rsp + 32] - WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xd008 // or al, dl WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] + WORD $0xc900 // add cl, cl + LONG $0x30244c02 // add cl, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0xd008 // or al, dl - WORD $0xc289 // mov edx, eax + LONG $0x08244488 // mov byte [rsp + 8], al + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xd008 // or al, dl - WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0x0844; BYTE $0xe8 // or al, r13b + LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] + WORD $0xe2c0; BYTE $0x04 // shl dl, 4 + WORD $0xca08 // or dl, cl + LONG $0x6cb60f44; WORD $0x5824 // movzx r13d, byte [rsp + 88] + LONG $0x05e5c041 // shl r13b, 5 + LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x0844; BYTE $0xe9 // or cl, r13b + LONG $0x6cb60f44; WORD $0x7024 // movzx r13d, byte [rsp + 112] + LONG $0x07e5c041 // shl r13b, 7 + WORD $0x0841; BYTE $0xcd // or r13b, cl + WORD $0x0045; BYTE $0xe4 // add r12b, r12b + LONG $0x24640244; BYTE $0x60 // add r12b, byte [rsp + 96] + WORD $0x8944; BYTE $0xe1 // mov ecx, r12d + QUAD $0x0000b024a4b60f44; BYTE $0x00 // movzx r12d, byte [rsp + 176] + LONG $0x02e4c041 // shl r12b, 2 + WORD $0x0841; BYTE $0xcc // or r12b, cl + QUAD $0x000000a0248cb60f // movzx ecx, byte [rsp + 160] + WORD $0xe1c0; BYTE $0x03 // shl cl, 3 + WORD $0x0844; BYTE $0xe1 // or cl, r12b + WORD $0x8941; BYTE $0xcc // mov r12d, ecx + QUAD $0x000000e0248cb60f // movzx ecx, byte [rsp + 224] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0x0844; BYTE $0xe1 // or cl, r12b + LONG $0x64b60f44; WORD $0x0824 // movzx r12d, byte [rsp + 8] + WORD $0x0841; BYTE $0xc4 // or r12b, al + QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xd008 // or al, dl - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0xd108 // or cl, dl - WORD $0xc108 // or cl, al - LONG $0x027e8844 // mov byte [rsi + 2], r15b - WORD $0x4e88; BYTE $0x03 // mov byte [rsi + 3], cl + LONG $0x06e6c041 // shl r14b, 6 + WORD $0x0841; BYTE $0xc6 // or r14b, al + WORD $0x0841; BYTE $0xd5 // or r13b, dl + LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xf0 // or r8b, r14b + WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0045; BYTE $0xdb // add r11b, r11b + QUAD $0x00000088249c0244 // add r11b, byte [rsp + 136] + LONG $0x02e2c041 // shl r10b, 2 + WORD $0x0845; BYTE $0xda // or r10b, r11b + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xd1 // or r9b, r10b + LONG $0x04e7c041 // shl r15b, 4 + WORD $0x0845; BYTE $0xcf // or r15b, r9b + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] + WORD $0x8844; BYTE $0x20 // mov byte [rax], r12b + QUAD $0x000000f0248cb60f // movzx ecx, byte [rsp + 240] + WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + LONG $0x06e7c040 // shl dil, 6 + WORD $0x0840; BYTE $0xcf // or dil, cl + LONG $0x01688844 // mov byte [rax + 1], r13b + LONG $0x07e6c040 // shl sil, 7 + WORD $0x0840; BYTE $0xfe // or sil, dil + WORD $0x0844; BYTE $0xfe // or sil, r15b + LONG $0x02408844 // mov byte [rax + 2], r8b + LONG $0x03708840 // mov byte [rax + 3], sil LONG $0x80c38148; WORD $0x0000; BYTE $0x00 // add rbx, 128 - LONG $0x04c68348 // add rsi, 4 - LONG $0x24748948; BYTE $0x08 // mov qword [rsp + 8], rsi - QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 - JNE LBB4_128 - LONG $0x245c8b4c; BYTE $0x08 // mov r11, qword [rsp + 8] - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] - QUAD $0x000000e024948b4c // mov r10, qword [rsp + 224] - JMP LBB4_148 + LONG $0x04c08348 // add rax, 4 + QUAD $0x0000008024848948 // mov qword [rsp + 128], rax + QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 + JNE LBB4_135 + QUAD $0x0000008024bc8b4c // mov r15, qword [rsp + 128] + QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] + QUAD $0x0000011024948b4c // mov r10, qword [rsp + 272] + JMP LBB4_146 -LBB4_130: - LONG $0x2474894c; BYTE $0x68 // mov qword [rsp + 104], r14 +LBB4_137: + LONG $0x2464894c; BYTE $0x68 // mov qword [rsp + 104], r12 -LBB4_131: +LBB4_138: LONG $0x05e2c149 // shl r10, 5 - WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB4_179 - WORD $0x894d; BYTE $0xf8 // mov r8, r15 + WORD $0x394d; BYTE $0xf2 // cmp r10, r14 + JGE LBB4_174 + WORD $0x894d; BYTE $0xf0 // mov r8, r14 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 - WORD $0x014d; BYTE $0xfa // add r10, r15 - JE LBB4_137 + WORD $0x014d; BYTE $0xf2 // add r10, r14 + JE LBB4_144 WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xc9 // xor r9d, r9d LONG $0x24748b4c; BYTE $0x68 // mov r14, qword [rsp + 104] -LBB4_156: +LBB4_154: WORD $0x894c; BYTE $0xc8 // mov rax, r9 LONG $0x0e1c3846 // cmp byte [rsi + r9], r11b WORD $0x950f; BYTE $0xd3 // setne bl @@ -20228,129 +21325,65 @@ LBB4_156: WORD $0xd030 // xor al, dl LONG $0x3e048841 // mov byte [r14 + rdi], al WORD $0x394d; BYTE $0xca // cmp r10, r9 - JNE LBB4_156 - JMP LBB4_159 + JNE LBB4_154 + JMP LBB4_157 -LBB4_134: - LONG $0x2474894c; BYTE $0x68 // mov qword [rsp + 104], r14 +LBB4_141: + LONG $0x2464894c; BYTE $0x68 // mov qword [rsp + 104], r12 -LBB4_135: +LBB4_142: LONG $0x05e2c149 // shl r10, 5 - WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB4_179 - WORD $0x894d; BYTE $0xf8 // mov r8, r15 + WORD $0x394d; BYTE $0xf2 // cmp r10, r14 + JGE LBB4_174 + WORD $0x894d; BYTE $0xf0 // mov r8, r14 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 - WORD $0x014d; BYTE $0xfa // add r10, r15 - JNE LBB4_157 + WORD $0x014d; BYTE $0xf2 // add r10, r14 + JNE LBB4_155 -LBB4_137: +LBB4_144: WORD $0x3145; BYTE $0xc9 // xor r9d, r9d LONG $0x01c0f641 // test r8b, 1 - JE LBB4_179 - JMP LBB4_161 + JE LBB4_174 + JMP LBB4_159 -LBB4_138: - WORD $0x894d; BYTE $0xf4 // mov r12, r14 +LBB4_145: + WORD $0x894d; BYTE $0xe7 // mov r15, r12 + WORD $0x8948; BYTE $0xf3 // mov rbx, rsi -LBB4_139: +LBB4_146: LONG $0x05e2c149 // shl r10, 5 - WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB4_179 - WORD $0x894d; BYTE $0xf8 // mov r8, r15 + WORD $0x394d; BYTE $0xf2 // cmp r10, r14 + JGE LBB4_174 + WORD $0x894d; BYTE $0xf0 // mov r8, r14 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 - WORD $0x014d; BYTE $0xfa // add r10, r15 - JE LBB4_146 - WORD $0x894d; BYTE $0xc1 // mov r9, r8 - LONG $0xfee18349 // and r9, -2 - WORD $0x3145; BYTE $0xf6 // xor r14d, r14d + WORD $0x014d; BYTE $0xf2 // add r10, r14 + JNE LBB4_175 + WORD $0xf631 // xor esi, esi + JMP LBB4_177 -LBB4_142: - WORD $0x8948; BYTE $0xf0 // mov rax, rsi - LONG $0x2e394466 // cmp word [rsi], r13w - WORD $0x950f; BYTE $0xd2 // setne dl - WORD $0xdaf6 // neg dl - WORD $0x894c; BYTE $0xf7 // mov rdi, r14 +LBB4_149: + WORD $0x894d; BYTE $0xc2 // mov r10, r8 + LONG $0xfee28349 // and r10, -2 + WORD $0x3145; BYTE $0xdb // xor r11d, r11d + +LBB4_150: + WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xd8f6 // neg al + WORD $0x894c; BYTE $0xdf // mov rdi, r11 LONG $0x03efc148 // shr rdi, 3 - LONG $0x14b60f45; BYTE $0x3c // movzx r10d, byte [r12 + rdi] - WORD $0x8944; BYTE $0xf1 // mov ecx, r14d + WORD $0x894d; BYTE $0xe6 // mov r14, r12 + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] + WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 WORD $0xe3d2 // shl bl, cl - WORD $0x3044; BYTE $0xd2 // xor dl, r10b - WORD $0xd320 // and bl, dl - WORD $0x3044; BYTE $0xd3 // xor bl, r10b + WORD $0x3044; BYTE $0xc8 // xor al, r9b + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xcb // xor bl, r9b LONG $0x3c1c8841 // mov byte [r12 + rdi], bl - LONG $0x02c68349 // add r14, 2 - LONG $0x6e394466; BYTE $0x02 // cmp word [rsi + 2], r13w - LONG $0x04768d48 // lea rsi, [rsi + 4] - WORD $0x950f; BYTE $0xd2 // setne dl - WORD $0xdaf6 // neg dl - WORD $0xda30 // xor dl, bl - WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0xd020 // and al, dl - WORD $0xd830 // xor al, bl - LONG $0x3c048841 // mov byte [r12 + rdi], al - WORD $0x394d; BYTE $0xf1 // cmp r9, r14 - JNE LBB4_142 - JMP LBB4_173 - -LBB4_143: - WORD $0x894d; BYTE $0xf4 // mov r12, r14 - -LBB4_144: - LONG $0x05e2c149 // shl r10, 5 - WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB4_179 - WORD $0x894d; BYTE $0xf8 // mov r8, r15 - WORD $0x294d; BYTE $0xd0 // sub r8, r10 - WORD $0xf749; BYTE $0xd2 // not r10 - WORD $0x014d; BYTE $0xfa // add r10, r15 - JNE LBB4_171 - -LBB4_146: - WORD $0x3145; BYTE $0xf6 // xor r14d, r14d - JMP LBB4_173 - -LBB4_147: - WORD $0x894d; BYTE $0xf3 // mov r11, r14 - WORD $0x8948; BYTE $0xf3 // mov rbx, rsi - -LBB4_148: - LONG $0x05e2c149 // shl r10, 5 - WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB4_179 - WORD $0x894d; BYTE $0xf8 // mov r8, r15 - WORD $0x294d; BYTE $0xd0 // sub r8, r10 - WORD $0xf749; BYTE $0xd2 // not r10 - WORD $0x014d; BYTE $0xfa // add r10, r15 - JNE LBB4_175 - WORD $0xf631 // xor esi, esi - JMP LBB4_177 - -LBB4_151: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 - WORD $0x3145; BYTE $0xdb // xor r11d, r11d - -LBB4_152: - WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0xd8f6 // neg al - WORD $0x894c; BYTE $0xdf // mov rdi, r11 - LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] - WORD $0x8944; BYTE $0xd9 // mov ecx, r11d - WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b3 // mov bl, 1 - WORD $0xe3d2 // shl bl, cl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl LONG $0x02c38349 // add r11, 2 LONG $0x046e3944 // cmp dword [rsi + 4], r13d LONG $0x08768d48 // lea rsi, [rsi + 8] @@ -20362,23 +21395,23 @@ LBB4_152: WORD $0xe2d2 // shl dl, cl WORD $0xc220 // and dl, al WORD $0xda30 // xor dl, bl - LONG $0x3e148841 // mov byte [r14 + rdi], dl + LONG $0x3c148841 // mov byte [r12 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB4_152 + JNE LBB4_150 -LBB4_153: +LBB4_151: LONG $0x01c0f641 // test r8b, 1 - JE LBB4_179 + JE LBB4_174 WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d - JMP LBB4_170 + JMP LBB4_172 -LBB4_157: +LBB4_155: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xc9 // xor r9d, r9d LONG $0x24748b4c; BYTE $0x68 // mov r14, qword [rsp + 104] -LBB4_158: +LBB4_156: WORD $0x894c; BYTE $0xc8 // mov rax, r9 LONG $0x0e1c3846 // cmp byte [rsi + r9], r11b WORD $0x950f; BYTE $0xd3 // setne bl @@ -20406,14 +21439,14 @@ LBB4_158: WORD $0xd030 // xor al, dl LONG $0x3e048841 // mov byte [r14 + rdi], al WORD $0x394d; BYTE $0xca // cmp r10, r9 - JNE LBB4_158 + JNE LBB4_156 -LBB4_159: +LBB4_157: WORD $0x014c; BYTE $0xce // add rsi, r9 LONG $0x01c0f641 // test r8b, 1 - JE LBB4_179 + JE LBB4_174 -LBB4_161: +LBB4_159: WORD $0x3844; BYTE $0x1e // cmp byte [rsi], r11b WORD $0x950f; BYTE $0xd0 // setne al WORD $0xd8f6 // neg al @@ -20429,32 +21462,37 @@ LBB4_161: WORD $0xc320 // and bl, al WORD $0x3040; BYTE $0xfb // xor bl, dil LONG $0x101c8841 // mov byte [r8 + rdx], bl - JMP LBB4_179 + JMP LBB4_174 -LBB4_162: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 +LBB4_160: + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d -LBB4_163: +LBB4_161: LONG $0x062e0f66 // ucomisd xmm0, qword [rsi] + WORD $0x9a0f; BYTE $0xd1 // setp cl WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xc808 // or al, cl WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xdf // mov rdi, r11 LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] - WORD $0x3044; BYTE $0xc8 // xor al, r9b + WORD $0x894d; BYTE $0xe6 // mov r14, r12 + LONG $0x14b60f45; BYTE $0x3c // movzx r10d, byte [r12 + rdi] WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 WORD $0xe3d2 // shl bl, cl + WORD $0x3044; BYTE $0xd0 // xor al, r10b WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + WORD $0x3044; BYTE $0xd3 // xor bl, r10b + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl LONG $0x02c38349 // add r11, 2 LONG $0x462e0f66; BYTE $0x08 // ucomisd xmm0, qword [rsi + 8] LONG $0x10768d48 // lea rsi, [rsi + 16] + LONG $0xd29a0f41 // setp r10b WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x0844; BYTE $0xd0 // or al, r10b WORD $0xd8f6 // neg al WORD $0xd830 // xor al, bl WORD $0xc980; BYTE $0x01 // or cl, 1 @@ -20462,78 +21500,37 @@ LBB4_163: WORD $0xe2d2 // shl dl, cl WORD $0xc220 // and dl, al WORD $0xda30 // xor dl, bl - LONG $0x3e148841 // mov byte [r14 + rdi], dl - WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB4_163 - -LBB4_164: - LONG $0x01c0f641 // test r8b, 1 - JE LBB4_179 - LONG $0x062e0f66 // ucomisd xmm0, qword [rsi] - JMP LBB4_170 - -LBB4_166: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 - WORD $0x3145; BYTE $0xdb // xor r11d, r11d - -LBB4_167: - WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0xd8f6 // neg al - WORD $0x894c; BYTE $0xdf // mov rdi, r11 - LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] - WORD $0x8944; BYTE $0xd9 // mov ecx, r11d - WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b3 // mov bl, 1 - WORD $0xe3d2 // shl bl, cl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3e1c8841 // mov byte [r14 + rdi], bl - LONG $0x02c38349 // add r11, 2 - LONG $0x086e394c // cmp qword [rsi + 8], r13 - LONG $0x10768d48 // lea rsi, [rsi + 16] - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0xd8f6 // neg al - WORD $0xd830 // xor al, bl - WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b2 // mov dl, 1 - WORD $0xe2d2 // shl dl, cl - WORD $0xc220 // and dl, al - WORD $0xda30 // xor dl, bl - LONG $0x3e148841 // mov byte [r14 + rdi], dl - WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB4_167 + LONG $0x3c148841 // mov byte [r12 + rdi], dl + WORD $0x394d; BYTE $0xd9 // cmp r9, r11 + JNE LBB4_161 -LBB4_168: +LBB4_162: LONG $0x01c0f641 // test r8b, 1 - JE LBB4_179 - WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 - -LBB4_170: - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0xd8f6 // neg al - WORD $0x894c; BYTE $0xda // mov rdx, r11 - LONG $0x03eac148 // shr rdx, 3 - LONG $0x16348a41 // mov sil, byte [r14 + rdx] + JE LBB4_174 + LONG $0x062e0f66 // ucomisd xmm0, qword [rsi] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xc208 // or dl, al + WORD $0xdaf6 // neg dl + WORD $0x894c; BYTE $0xd8 // mov rax, r11 + LONG $0x03e8c148 // shr rax, 3 + LONG $0x04348a41 // mov sil, byte [r12 + rax] LONG $0x07e38041 // and r11b, 7 WORD $0x01b3 // mov bl, 1 WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe3d2 // shl bl, cl - WORD $0x3040; BYTE $0xf0 // xor al, sil - WORD $0xc320 // and bl, al + WORD $0x3040; BYTE $0xf2 // xor dl, sil + WORD $0xd320 // and bl, dl WORD $0x3040; BYTE $0xf3 // xor bl, sil - LONG $0x161c8841 // mov byte [r14 + rdx], bl - JMP LBB4_179 + LONG $0x041c8841 // mov byte [r12 + rax], bl + JMP LBB4_174 -LBB4_171: +LBB4_164: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0x3145; BYTE $0xf6 // xor r14d, r14d -LBB4_172: +LBB4_165: WORD $0x8948; BYTE $0xf0 // mov rax, rsi LONG $0x2e394466 // cmp word [rsi], r13w WORD $0x950f; BYTE $0xd2 // setne dl @@ -20562,11 +21559,11 @@ LBB4_172: WORD $0xd830 // xor al, bl LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x394d; BYTE $0xf1 // cmp r9, r14 - JNE LBB4_172 + JNE LBB4_165 -LBB4_173: +LBB4_166: LONG $0x01c0f641 // test r8b, 1 - JE LBB4_179 + JE LBB4_174 LONG $0x2e394466 // cmp word [rsi], r13w WORD $0x950f; BYTE $0xd0 // setne al WORD $0xd8f6 // neg al @@ -20580,85 +21577,149 @@ LBB4_173: WORD $0x3040; BYTE $0xf8 // xor al, dil WORD $0xc320 // and bl, al WORD $0x3040; BYTE $0xfb // xor bl, dil - LONG $0x141c8841 // mov byte [r12 + rdx], bl - JMP LBB4_179 + JMP LBB4_173 -LBB4_175: +LBB4_168: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 + WORD $0x3145; BYTE $0xdb // xor r11d, r11d + +LBB4_169: + WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xd8f6 // neg al + WORD $0x894c; BYTE $0xdf // mov rdi, r11 + LONG $0x03efc148 // shr rdi, 3 + WORD $0x894d; BYTE $0xe6 // mov r14, r12 + LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] + WORD $0x8944; BYTE $0xd9 // mov ecx, r11d + WORD $0xe180; BYTE $0x06 // and cl, 6 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0x3044; BYTE $0xc8 // xor al, r9b + WORD $0xc320 // and bl, al + WORD $0x3044; BYTE $0xcb // xor bl, r9b + LONG $0x3c1c8841 // mov byte [r12 + rdi], bl + LONG $0x02c38349 // add r11, 2 + LONG $0x086e394c // cmp qword [rsi + 8], r13 + LONG $0x10768d48 // lea rsi, [rsi + 16] + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xd8f6 // neg al + WORD $0xd830 // xor al, bl + WORD $0xc980; BYTE $0x01 // or cl, 1 + WORD $0x01b2 // mov dl, 1 + WORD $0xe2d2 // shl dl, cl + WORD $0xc220 // and dl, al + WORD $0xda30 // xor dl, bl + LONG $0x3c148841 // mov byte [r12 + rdi], dl + WORD $0x394d; BYTE $0xda // cmp r10, r11 + JNE LBB4_169 + +LBB4_170: + LONG $0x01c0f641 // test r8b, 1 + JE LBB4_174 + WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 + +LBB4_172: + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xd8f6 // neg al + WORD $0x894c; BYTE $0xda // mov rdx, r11 + LONG $0x03eac148 // shr rdx, 3 + LONG $0x14348a41 // mov sil, byte [r12 + rdx] + LONG $0x07e38041 // and r11b, 7 + WORD $0x01b3 // mov bl, 1 + WORD $0x8944; BYTE $0xd9 // mov ecx, r11d + WORD $0xe3d2 // shl bl, cl + WORD $0x3040; BYTE $0xf0 // xor al, sil + WORD $0xc320 // and bl, al + WORD $0x3040; BYTE $0xf3 // xor bl, sil + +LBB4_173: + LONG $0x141c8841 // mov byte [r12 + rdx], bl + +LBB4_174: + MOVQ 320(SP), SP + RET + +LBB4_175: + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 WORD $0xf631 // xor esi, esi - WORD $0x894d; BYTE $0xde // mov r14, r11 + WORD $0x894d; BYTE $0xfe // mov r14, r15 LBB4_176: WORD $0x2e0f; BYTE $0x03 // ucomiss xmm0, dword [rbx] + WORD $0x9a0f; BYTE $0xd1 // setp cl WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xca08 // or dl, cl WORD $0xdaf6 // neg dl WORD $0x8948; BYTE $0xf7 // mov rdi, rsi LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] - WORD $0x3044; BYTE $0xca // xor dl, r9b + LONG $0x14b60f45; BYTE $0x3e // movzx r10d, byte [r14 + rdi] WORD $0xf189 // mov ecx, esi WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0xd020 // and al, dl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + WORD $0xb341; BYTE $0x01 // mov r11b, 1 + WORD $0xd241; BYTE $0xe3 // shl r11b, cl + WORD $0x3044; BYTE $0xd2 // xor dl, r10b + WORD $0x2041; BYTE $0xd3 // and r11b, dl + WORD $0x3045; BYTE $0xd3 // xor r11b, r10b + LONG $0x3e1c8845 // mov byte [r14 + rdi], r11b LONG $0x02c68348 // add rsi, 2 LONG $0x04432e0f // ucomiss xmm0, dword [rbx + 4] LONG $0x085b8d48 // lea rbx, [rbx + 8] - LONG $0xd1950f41 // setne r9b - WORD $0xf641; BYTE $0xd9 // neg r9b - WORD $0x3041; BYTE $0xc1 // xor r9b, al + LONG $0xd29a0f41 // setp r10b + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0x0844; BYTE $0xd2 // or dl, r10b + WORD $0xdaf6 // neg dl + WORD $0x3044; BYTE $0xda // xor dl, r11b WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b2 // mov dl, 1 - WORD $0xe2d2 // shl dl, cl - WORD $0x2044; BYTE $0xca // and dl, r9b - WORD $0xc230 // xor dl, al - LONG $0x3e148841 // mov byte [r14 + rdi], dl - WORD $0x3949; BYTE $0xf2 // cmp r10, rsi + WORD $0x01b0 // mov al, 1 + WORD $0xe0d2 // shl al, cl + WORD $0xd020 // and al, dl + WORD $0x3044; BYTE $0xd8 // xor al, r11b + LONG $0x3e048841 // mov byte [r14 + rdi], al + WORD $0x3949; BYTE $0xf1 // cmp r9, rsi JNE LBB4_176 LBB4_177: LONG $0x01c0f641 // test r8b, 1 - JE LBB4_179 + JE LBB4_174 WORD $0x2e0f; BYTE $0x03 // ucomiss xmm0, dword [rbx] - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0xd8f6 // neg al - WORD $0x8948; BYTE $0xf2 // mov rdx, rsi - LONG $0x03eac148 // shr rdx, 3 - LONG $0x133c8a41 // mov dil, byte [r11 + rdx] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xc208 // or dl, al + WORD $0xdaf6 // neg dl + WORD $0x8948; BYTE $0xf0 // mov rax, rsi + LONG $0x03e8c148 // shr rax, 3 + LONG $0x073c8a41 // mov dil, byte [r15 + rax] LONG $0x07e68040 // and sil, 7 WORD $0x01b3 // mov bl, 1 WORD $0xf189 // mov ecx, esi WORD $0xe3d2 // shl bl, cl - WORD $0x3040; BYTE $0xf8 // xor al, dil - WORD $0xc320 // and bl, al + WORD $0x3040; BYTE $0xfa // xor dl, dil + WORD $0xd320 // and bl, dl WORD $0x3040; BYTE $0xfb // xor bl, dil - LONG $0x131c8841 // mov byte [r11 + rdx], bl + LONG $0x071c8841 // mov byte [r15 + rax], bl + JMP LBB4_174 LBB4_179: - MOVQ 304(SP), SP - RET - -LBB4_180: LONG $0xf0e28349 // and r10, -16 WORD $0x894c; BYTE $0xd0 // mov rax, r10 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi - QUAD $0x0000012024848948 // mov qword [rsp + 288], rax - QUAD $0x000000f02494894c // mov qword [rsp + 240], r10 - LONG $0x96048d4b // lea rax, [r14 + 4*r10] + QUAD $0x0000013024848948 // mov qword [rsp + 304], rax + QUAD $0x000000d82494894c // mov qword [rsp + 216], r10 + LONG $0x94048d4b // lea rax, [r12 + 4*r10] LONG $0x24448948; BYTE $0x68 // mov qword [rsp + 104], rax LONG $0xc3b60f41 // movzx eax, r11b LONG $0xc86e0f66 // movd xmm1, eax LONG $0xc0ef0f66 // pxor xmm0, xmm0 LONG $0x00380f66; BYTE $0xc8 // pshufb xmm1, xmm0 - QUAD $0x000100248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 256], xmm1 + QUAD $0x000120248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 288], xmm1 WORD $0xc031 // xor eax, eax - QUAD $0x0000008024b4894c // mov qword [rsp + 128], r14 + QUAD $0x0000008024a4894c // mov qword [rsp + 128], r12 -LBB4_181: +LBB4_180: WORD $0x8949; BYTE $0xc1 // mov r9, rax QUAD $0x0000009824848948 // mov qword [rsp + 152], rax WORD $0x8948; BYTE $0xc1 // mov rcx, rax @@ -20695,14 +21756,14 @@ LBB4_181: LONG $0x6e0f4466; BYTE $0xc9 // movd xmm9, ecx LONG $0x164cb60f; BYTE $0x09 // movzx ecx, byte [rsi + rdx + 9] LONG $0xc16e0f66 // movd xmm0, ecx - QUAD $0x0000d024847f0f66; BYTE $0x00 // movdqa oword [rsp + 208], xmm0 + QUAD $0x0000c024847f0f66; BYTE $0x00 // movdqa oword [rsp + 192], xmm0 LONG $0x164cb60f; BYTE $0x0a // movzx ecx, byte [rsi + rdx + 10] LONG $0x6e0f4466; BYTE $0xe1 // movd xmm12, ecx LONG $0x164cb60f; BYTE $0x0b // movzx ecx, byte [rsi + rdx + 11] LONG $0x6e0f4466; BYTE $0xe9 // movd xmm13, ecx LONG $0x164cb60f; BYTE $0x0c // movzx ecx, byte [rsi + rdx + 12] LONG $0xc16e0f66 // movd xmm0, ecx - QUAD $0x0000e024847f0f66; BYTE $0x00 // movdqa oword [rsp + 224], xmm0 + QUAD $0x0000f024847f0f66; BYTE $0x00 // movdqa oword [rsp + 240], xmm0 LONG $0x164cb60f; BYTE $0x0d // movzx ecx, byte [rsi + rdx + 13] LONG $0x6e0f4466; BYTE $0xd9 // movd xmm11, ecx LONG $0x164cb60f; BYTE $0x0e // movzx ecx, byte [rsi + rdx + 14] @@ -20710,10 +21771,10 @@ LBB4_181: LONG $0x164cb60f; BYTE $0x0f // movzx ecx, byte [rsi + rdx + 15] LONG $0xc16e0f66 // movd xmm0, ecx QUAD $0x0000b024847f0f66; BYTE $0x00 // movdqa oword [rsp + 176], xmm0 - LONG $0x24548948; BYTE $0x18 // mov qword [rsp + 24], rdx + LONG $0x24548948; BYTE $0x20 // mov qword [rsp + 32], rdx WORD $0x8948; BYTE $0xd1 // mov rcx, rdx LONG $0x20c98348 // or rcx, 32 - LONG $0x244c8948; BYTE $0x28 // mov qword [rsp + 40], rcx + LONG $0x244c8948; BYTE $0x18 // mov qword [rsp + 24], rcx LONG $0x40cb8349 // or r11, 64 LONG $0x245c894c; BYTE $0x70 // mov qword [rsp + 112], r11 LONG $0x60c88349 // or r8, 96 @@ -20726,9 +21787,9 @@ LBB4_181: LONG $0xe0cc8149; WORD $0x0000; BYTE $0x00 // or r12, 224 LONG $0x00cf8149; WORD $0x0001; BYTE $0x00 // or r15, 256 LONG $0x20cf8148; WORD $0x0001; BYTE $0x00 // or rdi, 288 - QUAD $0x000000c024bc8948 // mov qword [rsp + 192], rdi + QUAD $0x000000e024bc8948 // mov qword [rsp + 224], rdi LONG $0x40c98149; WORD $0x0001; BYTE $0x00 // or r9, 320 - LONG $0x244c894c; BYTE $0x20 // mov qword [rsp + 32], r9 + LONG $0x244c894c; BYTE $0x28 // mov qword [rsp + 40], r9 LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] LONG $0x60cb8148; WORD $0x0001; BYTE $0x00 // or rbx, 352 LONG $0x245c8948; BYTE $0x30 // mov qword [rsp + 48], rbx @@ -20742,7 +21803,7 @@ LBB4_181: WORD $0x8948; BYTE $0xd1 // mov rcx, rdx LONG $0xe0c98148; WORD $0x0001; BYTE $0x00 // or rcx, 480 LONG $0x244c8948; BYTE $0x38 // mov qword [rsp + 56], rcx - LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] + LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] LONG $0x203a0f66; WORD $0x1624; BYTE $0x01 // pinsrb xmm4, byte [rsi + rdx], 1 QUAD $0x021e24203a0f4266 // pinsrb xmm4, byte [rsi + r11], 2 QUAD $0x030624203a0f4266 // pinsrb xmm4, byte [rsi + r8], 3 @@ -20760,7 +21821,7 @@ LBB4_181: LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] LONG $0x203a0f66; WORD $0x1e24; BYTE $0x0e // pinsrb xmm4, byte [rsi + rbx], 14 LONG $0x203a0f66; WORD $0x0e24; BYTE $0x0f // pinsrb xmm4, byte [rsi + rcx], 15 - LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] + LONG $0x245c8b48; BYTE $0x18 // mov rbx, qword [rsp + 24] QUAD $0x01011e5c203a0f66 // pinsrb xmm3, byte [rsi + rbx + 1], 1 QUAD $0x011e5c203a0f4266; BYTE $0x02 // pinsrb xmm3, byte [rsi + r11 + 1], 2 QUAD $0x01065c203a0f4266; BYTE $0x03 // pinsrb xmm3, byte [rsi + r8 + 1], 3 @@ -20781,17 +21842,17 @@ LBB4_181: LONG $0x24448948; BYTE $0x58 // mov qword [rsp + 88], rax LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] QUAD $0x0e01065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 1], 14 - QUAD $0x00010024b46f0f66; BYTE $0x00 // movdqa xmm6, oword [rsp + 256] + QUAD $0x00012024b46f0f66; BYTE $0x00 // movdqa xmm6, oword [rsp + 288] LONG $0xe6740f66 // pcmpeqb xmm4, xmm6 QUAD $0x0f010e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 1], 15 LONG $0xde740f66 // pcmpeqb xmm3, xmm6 QUAD $0x00000100856f0f66 // movdqa xmm0, oword 256[rbp] /* [rip + .LCPI4_16] */ LONG $0xd8df0f66 // pandn xmm3, xmm0 LONG $0xdcfc0f66 // paddb xmm3, xmm4 - LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] LONG $0x0654b60f; BYTE $0x10 // movzx edx, byte [rsi + rax + 16] LONG $0x6e0f4466; BYTE $0xd2 // movd xmm10, edx - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] QUAD $0x0102066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 2], 1 LONG $0x24548b4c; BYTE $0x70 // mov r10, qword [rsp + 112] QUAD $0x02166c203a0f4266; BYTE $0x02 // pinsrb xmm5, byte [rsi + r10 + 2], 2 @@ -20804,9 +21865,9 @@ LBB4_181: WORD $0x894c; BYTE $0xeb // mov rbx, r13 QUAD $0x022e6c203a0f4266; BYTE $0x07 // pinsrb xmm5, byte [rsi + r13 + 2], 7 QUAD $0x023e6c203a0f4266; BYTE $0x08 // pinsrb xmm5, byte [rsi + r15 + 2], 8 - QUAD $0x000000c024948b48 // mov rdx, qword [rsp + 192] + QUAD $0x000000e024948b48 // mov rdx, qword [rsp + 224] QUAD $0x0902166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 2], 9 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0a02066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 2], 10 QUAD $0x02266c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rsi + r12 + 2], 11 LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] @@ -20816,7 +21877,7 @@ LBB4_181: QUAD $0x022e6c203a0f4266; BYTE $0x0e // pinsrb xmm5, byte [rsi + r13 + 2], 14 LONG $0x24448b4c; BYTE $0x38 // mov r8, qword [rsp + 56] QUAD $0x02066c203a0f4266; BYTE $0x0f // pinsrb xmm5, byte [rsi + r8 + 2], 15 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] QUAD $0x0103067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 3], 1 QUAD $0x03167c203a0f4266; BYTE $0x02 // pinsrb xmm7, byte [rsi + r10 + 3], 2 QUAD $0x03033e7c203a0f66 // pinsrb xmm7, byte [rsi + rdi + 3], 3 @@ -20826,7 +21887,7 @@ LBB4_181: QUAD $0x07031e7c203a0f66 // pinsrb xmm7, byte [rsi + rbx + 3], 7 QUAD $0x033e7c203a0f4266; BYTE $0x08 // pinsrb xmm7, byte [rsi + r15 + 3], 8 QUAD $0x0903167c203a0f66 // pinsrb xmm7, byte [rsi + rdx + 3], 9 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0a03067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 3], 10 QUAD $0x03267c203a0f4266; BYTE $0x0b // pinsrb xmm7, byte [rsi + r12 + 3], 11 QUAD $0x0c030e7c203a0f66 // pinsrb xmm7, byte [rsi + rcx + 3], 12 @@ -20834,7 +21895,7 @@ LBB4_181: QUAD $0x0d03067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 3], 13 QUAD $0x032e7c203a0f4266; BYTE $0x0e // pinsrb xmm7, byte [rsi + r13 + 3], 14 QUAD $0x03067c203a0f4266; BYTE $0x0f // pinsrb xmm7, byte [rsi + r8 + 3], 15 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] QUAD $0x0104064c203a0f66 // pinsrb xmm1, byte [rsi + rax + 4], 1 QUAD $0x04164c203a0f4266; BYTE $0x02 // pinsrb xmm1, byte [rsi + r10 + 4], 2 QUAD $0x03043e4c203a0f66 // pinsrb xmm1, byte [rsi + rdi + 4], 3 @@ -20848,7 +21909,7 @@ LBB4_181: QUAD $0x043e4c203a0f4266; BYTE $0x08 // pinsrb xmm1, byte [rsi + r15 + 4], 8 QUAD $0x0904164c203a0f66 // pinsrb xmm1, byte [rsi + rdx + 4], 9 WORD $0x8948; BYTE $0xd3 // mov rbx, rdx - LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] + LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] QUAD $0x0a04164c203a0f66 // pinsrb xmm1, byte [rsi + rdx + 4], 10 QUAD $0x04264c203a0f4266; BYTE $0x0b // pinsrb xmm1, byte [rsi + r12 + 4], 11 QUAD $0x0c040e4c203a0f66 // pinsrb xmm1, byte [rsi + rcx + 4], 12 @@ -20863,7 +21924,7 @@ LBB4_181: QUAD $0x00000120856f0f66 // movdqa xmm0, oword 288[rbp] /* [rip + .LCPI4_18] */ LONG $0xf8df0f66 // pandn xmm7, xmm0 LONG $0xfdeb0f66 // por xmm7, xmm5 - LONG $0x244c8b48; BYTE $0x18 // mov rcx, qword [rsp + 24] + LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] LONG $0x0e54b60f; BYTE $0x11 // movzx edx, byte [rsi + rcx + 17] LONG $0xe26e0f66 // movd xmm4, edx LONG $0xce740f66 // pcmpeqb xmm1, xmm6 @@ -20877,7 +21938,7 @@ LBB4_181: LONG $0xcbeb0f66 // por xmm1, xmm3 LONG $0x0e54b60f; BYTE $0x13 // movzx edx, byte [rsi + rcx + 19] LONG $0xea6e0f66 // movd xmm5, edx - LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] + LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] QUAD $0x01051654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 5], 1 QUAD $0x051654203a0f4266; BYTE $0x02 // pinsrb xmm2, byte [rsi + r10 + 5], 2 LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] @@ -20892,7 +21953,7 @@ LBB4_181: QUAD $0x053e54203a0f4266; BYTE $0x08 // pinsrb xmm2, byte [rsi + r15 + 5], 8 WORD $0x8949; BYTE $0xd9 // mov r9, rbx QUAD $0x09051e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 5], 9 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0a050654203a0f66 // pinsrb xmm2, byte [rsi + rax + 5], 10 LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] QUAD $0x0b050e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 5], 11 @@ -20952,7 +22013,7 @@ LBB4_181: QUAD $0x00000150856f0f66 // movdqa xmm0, oword 336[rbp] /* [rip + .LCPI4_21] */ LONG $0xdf0f4466; BYTE $0xc0 // pandn xmm8, xmm0 LONG $0xeb0f4466; BYTE $0xc2 // por xmm8, xmm2 - LONG $0x244c8b4c; BYTE $0x18 // mov r9, qword [rsp + 24] + LONG $0x244c8b4c; BYTE $0x20 // mov r9, qword [rsp + 32] LONG $0x54b60f42; WORD $0x140e // movzx edx, byte [rsi + r9 + 20] LONG $0xda6e0f66 // movd xmm3, edx WORD $0x8948; BYTE $0xc8 // mov rax, rcx @@ -20963,7 +22024,7 @@ LBB4_181: LONG $0xeb0f4566; BYTE $0xf0 // por xmm14, xmm8 LONG $0x54b60f42; WORD $0x150e // movzx edx, byte [rsi + r9 + 21] LONG $0xd26e0f66 // movd xmm2, edx - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] + LONG $0x244c8b48; BYTE $0x18 // mov rcx, qword [rsp + 24] QUAD $0x080e4c203a0f4466; BYTE $0x01 // pinsrb xmm9, byte [rsi + rcx + 8], 1 QUAD $0x08164c203a0f4666; BYTE $0x02 // pinsrb xmm9, byte [rsi + r10 + 8], 2 LONG $0x24448b4c; BYTE $0x40 // mov r8, qword [rsp + 64] @@ -20976,9 +22037,9 @@ LBB4_181: QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] QUAD $0x083e4c203a0f4666; BYTE $0x07 // pinsrb xmm9, byte [rsi + r15 + 8], 7 QUAD $0x08264c203a0f4666; BYTE $0x08 // pinsrb xmm9, byte [rsi + r12 + 8], 8 - QUAD $0x000000c024a48b4c // mov r12, qword [rsp + 192] + QUAD $0x000000e024a48b4c // mov r12, qword [rsp + 224] QUAD $0x08264c203a0f4666; BYTE $0x09 // pinsrb xmm9, byte [rsi + r12 + 8], 9 - LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] + LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] QUAD $0x08164c203a0f4466; BYTE $0x0a // pinsrb xmm9, byte [rsi + rdx + 8], 10 QUAD $0x081e4c203a0f4466; BYTE $0x0b // pinsrb xmm9, byte [rsi + rbx + 8], 11 QUAD $0x08364c203a0f4666; BYTE $0x0c // pinsrb xmm9, byte [rsi + r14 + 8], 12 @@ -20991,7 +22052,7 @@ LBB4_181: LONG $0xca6e0f66 // movd xmm1, edx LONG $0xc66f0f66 // movdqa xmm0, xmm6 LONG $0x740f4466; BYTE $0xce // pcmpeqb xmm9, xmm6 - QUAD $0x00d024b46f0f4466; WORD $0x0000 // movdqa xmm14, oword [rsp + 208] + QUAD $0x00c024b46f0f4466; WORD $0x0000 // movdqa xmm14, oword [rsp + 192] QUAD $0x090e74203a0f4466; BYTE $0x01 // pinsrb xmm14, byte [rsi + rcx + 9], 1 QUAD $0x091674203a0f4666; BYTE $0x02 // pinsrb xmm14, byte [rsi + r10 + 9], 2 QUAD $0x090674203a0f4666; BYTE $0x03 // pinsrb xmm14, byte [rsi + r8 + 9], 3 @@ -21006,7 +22067,7 @@ LBB4_181: QUAD $0x093e74203a0f4666; BYTE $0x08 // pinsrb xmm14, byte [rsi + r15 + 9], 8 WORD $0x894d; BYTE $0xe1 // mov r9, r12 QUAD $0x092674203a0f4666; BYTE $0x09 // pinsrb xmm14, byte [rsi + r12 + 9], 9 - LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] + LONG $0x246c8b4c; BYTE $0x28 // mov r13, qword [rsp + 40] QUAD $0x092e74203a0f4666; BYTE $0x0a // pinsrb xmm14, byte [rsi + r13 + 9], 10 QUAD $0x091e74203a0f4466; BYTE $0x0b // pinsrb xmm14, byte [rsi + rbx + 9], 11 WORD $0x894d; BYTE $0xf4 // mov r12, r14 @@ -21057,7 +22118,7 @@ LBB4_181: LONG $0x740f4466; BYTE $0xf6 // pcmpeqb xmm14, xmm6 QUAD $0x000100b5df0f4466; BYTE $0x00 // pandn xmm14, oword 256[rbp] /* [rip + .LCPI4_16] */ LONG $0xfc0f4566; BYTE $0xf1 // paddb xmm14, xmm9 - LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] LONG $0x0654b60f; BYTE $0x17 // movzx edx, byte [rsi + rax + 23] LONG $0x6e0f4466; BYTE $0xc2 // movd xmm8, edx LONG $0x740f4466; BYTE $0xe6 // pcmpeqb xmm12, xmm6 @@ -21067,8 +22128,8 @@ LBB4_181: LONG $0xeb0f4566; BYTE $0xec // por xmm13, xmm12 LONG $0x0654b60f; BYTE $0x18 // movzx edx, byte [rsi + rax + 24] LONG $0x6e0f4466; BYTE $0xe2 // movd xmm12, edx - QUAD $0x00e0248c6f0f4466; WORD $0x0000 // movdqa xmm9, oword [rsp + 224] - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x00f0248c6f0f4466; WORD $0x0000 // movdqa xmm9, oword [rsp + 240] + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] QUAD $0x0c064c203a0f4466; BYTE $0x01 // pinsrb xmm9, byte [rsi + rax + 12], 1 QUAD $0x0c164c203a0f4666; BYTE $0x02 // pinsrb xmm9, byte [rsi + r10 + 12], 2 WORD $0x894c; BYTE $0xc0 // mov rax, r8 @@ -21084,7 +22145,7 @@ LBB4_181: LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] QUAD $0x0c0e4c203a0f4466; BYTE $0x08 // pinsrb xmm9, byte [rsi + rcx + 12], 8 QUAD $0x0c0e4c203a0f4666; BYTE $0x09 // pinsrb xmm9, byte [rsi + r9 + 12], 9 - LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] + LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] QUAD $0x0c3e4c203a0f4466; BYTE $0x0a // pinsrb xmm9, byte [rsi + rdi + 12], 10 QUAD $0x0c3e4c203a0f4666; BYTE $0x0b // pinsrb xmm9, byte [rsi + r15 + 12], 11 QUAD $0x0c264c203a0f4666; BYTE $0x0c // pinsrb xmm9, byte [rsi + r12 + 12], 12 @@ -21093,7 +22154,7 @@ LBB4_181: QUAD $0x0c164c203a0f4466; BYTE $0x0e // pinsrb xmm9, byte [rsi + rdx + 12], 14 LONG $0x24548b48; BYTE $0x38 // mov rdx, qword [rsp + 56] QUAD $0x0c164c203a0f4466; BYTE $0x0f // pinsrb xmm9, byte [rsi + rdx + 12], 15 - LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] + LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] QUAD $0x0d165c203a0f4466; BYTE $0x01 // pinsrb xmm11, byte [rsi + rdx + 13], 1 QUAD $0x0d165c203a0f4666; BYTE $0x02 // pinsrb xmm11, byte [rsi + r10 + 13], 2 QUAD $0x0d065c203a0f4466; BYTE $0x03 // pinsrb xmm11, byte [rsi + rax + 13], 3 @@ -21111,7 +22172,7 @@ LBB4_181: QUAD $0x0d165c203a0f4466; BYTE $0x0e // pinsrb xmm11, byte [rsi + rdx + 13], 14 LONG $0x24548b48; BYTE $0x38 // mov rdx, qword [rsp + 56] QUAD $0x0d165c203a0f4466; BYTE $0x0f // pinsrb xmm11, byte [rsi + rdx + 13], 15 - LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] + LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] QUAD $0x0e167c203a0f4466; BYTE $0x01 // pinsrb xmm15, byte [rsi + rdx + 14], 1 QUAD $0x0e167c203a0f4666; BYTE $0x02 // pinsrb xmm15, byte [rsi + r10 + 14], 2 QUAD $0x0e067c203a0f4466; BYTE $0x03 // pinsrb xmm15, byte [rsi + rax + 14], 3 @@ -21130,7 +22191,7 @@ LBB4_181: LONG $0x740f4466; BYTE $0xce // pcmpeqb xmm9, xmm6 QUAD $0x0001308ddf0f4466; BYTE $0x00 // pandn xmm9, oword 304[rbp] /* [rip + .LCPI4_19] */ LONG $0xeb0f4566; BYTE $0xcd // por xmm9, xmm13 - LONG $0x244c8b48; BYTE $0x18 // mov rcx, qword [rsp + 24] + LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] LONG $0x0e54b60f; BYTE $0x19 // movzx edx, byte [rsi + rcx + 25] LONG $0x6e0f4466; BYTE $0xea // movd xmm13, edx QUAD $0x000160b5f80f4466; BYTE $0x00 // psubb xmm14, oword 352[rbp] /* [rip + .LCPI4_22] */ @@ -21148,7 +22209,7 @@ LBB4_181: LONG $0x0e54b60f; BYTE $0x1b // movzx edx, byte [rsi + rcx + 27] LONG $0x6e0f4466; BYTE $0xda // movd xmm11, edx QUAD $0x0000b024b46f0f66; BYTE $0x00 // movdqa xmm6, oword [rsp + 176] - LONG $0x245c8b4c; BYTE $0x28 // mov r11, qword [rsp + 40] + LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] QUAD $0x0f1e74203a0f4266; BYTE $0x01 // pinsrb xmm6, byte [rsi + r11 + 15], 1 QUAD $0x0f1674203a0f4266; BYTE $0x02 // pinsrb xmm6, byte [rsi + r10 + 15], 2 LONG $0x245c8b48; BYTE $0x40 // mov rbx, qword [rsp + 64] @@ -21173,7 +22234,7 @@ LBB4_181: LONG $0x740f4166; BYTE $0xf6 // pcmpeqb xmm6, xmm14 LONG $0x75df0f66; BYTE $0x60 // pandn xmm6, oword 96[rbp] /* [rip + .LCPI4_6] */ LONG $0xeb0f4166; BYTE $0xf7 // por xmm6, xmm15 - LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] LONG $0x0654b60f; BYTE $0x1c // movzx edx, byte [rsi + rax + 28] LONG $0x6e0f4466; BYTE $0xfa // movd xmm15, edx LONG $0xeb0f4166; BYTE $0xf1 // por xmm6, xmm9 @@ -21227,10 +22288,10 @@ LBB4_181: LONG $0x740f4166; BYTE $0xe6 // pcmpeqb xmm4, xmm14 QUAD $0x00000100a5df0f66 // pandn xmm4, oword 256[rbp] /* [rip + .LCPI4_16] */ LONG $0xfc0f4166; BYTE $0xe2 // paddb xmm4, xmm10 - LONG $0x247c8b48; BYTE $0x18 // mov rdi, qword [rsp + 24] + LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] LONG $0x3e54b60f; BYTE $0x1e // movzx edx, byte [rsi + rdi + 30] LONG $0x6e0f4466; BYTE $0xd2 // movd xmm10, edx - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] QUAD $0x0112067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 18], 1 QUAD $0x0113066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 19], 1 QUAD $0x0114065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 20], 1 @@ -21272,7 +22333,7 @@ LBB4_181: LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] QUAD $0x0812067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 18], 8 QUAD $0x120e7c203a0f4266; BYTE $0x09 // pinsrb xmm7, byte [rsi + r9 + 18], 9 - LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] + LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] QUAD $0x0a123e7c203a0f66 // pinsrb xmm7, byte [rsi + rdi + 18], 10 LONG $0x24548b4c; BYTE $0x30 // mov r10, qword [rsp + 48] QUAD $0x12167c203a0f4266; BYTE $0x0b // pinsrb xmm7, byte [rsi + r10 + 18], 11 @@ -21449,7 +22510,7 @@ LBB4_181: QUAD $0x1d1e4c203a0f4666; BYTE $0x06 // pinsrb xmm9, byte [rsi + r11 + 29], 6 QUAD $0x1e1e54203a0f4666; BYTE $0x06 // pinsrb xmm10, byte [rsi + r11 + 30], 6 QUAD $0x1f1e74203a0f4266; BYTE $0x06 // pinsrb xmm6, byte [rsi + r11 + 31], 6 - QUAD $0x0000008024b48b4c // mov r14, qword [rsp + 128] + QUAD $0x0000008024848b4c // mov r8, qword [rsp + 128] WORD $0x8948; BYTE $0xda // mov rdx, rbx QUAD $0x1c1e7c203a0f4466; BYTE $0x07 // pinsrb xmm15, byte [rsi + rbx + 28], 7 QUAD $0x1d1e4c203a0f4466; BYTE $0x07 // pinsrb xmm9, byte [rsi + rbx + 29], 7 @@ -21519,30 +22580,30 @@ LBB4_181: LONG $0x610f4166; BYTE $0xc0 // punpcklwd xmm0, xmm8 LONG $0x690f4166; BYTE $0xe0 // punpckhwd xmm4, xmm8 QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] - LONG $0x7f0f41f3; WORD $0x8e64; BYTE $0x30 // movdqu oword [r14 + 4*rcx + 48], xmm4 - LONG $0x7f0f41f3; WORD $0x8e44; BYTE $0x20 // movdqu oword [r14 + 4*rcx + 32], xmm0 - LONG $0x7f0f41f3; WORD $0x8e4c; BYTE $0x10 // movdqu oword [r14 + 4*rcx + 16], xmm1 - LONG $0x7f0f41f3; WORD $0x8e14 // movdqu oword [r14 + 4*rcx], xmm2 + LONG $0x7f0f41f3; WORD $0x8864; BYTE $0x30 // movdqu oword [r8 + 4*rcx + 48], xmm4 + LONG $0x7f0f41f3; WORD $0x8844; BYTE $0x20 // movdqu oword [r8 + 4*rcx + 32], xmm0 + LONG $0x7f0f41f3; WORD $0x884c; BYTE $0x10 // movdqu oword [r8 + 4*rcx + 16], xmm1 + LONG $0x7f0f41f3; WORD $0x8814 // movdqu oword [r8 + 4*rcx], xmm2 LONG $0x10c18348 // add rcx, 16 WORD $0x8948; BYTE $0xc8 // mov rax, rcx - QUAD $0x000000f0248c3b48 // cmp rcx, qword [rsp + 240] - JNE LBB4_181 - QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] - QUAD $0x000000f024943b4c // cmp r10, qword [rsp + 240] + QUAD $0x000000d8248c3b48 // cmp rcx, qword [rsp + 216] + JNE LBB4_180 + QUAD $0x0000010824948b4c // mov r10, qword [rsp + 264] + QUAD $0x000000d824943b4c // cmp r10, qword [rsp + 216] LONG $0x245c8a44; BYTE $0x08 // mov r11b, byte [rsp + 8] - QUAD $0x0000012024b48b48 // mov rsi, qword [rsp + 288] - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] + QUAD $0x0000013024b48b48 // mov rsi, qword [rsp + 304] + QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] JNE LBB4_43 - JMP LBB4_131 + JMP LBB4_138 -LBB4_183: +LBB4_182: LONG $0xf0e28349 // and r10, -16 WORD $0x894c; BYTE $0xd0 // mov rax, r10 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi - QUAD $0x000000f824848948 // mov qword [rsp + 248], rax - QUAD $0x000000f02494894c // mov qword [rsp + 240], r10 - LONG $0x96048d4b // lea rax, [r14 + 4*r10] + QUAD $0x0000010824848948 // mov qword [rsp + 264], rax + QUAD $0x000000d82494894c // mov qword [rsp + 216], r10 + LONG $0x94048d4b // lea rax, [r12 + 4*r10] LONG $0x24448948; BYTE $0x68 // mov qword [rsp + 104], rax LONG $0xc3b60f41 // movzx eax, r11b LONG $0xc86e0f66 // movd xmm1, eax @@ -21550,9 +22611,9 @@ LBB4_183: LONG $0x00380f66; BYTE $0xc8 // pshufb xmm1, xmm0 QUAD $0x0000a0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 160], xmm1 WORD $0xc031 // xor eax, eax - QUAD $0x0000008024b4894c // mov qword [rsp + 128], r14 + QUAD $0x0000008024a4894c // mov qword [rsp + 128], r12 -LBB4_184: +LBB4_183: WORD $0x8949; BYTE $0xc1 // mov r9, rax QUAD $0x0000009824848948 // mov qword [rsp + 152], rax LONG $0x05e1c149 // shl r9, 5 @@ -21585,7 +22646,7 @@ LBB4_184: LONG $0x6e0f4466; BYTE $0xf0 // movd xmm14, eax LONG $0x44b60f42; WORD $0x080e // movzx eax, byte [rsi + r9 + 8] LONG $0xc06e0f66 // movd xmm0, eax - QUAD $0x0000d024847f0f66; BYTE $0x00 // movdqa oword [rsp + 208], xmm0 + QUAD $0x0000c024847f0f66; BYTE $0x00 // movdqa oword [rsp + 192], xmm0 LONG $0x44b60f42; WORD $0x090e // movzx eax, byte [rsi + r9 + 9] LONG $0x6e0f4466; BYTE $0xd8 // movd xmm11, eax LONG $0x44b60f42; WORD $0x0a0e // movzx eax, byte [rsi + r9 + 10] @@ -21594,14 +22655,14 @@ LBB4_184: LONG $0x6e0f4466; BYTE $0xe8 // movd xmm13, eax LONG $0x44b60f42; WORD $0x0c0e // movzx eax, byte [rsi + r9 + 12] LONG $0xc06e0f66 // movd xmm0, eax - QUAD $0x0000e024847f0f66; BYTE $0x00 // movdqa oword [rsp + 224], xmm0 + QUAD $0x0000f024847f0f66; BYTE $0x00 // movdqa oword [rsp + 240], xmm0 LONG $0x44b60f42; WORD $0x0d0e // movzx eax, byte [rsi + r9 + 13] LONG $0xf06e0f66 // movd xmm6, eax LONG $0x44b60f42; WORD $0x0e0e // movzx eax, byte [rsi + r9 + 14] LONG $0x6e0f4466; BYTE $0xf8 // movd xmm15, eax LONG $0x44b60f42; WORD $0x0f0e // movzx eax, byte [rsi + r9 + 15] LONG $0xc06e0f66 // movd xmm0, eax - QUAD $0x0000c024847f0f66; BYTE $0x00 // movdqa oword [rsp + 192], xmm0 + QUAD $0x0000e024847f0f66; BYTE $0x00 // movdqa oword [rsp + 224], xmm0 LONG $0x244c894c; BYTE $0x48 // mov qword [rsp + 72], r9 WORD $0x894c; BYTE $0xc9 // mov rcx, r9 LONG $0x20c98348 // or rcx, 32 @@ -21614,7 +22675,7 @@ LBB4_184: LONG $0xa0ca8149; WORD $0x0000; BYTE $0x00 // or r10, 160 LONG $0x2454894c; BYTE $0x40 // mov qword [rsp + 64], r10 LONG $0xc0cf8149; WORD $0x0000; BYTE $0x00 // or r15, 192 - LONG $0x247c894c; BYTE $0x18 // mov qword [rsp + 24], r15 + LONG $0x247c894c; BYTE $0x20 // mov qword [rsp + 32], r15 LONG $0xe0cb8149; WORD $0x0000; BYTE $0x00 // or r11, 224 LONG $0x00ce8149; WORD $0x0001; BYTE $0x00 // or r14, 256 QUAD $0x000000b024b4894c // mov qword [rsp + 176], r14 @@ -21624,13 +22685,13 @@ LBB4_184: LONG $0x60cb8148; WORD $0x0001; BYTE $0x00 // or rbx, 352 LONG $0x245c8948; BYTE $0x58 // mov qword [rsp + 88], rbx LONG $0x80cf8148; WORD $0x0001; BYTE $0x00 // or rdi, 384 - LONG $0x247c8948; BYTE $0x20 // mov qword [rsp + 32], rdi + LONG $0x247c8948; BYTE $0x28 // mov qword [rsp + 40], rdi WORD $0x894c; BYTE $0xc8 // mov rax, r9 LONG $0x01a00d48; WORD $0x0000 // or rax, 416 LONG $0x24448948; BYTE $0x10 // mov qword [rsp + 16], rax WORD $0x894c; BYTE $0xc8 // mov rax, r9 LONG $0x01c00d48; WORD $0x0000 // or rax, 448 - LONG $0x24448948; BYTE $0x28 // mov qword [rsp + 40], rax + LONG $0x24448948; BYTE $0x18 // mov qword [rsp + 24], rax WORD $0x894c; BYTE $0xcf // mov rdi, r9 LONG $0xe0cf8148; WORD $0x0001; BYTE $0x00 // or rdi, 480 LONG $0x203a0f66; WORD $0x0e24; BYTE $0x01 // pinsrb xmm4, byte [rsi + rcx], 1 @@ -21646,7 +22707,7 @@ LBB4_184: LONG $0x203a0f66; WORD $0x1624; BYTE $0x09 // pinsrb xmm4, byte [rsi + rdx], 9 QUAD $0x0a0624203a0f4266 // pinsrb xmm4, byte [rsi + r8], 10 LONG $0x203a0f66; WORD $0x1e24; BYTE $0x0b // pinsrb xmm4, byte [rsi + rbx], 11 - LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] LONG $0x203a0f66; WORD $0x0e24; BYTE $0x0c // pinsrb xmm4, byte [rsi + rcx], 12 LONG $0x244c8b4c; BYTE $0x10 // mov r9, qword [rsp + 16] QUAD $0x0d0e24203a0f4266 // pinsrb xmm4, byte [rsi + r9], 13 @@ -21693,7 +22754,7 @@ LBB4_184: QUAD $0x022e6c203a0f4266; BYTE $0x04 // pinsrb xmm5, byte [rsi + r13 + 2], 4 LONG $0x245c8b4c; BYTE $0x40 // mov r11, qword [rsp + 64] QUAD $0x021e6c203a0f4266; BYTE $0x05 // pinsrb xmm5, byte [rsi + r11 + 2], 5 - LONG $0x246c8b4c; BYTE $0x18 // mov r13, qword [rsp + 24] + LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] QUAD $0x022e6c203a0f4266; BYTE $0x06 // pinsrb xmm5, byte [rsi + r13 + 2], 6 WORD $0x894c; BYTE $0xd3 // mov rbx, r10 QUAD $0x02166c203a0f4266; BYTE $0x07 // pinsrb xmm5, byte [rsi + r10 + 2], 7 @@ -21705,11 +22766,11 @@ LBB4_184: QUAD $0x02166c203a0f4266; BYTE $0x0a // pinsrb xmm5, byte [rsi + r10 + 2], 10 LONG $0x24748b4c; BYTE $0x58 // mov r14, qword [rsp + 88] QUAD $0x02366c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rsi + r14 + 2], 11 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0c02066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 2], 12 LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] QUAD $0x0d02066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 2], 13 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] QUAD $0x0e02066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 2], 14 LONG $0x244c8948; BYTE $0x50 // mov qword [rsp + 80], rcx QUAD $0x0f020e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 2], 15 @@ -21724,11 +22785,11 @@ LBB4_184: QUAD $0x030e7c203a0f4266; BYTE $0x09 // pinsrb xmm7, byte [rsi + r9 + 3], 9 QUAD $0x03167c203a0f4266; BYTE $0x0a // pinsrb xmm7, byte [rsi + r10 + 3], 10 QUAD $0x03367c203a0f4266; BYTE $0x0b // pinsrb xmm7, byte [rsi + r14 + 3], 11 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x0c03067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 3], 12 LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] QUAD $0x0d03067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 3], 13 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] QUAD $0x0e03067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 3], 14 QUAD $0x0f030e7c203a0f66 // pinsrb xmm7, byte [rsi + rcx + 3], 15 QUAD $0x04164c203a0f4466; BYTE $0x01 // pinsrb xmm9, byte [rsi + rdx + 4], 1 @@ -21743,11 +22804,11 @@ LBB4_184: QUAD $0x040e4c203a0f4666; BYTE $0x09 // pinsrb xmm9, byte [rsi + r9 + 4], 9 QUAD $0x04164c203a0f4666; BYTE $0x0a // pinsrb xmm9, byte [rsi + r10 + 4], 10 QUAD $0x04364c203a0f4666; BYTE $0x0b // pinsrb xmm9, byte [rsi + r14 + 4], 11 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x04064c203a0f4466; BYTE $0x0c // pinsrb xmm9, byte [rsi + rax + 4], 12 LONG $0x24448b4c; BYTE $0x10 // mov r8, qword [rsp + 16] QUAD $0x04064c203a0f4666; BYTE $0x0d // pinsrb xmm9, byte [rsi + r8 + 4], 13 - LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] + LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] QUAD $0x04164c203a0f4466; BYTE $0x0e // pinsrb xmm9, byte [rsi + rdx + 4], 14 QUAD $0x040e4c203a0f4466; BYTE $0x0f // pinsrb xmm9, byte [rsi + rcx + 4], 15 LONG $0xe9740f66 // pcmpeqb xmm5, xmm1 @@ -21780,7 +22841,7 @@ LBB4_184: QUAD $0x04053e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 5], 4 WORD $0x894c; BYTE $0xdf // mov rdi, r11 QUAD $0x051e54203a0f4266; BYTE $0x05 // pinsrb xmm2, byte [rsi + r11 + 5], 5 - LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x06050654203a0f66 // pinsrb xmm2, byte [rsi + rax + 5], 6 QUAD $0x00000110249c8948 // mov qword [rsp + 272], rbx QUAD $0x07051e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 5], 7 @@ -21789,11 +22850,11 @@ LBB4_184: QUAD $0x050e54203a0f4266; BYTE $0x09 // pinsrb xmm2, byte [rsi + r9 + 5], 9 QUAD $0x051654203a0f4266; BYTE $0x0a // pinsrb xmm2, byte [rsi + r10 + 5], 10 QUAD $0x053654203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rsi + r14 + 5], 11 - LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] + LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] QUAD $0x0c051654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 5], 12 WORD $0x894c; BYTE $0xc1 // mov rcx, r8 QUAD $0x050654203a0f4266; BYTE $0x0d // pinsrb xmm2, byte [rsi + r8 + 5], 13 - LONG $0x24448b4c; BYTE $0x28 // mov r8, qword [rsp + 40] + LONG $0x24448b4c; BYTE $0x18 // mov r8, qword [rsp + 24] QUAD $0x050654203a0f4266; BYTE $0x0e // pinsrb xmm2, byte [rsi + r8 + 5], 14 LONG $0x245c8b4c; BYTE $0x50 // mov r11, qword [rsp + 80] QUAD $0x051e54203a0f4266; BYTE $0x0f // pinsrb xmm2, byte [rsi + r11 + 5], 15 @@ -21804,7 +22865,7 @@ LBB4_184: LONG $0x246c8b4c; BYTE $0x70 // mov r13, qword [rsp + 112] QUAD $0x062e44203a0f4666; BYTE $0x04 // pinsrb xmm8, byte [rsi + r13 + 6], 4 QUAD $0x063e44203a0f4466; BYTE $0x05 // pinsrb xmm8, byte [rsi + rdi + 6], 5 - LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x060644203a0f4466; BYTE $0x06 // pinsrb xmm8, byte [rsi + rax + 6], 6 WORD $0x8949; BYTE $0xc5 // mov r13, rax QUAD $0x061e44203a0f4466; BYTE $0x07 // pinsrb xmm8, byte [rsi + rbx + 6], 7 @@ -21856,7 +22917,7 @@ LBB4_184: LONG $0xeb0f4166; BYTE $0xc8 // por xmm1, xmm8 LONG $0x3e54b60f; BYTE $0x15 // movzx edx, byte [rsi + rdi + 21] LONG $0xd26e0f66 // movd xmm2, edx - QUAD $0x0000d024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 208] + QUAD $0x0000c024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 192] LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x01080644203a0f66 // pinsrb xmm0, byte [rsi + rax + 8], 1 QUAD $0x082644203a0f4266; BYTE $0x02 // pinsrb xmm0, byte [rsi + r12 + 8], 2 @@ -21866,7 +22927,7 @@ LBB4_184: WORD $0x894d; BYTE $0xd8 // mov r8, r11 LONG $0x24748b4c; BYTE $0x40 // mov r14, qword [rsp + 64] QUAD $0x083644203a0f4266; BYTE $0x05 // pinsrb xmm0, byte [rsi + r14 + 8], 5 - LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] + LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] QUAD $0x06081644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 8], 6 QUAD $0x00000110249c8b4c // mov r11, qword [rsp + 272] QUAD $0x081e44203a0f4266; BYTE $0x07 // pinsrb xmm0, byte [rsi + r11 + 8], 7 @@ -21877,14 +22938,14 @@ LBB4_184: QUAD $0x083e44203a0f4266; BYTE $0x0a // pinsrb xmm0, byte [rsi + r15 + 8], 10 LONG $0x24548b48; BYTE $0x58 // mov rdx, qword [rsp + 88] QUAD $0x0b081644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 8], 11 - LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] + LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] QUAD $0x0c081644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 8], 12 QUAD $0x082e44203a0f4266; BYTE $0x0d // pinsrb xmm0, byte [rsi + r13 + 8], 13 - LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] + LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] QUAD $0x0e081644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 8], 14 QUAD $0x0f080e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 8], 15 LONG $0xeb0f4166; BYTE $0xc9 // por xmm1, xmm9 - QUAD $0x0000d0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 208], xmm1 + QUAD $0x0000c0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 192], xmm1 LONG $0x3e54b60f; BYTE $0x16 // movzx edx, byte [rsi + rdi + 22] LONG $0xca6e0f66 // movd xmm1, edx LONG $0x740f4166; BYTE $0xc6 // pcmpeqb xmm0, xmm14 @@ -21894,7 +22955,7 @@ LBB4_184: QUAD $0x09265c203a0f4666; BYTE $0x03 // pinsrb xmm11, byte [rsi + r12 + 9], 3 QUAD $0x09065c203a0f4666; BYTE $0x04 // pinsrb xmm11, byte [rsi + r8 + 9], 4 QUAD $0x09365c203a0f4666; BYTE $0x05 // pinsrb xmm11, byte [rsi + r14 + 9], 5 - LONG $0x246c8b4c; BYTE $0x18 // mov r13, qword [rsp + 24] + LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] QUAD $0x092e5c203a0f4666; BYTE $0x06 // pinsrb xmm11, byte [rsi + r13 + 9], 6 QUAD $0x091e5c203a0f4666; BYTE $0x07 // pinsrb xmm11, byte [rsi + r11 + 9], 7 QUAD $0x091e5c203a0f4466; BYTE $0x08 // pinsrb xmm11, byte [rsi + rbx + 9], 8 @@ -21904,11 +22965,11 @@ LBB4_184: QUAD $0x093e5c203a0f4666; BYTE $0x0a // pinsrb xmm11, byte [rsi + r15 + 9], 10 LONG $0x24548b4c; BYTE $0x58 // mov r10, qword [rsp + 88] QUAD $0x09165c203a0f4666; BYTE $0x0b // pinsrb xmm11, byte [rsi + r10 + 9], 11 - LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] + LONG $0x247c8b4c; BYTE $0x28 // mov r15, qword [rsp + 40] QUAD $0x093e5c203a0f4666; BYTE $0x0c // pinsrb xmm11, byte [rsi + r15 + 9], 12 LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] QUAD $0x09165c203a0f4466; BYTE $0x0d // pinsrb xmm11, byte [rsi + rdx + 9], 13 - LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] + LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] QUAD $0x09165c203a0f4466; BYTE $0x0e // pinsrb xmm11, byte [rsi + rdx + 9], 14 LONG $0x24548b48; BYTE $0x50 // mov rdx, qword [rsp + 80] QUAD $0x09165c203a0f4466; BYTE $0x0f // pinsrb xmm11, byte [rsi + rdx + 9], 15 @@ -21927,7 +22988,7 @@ LBB4_184: QUAD $0x0a3e64203a0f4666; BYTE $0x0c // pinsrb xmm12, byte [rsi + r15 + 10], 12 LONG $0x24748b4c; BYTE $0x10 // mov r14, qword [rsp + 16] QUAD $0x0a3664203a0f4666; BYTE $0x0d // pinsrb xmm12, byte [rsi + r14 + 10], 13 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] QUAD $0x0a0664203a0f4466; BYTE $0x0e // pinsrb xmm12, byte [rsi + rax + 10], 14 QUAD $0x0a1664203a0f4466; BYTE $0x0f // pinsrb xmm12, byte [rsi + rdx + 10], 15 LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] @@ -21949,7 +23010,7 @@ LBB4_184: LONG $0x247c8b48; BYTE $0x10 // mov rdi, qword [rsp + 16] QUAD $0x0b3e6c203a0f4466; BYTE $0x0d // pinsrb xmm13, byte [rsi + rdi + 11], 13 WORD $0x8949; BYTE $0xfd // mov r13, rdi - LONG $0x244c8b4c; BYTE $0x28 // mov r9, qword [rsp + 40] + LONG $0x244c8b4c; BYTE $0x18 // mov r9, qword [rsp + 24] QUAD $0x0b0e6c203a0f4666; BYTE $0x0e // pinsrb xmm13, byte [rsi + r9 + 11], 14 QUAD $0x0b166c203a0f4466; BYTE $0x0f // pinsrb xmm13, byte [rsi + rdx + 11], 15 LONG $0x740f4566; BYTE $0xde // pcmpeqb xmm11, xmm14 @@ -21965,7 +23026,7 @@ LBB4_184: LONG $0xeb0f4566; BYTE $0xec // por xmm13, xmm12 LONG $0x3e54b60f; BYTE $0x18 // movzx edx, byte [rsi + rdi + 24] LONG $0x6e0f4466; BYTE $0xe2 // movd xmm12, edx - QUAD $0x00e0248c6f0f4466; WORD $0x0000 // movdqa xmm9, oword [rsp + 224] + QUAD $0x00f0248c6f0f4466; WORD $0x0000 // movdqa xmm9, oword [rsp + 240] LONG $0x245c8b4c; BYTE $0x30 // mov r11, qword [rsp + 48] QUAD $0x0c1e4c203a0f4666; BYTE $0x01 // pinsrb xmm9, byte [rsi + r11 + 12], 1 WORD $0x894d; BYTE $0xf0 // mov r8, r14 @@ -21975,7 +23036,7 @@ LBB4_184: LONG $0x24748b4c; BYTE $0x70 // mov r14, qword [rsp + 112] QUAD $0x0c364c203a0f4666; BYTE $0x04 // pinsrb xmm9, byte [rsi + r14 + 12], 4 QUAD $0x0c064c203a0f4466; BYTE $0x05 // pinsrb xmm9, byte [rsi + rax + 12], 5 - LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] + LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] QUAD $0x0c164c203a0f4466; BYTE $0x06 // pinsrb xmm9, byte [rsi + rdx + 12], 6 WORD $0x894d; BYTE $0xe7 // mov r15, r12 QUAD $0x0c264c203a0f4666; BYTE $0x07 // pinsrb xmm9, byte [rsi + r12 + 12], 7 @@ -21984,7 +23045,7 @@ LBB4_184: LONG $0x24648b4c; BYTE $0x78 // mov r12, qword [rsp + 120] QUAD $0x0c264c203a0f4666; BYTE $0x0a // pinsrb xmm9, byte [rsi + r12 + 12], 10 QUAD $0x0c164c203a0f4666; BYTE $0x0b // pinsrb xmm9, byte [rsi + r10 + 12], 11 - LONG $0x24548b4c; BYTE $0x20 // mov r10, qword [rsp + 32] + LONG $0x24548b4c; BYTE $0x28 // mov r10, qword [rsp + 40] QUAD $0x0c164c203a0f4666; BYTE $0x0c // pinsrb xmm9, byte [rsi + r10 + 12], 12 QUAD $0x0c2e4c203a0f4666; BYTE $0x0d // pinsrb xmm9, byte [rsi + r13 + 12], 13 QUAD $0x0c0e4c203a0f4666; BYTE $0x0e // pinsrb xmm9, byte [rsi + r9 + 12], 14 @@ -22026,7 +23087,7 @@ LBB4_184: QUAD $0x0e2e7c203a0f4666; BYTE $0x0c // pinsrb xmm15, byte [rsi + r13 + 14], 12 WORD $0x894d; BYTE $0xd5 // mov r13, r10 QUAD $0x0e167c203a0f4666; BYTE $0x0d // pinsrb xmm15, byte [rsi + r10 + 14], 13 - LONG $0x24548b4c; BYTE $0x28 // mov r10, qword [rsp + 40] + LONG $0x24548b4c; BYTE $0x18 // mov r10, qword [rsp + 24] QUAD $0x0e167c203a0f4666; BYTE $0x0e // pinsrb xmm15, byte [rsi + r10 + 14], 14 LONG $0x740f4566; BYTE $0xce // pcmpeqb xmm9, xmm14 QUAD $0x0001308ddf0f4466; BYTE $0x00 // pandn xmm9, oword 304[rbp] /* [rip + .LCPI4_19] */ @@ -22046,7 +23107,7 @@ LBB4_184: LONG $0xeb0f4466; BYTE $0xfe // por xmm15, xmm6 LONG $0x0654b60f; BYTE $0x1b // movzx edx, byte [rsi + rax + 27] LONG $0x6e0f4466; BYTE $0xda // movd xmm11, edx - QUAD $0x0000c024b46f0f66; BYTE $0x00 // movdqa xmm6, oword [rsp + 192] + QUAD $0x0000e024b46f0f66; BYTE $0x00 // movdqa xmm6, oword [rsp + 224] LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] QUAD $0x010f0e74203a0f66 // pinsrb xmm6, byte [rsi + rcx + 15], 1 QUAD $0x0f0674203a0f4266; BYTE $0x02 // pinsrb xmm6, byte [rsi + r8 + 15], 2 @@ -22055,7 +23116,7 @@ LBB4_184: QUAD $0x0f3674203a0f4266; BYTE $0x04 // pinsrb xmm6, byte [rsi + r14 + 15], 4 LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] QUAD $0x050f0e74203a0f66 // pinsrb xmm6, byte [rsi + rcx + 15], 5 - LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] + LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] QUAD $0x060f1674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 15], 6 QUAD $0x0f3e74203a0f4266; BYTE $0x07 // pinsrb xmm6, byte [rsi + r15 + 15], 7 QUAD $0x080f3e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 15], 8 @@ -22074,7 +23135,7 @@ LBB4_184: LONG $0x0654b60f; BYTE $0x1c // movzx edx, byte [rsi + rax + 28] LONG $0x6e0f4466; BYTE $0xfa // movd xmm15, edx LONG $0xeb0f4166; BYTE $0xf1 // por xmm6, xmm9 - QUAD $0x0000c024b47f0f66; BYTE $0x00 // movdqa oword [rsp + 192], xmm6 + QUAD $0x0000e024b47f0f66; BYTE $0x00 // movdqa oword [rsp + 224], xmm6 LONG $0x0654b60f; BYTE $0x1d // movzx edx, byte [rsi + rax + 29] LONG $0x6e0f4466; BYTE $0xca // movd xmm9, edx LONG $0x24548b48; BYTE $0x30 // mov rdx, qword [rsp + 48] @@ -22083,7 +23144,7 @@ LBB4_184: QUAD $0x100e54203a0f4666; BYTE $0x03 // pinsrb xmm10, byte [rsi + r9 + 16], 3 QUAD $0x103654203a0f4666; BYTE $0x04 // pinsrb xmm10, byte [rsi + r14 + 16], 4 QUAD $0x100e54203a0f4466; BYTE $0x05 // pinsrb xmm10, byte [rsi + rcx + 16], 5 - LONG $0x24648b4c; BYTE $0x18 // mov r12, qword [rsp + 24] + LONG $0x24648b4c; BYTE $0x20 // mov r12, qword [rsp + 32] QUAD $0x102654203a0f4666; BYTE $0x06 // pinsrb xmm10, byte [rsi + r12 + 16], 6 QUAD $0x103e54203a0f4666; BYTE $0x07 // pinsrb xmm10, byte [rsi + r15 + 16], 7 QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] @@ -22091,11 +23152,11 @@ LBB4_184: QUAD $0x103e54203a0f4466; BYTE $0x09 // pinsrb xmm10, byte [rsi + rdi + 16], 9 QUAD $0x101e54203a0f4666; BYTE $0x0a // pinsrb xmm10, byte [rsi + r11 + 16], 10 QUAD $0x101e54203a0f4466; BYTE $0x0b // pinsrb xmm10, byte [rsi + rbx + 16], 11 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x100654203a0f4466; BYTE $0x0c // pinsrb xmm10, byte [rsi + rax + 16], 12 WORD $0x894c; BYTE $0xe8 // mov rax, r13 QUAD $0x102e54203a0f4666; BYTE $0x0d // pinsrb xmm10, byte [rsi + r13 + 16], 13 - LONG $0x246c8b4c; BYTE $0x28 // mov r13, qword [rsp + 40] + LONG $0x246c8b4c; BYTE $0x18 // mov r13, qword [rsp + 24] QUAD $0x102e54203a0f4666; BYTE $0x0e // pinsrb xmm10, byte [rsi + r13 + 16], 14 QUAD $0x101654203a0f4666; BYTE $0x0f // pinsrb xmm10, byte [rsi + r10 + 16], 15 QUAD $0x01111664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 17], 1 @@ -22111,7 +23172,7 @@ LBB4_184: QUAD $0x09113e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 17], 9 QUAD $0x111e64203a0f4266; BYTE $0x0a // pinsrb xmm4, byte [rsi + r11 + 17], 10 QUAD $0x0b111e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 17], 11 - LONG $0x24648b4c; BYTE $0x20 // mov r12, qword [rsp + 32] + LONG $0x24648b4c; BYTE $0x28 // mov r12, qword [rsp + 40] QUAD $0x112664203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r12 + 17], 12 QUAD $0x0d110664203a0f66 // pinsrb xmm4, byte [rsi + rax + 17], 13 QUAD $0x112e64203a0f4266; BYTE $0x0e // pinsrb xmm4, byte [rsi + r13 + 17], 14 @@ -22352,7 +23413,7 @@ LBB4_184: QUAD $0x1d3e4c203a0f4666; BYTE $0x07 // pinsrb xmm9, byte [rsi + r15 + 29], 7 QUAD $0x1e3e54203a0f4666; BYTE $0x07 // pinsrb xmm10, byte [rsi + r15 + 30], 7 QUAD $0x1f3e74203a0f4266; BYTE $0x07 // pinsrb xmm6, byte [rsi + r15 + 31], 7 - QUAD $0x0000008024b48b4c // mov r14, qword [rsp + 128] + QUAD $0x00000080249c8b48 // mov rbx, qword [rsp + 128] QUAD $0x1c1e7c203a0f4666; BYTE $0x08 // pinsrb xmm15, byte [rsi + r11 + 28], 8 QUAD $0x1d1e4c203a0f4666; BYTE $0x08 // pinsrb xmm9, byte [rsi + r11 + 29], 8 QUAD $0x1e1e54203a0f4666; BYTE $0x08 // pinsrb xmm10, byte [rsi + r11 + 30], 8 @@ -22405,9 +23466,9 @@ LBB4_184: LONG $0xeb0f4166; BYTE $0xf7 // por xmm6, xmm15 LONG $0x6f0f4166; BYTE $0xc0 // movdqa xmm0, xmm8 LONG $0xc6600f66 // punpcklbw xmm0, xmm6 - QUAD $0x0000d0249c6f0f66; BYTE $0x00 // movdqa xmm3, oword [rsp + 208] + QUAD $0x0000c0249c6f0f66; BYTE $0x00 // movdqa xmm3, oword [rsp + 192] LONG $0xcb6f0f66 // movdqa xmm1, xmm3 - QUAD $0x0000c024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 192] + QUAD $0x0000e024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 224] LONG $0xcc600f66 // punpcklbw xmm1, xmm4 LONG $0xd16f0f66 // movdqa xmm2, xmm1 LONG $0xd0610f66 // punpcklwd xmm2, xmm0 @@ -22418,41 +23479,41 @@ LBB4_184: LONG $0x610f4166; BYTE $0xc0 // punpcklwd xmm0, xmm8 LONG $0x690f4166; BYTE $0xd8 // punpckhwd xmm3, xmm8 QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] - LONG $0x7f0f41f3; WORD $0x8e5c; BYTE $0x30 // movdqu oword [r14 + 4*rcx + 48], xmm3 - LONG $0x7f0f41f3; WORD $0x8e44; BYTE $0x20 // movdqu oword [r14 + 4*rcx + 32], xmm0 - LONG $0x7f0f41f3; WORD $0x8e4c; BYTE $0x10 // movdqu oword [r14 + 4*rcx + 16], xmm1 - LONG $0x7f0f41f3; WORD $0x8e14 // movdqu oword [r14 + 4*rcx], xmm2 + LONG $0x5c7f0ff3; WORD $0x308b // movdqu oword [rbx + 4*rcx + 48], xmm3 + LONG $0x447f0ff3; WORD $0x208b // movdqu oword [rbx + 4*rcx + 32], xmm0 + LONG $0x4c7f0ff3; WORD $0x108b // movdqu oword [rbx + 4*rcx + 16], xmm1 + LONG $0x147f0ff3; BYTE $0x8b // movdqu oword [rbx + 4*rcx], xmm2 LONG $0x10c18348 // add rcx, 16 WORD $0x8948; BYTE $0xc8 // mov rax, rcx - QUAD $0x000000f0248c3b48 // cmp rcx, qword [rsp + 240] - JNE LBB4_184 - QUAD $0x0000010024948b4c // mov r10, qword [rsp + 256] - QUAD $0x000000f024943b4c // cmp r10, qword [rsp + 240] + QUAD $0x000000d8248c3b48 // cmp rcx, qword [rsp + 216] + JNE LBB4_183 + QUAD $0x0000012024948b4c // mov r10, qword [rsp + 288] + QUAD $0x000000d824943b4c // cmp r10, qword [rsp + 216] LONG $0x245c8a44; BYTE $0x08 // mov r11b, byte [rsp + 8] - QUAD $0x000000f824b48b48 // mov rsi, qword [rsp + 248] - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] + QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] + QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] JNE LBB4_69 - JMP LBB4_135 + JMP LBB4_142 -LBB4_186: +LBB4_185: LONG $0xf8e28349 // and r10, -8 WORD $0x894c; BYTE $0xd0 // mov rax, r10 LONG $0x06e0c148 // shl rax, 6 WORD $0x0148; BYTE $0xf0 // add rax, rsi LONG $0x24448948; BYTE $0x38 // mov qword [rsp + 56], rax - LONG $0x2454894c; BYTE $0x18 // mov qword [rsp + 24], r10 - LONG $0x96048d4b // lea rax, [r14 + 4*r10] + LONG $0x2454894c; BYTE $0x20 // mov qword [rsp + 32], r10 + LONG $0x94048d4b // lea rax, [r12 + 4*r10] LONG $0x24448948; BYTE $0x08 // mov qword [rsp + 8], rax LONG $0x246c8944; BYTE $0x40 // mov dword [rsp + 64], r13d LONG $0x6e0f4166; BYTE $0xc5 // movd xmm0, r13d LONG $0xc0700ff2; BYTE $0xe0 // pshuflw xmm0, xmm0, 224 LONG $0x700f4466; WORD $0x00d8 // pshufd xmm11, xmm0, 0 WORD $0x3145; BYTE $0xff // xor r15d, r15d - QUAD $0x0000008024b4894c // mov qword [rsp + 128], r14 + QUAD $0x0000008024a4894c // mov qword [rsp + 128], r12 LONG $0xef0f4566; BYTE $0xff // pxor xmm15, xmm15 -LBB4_187: - LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 +LBB4_186: + LONG $0x247c894c; BYTE $0x18 // mov qword [rsp + 24], r15 LONG $0x06e7c149 // shl r15, 6 WORD $0x894d; BYTE $0xf8 // mov r8, r15 WORD $0x894d; BYTE $0xfc // mov r12, r15 @@ -22588,7 +23649,7 @@ LBB4_187: LONG $0x380f4566; WORD $0xef10 // pblendvb xmm13, xmm15, xmm0 LONG $0x5c6e0f66; WORD $0x1024 // movd xmm3, dword [rsp + 16] LONG $0x54b70f42; WORD $0x203e // movzx edx, word [rsi + r15 + 32] - LONG $0x20245489 // mov dword [rsp + 32], edx + LONG $0x28245489 // mov dword [rsp + 40], edx LONG $0x4cc40f66; WORD $0x0e0e; BYTE $0x01 // pinsrw xmm1, word [rsi + rcx + 14], 1 QUAD $0x020e064cc40f4266 // pinsrw xmm1, word [rsi + r8 + 14], 2 QUAD $0x030e264cc40f4266 // pinsrw xmm1, word [rsi + r12 + 14], 3 @@ -22675,7 +23736,7 @@ LBB4_187: LONG $0x6f0f4566; BYTE $0xe9 // movdqa xmm13, xmm9 LONG $0xc26f0f66 // movdqa xmm0, xmm2 LONG $0x380f4566; WORD $0xef10 // pblendvb xmm13, xmm15, xmm0 - LONG $0x7c6e0f66; WORD $0x2024 // movd xmm7, dword [rsp + 32] + LONG $0x7c6e0f66; WORD $0x2824 // movd xmm7, dword [rsp + 40] LONG $0x54b70f46; WORD $0x2a3e // movzx r10d, word [rsi + r15 + 42] LONG $0x4cc40f66; WORD $0x1a0e; BYTE $0x01 // pinsrw xmm1, word [rsi + rcx + 26], 1 QUAD $0x021a064cc40f4266 // pinsrw xmm1, word [rsi + r8 + 26], 2 @@ -22698,7 +23759,7 @@ LBB4_187: LONG $0x380f4166; WORD $0xef10 // pblendvb xmm5, xmm15, xmm0 LONG $0x546e0f66; WORD $0x1024 // movd xmm2, dword [rsp + 16] LONG $0x54b70f42; WORD $0x2c3e // movzx edx, word [rsi + r15 + 44] - LONG $0x20245489 // mov dword [rsp + 32], edx + LONG $0x28245489 // mov dword [rsp + 40], edx QUAD $0x071c0e64c40f4266 // pinsrw xmm4, word [rsi + r9 + 28], 7 LONG $0x750f4166; BYTE $0xe3 // pcmpeqw xmm4, xmm11 LONG $0xe4630f66 // packsswb xmm4, xmm4 @@ -22785,7 +23846,7 @@ LBB4_187: LONG $0x6f0f4166; BYTE $0xea // movdqa xmm5, xmm10 LONG $0xc16f0f66 // movdqa xmm0, xmm1 LONG $0x380f4166; WORD $0xef10 // pblendvb xmm5, xmm15, xmm0 - LONG $0x4c6e0f66; WORD $0x2024 // movd xmm1, dword [rsp + 32] + LONG $0x4c6e0f66; WORD $0x2824 // movd xmm1, dword [rsp + 40] LONG $0x54b70f46; WORD $0x363e // movzx r10d, word [rsi + r15 + 54] LONG $0x750f4166; BYTE $0xd3 // pcmpeqw xmm2, xmm11 LONG $0xd2630f66 // packsswb xmm2, xmm2 @@ -22938,7 +23999,7 @@ LBB4_187: LONG $0x44c40f66; WORD $0x3e0e; BYTE $0x01 // pinsrw xmm0, word [rsi + rcx + 62], 1 QUAD $0x023e0644c40f4266 // pinsrw xmm0, word [rsi + r8 + 62], 2 QUAD $0x033e2644c40f4266 // pinsrw xmm0, word [rsi + r12 + 62], 3 - QUAD $0x0000008024b48b4c // mov r14, qword [rsp + 128] + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x043e2e44c40f4266 // pinsrw xmm0, word [rsi + r13 + 62], 4 LONG $0x44c40f66; WORD $0x3e1e; BYTE $0x05 // pinsrw xmm0, word [rsi + rbx + 62], 5 LONG $0x44c40f66; WORD $0x3e3e; BYTE $0x06 // pinsrw xmm0, word [rsi + rdi + 62], 6 @@ -22959,276 +24020,646 @@ LBB4_187: LONG $0x600f4566; BYTE $0xc6 // punpcklbw xmm8, xmm14 LONG $0x600f4566; BYTE $0xe5 // punpcklbw xmm12, xmm13 LONG $0x610f4566; BYTE $0xe0 // punpcklwd xmm12, xmm8 - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] - LONG $0x7f0f45f3; WORD $0x8e24 // movdqu oword [r14 + 4*rcx], xmm12 - LONG $0x7f0f41f3; WORD $0x8e44; BYTE $0x10 // movdqu oword [r14 + 4*rcx + 16], xmm0 + LONG $0x244c8b48; BYTE $0x18 // mov rcx, qword [rsp + 24] + LONG $0x7f0f44f3; WORD $0x8824 // movdqu oword [rax + 4*rcx], xmm12 + LONG $0x447f0ff3; WORD $0x1088 // movdqu oword [rax + 4*rcx + 16], xmm0 LONG $0x08c18348 // add rcx, 8 WORD $0x8949; BYTE $0xcf // mov r15, rcx - LONG $0x244c3b48; BYTE $0x18 // cmp rcx, qword [rsp + 24] - JNE LBB4_187 - QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] - LONG $0x24543b4c; BYTE $0x18 // cmp r10, qword [rsp + 24] - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] + LONG $0x244c3b48; BYTE $0x20 // cmp rcx, qword [rsp + 32] + JNE LBB4_186 + QUAD $0x000000c024948b4c // mov r10, qword [rsp + 192] + LONG $0x24543b4c; BYTE $0x20 // cmp r10, qword [rsp + 32] + QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] LONG $0x246c8b44; BYTE $0x40 // mov r13d, dword [rsp + 64] LONG $0x24648b4c; BYTE $0x08 // mov r12, qword [rsp + 8] LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] JNE LBB4_92 - JMP LBB4_139 + JMP LBB4_95 -LBB4_189: - LONG $0xf8e28349 // and r10, -8 - WORD $0x894c; BYTE $0xd0 // mov rax, r10 - LONG $0x06e0c148 // shl rax, 6 - WORD $0x0148; BYTE $0xf0 // add rax, rsi - LONG $0x24448948; BYTE $0x38 // mov qword [rsp + 56], rax - LONG $0x2454894c; BYTE $0x18 // mov qword [rsp + 24], r10 - LONG $0x96048d4b // lea rax, [r14 + 4*r10] - LONG $0x24448948; BYTE $0x08 // mov qword [rsp + 8], rax - LONG $0x246c8944; BYTE $0x40 // mov dword [rsp + 64], r13d - LONG $0x6e0f4166; BYTE $0xc5 // movd xmm0, r13d - LONG $0xc0700ff2; BYTE $0xe0 // pshuflw xmm0, xmm0, 224 - LONG $0x700f4466; WORD $0x00d8 // pshufd xmm11, xmm0, 0 - WORD $0x3145; BYTE $0xff // xor r15d, r15d - QUAD $0x0000008024b4894c // mov qword [rsp + 128], r14 - LONG $0xef0f4566; BYTE $0xff // pxor xmm15, xmm15 +LBB4_188: + WORD $0x894d; BYTE $0xd0 // mov r8, r10 + LONG $0xfce08349 // and r8, -4 + WORD $0x894c; BYTE $0xc3 // mov rbx, r8 + LONG $0x07e3c148 // shl rbx, 7 + WORD $0x0148; BYTE $0xf3 // add rbx, rsi + LONG $0x843c8d4f // lea r15, [r12 + 4*r8] + WORD $0x280f; BYTE $0xc8 // movaps xmm1, xmm0 + LONG $0x00c8c60f // shufps xmm1, xmm0, 0 + LONG $0xfcc68148; WORD $0x0001; BYTE $0x00 // add rsi, 508 + WORD $0xc931 // xor ecx, ecx + LONG $0x6f0f4466; WORD $0x007d // movdqa xmm15, oword 0[rbp] /* [rip + .LCPI4_0] */ + LONG $0x6f0f4466; WORD $0x1045 // movdqa xmm8, oword 16[rbp] /* [rip + .LCPI4_1] */ + LONG $0x6f0f4466; WORD $0x2055 // movdqa xmm10, oword 32[rbp] /* [rip + .LCPI4_2] */ + LONG $0x6f0f4466; WORD $0x305d // movdqa xmm11, oword 48[rbp] /* [rip + .LCPI4_3] */ + LONG $0x6f0f4466; WORD $0x4065 // movdqa xmm12, oword 64[rbp] /* [rip + .LCPI4_4] */ + LONG $0x6f0f4466; WORD $0x506d // movdqa xmm13, oword 80[rbp] /* [rip + .LCPI4_5] */ + LONG $0x6f0f4466; WORD $0x6075 // movdqa xmm14, oword 96[rbp] /* [rip + .LCPI4_6] */ + LONG $0x6f0f4466; WORD $0x704d // movdqa xmm9, oword 112[rbp] /* [rip + .LCPI4_7] */ -LBB4_190: - LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 - LONG $0x06e7c149 // shl r15, 6 - WORD $0x894d; BYTE $0xf8 // mov r8, r15 - WORD $0x894d; BYTE $0xfc // mov r12, r15 - WORD $0x894d; BYTE $0xfd // mov r13, r15 - WORD $0x894c; BYTE $0xfb // mov rbx, r15 - WORD $0x894c; BYTE $0xff // mov rdi, r15 - WORD $0x894d; BYTE $0xf9 // mov r9, r15 - LONG $0x04b70f42; BYTE $0x3e // movzx eax, word [rsi + r15] - LONG $0xe86e0f66 // movd xmm5, eax - LONG $0x44b70f42; WORD $0x023e // movzx eax, word [rsi + r15 + 2] - LONG $0xc06e0f66 // movd xmm0, eax - LONG $0x44b70f42; WORD $0x043e // movzx eax, word [rsi + r15 + 4] - LONG $0xc86e0f66 // movd xmm1, eax - LONG $0x44b70f42; WORD $0x063e // movzx eax, word [rsi + r15 + 6] - LONG $0xf86e0f66 // movd xmm7, eax - LONG $0x44b70f42; WORD $0x083e // movzx eax, word [rsi + r15 + 8] - LONG $0x6e0f4466; BYTE $0xc0 // movd xmm8, eax - LONG $0x44b70f42; WORD $0x0a3e // movzx eax, word [rsi + r15 + 10] - LONG $0xe06e0f66 // movd xmm4, eax - LONG $0x44b70f42; WORD $0x0c3e // movzx eax, word [rsi + r15 + 12] - LONG $0x54b70f46; WORD $0x0e3e // movzx r10d, word [rsi + r15 + 14] - LONG $0x5cb70f46; WORD $0x103e // movzx r11d, word [rsi + r15 + 16] - LONG $0x54b70f42; WORD $0x123e // movzx edx, word [rsi + r15 + 18] - LONG $0x74b70f46; WORD $0x143e // movzx r14d, word [rsi + r15 + 20] - WORD $0x894c; BYTE $0xf9 // mov rcx, r15 - LONG $0x40c98348 // or rcx, 64 - LONG $0x80c88149; WORD $0x0000; BYTE $0x00 // or r8, 128 - LONG $0xc0cc8149; WORD $0x0000; BYTE $0x00 // or r12, 192 - LONG $0x00cd8149; WORD $0x0001; BYTE $0x00 // or r13, 256 - LONG $0x40cb8148; WORD $0x0001; BYTE $0x00 // or rbx, 320 - LONG $0x80cf8148; WORD $0x0001; BYTE $0x00 // or rdi, 384 - LONG $0x2cc40f66; WORD $0x010e // pinsrw xmm5, word [rsi + rcx], 1 - LONG $0xc40f4266; WORD $0x062c; BYTE $0x02 // pinsrw xmm5, word [rsi + r8], 2 - LONG $0xc40f4266; WORD $0x262c; BYTE $0x03 // pinsrw xmm5, word [rsi + r12], 3 - LONG $0xc40f4266; WORD $0x2e2c; BYTE $0x04 // pinsrw xmm5, word [rsi + r13], 4 - LONG $0x2cc40f66; WORD $0x051e // pinsrw xmm5, word [rsi + rbx], 5 - LONG $0x2cc40f66; WORD $0x063e // pinsrw xmm5, word [rsi + rdi], 6 - LONG $0x44c40f66; WORD $0x020e; BYTE $0x01 // pinsrw xmm0, word [rsi + rcx + 2], 1 - QUAD $0x02020644c40f4266 // pinsrw xmm0, word [rsi + r8 + 2], 2 - QUAD $0x03022644c40f4266 // pinsrw xmm0, word [rsi + r12 + 2], 3 - QUAD $0x04022e44c40f4266 // pinsrw xmm0, word [rsi + r13 + 2], 4 - LONG $0x44c40f66; WORD $0x021e; BYTE $0x05 // pinsrw xmm0, word [rsi + rbx + 2], 5 - LONG $0x44c40f66; WORD $0x023e; BYTE $0x06 // pinsrw xmm0, word [rsi + rdi + 2], 6 - LONG $0xc0c98149; WORD $0x0001; BYTE $0x00 // or r9, 448 - QUAD $0x07020e44c40f4266 // pinsrw xmm0, word [rsi + r9 + 2], 7 - LONG $0xd06e0f66 // movd xmm2, eax - LONG $0x44b70f42; WORD $0x163e // movzx eax, word [rsi + r15 + 22] - LONG $0x10244489 // mov dword [rsp + 16], eax - LONG $0x750f4166; BYTE $0xc3 // pcmpeqw xmm0, xmm11 - LONG $0x4cc40f66; WORD $0x040e; BYTE $0x01 // pinsrw xmm1, word [rsi + rcx + 4], 1 - QUAD $0x0204064cc40f4266 // pinsrw xmm1, word [rsi + r8 + 4], 2 - QUAD $0x0304264cc40f4266 // pinsrw xmm1, word [rsi + r12 + 4], 3 - QUAD $0x04042e4cc40f4266 // pinsrw xmm1, word [rsi + r13 + 4], 4 - LONG $0x4cc40f66; WORD $0x041e; BYTE $0x05 // pinsrw xmm1, word [rsi + rbx + 4], 5 - LONG $0x4cc40f66; WORD $0x043e; BYTE $0x06 // pinsrw xmm1, word [rsi + rdi + 4], 6 - QUAD $0x07040e4cc40f4266 // pinsrw xmm1, word [rsi + r9 + 4], 7 - LONG $0xc0630f66 // packsswb xmm0, xmm0 - LONG $0x750f4166; BYTE $0xcb // pcmpeqw xmm1, xmm11 - QUAD $0x0000808d6f0f4466; BYTE $0x00 // movdqa xmm9, oword 128[rbp] /* [rip + .LCPI4_8] */ - LONG $0x6f0f4166; BYTE $0xd9 // movdqa xmm3, xmm9 - LONG $0x380f4166; WORD $0xdf10 // pblendvb xmm3, xmm15, xmm0 - LONG $0xc9630f66 // packsswb xmm1, xmm1 - QUAD $0x00000090856f0f66 // movdqa xmm0, oword 144[rbp] /* [rip + .LCPI4_9] */ - LONG $0xf06f0f66 // movdqa xmm6, xmm0 - LONG $0x6f0f4466; BYTE $0xf0 // movdqa xmm14, xmm0 - LONG $0xc16f0f66 // movdqa xmm0, xmm1 - LONG $0x380f4166; WORD $0xf710 // pblendvb xmm6, xmm15, xmm0 - LONG $0x6e0f4166; BYTE $0xca // movd xmm1, r10d - LONG $0x54b70f46; WORD $0x183e // movzx r10d, word [rsi + r15 + 24] - LONG $0xc40f4266; WORD $0x0e2c; BYTE $0x07 // pinsrw xmm5, word [rsi + r9], 7 - LONG $0x750f4166; BYTE $0xeb // pcmpeqw xmm5, xmm11 - LONG $0xc0760f66 // pcmpeqd xmm0, xmm0 - LONG $0xe8ef0f66 // pxor xmm5, xmm0 - LONG $0xed630f66 // packsswb xmm5, xmm5 - LONG $0x7cc40f66; WORD $0x060e; BYTE $0x01 // pinsrw xmm7, word [rsi + rcx + 6], 1 - QUAD $0x0206067cc40f4266 // pinsrw xmm7, word [rsi + r8 + 6], 2 - QUAD $0x0306267cc40f4266 // pinsrw xmm7, word [rsi + r12 + 6], 3 - QUAD $0x04062e7cc40f4266 // pinsrw xmm7, word [rsi + r13 + 6], 4 - LONG $0x7cc40f66; WORD $0x061e; BYTE $0x05 // pinsrw xmm7, word [rsi + rbx + 6], 5 - LONG $0x7cc40f66; WORD $0x063e; BYTE $0x06 // pinsrw xmm7, word [rsi + rdi + 6], 6 - QUAD $0x07060e7cc40f4266 // pinsrw xmm7, word [rsi + r9 + 6], 7 - LONG $0x750f4166; BYTE $0xfb // pcmpeqw xmm7, xmm11 - LONG $0xff630f66 // packsswb xmm7, xmm7 - QUAD $0x01080e44c40f4466 // pinsrw xmm8, word [rsi + rcx + 8], 1 - QUAD $0x02080644c40f4666 // pinsrw xmm8, word [rsi + r8 + 8], 2 - QUAD $0x03082644c40f4666 // pinsrw xmm8, word [rsi + r12 + 8], 3 - QUAD $0x04082e44c40f4666 // pinsrw xmm8, word [rsi + r13 + 8], 4 - QUAD $0x05081e44c40f4466 // pinsrw xmm8, word [rsi + rbx + 8], 5 - QUAD $0x06083e44c40f4466 // pinsrw xmm8, word [rsi + rdi + 8], 6 - QUAD $0x07080e44c40f4666 // pinsrw xmm8, word [rsi + r9 + 8], 7 - LONG $0xddf80f66 // psubb xmm3, xmm5 - QUAD $0x0000a0a56f0f4466; BYTE $0x00 // movdqa xmm12, oword 160[rbp] /* [rip + .LCPI4_10] */ - LONG $0xc76f0f66 // movdqa xmm0, xmm7 - LONG $0x380f4566; WORD $0xe710 // pblendvb xmm12, xmm15, xmm0 - LONG $0x6e0f4166; BYTE $0xfb // movd xmm7, r11d - LONG $0x44b70f42; WORD $0x1a3e // movzx eax, word [rsi + r15 + 26] - LONG $0x750f4566; BYTE $0xc3 // pcmpeqw xmm8, xmm11 - LONG $0x630f4566; BYTE $0xc0 // packsswb xmm8, xmm8 - LONG $0xeb0f4466; BYTE $0xe6 // por xmm12, xmm6 - QUAD $0x0000b0ad6f0f4466; BYTE $0x00 // movdqa xmm13, oword 176[rbp] /* [rip + .LCPI4_11] */ - LONG $0x6f0f4166; BYTE $0xc0 // movdqa xmm0, xmm8 - LONG $0x380f4566; WORD $0xef10 // pblendvb xmm13, xmm15, xmm0 - LONG $0xf26e0f66 // movd xmm6, edx - LONG $0x5cb70f46; WORD $0x1c3e // movzx r11d, word [rsi + r15 + 28] - LONG $0x64c40f66; WORD $0x0a0e; BYTE $0x01 // pinsrw xmm4, word [rsi + rcx + 10], 1 - QUAD $0x020a0664c40f4266 // pinsrw xmm4, word [rsi + r8 + 10], 2 - QUAD $0x030a2664c40f4266 // pinsrw xmm4, word [rsi + r12 + 10], 3 - QUAD $0x040a2e64c40f4266 // pinsrw xmm4, word [rsi + r13 + 10], 4 - LONG $0x64c40f66; WORD $0x0a1e; BYTE $0x05 // pinsrw xmm4, word [rsi + rbx + 10], 5 - LONG $0x64c40f66; WORD $0x0a3e; BYTE $0x06 // pinsrw xmm4, word [rsi + rdi + 10], 6 - QUAD $0x070a0e64c40f4266 // pinsrw xmm4, word [rsi + r9 + 10], 7 - LONG $0x750f4166; BYTE $0xe3 // pcmpeqw xmm4, xmm11 - LONG $0xe4630f66 // packsswb xmm4, xmm4 - LONG $0x54c40f66; WORD $0x0c0e; BYTE $0x01 // pinsrw xmm2, word [rsi + rcx + 12], 1 - QUAD $0x020c0654c40f4266 // pinsrw xmm2, word [rsi + r8 + 12], 2 - QUAD $0x030c2654c40f4266 // pinsrw xmm2, word [rsi + r12 + 12], 3 - QUAD $0x040c2e54c40f4266 // pinsrw xmm2, word [rsi + r13 + 12], 4 - LONG $0x54c40f66; WORD $0x0c1e; BYTE $0x05 // pinsrw xmm2, word [rsi + rbx + 12], 5 - LONG $0x54c40f66; WORD $0x0c3e; BYTE $0x06 // pinsrw xmm2, word [rsi + rdi + 12], 6 - LONG $0xeb0f4466; BYTE $0xe3 // por xmm12, xmm3 - QUAD $0x000000c0ad6f0f66 // movdqa xmm5, oword 192[rbp] /* [rip + .LCPI4_12] */ - LONG $0xc46f0f66 // movdqa xmm0, xmm4 - LONG $0x380f4166; WORD $0xef10 // pblendvb xmm5, xmm15, xmm0 - LONG $0x6e0f4166; BYTE $0xe6 // movd xmm4, r14d - LONG $0x54b70f42; WORD $0x1e3e // movzx edx, word [rsi + r15 + 30] - LONG $0x30245489 // mov dword [rsp + 48], edx - QUAD $0x070c0e54c40f4266 // pinsrw xmm2, word [rsi + r9 + 12], 7 - LONG $0x750f4166; BYTE $0xd3 // pcmpeqw xmm2, xmm11 - LONG $0xd2630f66 // packsswb xmm2, xmm2 - LONG $0xeb0f4166; BYTE $0xed // por xmm5, xmm13 - QUAD $0x0000d0ad6f0f4466; BYTE $0x00 // movdqa xmm13, oword 208[rbp] /* [rip + .LCPI4_13] */ - LONG $0xc26f0f66 // movdqa xmm0, xmm2 - LONG $0x380f4566; WORD $0xef10 // pblendvb xmm13, xmm15, xmm0 - LONG $0x5c6e0f66; WORD $0x1024 // movd xmm3, dword [rsp + 16] - LONG $0x54b70f42; WORD $0x203e // movzx edx, word [rsi + r15 + 32] - LONG $0x20245489 // mov dword [rsp + 32], edx - LONG $0x4cc40f66; WORD $0x0e0e; BYTE $0x01 // pinsrw xmm1, word [rsi + rcx + 14], 1 - QUAD $0x020e064cc40f4266 // pinsrw xmm1, word [rsi + r8 + 14], 2 - QUAD $0x030e264cc40f4266 // pinsrw xmm1, word [rsi + r12 + 14], 3 - QUAD $0x040e2e4cc40f4266 // pinsrw xmm1, word [rsi + r13 + 14], 4 - LONG $0x4cc40f66; WORD $0x0e1e; BYTE $0x05 // pinsrw xmm1, word [rsi + rbx + 14], 5 - LONG $0x4cc40f66; WORD $0x0e3e; BYTE $0x06 // pinsrw xmm1, word [rsi + rdi + 14], 6 - LONG $0xeb0f4466; BYTE $0xed // por xmm13, xmm5 - LONG $0x6e0f4166; BYTE $0xd2 // movd xmm2, r10d - LONG $0x54b70f42; WORD $0x223e // movzx edx, word [rsi + r15 + 34] - LONG $0x10245489 // mov dword [rsp + 16], edx - QUAD $0x070e0e4cc40f4266 // pinsrw xmm1, word [rsi + r9 + 14], 7 - LONG $0x750f4166; BYTE $0xcb // pcmpeqw xmm1, xmm11 - LONG $0x74c40f66; WORD $0x120e; BYTE $0x01 // pinsrw xmm6, word [rsi + rcx + 18], 1 - QUAD $0x02120674c40f4266 // pinsrw xmm6, word [rsi + r8 + 18], 2 - QUAD $0x03122674c40f4266 // pinsrw xmm6, word [rsi + r12 + 18], 3 - QUAD $0x04122e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 18], 4 - LONG $0x74c40f66; WORD $0x121e; BYTE $0x05 // pinsrw xmm6, word [rsi + rbx + 18], 5 - LONG $0x74c40f66; WORD $0x123e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 18], 6 - LONG $0xc9630f66 // packsswb xmm1, xmm1 - QUAD $0x07120e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 18], 7 - LONG $0x750f4166; BYTE $0xf3 // pcmpeqw xmm6, xmm11 +LBB4_189: + QUAD $0xfffffe04b6100ff3 // movss xmm6, dword [rsi - 508] + QUAD $0xfffffe08be100ff3 // movss xmm7, dword [rsi - 504] + QUAD $0xfffffe0cae100ff3 // movss xmm5, dword [rsi - 500] + QUAD $0xfffffe10a6100ff3 // movss xmm4, dword [rsi - 496] + QUAD $0xfffe84b6213a0f66; WORD $0x10ff // insertps xmm6, dword [rsi - 380], 16 + QUAD $0xffff04b6213a0f66; WORD $0x20ff // insertps xmm6, dword [rsi - 252], 32 + LONG $0x213a0f66; WORD $0x8476; BYTE $0x30 // insertps xmm6, dword [rsi - 124], 48 + LONG $0x04f1c20f // cmpneqps xmm6, xmm1 + LONG $0xf66b0f66 // packssdw xmm6, xmm6 LONG $0xf6630f66 // packsswb xmm6, xmm6 - LONG $0xeb0f4566; BYTE $0xec // por xmm13, xmm12 - QUAD $0x0000e0a56f0f4466; BYTE $0x00 // movdqa xmm12, oword 224[rbp] /* [rip + .LCPI4_14] */ - LONG $0xc16f0f66 // movdqa xmm0, xmm1 - LONG $0x380f4566; WORD $0xe710 // pblendvb xmm12, xmm15, xmm0 - LONG $0x6f0f4566; BYTE $0xc1 // movdqa xmm8, xmm9 - LONG $0xc66f0f66 // movdqa xmm0, xmm6 - LONG $0x380f4566; WORD $0xc710 // pblendvb xmm8, xmm15, xmm0 - LONG $0xc86e0f66 // movd xmm1, eax - LONG $0x74b70f46; WORD $0x243e // movzx r14d, word [rsi + r15 + 36] - LONG $0x7cc40f66; WORD $0x100e; BYTE $0x01 // pinsrw xmm7, word [rsi + rcx + 16], 1 - QUAD $0x0210067cc40f4266 // pinsrw xmm7, word [rsi + r8 + 16], 2 - QUAD $0x0310267cc40f4266 // pinsrw xmm7, word [rsi + r12 + 16], 3 - QUAD $0x04102e7cc40f4266 // pinsrw xmm7, word [rsi + r13 + 16], 4 - LONG $0x7cc40f66; WORD $0x101e; BYTE $0x05 // pinsrw xmm7, word [rsi + rbx + 16], 5 - LONG $0x7cc40f66; WORD $0x103e; BYTE $0x06 // pinsrw xmm7, word [rsi + rdi + 16], 6 - LONG $0x64c40f66; WORD $0x140e; BYTE $0x01 // pinsrw xmm4, word [rsi + rcx + 20], 1 - QUAD $0x02140664c40f4266 // pinsrw xmm4, word [rsi + r8 + 20], 2 - QUAD $0x03142664c40f4266 // pinsrw xmm4, word [rsi + r12 + 20], 3 - QUAD $0x04142e64c40f4266 // pinsrw xmm4, word [rsi + r13 + 20], 4 - LONG $0x64c40f66; WORD $0x141e; BYTE $0x05 // pinsrw xmm4, word [rsi + rbx + 20], 5 - LONG $0x64c40f66; WORD $0x143e; BYTE $0x06 // pinsrw xmm4, word [rsi + rdi + 20], 6 - QUAD $0x07140e64c40f4266 // pinsrw xmm4, word [rsi + r9 + 20], 7 - LONG $0x750f4166; BYTE $0xe3 // pcmpeqw xmm4, xmm11 + LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 + QUAD $0xfffe88be213a0f66; WORD $0x10ff // insertps xmm7, dword [rsi - 376], 16 + QUAD $0xffff08be213a0f66; WORD $0x20ff // insertps xmm7, dword [rsi - 248], 32 + LONG $0x213a0f66; WORD $0x887e; BYTE $0x30 // insertps xmm7, dword [rsi - 120], 48 + QUAD $0xfffe8cae213a0f66; WORD $0x10ff // insertps xmm5, dword [rsi - 372], 16 + QUAD $0xffff0cae213a0f66; WORD $0x20ff // insertps xmm5, dword [rsi - 244], 32 + LONG $0x213a0f66; WORD $0x8c6e; BYTE $0x30 // insertps xmm5, dword [rsi - 116], 48 + QUAD $0xfffe90a6213a0f66; WORD $0x10ff // insertps xmm4, dword [rsi - 368], 16 + QUAD $0xffff10a6213a0f66; WORD $0x20ff // insertps xmm4, dword [rsi - 240], 32 + LONG $0x213a0f66; WORD $0x9066; BYTE $0x30 // insertps xmm4, dword [rsi - 112], 48 + LONG $0x04f9c20f // cmpneqps xmm7, xmm1 + LONG $0xff6b0f66 // packssdw xmm7, xmm7 + LONG $0xff630f66 // packsswb xmm7, xmm7 + LONG $0xd76f0f66 // movdqa xmm2, xmm7 + LONG $0xdb0f4166; BYTE $0xd7 // pand xmm2, xmm15 + LONG $0xd7f80f66 // psubb xmm2, xmm7 + QUAD $0xfffffe14be100ff3 // movss xmm7, dword [rsi - 492] + QUAD $0xfffe94be213a0f66; WORD $0x10ff // insertps xmm7, dword [rsi - 364], 16 + QUAD $0xffff14be213a0f66; WORD $0x20ff // insertps xmm7, dword [rsi - 236], 32 + LONG $0x213a0f66; WORD $0x947e; BYTE $0x30 // insertps xmm7, dword [rsi - 108], 48 + LONG $0xd6eb0f66 // por xmm2, xmm6 + QUAD $0xfffffe18b6100ff3 // movss xmm6, dword [rsi - 488] + QUAD $0xfffe98b6213a0f66; WORD $0x10ff // insertps xmm6, dword [rsi - 360], 16 + QUAD $0xffff18b6213a0f66; WORD $0x20ff // insertps xmm6, dword [rsi - 232], 32 + LONG $0x213a0f66; WORD $0x9876; BYTE $0x30 // insertps xmm6, dword [rsi - 104], 48 + LONG $0x04e9c20f // cmpneqps xmm5, xmm1 + LONG $0xed6b0f66 // packssdw xmm5, xmm5 + LONG $0xed630f66 // packsswb xmm5, xmm5 + LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 + LONG $0xf5710f66; BYTE $0x02 // psllw xmm5, 2 + LONG $0xdb0f4166; BYTE $0xe8 // pand xmm5, xmm8 + LONG $0xeaeb0f66 // por xmm5, xmm2 + QUAD $0xfffffe1c9e100ff3 // movss xmm3, dword [rsi - 484] + QUAD $0xfffe9c9e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 356], 16 + QUAD $0xffff1c9e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 228], 32 + LONG $0x213a0f66; WORD $0x9c5e; BYTE $0x30 // insertps xmm3, dword [rsi - 100], 48 + LONG $0x04e1c20f // cmpneqps xmm4, xmm1 + LONG $0xe46b0f66 // packssdw xmm4, xmm4 LONG $0xe4630f66 // packsswb xmm4, xmm4 - LONG $0xeb0f4566; BYTE $0xe5 // por xmm12, xmm13 - LONG $0x6f0f4166; BYTE $0xee // movdqa xmm5, xmm14 - LONG $0xc46f0f66 // movdqa xmm0, xmm4 - LONG $0x380f4166; WORD $0xef10 // pblendvb xmm5, xmm15, xmm0 - LONG $0x6e0f4166; BYTE $0xe3 // movd xmm4, r11d - LONG $0x5cb70f46; WORD $0x263e // movzx r11d, word [rsi + r15 + 38] - QUAD $0x07100e7cc40f4266 // pinsrw xmm7, word [rsi + r9 + 16], 7 - LONG $0x750f4166; BYTE $0xfb // pcmpeqw xmm7, xmm11 - QUAD $0x00000160bdef0f66 // pxor xmm7, oword 352[rbp] /* [rip + .LCPI4_22] */ + LONG $0xdb0f4166; BYTE $0xe7 // pand xmm4, xmm15 + LONG $0xf4710f66; BYTE $0x03 // psllw xmm4, 3 + LONG $0xdb0f4166; BYTE $0xe2 // pand xmm4, xmm10 + LONG $0x04f9c20f // cmpneqps xmm7, xmm1 + LONG $0xff6b0f66 // packssdw xmm7, xmm7 LONG $0xff630f66 // packsswb xmm7, xmm7 - LONG $0x5cc40f66; WORD $0x160e; BYTE $0x01 // pinsrw xmm3, word [rsi + rcx + 22], 1 - QUAD $0x0216065cc40f4266 // pinsrw xmm3, word [rsi + r8 + 22], 2 - QUAD $0x0316265cc40f4266 // pinsrw xmm3, word [rsi + r12 + 22], 3 - QUAD $0x04162e5cc40f4266 // pinsrw xmm3, word [rsi + r13 + 22], 4 - LONG $0x5cc40f66; WORD $0x161e; BYTE $0x05 // pinsrw xmm3, word [rsi + rbx + 22], 5 - LONG $0x5cc40f66; WORD $0x163e; BYTE $0x06 // pinsrw xmm3, word [rsi + rdi + 22], 6 - QUAD $0x07160e5cc40f4266 // pinsrw xmm3, word [rsi + r9 + 22], 7 - LONG $0x750f4166; BYTE $0xdb // pcmpeqw xmm3, xmm11 + LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 + LONG $0xf7710f66; BYTE $0x04 // psllw xmm7, 4 + LONG $0xdb0f4166; BYTE $0xfb // pand xmm7, xmm11 + LONG $0xfceb0f66 // por xmm7, xmm4 + QUAD $0xfffffe20a6100ff3 // movss xmm4, dword [rsi - 480] + QUAD $0xfffea0a6213a0f66; WORD $0x10ff // insertps xmm4, dword [rsi - 352], 16 + QUAD $0xffff20a6213a0f66; WORD $0x20ff // insertps xmm4, dword [rsi - 224], 32 + LONG $0x213a0f66; WORD $0xa066; BYTE $0x30 // insertps xmm4, dword [rsi - 96], 48 + LONG $0xfdeb0f66 // por xmm7, xmm5 + QUAD $0xfffffe24ae100ff3 // movss xmm5, dword [rsi - 476] + QUAD $0xfffea4ae213a0f66; WORD $0x10ff // insertps xmm5, dword [rsi - 348], 16 + QUAD $0xffff24ae213a0f66; WORD $0x20ff // insertps xmm5, dword [rsi - 220], 32 + LONG $0x213a0f66; WORD $0xa46e; BYTE $0x30 // insertps xmm5, dword [rsi - 92], 48 + LONG $0x04e9c20f // cmpneqps xmm5, xmm1 + LONG $0xed6b0f66 // packssdw xmm5, xmm5 + LONG $0x04f1c20f // cmpneqps xmm6, xmm1 + LONG $0xf66b0f66 // packssdw xmm6, xmm6 + LONG $0xf6630f66 // packsswb xmm6, xmm6 + LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 + LONG $0xf6710f66; BYTE $0x05 // psllw xmm6, 5 + LONG $0xdb0f4166; BYTE $0xf4 // pand xmm6, xmm12 + LONG $0x04d9c20f // cmpneqps xmm3, xmm1 + LONG $0xdb6b0f66 // packssdw xmm3, xmm3 LONG $0xdb630f66 // packsswb xmm3, xmm3 - LONG $0x54c40f66; WORD $0x180e; BYTE $0x01 // pinsrw xmm2, word [rsi + rcx + 24], 1 - QUAD $0x02180654c40f4266 // pinsrw xmm2, word [rsi + r8 + 24], 2 - QUAD $0x03182654c40f4266 // pinsrw xmm2, word [rsi + r12 + 24], 3 - QUAD $0x04182e54c40f4266 // pinsrw xmm2, word [rsi + r13 + 24], 4 - LONG $0x54c40f66; WORD $0x181e; BYTE $0x05 // pinsrw xmm2, word [rsi + rbx + 24], 5 - LONG $0x54c40f66; WORD $0x183e; BYTE $0x06 // pinsrw xmm2, word [rsi + rdi + 24], 6 - QUAD $0x07180e54c40f4266 // pinsrw xmm2, word [rsi + r9 + 24], 7 - LONG $0xf80f4466; BYTE $0xc7 // psubb xmm8, xmm7 - QUAD $0x0000a0956f0f4466; BYTE $0x00 // movdqa xmm10, oword 160[rbp] /* [rip + .LCPI4_10] */ - LONG $0x6f0f4566; BYTE $0xf2 // movdqa xmm14, xmm10 - LONG $0xc36f0f66 // movdqa xmm0, xmm3 - LONG $0x380f4566; WORD $0xf710 // pblendvb xmm14, xmm15, xmm0 - LONG $0x5c6e0f66; WORD $0x3024 // movd xmm3, dword [rsp + 48] - LONG $0x44b70f42; WORD $0x283e // movzx eax, word [rsi + r15 + 40] - LONG $0x750f4166; BYTE $0xd3 // pcmpeqw xmm2, xmm11 + LONG $0xdb0f4166; BYTE $0xdf // pand xmm3, xmm15 + LONG $0xf3710f66; BYTE $0x06 // psllw xmm3, 6 + LONG $0xdb0f4166; BYTE $0xdd // pand xmm3, xmm13 + LONG $0xdeeb0f66 // por xmm3, xmm6 + QUAD $0xfffffe2896100ff3 // movss xmm2, dword [rsi - 472] + QUAD $0xfffea896213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 344], 16 + QUAD $0xffff2896213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 216], 32 + LONG $0x213a0f66; WORD $0xa856; BYTE $0x30 // insertps xmm2, dword [rsi - 88], 48 + LONG $0xed630f66 // packsswb xmm5, xmm5 + LONG $0x04e1c20f // cmpneqps xmm4, xmm1 + LONG $0xe46b0f66 // packssdw xmm4, xmm4 + LONG $0xe4630f66 // packsswb xmm4, xmm4 + LONG $0xf4710f66; BYTE $0x07 // psllw xmm4, 7 + LONG $0xdb0f4166; BYTE $0xe6 // pand xmm4, xmm14 + LONG $0xe3eb0f66 // por xmm4, xmm3 + QUAD $0xfffffe2c9e100ff3 // movss xmm3, dword [rsi - 468] + QUAD $0xfffeac9e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 340], 16 + QUAD $0xffff2c9e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 212], 32 + LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 + LONG $0x213a0f66; WORD $0xac5e; BYTE $0x30 // insertps xmm3, dword [rsi - 84], 48 + LONG $0xe7eb0f66 // por xmm4, xmm7 + LONG $0x04d1c20f // cmpneqps xmm2, xmm1 + LONG $0xd26b0f66 // packssdw xmm2, xmm2 LONG $0xd2630f66 // packsswb xmm2, xmm2 - LONG $0xeb0f4466; BYTE $0xf5 // por xmm14, xmm5 - QUAD $0x0000b08d6f0f4466; BYTE $0x00 // movdqa xmm9, oword 176[rbp] /* [rip + .LCPI4_11] */ - LONG $0x6f0f4566; BYTE $0xe9 // movdqa xmm13, xmm9 - LONG $0xc26f0f66 // movdqa xmm0, xmm2 - LONG $0x380f4566; WORD $0xef10 // pblendvb xmm13, xmm15, xmm0 - LONG $0x7c6e0f66; WORD $0x2024 // movd xmm7, dword [rsp + 32] - LONG $0x54b70f46; WORD $0x2a3e // movzx r10d, word [rsi + r15 + 42] - LONG $0x4cc40f66; WORD $0x1a0e; BYTE $0x01 // pinsrw xmm1, word [rsi + rcx + 26], 1 - QUAD $0x021a064cc40f4266 // pinsrw xmm1, word [rsi + r8 + 26], 2 - QUAD $0x031a264cc40f4266 // pinsrw xmm1, word [rsi + r12 + 26], 3 - QUAD $0x041a2e4cc40f4266 // pinsrw xmm1, word [rsi + r13 + 26], 4 - LONG $0x4cc40f66; WORD $0x1a1e; BYTE $0x05 // pinsrw xmm1, word [rsi + rbx + 26], 5 - LONG $0x4cc40f66; WORD $0x1a3e; BYTE $0x06 // pinsrw xmm1, word [rsi + rdi + 26], 6 - QUAD $0x071a0e4cc40f4266 // pinsrw xmm1, word [rsi + r9 + 26], 7 - LONG $0x750f4166; BYTE $0xcb // pcmpeqw xmm1, xmm11 - LONG $0xc9630f66 // packsswb xmm1, xmm1 - LONG $0x64c40f66; WORD $0x1c0e; BYTE $0x01 // pinsrw xmm4, word [rsi + rcx + 28], 1 - QUAD $0x021c0664c40f4266 // pinsrw xmm4, word [rsi + r8 + 28], 2 + LONG $0xf26f0f66 // movdqa xmm6, xmm2 + LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 + LONG $0xf2f80f66 // psubb xmm6, xmm2 + QUAD $0xfffffe30be100ff3 // movss xmm7, dword [rsi - 464] + QUAD $0xfffeb0be213a0f66; WORD $0x10ff // insertps xmm7, dword [rsi - 336], 16 + QUAD $0xffff30be213a0f66; WORD $0x20ff // insertps xmm7, dword [rsi - 208], 32 + LONG $0x213a0f66; WORD $0xb07e; BYTE $0x30 // insertps xmm7, dword [rsi - 80], 48 + LONG $0xf5eb0f66 // por xmm6, xmm5 + QUAD $0xfffffe34ae100ff3 // movss xmm5, dword [rsi - 460] + QUAD $0xfffeb4ae213a0f66; WORD $0x10ff // insertps xmm5, dword [rsi - 332], 16 + QUAD $0xffff34ae213a0f66; WORD $0x20ff // insertps xmm5, dword [rsi - 204], 32 + LONG $0x213a0f66; WORD $0xb46e; BYTE $0x30 // insertps xmm5, dword [rsi - 76], 48 + LONG $0x04d9c20f // cmpneqps xmm3, xmm1 + LONG $0xdb6b0f66 // packssdw xmm3, xmm3 + LONG $0xdb630f66 // packsswb xmm3, xmm3 + LONG $0xdb0f4166; BYTE $0xdf // pand xmm3, xmm15 + LONG $0xf3710f66; BYTE $0x02 // psllw xmm3, 2 + LONG $0xdb0f4166; BYTE $0xd8 // pand xmm3, xmm8 + LONG $0xdeeb0f66 // por xmm3, xmm6 + QUAD $0xfffffe38b6100ff3 // movss xmm6, dword [rsi - 456] + QUAD $0xfffeb8b6213a0f66; WORD $0x10ff // insertps xmm6, dword [rsi - 328], 16 + QUAD $0xffff38b6213a0f66; WORD $0x20ff // insertps xmm6, dword [rsi - 200], 32 + LONG $0x213a0f66; WORD $0xb876; BYTE $0x30 // insertps xmm6, dword [rsi - 72], 48 + LONG $0x04f9c20f // cmpneqps xmm7, xmm1 + LONG $0xff6b0f66 // packssdw xmm7, xmm7 + LONG $0xff630f66 // packsswb xmm7, xmm7 + LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 + LONG $0xf7710f66; BYTE $0x03 // psllw xmm7, 3 + LONG $0xdb0f4166; BYTE $0xfa // pand xmm7, xmm10 + LONG $0x04e9c20f // cmpneqps xmm5, xmm1 + LONG $0xed6b0f66 // packssdw xmm5, xmm5 + LONG $0xed630f66 // packsswb xmm5, xmm5 + LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 + LONG $0xf5710f66; BYTE $0x04 // psllw xmm5, 4 + LONG $0xdb0f4166; BYTE $0xeb // pand xmm5, xmm11 + LONG $0xefeb0f66 // por xmm5, xmm7 + QUAD $0xfffffe3c96100ff3 // movss xmm2, dword [rsi - 452] + QUAD $0xfffebc96213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 324], 16 + QUAD $0xffff3c96213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 196], 32 + LONG $0x213a0f66; WORD $0xbc56; BYTE $0x30 // insertps xmm2, dword [rsi - 68], 48 + LONG $0xebeb0f66 // por xmm5, xmm3 + QUAD $0xfffffe40be100ff3 // movss xmm7, dword [rsi - 448] + QUAD $0xfffec0be213a0f66; WORD $0x10ff // insertps xmm7, dword [rsi - 320], 16 + QUAD $0xffff40be213a0f66; WORD $0x20ff // insertps xmm7, dword [rsi - 192], 32 + LONG $0x213a0f66; WORD $0xc07e; BYTE $0x30 // insertps xmm7, dword [rsi - 64], 48 + LONG $0x04f1c20f // cmpneqps xmm6, xmm1 + LONG $0xf66b0f66 // packssdw xmm6, xmm6 + LONG $0xf6630f66 // packsswb xmm6, xmm6 + LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 + LONG $0xf6710f66; BYTE $0x05 // psllw xmm6, 5 + LONG $0xdb0f4166; BYTE $0xf4 // pand xmm6, xmm12 + LONG $0x04d1c20f // cmpneqps xmm2, xmm1 + LONG $0xd26b0f66 // packssdw xmm2, xmm2 + LONG $0xd2630f66 // packsswb xmm2, xmm2 + LONG $0xdb0f4166; BYTE $0xd7 // pand xmm2, xmm15 + LONG $0xf2710f66; BYTE $0x06 // psllw xmm2, 6 + LONG $0xdb0f4166; BYTE $0xd5 // pand xmm2, xmm13 + LONG $0xd6eb0f66 // por xmm2, xmm6 + QUAD $0xfffffe44b6100ff3 // movss xmm6, dword [rsi - 444] + QUAD $0xfffec4b6213a0f66; WORD $0x10ff // insertps xmm6, dword [rsi - 316], 16 + QUAD $0xffff44b6213a0f66; WORD $0x20ff // insertps xmm6, dword [rsi - 188], 32 + LONG $0x213a0f66; WORD $0xc476; BYTE $0x30 // insertps xmm6, dword [rsi - 60], 48 + LONG $0x04f1c20f // cmpneqps xmm6, xmm1 + LONG $0xf66b0f66 // packssdw xmm6, xmm6 + LONG $0xf6630f66 // packsswb xmm6, xmm6 + LONG $0x04f9c20f // cmpneqps xmm7, xmm1 + LONG $0xff6b0f66 // packssdw xmm7, xmm7 + LONG $0xff630f66 // packsswb xmm7, xmm7 + LONG $0xf7710f66; BYTE $0x07 // psllw xmm7, 7 + LONG $0xdb0f4166; BYTE $0xfe // pand xmm7, xmm14 + LONG $0xfaeb0f66 // por xmm7, xmm2 + QUAD $0xfffffe4896100ff3 // movss xmm2, dword [rsi - 440] + QUAD $0xfffec896213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 312], 16 + QUAD $0xffff4896213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 184], 32 + LONG $0x213a0f66; WORD $0xc856; BYTE $0x30 // insertps xmm2, dword [rsi - 56], 48 + LONG $0xfdeb0f66 // por xmm7, xmm5 + QUAD $0xfffffe4c9e100ff3 // movss xmm3, dword [rsi - 436] + QUAD $0xfffecc9e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 308], 16 + QUAD $0xffff4c9e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 180], 32 + LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 + LONG $0x213a0f66; WORD $0xcc5e; BYTE $0x30 // insertps xmm3, dword [rsi - 52], 48 + LONG $0xe7620f66 // punpckldq xmm4, xmm7 + LONG $0x04d1c20f // cmpneqps xmm2, xmm1 + LONG $0xd26b0f66 // packssdw xmm2, xmm2 + LONG $0xd2630f66 // packsswb xmm2, xmm2 + LONG $0xfa6f0f66 // movdqa xmm7, xmm2 + LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 + LONG $0xfaf80f66 // psubb xmm7, xmm2 + QUAD $0xfffffe50ae100ff3 // movss xmm5, dword [rsi - 432] + QUAD $0xfffed0ae213a0f66; WORD $0x10ff // insertps xmm5, dword [rsi - 304], 16 + QUAD $0xffff50ae213a0f66; WORD $0x20ff // insertps xmm5, dword [rsi - 176], 32 + LONG $0x213a0f66; WORD $0xd06e; BYTE $0x30 // insertps xmm5, dword [rsi - 48], 48 + LONG $0xfeeb0f66 // por xmm7, xmm6 + QUAD $0xfffffe54b6100ff3 // movss xmm6, dword [rsi - 428] + QUAD $0xfffed4b6213a0f66; WORD $0x10ff // insertps xmm6, dword [rsi - 300], 16 + QUAD $0xffff54b6213a0f66; WORD $0x20ff // insertps xmm6, dword [rsi - 172], 32 + LONG $0x213a0f66; WORD $0xd476; BYTE $0x30 // insertps xmm6, dword [rsi - 44], 48 + LONG $0x04d9c20f // cmpneqps xmm3, xmm1 + LONG $0xdb6b0f66 // packssdw xmm3, xmm3 + LONG $0xdb630f66 // packsswb xmm3, xmm3 + LONG $0xdb0f4166; BYTE $0xdf // pand xmm3, xmm15 + LONG $0xf3710f66; BYTE $0x02 // psllw xmm3, 2 + LONG $0xdb0f4166; BYTE $0xd8 // pand xmm3, xmm8 + LONG $0xdfeb0f66 // por xmm3, xmm7 + QUAD $0xfffffe58be100ff3 // movss xmm7, dword [rsi - 424] + QUAD $0xfffed8be213a0f66; WORD $0x10ff // insertps xmm7, dword [rsi - 296], 16 + QUAD $0xffff58be213a0f66; WORD $0x20ff // insertps xmm7, dword [rsi - 168], 32 + LONG $0x213a0f66; WORD $0xd87e; BYTE $0x30 // insertps xmm7, dword [rsi - 40], 48 + LONG $0x04e9c20f // cmpneqps xmm5, xmm1 + LONG $0xed6b0f66 // packssdw xmm5, xmm5 + LONG $0xed630f66 // packsswb xmm5, xmm5 + LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 + LONG $0xf5710f66; BYTE $0x03 // psllw xmm5, 3 + LONG $0xdb0f4166; BYTE $0xea // pand xmm5, xmm10 + LONG $0x04f1c20f // cmpneqps xmm6, xmm1 + LONG $0xf66b0f66 // packssdw xmm6, xmm6 + LONG $0xf6630f66 // packsswb xmm6, xmm6 + LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 + LONG $0xf6710f66; BYTE $0x04 // psllw xmm6, 4 + LONG $0xdb0f4166; BYTE $0xf3 // pand xmm6, xmm11 + LONG $0xf5eb0f66 // por xmm6, xmm5 + QUAD $0xfffffe5c96100ff3 // movss xmm2, dword [rsi - 420] + QUAD $0xfffedc96213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 292], 16 + QUAD $0xffff5c96213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 164], 32 + LONG $0x213a0f66; WORD $0xdc56; BYTE $0x30 // insertps xmm2, dword [rsi - 36], 48 + LONG $0xf3eb0f66 // por xmm6, xmm3 + QUAD $0xfffffe60ae100ff3 // movss xmm5, dword [rsi - 416] + QUAD $0xfffee0ae213a0f66; WORD $0x10ff // insertps xmm5, dword [rsi - 288], 16 + QUAD $0xffff60ae213a0f66; WORD $0x20ff // insertps xmm5, dword [rsi - 160], 32 + LONG $0x213a0f66; WORD $0xe06e; BYTE $0x30 // insertps xmm5, dword [rsi - 32], 48 + LONG $0x04f9c20f // cmpneqps xmm7, xmm1 + LONG $0xff6b0f66 // packssdw xmm7, xmm7 + LONG $0xff630f66 // packsswb xmm7, xmm7 + LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 + LONG $0xf7710f66; BYTE $0x05 // psllw xmm7, 5 + LONG $0xdb0f4166; BYTE $0xfc // pand xmm7, xmm12 + LONG $0x04d1c20f // cmpneqps xmm2, xmm1 + LONG $0xd26b0f66 // packssdw xmm2, xmm2 + LONG $0xd2630f66 // packsswb xmm2, xmm2 + LONG $0xdb0f4166; BYTE $0xd7 // pand xmm2, xmm15 + LONG $0xf2710f66; BYTE $0x06 // psllw xmm2, 6 + LONG $0xdb0f4166; BYTE $0xd5 // pand xmm2, xmm13 + LONG $0xd7eb0f66 // por xmm2, xmm7 + QUAD $0xfffffe64be100ff3 // movss xmm7, dword [rsi - 412] + QUAD $0xfffee4be213a0f66; WORD $0x10ff // insertps xmm7, dword [rsi - 284], 16 + QUAD $0xffff64be213a0f66; WORD $0x20ff // insertps xmm7, dword [rsi - 156], 32 + LONG $0x213a0f66; WORD $0xe47e; BYTE $0x30 // insertps xmm7, dword [rsi - 28], 48 + LONG $0x04f9c20f // cmpneqps xmm7, xmm1 + LONG $0xff6b0f66 // packssdw xmm7, xmm7 + LONG $0xff630f66 // packsswb xmm7, xmm7 + LONG $0x04e9c20f // cmpneqps xmm5, xmm1 + LONG $0xed6b0f66 // packssdw xmm5, xmm5 + LONG $0xed630f66 // packsswb xmm5, xmm5 + LONG $0xf5710f66; BYTE $0x07 // psllw xmm5, 7 + LONG $0xdb0f4166; BYTE $0xee // pand xmm5, xmm14 + LONG $0xeaeb0f66 // por xmm5, xmm2 + QUAD $0xfffffe6896100ff3 // movss xmm2, dword [rsi - 408] + QUAD $0xfffee896213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 280], 16 + QUAD $0xffff6896213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 152], 32 + LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 + LONG $0x213a0f66; WORD $0xe856; BYTE $0x30 // insertps xmm2, dword [rsi - 24], 48 + LONG $0xeeeb0f66 // por xmm5, xmm6 + LONG $0x04d1c20f // cmpneqps xmm2, xmm1 + LONG $0xd26b0f66 // packssdw xmm2, xmm2 + LONG $0xd2630f66 // packsswb xmm2, xmm2 + LONG $0xf26f0f66 // movdqa xmm6, xmm2 + LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 + LONG $0xf2f80f66 // psubb xmm6, xmm2 + QUAD $0xfffffe6c9e100ff3 // movss xmm3, dword [rsi - 404] + QUAD $0xfffeec9e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 276], 16 + QUAD $0xffff6c9e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 148], 32 + LONG $0x213a0f66; WORD $0xec5e; BYTE $0x30 // insertps xmm3, dword [rsi - 20], 48 + LONG $0xf7eb0f66 // por xmm6, xmm7 + QUAD $0xfffffe7096100ff3 // movss xmm2, dword [rsi - 400] + QUAD $0xfffef096213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 272], 16 + QUAD $0xffff7096213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 144], 32 + LONG $0x213a0f66; WORD $0xf056; BYTE $0x30 // insertps xmm2, dword [rsi - 16], 48 + LONG $0x04d9c20f // cmpneqps xmm3, xmm1 + LONG $0xdb6b0f66 // packssdw xmm3, xmm3 + LONG $0xdb630f66 // packsswb xmm3, xmm3 + LONG $0xdb0f4166; BYTE $0xdf // pand xmm3, xmm15 + LONG $0xf3710f66; BYTE $0x02 // psllw xmm3, 2 + LONG $0xdb0f4166; BYTE $0xd8 // pand xmm3, xmm8 + LONG $0xdeeb0f66 // por xmm3, xmm6 + QUAD $0xfffffe74b6100ff3 // movss xmm6, dword [rsi - 396] + QUAD $0xfffef4b6213a0f66; WORD $0x10ff // insertps xmm6, dword [rsi - 268], 16 + QUAD $0xffff74b6213a0f66; WORD $0x20ff // insertps xmm6, dword [rsi - 140], 32 + LONG $0x213a0f66; WORD $0xf476; BYTE $0x30 // insertps xmm6, dword [rsi - 12], 48 + LONG $0x04d1c20f // cmpneqps xmm2, xmm1 + LONG $0xd26b0f66 // packssdw xmm2, xmm2 + LONG $0xd2630f66 // packsswb xmm2, xmm2 + LONG $0xdb0f4166; BYTE $0xd7 // pand xmm2, xmm15 + LONG $0xf2710f66; BYTE $0x03 // psllw xmm2, 3 + LONG $0xdb0f4166; BYTE $0xd2 // pand xmm2, xmm10 + LONG $0x04f1c20f // cmpneqps xmm6, xmm1 + LONG $0xf66b0f66 // packssdw xmm6, xmm6 + LONG $0xf6630f66 // packsswb xmm6, xmm6 + LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 + LONG $0xf6710f66; BYTE $0x04 // psllw xmm6, 4 + LONG $0xdb0f4166; BYTE $0xf3 // pand xmm6, xmm11 + LONG $0xf2eb0f66 // por xmm6, xmm2 + QUAD $0xfffffe78be100ff3 // movss xmm7, dword [rsi - 392] + QUAD $0xfffef8be213a0f66; WORD $0x10ff // insertps xmm7, dword [rsi - 264], 16 + QUAD $0xffff78be213a0f66; WORD $0x20ff // insertps xmm7, dword [rsi - 136], 32 + LONG $0x213a0f66; WORD $0xf87e; BYTE $0x30 // insertps xmm7, dword [rsi - 8], 48 + LONG $0xf3eb0f66 // por xmm6, xmm3 + QUAD $0xfffffe7c96100ff3 // movss xmm2, dword [rsi - 388] + QUAD $0xfffefc96213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 260], 16 + QUAD $0xffff7c96213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 132], 32 + LONG $0x213a0f66; WORD $0xfc56; BYTE $0x30 // insertps xmm2, dword [rsi - 4], 48 + LONG $0x04f9c20f // cmpneqps xmm7, xmm1 + LONG $0xff6b0f66 // packssdw xmm7, xmm7 + LONG $0xff630f66 // packsswb xmm7, xmm7 + LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 + LONG $0xf7710f66; BYTE $0x05 // psllw xmm7, 5 + LONG $0xdb0f4166; BYTE $0xfc // pand xmm7, xmm12 + LONG $0x04d1c20f // cmpneqps xmm2, xmm1 + LONG $0xd26b0f66 // packssdw xmm2, xmm2 + LONG $0xd2630f66 // packsswb xmm2, xmm2 + LONG $0xdb0f4166; BYTE $0xd7 // pand xmm2, xmm15 + LONG $0xf2710f66; BYTE $0x06 // psllw xmm2, 6 + LONG $0xdb0f4166; BYTE $0xd5 // pand xmm2, xmm13 + LONG $0xd7eb0f66 // por xmm2, xmm7 + QUAD $0xfffffe809e100ff3 // movss xmm3, dword [rsi - 384] + QUAD $0xffff009e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 256], 16 + LONG $0x213a0f66; WORD $0x805e; BYTE $0x20 // insertps xmm3, dword [rsi - 128], 32 + LONG $0x213a0f66; WORD $0x301e // insertps xmm3, dword [rsi], 48 + LONG $0x04d9c20f // cmpneqps xmm3, xmm1 + LONG $0xdb6b0f66 // packssdw xmm3, xmm3 + LONG $0xdb630f66 // packsswb xmm3, xmm3 + LONG $0xf3710f66; BYTE $0x07 // psllw xmm3, 7 + LONG $0xdb0f4166; BYTE $0xde // pand xmm3, xmm14 + LONG $0xdaeb0f66 // por xmm3, xmm2 + LONG $0xdeeb0f66 // por xmm3, xmm6 + LONG $0xeb620f66 // punpckldq xmm5, xmm3 + LONG $0xe5600f66 // punpcklbw xmm4, xmm5 + LONG $0x380f4166; WORD $0xe100 // pshufb xmm4, xmm9 + LONG $0x7f0f41f3; WORD $0x8c24 // movdqu oword [r12 + 4*rcx], xmm4 + LONG $0x04c18348 // add rcx, 4 + LONG $0x00c68148; WORD $0x0002; BYTE $0x00 // add rsi, 512 + WORD $0x3949; BYTE $0xc8 // cmp r8, rcx + JNE LBB4_189 + WORD $0x394d; BYTE $0xc2 // cmp r10, r8 + JNE LBB4_134 + JMP LBB4_146 + +LBB4_191: + LONG $0xf8e28349 // and r10, -8 + WORD $0x894c; BYTE $0xd0 // mov rax, r10 + LONG $0x06e0c148 // shl rax, 6 + WORD $0x0148; BYTE $0xf0 // add rax, rsi + LONG $0x24448948; BYTE $0x38 // mov qword [rsp + 56], rax + LONG $0x2454894c; BYTE $0x20 // mov qword [rsp + 32], r10 + LONG $0x94048d4b // lea rax, [r12 + 4*r10] + LONG $0x24448948; BYTE $0x08 // mov qword [rsp + 8], rax + LONG $0x246c8944; BYTE $0x40 // mov dword [rsp + 64], r13d + LONG $0x6e0f4166; BYTE $0xc5 // movd xmm0, r13d + LONG $0xc0700ff2; BYTE $0xe0 // pshuflw xmm0, xmm0, 224 + LONG $0x700f4466; WORD $0x00d8 // pshufd xmm11, xmm0, 0 + WORD $0x3145; BYTE $0xff // xor r15d, r15d + QUAD $0x0000008024a4894c // mov qword [rsp + 128], r12 + LONG $0xef0f4566; BYTE $0xff // pxor xmm15, xmm15 + +LBB4_192: + LONG $0x247c894c; BYTE $0x18 // mov qword [rsp + 24], r15 + LONG $0x06e7c149 // shl r15, 6 + WORD $0x894d; BYTE $0xf8 // mov r8, r15 + WORD $0x894d; BYTE $0xfc // mov r12, r15 + WORD $0x894d; BYTE $0xfd // mov r13, r15 + WORD $0x894c; BYTE $0xfb // mov rbx, r15 + WORD $0x894c; BYTE $0xff // mov rdi, r15 + WORD $0x894d; BYTE $0xf9 // mov r9, r15 + LONG $0x04b70f42; BYTE $0x3e // movzx eax, word [rsi + r15] + LONG $0xe86e0f66 // movd xmm5, eax + LONG $0x44b70f42; WORD $0x023e // movzx eax, word [rsi + r15 + 2] + LONG $0xc06e0f66 // movd xmm0, eax + LONG $0x44b70f42; WORD $0x043e // movzx eax, word [rsi + r15 + 4] + LONG $0xc86e0f66 // movd xmm1, eax + LONG $0x44b70f42; WORD $0x063e // movzx eax, word [rsi + r15 + 6] + LONG $0xf86e0f66 // movd xmm7, eax + LONG $0x44b70f42; WORD $0x083e // movzx eax, word [rsi + r15 + 8] + LONG $0x6e0f4466; BYTE $0xc0 // movd xmm8, eax + LONG $0x44b70f42; WORD $0x0a3e // movzx eax, word [rsi + r15 + 10] + LONG $0xe06e0f66 // movd xmm4, eax + LONG $0x44b70f42; WORD $0x0c3e // movzx eax, word [rsi + r15 + 12] + LONG $0x54b70f46; WORD $0x0e3e // movzx r10d, word [rsi + r15 + 14] + LONG $0x5cb70f46; WORD $0x103e // movzx r11d, word [rsi + r15 + 16] + LONG $0x54b70f42; WORD $0x123e // movzx edx, word [rsi + r15 + 18] + LONG $0x74b70f46; WORD $0x143e // movzx r14d, word [rsi + r15 + 20] + WORD $0x894c; BYTE $0xf9 // mov rcx, r15 + LONG $0x40c98348 // or rcx, 64 + LONG $0x80c88149; WORD $0x0000; BYTE $0x00 // or r8, 128 + LONG $0xc0cc8149; WORD $0x0000; BYTE $0x00 // or r12, 192 + LONG $0x00cd8149; WORD $0x0001; BYTE $0x00 // or r13, 256 + LONG $0x40cb8148; WORD $0x0001; BYTE $0x00 // or rbx, 320 + LONG $0x80cf8148; WORD $0x0001; BYTE $0x00 // or rdi, 384 + LONG $0x2cc40f66; WORD $0x010e // pinsrw xmm5, word [rsi + rcx], 1 + LONG $0xc40f4266; WORD $0x062c; BYTE $0x02 // pinsrw xmm5, word [rsi + r8], 2 + LONG $0xc40f4266; WORD $0x262c; BYTE $0x03 // pinsrw xmm5, word [rsi + r12], 3 + LONG $0xc40f4266; WORD $0x2e2c; BYTE $0x04 // pinsrw xmm5, word [rsi + r13], 4 + LONG $0x2cc40f66; WORD $0x051e // pinsrw xmm5, word [rsi + rbx], 5 + LONG $0x2cc40f66; WORD $0x063e // pinsrw xmm5, word [rsi + rdi], 6 + LONG $0x44c40f66; WORD $0x020e; BYTE $0x01 // pinsrw xmm0, word [rsi + rcx + 2], 1 + QUAD $0x02020644c40f4266 // pinsrw xmm0, word [rsi + r8 + 2], 2 + QUAD $0x03022644c40f4266 // pinsrw xmm0, word [rsi + r12 + 2], 3 + QUAD $0x04022e44c40f4266 // pinsrw xmm0, word [rsi + r13 + 2], 4 + LONG $0x44c40f66; WORD $0x021e; BYTE $0x05 // pinsrw xmm0, word [rsi + rbx + 2], 5 + LONG $0x44c40f66; WORD $0x023e; BYTE $0x06 // pinsrw xmm0, word [rsi + rdi + 2], 6 + LONG $0xc0c98149; WORD $0x0001; BYTE $0x00 // or r9, 448 + QUAD $0x07020e44c40f4266 // pinsrw xmm0, word [rsi + r9 + 2], 7 + LONG $0xd06e0f66 // movd xmm2, eax + LONG $0x44b70f42; WORD $0x163e // movzx eax, word [rsi + r15 + 22] + LONG $0x10244489 // mov dword [rsp + 16], eax + LONG $0x750f4166; BYTE $0xc3 // pcmpeqw xmm0, xmm11 + LONG $0x4cc40f66; WORD $0x040e; BYTE $0x01 // pinsrw xmm1, word [rsi + rcx + 4], 1 + QUAD $0x0204064cc40f4266 // pinsrw xmm1, word [rsi + r8 + 4], 2 + QUAD $0x0304264cc40f4266 // pinsrw xmm1, word [rsi + r12 + 4], 3 + QUAD $0x04042e4cc40f4266 // pinsrw xmm1, word [rsi + r13 + 4], 4 + LONG $0x4cc40f66; WORD $0x041e; BYTE $0x05 // pinsrw xmm1, word [rsi + rbx + 4], 5 + LONG $0x4cc40f66; WORD $0x043e; BYTE $0x06 // pinsrw xmm1, word [rsi + rdi + 4], 6 + QUAD $0x07040e4cc40f4266 // pinsrw xmm1, word [rsi + r9 + 4], 7 + LONG $0xc0630f66 // packsswb xmm0, xmm0 + LONG $0x750f4166; BYTE $0xcb // pcmpeqw xmm1, xmm11 + QUAD $0x0000808d6f0f4466; BYTE $0x00 // movdqa xmm9, oword 128[rbp] /* [rip + .LCPI4_8] */ + LONG $0x6f0f4166; BYTE $0xd9 // movdqa xmm3, xmm9 + LONG $0x380f4166; WORD $0xdf10 // pblendvb xmm3, xmm15, xmm0 + LONG $0xc9630f66 // packsswb xmm1, xmm1 + QUAD $0x00000090856f0f66 // movdqa xmm0, oword 144[rbp] /* [rip + .LCPI4_9] */ + LONG $0xf06f0f66 // movdqa xmm6, xmm0 + LONG $0x6f0f4466; BYTE $0xf0 // movdqa xmm14, xmm0 + LONG $0xc16f0f66 // movdqa xmm0, xmm1 + LONG $0x380f4166; WORD $0xf710 // pblendvb xmm6, xmm15, xmm0 + LONG $0x6e0f4166; BYTE $0xca // movd xmm1, r10d + LONG $0x54b70f46; WORD $0x183e // movzx r10d, word [rsi + r15 + 24] + LONG $0xc40f4266; WORD $0x0e2c; BYTE $0x07 // pinsrw xmm5, word [rsi + r9], 7 + LONG $0x750f4166; BYTE $0xeb // pcmpeqw xmm5, xmm11 + LONG $0xc0760f66 // pcmpeqd xmm0, xmm0 + LONG $0xe8ef0f66 // pxor xmm5, xmm0 + LONG $0xed630f66 // packsswb xmm5, xmm5 + LONG $0x7cc40f66; WORD $0x060e; BYTE $0x01 // pinsrw xmm7, word [rsi + rcx + 6], 1 + QUAD $0x0206067cc40f4266 // pinsrw xmm7, word [rsi + r8 + 6], 2 + QUAD $0x0306267cc40f4266 // pinsrw xmm7, word [rsi + r12 + 6], 3 + QUAD $0x04062e7cc40f4266 // pinsrw xmm7, word [rsi + r13 + 6], 4 + LONG $0x7cc40f66; WORD $0x061e; BYTE $0x05 // pinsrw xmm7, word [rsi + rbx + 6], 5 + LONG $0x7cc40f66; WORD $0x063e; BYTE $0x06 // pinsrw xmm7, word [rsi + rdi + 6], 6 + QUAD $0x07060e7cc40f4266 // pinsrw xmm7, word [rsi + r9 + 6], 7 + LONG $0x750f4166; BYTE $0xfb // pcmpeqw xmm7, xmm11 + LONG $0xff630f66 // packsswb xmm7, xmm7 + QUAD $0x01080e44c40f4466 // pinsrw xmm8, word [rsi + rcx + 8], 1 + QUAD $0x02080644c40f4666 // pinsrw xmm8, word [rsi + r8 + 8], 2 + QUAD $0x03082644c40f4666 // pinsrw xmm8, word [rsi + r12 + 8], 3 + QUAD $0x04082e44c40f4666 // pinsrw xmm8, word [rsi + r13 + 8], 4 + QUAD $0x05081e44c40f4466 // pinsrw xmm8, word [rsi + rbx + 8], 5 + QUAD $0x06083e44c40f4466 // pinsrw xmm8, word [rsi + rdi + 8], 6 + QUAD $0x07080e44c40f4666 // pinsrw xmm8, word [rsi + r9 + 8], 7 + LONG $0xddf80f66 // psubb xmm3, xmm5 + QUAD $0x0000a0a56f0f4466; BYTE $0x00 // movdqa xmm12, oword 160[rbp] /* [rip + .LCPI4_10] */ + LONG $0xc76f0f66 // movdqa xmm0, xmm7 + LONG $0x380f4566; WORD $0xe710 // pblendvb xmm12, xmm15, xmm0 + LONG $0x6e0f4166; BYTE $0xfb // movd xmm7, r11d + LONG $0x44b70f42; WORD $0x1a3e // movzx eax, word [rsi + r15 + 26] + LONG $0x750f4566; BYTE $0xc3 // pcmpeqw xmm8, xmm11 + LONG $0x630f4566; BYTE $0xc0 // packsswb xmm8, xmm8 + LONG $0xeb0f4466; BYTE $0xe6 // por xmm12, xmm6 + QUAD $0x0000b0ad6f0f4466; BYTE $0x00 // movdqa xmm13, oword 176[rbp] /* [rip + .LCPI4_11] */ + LONG $0x6f0f4166; BYTE $0xc0 // movdqa xmm0, xmm8 + LONG $0x380f4566; WORD $0xef10 // pblendvb xmm13, xmm15, xmm0 + LONG $0xf26e0f66 // movd xmm6, edx + LONG $0x5cb70f46; WORD $0x1c3e // movzx r11d, word [rsi + r15 + 28] + LONG $0x64c40f66; WORD $0x0a0e; BYTE $0x01 // pinsrw xmm4, word [rsi + rcx + 10], 1 + QUAD $0x020a0664c40f4266 // pinsrw xmm4, word [rsi + r8 + 10], 2 + QUAD $0x030a2664c40f4266 // pinsrw xmm4, word [rsi + r12 + 10], 3 + QUAD $0x040a2e64c40f4266 // pinsrw xmm4, word [rsi + r13 + 10], 4 + LONG $0x64c40f66; WORD $0x0a1e; BYTE $0x05 // pinsrw xmm4, word [rsi + rbx + 10], 5 + LONG $0x64c40f66; WORD $0x0a3e; BYTE $0x06 // pinsrw xmm4, word [rsi + rdi + 10], 6 + QUAD $0x070a0e64c40f4266 // pinsrw xmm4, word [rsi + r9 + 10], 7 + LONG $0x750f4166; BYTE $0xe3 // pcmpeqw xmm4, xmm11 + LONG $0xe4630f66 // packsswb xmm4, xmm4 + LONG $0x54c40f66; WORD $0x0c0e; BYTE $0x01 // pinsrw xmm2, word [rsi + rcx + 12], 1 + QUAD $0x020c0654c40f4266 // pinsrw xmm2, word [rsi + r8 + 12], 2 + QUAD $0x030c2654c40f4266 // pinsrw xmm2, word [rsi + r12 + 12], 3 + QUAD $0x040c2e54c40f4266 // pinsrw xmm2, word [rsi + r13 + 12], 4 + LONG $0x54c40f66; WORD $0x0c1e; BYTE $0x05 // pinsrw xmm2, word [rsi + rbx + 12], 5 + LONG $0x54c40f66; WORD $0x0c3e; BYTE $0x06 // pinsrw xmm2, word [rsi + rdi + 12], 6 + LONG $0xeb0f4466; BYTE $0xe3 // por xmm12, xmm3 + QUAD $0x000000c0ad6f0f66 // movdqa xmm5, oword 192[rbp] /* [rip + .LCPI4_12] */ + LONG $0xc46f0f66 // movdqa xmm0, xmm4 + LONG $0x380f4166; WORD $0xef10 // pblendvb xmm5, xmm15, xmm0 + LONG $0x6e0f4166; BYTE $0xe6 // movd xmm4, r14d + LONG $0x54b70f42; WORD $0x1e3e // movzx edx, word [rsi + r15 + 30] + LONG $0x30245489 // mov dword [rsp + 48], edx + QUAD $0x070c0e54c40f4266 // pinsrw xmm2, word [rsi + r9 + 12], 7 + LONG $0x750f4166; BYTE $0xd3 // pcmpeqw xmm2, xmm11 + LONG $0xd2630f66 // packsswb xmm2, xmm2 + LONG $0xeb0f4166; BYTE $0xed // por xmm5, xmm13 + QUAD $0x0000d0ad6f0f4466; BYTE $0x00 // movdqa xmm13, oword 208[rbp] /* [rip + .LCPI4_13] */ + LONG $0xc26f0f66 // movdqa xmm0, xmm2 + LONG $0x380f4566; WORD $0xef10 // pblendvb xmm13, xmm15, xmm0 + LONG $0x5c6e0f66; WORD $0x1024 // movd xmm3, dword [rsp + 16] + LONG $0x54b70f42; WORD $0x203e // movzx edx, word [rsi + r15 + 32] + LONG $0x28245489 // mov dword [rsp + 40], edx + LONG $0x4cc40f66; WORD $0x0e0e; BYTE $0x01 // pinsrw xmm1, word [rsi + rcx + 14], 1 + QUAD $0x020e064cc40f4266 // pinsrw xmm1, word [rsi + r8 + 14], 2 + QUAD $0x030e264cc40f4266 // pinsrw xmm1, word [rsi + r12 + 14], 3 + QUAD $0x040e2e4cc40f4266 // pinsrw xmm1, word [rsi + r13 + 14], 4 + LONG $0x4cc40f66; WORD $0x0e1e; BYTE $0x05 // pinsrw xmm1, word [rsi + rbx + 14], 5 + LONG $0x4cc40f66; WORD $0x0e3e; BYTE $0x06 // pinsrw xmm1, word [rsi + rdi + 14], 6 + LONG $0xeb0f4466; BYTE $0xed // por xmm13, xmm5 + LONG $0x6e0f4166; BYTE $0xd2 // movd xmm2, r10d + LONG $0x54b70f42; WORD $0x223e // movzx edx, word [rsi + r15 + 34] + LONG $0x10245489 // mov dword [rsp + 16], edx + QUAD $0x070e0e4cc40f4266 // pinsrw xmm1, word [rsi + r9 + 14], 7 + LONG $0x750f4166; BYTE $0xcb // pcmpeqw xmm1, xmm11 + LONG $0x74c40f66; WORD $0x120e; BYTE $0x01 // pinsrw xmm6, word [rsi + rcx + 18], 1 + QUAD $0x02120674c40f4266 // pinsrw xmm6, word [rsi + r8 + 18], 2 + QUAD $0x03122674c40f4266 // pinsrw xmm6, word [rsi + r12 + 18], 3 + QUAD $0x04122e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 18], 4 + LONG $0x74c40f66; WORD $0x121e; BYTE $0x05 // pinsrw xmm6, word [rsi + rbx + 18], 5 + LONG $0x74c40f66; WORD $0x123e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 18], 6 + LONG $0xc9630f66 // packsswb xmm1, xmm1 + QUAD $0x07120e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 18], 7 + LONG $0x750f4166; BYTE $0xf3 // pcmpeqw xmm6, xmm11 + LONG $0xf6630f66 // packsswb xmm6, xmm6 + LONG $0xeb0f4566; BYTE $0xec // por xmm13, xmm12 + QUAD $0x0000e0a56f0f4466; BYTE $0x00 // movdqa xmm12, oword 224[rbp] /* [rip + .LCPI4_14] */ + LONG $0xc16f0f66 // movdqa xmm0, xmm1 + LONG $0x380f4566; WORD $0xe710 // pblendvb xmm12, xmm15, xmm0 + LONG $0x6f0f4566; BYTE $0xc1 // movdqa xmm8, xmm9 + LONG $0xc66f0f66 // movdqa xmm0, xmm6 + LONG $0x380f4566; WORD $0xc710 // pblendvb xmm8, xmm15, xmm0 + LONG $0xc86e0f66 // movd xmm1, eax + LONG $0x74b70f46; WORD $0x243e // movzx r14d, word [rsi + r15 + 36] + LONG $0x7cc40f66; WORD $0x100e; BYTE $0x01 // pinsrw xmm7, word [rsi + rcx + 16], 1 + QUAD $0x0210067cc40f4266 // pinsrw xmm7, word [rsi + r8 + 16], 2 + QUAD $0x0310267cc40f4266 // pinsrw xmm7, word [rsi + r12 + 16], 3 + QUAD $0x04102e7cc40f4266 // pinsrw xmm7, word [rsi + r13 + 16], 4 + LONG $0x7cc40f66; WORD $0x101e; BYTE $0x05 // pinsrw xmm7, word [rsi + rbx + 16], 5 + LONG $0x7cc40f66; WORD $0x103e; BYTE $0x06 // pinsrw xmm7, word [rsi + rdi + 16], 6 + LONG $0x64c40f66; WORD $0x140e; BYTE $0x01 // pinsrw xmm4, word [rsi + rcx + 20], 1 + QUAD $0x02140664c40f4266 // pinsrw xmm4, word [rsi + r8 + 20], 2 + QUAD $0x03142664c40f4266 // pinsrw xmm4, word [rsi + r12 + 20], 3 + QUAD $0x04142e64c40f4266 // pinsrw xmm4, word [rsi + r13 + 20], 4 + LONG $0x64c40f66; WORD $0x141e; BYTE $0x05 // pinsrw xmm4, word [rsi + rbx + 20], 5 + LONG $0x64c40f66; WORD $0x143e; BYTE $0x06 // pinsrw xmm4, word [rsi + rdi + 20], 6 + QUAD $0x07140e64c40f4266 // pinsrw xmm4, word [rsi + r9 + 20], 7 + LONG $0x750f4166; BYTE $0xe3 // pcmpeqw xmm4, xmm11 + LONG $0xe4630f66 // packsswb xmm4, xmm4 + LONG $0xeb0f4566; BYTE $0xe5 // por xmm12, xmm13 + LONG $0x6f0f4166; BYTE $0xee // movdqa xmm5, xmm14 + LONG $0xc46f0f66 // movdqa xmm0, xmm4 + LONG $0x380f4166; WORD $0xef10 // pblendvb xmm5, xmm15, xmm0 + LONG $0x6e0f4166; BYTE $0xe3 // movd xmm4, r11d + LONG $0x5cb70f46; WORD $0x263e // movzx r11d, word [rsi + r15 + 38] + QUAD $0x07100e7cc40f4266 // pinsrw xmm7, word [rsi + r9 + 16], 7 + LONG $0x750f4166; BYTE $0xfb // pcmpeqw xmm7, xmm11 + QUAD $0x00000160bdef0f66 // pxor xmm7, oword 352[rbp] /* [rip + .LCPI4_22] */ + LONG $0xff630f66 // packsswb xmm7, xmm7 + LONG $0x5cc40f66; WORD $0x160e; BYTE $0x01 // pinsrw xmm3, word [rsi + rcx + 22], 1 + QUAD $0x0216065cc40f4266 // pinsrw xmm3, word [rsi + r8 + 22], 2 + QUAD $0x0316265cc40f4266 // pinsrw xmm3, word [rsi + r12 + 22], 3 + QUAD $0x04162e5cc40f4266 // pinsrw xmm3, word [rsi + r13 + 22], 4 + LONG $0x5cc40f66; WORD $0x161e; BYTE $0x05 // pinsrw xmm3, word [rsi + rbx + 22], 5 + LONG $0x5cc40f66; WORD $0x163e; BYTE $0x06 // pinsrw xmm3, word [rsi + rdi + 22], 6 + QUAD $0x07160e5cc40f4266 // pinsrw xmm3, word [rsi + r9 + 22], 7 + LONG $0x750f4166; BYTE $0xdb // pcmpeqw xmm3, xmm11 + LONG $0xdb630f66 // packsswb xmm3, xmm3 + LONG $0x54c40f66; WORD $0x180e; BYTE $0x01 // pinsrw xmm2, word [rsi + rcx + 24], 1 + QUAD $0x02180654c40f4266 // pinsrw xmm2, word [rsi + r8 + 24], 2 + QUAD $0x03182654c40f4266 // pinsrw xmm2, word [rsi + r12 + 24], 3 + QUAD $0x04182e54c40f4266 // pinsrw xmm2, word [rsi + r13 + 24], 4 + LONG $0x54c40f66; WORD $0x181e; BYTE $0x05 // pinsrw xmm2, word [rsi + rbx + 24], 5 + LONG $0x54c40f66; WORD $0x183e; BYTE $0x06 // pinsrw xmm2, word [rsi + rdi + 24], 6 + QUAD $0x07180e54c40f4266 // pinsrw xmm2, word [rsi + r9 + 24], 7 + LONG $0xf80f4466; BYTE $0xc7 // psubb xmm8, xmm7 + QUAD $0x0000a0956f0f4466; BYTE $0x00 // movdqa xmm10, oword 160[rbp] /* [rip + .LCPI4_10] */ + LONG $0x6f0f4566; BYTE $0xf2 // movdqa xmm14, xmm10 + LONG $0xc36f0f66 // movdqa xmm0, xmm3 + LONG $0x380f4566; WORD $0xf710 // pblendvb xmm14, xmm15, xmm0 + LONG $0x5c6e0f66; WORD $0x3024 // movd xmm3, dword [rsp + 48] + LONG $0x44b70f42; WORD $0x283e // movzx eax, word [rsi + r15 + 40] + LONG $0x750f4166; BYTE $0xd3 // pcmpeqw xmm2, xmm11 + LONG $0xd2630f66 // packsswb xmm2, xmm2 + LONG $0xeb0f4466; BYTE $0xf5 // por xmm14, xmm5 + QUAD $0x0000b08d6f0f4466; BYTE $0x00 // movdqa xmm9, oword 176[rbp] /* [rip + .LCPI4_11] */ + LONG $0x6f0f4566; BYTE $0xe9 // movdqa xmm13, xmm9 + LONG $0xc26f0f66 // movdqa xmm0, xmm2 + LONG $0x380f4566; WORD $0xef10 // pblendvb xmm13, xmm15, xmm0 + LONG $0x7c6e0f66; WORD $0x2824 // movd xmm7, dword [rsp + 40] + LONG $0x54b70f46; WORD $0x2a3e // movzx r10d, word [rsi + r15 + 42] + LONG $0x4cc40f66; WORD $0x1a0e; BYTE $0x01 // pinsrw xmm1, word [rsi + rcx + 26], 1 + QUAD $0x021a064cc40f4266 // pinsrw xmm1, word [rsi + r8 + 26], 2 + QUAD $0x031a264cc40f4266 // pinsrw xmm1, word [rsi + r12 + 26], 3 + QUAD $0x041a2e4cc40f4266 // pinsrw xmm1, word [rsi + r13 + 26], 4 + LONG $0x4cc40f66; WORD $0x1a1e; BYTE $0x05 // pinsrw xmm1, word [rsi + rbx + 26], 5 + LONG $0x4cc40f66; WORD $0x1a3e; BYTE $0x06 // pinsrw xmm1, word [rsi + rdi + 26], 6 + QUAD $0x071a0e4cc40f4266 // pinsrw xmm1, word [rsi + r9 + 26], 7 + LONG $0x750f4166; BYTE $0xcb // pcmpeqw xmm1, xmm11 + LONG $0xc9630f66 // packsswb xmm1, xmm1 + LONG $0x64c40f66; WORD $0x1c0e; BYTE $0x01 // pinsrw xmm4, word [rsi + rcx + 28], 1 + QUAD $0x021c0664c40f4266 // pinsrw xmm4, word [rsi + r8 + 28], 2 QUAD $0x031c2664c40f4266 // pinsrw xmm4, word [rsi + r12 + 28], 3 QUAD $0x041c2e64c40f4266 // pinsrw xmm4, word [rsi + r13 + 28], 4 LONG $0x64c40f66; WORD $0x1c1e; BYTE $0x05 // pinsrw xmm4, word [rsi + rbx + 28], 5 @@ -23239,7 +24670,7 @@ LBB4_190: LONG $0x380f4166; WORD $0xef10 // pblendvb xmm5, xmm15, xmm0 LONG $0x546e0f66; WORD $0x1024 // movd xmm2, dword [rsp + 16] LONG $0x54b70f42; WORD $0x2c3e // movzx edx, word [rsi + r15 + 44] - LONG $0x20245489 // mov dword [rsp + 32], edx + LONG $0x28245489 // mov dword [rsp + 40], edx QUAD $0x071c0e64c40f4266 // pinsrw xmm4, word [rsi + r9 + 28], 7 LONG $0x750f4166; BYTE $0xe3 // pcmpeqw xmm4, xmm11 LONG $0xe4630f66 // packsswb xmm4, xmm4 @@ -23326,7 +24757,7 @@ LBB4_190: LONG $0x6f0f4166; BYTE $0xea // movdqa xmm5, xmm10 LONG $0xc16f0f66 // movdqa xmm0, xmm1 LONG $0x380f4166; WORD $0xef10 // pblendvb xmm5, xmm15, xmm0 - LONG $0x4c6e0f66; WORD $0x2024 // movd xmm1, dword [rsp + 32] + LONG $0x4c6e0f66; WORD $0x2824 // movd xmm1, dword [rsp + 40] LONG $0x54b70f46; WORD $0x363e // movzx r10d, word [rsi + r15 + 54] LONG $0x750f4166; BYTE $0xd3 // pcmpeqw xmm2, xmm11 LONG $0xd2630f66 // packsswb xmm2, xmm2 @@ -23479,7 +24910,7 @@ LBB4_190: LONG $0x44c40f66; WORD $0x3e0e; BYTE $0x01 // pinsrw xmm0, word [rsi + rcx + 62], 1 QUAD $0x023e0644c40f4266 // pinsrw xmm0, word [rsi + r8 + 62], 2 QUAD $0x033e2644c40f4266 // pinsrw xmm0, word [rsi + r12 + 62], 3 - QUAD $0x0000008024b48b4c // mov r14, qword [rsp + 128] + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x043e2e44c40f4266 // pinsrw xmm0, word [rsi + r13 + 62], 4 LONG $0x44c40f66; WORD $0x3e1e; BYTE $0x05 // pinsrw xmm0, word [rsi + rbx + 62], 5 LONG $0x44c40f66; WORD $0x3e3e; BYTE $0x06 // pinsrw xmm0, word [rsi + rdi + 62], 6 @@ -23500,391 +24931,21 @@ LBB4_190: LONG $0x600f4566; BYTE $0xc6 // punpcklbw xmm8, xmm14 LONG $0x600f4566; BYTE $0xe5 // punpcklbw xmm12, xmm13 LONG $0x610f4566; BYTE $0xe0 // punpcklwd xmm12, xmm8 - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] - LONG $0x7f0f45f3; WORD $0x8e24 // movdqu oword [r14 + 4*rcx], xmm12 - LONG $0x7f0f41f3; WORD $0x8e44; BYTE $0x10 // movdqu oword [r14 + 4*rcx + 16], xmm0 + LONG $0x244c8b48; BYTE $0x18 // mov rcx, qword [rsp + 24] + LONG $0x7f0f44f3; WORD $0x8824 // movdqu oword [rax + 4*rcx], xmm12 + LONG $0x447f0ff3; WORD $0x1088 // movdqu oword [rax + 4*rcx + 16], xmm0 LONG $0x08c18348 // add rcx, 8 WORD $0x8949; BYTE $0xcf // mov r15, rcx - LONG $0x244c3b48; BYTE $0x18 // cmp rcx, qword [rsp + 24] - JNE LBB4_190 - QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] - LONG $0x24543b4c; BYTE $0x18 // cmp r10, qword [rsp + 24] - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] + LONG $0x244c3b48; BYTE $0x20 // cmp rcx, qword [rsp + 32] + JNE LBB4_192 + QUAD $0x000000c024948b4c // mov r10, qword [rsp + 192] + LONG $0x24543b4c; BYTE $0x20 // cmp r10, qword [rsp + 32] + QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] LONG $0x246c8b44; BYTE $0x40 // mov r13d, dword [rsp + 64] LONG $0x24648b4c; BYTE $0x08 // mov r12, qword [rsp + 8] LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] - JNE LBB4_104 - JMP LBB4_144 - -LBB4_192: - WORD $0x894d; BYTE $0xd0 // mov r8, r10 - LONG $0xfce08349 // and r8, -4 - WORD $0x894c; BYTE $0xc3 // mov rbx, r8 - LONG $0x07e3c148 // shl rbx, 7 - WORD $0x0148; BYTE $0xf3 // add rbx, rsi - LONG $0x861c8d4f // lea r11, [r14 + 4*r8] - WORD $0x280f; BYTE $0xc8 // movaps xmm1, xmm0 - LONG $0x00c8c60f // shufps xmm1, xmm0, 0 - LONG $0xfcc68148; WORD $0x0001; BYTE $0x00 // add rsi, 508 - WORD $0xc931 // xor ecx, ecx - LONG $0x6f0f4466; WORD $0x007d // movdqa xmm15, oword 0[rbp] /* [rip + .LCPI4_0] */ - LONG $0x6f0f4466; WORD $0x1045 // movdqa xmm8, oword 16[rbp] /* [rip + .LCPI4_1] */ - LONG $0x6f0f4466; WORD $0x2055 // movdqa xmm10, oword 32[rbp] /* [rip + .LCPI4_2] */ - LONG $0x6f0f4466; WORD $0x305d // movdqa xmm11, oword 48[rbp] /* [rip + .LCPI4_3] */ - LONG $0x6f0f4466; WORD $0x4065 // movdqa xmm12, oword 64[rbp] /* [rip + .LCPI4_4] */ - LONG $0x6f0f4466; WORD $0x506d // movdqa xmm13, oword 80[rbp] /* [rip + .LCPI4_5] */ - LONG $0x6f0f4466; WORD $0x6075 // movdqa xmm14, oword 96[rbp] /* [rip + .LCPI4_6] */ - LONG $0x6f0f4466; WORD $0x704d // movdqa xmm9, oword 112[rbp] /* [rip + .LCPI4_7] */ - -LBB4_193: - QUAD $0xfffffe04b6100ff3 // movss xmm6, dword [rsi - 508] - QUAD $0xfffffe08be100ff3 // movss xmm7, dword [rsi - 504] - QUAD $0xfffffe0cae100ff3 // movss xmm5, dword [rsi - 500] - QUAD $0xfffffe10a6100ff3 // movss xmm4, dword [rsi - 496] - QUAD $0xfffe84b6213a0f66; WORD $0x10ff // insertps xmm6, dword [rsi - 380], 16 - QUAD $0xffff04b6213a0f66; WORD $0x20ff // insertps xmm6, dword [rsi - 252], 32 - LONG $0x213a0f66; WORD $0x8476; BYTE $0x30 // insertps xmm6, dword [rsi - 124], 48 - LONG $0x04f1c20f // cmpneqps xmm6, xmm1 - LONG $0xf66b0f66 // packssdw xmm6, xmm6 - LONG $0xf6630f66 // packsswb xmm6, xmm6 - LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 - QUAD $0xfffe88be213a0f66; WORD $0x10ff // insertps xmm7, dword [rsi - 376], 16 - QUAD $0xffff08be213a0f66; WORD $0x20ff // insertps xmm7, dword [rsi - 248], 32 - LONG $0x213a0f66; WORD $0x887e; BYTE $0x30 // insertps xmm7, dword [rsi - 120], 48 - QUAD $0xfffe8cae213a0f66; WORD $0x10ff // insertps xmm5, dword [rsi - 372], 16 - QUAD $0xffff0cae213a0f66; WORD $0x20ff // insertps xmm5, dword [rsi - 244], 32 - LONG $0x213a0f66; WORD $0x8c6e; BYTE $0x30 // insertps xmm5, dword [rsi - 116], 48 - QUAD $0xfffe90a6213a0f66; WORD $0x10ff // insertps xmm4, dword [rsi - 368], 16 - QUAD $0xffff10a6213a0f66; WORD $0x20ff // insertps xmm4, dword [rsi - 240], 32 - LONG $0x213a0f66; WORD $0x9066; BYTE $0x30 // insertps xmm4, dword [rsi - 112], 48 - LONG $0x04f9c20f // cmpneqps xmm7, xmm1 - LONG $0xff6b0f66 // packssdw xmm7, xmm7 - LONG $0xff630f66 // packsswb xmm7, xmm7 - LONG $0xd76f0f66 // movdqa xmm2, xmm7 - LONG $0xdb0f4166; BYTE $0xd7 // pand xmm2, xmm15 - LONG $0xd7f80f66 // psubb xmm2, xmm7 - QUAD $0xfffffe14be100ff3 // movss xmm7, dword [rsi - 492] - QUAD $0xfffe94be213a0f66; WORD $0x10ff // insertps xmm7, dword [rsi - 364], 16 - QUAD $0xffff14be213a0f66; WORD $0x20ff // insertps xmm7, dword [rsi - 236], 32 - LONG $0x213a0f66; WORD $0x947e; BYTE $0x30 // insertps xmm7, dword [rsi - 108], 48 - LONG $0xd6eb0f66 // por xmm2, xmm6 - QUAD $0xfffffe18b6100ff3 // movss xmm6, dword [rsi - 488] - QUAD $0xfffe98b6213a0f66; WORD $0x10ff // insertps xmm6, dword [rsi - 360], 16 - QUAD $0xffff18b6213a0f66; WORD $0x20ff // insertps xmm6, dword [rsi - 232], 32 - LONG $0x213a0f66; WORD $0x9876; BYTE $0x30 // insertps xmm6, dword [rsi - 104], 48 - LONG $0x04e9c20f // cmpneqps xmm5, xmm1 - LONG $0xed6b0f66 // packssdw xmm5, xmm5 - LONG $0xed630f66 // packsswb xmm5, xmm5 - LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 - LONG $0xf5710f66; BYTE $0x02 // psllw xmm5, 2 - LONG $0xdb0f4166; BYTE $0xe8 // pand xmm5, xmm8 - LONG $0xeaeb0f66 // por xmm5, xmm2 - QUAD $0xfffffe1c9e100ff3 // movss xmm3, dword [rsi - 484] - QUAD $0xfffe9c9e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 356], 16 - QUAD $0xffff1c9e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 228], 32 - LONG $0x213a0f66; WORD $0x9c5e; BYTE $0x30 // insertps xmm3, dword [rsi - 100], 48 - LONG $0x04e1c20f // cmpneqps xmm4, xmm1 - LONG $0xe46b0f66 // packssdw xmm4, xmm4 - LONG $0xe4630f66 // packsswb xmm4, xmm4 - LONG $0xdb0f4166; BYTE $0xe7 // pand xmm4, xmm15 - LONG $0xf4710f66; BYTE $0x03 // psllw xmm4, 3 - LONG $0xdb0f4166; BYTE $0xe2 // pand xmm4, xmm10 - LONG $0x04f9c20f // cmpneqps xmm7, xmm1 - LONG $0xff6b0f66 // packssdw xmm7, xmm7 - LONG $0xff630f66 // packsswb xmm7, xmm7 - LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 - LONG $0xf7710f66; BYTE $0x04 // psllw xmm7, 4 - LONG $0xdb0f4166; BYTE $0xfb // pand xmm7, xmm11 - LONG $0xfceb0f66 // por xmm7, xmm4 - QUAD $0xfffffe20a6100ff3 // movss xmm4, dword [rsi - 480] - QUAD $0xfffea0a6213a0f66; WORD $0x10ff // insertps xmm4, dword [rsi - 352], 16 - QUAD $0xffff20a6213a0f66; WORD $0x20ff // insertps xmm4, dword [rsi - 224], 32 - LONG $0x213a0f66; WORD $0xa066; BYTE $0x30 // insertps xmm4, dword [rsi - 96], 48 - LONG $0xfdeb0f66 // por xmm7, xmm5 - QUAD $0xfffffe24ae100ff3 // movss xmm5, dword [rsi - 476] - QUAD $0xfffea4ae213a0f66; WORD $0x10ff // insertps xmm5, dword [rsi - 348], 16 - QUAD $0xffff24ae213a0f66; WORD $0x20ff // insertps xmm5, dword [rsi - 220], 32 - LONG $0x213a0f66; WORD $0xa46e; BYTE $0x30 // insertps xmm5, dword [rsi - 92], 48 - LONG $0x04e9c20f // cmpneqps xmm5, xmm1 - LONG $0xed6b0f66 // packssdw xmm5, xmm5 - LONG $0x04f1c20f // cmpneqps xmm6, xmm1 - LONG $0xf66b0f66 // packssdw xmm6, xmm6 - LONG $0xf6630f66 // packsswb xmm6, xmm6 - LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 - LONG $0xf6710f66; BYTE $0x05 // psllw xmm6, 5 - LONG $0xdb0f4166; BYTE $0xf4 // pand xmm6, xmm12 - LONG $0x04d9c20f // cmpneqps xmm3, xmm1 - LONG $0xdb6b0f66 // packssdw xmm3, xmm3 - LONG $0xdb630f66 // packsswb xmm3, xmm3 - LONG $0xdb0f4166; BYTE $0xdf // pand xmm3, xmm15 - LONG $0xf3710f66; BYTE $0x06 // psllw xmm3, 6 - LONG $0xdb0f4166; BYTE $0xdd // pand xmm3, xmm13 - LONG $0xdeeb0f66 // por xmm3, xmm6 - QUAD $0xfffffe2896100ff3 // movss xmm2, dword [rsi - 472] - QUAD $0xfffea896213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 344], 16 - QUAD $0xffff2896213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 216], 32 - LONG $0x213a0f66; WORD $0xa856; BYTE $0x30 // insertps xmm2, dword [rsi - 88], 48 - LONG $0xed630f66 // packsswb xmm5, xmm5 - LONG $0x04e1c20f // cmpneqps xmm4, xmm1 - LONG $0xe46b0f66 // packssdw xmm4, xmm4 - LONG $0xe4630f66 // packsswb xmm4, xmm4 - LONG $0xf4710f66; BYTE $0x07 // psllw xmm4, 7 - LONG $0xdb0f4166; BYTE $0xe6 // pand xmm4, xmm14 - LONG $0xe3eb0f66 // por xmm4, xmm3 - QUAD $0xfffffe2c9e100ff3 // movss xmm3, dword [rsi - 468] - QUAD $0xfffeac9e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 340], 16 - QUAD $0xffff2c9e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 212], 32 - LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 - LONG $0x213a0f66; WORD $0xac5e; BYTE $0x30 // insertps xmm3, dword [rsi - 84], 48 - LONG $0xe7eb0f66 // por xmm4, xmm7 - LONG $0x04d1c20f // cmpneqps xmm2, xmm1 - LONG $0xd26b0f66 // packssdw xmm2, xmm2 - LONG $0xd2630f66 // packsswb xmm2, xmm2 - LONG $0xf26f0f66 // movdqa xmm6, xmm2 - LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 - LONG $0xf2f80f66 // psubb xmm6, xmm2 - QUAD $0xfffffe30be100ff3 // movss xmm7, dword [rsi - 464] - QUAD $0xfffeb0be213a0f66; WORD $0x10ff // insertps xmm7, dword [rsi - 336], 16 - QUAD $0xffff30be213a0f66; WORD $0x20ff // insertps xmm7, dword [rsi - 208], 32 - LONG $0x213a0f66; WORD $0xb07e; BYTE $0x30 // insertps xmm7, dword [rsi - 80], 48 - LONG $0xf5eb0f66 // por xmm6, xmm5 - QUAD $0xfffffe34ae100ff3 // movss xmm5, dword [rsi - 460] - QUAD $0xfffeb4ae213a0f66; WORD $0x10ff // insertps xmm5, dword [rsi - 332], 16 - QUAD $0xffff34ae213a0f66; WORD $0x20ff // insertps xmm5, dword [rsi - 204], 32 - LONG $0x213a0f66; WORD $0xb46e; BYTE $0x30 // insertps xmm5, dword [rsi - 76], 48 - LONG $0x04d9c20f // cmpneqps xmm3, xmm1 - LONG $0xdb6b0f66 // packssdw xmm3, xmm3 - LONG $0xdb630f66 // packsswb xmm3, xmm3 - LONG $0xdb0f4166; BYTE $0xdf // pand xmm3, xmm15 - LONG $0xf3710f66; BYTE $0x02 // psllw xmm3, 2 - LONG $0xdb0f4166; BYTE $0xd8 // pand xmm3, xmm8 - LONG $0xdeeb0f66 // por xmm3, xmm6 - QUAD $0xfffffe38b6100ff3 // movss xmm6, dword [rsi - 456] - QUAD $0xfffeb8b6213a0f66; WORD $0x10ff // insertps xmm6, dword [rsi - 328], 16 - QUAD $0xffff38b6213a0f66; WORD $0x20ff // insertps xmm6, dword [rsi - 200], 32 - LONG $0x213a0f66; WORD $0xb876; BYTE $0x30 // insertps xmm6, dword [rsi - 72], 48 - LONG $0x04f9c20f // cmpneqps xmm7, xmm1 - LONG $0xff6b0f66 // packssdw xmm7, xmm7 - LONG $0xff630f66 // packsswb xmm7, xmm7 - LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 - LONG $0xf7710f66; BYTE $0x03 // psllw xmm7, 3 - LONG $0xdb0f4166; BYTE $0xfa // pand xmm7, xmm10 - LONG $0x04e9c20f // cmpneqps xmm5, xmm1 - LONG $0xed6b0f66 // packssdw xmm5, xmm5 - LONG $0xed630f66 // packsswb xmm5, xmm5 - LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 - LONG $0xf5710f66; BYTE $0x04 // psllw xmm5, 4 - LONG $0xdb0f4166; BYTE $0xeb // pand xmm5, xmm11 - LONG $0xefeb0f66 // por xmm5, xmm7 - QUAD $0xfffffe3c96100ff3 // movss xmm2, dword [rsi - 452] - QUAD $0xfffebc96213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 324], 16 - QUAD $0xffff3c96213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 196], 32 - LONG $0x213a0f66; WORD $0xbc56; BYTE $0x30 // insertps xmm2, dword [rsi - 68], 48 - LONG $0xebeb0f66 // por xmm5, xmm3 - QUAD $0xfffffe40be100ff3 // movss xmm7, dword [rsi - 448] - QUAD $0xfffec0be213a0f66; WORD $0x10ff // insertps xmm7, dword [rsi - 320], 16 - QUAD $0xffff40be213a0f66; WORD $0x20ff // insertps xmm7, dword [rsi - 192], 32 - LONG $0x213a0f66; WORD $0xc07e; BYTE $0x30 // insertps xmm7, dword [rsi - 64], 48 - LONG $0x04f1c20f // cmpneqps xmm6, xmm1 - LONG $0xf66b0f66 // packssdw xmm6, xmm6 - LONG $0xf6630f66 // packsswb xmm6, xmm6 - LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 - LONG $0xf6710f66; BYTE $0x05 // psllw xmm6, 5 - LONG $0xdb0f4166; BYTE $0xf4 // pand xmm6, xmm12 - LONG $0x04d1c20f // cmpneqps xmm2, xmm1 - LONG $0xd26b0f66 // packssdw xmm2, xmm2 - LONG $0xd2630f66 // packsswb xmm2, xmm2 - LONG $0xdb0f4166; BYTE $0xd7 // pand xmm2, xmm15 - LONG $0xf2710f66; BYTE $0x06 // psllw xmm2, 6 - LONG $0xdb0f4166; BYTE $0xd5 // pand xmm2, xmm13 - LONG $0xd6eb0f66 // por xmm2, xmm6 - QUAD $0xfffffe44b6100ff3 // movss xmm6, dword [rsi - 444] - QUAD $0xfffec4b6213a0f66; WORD $0x10ff // insertps xmm6, dword [rsi - 316], 16 - QUAD $0xffff44b6213a0f66; WORD $0x20ff // insertps xmm6, dword [rsi - 188], 32 - LONG $0x213a0f66; WORD $0xc476; BYTE $0x30 // insertps xmm6, dword [rsi - 60], 48 - LONG $0x04f1c20f // cmpneqps xmm6, xmm1 - LONG $0xf66b0f66 // packssdw xmm6, xmm6 - LONG $0xf6630f66 // packsswb xmm6, xmm6 - LONG $0x04f9c20f // cmpneqps xmm7, xmm1 - LONG $0xff6b0f66 // packssdw xmm7, xmm7 - LONG $0xff630f66 // packsswb xmm7, xmm7 - LONG $0xf7710f66; BYTE $0x07 // psllw xmm7, 7 - LONG $0xdb0f4166; BYTE $0xfe // pand xmm7, xmm14 - LONG $0xfaeb0f66 // por xmm7, xmm2 - QUAD $0xfffffe4896100ff3 // movss xmm2, dword [rsi - 440] - QUAD $0xfffec896213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 312], 16 - QUAD $0xffff4896213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 184], 32 - LONG $0x213a0f66; WORD $0xc856; BYTE $0x30 // insertps xmm2, dword [rsi - 56], 48 - LONG $0xfdeb0f66 // por xmm7, xmm5 - QUAD $0xfffffe4c9e100ff3 // movss xmm3, dword [rsi - 436] - QUAD $0xfffecc9e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 308], 16 - QUAD $0xffff4c9e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 180], 32 - LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 - LONG $0x213a0f66; WORD $0xcc5e; BYTE $0x30 // insertps xmm3, dword [rsi - 52], 48 - LONG $0xe7620f66 // punpckldq xmm4, xmm7 - LONG $0x04d1c20f // cmpneqps xmm2, xmm1 - LONG $0xd26b0f66 // packssdw xmm2, xmm2 - LONG $0xd2630f66 // packsswb xmm2, xmm2 - LONG $0xfa6f0f66 // movdqa xmm7, xmm2 - LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 - LONG $0xfaf80f66 // psubb xmm7, xmm2 - QUAD $0xfffffe50ae100ff3 // movss xmm5, dword [rsi - 432] - QUAD $0xfffed0ae213a0f66; WORD $0x10ff // insertps xmm5, dword [rsi - 304], 16 - QUAD $0xffff50ae213a0f66; WORD $0x20ff // insertps xmm5, dword [rsi - 176], 32 - LONG $0x213a0f66; WORD $0xd06e; BYTE $0x30 // insertps xmm5, dword [rsi - 48], 48 - LONG $0xfeeb0f66 // por xmm7, xmm6 - QUAD $0xfffffe54b6100ff3 // movss xmm6, dword [rsi - 428] - QUAD $0xfffed4b6213a0f66; WORD $0x10ff // insertps xmm6, dword [rsi - 300], 16 - QUAD $0xffff54b6213a0f66; WORD $0x20ff // insertps xmm6, dword [rsi - 172], 32 - LONG $0x213a0f66; WORD $0xd476; BYTE $0x30 // insertps xmm6, dword [rsi - 44], 48 - LONG $0x04d9c20f // cmpneqps xmm3, xmm1 - LONG $0xdb6b0f66 // packssdw xmm3, xmm3 - LONG $0xdb630f66 // packsswb xmm3, xmm3 - LONG $0xdb0f4166; BYTE $0xdf // pand xmm3, xmm15 - LONG $0xf3710f66; BYTE $0x02 // psllw xmm3, 2 - LONG $0xdb0f4166; BYTE $0xd8 // pand xmm3, xmm8 - LONG $0xdfeb0f66 // por xmm3, xmm7 - QUAD $0xfffffe58be100ff3 // movss xmm7, dword [rsi - 424] - QUAD $0xfffed8be213a0f66; WORD $0x10ff // insertps xmm7, dword [rsi - 296], 16 - QUAD $0xffff58be213a0f66; WORD $0x20ff // insertps xmm7, dword [rsi - 168], 32 - LONG $0x213a0f66; WORD $0xd87e; BYTE $0x30 // insertps xmm7, dword [rsi - 40], 48 - LONG $0x04e9c20f // cmpneqps xmm5, xmm1 - LONG $0xed6b0f66 // packssdw xmm5, xmm5 - LONG $0xed630f66 // packsswb xmm5, xmm5 - LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 - LONG $0xf5710f66; BYTE $0x03 // psllw xmm5, 3 - LONG $0xdb0f4166; BYTE $0xea // pand xmm5, xmm10 - LONG $0x04f1c20f // cmpneqps xmm6, xmm1 - LONG $0xf66b0f66 // packssdw xmm6, xmm6 - LONG $0xf6630f66 // packsswb xmm6, xmm6 - LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 - LONG $0xf6710f66; BYTE $0x04 // psllw xmm6, 4 - LONG $0xdb0f4166; BYTE $0xf3 // pand xmm6, xmm11 - LONG $0xf5eb0f66 // por xmm6, xmm5 - QUAD $0xfffffe5c96100ff3 // movss xmm2, dword [rsi - 420] - QUAD $0xfffedc96213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 292], 16 - QUAD $0xffff5c96213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 164], 32 - LONG $0x213a0f66; WORD $0xdc56; BYTE $0x30 // insertps xmm2, dword [rsi - 36], 48 - LONG $0xf3eb0f66 // por xmm6, xmm3 - QUAD $0xfffffe60ae100ff3 // movss xmm5, dword [rsi - 416] - QUAD $0xfffee0ae213a0f66; WORD $0x10ff // insertps xmm5, dword [rsi - 288], 16 - QUAD $0xffff60ae213a0f66; WORD $0x20ff // insertps xmm5, dword [rsi - 160], 32 - LONG $0x213a0f66; WORD $0xe06e; BYTE $0x30 // insertps xmm5, dword [rsi - 32], 48 - LONG $0x04f9c20f // cmpneqps xmm7, xmm1 - LONG $0xff6b0f66 // packssdw xmm7, xmm7 - LONG $0xff630f66 // packsswb xmm7, xmm7 - LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 - LONG $0xf7710f66; BYTE $0x05 // psllw xmm7, 5 - LONG $0xdb0f4166; BYTE $0xfc // pand xmm7, xmm12 - LONG $0x04d1c20f // cmpneqps xmm2, xmm1 - LONG $0xd26b0f66 // packssdw xmm2, xmm2 - LONG $0xd2630f66 // packsswb xmm2, xmm2 - LONG $0xdb0f4166; BYTE $0xd7 // pand xmm2, xmm15 - LONG $0xf2710f66; BYTE $0x06 // psllw xmm2, 6 - LONG $0xdb0f4166; BYTE $0xd5 // pand xmm2, xmm13 - LONG $0xd7eb0f66 // por xmm2, xmm7 - QUAD $0xfffffe64be100ff3 // movss xmm7, dword [rsi - 412] - QUAD $0xfffee4be213a0f66; WORD $0x10ff // insertps xmm7, dword [rsi - 284], 16 - QUAD $0xffff64be213a0f66; WORD $0x20ff // insertps xmm7, dword [rsi - 156], 32 - LONG $0x213a0f66; WORD $0xe47e; BYTE $0x30 // insertps xmm7, dword [rsi - 28], 48 - LONG $0x04f9c20f // cmpneqps xmm7, xmm1 - LONG $0xff6b0f66 // packssdw xmm7, xmm7 - LONG $0xff630f66 // packsswb xmm7, xmm7 - LONG $0x04e9c20f // cmpneqps xmm5, xmm1 - LONG $0xed6b0f66 // packssdw xmm5, xmm5 - LONG $0xed630f66 // packsswb xmm5, xmm5 - LONG $0xf5710f66; BYTE $0x07 // psllw xmm5, 7 - LONG $0xdb0f4166; BYTE $0xee // pand xmm5, xmm14 - LONG $0xeaeb0f66 // por xmm5, xmm2 - QUAD $0xfffffe6896100ff3 // movss xmm2, dword [rsi - 408] - QUAD $0xfffee896213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 280], 16 - QUAD $0xffff6896213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 152], 32 - LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 - LONG $0x213a0f66; WORD $0xe856; BYTE $0x30 // insertps xmm2, dword [rsi - 24], 48 - LONG $0xeeeb0f66 // por xmm5, xmm6 - LONG $0x04d1c20f // cmpneqps xmm2, xmm1 - LONG $0xd26b0f66 // packssdw xmm2, xmm2 - LONG $0xd2630f66 // packsswb xmm2, xmm2 - LONG $0xf26f0f66 // movdqa xmm6, xmm2 - LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 - LONG $0xf2f80f66 // psubb xmm6, xmm2 - QUAD $0xfffffe6c9e100ff3 // movss xmm3, dword [rsi - 404] - QUAD $0xfffeec9e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 276], 16 - QUAD $0xffff6c9e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 148], 32 - LONG $0x213a0f66; WORD $0xec5e; BYTE $0x30 // insertps xmm3, dword [rsi - 20], 48 - LONG $0xf7eb0f66 // por xmm6, xmm7 - QUAD $0xfffffe7096100ff3 // movss xmm2, dword [rsi - 400] - QUAD $0xfffef096213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 272], 16 - QUAD $0xffff7096213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 144], 32 - LONG $0x213a0f66; WORD $0xf056; BYTE $0x30 // insertps xmm2, dword [rsi - 16], 48 - LONG $0x04d9c20f // cmpneqps xmm3, xmm1 - LONG $0xdb6b0f66 // packssdw xmm3, xmm3 - LONG $0xdb630f66 // packsswb xmm3, xmm3 - LONG $0xdb0f4166; BYTE $0xdf // pand xmm3, xmm15 - LONG $0xf3710f66; BYTE $0x02 // psllw xmm3, 2 - LONG $0xdb0f4166; BYTE $0xd8 // pand xmm3, xmm8 - LONG $0xdeeb0f66 // por xmm3, xmm6 - QUAD $0xfffffe74b6100ff3 // movss xmm6, dword [rsi - 396] - QUAD $0xfffef4b6213a0f66; WORD $0x10ff // insertps xmm6, dword [rsi - 268], 16 - QUAD $0xffff74b6213a0f66; WORD $0x20ff // insertps xmm6, dword [rsi - 140], 32 - LONG $0x213a0f66; WORD $0xf476; BYTE $0x30 // insertps xmm6, dword [rsi - 12], 48 - LONG $0x04d1c20f // cmpneqps xmm2, xmm1 - LONG $0xd26b0f66 // packssdw xmm2, xmm2 - LONG $0xd2630f66 // packsswb xmm2, xmm2 - LONG $0xdb0f4166; BYTE $0xd7 // pand xmm2, xmm15 - LONG $0xf2710f66; BYTE $0x03 // psllw xmm2, 3 - LONG $0xdb0f4166; BYTE $0xd2 // pand xmm2, xmm10 - LONG $0x04f1c20f // cmpneqps xmm6, xmm1 - LONG $0xf66b0f66 // packssdw xmm6, xmm6 - LONG $0xf6630f66 // packsswb xmm6, xmm6 - LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 - LONG $0xf6710f66; BYTE $0x04 // psllw xmm6, 4 - LONG $0xdb0f4166; BYTE $0xf3 // pand xmm6, xmm11 - LONG $0xf2eb0f66 // por xmm6, xmm2 - QUAD $0xfffffe78be100ff3 // movss xmm7, dword [rsi - 392] - QUAD $0xfffef8be213a0f66; WORD $0x10ff // insertps xmm7, dword [rsi - 264], 16 - QUAD $0xffff78be213a0f66; WORD $0x20ff // insertps xmm7, dword [rsi - 136], 32 - LONG $0x213a0f66; WORD $0xf87e; BYTE $0x30 // insertps xmm7, dword [rsi - 8], 48 - LONG $0xf3eb0f66 // por xmm6, xmm3 - QUAD $0xfffffe7c96100ff3 // movss xmm2, dword [rsi - 388] - QUAD $0xfffefc96213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 260], 16 - QUAD $0xffff7c96213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 132], 32 - LONG $0x213a0f66; WORD $0xfc56; BYTE $0x30 // insertps xmm2, dword [rsi - 4], 48 - LONG $0x04f9c20f // cmpneqps xmm7, xmm1 - LONG $0xff6b0f66 // packssdw xmm7, xmm7 - LONG $0xff630f66 // packsswb xmm7, xmm7 - LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 - LONG $0xf7710f66; BYTE $0x05 // psllw xmm7, 5 - LONG $0xdb0f4166; BYTE $0xfc // pand xmm7, xmm12 - LONG $0x04d1c20f // cmpneqps xmm2, xmm1 - LONG $0xd26b0f66 // packssdw xmm2, xmm2 - LONG $0xd2630f66 // packsswb xmm2, xmm2 - LONG $0xdb0f4166; BYTE $0xd7 // pand xmm2, xmm15 - LONG $0xf2710f66; BYTE $0x06 // psllw xmm2, 6 - LONG $0xdb0f4166; BYTE $0xd5 // pand xmm2, xmm13 - LONG $0xd7eb0f66 // por xmm2, xmm7 - QUAD $0xfffffe809e100ff3 // movss xmm3, dword [rsi - 384] - QUAD $0xffff009e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 256], 16 - LONG $0x213a0f66; WORD $0x805e; BYTE $0x20 // insertps xmm3, dword [rsi - 128], 32 - LONG $0x213a0f66; WORD $0x301e // insertps xmm3, dword [rsi], 48 - LONG $0x04d9c20f // cmpneqps xmm3, xmm1 - LONG $0xdb6b0f66 // packssdw xmm3, xmm3 - LONG $0xdb630f66 // packsswb xmm3, xmm3 - LONG $0xf3710f66; BYTE $0x07 // psllw xmm3, 7 - LONG $0xdb0f4166; BYTE $0xde // pand xmm3, xmm14 - LONG $0xdaeb0f66 // por xmm3, xmm2 - LONG $0xdeeb0f66 // por xmm3, xmm6 - LONG $0xeb620f66 // punpckldq xmm5, xmm3 - LONG $0xe5600f66 // punpcklbw xmm4, xmm5 - LONG $0x380f4166; WORD $0xe100 // pshufb xmm4, xmm9 - LONG $0x7f0f41f3; WORD $0x8e24 // movdqu oword [r14 + 4*rcx], xmm4 - LONG $0x04c18348 // add rcx, 4 - LONG $0x00c68148; WORD $0x0002; BYTE $0x00 // add rsi, 512 - WORD $0x3949; BYTE $0xc8 // cmp r8, rcx - JNE LBB4_193 - WORD $0x394d; BYTE $0xc2 // cmp r10, r8 - JNE LBB4_127 - JMP LBB4_148 + JNE LBB4_108 + JMP LBB4_111 DATA LCDATA4<>+0x000(SB)/8, $0x0000000001010101 DATA LCDATA4<>+0x008(SB)/8, $0x0000000000000000 @@ -23952,15 +25013,15 @@ TEXT ·_comparison_not_equal_scalar_arr_sse4(SB), $312-48 LONG $0x244c8948; BYTE $0x08 // mov qword [rsp + 8], rcx WORD $0x8949; BYTE $0xd6 // mov r14, rdx WORD $0xff83; BYTE $0x06 // cmp edi, 6 - JG LBB5_26 + JG LBB5_27 WORD $0xff83; BYTE $0x03 // cmp edi, 3 JLE LBB5_2 WORD $0xff83; BYTE $0x04 // cmp edi, 4 - JE LBB5_99 + JE LBB5_100 WORD $0xff83; BYTE $0x05 // cmp edi, 5 - JE LBB5_122 + JE LBB5_123 WORD $0xff83; BYTE $0x06 // cmp edi, 6 - JNE LBB5_199 + JNE LBB5_198 WORD $0x8b44; BYTE $0x1e // mov r11d, dword [rsi] LONG $0x1f578d4d // lea r10, [r15 + 31] WORD $0x854d; BYTE $0xff // test r15, r15 @@ -24003,7 +25064,7 @@ LBB5_17: LONG $0x20ff8349 // cmp r15, 32 JL LBB5_21 QUAD $0x000000a024bc894c // mov qword [rsp + 160], r15 - QUAD $0x000000e02494894c // mov qword [rsp + 224], r10 + QUAD $0x000000d02494894c // mov qword [rsp + 208], r10 QUAD $0x000000a82494894c // mov qword [rsp + 168], r10 LBB5_19: @@ -24012,35 +25073,35 @@ LBB5_19: LONG $0x785e3b45 // cmp r11d, dword [r14 + 120] LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0x745e3b45 // cmp r11d, dword [r14 + 116] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] - LONG $0x705e3b45 // cmp r11d, dword [r14 + 112] LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] - LONG $0x6c5e3b45 // cmp r11d, dword [r14 + 108] + LONG $0x705e3b45 // cmp r11d, dword [r14 + 112] LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] + LONG $0x6c5e3b45 // cmp r11d, dword [r14 + 108] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x685e3b45 // cmp r11d, dword [r14 + 104] LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] LONG $0x645e3b45 // cmp r11d, dword [r14 + 100] LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] LONG $0x5c5e3b45 // cmp r11d, dword [r14 + 92] - LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] + LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] LONG $0x585e3b45 // cmp r11d, dword [r14 + 88] - QUAD $0x000000802494950f // setne byte [rsp + 128] + LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] LONG $0x545e3b45 // cmp r11d, dword [r14 + 84] - LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] + LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] LONG $0x505e3b45 // cmp r11d, dword [r14 + 80] - LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] + LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] LONG $0x4c5e3b45 // cmp r11d, dword [r14 + 76] - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] LONG $0x485e3b45 // cmp r11d, dword [r14 + 72] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + QUAD $0x000000802494950f // setne byte [rsp + 128] LONG $0x445e3b45 // cmp r11d, dword [r14 + 68] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] + LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] LONG $0x3c5e3b45 // cmp r11d, dword [r14 + 60] LONG $0xd0950f41 // setne r8b LONG $0x385e3b45 // cmp r11d, dword [r14 + 56] QUAD $0x000000882494950f // setne byte [rsp + 136] LONG $0x345e3b45 // cmp r11d, dword [r14 + 52] - QUAD $0x000000902494950f // setne byte [rsp + 144] + QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x305e3b45 // cmp r11d, dword [r14 + 48] LONG $0xd7950f40 // setne dil LONG $0x2c5e3b45 // cmp r11d, dword [r14 + 44] @@ -24058,29 +25119,29 @@ LBB5_19: LONG $0x105e3b45 // cmp r11d, dword [r14 + 16] WORD $0x950f; BYTE $0xd1 // setne cl LONG $0x0c5e3b45 // cmp r11d, dword [r14 + 12] - LONG $0xd4950f41 // setne r12b + LONG $0xd5950f41 // setne r13b LONG $0x085e3b45 // cmp r11d, dword [r14 + 8] LONG $0xd7950f41 // setne r15b WORD $0x3b45; BYTE $0x1e // cmp r11d, dword [r14] - QUAD $0x000000982494950f // setne byte [rsp + 152] + QUAD $0x000000c02494950f // setne byte [rsp + 192] LONG $0x045e3b45 // cmp r11d, dword [r14 + 4] - WORD $0x894d; BYTE $0xf5 // mov r13, r14 + WORD $0x894d; BYTE $0xf4 // mov r12, r14 LONG $0xd6950f41 // setne r14b - LONG $0x205d3b45 // cmp r11d, dword [r13 + 32] - QUAD $0x000000c02494950f // setne byte [rsp + 192] - LONG $0x405d3b45 // cmp r11d, dword [r13 + 64] + LONG $0x245c3b45; BYTE $0x20 // cmp r11d, dword [r12 + 32] QUAD $0x000000b02494950f // setne byte [rsp + 176] - LONG $0x605d3b45 // cmp r11d, dword [r13 + 96] - LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] + LONG $0x245c3b45; BYTE $0x40 // cmp r11d, dword [r12 + 64] + QUAD $0x000000902494950f // setne byte [rsp + 144] + LONG $0x245c3b45; BYTE $0x60 // cmp r11d, dword [r12 + 96] + LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] WORD $0x0045; BYTE $0xf6 // add r14b, r14b - QUAD $0x0000009824b40244 // add r14b, byte [rsp + 152] + QUAD $0x000000c024b40244 // add r14b, byte [rsp + 192] LONG $0x02e7c041 // shl r15b, 2 WORD $0x0845; BYTE $0xf7 // or r15b, r14b - WORD $0x894d; BYTE $0xee // mov r14, r13 - LONG $0x03e4c041 // shl r12b, 3 - WORD $0x0845; BYTE $0xfc // or r12b, r15b + WORD $0x894d; BYTE $0xe6 // mov r14, r12 + LONG $0x03e5c041 // shl r13b, 3 + WORD $0x0845; BYTE $0xfd // or r13b, r15b WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0x0844; BYTE $0xe1 // or cl, r12b + WORD $0x0844; BYTE $0xe9 // or cl, r13b LONG $0x247c8b4c; BYTE $0x08 // mov r15, qword [rsp + 8] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0xca08 // or dl, cl @@ -24090,14 +25151,14 @@ LBB5_19: WORD $0xd008 // or al, dl WORD $0x8841; BYTE $0x07 // mov byte [r15], al WORD $0x0040; BYTE $0xf6 // add sil, sil - QUAD $0x000000c024b40240 // add sil, byte [rsp + 192] + QUAD $0x000000b024b40240 // add sil, byte [rsp + 176] LONG $0x02e1c041 // shl r9b, 2 WORD $0x0841; BYTE $0xf1 // or r9b, sil LONG $0x03e2c041 // shl r10b, 3 WORD $0x0845; BYTE $0xca // or r10b, r9b LONG $0x04e7c040 // shl dil, 4 WORD $0x0844; BYTE $0xd7 // or dil, r10b - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0840; BYTE $0xf8 // or al, dil QUAD $0x00000088248cb60f // movzx ecx, byte [rsp + 136] @@ -24106,50 +25167,50 @@ LBB5_19: WORD $0x0841; BYTE $0xc8 // or r8b, cl WORD $0x0841; BYTE $0xc0 // or r8b, al LONG $0x01478845 // mov byte [r15 + 1], r8b - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] WORD $0xc000 // add al, al - LONG $0xb0248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 176] + LONG $0x90248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 144] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] + LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0xd008 // or al, dl WORD $0xc808 // or al, cl LONG $0x02478841 // mov byte [r15 + 2], al LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xc000 // add al, al - LONG $0x60244402 // add al, byte [rsp + 96] + LONG $0x70244402 // add al, byte [rsp + 112] WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -24166,12 +25227,12 @@ LBB5_19: QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 JNE LBB5_19 QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] - QUAD $0x000000e024948b4c // mov r10, qword [rsp + 224] + QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] LBB5_21: LONG $0x05e2c149 // shl r10, 5 WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB5_199 + JGE LBB5_198 WORD $0x894d; BYTE $0xf8 // mov r8, r15 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 @@ -24182,7 +25243,7 @@ LBB5_21: WORD $0xff31 // xor edi, edi LONG $0x247c8b4c; BYTE $0x08 // mov r15, qword [rsp + 8] -LBB5_143: +LBB5_144: WORD $0x3b45; BYTE $0x1e // cmp r11d, dword [r14] WORD $0x950f; BYTE $0xd0 // setne al WORD $0xd8f6 // neg al @@ -24210,18 +25271,18 @@ LBB5_143: WORD $0xd330 // xor bl, dl LONG $0x371c8841 // mov byte [r15 + rsi], bl WORD $0x3949; BYTE $0xf9 // cmp r9, rdi - JNE LBB5_143 + JNE LBB5_144 JMP LBB5_24 -LBB5_26: +LBB5_27: WORD $0xff83; BYTE $0x08 // cmp edi, 8 - JLE LBB5_27 + JLE LBB5_28 WORD $0xff83; BYTE $0x09 // cmp edi, 9 - JE LBB5_158 + JE LBB5_159 WORD $0xff83; BYTE $0x0b // cmp edi, 11 - JE LBB5_170 + JE LBB5_171 WORD $0xff83; BYTE $0x0c // cmp edi, 12 - JNE LBB5_199 + JNE LBB5_198 LONG $0x1f578d4d // lea r10, [r15 + 31] WORD $0x854d; BYTE $0xff // test r15, r15 LONG $0xd7490f4d // cmovns r10, r15 @@ -24231,14 +25292,16 @@ LBB5_26: WORD $0xe083; BYTE $0xf8 // and eax, -8 LONG $0x06100ff2 // movsd xmm0, qword [rsi] WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB5_49 + JE LBB5_50 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d LONG $0x24448b4c; BYTE $0x08 // mov r8, qword [rsp + 8] -LBB5_47: +LBB5_48: LONG $0x2e0f4166; BYTE $0x06 // ucomisd xmm0, qword [r14] LONG $0x08768d4d // lea r14, [r14 + 8] + WORD $0x9a0f; BYTE $0xd1 // setp cl WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xca08 // or dl, cl WORD $0xdaf6 // neg dl LONG $0x07708d48 // lea rsi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax @@ -24256,195 +25319,283 @@ LBB5_47: LONG $0x303c8841 // mov byte [r8 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB5_47 + JNE LBB5_48 LONG $0x24448348; WORD $0x0108 // add qword [rsp + 8], 1 -LBB5_49: +LBB5_50: LONG $0x05fac149 // sar r10, 5 LONG $0x20ff8349 // cmp r15, 32 - JL LBB5_53 + JL LBB5_54 QUAD $0x000000a024bc894c // mov qword [rsp + 160], r15 - QUAD $0x000000a82494894c // mov qword [rsp + 168], r10 - QUAD $0x000000982494894c // mov qword [rsp + 152], r10 + QUAD $0x000000f02494894c // mov qword [rsp + 240], r10 + QUAD $0x000000d02494894c // mov qword [rsp + 208], r10 -LBB5_51: +LBB5_52: WORD $0x894c; BYTE $0xf2 // mov rdx, r14 LONG $0x2e0f4166; BYTE $0x06 // ucomisd xmm0, qword [r14] - QUAD $0x000000c02494950f // setne byte [rsp + 192] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x18244c88 // mov byte [rsp + 24], cl LONG $0x2e0f4166; WORD $0x0846 // ucomisd xmm0, qword [r14 + 8] - LONG $0xd1950f41 // setne r9b - LONG $0x2e0f4166; WORD $0x1046 // ucomisd xmm0, qword [r14 + 16] + WORD $0x9a0f; BYTE $0xd0 // setp al LONG $0xd3950f41 // setne r11b + WORD $0x0841; BYTE $0xc3 // or r11b, al + LONG $0x2e0f4166; WORD $0x1046 // ucomisd xmm0, qword [r14 + 16] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl LONG $0x2e0f4166; WORD $0x1846 // ucomisd xmm0, qword [r14 + 24] - LONG $0xd5950f41 // setne r13b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x40244c88 // mov byte [rsp + 64], cl LONG $0x2e0f4166; WORD $0x2046 // ucomisd xmm0, qword [r14 + 32] - QUAD $0x000000b02494950f // setne byte [rsp + 176] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x10244c88 // mov byte [rsp + 16], cl LONG $0x2e0f4166; WORD $0x2846 // ucomisd xmm0, qword [r14 + 40] - LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd1950f41 // setne r9b + WORD $0x0841; BYTE $0xc1 // or r9b, al LONG $0x2e0f4166; WORD $0x3046 // ucomisd xmm0, qword [r14 + 48] - WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x38244c88 // mov byte [rsp + 56], cl LONG $0x2e0f4166; WORD $0x3846 // ucomisd xmm0, qword [r14 + 56] - LONG $0xd4950f41 // setne r12b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl LONG $0x2e0f4166; WORD $0x4046 // ucomisd xmm0, qword [r14 + 64] - QUAD $0x000000902494950f // setne byte [rsp + 144] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x30244c88 // mov byte [rsp + 48], cl LONG $0x2e0f4166; WORD $0x4846 // ucomisd xmm0, qword [r14 + 72] - LONG $0xd6950f40 // setne sil + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x58244c88 // mov byte [rsp + 88], cl LONG $0x2e0f4166; WORD $0x5046 // ucomisd xmm0, qword [r14 + 80] - LONG $0xd7950f40 // setne dil + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xc308 // or bl, al + LONG $0x50245c88 // mov byte [rsp + 80], bl LONG $0x2e0f4166; WORD $0x5846 // ucomisd xmm0, qword [r14 + 88] - LONG $0xd0950f41 // setne r8b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xc308 // or bl, al + LONG $0x48245c88 // mov byte [rsp + 72], bl LONG $0x2e0f4166; WORD $0x6046 // ucomisd xmm0, qword [r14 + 96] - LONG $0xd2950f41 // setne r10b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xc308 // or bl, al + LONG $0x68245c88 // mov byte [rsp + 104], bl LONG $0x2e0f4166; WORD $0x6846 // ucomisd xmm0, qword [r14 + 104] - LONG $0xd7950f41 // setne r15b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xc308 // or bl, al + LONG $0x60245c88 // mov byte [rsp + 96], bl LONG $0x2e0f4166; WORD $0x7046 // ucomisd xmm0, qword [r14 + 112] - QUAD $0x000000882494950f // setne byte [rsp + 136] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd5950f41 // setne r13b + WORD $0x0841; BYTE $0xc5 // or r13b, al LONG $0x2e0f4166; WORD $0x7846 // ucomisd xmm0, qword [r14 + 120] + WORD $0x9a0f; BYTE $0xd0 // setp al WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x80248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 128], cl QUAD $0x000080862e0f4166; BYTE $0x00 // ucomisd xmm0, qword [r14 + 128] - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x78244c88 // mov byte [rsp + 120], cl QUAD $0x000088862e0f4166; BYTE $0x00 // ucomisd xmm0, qword [r14 + 136] - LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x70244c88 // mov byte [rsp + 112], cl QUAD $0x000090862e0f4166; BYTE $0x00 // ucomisd xmm0, qword [r14 + 144] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd3 // setne bl + WORD $0xc308 // or bl, al QUAD $0x000098862e0f4166; BYTE $0x00 // ucomisd xmm0, qword [r14 + 152] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x88248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 136], cl QUAD $0x0000a0862e0f4166; BYTE $0x00 // ucomisd xmm0, qword [r14 + 160] - LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x98248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 152], cl QUAD $0x0000a8862e0f4166; BYTE $0x00 // ucomisd xmm0, qword [r14 + 168] - QUAD $0x000000802494950f // setne byte [rsp + 128] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xb0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 176], cl QUAD $0x0000b0862e0f4166; BYTE $0x00 // ucomisd xmm0, qword [r14 + 176] - LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd4950f41 // setne r12b + WORD $0x0841; BYTE $0xc4 // or r12b, al QUAD $0x0000b8862e0f4166; BYTE $0x00 // ucomisd xmm0, qword [r14 + 184] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd0950f41 // setne r8b + WORD $0x0841; BYTE $0xc0 // or r8b, al + QUAD $0x0000c0862e0f4166; BYTE $0x00 // ucomisd xmm0, qword [r14 + 192] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x90248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 144], cl + QUAD $0x0000c8862e0f4166; BYTE $0x00 // ucomisd xmm0, qword [r14 + 200] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f41 // setne r15b + WORD $0x0841; BYTE $0xc7 // or r15b, al + QUAD $0x0000d0862e0f4166; BYTE $0x00 // ucomisd xmm0, qword [r14 + 208] + WORD $0x9a0f; BYTE $0xd0 // setp al LONG $0xd6950f41 // setne r14b - QUAD $0x000000c0822e0f66 // ucomisd xmm0, qword [rdx + 192] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] - QUAD $0x000000c8822e0f66 // ucomisd xmm0, qword [rdx + 200] - LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] - QUAD $0x000000d0822e0f66 // ucomisd xmm0, qword [rdx + 208] - LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] + WORD $0x0841; BYTE $0xc6 // or r14b, al QUAD $0x000000d8822e0f66 // ucomisd xmm0, qword [rdx + 216] - LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd2950f41 // setne r10b + WORD $0x0841; BYTE $0xc2 // or r10b, al QUAD $0x000000e0822e0f66 // ucomisd xmm0, qword [rdx + 224] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xc0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 192], cl QUAD $0x000000e8822e0f66 // ucomisd xmm0, qword [rdx + 232] - LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xa8248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 168], cl QUAD $0x000000f0822e0f66 // ucomisd xmm0, qword [rdx + 240] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f40 // setne dil + WORD $0x0840; BYTE $0xc7 // or dil, al QUAD $0x000000f8822e0f66 // ucomisd xmm0, qword [rdx + 248] - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0x0045; BYTE $0xc9 // add r9b, r9b - QUAD $0x000000c0248c0244 // add r9b, byte [rsp + 192] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e4c041 // shl r12b, 7 - WORD $0x0841; BYTE $0xdc // or r12b, bl - LONG $0x02e3c041 // shl r11b, 2 - WORD $0x0845; BYTE $0xcb // or r11b, r9b - WORD $0x0040; BYTE $0xf6 // add sil, sil - QUAD $0x0000009024b40240 // add sil, byte [rsp + 144] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xdd // or r13b, r11b - LONG $0x02e7c040 // shl dil, 2 - WORD $0x0840; BYTE $0xf7 // or dil, sil - QUAD $0x000000b0249cb60f // movzx ebx, byte [rsp + 176] - WORD $0xe3c0; BYTE $0x04 // shl bl, 4 - WORD $0x0844; BYTE $0xeb // or bl, r13b - WORD $0x8941; BYTE $0xd9 // mov r9d, ebx - LONG $0x24748b48; BYTE $0x08 // mov rsi, qword [rsp + 8] - LONG $0x03e0c041 // shl r8b, 3 - WORD $0x0841; BYTE $0xf8 // or r8b, dil - LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] - WORD $0xe3c0; BYTE $0x05 // shl bl, 5 - WORD $0x0844; BYTE $0xcb // or bl, r9b - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xc2 // or r10b, r8b - LONG $0x05e7c041 // shl r15b, 5 - WORD $0x0845; BYTE $0xd7 // or r15b, r10b - QUAD $0x0000008824bcb60f // movzx edi, byte [rsp + 136] - LONG $0x06e7c040 // shl dil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0x0841; BYTE $0xdc // or r12b, bl - WORD $0x0844; BYTE $0xf9 // or cl, r15b - LONG $0x245cb60f; BYTE $0x60 // movzx ebx, byte [rsp + 96] - WORD $0xdb00 // add bl, bl - LONG $0x78245c02 // add bl, byte [rsp + 120] - WORD $0xdf89 // mov edi, ebx - LONG $0x245cb60f; BYTE $0x68 // movzx ebx, byte [rsp + 104] - WORD $0xe3c0; BYTE $0x02 // shl bl, 2 - WORD $0x0840; BYTE $0xfb // or bl, dil - WORD $0xdf89 // mov edi, ebx - LONG $0x245cb60f; BYTE $0x70 // movzx ebx, byte [rsp + 112] - WORD $0xe3c0; BYTE $0x03 // shl bl, 3 - WORD $0x0840; BYTE $0xfb // or bl, dil - WORD $0xdf89 // mov edi, ebx - LONG $0x245cb60f; BYTE $0x48 // movzx ebx, byte [rsp + 72] - WORD $0xe3c0; BYTE $0x04 // shl bl, 4 - WORD $0x0840; BYTE $0xfb // or bl, dil - WORD $0xdf89 // mov edi, ebx - QUAD $0x00000080249cb60f // movzx ebx, byte [rsp + 128] - WORD $0xe3c0; BYTE $0x05 // shl bl, 5 - WORD $0x0840; BYTE $0xfb // or bl, dil - WORD $0x8844; BYTE $0x26 // mov byte [rsi], r12b - LONG $0x247cb60f; BYTE $0x58 // movzx edi, byte [rsp + 88] - LONG $0x06e7c040 // shl dil, 6 - LONG $0x07e6c041 // shl r14b, 7 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0x4e88; BYTE $0x01 // mov byte [rsi + 1], cl - WORD $0x0841; BYTE $0xde // or r14b, bl - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd6950f40 // setne sil + WORD $0x0840; BYTE $0xc6 // or sil, al + WORD $0x0045; BYTE $0xdb // add r11b, r11b + LONG $0x245c0244; BYTE $0x18 // add r11b, byte [rsp + 24] + LONG $0x05e1c041 // shl r9b, 5 + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + WORD $0x0844; BYTE $0xc8 // or al, r9b + WORD $0x8941; BYTE $0xc1 // mov r9d, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0844; BYTE $0xd8 // or al, r11b + WORD $0x8941; BYTE $0xc3 // mov r11d, eax + LONG $0x244cb60f; BYTE $0x58 // movzx ecx, byte [rsp + 88] WORD $0xc900 // add cl, cl - LONG $0x20244c02 // add cl, byte [rsp + 32] - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] + LONG $0x30244c02 // add cl, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0844; BYTE $0xc8 // or al, r9b + WORD $0x8941; BYTE $0xc1 // mov r9d, eax + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0844; BYTE $0xd8 // or al, r11b + WORD $0x8941; BYTE $0xc3 // mov r11d, eax + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd8 // or al, r11b + LONG $0x10244488 // mov byte [rsp + 16], al + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0x8941; BYTE $0xc3 // mov r11d, eax + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + LONG $0x06e5c041 // shl r13b, 6 + WORD $0x0841; BYTE $0xc5 // or r13b, al + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] + LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] + WORD $0xc900 // add cl, cl + LONG $0x78244c02 // add cl, byte [rsp + 120] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0xcb08 // or bl, cl + QUAD $0x00000088248cb60f // movzx ecx, byte [rsp + 136] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 WORD $0xd908 // or cl, bl WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] + QUAD $0x00000098248cb60f // movzx ecx, byte [rsp + 152] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 WORD $0xd908 // or cl, bl - WORD $0xcb89 // mov ebx, ecx - LONG $0x244cb60f; BYTE $0x40 // movzx ecx, byte [rsp + 64] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd908 // or cl, bl - LONG $0x245cb60f; BYTE $0x10 // movzx ebx, byte [rsp + 16] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - WORD $0xe0c0; BYTE $0x07 // shl al, 7 - WORD $0xd808 // or al, bl - WORD $0xc808 // or al, cl - LONG $0x02768844 // mov byte [rsi + 2], r14b - WORD $0x4688; BYTE $0x03 // mov byte [rsi + 3], al + LONG $0x244c0a44; BYTE $0x10 // or r9b, byte [rsp + 16] + QUAD $0x000000b0249cb60f // movzx ebx, byte [rsp + 176] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e4c041 // shl r12b, 6 + WORD $0x0841; BYTE $0xdc // or r12b, bl + WORD $0x0845; BYTE $0xdd // or r13b, r11b + LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xe0 // or r8b, r12b + WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0045; BYTE $0xff // add r15b, r15b + QUAD $0x0000009024bc0244 // add r15b, byte [rsp + 144] + LONG $0x02e6c041 // shl r14b, 2 + WORD $0x0845; BYTE $0xfe // or r14b, r15b + LONG $0x03e2c041 // shl r10b, 3 + WORD $0x0845; BYTE $0xf2 // or r10b, r14b + QUAD $0x000000c0248cb60f // movzx ecx, byte [rsp + 192] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0x0844; BYTE $0xd1 // or cl, r10b + WORD $0x8844; BYTE $0x08 // mov byte [rax], r9b + QUAD $0x000000a8249cb60f // movzx ebx, byte [rsp + 168] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + LONG $0x06e7c040 // shl dil, 6 + WORD $0x0840; BYTE $0xdf // or dil, bl + LONG $0x01688844 // mov byte [rax + 1], r13b + LONG $0x07e6c040 // shl sil, 7 + WORD $0x0840; BYTE $0xfe // or sil, dil + WORD $0x0840; BYTE $0xce // or sil, cl + LONG $0x02408844 // mov byte [rax + 2], r8b + LONG $0x03708840 // mov byte [rax + 3], sil LONG $0x00b28d4c; WORD $0x0001; BYTE $0x00 // lea r14, [rdx + 256] - LONG $0x04c68348 // add rsi, 4 - LONG $0x24748948; BYTE $0x08 // mov qword [rsp + 8], rsi - QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 - JNE LBB5_51 + LONG $0x04c08348 // add rax, 4 + LONG $0x24448948; BYTE $0x08 // mov qword [rsp + 8], rax + QUAD $0x000000d024848348; BYTE $0xff // add qword [rsp + 208], -1 + JNE LBB5_52 QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] - QUAD $0x000000a824948b4c // mov r10, qword [rsp + 168] + QUAD $0x000000f024948b4c // mov r10, qword [rsp + 240] -LBB5_53: +LBB5_54: LONG $0x05e2c149 // shl r10, 5 WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB5_199 + JGE LBB5_198 WORD $0x894d; BYTE $0xf8 // mov r8, r15 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 WORD $0x014d; BYTE $0xfa // add r10, r15 - JNE LBB5_193 + JNE LBB5_194 WORD $0xff31 // xor edi, edi - JMP LBB5_195 + JMP LBB5_196 LBB5_2: WORD $0xff83; BYTE $0x02 // cmp edi, 2 - JE LBB5_56 + JE LBB5_57 WORD $0xff83; BYTE $0x03 // cmp edi, 3 - JNE LBB5_199 + JNE LBB5_198 WORD $0x068a // mov al, byte [rsi] - LONG $0x40244488 // mov byte [rsp + 64], al + LONG $0x10244488 // mov byte [rsp + 16], al LONG $0x1f578d4d // lea r10, [r15 + 31] WORD $0x854d; BYTE $0xff // test r15, r15 LONG $0xd7490f4d // cmovns r10, r15 @@ -24458,7 +25609,7 @@ LBB5_2: LONG $0x24548b48; BYTE $0x08 // mov rdx, qword [rsp + 8] LBB5_6: - LONG $0x244cb60f; BYTE $0x40 // movzx ecx, byte [rsp + 64] + LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] WORD $0x3a41; BYTE $0x0e // cmp cl, byte [r14] LONG $0x01768d4d // lea r14, [r14 + 1] WORD $0x950f; BYTE $0xd3 // setne bl @@ -24488,62 +25639,62 @@ LBB5_8: JL LBB5_9 LONG $0x10fa8349 // cmp r10, 16 QUAD $0x000000a024bc894c // mov qword [rsp + 160], r15 - QUAD $0x000000f82494894c // mov qword [rsp + 248], r10 - JB LBB5_82 + QUAD $0x000001082494894c // mov qword [rsp + 264], r10 + JB LBB5_83 WORD $0x894c; BYTE $0xd0 // mov rax, r10 LONG $0x05e0c148 // shl rax, 5 WORD $0x014c; BYTE $0xf0 // add rax, r14 LONG $0x24443948; BYTE $0x08 // cmp qword [rsp + 8], rax - JAE LBB5_85 + JAE LBB5_86 LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] LONG $0x90048d4a // lea rax, [rax + 4*r10] WORD $0x3949; BYTE $0xc6 // cmp r14, rax - JAE LBB5_85 + JAE LBB5_86 -LBB5_82: +LBB5_83: WORD $0xc031 // xor eax, eax - QUAD $0x000000d824848948 // mov qword [rsp + 216], rax + QUAD $0x000000e824848948 // mov qword [rsp + 232], rax LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] - QUAD $0x0000008024848948 // mov qword [rsp + 128], rax - -LBB5_88: - QUAD $0x000000d824942b4c // sub r10, qword [rsp + 216] - QUAD $0x000000e02494894c // mov qword [rsp + 224], r10 + LONG $0x24448948; BYTE $0x50 // mov qword [rsp + 80], rax LBB5_89: - LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + QUAD $0x000000e824942b4c // sub r10, qword [rsp + 232] + QUAD $0x000000d02494894c // mov qword [rsp + 208], r10 + +LBB5_90: + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] LONG $0x1f463a41 // cmp al, byte [r14 + 31] LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x1e463a41 // cmp al, byte [r14 + 30] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0x1d463a41 // cmp al, byte [r14 + 29] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] - LONG $0x1c463a41 // cmp al, byte [r14 + 28] LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] - LONG $0x1b463a41 // cmp al, byte [r14 + 27] + LONG $0x1c463a41 // cmp al, byte [r14 + 28] LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] + LONG $0x1b463a41 // cmp al, byte [r14 + 27] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x1a463a41 // cmp al, byte [r14 + 26] LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] LONG $0x19463a41 // cmp al, byte [r14 + 25] LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] LONG $0x17463a41 // cmp al, byte [r14 + 23] - LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] + LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] LONG $0x16463a41 // cmp al, byte [r14 + 22] - LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] + LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] LONG $0x15463a41 // cmp al, byte [r14 + 21] - LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] + LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] LONG $0x14463a41 // cmp al, byte [r14 + 20] - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] LONG $0x13463a41 // cmp al, byte [r14 + 19] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + QUAD $0x000000802494950f // setne byte [rsp + 128] LONG $0x12463a41 // cmp al, byte [r14 + 18] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] + LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] LONG $0x11463a41 // cmp al, byte [r14 + 17] - LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] + LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] LONG $0x0f463a41 // cmp al, byte [r14 + 15] LONG $0xd2950f41 // setne r10b LONG $0x0e463a41 // cmp al, byte [r14 + 14] - QUAD $0x000000902494950f // setne byte [rsp + 144] + QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x0d463a41 // cmp al, byte [r14 + 13] LONG $0xd5950f41 // setne r13b LONG $0x0c463a41 // cmp al, byte [r14 + 12] @@ -24557,7 +25708,7 @@ LBB5_89: LONG $0x07463a41 // cmp al, byte [r14 + 7] LONG $0xd6950f40 // setne sil LONG $0x06463a41 // cmp al, byte [r14 + 6] - QUAD $0x000000c02494950f // setne byte [rsp + 192] + QUAD $0x000000b02494950f // setne byte [rsp + 176] LONG $0x05463a41 // cmp al, byte [r14 + 5] LONG $0xd1950f41 // setne r9b LONG $0x04463a41 // cmp al, byte [r14 + 4] @@ -24571,9 +25722,9 @@ LBB5_89: LONG $0x01463a41 // cmp al, byte [r14 + 1] WORD $0x950f; BYTE $0xd1 // setne cl LONG $0x08463a41 // cmp al, byte [r14 + 8] - QUAD $0x000000982494950f // setne byte [rsp + 152] + QUAD $0x000000c02494950f // setne byte [rsp + 192] LONG $0x10463a41 // cmp al, byte [r14 + 16] - QUAD $0x000000b02494950f // setne byte [rsp + 176] + QUAD $0x000000902494950f // setne byte [rsp + 144] LONG $0x18463a41 // cmp al, byte [r14 + 24] QUAD $0x000000882494950f // setne byte [rsp + 136] WORD $0xc900 // add cl, cl @@ -24586,15 +25737,15 @@ LBB5_89: WORD $0x0841; BYTE $0xf8 // or r8b, dil LONG $0x05e1c041 // shl r9b, 5 WORD $0x0845; BYTE $0xc1 // or r9b, r8b - QUAD $0x000000c02484b60f // movzx eax, byte [rsp + 192] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e6c040 // shl sil, 7 WORD $0x0840; BYTE $0xc6 // or sil, al WORD $0x0844; BYTE $0xce // or sil, r9b - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] WORD $0x8840; BYTE $0x30 // mov byte [rax], sil WORD $0x0045; BYTE $0xdb // add r11b, r11b - QUAD $0x00000098249c0244 // add r11b, byte [rsp + 152] + QUAD $0x000000c0249c0244 // add r11b, byte [rsp + 192] WORD $0xe3c0; BYTE $0x02 // shl bl, 2 WORD $0x0844; BYTE $0xdb // or bl, r11b LONG $0x03e7c041 // shl r15b, 3 @@ -24603,35 +25754,35 @@ LBB5_89: WORD $0x0845; BYTE $0xfc // or r12b, r15b LONG $0x05e5c041 // shl r13b, 5 WORD $0x0845; BYTE $0xe5 // or r13b, r12b - QUAD $0x00000090248cb60f // movzx ecx, byte [rsp + 144] + QUAD $0x00000098248cb60f // movzx ecx, byte [rsp + 152] WORD $0xe1c0; BYTE $0x06 // shl cl, 6 LONG $0x07e2c041 // shl r10b, 7 WORD $0x0841; BYTE $0xca // or r10b, cl WORD $0x0845; BYTE $0xea // or r10b, r13b LONG $0x01508844 // mov byte [rax + 1], r10b - LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] + LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] WORD $0xc900 // add cl, cl - LONG $0xb0248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 176] + LONG $0x90248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 144] WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x68 // movzx ecx, byte [rsp + 104] + LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] WORD $0xe1c0; BYTE $0x02 // shl cl, 2 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] + QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] + LONG $0x244cb60f; BYTE $0x58 // movzx ecx, byte [rsp + 88] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x48 // movzx ecx, byte [rsp + 72] + LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + LONG $0x245cb60f; BYTE $0x68 // movzx ebx, byte [rsp + 104] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x244cb60f; BYTE $0x58 // movzx ecx, byte [rsp + 88] + LONG $0x244cb60f; BYTE $0x48 // movzx ecx, byte [rsp + 72] WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0xd908 // or cl, bl WORD $0xd108 // or cl, dl @@ -24644,19 +25795,19 @@ LBB5_89: WORD $0xe1c0; BYTE $0x02 // shl cl, 2 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] + LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] + LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] + LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x245cb60f; BYTE $0x10 // movzx ebx, byte [rsp + 16] + LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x244cb60f; BYTE $0x08 // movzx ecx, byte [rsp + 8] WORD $0xe1c0; BYTE $0x07 // shl cl, 7 @@ -24665,18 +25816,18 @@ LBB5_89: WORD $0x4888; BYTE $0x03 // mov byte [rax + 3], cl LONG $0x20c68349 // add r14, 32 LONG $0x04c08348 // add rax, 4 - QUAD $0x0000008024848948 // mov qword [rsp + 128], rax - QUAD $0x000000e024848348; BYTE $0xff // add qword [rsp + 224], -1 - JNE LBB5_89 + LONG $0x24448948; BYTE $0x50 // mov qword [rsp + 80], rax + QUAD $0x000000d024848348; BYTE $0xff // add qword [rsp + 208], -1 + JNE LBB5_90 QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] - QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] - JMP LBB5_91 + QUAD $0x0000010824948b4c // mov r10, qword [rsp + 264] + JMP LBB5_92 -LBB5_27: +LBB5_28: WORD $0xff83; BYTE $0x07 // cmp edi, 7 - JE LBB5_144 + JE LBB5_145 WORD $0xff83; BYTE $0x08 // cmp edi, 8 - JNE LBB5_199 + JNE LBB5_198 WORD $0x8b4c; BYTE $0x1e // mov r11, qword [rsi] LONG $0x1f578d4d // lea r10, [r15 + 31] WORD $0x854d; BYTE $0xff // test r15, r15 @@ -24686,11 +25837,11 @@ LBB5_27: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB5_33 + JE LBB5_34 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d LONG $0x24448b4c; BYTE $0x08 // mov r8, qword [rsp + 8] -LBB5_31: +LBB5_32: WORD $0x3b4d; BYTE $0x1e // cmp r11, qword [r14] LONG $0x08768d4d // lea r14, [r14 + 8] WORD $0x950f; BYTE $0xd2 // setne dl @@ -24711,52 +25862,52 @@ LBB5_31: LONG $0x303c8841 // mov byte [r8 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB5_31 + JNE LBB5_32 LONG $0x24448348; WORD $0x0108 // add qword [rsp + 8], 1 -LBB5_33: +LBB5_34: LONG $0x05fac149 // sar r10, 5 LONG $0x20ff8349 // cmp r15, 32 - JL LBB5_37 + JL LBB5_38 QUAD $0x000000a024bc894c // mov qword [rsp + 160], r15 - QUAD $0x000000e02494894c // mov qword [rsp + 224], r10 + QUAD $0x000000d02494894c // mov qword [rsp + 208], r10 QUAD $0x000000a82494894c // mov qword [rsp + 168], r10 -LBB5_35: +LBB5_36: LONG $0xf89e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 248] LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0xf09e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 240] LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0xe89e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 232] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] - LONG $0xe09e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 224] LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] - LONG $0xd89e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 216] + LONG $0xe09e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 224] LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] + LONG $0xd89e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 216] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0xd09e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 208] LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] LONG $0xc89e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 200] LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] LONG $0xb89e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 184] - LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] + LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] LONG $0xb09e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 176] - QUAD $0x000000802494950f // setne byte [rsp + 128] + LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] LONG $0xa89e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 168] - LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] + LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] LONG $0xa09e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 160] - LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] + LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] LONG $0x989e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 152] - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] LONG $0x909e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 144] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + QUAD $0x000000802494950f // setne byte [rsp + 128] LONG $0x889e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 136] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] + LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] LONG $0x785e3b4d // cmp r11, qword [r14 + 120] LONG $0xd0950f41 // setne r8b LONG $0x705e3b4d // cmp r11, qword [r14 + 112] QUAD $0x000000882494950f // setne byte [rsp + 136] LONG $0x685e3b4d // cmp r11, qword [r14 + 104] - QUAD $0x000000902494950f // setne byte [rsp + 144] + QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x605e3b4d // cmp r11, qword [r14 + 96] LONG $0xd7950f40 // setne dil LONG $0x585e3b4d // cmp r11, qword [r14 + 88] @@ -24776,24 +25927,24 @@ LBB5_35: LONG $0x185e3b4d // cmp r11, qword [r14 + 24] LONG $0xd7950f41 // setne r15b LONG $0x105e3b4d // cmp r11, qword [r14 + 16] - LONG $0xd5950f41 // setne r13b + LONG $0xd4950f41 // setne r12b WORD $0x3b4d; BYTE $0x1e // cmp r11, qword [r14] - QUAD $0x000000982494950f // setne byte [rsp + 152] + QUAD $0x000000c02494950f // setne byte [rsp + 192] LONG $0x085e3b4d // cmp r11, qword [r14 + 8] - LONG $0xd4950f41 // setne r12b + LONG $0xd5950f41 // setne r13b LONG $0x405e3b4d // cmp r11, qword [r14 + 64] - QUAD $0x000000c02494950f // setne byte [rsp + 192] - LONG $0x809e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 128] QUAD $0x000000b02494950f // setne byte [rsp + 176] + LONG $0x809e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 128] + QUAD $0x000000902494950f // setne byte [rsp + 144] LONG $0xc09e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 192] - LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] - WORD $0x0045; BYTE $0xe4 // add r12b, r12b - QUAD $0x0000009824a40244 // add r12b, byte [rsp + 152] - LONG $0x02e5c041 // shl r13b, 2 - WORD $0x0845; BYTE $0xe5 // or r13b, r12b - LONG $0x24648b4c; BYTE $0x08 // mov r12, qword [rsp + 8] + LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + WORD $0x0045; BYTE $0xed // add r13b, r13b + QUAD $0x000000c024ac0244 // add r13b, byte [rsp + 192] + LONG $0x02e4c041 // shl r12b, 2 + WORD $0x0845; BYTE $0xec // or r12b, r13b + LONG $0x246c8b4c; BYTE $0x08 // mov r13, qword [rsp + 8] LONG $0x03e7c041 // shl r15b, 3 - WORD $0x0845; BYTE $0xef // or r15b, r13b + WORD $0x0845; BYTE $0xe7 // or r15b, r12b WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0x0844; BYTE $0xfa // or dl, r15b WORD $0xe1c0; BYTE $0x05 // shl cl, 5 @@ -24802,16 +25953,16 @@ LBB5_35: WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0xd808 // or al, bl WORD $0xc808 // or al, cl - LONG $0x24048841 // mov byte [r12], al + LONG $0x00458841 // mov byte [r13], al WORD $0x0040; BYTE $0xf6 // add sil, sil - QUAD $0x000000c024b40240 // add sil, byte [rsp + 192] + QUAD $0x000000b024b40240 // add sil, byte [rsp + 176] LONG $0x02e1c041 // shl r9b, 2 WORD $0x0841; BYTE $0xf1 // or r9b, sil LONG $0x03e2c041 // shl r10b, 3 WORD $0x0845; BYTE $0xca // or r10b, r9b LONG $0x04e7c040 // shl dil, 4 WORD $0x0844; BYTE $0xd7 // or dil, r10b - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0840; BYTE $0xf8 // or al, dil QUAD $0x00000088248cb60f // movzx ecx, byte [rsp + 136] @@ -24819,51 +25970,51 @@ LBB5_35: LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xc8 // or r8b, cl WORD $0x0841; BYTE $0xc0 // or r8b, al - LONG $0x24448845; BYTE $0x01 // mov byte [r12 + 1], r8b - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + LONG $0x01458845 // mov byte [r13 + 1], r8b + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] WORD $0xc000 // add al, al - LONG $0xb0248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 176] + LONG $0x90248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 144] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] + LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0xd008 // or al, dl WORD $0xc808 // or al, cl - LONG $0x24448841; BYTE $0x02 // mov byte [r12 + 2], al + LONG $0x02458841 // mov byte [r13 + 2], al LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xc000 // add al, al - LONG $0x60244402 // add al, byte [rsp + 96] + LONG $0x70244402 // add al, byte [rsp + 112] WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -24873,30 +26024,30 @@ LBB5_35: WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0xd008 // or al, dl WORD $0xc808 // or al, cl - LONG $0x24448841; BYTE $0x03 // mov byte [r12 + 3], al + LONG $0x03458841 // mov byte [r13 + 3], al LONG $0x00c68149; WORD $0x0001; BYTE $0x00 // add r14, 256 - LONG $0x04c48349 // add r12, 4 - LONG $0x2464894c; BYTE $0x08 // mov qword [rsp + 8], r12 + LONG $0x04c58349 // add r13, 4 + LONG $0x246c894c; BYTE $0x08 // mov qword [rsp + 8], r13 QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 - JNE LBB5_35 + JNE LBB5_36 QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] - QUAD $0x000000e024948b4c // mov r10, qword [rsp + 224] + QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] -LBB5_37: +LBB5_38: LONG $0x05e2c149 // shl r10, 5 WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB5_199 + JGE LBB5_198 WORD $0x894d; BYTE $0xf8 // mov r8, r15 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 WORD $0x014d; BYTE $0xfa // add r10, r15 - JE LBB5_39 + JE LBB5_40 WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0xff31 // xor edi, edi LONG $0x247c8b4c; BYTE $0x08 // mov r15, qword [rsp + 8] -LBB5_157: +LBB5_158: WORD $0x3b4d; BYTE $0x1e // cmp r11, qword [r14] WORD $0x950f; BYTE $0xd0 // setne al WORD $0xd8f6 // neg al @@ -24924,12 +26075,12 @@ LBB5_157: WORD $0xd330 // xor bl, dl LONG $0x371c8841 // mov byte [r15 + rsi], bl WORD $0x3949; BYTE $0xf9 // cmp r9, rdi - JNE LBB5_157 - JMP LBB5_40 + JNE LBB5_158 + JMP LBB5_41 -LBB5_56: +LBB5_57: WORD $0x068a // mov al, byte [rsi] - LONG $0x28244488 // mov byte [rsp + 40], al + LONG $0x40244488 // mov byte [rsp + 64], al LONG $0x1f578d4d // lea r10, [r15 + 31] WORD $0x854d; BYTE $0xff // test r15, r15 LONG $0xd7490f4d // cmovns r10, r15 @@ -24938,12 +26089,12 @@ LBB5_56: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB5_60 + JE LBB5_61 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d LONG $0x24548b48; BYTE $0x08 // mov rdx, qword [rsp + 8] -LBB5_58: - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] +LBB5_59: + LONG $0x244cb60f; BYTE $0x40 // movzx ecx, byte [rsp + 64] WORD $0x3a41; BYTE $0x0e // cmp cl, byte [r14] LONG $0x01768d4d // lea r14, [r14 + 1] WORD $0x950f; BYTE $0xd3 // setne bl @@ -24964,71 +26115,71 @@ LBB5_58: LONG $0x323c8840 // mov byte [rdx + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB5_58 + JNE LBB5_59 LONG $0x24448348; WORD $0x0108 // add qword [rsp + 8], 1 -LBB5_60: +LBB5_61: LONG $0x05fac149 // sar r10, 5 LONG $0x20ff8349 // cmp r15, 32 - JL LBB5_61 + JL LBB5_62 LONG $0x10fa8349 // cmp r10, 16 QUAD $0x000000a024bc894c // mov qword [rsp + 160], r15 - QUAD $0x000000f82494894c // mov qword [rsp + 248], r10 - JB LBB5_63 + QUAD $0x000001082494894c // mov qword [rsp + 264], r10 + JB LBB5_64 WORD $0x894c; BYTE $0xd0 // mov rax, r10 LONG $0x05e0c148 // shl rax, 5 WORD $0x014c; BYTE $0xf0 // add rax, r14 LONG $0x24443948; BYTE $0x08 // cmp qword [rsp + 8], rax - JAE LBB5_66 + JAE LBB5_67 LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] LONG $0x90048d4a // lea rax, [rax + 4*r10] WORD $0x3949; BYTE $0xc6 // cmp r14, rax - JAE LBB5_66 + JAE LBB5_67 -LBB5_63: +LBB5_64: WORD $0xc031 // xor eax, eax - QUAD $0x000000d824848948 // mov qword [rsp + 216], rax + QUAD $0x000000e824848948 // mov qword [rsp + 232], rax LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] - LONG $0x24448948; BYTE $0x58 // mov qword [rsp + 88], rax - -LBB5_69: - QUAD $0x000000d824942b4c // sub r10, qword [rsp + 216] - QUAD $0x000000e02494894c // mov qword [rsp + 224], r10 + LONG $0x24448948; BYTE $0x68 // mov qword [rsp + 104], rax LBB5_70: - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + QUAD $0x000000e824942b4c // sub r10, qword [rsp + 232] + QUAD $0x000000d02494894c // mov qword [rsp + 208], r10 + +LBB5_71: + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] LONG $0x1f463a41 // cmp al, byte [r14 + 31] LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x1e463a41 // cmp al, byte [r14 + 30] LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0x1d463a41 // cmp al, byte [r14 + 29] - LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] - LONG $0x1c463a41 // cmp al, byte [r14 + 28] LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] - LONG $0x1b463a41 // cmp al, byte [r14 + 27] + LONG $0x1c463a41 // cmp al, byte [r14 + 28] LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] + LONG $0x1b463a41 // cmp al, byte [r14 + 27] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x1a463a41 // cmp al, byte [r14 + 26] LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] LONG $0x19463a41 // cmp al, byte [r14 + 25] LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] LONG $0x17463a41 // cmp al, byte [r14 + 23] - QUAD $0x000000802494950f // setne byte [rsp + 128] - LONG $0x16463a41 // cmp al, byte [r14 + 22] LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] - LONG $0x15463a41 // cmp al, byte [r14 + 21] + LONG $0x16463a41 // cmp al, byte [r14 + 22] LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] + LONG $0x15463a41 // cmp al, byte [r14 + 21] + LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] LONG $0x14463a41 // cmp al, byte [r14 + 20] - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] LONG $0x13463a41 // cmp al, byte [r14 + 19] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + QUAD $0x000000802494950f // setne byte [rsp + 128] LONG $0x12463a41 // cmp al, byte [r14 + 18] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] + LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] LONG $0x11463a41 // cmp al, byte [r14 + 17] - LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] + LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] LONG $0x0f463a41 // cmp al, byte [r14 + 15] LONG $0xd2950f41 // setne r10b LONG $0x0e463a41 // cmp al, byte [r14 + 14] - QUAD $0x000000902494950f // setne byte [rsp + 144] + QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x0d463a41 // cmp al, byte [r14 + 13] LONG $0xd5950f41 // setne r13b LONG $0x0c463a41 // cmp al, byte [r14 + 12] @@ -25042,7 +26193,7 @@ LBB5_70: LONG $0x07463a41 // cmp al, byte [r14 + 7] LONG $0xd6950f40 // setne sil LONG $0x06463a41 // cmp al, byte [r14 + 6] - QUAD $0x000000c02494950f // setne byte [rsp + 192] + QUAD $0x000000b02494950f // setne byte [rsp + 176] LONG $0x05463a41 // cmp al, byte [r14 + 5] LONG $0xd1950f41 // setne r9b LONG $0x04463a41 // cmp al, byte [r14 + 4] @@ -25056,9 +26207,9 @@ LBB5_70: LONG $0x01463a41 // cmp al, byte [r14 + 1] WORD $0x950f; BYTE $0xd1 // setne cl LONG $0x08463a41 // cmp al, byte [r14 + 8] - QUAD $0x000000982494950f // setne byte [rsp + 152] + QUAD $0x000000c02494950f // setne byte [rsp + 192] LONG $0x10463a41 // cmp al, byte [r14 + 16] - QUAD $0x000000b02494950f // setne byte [rsp + 176] + QUAD $0x000000902494950f // setne byte [rsp + 144] LONG $0x18463a41 // cmp al, byte [r14 + 24] QUAD $0x000000882494950f // setne byte [rsp + 136] WORD $0xc900 // add cl, cl @@ -25071,15 +26222,15 @@ LBB5_70: WORD $0x0841; BYTE $0xf8 // or r8b, dil LONG $0x05e1c041 // shl r9b, 5 WORD $0x0845; BYTE $0xc1 // or r9b, r8b - QUAD $0x000000c02484b60f // movzx eax, byte [rsp + 192] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e6c040 // shl sil, 7 WORD $0x0840; BYTE $0xc6 // or sil, al WORD $0x0844; BYTE $0xce // or sil, r9b - LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] WORD $0x8840; BYTE $0x30 // mov byte [rax], sil WORD $0x0045; BYTE $0xdb // add r11b, r11b - QUAD $0x00000098249c0244 // add r11b, byte [rsp + 152] + QUAD $0x000000c0249c0244 // add r11b, byte [rsp + 192] WORD $0xe3c0; BYTE $0x02 // shl bl, 2 WORD $0x0844; BYTE $0xdb // or bl, r11b LONG $0x03e7c041 // shl r15b, 3 @@ -25088,35 +26239,35 @@ LBB5_70: WORD $0x0845; BYTE $0xfc // or r12b, r15b LONG $0x05e5c041 // shl r13b, 5 WORD $0x0845; BYTE $0xe5 // or r13b, r12b - QUAD $0x00000090248cb60f // movzx ecx, byte [rsp + 144] + QUAD $0x00000098248cb60f // movzx ecx, byte [rsp + 152] WORD $0xe1c0; BYTE $0x06 // shl cl, 6 LONG $0x07e2c041 // shl r10b, 7 WORD $0x0841; BYTE $0xca // or r10b, cl WORD $0x0845; BYTE $0xea // or r10b, r13b LONG $0x01508844 // mov byte [rax + 1], r10b - LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] + LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] WORD $0xc900 // add cl, cl - LONG $0xb0248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 176] + LONG $0x90248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 144] WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x68 // movzx ecx, byte [rsp + 104] + LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] WORD $0xe1c0; BYTE $0x02 // shl cl, 2 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] + QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] + LONG $0x244cb60f; BYTE $0x58 // movzx ecx, byte [rsp + 88] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x48 // movzx ecx, byte [rsp + 72] + LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + LONG $0x245cb60f; BYTE $0x48 // movzx ebx, byte [rsp + 72] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - QUAD $0x00000080248cb60f // movzx ecx, byte [rsp + 128] + LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0xd908 // or cl, bl WORD $0xd108 // or cl, dl @@ -25129,15 +26280,15 @@ LBB5_70: WORD $0xe1c0; BYTE $0x02 // shl cl, 2 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] + LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] + LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x40 // movzx ecx, byte [rsp + 64] + LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx @@ -25150,14 +26301,14 @@ LBB5_70: WORD $0x4888; BYTE $0x03 // mov byte [rax + 3], cl LONG $0x20c68349 // add r14, 32 LONG $0x04c08348 // add rax, 4 - LONG $0x24448948; BYTE $0x58 // mov qword [rsp + 88], rax - QUAD $0x000000e024848348; BYTE $0xff // add qword [rsp + 224], -1 - JNE LBB5_70 + LONG $0x24448948; BYTE $0x68 // mov qword [rsp + 104], rax + QUAD $0x000000d024848348; BYTE $0xff // add qword [rsp + 208], -1 + JNE LBB5_71 QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] - QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] - JMP LBB5_72 + QUAD $0x0000010824948b4c // mov r10, qword [rsp + 264] + JMP LBB5_73 -LBB5_144: +LBB5_145: WORD $0x8b44; BYTE $0x1e // mov r11d, dword [rsi] LONG $0x1f578d4d // lea r10, [r15 + 31] WORD $0x854d; BYTE $0xff // test r15, r15 @@ -25167,11 +26318,11 @@ LBB5_144: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB5_148 + JE LBB5_149 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d LONG $0x24448b4c; BYTE $0x08 // mov r8, qword [rsp + 8] -LBB5_146: +LBB5_147: WORD $0x3b45; BYTE $0x1e // cmp r11d, dword [r14] LONG $0x04768d4d // lea r14, [r14 + 4] WORD $0x950f; BYTE $0xd2 // setne dl @@ -25192,52 +26343,52 @@ LBB5_146: LONG $0x303c8841 // mov byte [r8 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB5_146 + JNE LBB5_147 LONG $0x24448348; WORD $0x0108 // add qword [rsp + 8], 1 -LBB5_148: +LBB5_149: LONG $0x05fac149 // sar r10, 5 LONG $0x20ff8349 // cmp r15, 32 - JL LBB5_152 + JL LBB5_153 QUAD $0x000000a024bc894c // mov qword [rsp + 160], r15 - QUAD $0x000000e02494894c // mov qword [rsp + 224], r10 + QUAD $0x000000d02494894c // mov qword [rsp + 208], r10 QUAD $0x000000a82494894c // mov qword [rsp + 168], r10 -LBB5_150: +LBB5_151: LONG $0x7c5e3b45 // cmp r11d, dword [r14 + 124] LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0x785e3b45 // cmp r11d, dword [r14 + 120] LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0x745e3b45 // cmp r11d, dword [r14 + 116] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] - LONG $0x705e3b45 // cmp r11d, dword [r14 + 112] LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] - LONG $0x6c5e3b45 // cmp r11d, dword [r14 + 108] + LONG $0x705e3b45 // cmp r11d, dword [r14 + 112] LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] + LONG $0x6c5e3b45 // cmp r11d, dword [r14 + 108] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x685e3b45 // cmp r11d, dword [r14 + 104] LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] LONG $0x645e3b45 // cmp r11d, dword [r14 + 100] LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] LONG $0x5c5e3b45 // cmp r11d, dword [r14 + 92] - LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] + LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] LONG $0x585e3b45 // cmp r11d, dword [r14 + 88] - QUAD $0x000000802494950f // setne byte [rsp + 128] + LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] LONG $0x545e3b45 // cmp r11d, dword [r14 + 84] - LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] + LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] LONG $0x505e3b45 // cmp r11d, dword [r14 + 80] - LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] + LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] LONG $0x4c5e3b45 // cmp r11d, dword [r14 + 76] - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] LONG $0x485e3b45 // cmp r11d, dword [r14 + 72] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + QUAD $0x000000802494950f // setne byte [rsp + 128] LONG $0x445e3b45 // cmp r11d, dword [r14 + 68] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] + LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] LONG $0x3c5e3b45 // cmp r11d, dword [r14 + 60] LONG $0xd0950f41 // setne r8b LONG $0x385e3b45 // cmp r11d, dword [r14 + 56] QUAD $0x000000882494950f // setne byte [rsp + 136] LONG $0x345e3b45 // cmp r11d, dword [r14 + 52] - QUAD $0x000000902494950f // setne byte [rsp + 144] + QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x305e3b45 // cmp r11d, dword [r14 + 48] LONG $0xd7950f40 // setne dil LONG $0x2c5e3b45 // cmp r11d, dword [r14 + 44] @@ -25257,24 +26408,24 @@ LBB5_150: LONG $0x0c5e3b45 // cmp r11d, dword [r14 + 12] LONG $0xd7950f41 // setne r15b LONG $0x085e3b45 // cmp r11d, dword [r14 + 8] - LONG $0xd5950f41 // setne r13b + LONG $0xd4950f41 // setne r12b WORD $0x3b45; BYTE $0x1e // cmp r11d, dword [r14] - QUAD $0x000000982494950f // setne byte [rsp + 152] + QUAD $0x000000c02494950f // setne byte [rsp + 192] LONG $0x045e3b45 // cmp r11d, dword [r14 + 4] - LONG $0xd4950f41 // setne r12b + LONG $0xd5950f41 // setne r13b LONG $0x205e3b45 // cmp r11d, dword [r14 + 32] - QUAD $0x000000c02494950f // setne byte [rsp + 192] - LONG $0x405e3b45 // cmp r11d, dword [r14 + 64] QUAD $0x000000b02494950f // setne byte [rsp + 176] + LONG $0x405e3b45 // cmp r11d, dword [r14 + 64] + QUAD $0x000000902494950f // setne byte [rsp + 144] LONG $0x605e3b45 // cmp r11d, dword [r14 + 96] - LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] - WORD $0x0045; BYTE $0xe4 // add r12b, r12b - QUAD $0x0000009824a40244 // add r12b, byte [rsp + 152] - LONG $0x02e5c041 // shl r13b, 2 - WORD $0x0845; BYTE $0xe5 // or r13b, r12b - LONG $0x24648b4c; BYTE $0x08 // mov r12, qword [rsp + 8] + LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + WORD $0x0045; BYTE $0xed // add r13b, r13b + QUAD $0x000000c024ac0244 // add r13b, byte [rsp + 192] + LONG $0x02e4c041 // shl r12b, 2 + WORD $0x0845; BYTE $0xec // or r12b, r13b + LONG $0x246c8b4c; BYTE $0x08 // mov r13, qword [rsp + 8] LONG $0x03e7c041 // shl r15b, 3 - WORD $0x0845; BYTE $0xef // or r15b, r13b + WORD $0x0845; BYTE $0xe7 // or r15b, r12b WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0x0844; BYTE $0xfa // or dl, r15b WORD $0xe1c0; BYTE $0x05 // shl cl, 5 @@ -25283,16 +26434,16 @@ LBB5_150: WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0xd808 // or al, bl WORD $0xc808 // or al, cl - LONG $0x24048841 // mov byte [r12], al + LONG $0x00458841 // mov byte [r13], al WORD $0x0040; BYTE $0xf6 // add sil, sil - QUAD $0x000000c024b40240 // add sil, byte [rsp + 192] + QUAD $0x000000b024b40240 // add sil, byte [rsp + 176] LONG $0x02e1c041 // shl r9b, 2 WORD $0x0841; BYTE $0xf1 // or r9b, sil LONG $0x03e2c041 // shl r10b, 3 WORD $0x0845; BYTE $0xca // or r10b, r9b LONG $0x04e7c040 // shl dil, 4 WORD $0x0844; BYTE $0xd7 // or dil, r10b - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0840; BYTE $0xf8 // or al, dil QUAD $0x00000088248cb60f // movzx ecx, byte [rsp + 136] @@ -25300,51 +26451,51 @@ LBB5_150: LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xc8 // or r8b, cl WORD $0x0841; BYTE $0xc0 // or r8b, al - LONG $0x24448845; BYTE $0x01 // mov byte [r12 + 1], r8b - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + LONG $0x01458845 // mov byte [r13 + 1], r8b + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] WORD $0xc000 // add al, al - LONG $0xb0248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 176] + LONG $0x90248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 144] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] + LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0xd008 // or al, dl WORD $0xc808 // or al, cl - LONG $0x24448841; BYTE $0x02 // mov byte [r12 + 2], al + LONG $0x02458841 // mov byte [r13 + 2], al LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xc000 // add al, al - LONG $0x60244402 // add al, byte [rsp + 96] + LONG $0x70244402 // add al, byte [rsp + 112] WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -25354,30 +26505,30 @@ LBB5_150: WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0xd008 // or al, dl WORD $0xc808 // or al, cl - LONG $0x24448841; BYTE $0x03 // mov byte [r12 + 3], al + LONG $0x03458841 // mov byte [r13 + 3], al LONG $0x80ee8349 // sub r14, -128 - LONG $0x04c48349 // add r12, 4 - LONG $0x2464894c; BYTE $0x08 // mov qword [rsp + 8], r12 + LONG $0x04c58349 // add r13, 4 + LONG $0x246c894c; BYTE $0x08 // mov qword [rsp + 8], r13 QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 - JNE LBB5_150 + JNE LBB5_151 QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] - QUAD $0x000000e024948b4c // mov r10, qword [rsp + 224] + QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] -LBB5_152: +LBB5_153: LONG $0x05e2c149 // shl r10, 5 WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB5_199 + JGE LBB5_198 WORD $0x894d; BYTE $0xf8 // mov r8, r15 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 WORD $0x014d; BYTE $0xfa // add r10, r15 - JNE LBB5_154 + JNE LBB5_155 LBB5_23: WORD $0xff31 // xor edi, edi JMP LBB5_24 -LBB5_99: +LBB5_100: LONG $0x1eb70f44 // movzx r11d, word [rsi] LONG $0x1f578d4d // lea r10, [r15 + 31] WORD $0x854d; BYTE $0xff // test r15, r15 @@ -25387,11 +26538,11 @@ LBB5_99: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB5_103 + JE LBB5_104 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d LONG $0x24548b48; BYTE $0x08 // mov rdx, qword [rsp + 8] -LBB5_101: +LBB5_102: LONG $0x1e3b4566 // cmp r11w, word [r14] LONG $0x02768d4d // lea r14, [r14 + 2] WORD $0x950f; BYTE $0xd3 // setne bl @@ -25412,72 +26563,72 @@ LBB5_101: LONG $0x323c8840 // mov byte [rdx + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB5_101 + JNE LBB5_102 LONG $0x24448348; WORD $0x0108 // add qword [rsp + 8], 1 -LBB5_103: +LBB5_104: LONG $0x05fac149 // sar r10, 5 LONG $0x20ff8349 // cmp r15, 32 - JL LBB5_104 + JL LBB5_105 LONG $0x08fa8349 // cmp r10, 8 LONG $0x245c8944; BYTE $0x10 // mov dword [rsp + 16], r11d QUAD $0x000000a024bc894c // mov qword [rsp + 160], r15 - QUAD $0x000000e02494894c // mov qword [rsp + 224], r10 - JB LBB5_106 + QUAD $0x000000d02494894c // mov qword [rsp + 208], r10 + JB LBB5_107 WORD $0x894c; BYTE $0xd0 // mov rax, r10 LONG $0x06e0c148 // shl rax, 6 WORD $0x014c; BYTE $0xf0 // add rax, r14 LONG $0x24443948; BYTE $0x08 // cmp qword [rsp + 8], rax - JAE LBB5_109 + JAE LBB5_110 LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] LONG $0x90048d4a // lea rax, [rax + 4*r10] WORD $0x394c; BYTE $0xf0 // cmp rax, r14 - JBE LBB5_109 + JBE LBB5_110 -LBB5_106: +LBB5_107: WORD $0xc031 // xor eax, eax - LONG $0x24448948; BYTE $0x18 // mov qword [rsp + 24], rax + LONG $0x24448948; BYTE $0x28 // mov qword [rsp + 40], rax LONG $0x24648b4c; BYTE $0x08 // mov r12, qword [rsp + 8] -LBB5_112: - LONG $0x24542b4c; BYTE $0x18 // sub r10, qword [rsp + 24] +LBB5_113: + LONG $0x24542b4c; BYTE $0x28 // sub r10, qword [rsp + 40] QUAD $0x000000a82494894c // mov qword [rsp + 168], r10 -LBB5_113: +LBB5_114: LONG $0x5e3b4566; BYTE $0x3e // cmp r11w, word [r14 + 62] LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x5e3b4566; BYTE $0x3c // cmp r11w, word [r14 + 60] LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0x5e3b4566; BYTE $0x3a // cmp r11w, word [r14 + 58] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] - LONG $0x5e3b4566; BYTE $0x38 // cmp r11w, word [r14 + 56] LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] - LONG $0x5e3b4566; BYTE $0x36 // cmp r11w, word [r14 + 54] + LONG $0x5e3b4566; BYTE $0x38 // cmp r11w, word [r14 + 56] LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] + LONG $0x5e3b4566; BYTE $0x36 // cmp r11w, word [r14 + 54] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x5e3b4566; BYTE $0x34 // cmp r11w, word [r14 + 52] LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] LONG $0x5e3b4566; BYTE $0x32 // cmp r11w, word [r14 + 50] LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] LONG $0x5e3b4566; BYTE $0x2e // cmp r11w, word [r14 + 46] - LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] - LONG $0x5e3b4566; BYTE $0x2c // cmp r11w, word [r14 + 44] LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] + LONG $0x5e3b4566; BYTE $0x2c // cmp r11w, word [r14 + 44] + LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] LONG $0x5e3b4566; BYTE $0x2a // cmp r11w, word [r14 + 42] - QUAD $0x000000802494950f // setne byte [rsp + 128] - LONG $0x5e3b4566; BYTE $0x28 // cmp r11w, word [r14 + 40] LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] + LONG $0x5e3b4566; BYTE $0x28 // cmp r11w, word [r14 + 40] + LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] LONG $0x5e3b4566; BYTE $0x26 // cmp r11w, word [r14 + 38] - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] LONG $0x5e3b4566; BYTE $0x24 // cmp r11w, word [r14 + 36] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + QUAD $0x000000802494950f // setne byte [rsp + 128] LONG $0x5e3b4566; BYTE $0x22 // cmp r11w, word [r14 + 34] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] + LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] LONG $0x5e3b4566; BYTE $0x1e // cmp r11w, word [r14 + 30] LONG $0xd1950f41 // setne r9b LONG $0x5e3b4566; BYTE $0x1c // cmp r11w, word [r14 + 28] QUAD $0x000000882494950f // setne byte [rsp + 136] LONG $0x5e3b4566; BYTE $0x1a // cmp r11w, word [r14 + 26] - LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] + LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] LONG $0x5e3b4566; BYTE $0x18 // cmp r11w, word [r14 + 24] LONG $0xd5950f41 // setne r13b LONG $0x5e3b4566; BYTE $0x16 // cmp r11w, word [r14 + 22] @@ -25492,7 +26643,7 @@ LBB5_113: WORD $0x950f; BYTE $0xd2 // setne dl LONG $0x1024448b // mov eax, dword [rsp + 16] LONG $0x463b4166; BYTE $0x0c // cmp ax, word [r14 + 12] - QUAD $0x000000b02494950f // setne byte [rsp + 176] + QUAD $0x000000902494950f // setne byte [rsp + 144] LONG $0x1024448b // mov eax, dword [rsp + 16] LONG $0x463b4166; BYTE $0x0a // cmp ax, word [r14 + 10] LONG $0xd0950f41 // setne r8b @@ -25507,7 +26658,7 @@ LBB5_113: WORD $0x950f; BYTE $0xd1 // setne cl LONG $0x1024448b // mov eax, dword [rsp + 16] LONG $0x063b4166 // cmp ax, word [r14] - QUAD $0x000000982494950f // setne byte [rsp + 152] + QUAD $0x000000c02494950f // setne byte [rsp + 192] LONG $0x1024448b // mov eax, dword [rsp + 16] LONG $0x463b4166; BYTE $0x02 // cmp ax, word [r14 + 2] WORD $0x950f; BYTE $0xd0 // setne al @@ -25515,15 +26666,15 @@ LBB5_113: LONG $0x24648b44; BYTE $0x10 // mov r12d, dword [rsp + 16] LONG $0x663b4566; BYTE $0x10 // cmp r12w, word [r14 + 16] WORD $0x8949; BYTE $0xdc // mov r12, rbx - QUAD $0x000000c02494950f // setne byte [rsp + 192] + QUAD $0x000000b02494950f // setne byte [rsp + 176] LONG $0x10245c8b // mov ebx, dword [rsp + 16] LONG $0x5e3b4166; BYTE $0x20 // cmp bx, word [r14 + 32] - QUAD $0x000000902494950f // setne byte [rsp + 144] + QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x10245c8b // mov ebx, dword [rsp + 16] LONG $0x5e3b4166; BYTE $0x30 // cmp bx, word [r14 + 48] WORD $0x950f; BYTE $0xd3 // setne bl WORD $0xc000 // add al, al - LONG $0x98248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 152] + LONG $0xc0248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 192] WORD $0xe1c0; BYTE $0x02 // shl cl, 2 WORD $0xc108 // or cl, al LONG $0x03e6c040 // shl sil, 3 @@ -25532,14 +26683,14 @@ LBB5_113: WORD $0x0840; BYTE $0xf7 // or dil, sil LONG $0x05e0c041 // shl r8b, 5 WORD $0x0841; BYTE $0xf8 // or r8b, dil - QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe2c0; BYTE $0x07 // shl dl, 7 WORD $0xc208 // or dl, al WORD $0x0844; BYTE $0xc2 // or dl, r8b LONG $0x24148841 // mov byte [r12], dl WORD $0x0045; BYTE $0xd2 // add r10b, r10b - QUAD $0x000000c024940244 // add r10b, byte [rsp + 192] + QUAD $0x000000b024940244 // add r10b, byte [rsp + 176] LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xd3 // or r11b, r10b LONG $0x03e7c041 // shl r15b, 3 @@ -25547,7 +26698,7 @@ LBB5_113: LONG $0x245c8b44; BYTE $0x10 // mov r11d, dword [rsp + 16] LONG $0x04e5c041 // shl r13b, 4 WORD $0x0845; BYTE $0xfd // or r13b, r15b - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xe8 // or al, r13b QUAD $0x00000088248cb60f // movzx ecx, byte [rsp + 136] @@ -25556,29 +26707,29 @@ LBB5_113: WORD $0x0841; BYTE $0xc9 // or r9b, cl WORD $0x0841; BYTE $0xc1 // or r9b, al LONG $0x244c8845; BYTE $0x01 // mov byte [r12 + 1], r9b - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] WORD $0xc000 // add al, al - LONG $0x90248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 144] + LONG $0x98248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 152] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] + LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0xd008 // or al, dl WORD $0xc808 // or al, cl @@ -25591,15 +26742,15 @@ LBB5_113: WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -25613,12 +26764,12 @@ LBB5_113: LONG $0x40c68349 // add r14, 64 LONG $0x04c48349 // add r12, 4 QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 - JNE LBB5_113 + JNE LBB5_114 QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] - QUAD $0x000000e024948b4c // mov r10, qword [rsp + 224] - JMP LBB5_115 + QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] + JMP LBB5_116 -LBB5_122: +LBB5_123: LONG $0x1eb70f44 // movzx r11d, word [rsi] LONG $0x1f578d4d // lea r10, [r15 + 31] WORD $0x854d; BYTE $0xff // test r15, r15 @@ -25628,11 +26779,11 @@ LBB5_122: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB5_126 + JE LBB5_127 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d LONG $0x24548b48; BYTE $0x08 // mov rdx, qword [rsp + 8] -LBB5_124: +LBB5_125: LONG $0x1e3b4566 // cmp r11w, word [r14] LONG $0x02768d4d // lea r14, [r14 + 2] WORD $0x950f; BYTE $0xd3 // setne bl @@ -25653,72 +26804,72 @@ LBB5_124: LONG $0x323c8840 // mov byte [rdx + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB5_124 + JNE LBB5_125 LONG $0x24448348; WORD $0x0108 // add qword [rsp + 8], 1 -LBB5_126: +LBB5_127: LONG $0x05fac149 // sar r10, 5 LONG $0x20ff8349 // cmp r15, 32 - JL LBB5_127 + JL LBB5_128 LONG $0x08fa8349 // cmp r10, 8 LONG $0x245c8944; BYTE $0x10 // mov dword [rsp + 16], r11d QUAD $0x000000a024bc894c // mov qword [rsp + 160], r15 - QUAD $0x000000e02494894c // mov qword [rsp + 224], r10 - JB LBB5_129 + QUAD $0x000000d02494894c // mov qword [rsp + 208], r10 + JB LBB5_130 WORD $0x894c; BYTE $0xd0 // mov rax, r10 LONG $0x06e0c148 // shl rax, 6 WORD $0x014c; BYTE $0xf0 // add rax, r14 LONG $0x24443948; BYTE $0x08 // cmp qword [rsp + 8], rax - JAE LBB5_132 + JAE LBB5_133 LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] LONG $0x90048d4a // lea rax, [rax + 4*r10] WORD $0x394c; BYTE $0xf0 // cmp rax, r14 - JBE LBB5_132 + JBE LBB5_133 -LBB5_129: +LBB5_130: WORD $0xc031 // xor eax, eax - LONG $0x24448948; BYTE $0x18 // mov qword [rsp + 24], rax + LONG $0x24448948; BYTE $0x28 // mov qword [rsp + 40], rax LONG $0x24648b4c; BYTE $0x08 // mov r12, qword [rsp + 8] -LBB5_135: - LONG $0x24542b4c; BYTE $0x18 // sub r10, qword [rsp + 24] +LBB5_136: + LONG $0x24542b4c; BYTE $0x28 // sub r10, qword [rsp + 40] QUAD $0x000000a82494894c // mov qword [rsp + 168], r10 -LBB5_136: +LBB5_137: LONG $0x5e3b4566; BYTE $0x3e // cmp r11w, word [r14 + 62] LONG $0x2454950f; BYTE $0x08 // setne byte [rsp + 8] LONG $0x5e3b4566; BYTE $0x3c // cmp r11w, word [r14 + 60] LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0x5e3b4566; BYTE $0x3a // cmp r11w, word [r14 + 58] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] - LONG $0x5e3b4566; BYTE $0x38 // cmp r11w, word [r14 + 56] LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] - LONG $0x5e3b4566; BYTE $0x36 // cmp r11w, word [r14 + 54] + LONG $0x5e3b4566; BYTE $0x38 // cmp r11w, word [r14 + 56] LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] + LONG $0x5e3b4566; BYTE $0x36 // cmp r11w, word [r14 + 54] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0x5e3b4566; BYTE $0x34 // cmp r11w, word [r14 + 52] LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] LONG $0x5e3b4566; BYTE $0x32 // cmp r11w, word [r14 + 50] LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] LONG $0x5e3b4566; BYTE $0x2e // cmp r11w, word [r14 + 46] - LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] - LONG $0x5e3b4566; BYTE $0x2c // cmp r11w, word [r14 + 44] LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] + LONG $0x5e3b4566; BYTE $0x2c // cmp r11w, word [r14 + 44] + LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] LONG $0x5e3b4566; BYTE $0x2a // cmp r11w, word [r14 + 42] - QUAD $0x000000802494950f // setne byte [rsp + 128] - LONG $0x5e3b4566; BYTE $0x28 // cmp r11w, word [r14 + 40] LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] + LONG $0x5e3b4566; BYTE $0x28 // cmp r11w, word [r14 + 40] + LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] LONG $0x5e3b4566; BYTE $0x26 // cmp r11w, word [r14 + 38] - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] LONG $0x5e3b4566; BYTE $0x24 // cmp r11w, word [r14 + 36] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + QUAD $0x000000802494950f // setne byte [rsp + 128] LONG $0x5e3b4566; BYTE $0x22 // cmp r11w, word [r14 + 34] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] + LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] LONG $0x5e3b4566; BYTE $0x1e // cmp r11w, word [r14 + 30] LONG $0xd1950f41 // setne r9b LONG $0x5e3b4566; BYTE $0x1c // cmp r11w, word [r14 + 28] QUAD $0x000000882494950f // setne byte [rsp + 136] LONG $0x5e3b4566; BYTE $0x1a // cmp r11w, word [r14 + 26] - LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] + LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] LONG $0x5e3b4566; BYTE $0x18 // cmp r11w, word [r14 + 24] LONG $0xd5950f41 // setne r13b LONG $0x5e3b4566; BYTE $0x16 // cmp r11w, word [r14 + 22] @@ -25733,7 +26884,7 @@ LBB5_136: WORD $0x950f; BYTE $0xd2 // setne dl LONG $0x1024448b // mov eax, dword [rsp + 16] LONG $0x463b4166; BYTE $0x0c // cmp ax, word [r14 + 12] - QUAD $0x000000b02494950f // setne byte [rsp + 176] + QUAD $0x000000902494950f // setne byte [rsp + 144] LONG $0x1024448b // mov eax, dword [rsp + 16] LONG $0x463b4166; BYTE $0x0a // cmp ax, word [r14 + 10] LONG $0xd0950f41 // setne r8b @@ -25748,7 +26899,7 @@ LBB5_136: WORD $0x950f; BYTE $0xd1 // setne cl LONG $0x1024448b // mov eax, dword [rsp + 16] LONG $0x063b4166 // cmp ax, word [r14] - QUAD $0x000000982494950f // setne byte [rsp + 152] + QUAD $0x000000c02494950f // setne byte [rsp + 192] LONG $0x1024448b // mov eax, dword [rsp + 16] LONG $0x463b4166; BYTE $0x02 // cmp ax, word [r14 + 2] WORD $0x950f; BYTE $0xd0 // setne al @@ -25756,15 +26907,15 @@ LBB5_136: LONG $0x24648b44; BYTE $0x10 // mov r12d, dword [rsp + 16] LONG $0x663b4566; BYTE $0x10 // cmp r12w, word [r14 + 16] WORD $0x8949; BYTE $0xdc // mov r12, rbx - QUAD $0x000000c02494950f // setne byte [rsp + 192] + QUAD $0x000000b02494950f // setne byte [rsp + 176] LONG $0x10245c8b // mov ebx, dword [rsp + 16] LONG $0x5e3b4166; BYTE $0x20 // cmp bx, word [r14 + 32] - QUAD $0x000000902494950f // setne byte [rsp + 144] + QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x10245c8b // mov ebx, dword [rsp + 16] LONG $0x5e3b4166; BYTE $0x30 // cmp bx, word [r14 + 48] WORD $0x950f; BYTE $0xd3 // setne bl WORD $0xc000 // add al, al - LONG $0x98248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 152] + LONG $0xc0248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 192] WORD $0xe1c0; BYTE $0x02 // shl cl, 2 WORD $0xc108 // or cl, al LONG $0x03e6c040 // shl sil, 3 @@ -25773,14 +26924,14 @@ LBB5_136: WORD $0x0840; BYTE $0xf7 // or dil, sil LONG $0x05e0c041 // shl r8b, 5 WORD $0x0841; BYTE $0xf8 // or r8b, dil - QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe2c0; BYTE $0x07 // shl dl, 7 WORD $0xc208 // or dl, al WORD $0x0844; BYTE $0xc2 // or dl, r8b LONG $0x24148841 // mov byte [r12], dl WORD $0x0045; BYTE $0xd2 // add r10b, r10b - QUAD $0x000000c024940244 // add r10b, byte [rsp + 192] + QUAD $0x000000b024940244 // add r10b, byte [rsp + 176] LONG $0x02e3c041 // shl r11b, 2 WORD $0x0845; BYTE $0xd3 // or r11b, r10b LONG $0x03e7c041 // shl r15b, 3 @@ -25788,7 +26939,7 @@ LBB5_136: LONG $0x245c8b44; BYTE $0x10 // mov r11d, dword [rsp + 16] LONG $0x04e5c041 // shl r13b, 4 WORD $0x0845; BYTE $0xfd // or r13b, r15b - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0844; BYTE $0xe8 // or al, r13b QUAD $0x00000088248cb60f // movzx ecx, byte [rsp + 136] @@ -25797,29 +26948,29 @@ LBB5_136: WORD $0x0841; BYTE $0xc9 // or r9b, cl WORD $0x0841; BYTE $0xc1 // or r9b, al LONG $0x244c8845; BYTE $0x01 // mov byte [r12 + 1], r9b - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] WORD $0xc000 // add al, al - LONG $0x90248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 144] + LONG $0x98248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 152] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] + LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0xd008 // or al, dl WORD $0xc808 // or al, cl @@ -25832,15 +26983,15 @@ LBB5_136: WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -25854,12 +27005,12 @@ LBB5_136: LONG $0x40c68349 // add r14, 64 LONG $0x04c48349 // add r12, 4 QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 - JNE LBB5_136 + JNE LBB5_137 QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] - QUAD $0x000000e024948b4c // mov r10, qword [rsp + 224] - JMP LBB5_138 + QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] + JMP LBB5_139 -LBB5_158: +LBB5_159: WORD $0x8b4c; BYTE $0x1e // mov r11, qword [rsi] LONG $0x1f578d4d // lea r10, [r15 + 31] WORD $0x854d; BYTE $0xff // test r15, r15 @@ -25869,11 +27020,11 @@ LBB5_158: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB5_162 + JE LBB5_163 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d LONG $0x24448b4c; BYTE $0x08 // mov r8, qword [rsp + 8] -LBB5_160: +LBB5_161: WORD $0x3b4d; BYTE $0x1e // cmp r11, qword [r14] LONG $0x08768d4d // lea r14, [r14 + 8] WORD $0x950f; BYTE $0xd2 // setne dl @@ -25894,52 +27045,52 @@ LBB5_160: LONG $0x303c8841 // mov byte [r8 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB5_160 + JNE LBB5_161 LONG $0x24448348; WORD $0x0108 // add qword [rsp + 8], 1 -LBB5_162: +LBB5_163: LONG $0x05fac149 // sar r10, 5 LONG $0x20ff8349 // cmp r15, 32 - JL LBB5_166 + JL LBB5_167 QUAD $0x000000a024bc894c // mov qword [rsp + 160], r15 - QUAD $0x000000e02494894c // mov qword [rsp + 224], r10 + QUAD $0x000000d02494894c // mov qword [rsp + 208], r10 QUAD $0x000000a82494894c // mov qword [rsp + 168], r10 -LBB5_164: +LBB5_165: LONG $0xf89e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 248] LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] LONG $0xf09e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 240] LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] LONG $0xe89e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 232] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] - LONG $0xe09e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 224] LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] - LONG $0xd89e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 216] + LONG $0xe09e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 224] LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] + LONG $0xd89e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 216] + LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] LONG $0xd09e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 208] LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] LONG $0xc89e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 200] LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] LONG $0xb89e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 184] - LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] + LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] LONG $0xb09e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 176] - QUAD $0x000000802494950f // setne byte [rsp + 128] + LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] LONG $0xa89e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 168] - LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] + LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] LONG $0xa09e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 160] - LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] + LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] LONG $0x989e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 152] - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] LONG $0x909e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 144] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + QUAD $0x000000802494950f // setne byte [rsp + 128] LONG $0x889e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 136] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] + LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] LONG $0x785e3b4d // cmp r11, qword [r14 + 120] LONG $0xd0950f41 // setne r8b LONG $0x705e3b4d // cmp r11, qword [r14 + 112] QUAD $0x000000882494950f // setne byte [rsp + 136] LONG $0x685e3b4d // cmp r11, qword [r14 + 104] - QUAD $0x000000902494950f // setne byte [rsp + 144] + QUAD $0x000000982494950f // setne byte [rsp + 152] LONG $0x605e3b4d // cmp r11, qword [r14 + 96] LONG $0xd7950f40 // setne dil LONG $0x585e3b4d // cmp r11, qword [r14 + 88] @@ -25959,24 +27110,24 @@ LBB5_164: LONG $0x185e3b4d // cmp r11, qword [r14 + 24] LONG $0xd7950f41 // setne r15b LONG $0x105e3b4d // cmp r11, qword [r14 + 16] - LONG $0xd5950f41 // setne r13b + LONG $0xd4950f41 // setne r12b WORD $0x3b4d; BYTE $0x1e // cmp r11, qword [r14] - QUAD $0x000000982494950f // setne byte [rsp + 152] + QUAD $0x000000c02494950f // setne byte [rsp + 192] LONG $0x085e3b4d // cmp r11, qword [r14 + 8] - LONG $0xd4950f41 // setne r12b + LONG $0xd5950f41 // setne r13b LONG $0x405e3b4d // cmp r11, qword [r14 + 64] - QUAD $0x000000c02494950f // setne byte [rsp + 192] - LONG $0x809e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 128] QUAD $0x000000b02494950f // setne byte [rsp + 176] + LONG $0x809e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 128] + QUAD $0x000000902494950f // setne byte [rsp + 144] LONG $0xc09e3b4d; WORD $0x0000; BYTE $0x00 // cmp r11, qword [r14 + 192] - LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] - WORD $0x0045; BYTE $0xe4 // add r12b, r12b - QUAD $0x0000009824a40244 // add r12b, byte [rsp + 152] - LONG $0x02e5c041 // shl r13b, 2 - WORD $0x0845; BYTE $0xe5 // or r13b, r12b - LONG $0x24648b4c; BYTE $0x08 // mov r12, qword [rsp + 8] + LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + WORD $0x0045; BYTE $0xed // add r13b, r13b + QUAD $0x000000c024ac0244 // add r13b, byte [rsp + 192] + LONG $0x02e4c041 // shl r12b, 2 + WORD $0x0845; BYTE $0xec // or r12b, r13b + LONG $0x246c8b4c; BYTE $0x08 // mov r13, qword [rsp + 8] LONG $0x03e7c041 // shl r15b, 3 - WORD $0x0845; BYTE $0xef // or r15b, r13b + WORD $0x0845; BYTE $0xe7 // or r15b, r12b WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0x0844; BYTE $0xfa // or dl, r15b WORD $0xe1c0; BYTE $0x05 // shl cl, 5 @@ -25985,16 +27136,16 @@ LBB5_164: WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0xd808 // or al, bl WORD $0xc808 // or al, cl - LONG $0x24048841 // mov byte [r12], al + LONG $0x00458841 // mov byte [r13], al WORD $0x0040; BYTE $0xf6 // add sil, sil - QUAD $0x000000c024b40240 // add sil, byte [rsp + 192] + QUAD $0x000000b024b40240 // add sil, byte [rsp + 176] LONG $0x02e1c041 // shl r9b, 2 WORD $0x0841; BYTE $0xf1 // or r9b, sil LONG $0x03e2c041 // shl r10b, 3 WORD $0x0845; BYTE $0xca // or r10b, r9b LONG $0x04e7c040 // shl dil, 4 WORD $0x0844; BYTE $0xd7 // or dil, r10b - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + QUAD $0x000000982484b60f // movzx eax, byte [rsp + 152] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0840; BYTE $0xf8 // or al, dil QUAD $0x00000088248cb60f // movzx ecx, byte [rsp + 136] @@ -26002,51 +27153,51 @@ LBB5_164: LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xc8 // or r8b, cl WORD $0x0841; BYTE $0xc0 // or r8b, al - LONG $0x24448845; BYTE $0x01 // mov byte [r12 + 1], r8b - LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + LONG $0x01458845 // mov byte [r13 + 1], r8b + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] WORD $0xc000 // add al, al - LONG $0xb0248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 176] + LONG $0x90248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 144] WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] + LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0xd008 // or al, dl WORD $0xc808 // or al, cl - LONG $0x24448841; BYTE $0x02 // mov byte [r12 + 2], al + LONG $0x02458841 // mov byte [r13 + 2], al LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xc000 // add al, al - LONG $0x60244402 // add al, byte [rsp + 96] + LONG $0x70244402 // add al, byte [rsp + 112] WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xc808 // or al, cl WORD $0xc189 // mov ecx, eax @@ -26056,30 +27207,30 @@ LBB5_164: WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0xd008 // or al, dl WORD $0xc808 // or al, cl - LONG $0x24448841; BYTE $0x03 // mov byte [r12 + 3], al + LONG $0x03458841 // mov byte [r13 + 3], al LONG $0x00c68149; WORD $0x0001; BYTE $0x00 // add r14, 256 - LONG $0x04c48349 // add r12, 4 - LONG $0x2464894c; BYTE $0x08 // mov qword [rsp + 8], r12 + LONG $0x04c58349 // add r13, 4 + LONG $0x246c894c; BYTE $0x08 // mov qword [rsp + 8], r13 QUAD $0x000000a824848348; BYTE $0xff // add qword [rsp + 168], -1 - JNE LBB5_164 + JNE LBB5_165 QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] - QUAD $0x000000e024948b4c // mov r10, qword [rsp + 224] + QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] -LBB5_166: +LBB5_167: LONG $0x05e2c149 // shl r10, 5 WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB5_199 + JGE LBB5_198 WORD $0x894d; BYTE $0xf8 // mov r8, r15 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 WORD $0x014d; BYTE $0xfa // add r10, r15 - JNE LBB5_168 + JNE LBB5_169 -LBB5_39: +LBB5_40: WORD $0xff31 // xor edi, edi - JMP LBB5_40 + JMP LBB5_41 -LBB5_170: +LBB5_171: LONG $0x1f578d4d // lea r10, [r15 + 31] WORD $0x854d; BYTE $0xff // test r15, r15 LONG $0xd7490f4d // cmovns r10, r15 @@ -26089,14 +27240,16 @@ LBB5_170: WORD $0xe083; BYTE $0xf8 // and eax, -8 LONG $0x06100ff3 // movss xmm0, dword [rsi] WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB5_174 + JE LBB5_175 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d LONG $0x24448b4c; BYTE $0x08 // mov r8, qword [rsp + 8] -LBB5_172: +LBB5_173: LONG $0x062e0f41 // ucomiss xmm0, dword [r14] LONG $0x04768d4d // lea r14, [r14 + 4] + WORD $0x9a0f; BYTE $0xd1 // setp cl WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xca08 // or dl, cl WORD $0xdaf6 // neg dl LONG $0x07708d48 // lea rsi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax @@ -26114,245 +27267,336 @@ LBB5_172: LONG $0x303c8841 // mov byte [r8 + rsi], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB5_172 + JNE LBB5_173 LONG $0x24448348; WORD $0x0108 // add qword [rsp + 8], 1 -LBB5_174: +LBB5_175: LONG $0x05fac149 // sar r10, 5 LONG $0x20ff8349 // cmp r15, 32 - JL LBB5_175 + JL LBB5_176 LONG $0x04fa8349 // cmp r10, 4 - JB LBB5_177 + JB LBB5_178 WORD $0x894c; BYTE $0xd0 // mov rax, r10 LONG $0x07e0c148 // shl rax, 7 WORD $0x014c; BYTE $0xf0 // add rax, r14 LONG $0x24443948; BYTE $0x08 // cmp qword [rsp + 8], rax - JAE LBB5_180 + JAE LBB5_181 LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] LONG $0x90048d4a // lea rax, [rax + 4*r10] WORD $0x394c; BYTE $0xf0 // cmp rax, r14 - JBE LBB5_180 + JBE LBB5_181 -LBB5_177: +LBB5_178: WORD $0x3145; BYTE $0xc0 // xor r8d, r8d WORD $0x894c; BYTE $0xf3 // mov rbx, r14 - LONG $0x245c8b4c; BYTE $0x08 // mov r11, qword [rsp + 8] + LONG $0x24648b4c; BYTE $0x08 // mov r12, qword [rsp + 8] -LBB5_183: - LONG $0x245c894c; BYTE $0x08 // mov qword [rsp + 8], r11 +LBB5_184: + LONG $0x2464894c; BYTE $0x10 // mov qword [rsp + 16], r12 QUAD $0x000000a024bc894c // mov qword [rsp + 160], r15 - QUAD $0x000000a82494894c // mov qword [rsp + 168], r10 + QUAD $0x000000f02494894c // mov qword [rsp + 240], r10 WORD $0x294d; BYTE $0xc2 // sub r10, r8 - QUAD $0x000000982494894c // mov qword [rsp + 152], r10 + QUAD $0x000000d02494894c // mov qword [rsp + 208], r10 -LBB5_184: +LBB5_185: WORD $0x2e0f; BYTE $0x03 // ucomiss xmm0, dword [rbx] - QUAD $0x000000c02494950f // setne byte [rsp + 192] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + WORD $0x8941; BYTE $0xcd // mov r13d, ecx LONG $0x04432e0f // ucomiss xmm0, dword [rbx + 4] - LONG $0xd0950f41 // setne r8b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xc208 // or dl, al LONG $0x08432e0f // ucomiss xmm0, dword [rbx + 8] - LONG $0xd6950f41 // setne r14b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x18244c88 // mov byte [rsp + 24], cl LONG $0x0c432e0f // ucomiss xmm0, dword [rbx + 12] - LONG $0xd5950f41 // setne r13b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x20244c88 // mov byte [rsp + 32], cl LONG $0x10432e0f // ucomiss xmm0, dword [rbx + 16] - LONG $0x2454950f; BYTE $0x68 // setne byte [rsp + 104] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x40244c88 // mov byte [rsp + 64], cl LONG $0x14432e0f // ucomiss xmm0, dword [rbx + 20] - LONG $0x2454950f; BYTE $0x50 // setne byte [rsp + 80] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x38244c88 // mov byte [rsp + 56], cl LONG $0x18432e0f // ucomiss xmm0, dword [rbx + 24] - WORD $0x950f; BYTE $0xd0 // setne al + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x30244c88 // mov byte [rsp + 48], cl LONG $0x1c432e0f // ucomiss xmm0, dword [rbx + 28] - LONG $0xd3950f41 // setne r11b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x08244c88 // mov byte [rsp + 8], cl LONG $0x20432e0f // ucomiss xmm0, dword [rbx + 32] - QUAD $0x000000902494950f // setne byte [rsp + 144] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x28244c88 // mov byte [rsp + 40], cl LONG $0x24432e0f // ucomiss xmm0, dword [rbx + 36] - WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x50244c88 // mov byte [rsp + 80], cl LONG $0x28432e0f // ucomiss xmm0, dword [rbx + 40] - LONG $0xd6950f40 // setne sil + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x48244c88 // mov byte [rsp + 72], cl LONG $0x2c432e0f // ucomiss xmm0, dword [rbx + 44] - LONG $0xd7950f40 // setne dil + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x68244c88 // mov byte [rsp + 104], cl LONG $0x30432e0f // ucomiss xmm0, dword [rbx + 48] - LONG $0xd2950f41 // setne r10b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x60244c88 // mov byte [rsp + 96], cl LONG $0x34432e0f // ucomiss xmm0, dword [rbx + 52] - LONG $0xd4950f41 // setne r12b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x80248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 128], cl LONG $0x38432e0f // ucomiss xmm0, dword [rbx + 56] - QUAD $0x000000882494950f // setne byte [rsp + 136] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x70244c88 // mov byte [rsp + 112], cl LONG $0x3c432e0f // ucomiss xmm0, dword [rbx + 60] - LONG $0xd1950f41 // setne r9b + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x78244c88 // mov byte [rsp + 120], cl LONG $0x40432e0f // ucomiss xmm0, dword [rbx + 64] - LONG $0x2454950f; BYTE $0x78 // setne byte [rsp + 120] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x58244c88 // mov byte [rsp + 88], cl LONG $0x44432e0f // ucomiss xmm0, dword [rbx + 68] - QUAD $0x000000b02494950f // setne byte [rsp + 176] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd4950f41 // setne r12b + WORD $0x0841; BYTE $0xc4 // or r12b, al LONG $0x48432e0f // ucomiss xmm0, dword [rbx + 72] - LONG $0x2454950f; BYTE $0x60 // setne byte [rsp + 96] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x88248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 136], cl LONG $0x4c432e0f // ucomiss xmm0, dword [rbx + 76] - LONG $0x2454950f; BYTE $0x70 // setne byte [rsp + 112] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x98248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 152], cl LONG $0x50432e0f // ucomiss xmm0, dword [rbx + 80] - LONG $0x2454950f; BYTE $0x48 // setne byte [rsp + 72] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0x90248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 144], cl LONG $0x54432e0f // ucomiss xmm0, dword [rbx + 84] - QUAD $0x000000802494950f // setne byte [rsp + 128] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xc0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 192], cl LONG $0x58432e0f // ucomiss xmm0, dword [rbx + 88] - LONG $0x2454950f; BYTE $0x58 // setne byte [rsp + 88] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd6950f41 // setne r14b + WORD $0x0841; BYTE $0xc6 // or r14b, al LONG $0x5c432e0f // ucomiss xmm0, dword [rbx + 92] - LONG $0xd7950f41 // setne r15b + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd0950f41 // setne r8b + WORD $0x0841; BYTE $0xc0 // or r8b, al LONG $0x60432e0f // ucomiss xmm0, dword [rbx + 96] - LONG $0x2454950f; BYTE $0x20 // setne byte [rsp + 32] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xb0248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 176], cl LONG $0x64432e0f // ucomiss xmm0, dword [rbx + 100] - LONG $0x2454950f; BYTE $0x30 // setne byte [rsp + 48] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd3950f41 // setne r11b + WORD $0x0841; BYTE $0xc3 // or r11b, al LONG $0x68432e0f // ucomiss xmm0, dword [rbx + 104] - LONG $0x2454950f; BYTE $0x38 // setne byte [rsp + 56] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd2950f41 // setne r10b + WORD $0x0841; BYTE $0xc2 // or r10b, al LONG $0x6c432e0f // ucomiss xmm0, dword [rbx + 108] - LONG $0x2454950f; BYTE $0x18 // setne byte [rsp + 24] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd1950f41 // setne r9b + WORD $0x0841; BYTE $0xc1 // or r9b, al LONG $0x70432e0f // ucomiss xmm0, dword [rbx + 112] - LONG $0x2454950f; BYTE $0x28 // setne byte [rsp + 40] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f41 // setne r15b + WORD $0x0841; BYTE $0xc7 // or r15b, al LONG $0x74432e0f // ucomiss xmm0, dword [rbx + 116] - LONG $0x2454950f; BYTE $0x40 // setne byte [rsp + 64] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd1 // setne cl + WORD $0xc108 // or cl, al + LONG $0xa8248c88; WORD $0x0000; BYTE $0x00 // mov byte [rsp + 168], cl LONG $0x78432e0f // ucomiss xmm0, dword [rbx + 120] - LONG $0x2454950f; BYTE $0x10 // setne byte [rsp + 16] + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd7950f40 // setne dil + WORD $0x0840; BYTE $0xc7 // or dil, al LONG $0x7c432e0f // ucomiss xmm0, dword [rbx + 124] - WORD $0x950f; BYTE $0xd1 // setne cl - WORD $0x0045; BYTE $0xc0 // add r8b, r8b - QUAD $0x000000c024840244 // add r8b, byte [rsp + 192] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e3c041 // shl r11b, 7 - WORD $0x0841; BYTE $0xc3 // or r11b, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0845; BYTE $0xc6 // or r14b, r8b + WORD $0x9a0f; BYTE $0xd0 // setp al + LONG $0xd6950f40 // setne sil + WORD $0x0840; BYTE $0xc6 // or sil, al WORD $0xd200 // add dl, dl - LONG $0x90249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 144] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xf5 // or r13b, r14b - LONG $0x02e6c040 // shl sil, 2 - WORD $0x0840; BYTE $0xd6 // or sil, dl - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0x0844; BYTE $0xea // or dl, r13b - WORD $0x8941; BYTE $0xd0 // mov r8d, edx - LONG $0x03e7c040 // shl dil, 3 - WORD $0x0840; BYTE $0xf7 // or dil, sil - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0844; BYTE $0xc2 // or dl, r8b - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - QUAD $0x0000008824b4b60f // movzx esi, byte [rsp + 136] - LONG $0x06e6c040 // shl sil, 6 - LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xf1 // or r9b, sil - WORD $0x0841; BYTE $0xd3 // or r11b, dl - WORD $0x0845; BYTE $0xe1 // or r9b, r12b - QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] - WORD $0xc000 // add al, al - LONG $0x78244402 // add al, byte [rsp + 120] - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0xc208 // or dl, al - WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xf2 // or dl, sil - WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xf2 // or dl, sil - WORD $0xd689 // mov esi, edx - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] + WORD $0x8941; BYTE $0xd5 // mov r13d, edx + LONG $0x2454b60f; BYTE $0x38 // movzx edx, byte [rsp + 56] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xf2 // or dl, sil - LONG $0x24748b48; BYTE $0x08 // mov rsi, qword [rsp + 8] - WORD $0x8844; BYTE $0x1e // mov byte [rsi], r11b - LONG $0x247cb60f; BYTE $0x58 // movzx edi, byte [rsp + 88] - LONG $0x06e7c040 // shl dil, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xff // or r15b, dil - LONG $0x014e8844 // mov byte [rsi + 1], r9b - WORD $0x0841; BYTE $0xd7 // or r15b, dl LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] - WORD $0xc000 // add al, al - LONG $0x20244402 // add al, byte [rsp + 32] - WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xd008 // or al, dl WORD $0xc289 // mov edx, eax LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xd008 // or al, dl - WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] + WORD $0xc900 // add cl, cl + LONG $0x28244c02 // add cl, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 WORD $0xd008 // or al, dl - WORD $0xc289 // mov edx, eax + LONG $0x08244488 // mov byte [rsp + 8], al + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0x8941; BYTE $0xc5 // mov r13d, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xe8 // or al, r13b + LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] + WORD $0xe2c0; BYTE $0x04 // shl dl, 4 + WORD $0xca08 // or dl, cl + QUAD $0x00008024acb60f44; BYTE $0x00 // movzx r13d, byte [rsp + 128] + LONG $0x05e5c041 // shl r13b, 5 + LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0x0844; BYTE $0xe9 // or cl, r13b + LONG $0x6cb60f44; WORD $0x7824 // movzx r13d, byte [rsp + 120] + LONG $0x07e5c041 // shl r13b, 7 + WORD $0x0841; BYTE $0xcd // or r13b, cl + WORD $0x0045; BYTE $0xe4 // add r12b, r12b + LONG $0x24640244; BYTE $0x58 // add r12b, byte [rsp + 88] + WORD $0x8944; BYTE $0xe1 // mov ecx, r12d + QUAD $0x00008824a4b60f44; BYTE $0x00 // movzx r12d, byte [rsp + 136] + LONG $0x02e4c041 // shl r12b, 2 + WORD $0x0841; BYTE $0xcc // or r12b, cl + QUAD $0x00000098248cb60f // movzx ecx, byte [rsp + 152] + WORD $0xe1c0; BYTE $0x03 // shl cl, 3 + WORD $0x0844; BYTE $0xe1 // or cl, r12b + WORD $0x8941; BYTE $0xcc // mov r12d, ecx + QUAD $0x00000090248cb60f // movzx ecx, byte [rsp + 144] + WORD $0xe1c0; BYTE $0x04 // shl cl, 4 + WORD $0x0844; BYTE $0xe1 // or cl, r12b + LONG $0x64b60f44; WORD $0x0824 // movzx r12d, byte [rsp + 8] + WORD $0x0841; BYTE $0xc4 // or r12b, al + QUAD $0x000000c02484b60f // movzx eax, byte [rsp + 192] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xd008 // or al, dl - LONG $0x2454b60f; BYTE $0x10 // movzx edx, byte [rsp + 16] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0xd108 // or cl, dl - WORD $0xc108 // or cl, al - LONG $0x027e8844 // mov byte [rsi + 2], r15b - WORD $0x4e88; BYTE $0x03 // mov byte [rsi + 3], cl - LONG $0x80c38148; WORD $0x0000; BYTE $0x00 // add rbx, 128 - LONG $0x04c68348 // add rsi, 4 - LONG $0x24748948; BYTE $0x08 // mov qword [rsp + 8], rsi - QUAD $0x0000009824848348; BYTE $0xff // add qword [rsp + 152], -1 - JNE LBB5_184 - LONG $0x245c8b4c; BYTE $0x08 // mov r11, qword [rsp + 8] - QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] - QUAD $0x000000a824948b4c // mov r10, qword [rsp + 168] - JMP LBB5_186 + LONG $0x06e6c041 // shl r14b, 6 + WORD $0x0841; BYTE $0xc6 // or r14b, al + WORD $0x0841; BYTE $0xd5 // or r13b, dl + LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0845; BYTE $0xf0 // or r8b, r14b + WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0045; BYTE $0xdb // add r11b, r11b + QUAD $0x000000b0249c0244 // add r11b, byte [rsp + 176] + LONG $0x02e2c041 // shl r10b, 2 + WORD $0x0845; BYTE $0xda // or r10b, r11b + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xd1 // or r9b, r10b + LONG $0x04e7c041 // shl r15b, 4 + WORD $0x0845; BYTE $0xcf // or r15b, r9b + LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] + WORD $0x8844; BYTE $0x20 // mov byte [rax], r12b + QUAD $0x000000a8248cb60f // movzx ecx, byte [rsp + 168] + WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + LONG $0x06e7c040 // shl dil, 6 + WORD $0x0840; BYTE $0xcf // or dil, cl + LONG $0x01688844 // mov byte [rax + 1], r13b + LONG $0x07e6c040 // shl sil, 7 + WORD $0x0840; BYTE $0xfe // or sil, dil + WORD $0x0844; BYTE $0xfe // or sil, r15b + LONG $0x02408844 // mov byte [rax + 2], r8b + LONG $0x03708840 // mov byte [rax + 3], sil + LONG $0x80c38148; WORD $0x0000; BYTE $0x00 // add rbx, 128 + LONG $0x04c08348 // add rax, 4 + LONG $0x24448948; BYTE $0x10 // mov qword [rsp + 16], rax + QUAD $0x000000d024848348; BYTE $0xff // add qword [rsp + 208], -1 + JNE LBB5_185 + LONG $0x24648b4c; BYTE $0x10 // mov r12, qword [rsp + 16] + QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] + QUAD $0x000000f024948b4c // mov r10, qword [rsp + 240] + JMP LBB5_187 LBB5_9: LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] - QUAD $0x0000008024848948 // mov qword [rsp + 128], rax + LONG $0x24448948; BYTE $0x50 // mov qword [rsp + 80], rax -LBB5_91: +LBB5_92: LONG $0x05e2c149 // shl r10, 5 WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB5_199 + JGE LBB5_198 WORD $0x894d; BYTE $0xf8 // mov r8, r15 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 WORD $0x014d; BYTE $0xfa // add r10, r15 - JNE LBB5_94 + JNE LBB5_95 WORD $0xf631 // xor esi, esi - JMP LBB5_97 + JMP LBB5_98 -LBB5_61: +LBB5_62: LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] - LONG $0x24448948; BYTE $0x58 // mov qword [rsp + 88], rax + LONG $0x24448948; BYTE $0x68 // mov qword [rsp + 104], rax -LBB5_72: +LBB5_73: LONG $0x05e2c149 // shl r10, 5 WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB5_199 + JGE LBB5_198 WORD $0x894d; BYTE $0xf8 // mov r8, r15 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 WORD $0x014d; BYTE $0xfa // add r10, r15 - JNE LBB5_75 + JNE LBB5_76 WORD $0xf631 // xor esi, esi - JMP LBB5_78 + JMP LBB5_79 -LBB5_104: +LBB5_105: LONG $0x24648b4c; BYTE $0x08 // mov r12, qword [rsp + 8] -LBB5_115: +LBB5_116: LONG $0x05e2c149 // shl r10, 5 WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB5_199 + JGE LBB5_198 WORD $0x894d; BYTE $0xf8 // mov r8, r15 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 WORD $0x014d; BYTE $0xfa // add r10, r15 - JE LBB5_117 + JE LBB5_118 WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0xf631 // xor esi, esi -LBB5_121: +LBB5_122: LONG $0x1e3b4566 // cmp r11w, word [r14] WORD $0x950f; BYTE $0xd2 // setne dl WORD $0xdaf6 // neg dl @@ -26380,49 +27624,49 @@ LBB5_121: WORD $0xd830 // xor al, bl LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x3949; BYTE $0xf1 // cmp r9, rsi - JNE LBB5_121 - JMP LBB5_118 + JNE LBB5_122 + JMP LBB5_119 -LBB5_127: +LBB5_128: LONG $0x24648b4c; BYTE $0x08 // mov r12, qword [rsp + 8] -LBB5_138: +LBB5_139: LONG $0x05e2c149 // shl r10, 5 WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB5_199 + JGE LBB5_198 WORD $0x894d; BYTE $0xf8 // mov r8, r15 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 WORD $0x014d; BYTE $0xfa // add r10, r15 - JNE LBB5_140 + JNE LBB5_141 -LBB5_117: +LBB5_118: WORD $0xf631 // xor esi, esi - JMP LBB5_118 + JMP LBB5_119 -LBB5_175: - LONG $0x245c8b4c; BYTE $0x08 // mov r11, qword [rsp + 8] +LBB5_176: + LONG $0x24648b4c; BYTE $0x08 // mov r12, qword [rsp + 8] WORD $0x894c; BYTE $0xf3 // mov rbx, r14 -LBB5_186: +LBB5_187: LONG $0x05e2c149 // shl r10, 5 WORD $0x394d; BYTE $0xfa // cmp r10, r15 - JGE LBB5_199 + JGE LBB5_198 WORD $0x894d; BYTE $0xf8 // mov r8, r15 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 WORD $0x014d; BYTE $0xfa // add r10, r15 - JNE LBB5_191 + JNE LBB5_192 WORD $0xf631 // xor esi, esi - JMP LBB5_189 + JMP LBB5_190 -LBB5_154: +LBB5_155: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0xff31 // xor edi, edi LONG $0x247c8b4c; BYTE $0x08 // mov r15, qword [rsp + 8] -LBB5_155: +LBB5_156: WORD $0x3b45; BYTE $0x1e // cmp r11d, dword [r14] WORD $0x950f; BYTE $0xd0 // setne al WORD $0xd8f6 // neg al @@ -26450,23 +27694,23 @@ LBB5_155: WORD $0xd330 // xor bl, dl LONG $0x371c8841 // mov byte [r15 + rsi], bl WORD $0x3949; BYTE $0xf9 // cmp r9, rdi - JNE LBB5_155 + JNE LBB5_156 LBB5_24: LONG $0x01c0f641 // test r8b, 1 - JE LBB5_199 + JE LBB5_198 WORD $0x3b45; BYTE $0x1e // cmp r11d, dword [r14] - JMP LBB5_197 - -LBB5_94: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 - WORD $0xf631 // xor esi, esi - QUAD $0x00000080249c8b4c // mov r11, qword [rsp + 128] + JMP LBB5_26 LBB5_95: + WORD $0x894d; BYTE $0xc2 // mov r10, r8 + LONG $0xfee28349 // and r10, -2 + WORD $0xf631 // xor esi, esi + LONG $0x245c8b4c; BYTE $0x50 // mov r11, qword [rsp + 80] + +LBB5_96: WORD $0x8948; BYTE $0xf0 // mov rax, rsi - LONG $0x2474b60f; BYTE $0x40 // movzx esi, byte [rsp + 64] + LONG $0x2474b60f; BYTE $0x10 // movzx esi, byte [rsp + 16] LONG $0x06343a41 // cmp sil, byte [r14 + rax] WORD $0x950f; BYTE $0xd3 // setne bl WORD $0xdbf6 // neg bl @@ -26493,30 +27737,30 @@ LBB5_95: WORD $0xd030 // xor al, dl LONG $0x3b048841 // mov byte [r11 + rdi], al WORD $0x3949; BYTE $0xf2 // cmp r10, rsi - JNE LBB5_95 + JNE LBB5_96 WORD $0x0149; BYTE $0xf6 // add r14, rsi -LBB5_97: - LONG $0x01c0f641 // test r8b, 1 - JE LBB5_199 - LONG $0x4024448a // mov al, byte [rsp + 64] - WORD $0x3a41; BYTE $0x06 // cmp al, byte [r14] - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0xd8f6 // neg al - WORD $0x8948; BYTE $0xf2 // mov rdx, rsi - LONG $0x03eac148 // shr rdx, 3 - QUAD $0x0000008024848b4c // mov r8, qword [rsp + 128] - JMP LBB5_80 +LBB5_98: + LONG $0x01c0f641 // test r8b, 1 + JE LBB5_198 + LONG $0x1024448a // mov al, byte [rsp + 16] + WORD $0x3a41; BYTE $0x06 // cmp al, byte [r14] + WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xd8f6 // neg al + WORD $0x8948; BYTE $0xf2 // mov rdx, rsi + LONG $0x03eac148 // shr rdx, 3 + LONG $0x24448b4c; BYTE $0x50 // mov r8, qword [rsp + 80] + JMP LBB5_81 -LBB5_75: +LBB5_76: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0xf631 // xor esi, esi - LONG $0x245c8b4c; BYTE $0x58 // mov r11, qword [rsp + 88] + LONG $0x245c8b4c; BYTE $0x68 // mov r11, qword [rsp + 104] -LBB5_76: +LBB5_77: WORD $0x8948; BYTE $0xf0 // mov rax, rsi - LONG $0x2474b60f; BYTE $0x28 // movzx esi, byte [rsp + 40] + LONG $0x2474b60f; BYTE $0x40 // movzx esi, byte [rsp + 64] LONG $0x06343a41 // cmp sil, byte [r14 + rax] WORD $0x950f; BYTE $0xd3 // setne bl WORD $0xdbf6 // neg bl @@ -26543,21 +27787,21 @@ LBB5_76: WORD $0xd030 // xor al, dl LONG $0x3b048841 // mov byte [r11 + rdi], al WORD $0x3949; BYTE $0xf2 // cmp r10, rsi - JNE LBB5_76 + JNE LBB5_77 WORD $0x0149; BYTE $0xf6 // add r14, rsi -LBB5_78: +LBB5_79: LONG $0x01c0f641 // test r8b, 1 - JE LBB5_199 - LONG $0x2824448a // mov al, byte [rsp + 40] + JE LBB5_198 + LONG $0x4024448a // mov al, byte [rsp + 64] WORD $0x3a41; BYTE $0x06 // cmp al, byte [r14] WORD $0x950f; BYTE $0xd0 // setne al WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xf2 // mov rdx, rsi LONG $0x03eac148 // shr rdx, 3 - LONG $0x24448b4c; BYTE $0x58 // mov r8, qword [rsp + 88] + LONG $0x24448b4c; BYTE $0x68 // mov r8, qword [rsp + 104] -LBB5_80: +LBB5_81: LONG $0x103c8a41 // mov dil, byte [r8 + rdx] LONG $0x07e68040 // and sil, 7 WORD $0x01b3 // mov bl, 1 @@ -26566,57 +27810,78 @@ LBB5_80: WORD $0x3040; BYTE $0xf8 // xor al, dil WORD $0xc320 // and bl, al WORD $0x3040; BYTE $0xfb // xor bl, dil + LONG $0x101c8841 // mov byte [r8 + rdx], bl JMP LBB5_198 -LBB5_193: +LBB5_194: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0xff31 // xor edi, edi LONG $0x245c8b4c; BYTE $0x08 // mov r11, qword [rsp + 8] -LBB5_194: +LBB5_195: LONG $0x2e0f4166; BYTE $0x06 // ucomisd xmm0, qword [r14] + WORD $0x9a0f; BYTE $0xd1 // setp cl WORD $0x950f; BYTE $0xd0 // setne al + WORD $0xc808 // or al, cl WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xfe // mov rsi, rdi LONG $0x03eec148 // shr rsi, 3 - LONG $0x14b60f45; BYTE $0x33 // movzx r10d, byte [r11 + rsi] - WORD $0x3044; BYTE $0xd0 // xor al, r10b + LONG $0x14b60f41; BYTE $0x33 // movzx edx, byte [r11 + rsi] WORD $0xf989 // mov ecx, edi WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b2 // mov dl, 1 - WORD $0xe2d2 // shl dl, cl - WORD $0xc220 // and dl, al - WORD $0x3044; BYTE $0xd2 // xor dl, r10b - LONG $0x33148841 // mov byte [r11 + rsi], dl - LONG $0x02c78348 // add rdi, 2 - LONG $0x2e0f4166; WORD $0x0846 // ucomisd xmm0, qword [r14 + 8] - LONG $0x10768d4d // lea r14, [r14 + 16] - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0xd8f6 // neg al - WORD $0xd030 // xor al, dl - WORD $0xc980; BYTE $0x01 // or cl, 1 WORD $0x01b3 // mov bl, 1 WORD $0xe3d2 // shl bl, cl + WORD $0xd030 // xor al, dl WORD $0xc320 // and bl, al WORD $0xd330 // xor bl, dl LONG $0x331c8841 // mov byte [r11 + rsi], bl + LONG $0x02c78348 // add rdi, 2 + LONG $0x2e0f4166; WORD $0x0846 // ucomisd xmm0, qword [r14 + 8] + LONG $0x10768d4d // lea r14, [r14 + 16] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xc208 // or dl, al + WORD $0xdaf6 // neg dl + WORD $0xda30 // xor dl, bl + WORD $0xc980; BYTE $0x01 // or cl, 1 + WORD $0x01b0 // mov al, 1 + WORD $0xe0d2 // shl al, cl + WORD $0xd020 // and al, dl + WORD $0xd830 // xor al, bl + LONG $0x33048841 // mov byte [r11 + rsi], al WORD $0x3949; BYTE $0xf9 // cmp r9, rdi - JNE LBB5_194 + JNE LBB5_195 -LBB5_195: +LBB5_196: LONG $0x01c0f641 // test r8b, 1 - JE LBB5_199 + JE LBB5_198 LONG $0x2e0f4166; BYTE $0x06 // ucomisd xmm0, qword [r14] - JMP LBB5_197 + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xc208 // or dl, al + WORD $0xdaf6 // neg dl + WORD $0x8948; BYTE $0xf8 // mov rax, rdi + LONG $0x03e8c148 // shr rax, 3 + LONG $0x24448b4c; BYTE $0x08 // mov r8, qword [rsp + 8] + LONG $0x00348a41 // mov sil, byte [r8 + rax] + LONG $0x07e78040 // and dil, 7 + WORD $0x01b3 // mov bl, 1 + WORD $0xf989 // mov ecx, edi + WORD $0xe3d2 // shl bl, cl + WORD $0x3040; BYTE $0xf2 // xor dl, sil + WORD $0xd320 // and bl, dl + WORD $0x3040; BYTE $0xf3 // xor bl, sil + LONG $0x001c8841 // mov byte [r8 + rax], bl + JMP LBB5_198 -LBB5_168: +LBB5_169: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0xff31 // xor edi, edi LONG $0x247c8b4c; BYTE $0x08 // mov r15, qword [rsp + 8] -LBB5_169: +LBB5_170: WORD $0x3b4d; BYTE $0x1e // cmp r11, qword [r14] WORD $0x950f; BYTE $0xd0 // setne al WORD $0xd8f6 // neg al @@ -26644,14 +27909,14 @@ LBB5_169: WORD $0xd330 // xor bl, dl LONG $0x371c8841 // mov byte [r15 + rsi], bl WORD $0x3949; BYTE $0xf9 // cmp r9, rdi - JNE LBB5_169 + JNE LBB5_170 -LBB5_40: +LBB5_41: LONG $0x01c0f641 // test r8b, 1 - JE LBB5_199 + JE LBB5_198 WORD $0x3b4d; BYTE $0x1e // cmp r11, qword [r14] -LBB5_197: +LBB5_26: WORD $0x950f; BYTE $0xd0 // setne al WORD $0xd8f6 // neg al WORD $0x8948; BYTE $0xfa // mov rdx, rdi @@ -26665,17 +27930,15 @@ LBB5_197: WORD $0x3040; BYTE $0xf0 // xor al, sil WORD $0xc320 // and bl, al WORD $0x3040; BYTE $0xf3 // xor bl, sil + LONG $0x101c8841 // mov byte [r8 + rdx], bl + JMP LBB5_198 -LBB5_198: - LONG $0x101c8841 // mov byte [r8 + rdx], bl - JMP LBB5_199 - -LBB5_140: +LBB5_141: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0xf631 // xor esi, esi -LBB5_141: +LBB5_142: LONG $0x1e3b4566 // cmp r11w, word [r14] WORD $0x950f; BYTE $0xd2 // setne dl WORD $0xdaf6 // neg dl @@ -26703,11 +27966,11 @@ LBB5_141: WORD $0xd830 // xor al, bl LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x3949; BYTE $0xf1 // cmp r9, rsi - JNE LBB5_141 + JNE LBB5_142 -LBB5_118: +LBB5_119: LONG $0x01c0f641 // test r8b, 1 - JE LBB5_199 + JE LBB5_198 LONG $0x1e3b4566 // cmp r11w, word [r14] WORD $0x950f; BYTE $0xd0 // setne al WORD $0xd8f6 // neg al @@ -26722,97 +27985,103 @@ LBB5_118: WORD $0xc320 // and bl, al WORD $0x3040; BYTE $0xfb // xor bl, dil LONG $0x141c8841 // mov byte [r12 + rdx], bl - JMP LBB5_199 + JMP LBB5_198 -LBB5_191: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 +LBB5_192: + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 WORD $0xf631 // xor esi, esi - WORD $0x894d; BYTE $0xde // mov r14, r11 + WORD $0x894d; BYTE $0xe6 // mov r14, r12 -LBB5_192: +LBB5_193: WORD $0x2e0f; BYTE $0x03 // ucomiss xmm0, dword [rbx] + WORD $0x9a0f; BYTE $0xd1 // setp cl WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xca08 // or dl, cl WORD $0xdaf6 // neg dl WORD $0x8948; BYTE $0xf7 // mov rdi, rsi LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] - WORD $0x3044; BYTE $0xca // xor dl, r9b + LONG $0x14b60f45; BYTE $0x3e // movzx r10d, byte [r14 + rdi] WORD $0xf189 // mov ecx, esi WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0xd020 // and al, dl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3e048841 // mov byte [r14 + rdi], al + WORD $0xb341; BYTE $0x01 // mov r11b, 1 + WORD $0xd241; BYTE $0xe3 // shl r11b, cl + WORD $0x3044; BYTE $0xd2 // xor dl, r10b + WORD $0x2041; BYTE $0xd3 // and r11b, dl + WORD $0x3045; BYTE $0xd3 // xor r11b, r10b + LONG $0x3e1c8845 // mov byte [r14 + rdi], r11b LONG $0x02c68348 // add rsi, 2 LONG $0x04432e0f // ucomiss xmm0, dword [rbx + 4] LONG $0x085b8d48 // lea rbx, [rbx + 8] - LONG $0xd1950f41 // setne r9b - WORD $0xf641; BYTE $0xd9 // neg r9b - WORD $0x3041; BYTE $0xc1 // xor r9b, al + LONG $0xd29a0f41 // setp r10b + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0x0844; BYTE $0xd2 // or dl, r10b + WORD $0xdaf6 // neg dl + WORD $0x3044; BYTE $0xda // xor dl, r11b WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b2 // mov dl, 1 - WORD $0xe2d2 // shl dl, cl - WORD $0x2044; BYTE $0xca // and dl, r9b - WORD $0xc230 // xor dl, al - LONG $0x3e148841 // mov byte [r14 + rdi], dl - WORD $0x3949; BYTE $0xf2 // cmp r10, rsi - JNE LBB5_192 + WORD $0x01b0 // mov al, 1 + WORD $0xe0d2 // shl al, cl + WORD $0xd020 // and al, dl + WORD $0x3044; BYTE $0xd8 // xor al, r11b + LONG $0x3e048841 // mov byte [r14 + rdi], al + WORD $0x3949; BYTE $0xf1 // cmp r9, rsi + JNE LBB5_193 -LBB5_189: +LBB5_190: LONG $0x01c0f641 // test r8b, 1 - JE LBB5_199 + JE LBB5_198 WORD $0x2e0f; BYTE $0x03 // ucomiss xmm0, dword [rbx] - WORD $0x950f; BYTE $0xd0 // setne al - WORD $0xd8f6 // neg al - WORD $0x8948; BYTE $0xf2 // mov rdx, rsi - LONG $0x03eac148 // shr rdx, 3 - LONG $0x133c8a41 // mov dil, byte [r11 + rdx] + WORD $0x9a0f; BYTE $0xd0 // setp al + WORD $0x950f; BYTE $0xd2 // setne dl + WORD $0xc208 // or dl, al + WORD $0xdaf6 // neg dl + WORD $0x8948; BYTE $0xf0 // mov rax, rsi + LONG $0x03e8c148 // shr rax, 3 + LONG $0x043c8a41 // mov dil, byte [r12 + rax] LONG $0x07e68040 // and sil, 7 WORD $0x01b3 // mov bl, 1 WORD $0xf189 // mov ecx, esi WORD $0xe3d2 // shl bl, cl - WORD $0x3040; BYTE $0xf8 // xor al, dil - WORD $0xc320 // and bl, al + WORD $0x3040; BYTE $0xfa // xor dl, dil + WORD $0xd320 // and bl, dl WORD $0x3040; BYTE $0xfb // xor bl, dil - LONG $0x131c8841 // mov byte [r11 + rdx], bl + LONG $0x041c8841 // mov byte [r12 + rax], bl -LBB5_199: +LBB5_198: MOVQ 288(SP), SP RET -LBB5_85: +LBB5_86: LONG $0xf0e28349 // and r10, -16 WORD $0x894c; BYTE $0xd0 // mov rax, r10 LONG $0x05e0c148 // shl rax, 5 WORD $0x014c; BYTE $0xf0 // add rax, r14 QUAD $0x0000011024848948 // mov qword [rsp + 272], rax - QUAD $0x000000d82494894c // mov qword [rsp + 216], r10 + QUAD $0x000000e82494894c // mov qword [rsp + 232], r10 LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] LONG $0x90048d4a // lea rax, [rax + 4*r10] - QUAD $0x0000008024848948 // mov qword [rsp + 128], rax - LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] + LONG $0x24448948; BYTE $0x50 // mov qword [rsp + 80], rax + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] LONG $0xc86e0f66 // movd xmm1, eax LONG $0xc0ef0f66 // pxor xmm0, xmm0 LONG $0x00380f66; BYTE $0xc8 // pshufb xmm1, xmm0 QUAD $0x0000b0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 176], xmm1 WORD $0xc031 // xor eax, eax -LBB5_86: +LBB5_87: QUAD $0x000000a824848948 // mov qword [rsp + 168], rax LONG $0x05e0c148 // shl rax, 5 - WORD $0x8949; BYTE $0xc1 // mov r9, rax - WORD $0x8948; BYTE $0xc3 // mov rbx, rax - WORD $0x8949; BYTE $0xc7 // mov r15, rax WORD $0x8948; BYTE $0xc2 // mov rdx, rax - WORD $0x8949; BYTE $0xc5 // mov r13, rax - WORD $0x8949; BYTE $0xc0 // mov r8, rax WORD $0x8949; BYTE $0xc4 // mov r12, rax + WORD $0x8949; BYTE $0xc0 // mov r8, rax WORD $0x8949; BYTE $0xc2 // mov r10, rax + WORD $0x8949; BYTE $0xc7 // mov r15, rax + WORD $0x8949; BYTE $0xc1 // mov r9, rax WORD $0x8949; BYTE $0xc3 // mov r11, rax + WORD $0x8948; BYTE $0xc3 // mov rbx, rax WORD $0x8948; BYTE $0xc6 // mov rsi, rax - LONG $0x24448948; BYTE $0x38 // mov qword [rsp + 56], rax + LONG $0x24448948; BYTE $0x48 // mov qword [rsp + 72], rax + WORD $0x8949; BYTE $0xc5 // mov r13, rax LONG $0x0cb60f41; BYTE $0x06 // movzx ecx, byte [r14 + rax] LONG $0xe16e0f66 // movd xmm4, ecx LONG $0x4cb60f41; WORD $0x0106 // movzx ecx, byte [r14 + rax + 1] @@ -26831,7 +28100,7 @@ LBB5_86: LONG $0x6e0f4466; BYTE $0xf1 // movd xmm14, ecx LONG $0x4cb60f41; WORD $0x0806 // movzx ecx, byte [r14 + rax + 8] LONG $0xc16e0f66 // movd xmm0, ecx - QUAD $0x00010024847f0f66; BYTE $0x00 // movdqa oword [rsp + 256], xmm0 + QUAD $0x0000f024847f0f66; BYTE $0x00 // movdqa oword [rsp + 240], xmm0 LONG $0x4cb60f41; WORD $0x0906 // movzx ecx, byte [r14 + rax + 9] LONG $0x6e0f4466; BYTE $0xd9 // movd xmm11, ecx LONG $0x4cb60f41; WORD $0x0a06 // movzx ecx, byte [r14 + rax + 10] @@ -26840,7 +28109,7 @@ LBB5_86: LONG $0x6e0f4466; BYTE $0xe9 // movd xmm13, ecx LONG $0x4cb60f41; WORD $0x0c06 // movzx ecx, byte [r14 + rax + 12] LONG $0xc16e0f66 // movd xmm0, ecx - QUAD $0x0000e024847f0f66; BYTE $0x00 // movdqa oword [rsp + 224], xmm0 + QUAD $0x0000d024847f0f66; BYTE $0x00 // movdqa oword [rsp + 208], xmm0 LONG $0x4cb60f41; WORD $0x0d06 // movzx ecx, byte [r14 + rax + 13] LONG $0xf16e0f66 // movd xmm6, ecx LONG $0x4cb60f41; WORD $0x0e06 // movzx ecx, byte [r14 + rax + 14] @@ -26849,155 +28118,150 @@ LBB5_86: LONG $0xc16e0f66 // movd xmm0, ecx QUAD $0x0000c024847f0f66; BYTE $0x00 // movdqa oword [rsp + 192], xmm0 WORD $0x8948; BYTE $0xc1 // mov rcx, rax - LONG $0x24448948; BYTE $0x50 // mov qword [rsp + 80], rax + QUAD $0x0000008024848948 // mov qword [rsp + 128], rax WORD $0x8948; BYTE $0xc7 // mov rdi, rax LONG $0x20cf8348 // or rdi, 32 - LONG $0x247c8948; BYTE $0x18 // mov qword [rsp + 24], rdi - LONG $0x40c98349 // or r9, 64 - LONG $0x244c894c; BYTE $0x48 // mov qword [rsp + 72], r9 - LONG $0x60cb8348 // or rbx, 96 - LONG $0x245c8948; BYTE $0x20 // mov qword [rsp + 32], rbx - LONG $0x80cf8149; WORD $0x0000; BYTE $0x00 // or r15, 128 - LONG $0x247c894c; BYTE $0x30 // mov qword [rsp + 48], r15 - LONG $0xa0ca8148; WORD $0x0000; BYTE $0x00 // or rdx, 160 - LONG $0xc0cd8149; WORD $0x0000; BYTE $0x00 // or r13, 192 - LONG $0xe0c88149; WORD $0x0000; BYTE $0x00 // or r8, 224 - LONG $0x00cc8149; WORD $0x0001; BYTE $0x00 // or r12, 256 - LONG $0x20ca8149; WORD $0x0001; BYTE $0x00 // or r10, 288 - LONG $0x40cb8149; WORD $0x0001; BYTE $0x00 // or r11, 320 + LONG $0x40ca8348 // or rdx, 64 + LONG $0x24548948; BYTE $0x28 // mov qword [rsp + 40], rdx + LONG $0x60cc8349 // or r12, 96 + LONG $0x80c88149; WORD $0x0000; BYTE $0x00 // or r8, 128 + LONG $0xa0ca8149; WORD $0x0000; BYTE $0x00 // or r10, 160 + LONG $0xc0cf8149; WORD $0x0000; BYTE $0x00 // or r15, 192 + LONG $0xe0c98149; WORD $0x0000; BYTE $0x00 // or r9, 224 + LONG $0x00cb8149; WORD $0x0001; BYTE $0x00 // or r11, 256 + LONG $0x20cb8148; WORD $0x0001; BYTE $0x00 // or rbx, 288 + LONG $0x40ce8148; WORD $0x0001; BYTE $0x00 // or rsi, 320 + LONG $0x24748948; BYTE $0x68 // mov qword [rsp + 104], rsi + LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] LONG $0x60ce8148; WORD $0x0001; BYTE $0x00 // or rsi, 352 - LONG $0x24748948; BYTE $0x58 // mov qword [rsp + 88], rsi - LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] - LONG $0x80ce8148; WORD $0x0001; BYTE $0x00 // or rsi, 384 - LONG $0x24748948; BYTE $0x38 // mov qword [rsp + 56], rsi + LONG $0x24748948; BYTE $0x48 // mov qword [rsp + 72], rsi + LONG $0x80cd8149; WORD $0x0001; BYTE $0x00 // or r13, 384 + LONG $0x246c894c; BYTE $0x70 // mov qword [rsp + 112], r13 LONG $0x01a00d48; WORD $0x0000 // or rax, 416 - LONG $0x24448948; BYTE $0x78 // mov qword [rsp + 120], rax - WORD $0x8948; BYTE $0xc8 // mov rax, rcx - LONG $0x01c00d48; WORD $0x0000 // or rax, 448 - LONG $0x24448948; BYTE $0x28 // mov qword [rsp + 40], rax + LONG $0x24448948; BYTE $0x40 // mov qword [rsp + 64], rax + WORD $0x8949; BYTE $0xcd // mov r13, rcx + LONG $0xc0cd8149; WORD $0x0001; BYTE $0x00 // or r13, 448 + LONG $0x246c894c; BYTE $0x38 // mov qword [rsp + 56], r13 LONG $0xe0c98148; WORD $0x0001; BYTE $0x00 // or rcx, 480 - LONG $0x244c8948; BYTE $0x10 // mov qword [rsp + 16], rcx + LONG $0x244c8948; BYTE $0x20 // mov qword [rsp + 32], rcx + WORD $0x8948; BYTE $0xf9 // mov rcx, rdi QUAD $0x013e24203a0f4166 // pinsrb xmm4, byte [r14 + rdi], 1 - QUAD $0x020e24203a0f4366 // pinsrb xmm4, byte [r14 + r9], 2 - QUAD $0x031e24203a0f4166 // pinsrb xmm4, byte [r14 + rbx], 3 - QUAD $0x043e24203a0f4366 // pinsrb xmm4, byte [r14 + r15], 4 - WORD $0x8948; BYTE $0xd7 // mov rdi, rdx - QUAD $0x051624203a0f4166 // pinsrb xmm4, byte [r14 + rdx], 5 - WORD $0x894c; BYTE $0xea // mov rdx, r13 - QUAD $0x0000009824ac894c // mov qword [rsp + 152], r13 - QUAD $0x062e24203a0f4366 // pinsrb xmm4, byte [r14 + r13], 6 - WORD $0x894d; BYTE $0xc5 // mov r13, r8 - QUAD $0x070624203a0f4366 // pinsrb xmm4, byte [r14 + r8], 7 - WORD $0x894d; BYTE $0xe0 // mov r8, r12 - QUAD $0x082624203a0f4366 // pinsrb xmm4, byte [r14 + r12], 8 - QUAD $0x091624203a0f4366 // pinsrb xmm4, byte [r14 + r10], 9 - LONG $0x245c894c; BYTE $0x70 // mov qword [rsp + 112], r11 - QUAD $0x0a1e24203a0f4366 // pinsrb xmm4, byte [r14 + r11], 10 - LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] - QUAD $0x0b0624203a0f4166 // pinsrb xmm4, byte [r14 + rax], 11 - QUAD $0x0c3624203a0f4166 // pinsrb xmm4, byte [r14 + rsi], 12 - LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] - QUAD $0x0d0e24203a0f4166 // pinsrb xmm4, byte [r14 + rcx], 13 - LONG $0x24648b4c; BYTE $0x28 // mov r12, qword [rsp + 40] - QUAD $0x0e2624203a0f4366 // pinsrb xmm4, byte [r14 + r12], 14 - LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] - QUAD $0x0f1e24203a0f4166 // pinsrb xmm4, byte [r14 + rbx], 15 - LONG $0x247c8b4c; BYTE $0x18 // mov r15, qword [rsp + 24] - QUAD $0x013e5c203a0f4366; BYTE $0x01 // pinsrb xmm3, byte [r14 + r15 + 1], 1 - QUAD $0x010e5c203a0f4366; BYTE $0x02 // pinsrb xmm3, byte [r14 + r9 + 1], 2 - LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] - QUAD $0x011e5c203a0f4166; BYTE $0x03 // pinsrb xmm3, byte [r14 + rbx + 1], 3 - LONG $0x244c8b4c; BYTE $0x30 // mov r9, qword [rsp + 48] - QUAD $0x010e5c203a0f4366; BYTE $0x04 // pinsrb xmm3, byte [r14 + r9 + 1], 4 - QUAD $0x013e5c203a0f4166; BYTE $0x05 // pinsrb xmm3, byte [r14 + rdi + 1], 5 - LONG $0x247c8948; BYTE $0x60 // mov qword [rsp + 96], rdi - QUAD $0x01165c203a0f4166; BYTE $0x06 // pinsrb xmm3, byte [r14 + rdx + 1], 6 - QUAD $0x012e5c203a0f4366; BYTE $0x07 // pinsrb xmm3, byte [r14 + r13 + 1], 7 - WORD $0x894c; BYTE $0xeb // mov rbx, r13 - QUAD $0x01065c203a0f4366; BYTE $0x08 // pinsrb xmm3, byte [r14 + r8 + 1], 8 - WORD $0x894d; BYTE $0xc5 // mov r13, r8 - QUAD $0x01165c203a0f4366; BYTE $0x09 // pinsrb xmm3, byte [r14 + r10 + 1], 9 - WORD $0x894c; BYTE $0xd2 // mov rdx, r10 - QUAD $0x000000902494894c // mov qword [rsp + 144], r10 - QUAD $0x011e5c203a0f4366; BYTE $0x0a // pinsrb xmm3, byte [r14 + r11 + 1], 10 - QUAD $0x01065c203a0f4166; BYTE $0x0b // pinsrb xmm3, byte [r14 + rax + 1], 11 - QUAD $0x01365c203a0f4166; BYTE $0x0c // pinsrb xmm3, byte [r14 + rsi + 1], 12 - QUAD $0x010e5c203a0f4166; BYTE $0x0d // pinsrb xmm3, byte [r14 + rcx + 1], 13 - QUAD $0x01265c203a0f4366; BYTE $0x0e // pinsrb xmm3, byte [r14 + r12 + 1], 14 + QUAD $0x021624203a0f4166 // pinsrb xmm4, byte [r14 + rdx], 2 + LONG $0x2464894c; BYTE $0x78 // mov qword [rsp + 120], r12 + QUAD $0x032624203a0f4366 // pinsrb xmm4, byte [r14 + r12], 3 + QUAD $0x040624203a0f4366 // pinsrb xmm4, byte [r14 + r8], 4 + LONG $0x2454894c; BYTE $0x60 // mov qword [rsp + 96], r10 + QUAD $0x051624203a0f4366 // pinsrb xmm4, byte [r14 + r10], 5 + QUAD $0x0000008824bc894c // mov qword [rsp + 136], r15 + QUAD $0x063e24203a0f4366 // pinsrb xmm4, byte [r14 + r15], 6 + QUAD $0x070e24203a0f4366 // pinsrb xmm4, byte [r14 + r9], 7 + QUAD $0x081e24203a0f4366 // pinsrb xmm4, byte [r14 + r11], 8 + LONG $0x245c8948; BYTE $0x58 // mov qword [rsp + 88], rbx + QUAD $0x091e24203a0f4166 // pinsrb xmm4, byte [r14 + rbx], 9 + LONG $0x245c8b48; BYTE $0x68 // mov rbx, qword [rsp + 104] + QUAD $0x0a1e24203a0f4166 // pinsrb xmm4, byte [r14 + rbx], 10 + QUAD $0x0b3624203a0f4166 // pinsrb xmm4, byte [r14 + rsi], 11 + LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] + QUAD $0x0c3e24203a0f4166 // pinsrb xmm4, byte [r14 + rdi], 12 + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x0d0624203a0f4166 // pinsrb xmm4, byte [r14 + rax], 13 + QUAD $0x0e2e24203a0f4366 // pinsrb xmm4, byte [r14 + r13], 14 + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x0f0624203a0f4166 // pinsrb xmm4, byte [r14 + rax], 15 + QUAD $0x010e5c203a0f4166; BYTE $0x01 // pinsrb xmm3, byte [r14 + rcx + 1], 1 + QUAD $0x01165c203a0f4166; BYTE $0x02 // pinsrb xmm3, byte [r14 + rdx + 1], 2 + QUAD $0x01265c203a0f4366; BYTE $0x03 // pinsrb xmm3, byte [r14 + r12 + 1], 3 + QUAD $0x01065c203a0f4366; BYTE $0x04 // pinsrb xmm3, byte [r14 + r8 + 1], 4 + WORD $0x894c; BYTE $0xc2 // mov rdx, r8 + QUAD $0x01165c203a0f4366; BYTE $0x05 // pinsrb xmm3, byte [r14 + r10 + 1], 5 + QUAD $0x013e5c203a0f4366; BYTE $0x06 // pinsrb xmm3, byte [r14 + r15 + 1], 6 + QUAD $0x010e5c203a0f4366; BYTE $0x07 // pinsrb xmm3, byte [r14 + r9 + 1], 7 + WORD $0x894d; BYTE $0xc8 // mov r8, r9 + QUAD $0x011e5c203a0f4366; BYTE $0x08 // pinsrb xmm3, byte [r14 + r11 + 1], 8 + WORD $0x894d; BYTE $0xda // mov r10, r11 + LONG $0x24648b4c; BYTE $0x58 // mov r12, qword [rsp + 88] + QUAD $0x01265c203a0f4366; BYTE $0x09 // pinsrb xmm3, byte [r14 + r12 + 1], 9 + QUAD $0x011e5c203a0f4166; BYTE $0x0a // pinsrb xmm3, byte [r14 + rbx + 1], 10 + QUAD $0x01365c203a0f4166; BYTE $0x0b // pinsrb xmm3, byte [r14 + rsi + 1], 11 + QUAD $0x013e5c203a0f4166; BYTE $0x0c // pinsrb xmm3, byte [r14 + rdi + 1], 12 + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x01065c203a0f4166; BYTE $0x0d // pinsrb xmm3, byte [r14 + rax + 1], 13 + QUAD $0x012e5c203a0f4366; BYTE $0x0e // pinsrb xmm3, byte [r14 + r13 + 1], 14 QUAD $0x0000b0248c6f0f66; BYTE $0x00 // movdqa xmm1, oword [rsp + 176] LONG $0xe1740f66 // pcmpeqb xmm4, xmm1 - LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] - QUAD $0x01065c203a0f4166; BYTE $0x0f // pinsrb xmm3, byte [r14 + rax + 1], 15 + LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] + QUAD $0x012e5c203a0f4366; BYTE $0x0f // pinsrb xmm3, byte [r14 + r13 + 1], 15 LONG $0xd9740f66 // pcmpeqb xmm3, xmm1 QUAD $0x00000100856f0f66 // movdqa xmm0, oword 256[rbp] /* [rip + .LCPI5_16] */ LONG $0xd8df0f66 // pandn xmm3, xmm0 LONG $0xdcfc0f66 // paddb xmm3, xmm4 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] LONG $0x74b60f41; WORD $0x1006 // movzx esi, byte [r14 + rax + 16] LONG $0x6e0f4466; BYTE $0xd6 // movd xmm10, esi - LONG $0x24648b4c; BYTE $0x18 // mov r12, qword [rsp + 24] - QUAD $0x02266c203a0f4366; BYTE $0x01 // pinsrb xmm5, byte [r14 + r12 + 2], 1 - LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] + QUAD $0x020e6c203a0f4166; BYTE $0x01 // pinsrb xmm5, byte [r14 + rcx + 2], 1 + WORD $0x8948; BYTE $0xc8 // mov rax, rcx + LONG $0x244c8948; BYTE $0x18 // mov qword [rsp + 24], rcx + LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] QUAD $0x020e6c203a0f4166; BYTE $0x02 // pinsrb xmm5, byte [r14 + rcx + 2], 2 - LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] + LONG $0x247c8b4c; BYTE $0x78 // mov r15, qword [rsp + 120] QUAD $0x023e6c203a0f4366; BYTE $0x03 // pinsrb xmm5, byte [r14 + r15 + 2], 3 - WORD $0x894d; BYTE $0xcb // mov r11, r9 - QUAD $0x020e6c203a0f4366; BYTE $0x04 // pinsrb xmm5, byte [r14 + r9 + 2], 4 - QUAD $0x023e6c203a0f4166; BYTE $0x05 // pinsrb xmm5, byte [r14 + rdi + 2], 5 - QUAD $0x0000009824948b4c // mov r10, qword [rsp + 152] - QUAD $0x02166c203a0f4366; BYTE $0x06 // pinsrb xmm5, byte [r14 + r10 + 2], 6 - WORD $0x8949; BYTE $0xd8 // mov r8, rbx - QUAD $0x021e6c203a0f4166; BYTE $0x07 // pinsrb xmm5, byte [r14 + rbx + 2], 7 - LONG $0x246c894c; BYTE $0x68 // mov qword [rsp + 104], r13 - QUAD $0x022e6c203a0f4366; BYTE $0x08 // pinsrb xmm5, byte [r14 + r13 + 2], 8 - QUAD $0x02166c203a0f4166; BYTE $0x09 // pinsrb xmm5, byte [r14 + rdx + 2], 9 - LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] - QUAD $0x023e6c203a0f4166; BYTE $0x0a // pinsrb xmm5, byte [r14 + rdi + 2], 10 - LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] - QUAD $0x02366c203a0f4166; BYTE $0x0b // pinsrb xmm5, byte [r14 + rsi + 2], 11 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] - QUAD $0x02066c203a0f4166; BYTE $0x0c // pinsrb xmm5, byte [r14 + rax + 2], 12 - LONG $0x245c8b48; BYTE $0x78 // mov rbx, qword [rsp + 120] - QUAD $0x021e6c203a0f4166; BYTE $0x0d // pinsrb xmm5, byte [r14 + rbx + 2], 13 - LONG $0x244c8b4c; BYTE $0x28 // mov r9, qword [rsp + 40] - QUAD $0x020e6c203a0f4366; BYTE $0x0e // pinsrb xmm5, byte [r14 + r9 + 2], 14 - LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] - QUAD $0x02166c203a0f4166; BYTE $0x0f // pinsrb xmm5, byte [r14 + rdx + 2], 15 - QUAD $0x03267c203a0f4366; BYTE $0x01 // pinsrb xmm7, byte [r14 + r12 + 3], 1 - QUAD $0x030e7c203a0f4166; BYTE $0x02 // pinsrb xmm7, byte [r14 + rcx + 3], 2 + WORD $0x8948; BYTE $0xd3 // mov rbx, rdx + QUAD $0x02166c203a0f4166; BYTE $0x04 // pinsrb xmm5, byte [r14 + rdx + 2], 4 + LONG $0x244c8b4c; BYTE $0x60 // mov r9, qword [rsp + 96] + QUAD $0x020e6c203a0f4366; BYTE $0x05 // pinsrb xmm5, byte [r14 + r9 + 2], 5 + QUAD $0x00000088249c8b4c // mov r11, qword [rsp + 136] + QUAD $0x021e6c203a0f4366; BYTE $0x06 // pinsrb xmm5, byte [r14 + r11 + 2], 6 + WORD $0x894c; BYTE $0xc2 // mov rdx, r8 + LONG $0x2444894c; BYTE $0x30 // mov qword [rsp + 48], r8 + QUAD $0x02066c203a0f4366; BYTE $0x07 // pinsrb xmm5, byte [r14 + r8 + 2], 7 + QUAD $0x02166c203a0f4366; BYTE $0x08 // pinsrb xmm5, byte [r14 + r10 + 2], 8 + QUAD $0x02266c203a0f4366; BYTE $0x09 // pinsrb xmm5, byte [r14 + r12 + 2], 9 + LONG $0x24448b4c; BYTE $0x68 // mov r8, qword [rsp + 104] + QUAD $0x02066c203a0f4366; BYTE $0x0a // pinsrb xmm5, byte [r14 + r8 + 2], 10 + LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] + QUAD $0x020e6c203a0f4166; BYTE $0x0b // pinsrb xmm5, byte [r14 + rcx + 2], 11 + QUAD $0x023e6c203a0f4166; BYTE $0x0c // pinsrb xmm5, byte [r14 + rdi + 2], 12 + LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] + QUAD $0x02366c203a0f4166; BYTE $0x0d // pinsrb xmm5, byte [r14 + rsi + 2], 13 + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + QUAD $0x02366c203a0f4166; BYTE $0x0e // pinsrb xmm5, byte [r14 + rsi + 2], 14 + QUAD $0x022e6c203a0f4366; BYTE $0x0f // pinsrb xmm5, byte [r14 + r13 + 2], 15 + QUAD $0x03067c203a0f4166; BYTE $0x01 // pinsrb xmm7, byte [r14 + rax + 3], 1 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x03067c203a0f4166; BYTE $0x02 // pinsrb xmm7, byte [r14 + rax + 3], 2 QUAD $0x033e7c203a0f4366; BYTE $0x03 // pinsrb xmm7, byte [r14 + r15 + 3], 3 - QUAD $0x031e7c203a0f4366; BYTE $0x04 // pinsrb xmm7, byte [r14 + r11 + 3], 4 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] - QUAD $0x03067c203a0f4166; BYTE $0x05 // pinsrb xmm7, byte [r14 + rax + 3], 5 - QUAD $0x03167c203a0f4366; BYTE $0x06 // pinsrb xmm7, byte [r14 + r10 + 3], 6 - QUAD $0x03067c203a0f4366; BYTE $0x07 // pinsrb xmm7, byte [r14 + r8 + 3], 7 - QUAD $0x032e7c203a0f4366; BYTE $0x08 // pinsrb xmm7, byte [r14 + r13 + 3], 8 - QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] - QUAD $0x03067c203a0f4166; BYTE $0x09 // pinsrb xmm7, byte [r14 + rax + 3], 9 - QUAD $0x033e7c203a0f4166; BYTE $0x0a // pinsrb xmm7, byte [r14 + rdi + 3], 10 - QUAD $0x03367c203a0f4166; BYTE $0x0b // pinsrb xmm7, byte [r14 + rsi + 3], 11 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] - QUAD $0x03067c203a0f4166; BYTE $0x0c // pinsrb xmm7, byte [r14 + rax + 3], 12 - QUAD $0x031e7c203a0f4166; BYTE $0x0d // pinsrb xmm7, byte [r14 + rbx + 3], 13 - QUAD $0x030e7c203a0f4366; BYTE $0x0e // pinsrb xmm7, byte [r14 + r9 + 3], 14 - QUAD $0x03167c203a0f4166; BYTE $0x0f // pinsrb xmm7, byte [r14 + rdx + 3], 15 - QUAD $0x04264c203a0f4766; BYTE $0x01 // pinsrb xmm9, byte [r14 + r12 + 4], 1 - QUAD $0x040e4c203a0f4566; BYTE $0x02 // pinsrb xmm9, byte [r14 + rcx + 4], 2 + QUAD $0x031e7c203a0f4166; BYTE $0x04 // pinsrb xmm7, byte [r14 + rbx + 3], 4 + QUAD $0x030e7c203a0f4366; BYTE $0x05 // pinsrb xmm7, byte [r14 + r9 + 3], 5 + QUAD $0x031e7c203a0f4366; BYTE $0x06 // pinsrb xmm7, byte [r14 + r11 + 3], 6 + QUAD $0x03167c203a0f4166; BYTE $0x07 // pinsrb xmm7, byte [r14 + rdx + 3], 7 + QUAD $0x03167c203a0f4366; BYTE $0x08 // pinsrb xmm7, byte [r14 + r10 + 3], 8 + QUAD $0x03267c203a0f4366; BYTE $0x09 // pinsrb xmm7, byte [r14 + r12 + 3], 9 + QUAD $0x03067c203a0f4366; BYTE $0x0a // pinsrb xmm7, byte [r14 + r8 + 3], 10 + QUAD $0x030e7c203a0f4166; BYTE $0x0b // pinsrb xmm7, byte [r14 + rcx + 3], 11 + QUAD $0x033e7c203a0f4166; BYTE $0x0c // pinsrb xmm7, byte [r14 + rdi + 3], 12 + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x03067c203a0f4166; BYTE $0x0d // pinsrb xmm7, byte [r14 + rax + 3], 13 + QUAD $0x03367c203a0f4166; BYTE $0x0e // pinsrb xmm7, byte [r14 + rsi + 3], 14 + QUAD $0x032e7c203a0f4366; BYTE $0x0f // pinsrb xmm7, byte [r14 + r13 + 3], 15 + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + QUAD $0x04064c203a0f4566; BYTE $0x01 // pinsrb xmm9, byte [r14 + rax + 4], 1 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x04064c203a0f4566; BYTE $0x02 // pinsrb xmm9, byte [r14 + rax + 4], 2 QUAD $0x043e4c203a0f4766; BYTE $0x03 // pinsrb xmm9, byte [r14 + r15 + 4], 3 - QUAD $0x041e4c203a0f4766; BYTE $0x04 // pinsrb xmm9, byte [r14 + r11 + 4], 4 - LONG $0x24648b4c; BYTE $0x60 // mov r12, qword [rsp + 96] - QUAD $0x04264c203a0f4766; BYTE $0x05 // pinsrb xmm9, byte [r14 + r12 + 4], 5 - QUAD $0x04164c203a0f4766; BYTE $0x06 // pinsrb xmm9, byte [r14 + r10 + 4], 6 - QUAD $0x04064c203a0f4766; BYTE $0x07 // pinsrb xmm9, byte [r14 + r8 + 4], 7 - QUAD $0x042e4c203a0f4766; BYTE $0x08 // pinsrb xmm9, byte [r14 + r13 + 4], 8 - QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] - QUAD $0x040e4c203a0f4566; BYTE $0x09 // pinsrb xmm9, byte [r14 + rcx + 4], 9 - QUAD $0x043e4c203a0f4566; BYTE $0x0a // pinsrb xmm9, byte [r14 + rdi + 4], 10 - QUAD $0x04364c203a0f4566; BYTE $0x0b // pinsrb xmm9, byte [r14 + rsi + 4], 11 - QUAD $0x04064c203a0f4566; BYTE $0x0c // pinsrb xmm9, byte [r14 + rax + 4], 12 - QUAD $0x041e4c203a0f4566; BYTE $0x0d // pinsrb xmm9, byte [r14 + rbx + 4], 13 - QUAD $0x040e4c203a0f4766; BYTE $0x0e // pinsrb xmm9, byte [r14 + r9 + 4], 14 - QUAD $0x04164c203a0f4566; BYTE $0x0f // pinsrb xmm9, byte [r14 + rdx + 4], 15 + QUAD $0x041e4c203a0f4566; BYTE $0x04 // pinsrb xmm9, byte [r14 + rbx + 4], 4 + QUAD $0x040e4c203a0f4766; BYTE $0x05 // pinsrb xmm9, byte [r14 + r9 + 4], 5 + QUAD $0x041e4c203a0f4766; BYTE $0x06 // pinsrb xmm9, byte [r14 + r11 + 4], 6 + QUAD $0x04164c203a0f4566; BYTE $0x07 // pinsrb xmm9, byte [r14 + rdx + 4], 7 + QUAD $0x04164c203a0f4766; BYTE $0x08 // pinsrb xmm9, byte [r14 + r10 + 4], 8 + QUAD $0x000000902494894c // mov qword [rsp + 144], r10 + QUAD $0x04264c203a0f4766; BYTE $0x09 // pinsrb xmm9, byte [r14 + r12 + 4], 9 + QUAD $0x04064c203a0f4766; BYTE $0x0a // pinsrb xmm9, byte [r14 + r8 + 4], 10 + QUAD $0x040e4c203a0f4566; BYTE $0x0b // pinsrb xmm9, byte [r14 + rcx + 4], 11 + QUAD $0x043e4c203a0f4566; BYTE $0x0c // pinsrb xmm9, byte [r14 + rdi + 4], 12 + LONG $0x24548b48; BYTE $0x40 // mov rdx, qword [rsp + 64] + QUAD $0x04164c203a0f4566; BYTE $0x0d // pinsrb xmm9, byte [r14 + rdx + 4], 13 + QUAD $0x04364c203a0f4566; BYTE $0x0e // pinsrb xmm9, byte [r14 + rsi + 4], 14 + QUAD $0x042e4c203a0f4766; BYTE $0x0f // pinsrb xmm9, byte [r14 + r13 + 4], 15 LONG $0xe9740f66 // pcmpeqb xmm5, xmm1 QUAD $0x00000110856f0f66 // movdqa xmm0, oword 272[rbp] /* [rip + .LCPI5_17] */ LONG $0xe8df0f66 // pandn xmm5, xmm0 @@ -27005,87 +28269,82 @@ LBB5_86: QUAD $0x00000120856f0f66 // movdqa xmm0, oword 288[rbp] /* [rip + .LCPI5_18] */ LONG $0xf8df0f66 // pandn xmm7, xmm0 LONG $0xfdeb0f66 // por xmm7, xmm5 - LONG $0x24548b48; BYTE $0x50 // mov rdx, qword [rsp + 80] - LONG $0x74b60f41; WORD $0x1116 // movzx esi, byte [r14 + rdx + 17] + QUAD $0x00000080248c8b4c // mov r9, qword [rsp + 128] + LONG $0x74b60f43; WORD $0x110e // movzx esi, byte [r14 + r9 + 17] LONG $0xe66e0f66 // movd xmm4, esi LONG $0x740f4466; BYTE $0xc9 // pcmpeqb xmm9, xmm1 QUAD $0x00000130856f0f66 // movdqa xmm0, oword 304[rbp] /* [rip + .LCPI5_19] */ LONG $0xdf0f4466; BYTE $0xc8 // pandn xmm9, xmm0 LONG $0xeb0f4466; BYTE $0xcf // por xmm9, xmm7 - LONG $0x74b60f41; WORD $0x1216 // movzx esi, byte [r14 + rdx + 18] + LONG $0x74b60f43; WORD $0x120e // movzx esi, byte [r14 + r9 + 18] LONG $0xfe6e0f66 // movd xmm7, esi LONG $0xc0760f66 // pcmpeqd xmm0, xmm0 LONG $0xd8f80f66 // psubb xmm3, xmm0 LONG $0xeb0f4466; BYTE $0xcb // por xmm9, xmm3 - LONG $0x74b60f41; WORD $0x1316 // movzx esi, byte [r14 + rdx + 19] + LONG $0x74b60f43; WORD $0x130e // movzx esi, byte [r14 + r9 + 19] LONG $0xee6e0f66 // movd xmm5, esi - LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] - QUAD $0x051654203a0f4166; BYTE $0x01 // pinsrb xmm2, byte [r14 + rdx + 5], 1 - LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] - QUAD $0x053e54203a0f4166; BYTE $0x02 // pinsrb xmm2, byte [r14 + rdi + 5], 2 + LONG $0x244c8b4c; BYTE $0x18 // mov r9, qword [rsp + 24] + QUAD $0x050e54203a0f4366; BYTE $0x01 // pinsrb xmm2, byte [r14 + r9 + 5], 1 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x050654203a0f4166; BYTE $0x02 // pinsrb xmm2, byte [r14 + rax + 5], 2 QUAD $0x053e54203a0f4366; BYTE $0x03 // pinsrb xmm2, byte [r14 + r15 + 5], 3 - QUAD $0x051e54203a0f4366; BYTE $0x04 // pinsrb xmm2, byte [r14 + r11 + 5], 4 - WORD $0x894d; BYTE $0xe1 // mov r9, r12 - QUAD $0x052654203a0f4366; BYTE $0x05 // pinsrb xmm2, byte [r14 + r12 + 5], 5 - QUAD $0x051654203a0f4366; BYTE $0x06 // pinsrb xmm2, byte [r14 + r10 + 5], 6 - WORD $0x894d; BYTE $0xc5 // mov r13, r8 - QUAD $0x050654203a0f4366; BYTE $0x07 // pinsrb xmm2, byte [r14 + r8 + 5], 7 - LONG $0x245c8b4c; BYTE $0x68 // mov r11, qword [rsp + 104] - QUAD $0x051e54203a0f4366; BYTE $0x08 // pinsrb xmm2, byte [r14 + r11 + 5], 8 + QUAD $0x051e54203a0f4166; BYTE $0x04 // pinsrb xmm2, byte [r14 + rbx + 5], 4 + WORD $0x8949; BYTE $0xdc // mov r12, rbx + QUAD $0x00000098249c8948 // mov qword [rsp + 152], rbx + LONG $0x246c8b4c; BYTE $0x60 // mov r13, qword [rsp + 96] + QUAD $0x052e54203a0f4366; BYTE $0x05 // pinsrb xmm2, byte [r14 + r13 + 5], 5 + QUAD $0x051e54203a0f4366; BYTE $0x06 // pinsrb xmm2, byte [r14 + r11 + 5], 6 + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + QUAD $0x053654203a0f4166; BYTE $0x07 // pinsrb xmm2, byte [r14 + rsi + 5], 7 + QUAD $0x051654203a0f4366; BYTE $0x08 // pinsrb xmm2, byte [r14 + r10 + 5], 8 + LONG $0x247c8b4c; BYTE $0x58 // mov r15, qword [rsp + 88] + QUAD $0x053e54203a0f4366; BYTE $0x09 // pinsrb xmm2, byte [r14 + r15 + 5], 9 + QUAD $0x050654203a0f4366; BYTE $0x0a // pinsrb xmm2, byte [r14 + r8 + 5], 10 + QUAD $0x050e54203a0f4166; BYTE $0x0b // pinsrb xmm2, byte [r14 + rcx + 5], 11 + QUAD $0x053e54203a0f4166; BYTE $0x0c // pinsrb xmm2, byte [r14 + rdi + 5], 12 + QUAD $0x051654203a0f4166; BYTE $0x0d // pinsrb xmm2, byte [r14 + rdx + 5], 13 + LONG $0x245c8b4c; BYTE $0x38 // mov r11, qword [rsp + 56] + QUAD $0x051e54203a0f4366; BYTE $0x0e // pinsrb xmm2, byte [r14 + r11 + 5], 14 + LONG $0x24548b4c; BYTE $0x20 // mov r10, qword [rsp + 32] + QUAD $0x051654203a0f4366; BYTE $0x0f // pinsrb xmm2, byte [r14 + r10 + 5], 15 + QUAD $0x060e44203a0f4766; BYTE $0x01 // pinsrb xmm8, byte [r14 + r9 + 6], 1 + QUAD $0x060644203a0f4566; BYTE $0x02 // pinsrb xmm8, byte [r14 + rax + 6], 2 + LONG $0x245c8b48; BYTE $0x78 // mov rbx, qword [rsp + 120] + QUAD $0x061e44203a0f4566; BYTE $0x03 // pinsrb xmm8, byte [r14 + rbx + 6], 3 + QUAD $0x062644203a0f4766; BYTE $0x04 // pinsrb xmm8, byte [r14 + r12 + 6], 4 + QUAD $0x062e44203a0f4766; BYTE $0x05 // pinsrb xmm8, byte [r14 + r13 + 6], 5 + QUAD $0x0000008824a48b4c // mov r12, qword [rsp + 136] + QUAD $0x062644203a0f4766; BYTE $0x06 // pinsrb xmm8, byte [r14 + r12 + 6], 6 + QUAD $0x063644203a0f4566; BYTE $0x07 // pinsrb xmm8, byte [r14 + rsi + 6], 7 QUAD $0x0000009024a48b4c // mov r12, qword [rsp + 144] - QUAD $0x052654203a0f4366; BYTE $0x09 // pinsrb xmm2, byte [r14 + r12 + 5], 9 - LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] - QUAD $0x053654203a0f4166; BYTE $0x0a // pinsrb xmm2, byte [r14 + rsi + 5], 10 - LONG $0x24448b4c; BYTE $0x58 // mov r8, qword [rsp + 88] - QUAD $0x050654203a0f4366; BYTE $0x0b // pinsrb xmm2, byte [r14 + r8 + 5], 11 - WORD $0x8948; BYTE $0xc1 // mov rcx, rax - QUAD $0x050654203a0f4166; BYTE $0x0c // pinsrb xmm2, byte [r14 + rax + 5], 12 - QUAD $0x051e54203a0f4166; BYTE $0x0d // pinsrb xmm2, byte [r14 + rbx + 5], 13 - LONG $0x247c8b4c; BYTE $0x28 // mov r15, qword [rsp + 40] - QUAD $0x053e54203a0f4366; BYTE $0x0e // pinsrb xmm2, byte [r14 + r15 + 5], 14 - LONG $0x247c8b4c; BYTE $0x10 // mov r15, qword [rsp + 16] - QUAD $0x053e54203a0f4366; BYTE $0x0f // pinsrb xmm2, byte [r14 + r15 + 5], 15 - QUAD $0x061644203a0f4566; BYTE $0x01 // pinsrb xmm8, byte [r14 + rdx + 6], 1 - QUAD $0x063e44203a0f4566; BYTE $0x02 // pinsrb xmm8, byte [r14 + rdi + 6], 2 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - QUAD $0x060644203a0f4566; BYTE $0x03 // pinsrb xmm8, byte [r14 + rax + 6], 3 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] - QUAD $0x060644203a0f4566; BYTE $0x04 // pinsrb xmm8, byte [r14 + rax + 6], 4 - QUAD $0x060e44203a0f4766; BYTE $0x05 // pinsrb xmm8, byte [r14 + r9 + 6], 5 - QUAD $0x061644203a0f4766; BYTE $0x06 // pinsrb xmm8, byte [r14 + r10 + 6], 6 - QUAD $0x062e44203a0f4766; BYTE $0x07 // pinsrb xmm8, byte [r14 + r13 + 6], 7 - WORD $0x894d; BYTE $0xea // mov r10, r13 - QUAD $0x0000008824ac894c // mov qword [rsp + 136], r13 - QUAD $0x061e44203a0f4766; BYTE $0x08 // pinsrb xmm8, byte [r14 + r11 + 6], 8 - QUAD $0x062644203a0f4766; BYTE $0x09 // pinsrb xmm8, byte [r14 + r12 + 6], 9 - QUAD $0x063644203a0f4566; BYTE $0x0a // pinsrb xmm8, byte [r14 + rsi + 6], 10 - QUAD $0x060644203a0f4766; BYTE $0x0b // pinsrb xmm8, byte [r14 + r8 + 6], 11 - QUAD $0x060e44203a0f4566; BYTE $0x0c // pinsrb xmm8, byte [r14 + rcx + 6], 12 - QUAD $0x061e44203a0f4566; BYTE $0x0d // pinsrb xmm8, byte [r14 + rbx + 6], 13 - LONG $0x246c8b4c; BYTE $0x28 // mov r13, qword [rsp + 40] - QUAD $0x062e44203a0f4766; BYTE $0x0e // pinsrb xmm8, byte [r14 + r13 + 6], 14 - WORD $0x894d; BYTE $0xf8 // mov r8, r15 - QUAD $0x063e44203a0f4766; BYTE $0x0f // pinsrb xmm8, byte [r14 + r15 + 6], 15 - QUAD $0x071674203a0f4566; BYTE $0x01 // pinsrb xmm14, byte [r14 + rdx + 7], 1 - QUAD $0x073e74203a0f4566; BYTE $0x02 // pinsrb xmm14, byte [r14 + rdi + 7], 2 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - QUAD $0x070674203a0f4566; BYTE $0x03 // pinsrb xmm14, byte [r14 + rax + 7], 3 - WORD $0x8948; BYTE $0xc2 // mov rdx, rax - LONG $0x245c8b4c; BYTE $0x30 // mov r11, qword [rsp + 48] + QUAD $0x062644203a0f4766; BYTE $0x08 // pinsrb xmm8, byte [r14 + r12 + 6], 8 + QUAD $0x063e44203a0f4766; BYTE $0x09 // pinsrb xmm8, byte [r14 + r15 + 6], 9 + QUAD $0x060644203a0f4766; BYTE $0x0a // pinsrb xmm8, byte [r14 + r8 + 6], 10 + QUAD $0x060e44203a0f4566; BYTE $0x0b // pinsrb xmm8, byte [r14 + rcx + 6], 11 + QUAD $0x063e44203a0f4566; BYTE $0x0c // pinsrb xmm8, byte [r14 + rdi + 6], 12 + QUAD $0x061644203a0f4566; BYTE $0x0d // pinsrb xmm8, byte [r14 + rdx + 6], 13 + QUAD $0x061e44203a0f4766; BYTE $0x0e // pinsrb xmm8, byte [r14 + r11 + 6], 14 + QUAD $0x061644203a0f4766; BYTE $0x0f // pinsrb xmm8, byte [r14 + r10 + 6], 15 + QUAD $0x070e74203a0f4766; BYTE $0x01 // pinsrb xmm14, byte [r14 + r9 + 7], 1 + QUAD $0x070674203a0f4566; BYTE $0x02 // pinsrb xmm14, byte [r14 + rax + 7], 2 + WORD $0x8949; BYTE $0xc7 // mov r15, rax + QUAD $0x071e74203a0f4566; BYTE $0x03 // pinsrb xmm14, byte [r14 + rbx + 7], 3 + QUAD $0x00000098249c8b4c // mov r11, qword [rsp + 152] QUAD $0x071e74203a0f4766; BYTE $0x04 // pinsrb xmm14, byte [r14 + r11 + 7], 4 - QUAD $0x070e74203a0f4766; BYTE $0x05 // pinsrb xmm14, byte [r14 + r9 + 7], 5 - QUAD $0x00000098248c8b4c // mov r9, qword [rsp + 152] - QUAD $0x070e74203a0f4766; BYTE $0x06 // pinsrb xmm14, byte [r14 + r9 + 7], 6 - QUAD $0x071674203a0f4766; BYTE $0x07 // pinsrb xmm14, byte [r14 + r10 + 7], 7 - LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] - QUAD $0x070674203a0f4566; BYTE $0x08 // pinsrb xmm14, byte [r14 + rax + 7], 8 + QUAD $0x072e74203a0f4766; BYTE $0x05 // pinsrb xmm14, byte [r14 + r13 + 7], 5 + QUAD $0x0000008824848b48 // mov rax, qword [rsp + 136] + QUAD $0x070674203a0f4566; BYTE $0x06 // pinsrb xmm14, byte [r14 + rax + 7], 6 + QUAD $0x073674203a0f4566; BYTE $0x07 // pinsrb xmm14, byte [r14 + rsi + 7], 7 + WORD $0x894d; BYTE $0xe1 // mov r9, r12 + QUAD $0x072674203a0f4766; BYTE $0x08 // pinsrb xmm14, byte [r14 + r12 + 7], 8 + LONG $0x24648b4c; BYTE $0x58 // mov r12, qword [rsp + 88] QUAD $0x072674203a0f4766; BYTE $0x09 // pinsrb xmm14, byte [r14 + r12 + 7], 9 - QUAD $0x073674203a0f4566; BYTE $0x0a // pinsrb xmm14, byte [r14 + rsi + 7], 10 - LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] - QUAD $0x070674203a0f4566; BYTE $0x0b // pinsrb xmm14, byte [r14 + rax + 7], 11 - QUAD $0x070e74203a0f4566; BYTE $0x0c // pinsrb xmm14, byte [r14 + rcx + 7], 12 - QUAD $0x071e74203a0f4566; BYTE $0x0d // pinsrb xmm14, byte [r14 + rbx + 7], 13 - QUAD $0x072e74203a0f4766; BYTE $0x0e // pinsrb xmm14, byte [r14 + r13 + 7], 14 + QUAD $0x070674203a0f4766; BYTE $0x0a // pinsrb xmm14, byte [r14 + r8 + 7], 10 + QUAD $0x070e74203a0f4566; BYTE $0x0b // pinsrb xmm14, byte [r14 + rcx + 7], 11 + QUAD $0x073e74203a0f4566; BYTE $0x0c // pinsrb xmm14, byte [r14 + rdi + 7], 12 + QUAD $0x071674203a0f4566; BYTE $0x0d // pinsrb xmm14, byte [r14 + rdx + 7], 13 + LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] + QUAD $0x073e74203a0f4566; BYTE $0x0e // pinsrb xmm14, byte [r14 + rdi + 7], 14 LONG $0x6f0f4166; BYTE $0xce // movdqa xmm1, xmm14 QUAD $0x00b024b46f0f4466; WORD $0x0000 // movdqa xmm14, oword [rsp + 176] LONG $0x740f4166; BYTE $0xd6 // pcmpeqb xmm2, xmm14 @@ -27095,147 +28354,152 @@ LBB5_86: QUAD $0x00000150856f0f66 // movdqa xmm0, oword 336[rbp] /* [rip + .LCPI5_21] */ LONG $0xdf0f4466; BYTE $0xc0 // pandn xmm8, xmm0 LONG $0xeb0f4466; BYTE $0xc2 // por xmm8, xmm2 - LONG $0x24548b4c; BYTE $0x50 // mov r10, qword [rsp + 80] + QUAD $0x0000008024948b4c // mov r10, qword [rsp + 128] LONG $0x74b60f43; WORD $0x1416 // movzx esi, byte [r14 + r10 + 20] LONG $0xde6e0f66 // movd xmm3, esi - QUAD $0x073e4c203a0f4366; BYTE $0x0f // pinsrb xmm1, byte [r14 + r15 + 7], 15 + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x07064c203a0f4166; BYTE $0x0f // pinsrb xmm1, byte [r14 + rax + 7], 15 LONG $0x740f4166; BYTE $0xce // pcmpeqb xmm1, xmm14 LONG $0x456f0f66; BYTE $0x60 // movdqa xmm0, oword 96[rbp] /* [rip + .LCPI5_6] */ LONG $0xc8df0f66 // pandn xmm1, xmm0 LONG $0xeb0f4166; BYTE $0xc8 // por xmm1, xmm8 LONG $0x74b60f43; WORD $0x1516 // movzx esi, byte [r14 + r10 + 21] LONG $0xd66e0f66 // movd xmm2, esi - QUAD $0x00010024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 256] - LONG $0x244c8b48; BYTE $0x18 // mov rcx, qword [rsp + 24] - QUAD $0x080e44203a0f4166; BYTE $0x01 // pinsrb xmm0, byte [r14 + rcx + 8], 1 - QUAD $0x083e44203a0f4166; BYTE $0x02 // pinsrb xmm0, byte [r14 + rdi + 8], 2 - WORD $0x8949; BYTE $0xd5 // mov r13, rdx - QUAD $0x081644203a0f4166; BYTE $0x03 // pinsrb xmm0, byte [r14 + rdx + 8], 3 + LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] + QUAD $0x0000f024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 240] + QUAD $0x081644203a0f4166; BYTE $0x01 // pinsrb xmm0, byte [r14 + rdx + 8], 1 + QUAD $0x083e44203a0f4366; BYTE $0x02 // pinsrb xmm0, byte [r14 + r15 + 8], 2 + QUAD $0x081e44203a0f4166; BYTE $0x03 // pinsrb xmm0, byte [r14 + rbx + 8], 3 + WORD $0x8949; BYTE $0xdf // mov r15, rbx + WORD $0x894c; BYTE $0xdb // mov rbx, r11 QUAD $0x081e44203a0f4366; BYTE $0x04 // pinsrb xmm0, byte [r14 + r11 + 8], 4 - WORD $0x894c; BYTE $0xda // mov rdx, r11 - LONG $0x24448b4c; BYTE $0x60 // mov r8, qword [rsp + 96] - QUAD $0x080644203a0f4366; BYTE $0x05 // pinsrb xmm0, byte [r14 + r8 + 8], 5 - QUAD $0x080e44203a0f4366; BYTE $0x06 // pinsrb xmm0, byte [r14 + r9 + 8], 6 - WORD $0x894d; BYTE $0xcf // mov r15, r9 - QUAD $0x0000008824bc8b48 // mov rdi, qword [rsp + 136] - QUAD $0x083e44203a0f4166; BYTE $0x07 // pinsrb xmm0, byte [r14 + rdi + 8], 7 - LONG $0x245c8b48; BYTE $0x68 // mov rbx, qword [rsp + 104] - QUAD $0x081e44203a0f4166; BYTE $0x08 // pinsrb xmm0, byte [r14 + rbx + 8], 8 + WORD $0x894d; BYTE $0xeb // mov r11, r13 + QUAD $0x082e44203a0f4366; BYTE $0x05 // pinsrb xmm0, byte [r14 + r13 + 8], 5 + QUAD $0x0000008824ac8b4c // mov r13, qword [rsp + 136] + QUAD $0x082e44203a0f4366; BYTE $0x06 // pinsrb xmm0, byte [r14 + r13 + 8], 6 + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] + QUAD $0x080e44203a0f4166; BYTE $0x07 // pinsrb xmm0, byte [r14 + rcx + 8], 7 + QUAD $0x080e44203a0f4366; BYTE $0x08 // pinsrb xmm0, byte [r14 + r9 + 8], 8 QUAD $0x082644203a0f4366; BYTE $0x09 // pinsrb xmm0, byte [r14 + r12 + 8], 9 - LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] - QUAD $0x083644203a0f4166; BYTE $0x0a // pinsrb xmm0, byte [r14 + rsi + 8], 10 - QUAD $0x080644203a0f4166; BYTE $0x0b // pinsrb xmm0, byte [r14 + rax + 8], 11 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] - QUAD $0x080644203a0f4166; BYTE $0x0c // pinsrb xmm0, byte [r14 + rax + 8], 12 - LONG $0x244c8b4c; BYTE $0x78 // mov r9, qword [rsp + 120] - QUAD $0x080e44203a0f4366; BYTE $0x0d // pinsrb xmm0, byte [r14 + r9 + 8], 13 - LONG $0x245c8b4c; BYTE $0x28 // mov r11, qword [rsp + 40] - QUAD $0x081e44203a0f4366; BYTE $0x0e // pinsrb xmm0, byte [r14 + r11 + 8], 14 - LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] - QUAD $0x083644203a0f4166; BYTE $0x0f // pinsrb xmm0, byte [r14 + rsi + 8], 15 + QUAD $0x080644203a0f4366; BYTE $0x0a // pinsrb xmm0, byte [r14 + r8 + 8], 10 + LONG $0x24448b4c; BYTE $0x48 // mov r8, qword [rsp + 72] + QUAD $0x080644203a0f4366; BYTE $0x0b // pinsrb xmm0, byte [r14 + r8 + 8], 11 + LONG $0x244c8b4c; BYTE $0x70 // mov r9, qword [rsp + 112] + QUAD $0x080e44203a0f4366; BYTE $0x0c // pinsrb xmm0, byte [r14 + r9 + 8], 12 + LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] + QUAD $0x083644203a0f4166; BYTE $0x0d // pinsrb xmm0, byte [r14 + rsi + 8], 13 + QUAD $0x083e44203a0f4166; BYTE $0x0e // pinsrb xmm0, byte [r14 + rdi + 8], 14 + QUAD $0x080644203a0f4166; BYTE $0x0f // pinsrb xmm0, byte [r14 + rax + 8], 15 LONG $0xeb0f4166; BYTE $0xc9 // por xmm1, xmm9 - QUAD $0x000100248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 256], xmm1 + QUAD $0x0000f0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 240], xmm1 LONG $0x74b60f43; WORD $0x1616 // movzx esi, byte [r14 + r10 + 22] LONG $0xce6e0f66 // movd xmm1, esi LONG $0x740f4166; BYTE $0xc6 // pcmpeqb xmm0, xmm14 - QUAD $0x090e5c203a0f4566; BYTE $0x01 // pinsrb xmm11, byte [r14 + rcx + 9], 1 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x09165c203a0f4566; BYTE $0x01 // pinsrb xmm11, byte [r14 + rdx + 9], 1 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x09065c203a0f4566; BYTE $0x02 // pinsrb xmm11, byte [r14 + rax + 9], 2 - QUAD $0x092e5c203a0f4766; BYTE $0x03 // pinsrb xmm11, byte [r14 + r13 + 9], 3 - QUAD $0x09165c203a0f4566; BYTE $0x04 // pinsrb xmm11, byte [r14 + rdx + 9], 4 - QUAD $0x09065c203a0f4766; BYTE $0x05 // pinsrb xmm11, byte [r14 + r8 + 9], 5 - WORD $0x894d; BYTE $0xfa // mov r10, r15 - QUAD $0x093e5c203a0f4766; BYTE $0x06 // pinsrb xmm11, byte [r14 + r15 + 9], 6 - QUAD $0x093e5c203a0f4566; BYTE $0x07 // pinsrb xmm11, byte [r14 + rdi + 9], 7 - WORD $0x8949; BYTE $0xff // mov r15, rdi - QUAD $0x091e5c203a0f4566; BYTE $0x08 // pinsrb xmm11, byte [r14 + rbx + 9], 8 + QUAD $0x093e5c203a0f4766; BYTE $0x03 // pinsrb xmm11, byte [r14 + r15 + 9], 3 + QUAD $0x091e5c203a0f4566; BYTE $0x04 // pinsrb xmm11, byte [r14 + rbx + 9], 4 + WORD $0x894c; BYTE $0xda // mov rdx, r11 + QUAD $0x091e5c203a0f4766; BYTE $0x05 // pinsrb xmm11, byte [r14 + r11 + 9], 5 + QUAD $0x092e5c203a0f4766; BYTE $0x06 // pinsrb xmm11, byte [r14 + r13 + 9], 6 + QUAD $0x090e5c203a0f4566; BYTE $0x07 // pinsrb xmm11, byte [r14 + rcx + 9], 7 + QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] + QUAD $0x09165c203a0f4766; BYTE $0x08 // pinsrb xmm11, byte [r14 + r10 + 9], 8 + WORD $0x894c; BYTE $0xe1 // mov rcx, r12 QUAD $0x09265c203a0f4766; BYTE $0x09 // pinsrb xmm11, byte [r14 + r12 + 9], 9 - LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] + LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] QUAD $0x09365c203a0f4566; BYTE $0x0a // pinsrb xmm11, byte [r14 + rsi + 9], 10 - LONG $0x24548b48; BYTE $0x58 // mov rdx, qword [rsp + 88] - QUAD $0x09165c203a0f4566; BYTE $0x0b // pinsrb xmm11, byte [r14 + rdx + 9], 11 - LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] - QUAD $0x093e5c203a0f4566; BYTE $0x0c // pinsrb xmm11, byte [r14 + rdi + 9], 12 - QUAD $0x090e5c203a0f4766; BYTE $0x0d // pinsrb xmm11, byte [r14 + r9 + 9], 13 - QUAD $0x091e5c203a0f4766; BYTE $0x0e // pinsrb xmm11, byte [r14 + r11 + 9], 14 - LONG $0x24448b4c; BYTE $0x10 // mov r8, qword [rsp + 16] + WORD $0x894c; BYTE $0xc2 // mov rdx, r8 + QUAD $0x09065c203a0f4766; BYTE $0x0b // pinsrb xmm11, byte [r14 + r8 + 9], 11 + WORD $0x894c; BYTE $0xcf // mov rdi, r9 + QUAD $0x090e5c203a0f4766; BYTE $0x0c // pinsrb xmm11, byte [r14 + r9 + 9], 12 + LONG $0x245c8b4c; BYTE $0x40 // mov r11, qword [rsp + 64] + QUAD $0x091e5c203a0f4766; BYTE $0x0d // pinsrb xmm11, byte [r14 + r11 + 9], 13 + LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] + QUAD $0x09265c203a0f4766; BYTE $0x0e // pinsrb xmm11, byte [r14 + r12 + 9], 14 + LONG $0x24448b4c; BYTE $0x20 // mov r8, qword [rsp + 32] QUAD $0x09065c203a0f4766; BYTE $0x0f // pinsrb xmm11, byte [r14 + r8 + 9], 15 - QUAD $0x0a0e64203a0f4566; BYTE $0x01 // pinsrb xmm12, byte [r14 + rcx + 10], 1 + LONG $0x244c8b4c; BYTE $0x18 // mov r9, qword [rsp + 24] + QUAD $0x0a0e64203a0f4766; BYTE $0x01 // pinsrb xmm12, byte [r14 + r9 + 10], 1 QUAD $0x0a0664203a0f4566; BYTE $0x02 // pinsrb xmm12, byte [r14 + rax + 10], 2 - QUAD $0x0a2e64203a0f4766; BYTE $0x03 // pinsrb xmm12, byte [r14 + r13 + 10], 3 - LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] + QUAD $0x0a3e64203a0f4766; BYTE $0x03 // pinsrb xmm12, byte [r14 + r15 + 10], 3 QUAD $0x0a1e64203a0f4566; BYTE $0x04 // pinsrb xmm12, byte [r14 + rbx + 10], 4 - LONG $0x246c8b4c; BYTE $0x60 // mov r13, qword [rsp + 96] - QUAD $0x0a2e64203a0f4766; BYTE $0x05 // pinsrb xmm12, byte [r14 + r13 + 10], 5 - QUAD $0x0a1664203a0f4766; BYTE $0x06 // pinsrb xmm12, byte [r14 + r10 + 10], 6 + LONG $0x245c8b48; BYTE $0x60 // mov rbx, qword [rsp + 96] + QUAD $0x0a1e64203a0f4566; BYTE $0x05 // pinsrb xmm12, byte [r14 + rbx + 10], 5 + QUAD $0x0a2e64203a0f4766; BYTE $0x06 // pinsrb xmm12, byte [r14 + r13 + 10], 6 + LONG $0x247c8b4c; BYTE $0x30 // mov r15, qword [rsp + 48] QUAD $0x0a3e64203a0f4766; BYTE $0x07 // pinsrb xmm12, byte [r14 + r15 + 10], 7 - LONG $0x245c8b48; BYTE $0x68 // mov rbx, qword [rsp + 104] - QUAD $0x0a1e64203a0f4566; BYTE $0x08 // pinsrb xmm12, byte [r14 + rbx + 10], 8 - QUAD $0x0a2664203a0f4766; BYTE $0x09 // pinsrb xmm12, byte [r14 + r12 + 10], 9 + QUAD $0x0a1664203a0f4766; BYTE $0x08 // pinsrb xmm12, byte [r14 + r10 + 10], 8 + QUAD $0x0a0e64203a0f4566; BYTE $0x09 // pinsrb xmm12, byte [r14 + rcx + 10], 9 QUAD $0x0a3664203a0f4566; BYTE $0x0a // pinsrb xmm12, byte [r14 + rsi + 10], 10 QUAD $0x0a1664203a0f4566; BYTE $0x0b // pinsrb xmm12, byte [r14 + rdx + 10], 11 QUAD $0x0a3e64203a0f4566; BYTE $0x0c // pinsrb xmm12, byte [r14 + rdi + 10], 12 - QUAD $0x0a0e64203a0f4766; BYTE $0x0d // pinsrb xmm12, byte [r14 + r9 + 10], 13 - QUAD $0x0a1e64203a0f4766; BYTE $0x0e // pinsrb xmm12, byte [r14 + r11 + 10], 14 + QUAD $0x0a1e64203a0f4766; BYTE $0x0d // pinsrb xmm12, byte [r14 + r11 + 10], 13 + QUAD $0x0a2664203a0f4766; BYTE $0x0e // pinsrb xmm12, byte [r14 + r12 + 10], 14 + WORD $0x894d; BYTE $0xe3 // mov r11, r12 QUAD $0x0a0664203a0f4766; BYTE $0x0f // pinsrb xmm12, byte [r14 + r8 + 10], 15 - QUAD $0x0b0e6c203a0f4566; BYTE $0x01 // pinsrb xmm13, byte [r14 + rcx + 11], 1 + WORD $0x894d; BYTE $0xc4 // mov r12, r8 + QUAD $0x0b0e6c203a0f4766; BYTE $0x01 // pinsrb xmm13, byte [r14 + r9 + 11], 1 QUAD $0x0b066c203a0f4566; BYTE $0x02 // pinsrb xmm13, byte [r14 + rax + 11], 2 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - QUAD $0x0b066c203a0f4566; BYTE $0x03 // pinsrb xmm13, byte [r14 + rax + 11], 3 + WORD $0x8949; BYTE $0xc0 // mov r8, rax + LONG $0x247c8b4c; BYTE $0x78 // mov r15, qword [rsp + 120] + QUAD $0x0b3e6c203a0f4766; BYTE $0x03 // pinsrb xmm13, byte [r14 + r15 + 11], 3 + QUAD $0x00000098248c8b4c // mov r9, qword [rsp + 152] + QUAD $0x0b0e6c203a0f4766; BYTE $0x04 // pinsrb xmm13, byte [r14 + r9 + 11], 4 + QUAD $0x0b1e6c203a0f4566; BYTE $0x05 // pinsrb xmm13, byte [r14 + rbx + 11], 5 + QUAD $0x0b2e6c203a0f4766; BYTE $0x06 // pinsrb xmm13, byte [r14 + r13 + 11], 6 LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] - QUAD $0x0b066c203a0f4566; BYTE $0x04 // pinsrb xmm13, byte [r14 + rax + 11], 4 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] - QUAD $0x0b066c203a0f4566; BYTE $0x05 // pinsrb xmm13, byte [r14 + rax + 11], 5 - QUAD $0x0b166c203a0f4766; BYTE $0x06 // pinsrb xmm13, byte [r14 + r10 + 11], 6 - QUAD $0x0b3e6c203a0f4766; BYTE $0x07 // pinsrb xmm13, byte [r14 + r15 + 11], 7 - LONG $0x246c8b4c; BYTE $0x68 // mov r13, qword [rsp + 104] - QUAD $0x0b2e6c203a0f4766; BYTE $0x08 // pinsrb xmm13, byte [r14 + r13 + 11], 8 - QUAD $0x0b266c203a0f4766; BYTE $0x09 // pinsrb xmm13, byte [r14 + r12 + 11], 9 + QUAD $0x0b066c203a0f4566; BYTE $0x07 // pinsrb xmm13, byte [r14 + rax + 11], 7 + QUAD $0x0b166c203a0f4766; BYTE $0x08 // pinsrb xmm13, byte [r14 + r10 + 11], 8 + QUAD $0x0b0e6c203a0f4566; BYTE $0x09 // pinsrb xmm13, byte [r14 + rcx + 11], 9 QUAD $0x0b366c203a0f4566; BYTE $0x0a // pinsrb xmm13, byte [r14 + rsi + 11], 10 QUAD $0x0b166c203a0f4566; BYTE $0x0b // pinsrb xmm13, byte [r14 + rdx + 11], 11 QUAD $0x0b3e6c203a0f4566; BYTE $0x0c // pinsrb xmm13, byte [r14 + rdi + 11], 12 - QUAD $0x0b0e6c203a0f4766; BYTE $0x0d // pinsrb xmm13, byte [r14 + r9 + 11], 13 + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x0b066c203a0f4566; BYTE $0x0d // pinsrb xmm13, byte [r14 + rax + 11], 13 QUAD $0x0b1e6c203a0f4766; BYTE $0x0e // pinsrb xmm13, byte [r14 + r11 + 11], 14 - WORD $0x894c; BYTE $0xd8 // mov rax, r11 - QUAD $0x0b066c203a0f4766; BYTE $0x0f // pinsrb xmm13, byte [r14 + r8 + 11], 15 + QUAD $0x0b266c203a0f4766; BYTE $0x0f // pinsrb xmm13, byte [r14 + r12 + 11], 15 LONG $0x740f4566; BYTE $0xde // pcmpeqb xmm11, xmm14 QUAD $0x0001009ddf0f4466; BYTE $0x00 // pandn xmm11, oword 256[rbp] /* [rip + .LCPI5_16] */ LONG $0xfc0f4466; BYTE $0xd8 // paddb xmm11, xmm0 - LONG $0x245c8b48; BYTE $0x50 // mov rbx, qword [rsp + 80] - LONG $0x74b60f41; WORD $0x171e // movzx esi, byte [r14 + rbx + 23] + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] + LONG $0x74b60f41; WORD $0x1706 // movzx esi, byte [r14 + rax + 23] LONG $0x6e0f4466; BYTE $0xc6 // movd xmm8, esi LONG $0x740f4566; BYTE $0xe6 // pcmpeqb xmm12, xmm14 QUAD $0x000110a5df0f4466; BYTE $0x00 // pandn xmm12, oword 272[rbp] /* [rip + .LCPI5_17] */ LONG $0x740f4566; BYTE $0xee // pcmpeqb xmm13, xmm14 QUAD $0x000120addf0f4466; BYTE $0x00 // pandn xmm13, oword 288[rbp] /* [rip + .LCPI5_18] */ LONG $0xeb0f4566; BYTE $0xec // por xmm13, xmm12 - LONG $0x74b60f41; WORD $0x181e // movzx esi, byte [r14 + rbx + 24] + LONG $0x74b60f41; WORD $0x1806 // movzx esi, byte [r14 + rax + 24] LONG $0x6e0f4466; BYTE $0xe6 // movd xmm12, esi - QUAD $0x00e0248c6f0f4466; WORD $0x0000 // movdqa xmm9, oword [rsp + 224] - QUAD $0x0c0e4c203a0f4566; BYTE $0x01 // pinsrb xmm9, byte [r14 + rcx + 12], 1 - LONG $0x24648b4c; BYTE $0x48 // mov r12, qword [rsp + 72] - QUAD $0x0c264c203a0f4766; BYTE $0x02 // pinsrb xmm9, byte [r14 + r12 + 12], 2 - LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] + QUAD $0x00d0248c6f0f4466; WORD $0x0000 // movdqa xmm9, oword [rsp + 208] + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + QUAD $0x0c064c203a0f4566; BYTE $0x01 // pinsrb xmm9, byte [r14 + rax + 12], 1 + WORD $0x894d; BYTE $0xc4 // mov r12, r8 + QUAD $0x0c064c203a0f4766; BYTE $0x02 // pinsrb xmm9, byte [r14 + r8 + 12], 2 QUAD $0x0c3e4c203a0f4766; BYTE $0x03 // pinsrb xmm9, byte [r14 + r15 + 12], 3 - LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] - QUAD $0x0c1e4c203a0f4566; BYTE $0x04 // pinsrb xmm9, byte [r14 + rbx + 12], 4 + WORD $0x894c; BYTE $0xcb // mov rbx, r9 + QUAD $0x0c0e4c203a0f4766; BYTE $0x04 // pinsrb xmm9, byte [r14 + r9 + 12], 4 LONG $0x244c8b4c; BYTE $0x60 // mov r9, qword [rsp + 96] QUAD $0x0c0e4c203a0f4766; BYTE $0x05 // pinsrb xmm9, byte [r14 + r9 + 12], 5 - WORD $0x894d; BYTE $0xd0 // mov r8, r10 - QUAD $0x0c164c203a0f4766; BYTE $0x06 // pinsrb xmm9, byte [r14 + r10 + 12], 6 - QUAD $0x00000088249c8b4c // mov r11, qword [rsp + 136] - QUAD $0x0c1e4c203a0f4766; BYTE $0x07 // pinsrb xmm9, byte [r14 + r11 + 12], 7 - QUAD $0x0c2e4c203a0f4766; BYTE $0x08 // pinsrb xmm9, byte [r14 + r13 + 12], 8 - QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] + WORD $0x894d; BYTE $0xeb // mov r11, r13 + QUAD $0x0c2e4c203a0f4766; BYTE $0x06 // pinsrb xmm9, byte [r14 + r13 + 12], 6 + LONG $0x24448b4c; BYTE $0x30 // mov r8, qword [rsp + 48] + QUAD $0x0c064c203a0f4766; BYTE $0x07 // pinsrb xmm9, byte [r14 + r8 + 12], 7 + WORD $0x894c; BYTE $0xd6 // mov rsi, r10 + QUAD $0x0c164c203a0f4766; BYTE $0x08 // pinsrb xmm9, byte [r14 + r10 + 12], 8 + LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] QUAD $0x0c0e4c203a0f4566; BYTE $0x09 // pinsrb xmm9, byte [r14 + rcx + 12], 9 - LONG $0x24548b4c; BYTE $0x70 // mov r10, qword [rsp + 112] + LONG $0x24548b4c; BYTE $0x68 // mov r10, qword [rsp + 104] QUAD $0x0c164c203a0f4766; BYTE $0x0a // pinsrb xmm9, byte [r14 + r10 + 12], 10 QUAD $0x0c164c203a0f4566; BYTE $0x0b // pinsrb xmm9, byte [r14 + rdx + 12], 11 QUAD $0x0c3e4c203a0f4566; BYTE $0x0c // pinsrb xmm9, byte [r14 + rdi + 12], 12 - LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] - QUAD $0x0c364c203a0f4566; BYTE $0x0d // pinsrb xmm9, byte [r14 + rsi + 12], 13 + LONG $0x246c8b4c; BYTE $0x40 // mov r13, qword [rsp + 64] + QUAD $0x0c2e4c203a0f4766; BYTE $0x0d // pinsrb xmm9, byte [r14 + r13 + 12], 13 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] QUAD $0x0c064c203a0f4566; BYTE $0x0e // pinsrb xmm9, byte [r14 + rax + 12], 14 - LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0c064c203a0f4566; BYTE $0x0f // pinsrb xmm9, byte [r14 + rax + 12], 15 LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] QUAD $0x0d0674203a0f4166; BYTE $0x01 // pinsrb xmm6, byte [r14 + rax + 13], 1 @@ -27243,17 +28507,17 @@ LBB5_86: QUAD $0x0d3e74203a0f4366; BYTE $0x03 // pinsrb xmm6, byte [r14 + r15 + 13], 3 QUAD $0x0d1e74203a0f4166; BYTE $0x04 // pinsrb xmm6, byte [r14 + rbx + 13], 4 QUAD $0x0d0e74203a0f4366; BYTE $0x05 // pinsrb xmm6, byte [r14 + r9 + 13], 5 - QUAD $0x0d0674203a0f4366; BYTE $0x06 // pinsrb xmm6, byte [r14 + r8 + 13], 6 - QUAD $0x0d1e74203a0f4366; BYTE $0x07 // pinsrb xmm6, byte [r14 + r11 + 13], 7 - QUAD $0x0d2e74203a0f4366; BYTE $0x08 // pinsrb xmm6, byte [r14 + r13 + 13], 8 + QUAD $0x0d1e74203a0f4366; BYTE $0x06 // pinsrb xmm6, byte [r14 + r11 + 13], 6 + QUAD $0x0d0674203a0f4366; BYTE $0x07 // pinsrb xmm6, byte [r14 + r8 + 13], 7 + QUAD $0x0d3674203a0f4166; BYTE $0x08 // pinsrb xmm6, byte [r14 + rsi + 13], 8 QUAD $0x0d0e74203a0f4166; BYTE $0x09 // pinsrb xmm6, byte [r14 + rcx + 13], 9 QUAD $0x0d1674203a0f4366; BYTE $0x0a // pinsrb xmm6, byte [r14 + r10 + 13], 10 QUAD $0x0d1674203a0f4166; BYTE $0x0b // pinsrb xmm6, byte [r14 + rdx + 13], 11 QUAD $0x0d3e74203a0f4166; BYTE $0x0c // pinsrb xmm6, byte [r14 + rdi + 13], 12 - QUAD $0x0d3674203a0f4166; BYTE $0x0d // pinsrb xmm6, byte [r14 + rsi + 13], 13 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x0d2e74203a0f4366; BYTE $0x0d // pinsrb xmm6, byte [r14 + r13 + 13], 13 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] QUAD $0x0d0674203a0f4166; BYTE $0x0e // pinsrb xmm6, byte [r14 + rax + 13], 14 - LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0d0674203a0f4166; BYTE $0x0f // pinsrb xmm6, byte [r14 + rax + 13], 15 LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] QUAD $0x0e067c203a0f4566; BYTE $0x01 // pinsrb xmm15, byte [r14 + rax + 14], 1 @@ -27261,141 +28525,133 @@ LBB5_86: QUAD $0x0e3e7c203a0f4766; BYTE $0x03 // pinsrb xmm15, byte [r14 + r15 + 14], 3 QUAD $0x0e1e7c203a0f4566; BYTE $0x04 // pinsrb xmm15, byte [r14 + rbx + 14], 4 QUAD $0x0e0e7c203a0f4766; BYTE $0x05 // pinsrb xmm15, byte [r14 + r9 + 14], 5 - WORD $0x894c; BYTE $0xcb // mov rbx, r9 - QUAD $0x0e067c203a0f4766; BYTE $0x06 // pinsrb xmm15, byte [r14 + r8 + 14], 6 - WORD $0x894d; BYTE $0xc4 // mov r12, r8 - QUAD $0x0e1e7c203a0f4766; BYTE $0x07 // pinsrb xmm15, byte [r14 + r11 + 14], 7 - QUAD $0x0e2e7c203a0f4766; BYTE $0x08 // pinsrb xmm15, byte [r14 + r13 + 14], 8 + QUAD $0x0e1e7c203a0f4766; BYTE $0x06 // pinsrb xmm15, byte [r14 + r11 + 14], 6 + QUAD $0x0e067c203a0f4766; BYTE $0x07 // pinsrb xmm15, byte [r14 + r8 + 14], 7 + QUAD $0x0e367c203a0f4566; BYTE $0x08 // pinsrb xmm15, byte [r14 + rsi + 14], 8 QUAD $0x0e0e7c203a0f4566; BYTE $0x09 // pinsrb xmm15, byte [r14 + rcx + 14], 9 - WORD $0x8949; BYTE $0xcb // mov r11, rcx QUAD $0x0e167c203a0f4766; BYTE $0x0a // pinsrb xmm15, byte [r14 + r10 + 14], 10 QUAD $0x0e167c203a0f4566; BYTE $0x0b // pinsrb xmm15, byte [r14 + rdx + 14], 11 QUAD $0x0e3e7c203a0f4566; BYTE $0x0c // pinsrb xmm15, byte [r14 + rdi + 14], 12 - QUAD $0x0e367c203a0f4566; BYTE $0x0d // pinsrb xmm15, byte [r14 + rsi + 14], 13 - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] - QUAD $0x0e067c203a0f4566; BYTE $0x0e // pinsrb xmm15, byte [r14 + rax + 14], 14 + QUAD $0x0e2e7c203a0f4766; BYTE $0x0d // pinsrb xmm15, byte [r14 + r13 + 14], 13 + LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] + QUAD $0x0e267c203a0f4766; BYTE $0x0e // pinsrb xmm15, byte [r14 + r12 + 14], 14 LONG $0x740f4566; BYTE $0xce // pcmpeqb xmm9, xmm14 QUAD $0x0001308ddf0f4466; BYTE $0x00 // pandn xmm9, oword 304[rbp] /* [rip + .LCPI5_19] */ LONG $0xeb0f4566; BYTE $0xcd // por xmm9, xmm13 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] - LONG $0x74b60f41; WORD $0x1906 // movzx esi, byte [r14 + rax + 25] + QUAD $0x0000008024bc8b4c // mov r15, qword [rsp + 128] + LONG $0x74b60f43; WORD $0x193e // movzx esi, byte [r14 + r15 + 25] LONG $0x6e0f4466; BYTE $0xee // movd xmm13, esi QUAD $0x0001609df80f4466; BYTE $0x00 // psubb xmm11, oword 352[rbp] /* [rip + .LCPI5_22] */ LONG $0xeb0f4566; BYTE $0xcb // por xmm9, xmm11 - LONG $0x74b60f41; WORD $0x1a06 // movzx esi, byte [r14 + rax + 26] + LONG $0x74b60f43; WORD $0x1a3e // movzx esi, byte [r14 + r15 + 26] LONG $0xc66e0f66 // movd xmm0, esi - LONG $0x244c8b48; BYTE $0x10 // mov rcx, qword [rsp + 16] - QUAD $0x0e0e7c203a0f4566; BYTE $0x0f // pinsrb xmm15, byte [r14 + rcx + 14], 15 + LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] + QUAD $0x0e1e7c203a0f4566; BYTE $0x0f // pinsrb xmm15, byte [r14 + rbx + 14], 15 LONG $0x740f4166; BYTE $0xf6 // pcmpeqb xmm6, xmm14 QUAD $0x00000140b5df0f66 // pandn xmm6, oword 320[rbp] /* [rip + .LCPI5_20] */ LONG $0x740f4566; BYTE $0xfe // pcmpeqb xmm15, xmm14 QUAD $0x000150bddf0f4466; BYTE $0x00 // pandn xmm15, oword 336[rbp] /* [rip + .LCPI5_21] */ LONG $0xeb0f4466; BYTE $0xfe // por xmm15, xmm6 - LONG $0x74b60f41; WORD $0x1b06 // movzx esi, byte [r14 + rax + 27] + LONG $0x74b60f43; WORD $0x1b3e // movzx esi, byte [r14 + r15 + 27] LONG $0x6e0f4466; BYTE $0xde // movd xmm11, esi QUAD $0x0000c024b46f0f66; BYTE $0x00 // movdqa xmm6, oword [rsp + 192] - LONG $0x247c8b48; BYTE $0x18 // mov rdi, qword [rsp + 24] - QUAD $0x0f3e74203a0f4166; BYTE $0x01 // pinsrb xmm6, byte [r14 + rdi + 15], 1 - LONG $0x244c8b4c; BYTE $0x48 // mov r9, qword [rsp + 72] - QUAD $0x0f0e74203a0f4366; BYTE $0x02 // pinsrb xmm6, byte [r14 + r9 + 15], 2 - QUAD $0x0f3e74203a0f4366; BYTE $0x03 // pinsrb xmm6, byte [r14 + r15 + 15], 3 - LONG $0x24448b4c; BYTE $0x30 // mov r8, qword [rsp + 48] - QUAD $0x0f0674203a0f4366; BYTE $0x04 // pinsrb xmm6, byte [r14 + r8 + 15], 4 - QUAD $0x0f1e74203a0f4166; BYTE $0x05 // pinsrb xmm6, byte [r14 + rbx + 15], 5 - QUAD $0x0f2674203a0f4366; BYTE $0x06 // pinsrb xmm6, byte [r14 + r12 + 15], 6 - QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] - QUAD $0x0f3674203a0f4166; BYTE $0x07 // pinsrb xmm6, byte [r14 + rsi + 15], 7 - WORD $0x894d; BYTE $0xef // mov r15, r13 - QUAD $0x0f2e74203a0f4366; BYTE $0x08 // pinsrb xmm6, byte [r14 + r13 + 15], 8 - QUAD $0x0f1e74203a0f4366; BYTE $0x09 // pinsrb xmm6, byte [r14 + r11 + 15], 9 + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + QUAD $0x0f0674203a0f4166; BYTE $0x01 // pinsrb xmm6, byte [r14 + rax + 15], 1 + LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] + QUAD $0x0f3e74203a0f4166; BYTE $0x02 // pinsrb xmm6, byte [r14 + rdi + 15], 2 + LONG $0x24548b48; BYTE $0x78 // mov rdx, qword [rsp + 120] + QUAD $0x0f1674203a0f4166; BYTE $0x03 // pinsrb xmm6, byte [r14 + rdx + 15], 3 + QUAD $0x00000098248c8b48 // mov rcx, qword [rsp + 152] + QUAD $0x0f0e74203a0f4166; BYTE $0x04 // pinsrb xmm6, byte [r14 + rcx + 15], 4 + QUAD $0x0f0e74203a0f4366; BYTE $0x05 // pinsrb xmm6, byte [r14 + r9 + 15], 5 + QUAD $0x0f1e74203a0f4366; BYTE $0x06 // pinsrb xmm6, byte [r14 + r11 + 15], 6 + QUAD $0x0f0674203a0f4366; BYTE $0x07 // pinsrb xmm6, byte [r14 + r8 + 15], 7 + QUAD $0x0000009024848b4c // mov r8, qword [rsp + 144] + QUAD $0x0f0674203a0f4366; BYTE $0x08 // pinsrb xmm6, byte [r14 + r8 + 15], 8 + LONG $0x244c8b4c; BYTE $0x58 // mov r9, qword [rsp + 88] + QUAD $0x0f0e74203a0f4366; BYTE $0x09 // pinsrb xmm6, byte [r14 + r9 + 15], 9 QUAD $0x0f1674203a0f4366; BYTE $0x0a // pinsrb xmm6, byte [r14 + r10 + 15], 10 - QUAD $0x0f1674203a0f4166; BYTE $0x0b // pinsrb xmm6, byte [r14 + rdx + 15], 11 - LONG $0x24548b4c; BYTE $0x38 // mov r10, qword [rsp + 56] - QUAD $0x0f1674203a0f4366; BYTE $0x0c // pinsrb xmm6, byte [r14 + r10 + 15], 12 - LONG $0x246c8b4c; BYTE $0x78 // mov r13, qword [rsp + 120] + LONG $0x24548b4c; BYTE $0x48 // mov r10, qword [rsp + 72] + QUAD $0x0f1674203a0f4366; BYTE $0x0b // pinsrb xmm6, byte [r14 + r10 + 15], 11 + LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] + QUAD $0x0f3674203a0f4166; BYTE $0x0c // pinsrb xmm6, byte [r14 + rsi + 15], 12 QUAD $0x0f2e74203a0f4366; BYTE $0x0d // pinsrb xmm6, byte [r14 + r13 + 15], 13 - LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] - QUAD $0x0f1674203a0f4166; BYTE $0x0e // pinsrb xmm6, byte [r14 + rdx + 15], 14 - QUAD $0x0f0e74203a0f4166; BYTE $0x0f // pinsrb xmm6, byte [r14 + rcx + 15], 15 + QUAD $0x0f2674203a0f4366; BYTE $0x0e // pinsrb xmm6, byte [r14 + r12 + 15], 14 + QUAD $0x0f1e74203a0f4166; BYTE $0x0f // pinsrb xmm6, byte [r14 + rbx + 15], 15 LONG $0x740f4166; BYTE $0xf6 // pcmpeqb xmm6, xmm14 LONG $0x75df0f66; BYTE $0x60 // pandn xmm6, oword 96[rbp] /* [rip + .LCPI5_6] */ LONG $0xeb0f4166; BYTE $0xf7 // por xmm6, xmm15 - LONG $0x74b60f41; WORD $0x1c06 // movzx esi, byte [r14 + rax + 28] + LONG $0x74b60f43; WORD $0x1c3e // movzx esi, byte [r14 + r15 + 28] LONG $0x6e0f4466; BYTE $0xfe // movd xmm15, esi LONG $0xeb0f4166; BYTE $0xf1 // por xmm6, xmm9 QUAD $0x0000c024b47f0f66; BYTE $0x00 // movdqa oword [rsp + 192], xmm6 - LONG $0x74b60f41; WORD $0x1d06 // movzx esi, byte [r14 + rax + 29] + LONG $0x74b60f43; WORD $0x1d3e // movzx esi, byte [r14 + r15 + 29] LONG $0x6e0f4466; BYTE $0xce // movd xmm9, esi - WORD $0x8948; BYTE $0xfe // mov rsi, rdi - QUAD $0x103e54203a0f4566; BYTE $0x01 // pinsrb xmm10, byte [r14 + rdi + 16], 1 - QUAD $0x100e54203a0f4766; BYTE $0x02 // pinsrb xmm10, byte [r14 + r9 + 16], 2 - LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] + QUAD $0x100654203a0f4566; BYTE $0x01 // pinsrb xmm10, byte [r14 + rax + 16], 1 + QUAD $0x103e54203a0f4566; BYTE $0x02 // pinsrb xmm10, byte [r14 + rdi + 16], 2 QUAD $0x101654203a0f4566; BYTE $0x03 // pinsrb xmm10, byte [r14 + rdx + 16], 3 - QUAD $0x100654203a0f4766; BYTE $0x04 // pinsrb xmm10, byte [r14 + r8 + 16], 4 - QUAD $0x101e54203a0f4566; BYTE $0x05 // pinsrb xmm10, byte [r14 + rbx + 16], 5 - QUAD $0x102654203a0f4766; BYTE $0x06 // pinsrb xmm10, byte [r14 + r12 + 16], 6 - QUAD $0x0000008824bc8b48 // mov rdi, qword [rsp + 136] - QUAD $0x103e54203a0f4566; BYTE $0x07 // pinsrb xmm10, byte [r14 + rdi + 16], 7 - WORD $0x894c; BYTE $0xf8 // mov rax, r15 - QUAD $0x103e54203a0f4766; BYTE $0x08 // pinsrb xmm10, byte [r14 + r15 + 16], 8 - QUAD $0x101e54203a0f4766; BYTE $0x09 // pinsrb xmm10, byte [r14 + r11 + 16], 9 - LONG $0x247c8b4c; BYTE $0x70 // mov r15, qword [rsp + 112] - QUAD $0x103e54203a0f4766; BYTE $0x0a // pinsrb xmm10, byte [r14 + r15 + 16], 10 - LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] - QUAD $0x100e54203a0f4566; BYTE $0x0b // pinsrb xmm10, byte [r14 + rcx + 16], 11 - QUAD $0x101654203a0f4766; BYTE $0x0c // pinsrb xmm10, byte [r14 + r10 + 16], 12 + QUAD $0x100e54203a0f4566; BYTE $0x04 // pinsrb xmm10, byte [r14 + rcx + 16], 4 + LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + QUAD $0x103654203a0f4566; BYTE $0x05 // pinsrb xmm10, byte [r14 + rsi + 16], 5 + QUAD $0x101e54203a0f4766; BYTE $0x06 // pinsrb xmm10, byte [r14 + r11 + 16], 6 + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + QUAD $0x103654203a0f4566; BYTE $0x07 // pinsrb xmm10, byte [r14 + rsi + 16], 7 + QUAD $0x100654203a0f4766; BYTE $0x08 // pinsrb xmm10, byte [r14 + r8 + 16], 8 + QUAD $0x100e54203a0f4766; BYTE $0x09 // pinsrb xmm10, byte [r14 + r9 + 16], 9 + LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] + QUAD $0x103654203a0f4566; BYTE $0x0a // pinsrb xmm10, byte [r14 + rsi + 16], 10 + QUAD $0x101654203a0f4766; BYTE $0x0b // pinsrb xmm10, byte [r14 + r10 + 16], 11 + LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] + QUAD $0x103654203a0f4566; BYTE $0x0c // pinsrb xmm10, byte [r14 + rsi + 16], 12 QUAD $0x102e54203a0f4766; BYTE $0x0d // pinsrb xmm10, byte [r14 + r13 + 16], 13 - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] - QUAD $0x100e54203a0f4566; BYTE $0x0e // pinsrb xmm10, byte [r14 + rcx + 16], 14 - LONG $0x246c8b4c; BYTE $0x10 // mov r13, qword [rsp + 16] - QUAD $0x102e54203a0f4766; BYTE $0x0f // pinsrb xmm10, byte [r14 + r13 + 16], 15 - QUAD $0x113664203a0f4166; BYTE $0x01 // pinsrb xmm4, byte [r14 + rsi + 17], 1 - QUAD $0x110e64203a0f4366; BYTE $0x02 // pinsrb xmm4, byte [r14 + r9 + 17], 2 + QUAD $0x102654203a0f4766; BYTE $0x0e // pinsrb xmm10, byte [r14 + r12 + 16], 14 + QUAD $0x101e54203a0f4566; BYTE $0x0f // pinsrb xmm10, byte [r14 + rbx + 16], 15 + QUAD $0x110664203a0f4166; BYTE $0x01 // pinsrb xmm4, byte [r14 + rax + 17], 1 + QUAD $0x113e64203a0f4166; BYTE $0x02 // pinsrb xmm4, byte [r14 + rdi + 17], 2 QUAD $0x111664203a0f4166; BYTE $0x03 // pinsrb xmm4, byte [r14 + rdx + 17], 3 - QUAD $0x110664203a0f4366; BYTE $0x04 // pinsrb xmm4, byte [r14 + r8 + 17], 4 - QUAD $0x111e64203a0f4166; BYTE $0x05 // pinsrb xmm4, byte [r14 + rbx + 17], 5 - QUAD $0x112664203a0f4366; BYTE $0x06 // pinsrb xmm4, byte [r14 + r12 + 17], 6 - QUAD $0x113e64203a0f4166; BYTE $0x07 // pinsrb xmm4, byte [r14 + rdi + 17], 7 - QUAD $0x110664203a0f4166; BYTE $0x08 // pinsrb xmm4, byte [r14 + rax + 17], 8 - WORD $0x894d; BYTE $0xd9 // mov r9, r11 - QUAD $0x111e64203a0f4366; BYTE $0x09 // pinsrb xmm4, byte [r14 + r11 + 17], 9 - WORD $0x894d; BYTE $0xfa // mov r10, r15 - QUAD $0x113e64203a0f4366; BYTE $0x0a // pinsrb xmm4, byte [r14 + r15 + 17], 10 - LONG $0x24448b4c; BYTE $0x58 // mov r8, qword [rsp + 88] - QUAD $0x110664203a0f4366; BYTE $0x0b // pinsrb xmm4, byte [r14 + r8 + 17], 11 - LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] - QUAD $0x113e64203a0f4166; BYTE $0x0c // pinsrb xmm4, byte [r14 + rdi + 17], 12 - LONG $0x24548b48; BYTE $0x78 // mov rdx, qword [rsp + 120] - QUAD $0x111664203a0f4166; BYTE $0x0d // pinsrb xmm4, byte [r14 + rdx + 17], 13 - QUAD $0x110e64203a0f4166; BYTE $0x0e // pinsrb xmm4, byte [r14 + rcx + 17], 14 - WORD $0x8949; BYTE $0xcb // mov r11, rcx - QUAD $0x112e64203a0f4366; BYTE $0x0f // pinsrb xmm4, byte [r14 + r13 + 17], 15 + QUAD $0x110e64203a0f4166; BYTE $0x04 // pinsrb xmm4, byte [r14 + rcx + 17], 4 + LONG $0x244c8b4c; BYTE $0x60 // mov r9, qword [rsp + 96] + QUAD $0x110e64203a0f4366; BYTE $0x05 // pinsrb xmm4, byte [r14 + r9 + 17], 5 + QUAD $0x111e64203a0f4366; BYTE $0x06 // pinsrb xmm4, byte [r14 + r11 + 17], 6 + LONG $0x24448b4c; BYTE $0x30 // mov r8, qword [rsp + 48] + QUAD $0x110664203a0f4366; BYTE $0x07 // pinsrb xmm4, byte [r14 + r8 + 17], 7 + QUAD $0x0000009024bc8b48 // mov rdi, qword [rsp + 144] + QUAD $0x113e64203a0f4166; BYTE $0x08 // pinsrb xmm4, byte [r14 + rdi + 17], 8 + LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] + QUAD $0x110e64203a0f4166; BYTE $0x09 // pinsrb xmm4, byte [r14 + rcx + 17], 9 + LONG $0x24548b4c; BYTE $0x68 // mov r10, qword [rsp + 104] + QUAD $0x111664203a0f4366; BYTE $0x0a // pinsrb xmm4, byte [r14 + r10 + 17], 10 + LONG $0x24548b48; BYTE $0x48 // mov rdx, qword [rsp + 72] + QUAD $0x111664203a0f4166; BYTE $0x0b // pinsrb xmm4, byte [r14 + rdx + 17], 11 + QUAD $0x113664203a0f4166; BYTE $0x0c // pinsrb xmm4, byte [r14 + rsi + 17], 12 + QUAD $0x112e64203a0f4366; BYTE $0x0d // pinsrb xmm4, byte [r14 + r13 + 17], 13 + QUAD $0x112664203a0f4366; BYTE $0x0e // pinsrb xmm4, byte [r14 + r12 + 17], 14 + QUAD $0x111e64203a0f4166; BYTE $0x0f // pinsrb xmm4, byte [r14 + rbx + 17], 15 LONG $0x740f4566; BYTE $0xd6 // pcmpeqb xmm10, xmm14 LONG $0x740f4166; BYTE $0xe6 // pcmpeqb xmm4, xmm14 QUAD $0x00000100b56f0f66 // movdqa xmm6, oword 256[rbp] /* [rip + .LCPI5_16] */ LONG $0xe6df0f66 // pandn xmm4, xmm6 LONG $0xfc0f4166; BYTE $0xe2 // paddb xmm4, xmm10 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] - LONG $0x74b60f41; WORD $0x1e06 // movzx esi, byte [r14 + rax + 30] + LONG $0x74b60f43; WORD $0x1e3e // movzx esi, byte [r14 + r15 + 30] LONG $0x6e0f4466; BYTE $0xd6 // movd xmm10, esi - LONG $0x24748b48; BYTE $0x18 // mov rsi, qword [rsp + 24] - QUAD $0x12367c203a0f4166; BYTE $0x01 // pinsrb xmm7, byte [r14 + rsi + 18], 1 - QUAD $0x13366c203a0f4166; BYTE $0x01 // pinsrb xmm5, byte [r14 + rsi + 19], 1 - QUAD $0x14365c203a0f4166; BYTE $0x01 // pinsrb xmm3, byte [r14 + rsi + 20], 1 - QUAD $0x153654203a0f4166; BYTE $0x01 // pinsrb xmm2, byte [r14 + rsi + 21], 1 - QUAD $0x16364c203a0f4166; BYTE $0x01 // pinsrb xmm1, byte [r14 + rsi + 22], 1 - QUAD $0x173644203a0f4566; BYTE $0x01 // pinsrb xmm8, byte [r14 + rsi + 23], 1 - QUAD $0x183664203a0f4566; BYTE $0x01 // pinsrb xmm12, byte [r14 + rsi + 24], 1 - QUAD $0x19366c203a0f4566; BYTE $0x01 // pinsrb xmm13, byte [r14 + rsi + 25], 1 - QUAD $0x1a3644203a0f4166; BYTE $0x01 // pinsrb xmm0, byte [r14 + rsi + 26], 1 - QUAD $0x1b365c203a0f4566; BYTE $0x01 // pinsrb xmm11, byte [r14 + rsi + 27], 1 - QUAD $0x1c367c203a0f4566; BYTE $0x01 // pinsrb xmm15, byte [r14 + rsi + 28], 1 - QUAD $0x1d364c203a0f4566; BYTE $0x01 // pinsrb xmm9, byte [r14 + rsi + 29], 1 - QUAD $0x1e3654203a0f4566; BYTE $0x01 // pinsrb xmm10, byte [r14 + rsi + 30], 1 - LONG $0x44b60f41; WORD $0x1f06 // movzx eax, byte [r14 + rax + 31] + WORD $0x8948; BYTE $0xc6 // mov rsi, rax + QUAD $0x12067c203a0f4166; BYTE $0x01 // pinsrb xmm7, byte [r14 + rax + 18], 1 + QUAD $0x13066c203a0f4166; BYTE $0x01 // pinsrb xmm5, byte [r14 + rax + 19], 1 + QUAD $0x14065c203a0f4166; BYTE $0x01 // pinsrb xmm3, byte [r14 + rax + 20], 1 + QUAD $0x150654203a0f4166; BYTE $0x01 // pinsrb xmm2, byte [r14 + rax + 21], 1 + QUAD $0x16064c203a0f4166; BYTE $0x01 // pinsrb xmm1, byte [r14 + rax + 22], 1 + QUAD $0x170644203a0f4566; BYTE $0x01 // pinsrb xmm8, byte [r14 + rax + 23], 1 + QUAD $0x180664203a0f4566; BYTE $0x01 // pinsrb xmm12, byte [r14 + rax + 24], 1 + QUAD $0x19066c203a0f4566; BYTE $0x01 // pinsrb xmm13, byte [r14 + rax + 25], 1 + QUAD $0x1a0644203a0f4166; BYTE $0x01 // pinsrb xmm0, byte [r14 + rax + 26], 1 + QUAD $0x1b065c203a0f4566; BYTE $0x01 // pinsrb xmm11, byte [r14 + rax + 27], 1 + QUAD $0x1c067c203a0f4566; BYTE $0x01 // pinsrb xmm15, byte [r14 + rax + 28], 1 + QUAD $0x1d064c203a0f4566; BYTE $0x01 // pinsrb xmm9, byte [r14 + rax + 29], 1 + QUAD $0x1e0654203a0f4566; BYTE $0x01 // pinsrb xmm10, byte [r14 + rax + 30], 1 + LONG $0x44b60f43; WORD $0x1f3e // movzx eax, byte [r14 + r15 + 31] LONG $0xf06e0f66 // movd xmm6, eax QUAD $0x1f3674203a0f4166; BYTE $0x01 // pinsrb xmm6, byte [r14 + rsi + 31], 1 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] QUAD $0x12067c203a0f4166; BYTE $0x02 // pinsrb xmm7, byte [r14 + rax + 18], 2 QUAD $0x13066c203a0f4166; BYTE $0x02 // pinsrb xmm5, byte [r14 + rax + 19], 2 QUAD $0x14065c203a0f4166; BYTE $0x02 // pinsrb xmm3, byte [r14 + rax + 20], 2 @@ -27410,48 +28666,48 @@ LBB5_86: QUAD $0x1d064c203a0f4566; BYTE $0x02 // pinsrb xmm9, byte [r14 + rax + 29], 2 QUAD $0x1e0654203a0f4566; BYTE $0x02 // pinsrb xmm10, byte [r14 + rax + 30], 2 QUAD $0x1f0674203a0f4166; BYTE $0x02 // pinsrb xmm6, byte [r14 + rax + 31], 2 - LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] + LONG $0x247c8b4c; BYTE $0x78 // mov r15, qword [rsp + 120] QUAD $0x123e7c203a0f4366; BYTE $0x03 // pinsrb xmm7, byte [r14 + r15 + 18], 3 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] QUAD $0x12067c203a0f4166; BYTE $0x04 // pinsrb xmm7, byte [r14 + rax + 18], 4 - QUAD $0x121e7c203a0f4166; BYTE $0x05 // pinsrb xmm7, byte [r14 + rbx + 18], 5 - QUAD $0x12267c203a0f4366; BYTE $0x06 // pinsrb xmm7, byte [r14 + r12 + 18], 6 - QUAD $0x00000088248c8b48 // mov rcx, qword [rsp + 136] - QUAD $0x120e7c203a0f4166; BYTE $0x07 // pinsrb xmm7, byte [r14 + rcx + 18], 7 - LONG $0x24748b48; BYTE $0x68 // mov rsi, qword [rsp + 104] - QUAD $0x12367c203a0f4166; BYTE $0x08 // pinsrb xmm7, byte [r14 + rsi + 18], 8 - QUAD $0x120e7c203a0f4366; BYTE $0x09 // pinsrb xmm7, byte [r14 + r9 + 18], 9 + QUAD $0x120e7c203a0f4366; BYTE $0x05 // pinsrb xmm7, byte [r14 + r9 + 18], 5 + QUAD $0x121e7c203a0f4366; BYTE $0x06 // pinsrb xmm7, byte [r14 + r11 + 18], 6 + QUAD $0x12067c203a0f4366; BYTE $0x07 // pinsrb xmm7, byte [r14 + r8 + 18], 7 + WORD $0x8948; BYTE $0xfe // mov rsi, rdi + QUAD $0x123e7c203a0f4166; BYTE $0x08 // pinsrb xmm7, byte [r14 + rdi + 18], 8 + QUAD $0x120e7c203a0f4166; BYTE $0x09 // pinsrb xmm7, byte [r14 + rcx + 18], 9 QUAD $0x12167c203a0f4366; BYTE $0x0a // pinsrb xmm7, byte [r14 + r10 + 18], 10 - QUAD $0x12067c203a0f4366; BYTE $0x0b // pinsrb xmm7, byte [r14 + r8 + 18], 11 + QUAD $0x12167c203a0f4166; BYTE $0x0b // pinsrb xmm7, byte [r14 + rdx + 18], 11 + LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] QUAD $0x123e7c203a0f4166; BYTE $0x0c // pinsrb xmm7, byte [r14 + rdi + 18], 12 - QUAD $0x12167c203a0f4166; BYTE $0x0d // pinsrb xmm7, byte [r14 + rdx + 18], 13 - QUAD $0x121e7c203a0f4366; BYTE $0x0e // pinsrb xmm7, byte [r14 + r11 + 18], 14 - QUAD $0x122e7c203a0f4366; BYTE $0x0f // pinsrb xmm7, byte [r14 + r13 + 18], 15 + QUAD $0x122e7c203a0f4366; BYTE $0x0d // pinsrb xmm7, byte [r14 + r13 + 18], 13 + QUAD $0x12267c203a0f4366; BYTE $0x0e // pinsrb xmm7, byte [r14 + r12 + 18], 14 + QUAD $0x121e7c203a0f4166; BYTE $0x0f // pinsrb xmm7, byte [r14 + rbx + 18], 15 QUAD $0x133e6c203a0f4366; BYTE $0x03 // pinsrb xmm5, byte [r14 + r15 + 19], 3 QUAD $0x13066c203a0f4166; BYTE $0x04 // pinsrb xmm5, byte [r14 + rax + 19], 4 - QUAD $0x131e6c203a0f4166; BYTE $0x05 // pinsrb xmm5, byte [r14 + rbx + 19], 5 - QUAD $0x13266c203a0f4366; BYTE $0x06 // pinsrb xmm5, byte [r14 + r12 + 19], 6 - QUAD $0x130e6c203a0f4166; BYTE $0x07 // pinsrb xmm5, byte [r14 + rcx + 19], 7 + QUAD $0x130e6c203a0f4366; BYTE $0x05 // pinsrb xmm5, byte [r14 + r9 + 19], 5 + QUAD $0x131e6c203a0f4366; BYTE $0x06 // pinsrb xmm5, byte [r14 + r11 + 19], 6 + QUAD $0x13066c203a0f4366; BYTE $0x07 // pinsrb xmm5, byte [r14 + r8 + 19], 7 QUAD $0x13366c203a0f4166; BYTE $0x08 // pinsrb xmm5, byte [r14 + rsi + 19], 8 - QUAD $0x130e6c203a0f4366; BYTE $0x09 // pinsrb xmm5, byte [r14 + r9 + 19], 9 + QUAD $0x130e6c203a0f4166; BYTE $0x09 // pinsrb xmm5, byte [r14 + rcx + 19], 9 QUAD $0x13166c203a0f4366; BYTE $0x0a // pinsrb xmm5, byte [r14 + r10 + 19], 10 - QUAD $0x13066c203a0f4366; BYTE $0x0b // pinsrb xmm5, byte [r14 + r8 + 19], 11 + QUAD $0x13166c203a0f4166; BYTE $0x0b // pinsrb xmm5, byte [r14 + rdx + 19], 11 QUAD $0x133e6c203a0f4166; BYTE $0x0c // pinsrb xmm5, byte [r14 + rdi + 19], 12 - QUAD $0x13166c203a0f4166; BYTE $0x0d // pinsrb xmm5, byte [r14 + rdx + 19], 13 - QUAD $0x131e6c203a0f4366; BYTE $0x0e // pinsrb xmm5, byte [r14 + r11 + 19], 14 - QUAD $0x132e6c203a0f4366; BYTE $0x0f // pinsrb xmm5, byte [r14 + r13 + 19], 15 + QUAD $0x132e6c203a0f4366; BYTE $0x0d // pinsrb xmm5, byte [r14 + r13 + 19], 13 + QUAD $0x13266c203a0f4366; BYTE $0x0e // pinsrb xmm5, byte [r14 + r12 + 19], 14 + QUAD $0x131e6c203a0f4166; BYTE $0x0f // pinsrb xmm5, byte [r14 + rbx + 19], 15 QUAD $0x143e5c203a0f4366; BYTE $0x03 // pinsrb xmm3, byte [r14 + r15 + 20], 3 QUAD $0x14065c203a0f4166; BYTE $0x04 // pinsrb xmm3, byte [r14 + rax + 20], 4 - QUAD $0x141e5c203a0f4166; BYTE $0x05 // pinsrb xmm3, byte [r14 + rbx + 20], 5 - QUAD $0x14265c203a0f4366; BYTE $0x06 // pinsrb xmm3, byte [r14 + r12 + 20], 6 - QUAD $0x140e5c203a0f4166; BYTE $0x07 // pinsrb xmm3, byte [r14 + rcx + 20], 7 + QUAD $0x140e5c203a0f4366; BYTE $0x05 // pinsrb xmm3, byte [r14 + r9 + 20], 5 + QUAD $0x141e5c203a0f4366; BYTE $0x06 // pinsrb xmm3, byte [r14 + r11 + 20], 6 + QUAD $0x14065c203a0f4366; BYTE $0x07 // pinsrb xmm3, byte [r14 + r8 + 20], 7 QUAD $0x14365c203a0f4166; BYTE $0x08 // pinsrb xmm3, byte [r14 + rsi + 20], 8 - QUAD $0x140e5c203a0f4366; BYTE $0x09 // pinsrb xmm3, byte [r14 + r9 + 20], 9 + QUAD $0x140e5c203a0f4166; BYTE $0x09 // pinsrb xmm3, byte [r14 + rcx + 20], 9 QUAD $0x14165c203a0f4366; BYTE $0x0a // pinsrb xmm3, byte [r14 + r10 + 20], 10 - QUAD $0x14065c203a0f4366; BYTE $0x0b // pinsrb xmm3, byte [r14 + r8 + 20], 11 + QUAD $0x14165c203a0f4166; BYTE $0x0b // pinsrb xmm3, byte [r14 + rdx + 20], 11 QUAD $0x143e5c203a0f4166; BYTE $0x0c // pinsrb xmm3, byte [r14 + rdi + 20], 12 - QUAD $0x14165c203a0f4166; BYTE $0x0d // pinsrb xmm3, byte [r14 + rdx + 20], 13 - QUAD $0x141e5c203a0f4366; BYTE $0x0e // pinsrb xmm3, byte [r14 + r11 + 20], 14 + QUAD $0x142e5c203a0f4366; BYTE $0x0d // pinsrb xmm3, byte [r14 + r13 + 20], 13 + QUAD $0x14265c203a0f4366; BYTE $0x0e // pinsrb xmm3, byte [r14 + r12 + 20], 14 LONG $0x740f4166; BYTE $0xfe // pcmpeqb xmm7, xmm14 QUAD $0x000110b56f0f4466; BYTE $0x00 // movdqa xmm14, oword 272[rbp] /* [rip + .LCPI5_17] */ LONG $0xdf0f4166; BYTE $0xfe // pandn xmm7, xmm14 @@ -27459,7 +28715,7 @@ LBB5_86: QUAD $0x000120b56f0f4466; BYTE $0x00 // movdqa xmm14, oword 288[rbp] /* [rip + .LCPI5_18] */ LONG $0xdf0f4166; BYTE $0xee // pandn xmm5, xmm14 LONG $0xefeb0f66 // por xmm5, xmm7 - QUAD $0x142e5c203a0f4366; BYTE $0x0f // pinsrb xmm3, byte [r14 + r13 + 20], 15 + QUAD $0x141e5c203a0f4166; BYTE $0x0f // pinsrb xmm3, byte [r14 + rbx + 20], 15 QUAD $0x00b024b46f0f4466; WORD $0x0000 // movdqa xmm14, oword [rsp + 176] LONG $0x740f4166; BYTE $0xde // pcmpeqb xmm3, xmm14 QUAD $0x00000130bd6f0f66 // movdqa xmm7, oword 304[rbp] /* [rip + .LCPI5_19] */ @@ -27470,42 +28726,42 @@ LBB5_86: LONG $0xdceb0f66 // por xmm3, xmm4 QUAD $0x153e54203a0f4366; BYTE $0x03 // pinsrb xmm2, byte [r14 + r15 + 21], 3 QUAD $0x150654203a0f4166; BYTE $0x04 // pinsrb xmm2, byte [r14 + rax + 21], 4 - QUAD $0x151e54203a0f4166; BYTE $0x05 // pinsrb xmm2, byte [r14 + rbx + 21], 5 - QUAD $0x152654203a0f4366; BYTE $0x06 // pinsrb xmm2, byte [r14 + r12 + 21], 6 - QUAD $0x150e54203a0f4166; BYTE $0x07 // pinsrb xmm2, byte [r14 + rcx + 21], 7 + QUAD $0x150e54203a0f4366; BYTE $0x05 // pinsrb xmm2, byte [r14 + r9 + 21], 5 + QUAD $0x151e54203a0f4366; BYTE $0x06 // pinsrb xmm2, byte [r14 + r11 + 21], 6 + QUAD $0x150654203a0f4366; BYTE $0x07 // pinsrb xmm2, byte [r14 + r8 + 21], 7 QUAD $0x153654203a0f4166; BYTE $0x08 // pinsrb xmm2, byte [r14 + rsi + 21], 8 - QUAD $0x150e54203a0f4366; BYTE $0x09 // pinsrb xmm2, byte [r14 + r9 + 21], 9 + QUAD $0x150e54203a0f4166; BYTE $0x09 // pinsrb xmm2, byte [r14 + rcx + 21], 9 QUAD $0x151654203a0f4366; BYTE $0x0a // pinsrb xmm2, byte [r14 + r10 + 21], 10 - QUAD $0x150654203a0f4366; BYTE $0x0b // pinsrb xmm2, byte [r14 + r8 + 21], 11 + QUAD $0x151654203a0f4166; BYTE $0x0b // pinsrb xmm2, byte [r14 + rdx + 21], 11 QUAD $0x153e54203a0f4166; BYTE $0x0c // pinsrb xmm2, byte [r14 + rdi + 21], 12 - QUAD $0x151654203a0f4166; BYTE $0x0d // pinsrb xmm2, byte [r14 + rdx + 21], 13 - QUAD $0x151e54203a0f4366; BYTE $0x0e // pinsrb xmm2, byte [r14 + r11 + 21], 14 - QUAD $0x152e54203a0f4366; BYTE $0x0f // pinsrb xmm2, byte [r14 + r13 + 21], 15 + QUAD $0x152e54203a0f4366; BYTE $0x0d // pinsrb xmm2, byte [r14 + r13 + 21], 13 + QUAD $0x152654203a0f4366; BYTE $0x0e // pinsrb xmm2, byte [r14 + r12 + 21], 14 + QUAD $0x151e54203a0f4166; BYTE $0x0f // pinsrb xmm2, byte [r14 + rbx + 21], 15 QUAD $0x163e4c203a0f4366; BYTE $0x03 // pinsrb xmm1, byte [r14 + r15 + 22], 3 QUAD $0x16064c203a0f4166; BYTE $0x04 // pinsrb xmm1, byte [r14 + rax + 22], 4 - QUAD $0x161e4c203a0f4166; BYTE $0x05 // pinsrb xmm1, byte [r14 + rbx + 22], 5 - QUAD $0x16264c203a0f4366; BYTE $0x06 // pinsrb xmm1, byte [r14 + r12 + 22], 6 - QUAD $0x160e4c203a0f4166; BYTE $0x07 // pinsrb xmm1, byte [r14 + rcx + 22], 7 + QUAD $0x160e4c203a0f4366; BYTE $0x05 // pinsrb xmm1, byte [r14 + r9 + 22], 5 + QUAD $0x161e4c203a0f4366; BYTE $0x06 // pinsrb xmm1, byte [r14 + r11 + 22], 6 + QUAD $0x16064c203a0f4366; BYTE $0x07 // pinsrb xmm1, byte [r14 + r8 + 22], 7 QUAD $0x16364c203a0f4166; BYTE $0x08 // pinsrb xmm1, byte [r14 + rsi + 22], 8 - QUAD $0x160e4c203a0f4366; BYTE $0x09 // pinsrb xmm1, byte [r14 + r9 + 22], 9 + QUAD $0x160e4c203a0f4166; BYTE $0x09 // pinsrb xmm1, byte [r14 + rcx + 22], 9 QUAD $0x16164c203a0f4366; BYTE $0x0a // pinsrb xmm1, byte [r14 + r10 + 22], 10 - QUAD $0x16064c203a0f4366; BYTE $0x0b // pinsrb xmm1, byte [r14 + r8 + 22], 11 + QUAD $0x16164c203a0f4166; BYTE $0x0b // pinsrb xmm1, byte [r14 + rdx + 22], 11 QUAD $0x163e4c203a0f4166; BYTE $0x0c // pinsrb xmm1, byte [r14 + rdi + 22], 12 - QUAD $0x16164c203a0f4166; BYTE $0x0d // pinsrb xmm1, byte [r14 + rdx + 22], 13 - QUAD $0x161e4c203a0f4366; BYTE $0x0e // pinsrb xmm1, byte [r14 + r11 + 22], 14 - QUAD $0x162e4c203a0f4366; BYTE $0x0f // pinsrb xmm1, byte [r14 + r13 + 22], 15 + QUAD $0x162e4c203a0f4366; BYTE $0x0d // pinsrb xmm1, byte [r14 + r13 + 22], 13 + QUAD $0x16264c203a0f4366; BYTE $0x0e // pinsrb xmm1, byte [r14 + r12 + 22], 14 + QUAD $0x161e4c203a0f4166; BYTE $0x0f // pinsrb xmm1, byte [r14 + rbx + 22], 15 QUAD $0x173e44203a0f4766; BYTE $0x03 // pinsrb xmm8, byte [r14 + r15 + 23], 3 QUAD $0x170644203a0f4566; BYTE $0x04 // pinsrb xmm8, byte [r14 + rax + 23], 4 - QUAD $0x171e44203a0f4566; BYTE $0x05 // pinsrb xmm8, byte [r14 + rbx + 23], 5 - QUAD $0x172644203a0f4766; BYTE $0x06 // pinsrb xmm8, byte [r14 + r12 + 23], 6 - QUAD $0x170e44203a0f4566; BYTE $0x07 // pinsrb xmm8, byte [r14 + rcx + 23], 7 + QUAD $0x170e44203a0f4766; BYTE $0x05 // pinsrb xmm8, byte [r14 + r9 + 23], 5 + QUAD $0x171e44203a0f4766; BYTE $0x06 // pinsrb xmm8, byte [r14 + r11 + 23], 6 + QUAD $0x170644203a0f4766; BYTE $0x07 // pinsrb xmm8, byte [r14 + r8 + 23], 7 QUAD $0x173644203a0f4566; BYTE $0x08 // pinsrb xmm8, byte [r14 + rsi + 23], 8 - QUAD $0x170e44203a0f4766; BYTE $0x09 // pinsrb xmm8, byte [r14 + r9 + 23], 9 + QUAD $0x170e44203a0f4566; BYTE $0x09 // pinsrb xmm8, byte [r14 + rcx + 23], 9 QUAD $0x171644203a0f4766; BYTE $0x0a // pinsrb xmm8, byte [r14 + r10 + 23], 10 - QUAD $0x170644203a0f4766; BYTE $0x0b // pinsrb xmm8, byte [r14 + r8 + 23], 11 + QUAD $0x171644203a0f4566; BYTE $0x0b // pinsrb xmm8, byte [r14 + rdx + 23], 11 QUAD $0x173e44203a0f4566; BYTE $0x0c // pinsrb xmm8, byte [r14 + rdi + 23], 12 - QUAD $0x171644203a0f4566; BYTE $0x0d // pinsrb xmm8, byte [r14 + rdx + 23], 13 - QUAD $0x171e44203a0f4766; BYTE $0x0e // pinsrb xmm8, byte [r14 + r11 + 23], 14 + QUAD $0x172e44203a0f4766; BYTE $0x0d // pinsrb xmm8, byte [r14 + r13 + 23], 13 + QUAD $0x172644203a0f4766; BYTE $0x0e // pinsrb xmm8, byte [r14 + r12 + 23], 14 LONG $0x740f4166; BYTE $0xd6 // pcmpeqb xmm2, xmm14 QUAD $0x00000140ad6f0f66 // movdqa xmm5, oword 320[rbp] /* [rip + .LCPI5_20] */ LONG $0xd5df0f66 // pandn xmm2, xmm5 @@ -27513,68 +28769,68 @@ LBB5_86: QUAD $0x00000150bd6f0f66 // movdqa xmm7, oword 336[rbp] /* [rip + .LCPI5_21] */ LONG $0xcfdf0f66 // pandn xmm1, xmm7 LONG $0xcaeb0f66 // por xmm1, xmm2 - QUAD $0x172e44203a0f4766; BYTE $0x0f // pinsrb xmm8, byte [r14 + r13 + 23], 15 + QUAD $0x171e44203a0f4566; BYTE $0x0f // pinsrb xmm8, byte [r14 + rbx + 23], 15 LONG $0x740f4566; BYTE $0xc6 // pcmpeqb xmm8, xmm14 LONG $0x656f0f66; BYTE $0x60 // movdqa xmm4, oword 96[rbp] /* [rip + .LCPI5_6] */ LONG $0xdf0f4466; BYTE $0xc4 // pandn xmm8, xmm4 LONG $0xeb0f4466; BYTE $0xc1 // por xmm8, xmm1 QUAD $0x183e64203a0f4766; BYTE $0x03 // pinsrb xmm12, byte [r14 + r15 + 24], 3 QUAD $0x180664203a0f4566; BYTE $0x04 // pinsrb xmm12, byte [r14 + rax + 24], 4 - QUAD $0x181e64203a0f4566; BYTE $0x05 // pinsrb xmm12, byte [r14 + rbx + 24], 5 - QUAD $0x182664203a0f4766; BYTE $0x06 // pinsrb xmm12, byte [r14 + r12 + 24], 6 - QUAD $0x180e64203a0f4566; BYTE $0x07 // pinsrb xmm12, byte [r14 + rcx + 24], 7 + QUAD $0x180e64203a0f4766; BYTE $0x05 // pinsrb xmm12, byte [r14 + r9 + 24], 5 + QUAD $0x181e64203a0f4766; BYTE $0x06 // pinsrb xmm12, byte [r14 + r11 + 24], 6 + QUAD $0x180664203a0f4766; BYTE $0x07 // pinsrb xmm12, byte [r14 + r8 + 24], 7 QUAD $0x183664203a0f4566; BYTE $0x08 // pinsrb xmm12, byte [r14 + rsi + 24], 8 - QUAD $0x180e64203a0f4766; BYTE $0x09 // pinsrb xmm12, byte [r14 + r9 + 24], 9 + QUAD $0x180e64203a0f4566; BYTE $0x09 // pinsrb xmm12, byte [r14 + rcx + 24], 9 QUAD $0x181664203a0f4766; BYTE $0x0a // pinsrb xmm12, byte [r14 + r10 + 24], 10 - QUAD $0x180664203a0f4766; BYTE $0x0b // pinsrb xmm12, byte [r14 + r8 + 24], 11 + QUAD $0x181664203a0f4566; BYTE $0x0b // pinsrb xmm12, byte [r14 + rdx + 24], 11 QUAD $0x183e64203a0f4566; BYTE $0x0c // pinsrb xmm12, byte [r14 + rdi + 24], 12 - QUAD $0x181664203a0f4566; BYTE $0x0d // pinsrb xmm12, byte [r14 + rdx + 24], 13 - QUAD $0x181e64203a0f4766; BYTE $0x0e // pinsrb xmm12, byte [r14 + r11 + 24], 14 - QUAD $0x182e64203a0f4766; BYTE $0x0f // pinsrb xmm12, byte [r14 + r13 + 24], 15 + QUAD $0x182e64203a0f4766; BYTE $0x0d // pinsrb xmm12, byte [r14 + r13 + 24], 13 + QUAD $0x182664203a0f4766; BYTE $0x0e // pinsrb xmm12, byte [r14 + r12 + 24], 14 + QUAD $0x181e64203a0f4566; BYTE $0x0f // pinsrb xmm12, byte [r14 + rbx + 24], 15 LONG $0xeb0f4466; BYTE $0xc3 // por xmm8, xmm3 LONG $0x740f4566; BYTE $0xe6 // pcmpeqb xmm12, xmm14 QUAD $0x193e6c203a0f4766; BYTE $0x03 // pinsrb xmm13, byte [r14 + r15 + 25], 3 QUAD $0x19066c203a0f4566; BYTE $0x04 // pinsrb xmm13, byte [r14 + rax + 25], 4 - QUAD $0x191e6c203a0f4566; BYTE $0x05 // pinsrb xmm13, byte [r14 + rbx + 25], 5 - QUAD $0x19266c203a0f4766; BYTE $0x06 // pinsrb xmm13, byte [r14 + r12 + 25], 6 - QUAD $0x190e6c203a0f4566; BYTE $0x07 // pinsrb xmm13, byte [r14 + rcx + 25], 7 + QUAD $0x190e6c203a0f4766; BYTE $0x05 // pinsrb xmm13, byte [r14 + r9 + 25], 5 + QUAD $0x191e6c203a0f4766; BYTE $0x06 // pinsrb xmm13, byte [r14 + r11 + 25], 6 + QUAD $0x19066c203a0f4766; BYTE $0x07 // pinsrb xmm13, byte [r14 + r8 + 25], 7 QUAD $0x19366c203a0f4566; BYTE $0x08 // pinsrb xmm13, byte [r14 + rsi + 25], 8 - QUAD $0x190e6c203a0f4766; BYTE $0x09 // pinsrb xmm13, byte [r14 + r9 + 25], 9 + QUAD $0x190e6c203a0f4566; BYTE $0x09 // pinsrb xmm13, byte [r14 + rcx + 25], 9 QUAD $0x19166c203a0f4766; BYTE $0x0a // pinsrb xmm13, byte [r14 + r10 + 25], 10 - QUAD $0x19066c203a0f4766; BYTE $0x0b // pinsrb xmm13, byte [r14 + r8 + 25], 11 + QUAD $0x19166c203a0f4566; BYTE $0x0b // pinsrb xmm13, byte [r14 + rdx + 25], 11 QUAD $0x193e6c203a0f4566; BYTE $0x0c // pinsrb xmm13, byte [r14 + rdi + 25], 12 - QUAD $0x19166c203a0f4566; BYTE $0x0d // pinsrb xmm13, byte [r14 + rdx + 25], 13 - QUAD $0x191e6c203a0f4766; BYTE $0x0e // pinsrb xmm13, byte [r14 + r11 + 25], 14 - QUAD $0x192e6c203a0f4766; BYTE $0x0f // pinsrb xmm13, byte [r14 + r13 + 25], 15 + QUAD $0x192e6c203a0f4766; BYTE $0x0d // pinsrb xmm13, byte [r14 + r13 + 25], 13 + QUAD $0x19266c203a0f4766; BYTE $0x0e // pinsrb xmm13, byte [r14 + r12 + 25], 14 + QUAD $0x191e6c203a0f4566; BYTE $0x0f // pinsrb xmm13, byte [r14 + rbx + 25], 15 QUAD $0x1a3e44203a0f4366; BYTE $0x03 // pinsrb xmm0, byte [r14 + r15 + 26], 3 QUAD $0x1a0644203a0f4166; BYTE $0x04 // pinsrb xmm0, byte [r14 + rax + 26], 4 - QUAD $0x1a1e44203a0f4166; BYTE $0x05 // pinsrb xmm0, byte [r14 + rbx + 26], 5 - QUAD $0x1a2644203a0f4366; BYTE $0x06 // pinsrb xmm0, byte [r14 + r12 + 26], 6 - QUAD $0x1a0e44203a0f4166; BYTE $0x07 // pinsrb xmm0, byte [r14 + rcx + 26], 7 + QUAD $0x1a0e44203a0f4366; BYTE $0x05 // pinsrb xmm0, byte [r14 + r9 + 26], 5 + QUAD $0x1a1e44203a0f4366; BYTE $0x06 // pinsrb xmm0, byte [r14 + r11 + 26], 6 + QUAD $0x1a0644203a0f4366; BYTE $0x07 // pinsrb xmm0, byte [r14 + r8 + 26], 7 QUAD $0x1a3644203a0f4166; BYTE $0x08 // pinsrb xmm0, byte [r14 + rsi + 26], 8 - QUAD $0x1a0e44203a0f4366; BYTE $0x09 // pinsrb xmm0, byte [r14 + r9 + 26], 9 + QUAD $0x1a0e44203a0f4166; BYTE $0x09 // pinsrb xmm0, byte [r14 + rcx + 26], 9 QUAD $0x1a1644203a0f4366; BYTE $0x0a // pinsrb xmm0, byte [r14 + r10 + 26], 10 - QUAD $0x1a0644203a0f4366; BYTE $0x0b // pinsrb xmm0, byte [r14 + r8 + 26], 11 + QUAD $0x1a1644203a0f4166; BYTE $0x0b // pinsrb xmm0, byte [r14 + rdx + 26], 11 QUAD $0x1a3e44203a0f4166; BYTE $0x0c // pinsrb xmm0, byte [r14 + rdi + 26], 12 - QUAD $0x1a1644203a0f4166; BYTE $0x0d // pinsrb xmm0, byte [r14 + rdx + 26], 13 - QUAD $0x1a1e44203a0f4366; BYTE $0x0e // pinsrb xmm0, byte [r14 + r11 + 26], 14 - QUAD $0x1a2e44203a0f4366; BYTE $0x0f // pinsrb xmm0, byte [r14 + r13 + 26], 15 + QUAD $0x1a2e44203a0f4366; BYTE $0x0d // pinsrb xmm0, byte [r14 + r13 + 26], 13 + QUAD $0x1a2644203a0f4366; BYTE $0x0e // pinsrb xmm0, byte [r14 + r12 + 26], 14 + QUAD $0x1a1e44203a0f4166; BYTE $0x0f // pinsrb xmm0, byte [r14 + rbx + 26], 15 QUAD $0x1b3e5c203a0f4766; BYTE $0x03 // pinsrb xmm11, byte [r14 + r15 + 27], 3 QUAD $0x1b065c203a0f4566; BYTE $0x04 // pinsrb xmm11, byte [r14 + rax + 27], 4 - QUAD $0x1b1e5c203a0f4566; BYTE $0x05 // pinsrb xmm11, byte [r14 + rbx + 27], 5 - QUAD $0x1b265c203a0f4766; BYTE $0x06 // pinsrb xmm11, byte [r14 + r12 + 27], 6 - QUAD $0x1b0e5c203a0f4566; BYTE $0x07 // pinsrb xmm11, byte [r14 + rcx + 27], 7 + QUAD $0x1b0e5c203a0f4766; BYTE $0x05 // pinsrb xmm11, byte [r14 + r9 + 27], 5 + QUAD $0x1b1e5c203a0f4766; BYTE $0x06 // pinsrb xmm11, byte [r14 + r11 + 27], 6 + QUAD $0x1b065c203a0f4766; BYTE $0x07 // pinsrb xmm11, byte [r14 + r8 + 27], 7 QUAD $0x1b365c203a0f4566; BYTE $0x08 // pinsrb xmm11, byte [r14 + rsi + 27], 8 - QUAD $0x1b0e5c203a0f4766; BYTE $0x09 // pinsrb xmm11, byte [r14 + r9 + 27], 9 + QUAD $0x1b0e5c203a0f4566; BYTE $0x09 // pinsrb xmm11, byte [r14 + rcx + 27], 9 QUAD $0x1b165c203a0f4766; BYTE $0x0a // pinsrb xmm11, byte [r14 + r10 + 27], 10 - QUAD $0x1b065c203a0f4766; BYTE $0x0b // pinsrb xmm11, byte [r14 + r8 + 27], 11 + QUAD $0x1b165c203a0f4566; BYTE $0x0b // pinsrb xmm11, byte [r14 + rdx + 27], 11 QUAD $0x1b3e5c203a0f4566; BYTE $0x0c // pinsrb xmm11, byte [r14 + rdi + 27], 12 - QUAD $0x1b165c203a0f4566; BYTE $0x0d // pinsrb xmm11, byte [r14 + rdx + 27], 13 - QUAD $0x1b1e5c203a0f4766; BYTE $0x0e // pinsrb xmm11, byte [r14 + r11 + 27], 14 + QUAD $0x1b2e5c203a0f4766; BYTE $0x0d // pinsrb xmm11, byte [r14 + r13 + 27], 13 + QUAD $0x1b265c203a0f4766; BYTE $0x0e // pinsrb xmm11, byte [r14 + r12 + 27], 14 LONG $0x740f4566; BYTE $0xee // pcmpeqb xmm13, xmm14 QUAD $0x000100addf0f4466; BYTE $0x00 // pandn xmm13, oword 256[rbp] /* [rip + .LCPI5_16] */ LONG $0xfc0f4566; BYTE $0xec // paddb xmm13, xmm12 - QUAD $0x1b2e5c203a0f4766; BYTE $0x0f // pinsrb xmm11, byte [r14 + r13 + 27], 15 + QUAD $0x1b1e5c203a0f4566; BYTE $0x0f // pinsrb xmm11, byte [r14 + rbx + 27], 15 LONG $0x740f4166; BYTE $0xc6 // pcmpeqb xmm0, xmm14 QUAD $0x0000011085df0f66 // pandn xmm0, oword 272[rbp] /* [rip + .LCPI5_17] */ LONG $0x740f4566; BYTE $0xde // pcmpeqb xmm11, xmm14 @@ -27588,61 +28844,60 @@ LBB5_86: QUAD $0x1d064c203a0f4566; BYTE $0x04 // pinsrb xmm9, byte [r14 + rax + 29], 4 QUAD $0x1e0654203a0f4566; BYTE $0x04 // pinsrb xmm10, byte [r14 + rax + 30], 4 QUAD $0x1f0674203a0f4166; BYTE $0x04 // pinsrb xmm6, byte [r14 + rax + 31], 4 - QUAD $0x1c1e7c203a0f4566; BYTE $0x05 // pinsrb xmm15, byte [r14 + rbx + 28], 5 - QUAD $0x1d1e4c203a0f4566; BYTE $0x05 // pinsrb xmm9, byte [r14 + rbx + 29], 5 - QUAD $0x1e1e54203a0f4566; BYTE $0x05 // pinsrb xmm10, byte [r14 + rbx + 30], 5 - QUAD $0x1f1e74203a0f4166; BYTE $0x05 // pinsrb xmm6, byte [r14 + rbx + 31], 5 - QUAD $0x1c267c203a0f4766; BYTE $0x06 // pinsrb xmm15, byte [r14 + r12 + 28], 6 - QUAD $0x1d264c203a0f4766; BYTE $0x06 // pinsrb xmm9, byte [r14 + r12 + 29], 6 - QUAD $0x1e2654203a0f4766; BYTE $0x06 // pinsrb xmm10, byte [r14 + r12 + 30], 6 - QUAD $0x1f2674203a0f4366; BYTE $0x06 // pinsrb xmm6, byte [r14 + r12 + 31], 6 - WORD $0x8948; BYTE $0xc8 // mov rax, rcx - QUAD $0x1c0e7c203a0f4566; BYTE $0x07 // pinsrb xmm15, byte [r14 + rcx + 28], 7 - QUAD $0x1d0e4c203a0f4566; BYTE $0x07 // pinsrb xmm9, byte [r14 + rcx + 29], 7 - QUAD $0x1e0e54203a0f4566; BYTE $0x07 // pinsrb xmm10, byte [r14 + rcx + 30], 7 - QUAD $0x1f0e74203a0f4166; BYTE $0x07 // pinsrb xmm6, byte [r14 + rcx + 31], 7 + WORD $0x894c; BYTE $0xc8 // mov rax, r9 + QUAD $0x1c0e7c203a0f4766; BYTE $0x05 // pinsrb xmm15, byte [r14 + r9 + 28], 5 + QUAD $0x1d0e4c203a0f4766; BYTE $0x05 // pinsrb xmm9, byte [r14 + r9 + 29], 5 + QUAD $0x1e0e54203a0f4766; BYTE $0x05 // pinsrb xmm10, byte [r14 + r9 + 30], 5 + QUAD $0x1f0e74203a0f4366; BYTE $0x05 // pinsrb xmm6, byte [r14 + r9 + 31], 5 + QUAD $0x1c1e7c203a0f4766; BYTE $0x06 // pinsrb xmm15, byte [r14 + r11 + 28], 6 + QUAD $0x1d1e4c203a0f4766; BYTE $0x06 // pinsrb xmm9, byte [r14 + r11 + 29], 6 + QUAD $0x1e1e54203a0f4766; BYTE $0x06 // pinsrb xmm10, byte [r14 + r11 + 30], 6 + QUAD $0x1f1e74203a0f4366; BYTE $0x06 // pinsrb xmm6, byte [r14 + r11 + 31], 6 + WORD $0x894c; BYTE $0xc0 // mov rax, r8 + QUAD $0x1c067c203a0f4766; BYTE $0x07 // pinsrb xmm15, byte [r14 + r8 + 28], 7 + QUAD $0x1d064c203a0f4766; BYTE $0x07 // pinsrb xmm9, byte [r14 + r8 + 29], 7 + QUAD $0x1e0654203a0f4766; BYTE $0x07 // pinsrb xmm10, byte [r14 + r8 + 30], 7 + QUAD $0x1f0674203a0f4366; BYTE $0x07 // pinsrb xmm6, byte [r14 + r8 + 31], 7 WORD $0x8948; BYTE $0xf0 // mov rax, rsi QUAD $0x1c367c203a0f4566; BYTE $0x08 // pinsrb xmm15, byte [r14 + rsi + 28], 8 QUAD $0x1d364c203a0f4566; BYTE $0x08 // pinsrb xmm9, byte [r14 + rsi + 29], 8 QUAD $0x1e3654203a0f4566; BYTE $0x08 // pinsrb xmm10, byte [r14 + rsi + 30], 8 QUAD $0x1f3674203a0f4166; BYTE $0x08 // pinsrb xmm6, byte [r14 + rsi + 31], 8 - WORD $0x894c; BYTE $0xc8 // mov rax, r9 - QUAD $0x1c0e7c203a0f4766; BYTE $0x09 // pinsrb xmm15, byte [r14 + r9 + 28], 9 - QUAD $0x1d0e4c203a0f4766; BYTE $0x09 // pinsrb xmm9, byte [r14 + r9 + 29], 9 - QUAD $0x1e0e54203a0f4766; BYTE $0x09 // pinsrb xmm10, byte [r14 + r9 + 30], 9 - QUAD $0x1f0e74203a0f4366; BYTE $0x09 // pinsrb xmm6, byte [r14 + r9 + 31], 9 + WORD $0x8948; BYTE $0xc8 // mov rax, rcx + QUAD $0x1c0e7c203a0f4566; BYTE $0x09 // pinsrb xmm15, byte [r14 + rcx + 28], 9 + QUAD $0x1d0e4c203a0f4566; BYTE $0x09 // pinsrb xmm9, byte [r14 + rcx + 29], 9 + QUAD $0x1e0e54203a0f4566; BYTE $0x09 // pinsrb xmm10, byte [r14 + rcx + 30], 9 + QUAD $0x1f0e74203a0f4166; BYTE $0x09 // pinsrb xmm6, byte [r14 + rcx + 31], 9 WORD $0x894c; BYTE $0xd0 // mov rax, r10 QUAD $0x1c167c203a0f4766; BYTE $0x0a // pinsrb xmm15, byte [r14 + r10 + 28], 10 QUAD $0x1d164c203a0f4766; BYTE $0x0a // pinsrb xmm9, byte [r14 + r10 + 29], 10 QUAD $0x1e1654203a0f4766; BYTE $0x0a // pinsrb xmm10, byte [r14 + r10 + 30], 10 QUAD $0x1f1674203a0f4366; BYTE $0x0a // pinsrb xmm6, byte [r14 + r10 + 31], 10 - WORD $0x894c; BYTE $0xc0 // mov rax, r8 - QUAD $0x1c067c203a0f4766; BYTE $0x0b // pinsrb xmm15, byte [r14 + r8 + 28], 11 - QUAD $0x1d064c203a0f4766; BYTE $0x0b // pinsrb xmm9, byte [r14 + r8 + 29], 11 - QUAD $0x1e0654203a0f4766; BYTE $0x0b // pinsrb xmm10, byte [r14 + r8 + 30], 11 - QUAD $0x1f0674203a0f4366; BYTE $0x0b // pinsrb xmm6, byte [r14 + r8 + 31], 11 + WORD $0x8948; BYTE $0xd0 // mov rax, rdx + QUAD $0x1c167c203a0f4566; BYTE $0x0b // pinsrb xmm15, byte [r14 + rdx + 28], 11 + QUAD $0x1d164c203a0f4566; BYTE $0x0b // pinsrb xmm9, byte [r14 + rdx + 29], 11 + QUAD $0x1e1654203a0f4566; BYTE $0x0b // pinsrb xmm10, byte [r14 + rdx + 30], 11 + QUAD $0x1f1674203a0f4166; BYTE $0x0b // pinsrb xmm6, byte [r14 + rdx + 31], 11 WORD $0x8948; BYTE $0xf8 // mov rax, rdi QUAD $0x1c3e7c203a0f4566; BYTE $0x0c // pinsrb xmm15, byte [r14 + rdi + 28], 12 QUAD $0x1d3e4c203a0f4566; BYTE $0x0c // pinsrb xmm9, byte [r14 + rdi + 29], 12 QUAD $0x1e3e54203a0f4566; BYTE $0x0c // pinsrb xmm10, byte [r14 + rdi + 30], 12 QUAD $0x1f3e74203a0f4166; BYTE $0x0c // pinsrb xmm6, byte [r14 + rdi + 31], 12 - WORD $0x8948; BYTE $0xd0 // mov rax, rdx - QUAD $0x1c167c203a0f4566; BYTE $0x0d // pinsrb xmm15, byte [r14 + rdx + 28], 13 - QUAD $0x1d164c203a0f4566; BYTE $0x0d // pinsrb xmm9, byte [r14 + rdx + 29], 13 - QUAD $0x1e1654203a0f4566; BYTE $0x0d // pinsrb xmm10, byte [r14 + rdx + 30], 13 - QUAD $0x1f1674203a0f4166; BYTE $0x0d // pinsrb xmm6, byte [r14 + rdx + 31], 13 - WORD $0x894c; BYTE $0xd8 // mov rax, r11 - QUAD $0x1c1e7c203a0f4766; BYTE $0x0e // pinsrb xmm15, byte [r14 + r11 + 28], 14 - QUAD $0x1d1e4c203a0f4766; BYTE $0x0e // pinsrb xmm9, byte [r14 + r11 + 29], 14 - QUAD $0x1e1e54203a0f4766; BYTE $0x0e // pinsrb xmm10, byte [r14 + r11 + 30], 14 - QUAD $0x1f1e74203a0f4366; BYTE $0x0e // pinsrb xmm6, byte [r14 + r11 + 31], 14 - QUAD $0x1c2e7c203a0f4766; BYTE $0x0f // pinsrb xmm15, byte [r14 + r13 + 28], 15 - QUAD $0x1d2e4c203a0f4766; BYTE $0x0f // pinsrb xmm9, byte [r14 + r13 + 29], 15 - QUAD $0x1e2e54203a0f4766; BYTE $0x0f // pinsrb xmm10, byte [r14 + r13 + 30], 15 + QUAD $0x1c2e7c203a0f4766; BYTE $0x0d // pinsrb xmm15, byte [r14 + r13 + 28], 13 + QUAD $0x1d2e4c203a0f4766; BYTE $0x0d // pinsrb xmm9, byte [r14 + r13 + 29], 13 + QUAD $0x1e2e54203a0f4766; BYTE $0x0d // pinsrb xmm10, byte [r14 + r13 + 30], 13 + QUAD $0x1f2e74203a0f4366; BYTE $0x0d // pinsrb xmm6, byte [r14 + r13 + 31], 13 + QUAD $0x1c267c203a0f4766; BYTE $0x0e // pinsrb xmm15, byte [r14 + r12 + 28], 14 + QUAD $0x1d264c203a0f4766; BYTE $0x0e // pinsrb xmm9, byte [r14 + r12 + 29], 14 + QUAD $0x1e2654203a0f4766; BYTE $0x0e // pinsrb xmm10, byte [r14 + r12 + 30], 14 + QUAD $0x1f2674203a0f4366; BYTE $0x0e // pinsrb xmm6, byte [r14 + r12 + 31], 14 + QUAD $0x1c1e7c203a0f4566; BYTE $0x0f // pinsrb xmm15, byte [r14 + rbx + 28], 15 + QUAD $0x1d1e4c203a0f4566; BYTE $0x0f // pinsrb xmm9, byte [r14 + rbx + 29], 15 + QUAD $0x1e1e54203a0f4566; BYTE $0x0f // pinsrb xmm10, byte [r14 + rbx + 30], 15 LONG $0x740f4566; BYTE $0xfe // pcmpeqb xmm15, xmm14 QUAD $0x000130bddf0f4466; BYTE $0x00 // pandn xmm15, oword 304[rbp] /* [rip + .LCPI5_19] */ LONG $0xeb0f4566; BYTE $0xfb // por xmm15, xmm11 - QUAD $0x1f2e74203a0f4366; BYTE $0x0f // pinsrb xmm6, byte [r14 + r13 + 31], 15 + QUAD $0x1f1e74203a0f4166; BYTE $0x0f // pinsrb xmm6, byte [r14 + rbx + 31], 15 QUAD $0x000160adf80f4466; BYTE $0x00 // psubb xmm13, oword 352[rbp] /* [rip + .LCPI5_22] */ LONG $0xeb0f4566; BYTE $0xfd // por xmm15, xmm13 LONG $0x740f4566; BYTE $0xce // pcmpeqb xmm9, xmm14 @@ -27656,7 +28911,7 @@ LBB5_86: LONG $0xeb0f4166; BYTE $0xf7 // por xmm6, xmm15 LONG $0x6f0f4166; BYTE $0xc0 // movdqa xmm0, xmm8 LONG $0xc6600f66 // punpcklbw xmm0, xmm6 - QUAD $0x000100249c6f0f66; BYTE $0x00 // movdqa xmm3, oword [rsp + 256] + QUAD $0x0000f0249c6f0f66; BYTE $0x00 // movdqa xmm3, oword [rsp + 240] LONG $0xcb6f0f66 // movdqa xmm1, xmm3 QUAD $0x0000c024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 192] LONG $0xcc600f66 // punpcklbw xmm1, xmm4 @@ -27676,46 +28931,46 @@ LBB5_86: LONG $0x147f0ff3; BYTE $0x88 // movdqu oword [rax + 4*rcx], xmm2 LONG $0x10c18348 // add rcx, 16 WORD $0x8948; BYTE $0xc8 // mov rax, rcx - QUAD $0x000000d8248c3b48 // cmp rcx, qword [rsp + 216] - JNE LBB5_86 - QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] - QUAD $0x000000d824943b4c // cmp r10, qword [rsp + 216] + QUAD $0x000000e8248c3b48 // cmp rcx, qword [rsp + 232] + JNE LBB5_87 + QUAD $0x0000010824948b4c // mov r10, qword [rsp + 264] + QUAD $0x000000e824943b4c // cmp r10, qword [rsp + 232] QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] - JNE LBB5_88 - JMP LBB5_91 + JNE LBB5_89 + JMP LBB5_92 -LBB5_66: +LBB5_67: LONG $0xf0e28349 // and r10, -16 WORD $0x894c; BYTE $0xd0 // mov rax, r10 LONG $0x05e0c148 // shl rax, 5 WORD $0x014c; BYTE $0xf0 // add rax, r14 QUAD $0x0000011024848948 // mov qword [rsp + 272], rax - QUAD $0x000000d82494894c // mov qword [rsp + 216], r10 + QUAD $0x000000e82494894c // mov qword [rsp + 232], r10 LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] LONG $0x90048d4a // lea rax, [rax + 4*r10] - LONG $0x24448948; BYTE $0x58 // mov qword [rsp + 88], rax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x24448948; BYTE $0x68 // mov qword [rsp + 104], rax + LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] LONG $0xc86e0f66 // movd xmm1, eax LONG $0xc0ef0f66 // pxor xmm0, xmm0 LONG $0x00380f66; BYTE $0xc8 // pshufb xmm1, xmm0 QUAD $0x0000b0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 176], xmm1 WORD $0xc031 // xor eax, eax -LBB5_67: +LBB5_68: QUAD $0x000000a824848948 // mov qword [rsp + 168], rax LONG $0x05e0c148 // shl rax, 5 - WORD $0x8949; BYTE $0xc0 // mov r8, rax - WORD $0x8949; BYTE $0xc3 // mov r11, rax - WORD $0x8949; BYTE $0xc1 // mov r9, rax WORD $0x8949; BYTE $0xc5 // mov r13, rax - WORD $0x8949; BYTE $0xc7 // mov r15, rax WORD $0x8948; BYTE $0xc7 // mov rdi, rax + WORD $0x8949; BYTE $0xc7 // mov r15, rax + WORD $0x8948; BYTE $0xc3 // mov rbx, rax WORD $0x8949; BYTE $0xc2 // mov r10, rax + WORD $0x8949; BYTE $0xc1 // mov r9, rax + WORD $0x8949; BYTE $0xc0 // mov r8, rax WORD $0x8949; BYTE $0xc4 // mov r12, rax - WORD $0x8948; BYTE $0xc3 // mov rbx, rax WORD $0x8948; BYTE $0xc2 // mov rdx, rax WORD $0x8948; BYTE $0xc6 // mov rsi, rax + LONG $0x24448948; BYTE $0x60 // mov qword [rsp + 96], rax LONG $0x0cb60f41; BYTE $0x06 // movzx ecx, byte [r14 + rax] LONG $0xe16e0f66 // movd xmm4, ecx LONG $0x4cb60f41; WORD $0x0106 // movzx ecx, byte [r14 + rax + 1] @@ -27734,7 +28989,7 @@ LBB5_67: LONG $0x6e0f4466; BYTE $0xf1 // movd xmm14, ecx LONG $0x4cb60f41; WORD $0x0806 // movzx ecx, byte [r14 + rax + 8] LONG $0xc16e0f66 // movd xmm0, ecx - QUAD $0x00010024847f0f66; BYTE $0x00 // movdqa oword [rsp + 256], xmm0 + QUAD $0x0000f024847f0f66; BYTE $0x00 // movdqa oword [rsp + 240], xmm0 LONG $0x4cb60f41; WORD $0x0906 // movzx ecx, byte [r14 + rax + 9] LONG $0x6e0f4466; BYTE $0xd9 // movd xmm11, ecx LONG $0x4cb60f41; WORD $0x0a06 // movzx ecx, byte [r14 + rax + 10] @@ -27743,7 +28998,7 @@ LBB5_67: LONG $0x6e0f4466; BYTE $0xe9 // movd xmm13, ecx LONG $0x4cb60f41; WORD $0x0c06 // movzx ecx, byte [r14 + rax + 12] LONG $0xc16e0f66 // movd xmm0, ecx - QUAD $0x0000e024847f0f66; BYTE $0x00 // movdqa oword [rsp + 224], xmm0 + QUAD $0x0000d024847f0f66; BYTE $0x00 // movdqa oword [rsp + 208], xmm0 LONG $0x4cb60f41; WORD $0x0d06 // movzx ecx, byte [r14 + rax + 13] LONG $0xf16e0f66 // movd xmm6, ecx LONG $0x4cb60f41; WORD $0x0e06 // movzx ecx, byte [r14 + rax + 14] @@ -27751,152 +29006,153 @@ LBB5_67: LONG $0x4cb60f41; WORD $0x0f06 // movzx ecx, byte [r14 + rax + 15] LONG $0xc16e0f66 // movd xmm0, ecx QUAD $0x0000c024847f0f66; BYTE $0x00 // movdqa oword [rsp + 192], xmm0 - QUAD $0x0000008024848948 // mov qword [rsp + 128], rax - WORD $0x8948; BYTE $0xc1 // mov rcx, rax - LONG $0x20c98348 // or rcx, 32 - LONG $0x244c8948; BYTE $0x10 // mov qword [rsp + 16], rcx - LONG $0x40c88349 // or r8, 64 - LONG $0x2444894c; BYTE $0x20 // mov qword [rsp + 32], r8 - LONG $0x60cb8349 // or r11, 96 - LONG $0x245c894c; BYTE $0x50 // mov qword [rsp + 80], r11 - LONG $0x80c98149; WORD $0x0000; BYTE $0x00 // or r9, 128 - LONG $0x244c894c; BYTE $0x18 // mov qword [rsp + 24], r9 - LONG $0xa0cd8149; WORD $0x0000; BYTE $0x00 // or r13, 160 - LONG $0xc0cf8149; WORD $0x0000; BYTE $0x00 // or r15, 192 - LONG $0xe0cf8148; WORD $0x0000; BYTE $0x00 // or rdi, 224 - LONG $0x247c8948; BYTE $0x68 // mov qword [rsp + 104], rdi - LONG $0x00ca8149; WORD $0x0001; BYTE $0x00 // or r10, 256 - QUAD $0x000000982494894c // mov qword [rsp + 152], r10 + LONG $0x24448948; BYTE $0x38 // mov qword [rsp + 56], rax + WORD $0x8949; BYTE $0xc3 // mov r11, rax + LONG $0x20cb8349 // or r11, 32 + LONG $0x245c894c; BYTE $0x10 // mov qword [rsp + 16], r11 + LONG $0x40cd8349 // or r13, 64 + LONG $0x60cf8348 // or rdi, 96 + LONG $0x80cf8149; WORD $0x0000; BYTE $0x00 // or r15, 128 + LONG $0xa0cb8148; WORD $0x0000; BYTE $0x00 // or rbx, 160 + LONG $0xc0ca8149; WORD $0x0000; BYTE $0x00 // or r10, 192 + LONG $0xe0c98149; WORD $0x0000; BYTE $0x00 // or r9, 224 + LONG $0x00c88149; WORD $0x0001; BYTE $0x00 // or r8, 256 LONG $0x20cc8149; WORD $0x0001; BYTE $0x00 // or r12, 288 - LONG $0x40cb8148; WORD $0x0001; BYTE $0x00 // or rbx, 320 - QUAD $0x00000090249c8948 // mov qword [rsp + 144], rbx - LONG $0x60ca8148; WORD $0x0001; BYTE $0x00 // or rdx, 352 + LONG $0x40ca8148; WORD $0x0001; BYTE $0x00 // or rdx, 320 LONG $0x24548948; BYTE $0x70 // mov qword [rsp + 112], rdx - WORD $0x8948; BYTE $0xc3 // mov rbx, rax - LONG $0x80cb8148; WORD $0x0001; BYTE $0x00 // or rbx, 384 - LONG $0x245c8948; BYTE $0x78 // mov qword [rsp + 120], rbx + LONG $0x60ce8148; WORD $0x0001; BYTE $0x00 // or rsi, 352 + QUAD $0x0000009824b48948 // mov qword [rsp + 152], rsi + LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] + LONG $0x80c98148; WORD $0x0001; BYTE $0x00 // or rcx, 384 + LONG $0x244c8948; BYTE $0x60 // mov qword [rsp + 96], rcx WORD $0x8948; BYTE $0xc2 // mov rdx, rax LONG $0xa0ca8148; WORD $0x0001; BYTE $0x00 // or rdx, 416 - WORD $0x8948; BYTE $0xc1 // mov rcx, rax - LONG $0xc0c98148; WORD $0x0001; BYTE $0x00 // or rcx, 448 - LONG $0x244c8948; BYTE $0x40 // mov qword [rsp + 64], rcx - LONG $0xe0ce8148; WORD $0x0001; BYTE $0x00 // or rsi, 480 - LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] - QUAD $0x010624203a0f4166 // pinsrb xmm4, byte [r14 + rax], 1 - QUAD $0x020624203a0f4366 // pinsrb xmm4, byte [r14 + r8], 2 - QUAD $0x031e24203a0f4366 // pinsrb xmm4, byte [r14 + r11], 3 - QUAD $0x040e24203a0f4366 // pinsrb xmm4, byte [r14 + r9], 4 - QUAD $0x052e24203a0f4366 // pinsrb xmm4, byte [r14 + r13], 5 - QUAD $0x063e24203a0f4366 // pinsrb xmm4, byte [r14 + r15], 6 - QUAD $0x073e24203a0f4166 // pinsrb xmm4, byte [r14 + rdi], 7 - QUAD $0x081624203a0f4366 // pinsrb xmm4, byte [r14 + r10], 8 + LONG $0x24548948; BYTE $0x18 // mov qword [rsp + 24], rdx + WORD $0x8948; BYTE $0xc2 // mov rdx, rax + LONG $0xc0ca8148; WORD $0x0001; BYTE $0x00 // or rdx, 448 + LONG $0x24548948; BYTE $0x20 // mov qword [rsp + 32], rdx + WORD $0x8948; BYTE $0xc2 // mov rdx, rax + LONG $0xe0ca8148; WORD $0x0001; BYTE $0x00 // or rdx, 480 + LONG $0x24548948; BYTE $0x50 // mov qword [rsp + 80], rdx + QUAD $0x011e24203a0f4366 // pinsrb xmm4, byte [r14 + r11], 1 + LONG $0x246c894c; BYTE $0x30 // mov qword [rsp + 48], r13 + QUAD $0x022e24203a0f4366 // pinsrb xmm4, byte [r14 + r13], 2 + LONG $0x247c8948; BYTE $0x28 // mov qword [rsp + 40], rdi + QUAD $0x033e24203a0f4166 // pinsrb xmm4, byte [r14 + rdi], 3 + LONG $0x247c894c; BYTE $0x78 // mov qword [rsp + 120], r15 + QUAD $0x043e24203a0f4366 // pinsrb xmm4, byte [r14 + r15], 4 + QUAD $0x00000080249c8948 // mov qword [rsp + 128], rbx + QUAD $0x051e24203a0f4166 // pinsrb xmm4, byte [r14 + rbx], 5 + QUAD $0x000000902494894c // mov qword [rsp + 144], r10 + QUAD $0x061624203a0f4366 // pinsrb xmm4, byte [r14 + r10], 6 + LONG $0x244c894c; BYTE $0x58 // mov qword [rsp + 88], r9 + QUAD $0x070e24203a0f4366 // pinsrb xmm4, byte [r14 + r9], 7 + LONG $0x2444894c; BYTE $0x48 // mov qword [rsp + 72], r8 + QUAD $0x080624203a0f4366 // pinsrb xmm4, byte [r14 + r8], 8 + WORD $0x894d; BYTE $0xe0 // mov r8, r12 QUAD $0x092624203a0f4366 // pinsrb xmm4, byte [r14 + r12], 9 - QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] - QUAD $0x0a0624203a0f4166 // pinsrb xmm4, byte [r14 + rax], 10 - LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] - QUAD $0x0b0624203a0f4166 // pinsrb xmm4, byte [r14 + rax], 11 - QUAD $0x0c1e24203a0f4166 // pinsrb xmm4, byte [r14 + rbx], 12 - QUAD $0x0d1624203a0f4166 // pinsrb xmm4, byte [r14 + rdx], 13 - QUAD $0x0e0e24203a0f4166 // pinsrb xmm4, byte [r14 + rcx], 14 - QUAD $0x0f3624203a0f4166 // pinsrb xmm4, byte [r14 + rsi], 15 - LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] - QUAD $0x01065c203a0f4166; BYTE $0x01 // pinsrb xmm3, byte [r14 + rax + 1], 1 - QUAD $0x01065c203a0f4366; BYTE $0x02 // pinsrb xmm3, byte [r14 + r8 + 1], 2 - QUAD $0x011e5c203a0f4366; BYTE $0x03 // pinsrb xmm3, byte [r14 + r11 + 1], 3 - QUAD $0x010e5c203a0f4366; BYTE $0x04 // pinsrb xmm3, byte [r14 + r9 + 1], 4 - QUAD $0x012e5c203a0f4366; BYTE $0x05 // pinsrb xmm3, byte [r14 + r13 + 1], 5 - WORD $0x894d; BYTE $0xe9 // mov r9, r13 - QUAD $0x013e5c203a0f4366; BYTE $0x06 // pinsrb xmm3, byte [r14 + r15 + 1], 6 - WORD $0x894d; BYTE $0xfb // mov r11, r15 - QUAD $0x013e5c203a0f4166; BYTE $0x07 // pinsrb xmm3, byte [r14 + rdi + 1], 7 - QUAD $0x01165c203a0f4366; BYTE $0x08 // pinsrb xmm3, byte [r14 + r10 + 1], 8 - QUAD $0x01265c203a0f4366; BYTE $0x09 // pinsrb xmm3, byte [r14 + r12 + 1], 9 - WORD $0x894c; BYTE $0xe7 // mov rdi, r12 - QUAD $0x0000009024a48b4c // mov r12, qword [rsp + 144] + LONG $0x24648b4c; BYTE $0x70 // mov r12, qword [rsp + 112] + QUAD $0x0a2624203a0f4366 // pinsrb xmm4, byte [r14 + r12], 10 + QUAD $0x0b3624203a0f4166 // pinsrb xmm4, byte [r14 + rsi], 11 + QUAD $0x0c0e24203a0f4166 // pinsrb xmm4, byte [r14 + rcx], 12 + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + QUAD $0x0d0624203a0f4166 // pinsrb xmm4, byte [r14 + rax], 13 + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x0e0624203a0f4166 // pinsrb xmm4, byte [r14 + rax], 14 + QUAD $0x0f1624203a0f4166 // pinsrb xmm4, byte [r14 + rdx], 15 + QUAD $0x011e5c203a0f4366; BYTE $0x01 // pinsrb xmm3, byte [r14 + r11 + 1], 1 + QUAD $0x012e5c203a0f4366; BYTE $0x02 // pinsrb xmm3, byte [r14 + r13 + 1], 2 + QUAD $0x013e5c203a0f4166; BYTE $0x03 // pinsrb xmm3, byte [r14 + rdi + 1], 3 + QUAD $0x013e5c203a0f4366; BYTE $0x04 // pinsrb xmm3, byte [r14 + r15 + 1], 4 + QUAD $0x011e5c203a0f4166; BYTE $0x05 // pinsrb xmm3, byte [r14 + rbx + 1], 5 + QUAD $0x01165c203a0f4366; BYTE $0x06 // pinsrb xmm3, byte [r14 + r10 + 1], 6 + QUAD $0x010e5c203a0f4366; BYTE $0x07 // pinsrb xmm3, byte [r14 + r9 + 1], 7 + LONG $0x246c8b4c; BYTE $0x48 // mov r13, qword [rsp + 72] + QUAD $0x012e5c203a0f4366; BYTE $0x08 // pinsrb xmm3, byte [r14 + r13 + 1], 8 + QUAD $0x01065c203a0f4366; BYTE $0x09 // pinsrb xmm3, byte [r14 + r8 + 1], 9 + WORD $0x894c; BYTE $0xc7 // mov rdi, r8 QUAD $0x01265c203a0f4366; BYTE $0x0a // pinsrb xmm3, byte [r14 + r12 + 1], 10 - LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] - QUAD $0x01065c203a0f4166; BYTE $0x0b // pinsrb xmm3, byte [r14 + rax + 1], 11 - QUAD $0x011e5c203a0f4166; BYTE $0x0c // pinsrb xmm3, byte [r14 + rbx + 1], 12 - QUAD $0x01165c203a0f4166; BYTE $0x0d // pinsrb xmm3, byte [r14 + rdx + 1], 13 - LONG $0x24548948; BYTE $0x30 // mov qword [rsp + 48], rdx - QUAD $0x010e5c203a0f4166; BYTE $0x0e // pinsrb xmm3, byte [r14 + rcx + 1], 14 + WORD $0x894d; BYTE $0xe7 // mov r15, r12 + QUAD $0x01365c203a0f4166; BYTE $0x0b // pinsrb xmm3, byte [r14 + rsi + 1], 11 + QUAD $0x010e5c203a0f4166; BYTE $0x0c // pinsrb xmm3, byte [r14 + rcx + 1], 12 + LONG $0x245c8b4c; BYTE $0x18 // mov r11, qword [rsp + 24] + QUAD $0x011e5c203a0f4366; BYTE $0x0d // pinsrb xmm3, byte [r14 + r11 + 1], 13 + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x01065c203a0f4166; BYTE $0x0e // pinsrb xmm3, byte [r14 + rax + 1], 14 QUAD $0x0000b0248c6f0f66; BYTE $0x00 // movdqa xmm1, oword [rsp + 176] LONG $0xe1740f66 // pcmpeqb xmm4, xmm1 - QUAD $0x01365c203a0f4166; BYTE $0x0f // pinsrb xmm3, byte [r14 + rsi + 1], 15 - WORD $0x8949; BYTE $0xf0 // mov r8, rsi + QUAD $0x01165c203a0f4166; BYTE $0x0f // pinsrb xmm3, byte [r14 + rdx + 1], 15 LONG $0xd9740f66 // pcmpeqb xmm3, xmm1 QUAD $0x00000100856f0f66 // movdqa xmm0, oword 256[rbp] /* [rip + .LCPI5_16] */ LONG $0xd8df0f66 // pandn xmm3, xmm0 LONG $0xdcfc0f66 // paddb xmm3, xmm4 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] LONG $0x74b60f41; WORD $0x1006 // movzx esi, byte [r14 + rax + 16] LONG $0x6e0f4466; BYTE $0xd6 // movd xmm10, esi LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] QUAD $0x02066c203a0f4166; BYTE $0x01 // pinsrb xmm5, byte [r14 + rax + 2], 1 - LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] - QUAD $0x022e6c203a0f4366; BYTE $0x02 // pinsrb xmm5, byte [r14 + r13 + 2], 2 - LONG $0x247c8b4c; BYTE $0x50 // mov r15, qword [rsp + 80] - QUAD $0x023e6c203a0f4366; BYTE $0x03 // pinsrb xmm5, byte [r14 + r15 + 2], 3 - LONG $0x245c8b48; BYTE $0x18 // mov rbx, qword [rsp + 24] + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + QUAD $0x02266c203a0f4366; BYTE $0x02 // pinsrb xmm5, byte [r14 + r12 + 2], 2 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x02066c203a0f4166; BYTE $0x03 // pinsrb xmm5, byte [r14 + rax + 2], 3 + LONG $0x245c8b48; BYTE $0x78 // mov rbx, qword [rsp + 120] QUAD $0x021e6c203a0f4166; BYTE $0x04 // pinsrb xmm5, byte [r14 + rbx + 2], 4 - QUAD $0x020e6c203a0f4366; BYTE $0x05 // pinsrb xmm5, byte [r14 + r9 + 2], 5 - QUAD $0x00000088249c894c // mov qword [rsp + 136], r11 - QUAD $0x021e6c203a0f4366; BYTE $0x06 // pinsrb xmm5, byte [r14 + r11 + 2], 6 - LONG $0x24548b4c; BYTE $0x68 // mov r10, qword [rsp + 104] - QUAD $0x02166c203a0f4366; BYTE $0x07 // pinsrb xmm5, byte [r14 + r10 + 2], 7 - QUAD $0x0000009824848b48 // mov rax, qword [rsp + 152] - QUAD $0x02066c203a0f4166; BYTE $0x08 // pinsrb xmm5, byte [r14 + rax + 2], 8 - LONG $0x247c8948; BYTE $0x60 // mov qword [rsp + 96], rdi + QUAD $0x0000008024948b4c // mov r10, qword [rsp + 128] + QUAD $0x02166c203a0f4366; BYTE $0x05 // pinsrb xmm5, byte [r14 + r10 + 2], 5 + QUAD $0x00000090248c8b4c // mov r9, qword [rsp + 144] + QUAD $0x020e6c203a0f4366; BYTE $0x06 // pinsrb xmm5, byte [r14 + r9 + 2], 6 + LONG $0x24448b4c; BYTE $0x58 // mov r8, qword [rsp + 88] + QUAD $0x02066c203a0f4366; BYTE $0x07 // pinsrb xmm5, byte [r14 + r8 + 2], 7 + QUAD $0x022e6c203a0f4366; BYTE $0x08 // pinsrb xmm5, byte [r14 + r13 + 2], 8 + WORD $0x8948; BYTE $0xf9 // mov rcx, rdi QUAD $0x023e6c203a0f4166; BYTE $0x09 // pinsrb xmm5, byte [r14 + rdi + 2], 9 - QUAD $0x02266c203a0f4366; BYTE $0x0a // pinsrb xmm5, byte [r14 + r12 + 2], 10 - LONG $0x24748b48; BYTE $0x70 // mov rsi, qword [rsp + 112] - QUAD $0x02366c203a0f4166; BYTE $0x0b // pinsrb xmm5, byte [r14 + rsi + 2], 11 - LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] - QUAD $0x020e6c203a0f4166; BYTE $0x0c // pinsrb xmm5, byte [r14 + rcx + 2], 12 - QUAD $0x02166c203a0f4166; BYTE $0x0d // pinsrb xmm5, byte [r14 + rdx + 2], 13 - LONG $0x24548b48; BYTE $0x40 // mov rdx, qword [rsp + 64] - QUAD $0x02166c203a0f4166; BYTE $0x0e // pinsrb xmm5, byte [r14 + rdx + 2], 14 - QUAD $0x02066c203a0f4366; BYTE $0x0f // pinsrb xmm5, byte [r14 + r8 + 2], 15 - LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] - QUAD $0x03167c203a0f4166; BYTE $0x01 // pinsrb xmm7, byte [r14 + rdx + 3], 1 - QUAD $0x032e7c203a0f4366; BYTE $0x02 // pinsrb xmm7, byte [r14 + r13 + 3], 2 - QUAD $0x033e7c203a0f4366; BYTE $0x03 // pinsrb xmm7, byte [r14 + r15 + 3], 3 + QUAD $0x023e6c203a0f4366; BYTE $0x0a // pinsrb xmm5, byte [r14 + r15 + 2], 10 + QUAD $0x0000009824948b48 // mov rdx, qword [rsp + 152] + QUAD $0x02166c203a0f4166; BYTE $0x0b // pinsrb xmm5, byte [r14 + rdx + 2], 11 + LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] + QUAD $0x023e6c203a0f4166; BYTE $0x0c // pinsrb xmm5, byte [r14 + rdi + 2], 12 + QUAD $0x021e6c203a0f4366; BYTE $0x0d // pinsrb xmm5, byte [r14 + r11 + 2], 13 + LONG $0x24748b48; BYTE $0x20 // mov rsi, qword [rsp + 32] + QUAD $0x02366c203a0f4166; BYTE $0x0e // pinsrb xmm5, byte [r14 + rsi + 2], 14 + LONG $0x245c8b4c; BYTE $0x50 // mov r11, qword [rsp + 80] + QUAD $0x021e6c203a0f4366; BYTE $0x0f // pinsrb xmm5, byte [r14 + r11 + 2], 15 + LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] + QUAD $0x03067c203a0f4166; BYTE $0x01 // pinsrb xmm7, byte [r14 + rax + 3], 1 + QUAD $0x03267c203a0f4366; BYTE $0x02 // pinsrb xmm7, byte [r14 + r12 + 3], 2 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x03067c203a0f4166; BYTE $0x03 // pinsrb xmm7, byte [r14 + rax + 3], 3 QUAD $0x031e7c203a0f4166; BYTE $0x04 // pinsrb xmm7, byte [r14 + rbx + 3], 4 - QUAD $0x030e7c203a0f4366; BYTE $0x05 // pinsrb xmm7, byte [r14 + r9 + 3], 5 - QUAD $0x031e7c203a0f4366; BYTE $0x06 // pinsrb xmm7, byte [r14 + r11 + 3], 6 - QUAD $0x03167c203a0f4366; BYTE $0x07 // pinsrb xmm7, byte [r14 + r10 + 3], 7 - QUAD $0x03067c203a0f4166; BYTE $0x08 // pinsrb xmm7, byte [r14 + rax + 3], 8 - QUAD $0x033e7c203a0f4166; BYTE $0x09 // pinsrb xmm7, byte [r14 + rdi + 3], 9 - QUAD $0x03267c203a0f4366; BYTE $0x0a // pinsrb xmm7, byte [r14 + r12 + 3], 10 - QUAD $0x03367c203a0f4166; BYTE $0x0b // pinsrb xmm7, byte [r14 + rsi + 3], 11 - QUAD $0x030e7c203a0f4166; BYTE $0x0c // pinsrb xmm7, byte [r14 + rcx + 3], 12 - LONG $0x24548b48; BYTE $0x30 // mov rdx, qword [rsp + 48] - QUAD $0x03167c203a0f4166; BYTE $0x0d // pinsrb xmm7, byte [r14 + rdx + 3], 13 - LONG $0x24548b48; BYTE $0x40 // mov rdx, qword [rsp + 64] - QUAD $0x03167c203a0f4166; BYTE $0x0e // pinsrb xmm7, byte [r14 + rdx + 3], 14 - QUAD $0x03067c203a0f4366; BYTE $0x0f // pinsrb xmm7, byte [r14 + r8 + 3], 15 - LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] - QUAD $0x04164c203a0f4566; BYTE $0x01 // pinsrb xmm9, byte [r14 + rdx + 4], 1 - QUAD $0x042e4c203a0f4766; BYTE $0x02 // pinsrb xmm9, byte [r14 + r13 + 4], 2 - QUAD $0x043e4c203a0f4766; BYTE $0x03 // pinsrb xmm9, byte [r14 + r15 + 4], 3 + QUAD $0x03167c203a0f4366; BYTE $0x05 // pinsrb xmm7, byte [r14 + r10 + 3], 5 + QUAD $0x030e7c203a0f4366; BYTE $0x06 // pinsrb xmm7, byte [r14 + r9 + 3], 6 + QUAD $0x03067c203a0f4366; BYTE $0x07 // pinsrb xmm7, byte [r14 + r8 + 3], 7 + QUAD $0x032e7c203a0f4366; BYTE $0x08 // pinsrb xmm7, byte [r14 + r13 + 3], 8 + QUAD $0x030e7c203a0f4166; BYTE $0x09 // pinsrb xmm7, byte [r14 + rcx + 3], 9 + QUAD $0x033e7c203a0f4366; BYTE $0x0a // pinsrb xmm7, byte [r14 + r15 + 3], 10 + QUAD $0x03167c203a0f4166; BYTE $0x0b // pinsrb xmm7, byte [r14 + rdx + 3], 11 + QUAD $0x033e7c203a0f4166; BYTE $0x0c // pinsrb xmm7, byte [r14 + rdi + 3], 12 + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + QUAD $0x03067c203a0f4166; BYTE $0x0d // pinsrb xmm7, byte [r14 + rax + 3], 13 + QUAD $0x03367c203a0f4166; BYTE $0x0e // pinsrb xmm7, byte [r14 + rsi + 3], 14 + QUAD $0x031e7c203a0f4366; BYTE $0x0f // pinsrb xmm7, byte [r14 + r11 + 3], 15 + LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] + QUAD $0x04064c203a0f4566; BYTE $0x01 // pinsrb xmm9, byte [r14 + rax + 4], 1 + QUAD $0x04264c203a0f4766; BYTE $0x02 // pinsrb xmm9, byte [r14 + r12 + 4], 2 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x04064c203a0f4566; BYTE $0x03 // pinsrb xmm9, byte [r14 + rax + 4], 3 QUAD $0x041e4c203a0f4566; BYTE $0x04 // pinsrb xmm9, byte [r14 + rbx + 4], 4 - QUAD $0x040e4c203a0f4766; BYTE $0x05 // pinsrb xmm9, byte [r14 + r9 + 4], 5 - WORD $0x894d; BYTE $0xcf // mov r15, r9 - LONG $0x244c894c; BYTE $0x38 // mov qword [rsp + 56], r9 - QUAD $0x041e4c203a0f4766; BYTE $0x06 // pinsrb xmm9, byte [r14 + r11 + 4], 6 - QUAD $0x04164c203a0f4766; BYTE $0x07 // pinsrb xmm9, byte [r14 + r10 + 4], 7 - WORD $0x894d; BYTE $0xd1 // mov r9, r10 - QUAD $0x04064c203a0f4566; BYTE $0x08 // pinsrb xmm9, byte [r14 + rax + 4], 8 - QUAD $0x043e4c203a0f4566; BYTE $0x09 // pinsrb xmm9, byte [r14 + rdi + 4], 9 - QUAD $0x04264c203a0f4766; BYTE $0x0a // pinsrb xmm9, byte [r14 + r12 + 4], 10 - QUAD $0x04364c203a0f4566; BYTE $0x0b // pinsrb xmm9, byte [r14 + rsi + 4], 11 - WORD $0x8948; BYTE $0xf7 // mov rdi, rsi - QUAD $0x040e4c203a0f4566; BYTE $0x0c // pinsrb xmm9, byte [r14 + rcx + 4], 12 - LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] - QUAD $0x04264c203a0f4766; BYTE $0x0d // pinsrb xmm9, byte [r14 + r12 + 4], 13 - LONG $0x24548b48; BYTE $0x40 // mov rdx, qword [rsp + 64] - QUAD $0x04164c203a0f4566; BYTE $0x0e // pinsrb xmm9, byte [r14 + rdx + 4], 14 - QUAD $0x04064c203a0f4766; BYTE $0x0f // pinsrb xmm9, byte [r14 + r8 + 4], 15 + QUAD $0x04164c203a0f4766; BYTE $0x05 // pinsrb xmm9, byte [r14 + r10 + 4], 5 + QUAD $0x040e4c203a0f4766; BYTE $0x06 // pinsrb xmm9, byte [r14 + r9 + 4], 6 + QUAD $0x04064c203a0f4766; BYTE $0x07 // pinsrb xmm9, byte [r14 + r8 + 4], 7 + QUAD $0x042e4c203a0f4766; BYTE $0x08 // pinsrb xmm9, byte [r14 + r13 + 4], 8 + WORD $0x894c; BYTE $0xe8 // mov rax, r13 + QUAD $0x040e4c203a0f4566; BYTE $0x09 // pinsrb xmm9, byte [r14 + rcx + 4], 9 + QUAD $0x043e4c203a0f4766; BYTE $0x0a // pinsrb xmm9, byte [r14 + r15 + 4], 10 + QUAD $0x04164c203a0f4566; BYTE $0x0b // pinsrb xmm9, byte [r14 + rdx + 4], 11 + QUAD $0x043e4c203a0f4566; BYTE $0x0c // pinsrb xmm9, byte [r14 + rdi + 4], 12 + LONG $0x246c8b4c; BYTE $0x18 // mov r13, qword [rsp + 24] + QUAD $0x042e4c203a0f4766; BYTE $0x0d // pinsrb xmm9, byte [r14 + r13 + 4], 13 + QUAD $0x04364c203a0f4566; BYTE $0x0e // pinsrb xmm9, byte [r14 + rsi + 4], 14 + QUAD $0x041e4c203a0f4766; BYTE $0x0f // pinsrb xmm9, byte [r14 + r11 + 4], 15 LONG $0xe9740f66 // pcmpeqb xmm5, xmm1 QUAD $0x00000110856f0f66 // movdqa xmm0, oword 272[rbp] /* [rip + .LCPI5_17] */ LONG $0xe8df0f66 // pandn xmm5, xmm0 @@ -27904,83 +29160,80 @@ LBB5_67: QUAD $0x00000120856f0f66 // movdqa xmm0, oword 288[rbp] /* [rip + .LCPI5_18] */ LONG $0xf8df0f66 // pandn xmm7, xmm0 LONG $0xfdeb0f66 // por xmm7, xmm5 - QUAD $0x0000008024948b48 // mov rdx, qword [rsp + 128] - LONG $0x74b60f41; WORD $0x1116 // movzx esi, byte [r14 + rdx + 17] + LONG $0x245c8b4c; BYTE $0x38 // mov r11, qword [rsp + 56] + LONG $0x74b60f43; WORD $0x111e // movzx esi, byte [r14 + r11 + 17] LONG $0xe66e0f66 // movd xmm4, esi LONG $0x740f4466; BYTE $0xc9 // pcmpeqb xmm9, xmm1 QUAD $0x00000130856f0f66 // movdqa xmm0, oword 304[rbp] /* [rip + .LCPI5_19] */ LONG $0xdf0f4466; BYTE $0xc8 // pandn xmm9, xmm0 LONG $0xeb0f4466; BYTE $0xcf // por xmm9, xmm7 - LONG $0x74b60f41; WORD $0x1216 // movzx esi, byte [r14 + rdx + 18] + LONG $0x74b60f43; WORD $0x121e // movzx esi, byte [r14 + r11 + 18] LONG $0xfe6e0f66 // movd xmm7, esi LONG $0xc0760f66 // pcmpeqd xmm0, xmm0 LONG $0xd8f80f66 // psubb xmm3, xmm0 LONG $0xeb0f4466; BYTE $0xcb // por xmm9, xmm3 - LONG $0x74b60f41; WORD $0x1316 // movzx esi, byte [r14 + rdx + 19] + LONG $0x74b60f43; WORD $0x131e // movzx esi, byte [r14 + r11 + 19] LONG $0xee6e0f66 // movd xmm5, esi - LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] - QUAD $0x051654203a0f4166; BYTE $0x01 // pinsrb xmm2, byte [r14 + rdx + 5], 1 - LONG $0x245c8b4c; BYTE $0x20 // mov r11, qword [rsp + 32] - QUAD $0x051e54203a0f4366; BYTE $0x02 // pinsrb xmm2, byte [r14 + r11 + 5], 2 - LONG $0x246c8b4c; BYTE $0x50 // mov r13, qword [rsp + 80] - QUAD $0x052e54203a0f4366; BYTE $0x03 // pinsrb xmm2, byte [r14 + r13 + 5], 3 + LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] + QUAD $0x053654203a0f4166; BYTE $0x01 // pinsrb xmm2, byte [r14 + rsi + 5], 1 + QUAD $0x052654203a0f4366; BYTE $0x02 // pinsrb xmm2, byte [r14 + r12 + 5], 2 + LONG $0x247c8b4c; BYTE $0x28 // mov r15, qword [rsp + 40] + QUAD $0x053e54203a0f4366; BYTE $0x03 // pinsrb xmm2, byte [r14 + r15 + 5], 3 QUAD $0x051e54203a0f4166; BYTE $0x04 // pinsrb xmm2, byte [r14 + rbx + 5], 4 - QUAD $0x053e54203a0f4366; BYTE $0x05 // pinsrb xmm2, byte [r14 + r15 + 5], 5 - QUAD $0x0000008824948b4c // mov r10, qword [rsp + 136] - QUAD $0x051654203a0f4366; BYTE $0x06 // pinsrb xmm2, byte [r14 + r10 + 5], 6 - QUAD $0x050e54203a0f4366; BYTE $0x07 // pinsrb xmm2, byte [r14 + r9 + 5], 7 + QUAD $0x051654203a0f4366; BYTE $0x05 // pinsrb xmm2, byte [r14 + r10 + 5], 5 + QUAD $0x050e54203a0f4366; BYTE $0x06 // pinsrb xmm2, byte [r14 + r9 + 5], 6 + QUAD $0x050654203a0f4366; BYTE $0x07 // pinsrb xmm2, byte [r14 + r8 + 5], 7 QUAD $0x050654203a0f4166; BYTE $0x08 // pinsrb xmm2, byte [r14 + rax + 5], 8 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] - QUAD $0x053654203a0f4166; BYTE $0x09 // pinsrb xmm2, byte [r14 + rsi + 5], 9 - QUAD $0x0000009024bc8b4c // mov r15, qword [rsp + 144] - QUAD $0x053e54203a0f4366; BYTE $0x0a // pinsrb xmm2, byte [r14 + r15 + 5], 10 - WORD $0x8949; BYTE $0xf9 // mov r9, rdi - QUAD $0x053e54203a0f4166; BYTE $0x0b // pinsrb xmm2, byte [r14 + rdi + 5], 11 - QUAD $0x050e54203a0f4166; BYTE $0x0c // pinsrb xmm2, byte [r14 + rcx + 5], 12 - QUAD $0x052654203a0f4366; BYTE $0x0d // pinsrb xmm2, byte [r14 + r12 + 5], 13 - LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] - QUAD $0x053e54203a0f4166; BYTE $0x0e // pinsrb xmm2, byte [r14 + rdi + 5], 14 - LONG $0x2444894c; BYTE $0x48 // mov qword [rsp + 72], r8 - QUAD $0x050654203a0f4366; BYTE $0x0f // pinsrb xmm2, byte [r14 + r8 + 5], 15 - QUAD $0x061644203a0f4566; BYTE $0x01 // pinsrb xmm8, byte [r14 + rdx + 6], 1 - QUAD $0x061e44203a0f4766; BYTE $0x02 // pinsrb xmm8, byte [r14 + r11 + 6], 2 + QUAD $0x00000088248c8948 // mov qword [rsp + 136], rcx + QUAD $0x050e54203a0f4166; BYTE $0x09 // pinsrb xmm2, byte [r14 + rcx + 5], 9 + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] + QUAD $0x050654203a0f4166; BYTE $0x0a // pinsrb xmm2, byte [r14 + rax + 5], 10 + QUAD $0x051654203a0f4166; BYTE $0x0b // pinsrb xmm2, byte [r14 + rdx + 5], 11 + QUAD $0x053e54203a0f4166; BYTE $0x0c // pinsrb xmm2, byte [r14 + rdi + 5], 12 WORD $0x894d; BYTE $0xeb // mov r11, r13 - QUAD $0x062e44203a0f4766; BYTE $0x03 // pinsrb xmm8, byte [r14 + r13 + 6], 3 + QUAD $0x052e54203a0f4366; BYTE $0x0d // pinsrb xmm2, byte [r14 + r13 + 5], 13 + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x050654203a0f4166; BYTE $0x0e // pinsrb xmm2, byte [r14 + rax + 5], 14 + LONG $0x246c8b4c; BYTE $0x50 // mov r13, qword [rsp + 80] + QUAD $0x052e54203a0f4366; BYTE $0x0f // pinsrb xmm2, byte [r14 + r13 + 5], 15 + QUAD $0x063644203a0f4566; BYTE $0x01 // pinsrb xmm8, byte [r14 + rsi + 6], 1 + QUAD $0x062644203a0f4766; BYTE $0x02 // pinsrb xmm8, byte [r14 + r12 + 6], 2 + QUAD $0x063e44203a0f4766; BYTE $0x03 // pinsrb xmm8, byte [r14 + r15 + 6], 3 QUAD $0x061e44203a0f4566; BYTE $0x04 // pinsrb xmm8, byte [r14 + rbx + 6], 4 - LONG $0x246c8b4c; BYTE $0x38 // mov r13, qword [rsp + 56] - QUAD $0x062e44203a0f4766; BYTE $0x05 // pinsrb xmm8, byte [r14 + r13 + 6], 5 - QUAD $0x061644203a0f4766; BYTE $0x06 // pinsrb xmm8, byte [r14 + r10 + 6], 6 - LONG $0x245c8b48; BYTE $0x68 // mov rbx, qword [rsp + 104] - QUAD $0x061e44203a0f4566; BYTE $0x07 // pinsrb xmm8, byte [r14 + rbx + 6], 7 + QUAD $0x061644203a0f4766; BYTE $0x05 // pinsrb xmm8, byte [r14 + r10 + 6], 5 + QUAD $0x060e44203a0f4766; BYTE $0x06 // pinsrb xmm8, byte [r14 + r9 + 6], 6 + QUAD $0x060644203a0f4766; BYTE $0x07 // pinsrb xmm8, byte [r14 + r8 + 6], 7 + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] QUAD $0x060644203a0f4566; BYTE $0x08 // pinsrb xmm8, byte [r14 + rax + 6], 8 - QUAD $0x063644203a0f4566; BYTE $0x09 // pinsrb xmm8, byte [r14 + rsi + 6], 9 - QUAD $0x063e44203a0f4766; BYTE $0x0a // pinsrb xmm8, byte [r14 + r15 + 6], 10 - QUAD $0x060e44203a0f4766; BYTE $0x0b // pinsrb xmm8, byte [r14 + r9 + 6], 11 - QUAD $0x060e44203a0f4566; BYTE $0x0c // pinsrb xmm8, byte [r14 + rcx + 6], 12 - QUAD $0x062644203a0f4766; BYTE $0x0d // pinsrb xmm8, byte [r14 + r12 + 6], 13 - QUAD $0x063e44203a0f4566; BYTE $0x0e // pinsrb xmm8, byte [r14 + rdi + 6], 14 - QUAD $0x060644203a0f4766; BYTE $0x0f // pinsrb xmm8, byte [r14 + r8 + 6], 15 - QUAD $0x071674203a0f4566; BYTE $0x01 // pinsrb xmm14, byte [r14 + rdx + 7], 1 - LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] - QUAD $0x071e74203a0f4566; BYTE $0x02 // pinsrb xmm14, byte [r14 + rbx + 7], 2 - WORD $0x894d; BYTE $0xd8 // mov r8, r11 - QUAD $0x071e74203a0f4766; BYTE $0x03 // pinsrb xmm14, byte [r14 + r11 + 7], 3 - LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] - QUAD $0x071674203a0f4566; BYTE $0x04 // pinsrb xmm14, byte [r14 + rdx + 7], 4 - QUAD $0x072e74203a0f4766; BYTE $0x05 // pinsrb xmm14, byte [r14 + r13 + 7], 5 - QUAD $0x0000008824948b48 // mov rdx, qword [rsp + 136] - QUAD $0x071674203a0f4566; BYTE $0x06 // pinsrb xmm14, byte [r14 + rdx + 7], 6 - LONG $0x244c8b4c; BYTE $0x68 // mov r9, qword [rsp + 104] - QUAD $0x070e74203a0f4766; BYTE $0x07 // pinsrb xmm14, byte [r14 + r9 + 7], 7 - QUAD $0x070674203a0f4566; BYTE $0x08 // pinsrb xmm14, byte [r14 + rax + 7], 8 - WORD $0x8949; BYTE $0xc5 // mov r13, rax - QUAD $0x073674203a0f4566; BYTE $0x09 // pinsrb xmm14, byte [r14 + rsi + 7], 9 + QUAD $0x060e44203a0f4566; BYTE $0x09 // pinsrb xmm8, byte [r14 + rcx + 6], 9 + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] + QUAD $0x060644203a0f4566; BYTE $0x0a // pinsrb xmm8, byte [r14 + rax + 6], 10 + QUAD $0x061644203a0f4566; BYTE $0x0b // pinsrb xmm8, byte [r14 + rdx + 6], 11 + QUAD $0x063e44203a0f4566; BYTE $0x0c // pinsrb xmm8, byte [r14 + rdi + 6], 12 + QUAD $0x061e44203a0f4766; BYTE $0x0d // pinsrb xmm8, byte [r14 + r11 + 6], 13 + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x060644203a0f4566; BYTE $0x0e // pinsrb xmm8, byte [r14 + rax + 6], 14 + QUAD $0x062e44203a0f4766; BYTE $0x0f // pinsrb xmm8, byte [r14 + r13 + 6], 15 + WORD $0x894c; BYTE $0xe8 // mov rax, r13 + QUAD $0x073674203a0f4566; BYTE $0x01 // pinsrb xmm14, byte [r14 + rsi + 7], 1 + QUAD $0x072674203a0f4766; BYTE $0x02 // pinsrb xmm14, byte [r14 + r12 + 7], 2 + QUAD $0x073e74203a0f4766; BYTE $0x03 // pinsrb xmm14, byte [r14 + r15 + 7], 3 + QUAD $0x071e74203a0f4566; BYTE $0x04 // pinsrb xmm14, byte [r14 + rbx + 7], 4 + WORD $0x8949; BYTE $0xdc // mov r12, rbx + QUAD $0x071674203a0f4766; BYTE $0x05 // pinsrb xmm14, byte [r14 + r10 + 7], 5 + QUAD $0x070e74203a0f4766; BYTE $0x06 // pinsrb xmm14, byte [r14 + r9 + 7], 6 + QUAD $0x070674203a0f4766; BYTE $0x07 // pinsrb xmm14, byte [r14 + r8 + 7], 7 + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0x246c8b4c; BYTE $0x48 // mov r13, qword [rsp + 72] + QUAD $0x072e74203a0f4766; BYTE $0x08 // pinsrb xmm14, byte [r14 + r13 + 7], 8 + QUAD $0x070e74203a0f4566; BYTE $0x09 // pinsrb xmm14, byte [r14 + rcx + 7], 9 + LONG $0x247c8b4c; BYTE $0x70 // mov r15, qword [rsp + 112] QUAD $0x073e74203a0f4766; BYTE $0x0a // pinsrb xmm14, byte [r14 + r15 + 7], 10 - LONG $0x24548b4c; BYTE $0x70 // mov r10, qword [rsp + 112] - QUAD $0x071674203a0f4766; BYTE $0x0b // pinsrb xmm14, byte [r14 + r10 + 7], 11 - QUAD $0x070e74203a0f4566; BYTE $0x0c // pinsrb xmm14, byte [r14 + rcx + 7], 12 - QUAD $0x072674203a0f4766; BYTE $0x0d // pinsrb xmm14, byte [r14 + r12 + 7], 13 - QUAD $0x073e74203a0f4566; BYTE $0x0e // pinsrb xmm14, byte [r14 + rdi + 7], 14 + QUAD $0x071674203a0f4566; BYTE $0x0b // pinsrb xmm14, byte [r14 + rdx + 7], 11 + QUAD $0x073e74203a0f4566; BYTE $0x0c // pinsrb xmm14, byte [r14 + rdi + 7], 12 + QUAD $0x071e74203a0f4766; BYTE $0x0d // pinsrb xmm14, byte [r14 + r11 + 7], 13 + LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + QUAD $0x070e74203a0f4566; BYTE $0x0e // pinsrb xmm14, byte [r14 + rcx + 7], 14 LONG $0x6f0f4166; BYTE $0xce // movdqa xmm1, xmm14 QUAD $0x00b024b46f0f4466; WORD $0x0000 // movdqa xmm14, oword [rsp + 176] LONG $0x740f4166; BYTE $0xd6 // pcmpeqb xmm2, xmm14 @@ -27990,287 +29243,292 @@ LBB5_67: QUAD $0x00000150856f0f66 // movdqa xmm0, oword 336[rbp] /* [rip + .LCPI5_21] */ LONG $0xdf0f4466; BYTE $0xc0 // pandn xmm8, xmm0 LONG $0xeb0f4466; BYTE $0xc2 // por xmm8, xmm2 - QUAD $0x0000008024bc8b4c // mov r15, qword [rsp + 128] - LONG $0x74b60f43; WORD $0x143e // movzx esi, byte [r14 + r15 + 20] + LONG $0x24448b4c; BYTE $0x38 // mov r8, qword [rsp + 56] + LONG $0x74b60f43; WORD $0x1406 // movzx esi, byte [r14 + r8 + 20] LONG $0xde6e0f66 // movd xmm3, esi - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] QUAD $0x07064c203a0f4166; BYTE $0x0f // pinsrb xmm1, byte [r14 + rax + 7], 15 LONG $0x740f4166; BYTE $0xce // pcmpeqb xmm1, xmm14 LONG $0x456f0f66; BYTE $0x60 // movdqa xmm0, oword 96[rbp] /* [rip + .LCPI5_6] */ LONG $0xc8df0f66 // pandn xmm1, xmm0 LONG $0xeb0f4166; BYTE $0xc8 // por xmm1, xmm8 - LONG $0x74b60f43; WORD $0x153e // movzx esi, byte [r14 + r15 + 21] + LONG $0x74b60f43; WORD $0x1506 // movzx esi, byte [r14 + r8 + 21] LONG $0xd66e0f66 // movd xmm2, esi - QUAD $0x00010024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 256] + QUAD $0x0000f024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 240] LONG $0x245c8b4c; BYTE $0x10 // mov r11, qword [rsp + 16] QUAD $0x081e44203a0f4366; BYTE $0x01 // pinsrb xmm0, byte [r14 + r11 + 8], 1 + LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] QUAD $0x081e44203a0f4166; BYTE $0x02 // pinsrb xmm0, byte [r14 + rbx + 8], 2 - QUAD $0x080644203a0f4366; BYTE $0x03 // pinsrb xmm0, byte [r14 + r8 + 8], 3 - LONG $0x244c8b48; BYTE $0x18 // mov rcx, qword [rsp + 24] - QUAD $0x080e44203a0f4166; BYTE $0x04 // pinsrb xmm0, byte [r14 + rcx + 8], 4 - LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] - QUAD $0x083644203a0f4166; BYTE $0x05 // pinsrb xmm0, byte [r14 + rsi + 8], 5 - QUAD $0x081644203a0f4166; BYTE $0x06 // pinsrb xmm0, byte [r14 + rdx + 8], 6 + LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] + QUAD $0x083e44203a0f4166; BYTE $0x03 // pinsrb xmm0, byte [r14 + rdi + 8], 3 + QUAD $0x082644203a0f4366; BYTE $0x04 // pinsrb xmm0, byte [r14 + r12 + 8], 4 + WORD $0x894c; BYTE $0xe2 // mov rdx, r12 + QUAD $0x081644203a0f4366; BYTE $0x05 // pinsrb xmm0, byte [r14 + r10 + 8], 5 + QUAD $0x0000009024b48b48 // mov rsi, qword [rsp + 144] + QUAD $0x083644203a0f4166; BYTE $0x06 // pinsrb xmm0, byte [r14 + rsi + 8], 6 QUAD $0x080e44203a0f4366; BYTE $0x07 // pinsrb xmm0, byte [r14 + r9 + 8], 7 QUAD $0x082e44203a0f4366; BYTE $0x08 // pinsrb xmm0, byte [r14 + r13 + 8], 8 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] QUAD $0x083644203a0f4166; BYTE $0x09 // pinsrb xmm0, byte [r14 + rsi + 8], 9 - QUAD $0x0000009024a48b4c // mov r12, qword [rsp + 144] - QUAD $0x082644203a0f4366; BYTE $0x0a // pinsrb xmm0, byte [r14 + r12 + 8], 10 - QUAD $0x081644203a0f4366; BYTE $0x0b // pinsrb xmm0, byte [r14 + r10 + 8], 11 - LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] - QUAD $0x083644203a0f4166; BYTE $0x0c // pinsrb xmm0, byte [r14 + rsi + 8], 12 - LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] - QUAD $0x081e44203a0f4166; BYTE $0x0d // pinsrb xmm0, byte [r14 + rbx + 8], 13 - QUAD $0x083e44203a0f4166; BYTE $0x0e // pinsrb xmm0, byte [r14 + rdi + 8], 14 + QUAD $0x083e44203a0f4366; BYTE $0x0a // pinsrb xmm0, byte [r14 + r15 + 8], 10 + QUAD $0x00000098248c8b4c // mov r9, qword [rsp + 152] + QUAD $0x080e44203a0f4366; BYTE $0x0b // pinsrb xmm0, byte [r14 + r9 + 8], 11 + LONG $0x24648b4c; BYTE $0x60 // mov r12, qword [rsp + 96] + QUAD $0x082644203a0f4366; BYTE $0x0c // pinsrb xmm0, byte [r14 + r12 + 8], 12 + LONG $0x24748b48; BYTE $0x18 // mov rsi, qword [rsp + 24] + QUAD $0x083644203a0f4166; BYTE $0x0d // pinsrb xmm0, byte [r14 + rsi + 8], 13 + QUAD $0x080e44203a0f4166; BYTE $0x0e // pinsrb xmm0, byte [r14 + rcx + 8], 14 QUAD $0x080644203a0f4166; BYTE $0x0f // pinsrb xmm0, byte [r14 + rax + 8], 15 LONG $0xeb0f4166; BYTE $0xc9 // por xmm1, xmm9 - QUAD $0x000100248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 256], xmm1 - LONG $0x74b60f43; WORD $0x163e // movzx esi, byte [r14 + r15 + 22] + QUAD $0x0000f0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 240], xmm1 + LONG $0x74b60f43; WORD $0x1606 // movzx esi, byte [r14 + r8 + 22] LONG $0xce6e0f66 // movd xmm1, esi LONG $0x740f4166; BYTE $0xc6 // pcmpeqb xmm0, xmm14 QUAD $0x091e5c203a0f4766; BYTE $0x01 // pinsrb xmm11, byte [r14 + r11 + 9], 1 - WORD $0x894d; BYTE $0xdf // mov r15, r11 - LONG $0x24548b4c; BYTE $0x20 // mov r10, qword [rsp + 32] - QUAD $0x09165c203a0f4766; BYTE $0x02 // pinsrb xmm11, byte [r14 + r10 + 9], 2 - QUAD $0x09065c203a0f4766; BYTE $0x03 // pinsrb xmm11, byte [r14 + r8 + 9], 3 - WORD $0x894d; BYTE $0xc5 // mov r13, r8 - QUAD $0x090e5c203a0f4566; BYTE $0x04 // pinsrb xmm11, byte [r14 + rcx + 9], 4 - LONG $0x244c8b4c; BYTE $0x38 // mov r9, qword [rsp + 56] - QUAD $0x090e5c203a0f4766; BYTE $0x05 // pinsrb xmm11, byte [r14 + r9 + 9], 5 - QUAD $0x09165c203a0f4566; BYTE $0x06 // pinsrb xmm11, byte [r14 + rdx + 9], 6 - LONG $0x245c8b4c; BYTE $0x68 // mov r11, qword [rsp + 104] - QUAD $0x091e5c203a0f4766; BYTE $0x07 // pinsrb xmm11, byte [r14 + r11 + 9], 7 - QUAD $0x0000009824b48b48 // mov rsi, qword [rsp + 152] - QUAD $0x09365c203a0f4566; BYTE $0x08 // pinsrb xmm11, byte [r14 + rsi + 9], 8 - LONG $0x24448b4c; BYTE $0x60 // mov r8, qword [rsp + 96] - QUAD $0x09065c203a0f4766; BYTE $0x09 // pinsrb xmm11, byte [r14 + r8 + 9], 9 - QUAD $0x09265c203a0f4766; BYTE $0x0a // pinsrb xmm11, byte [r14 + r12 + 9], 10 - LONG $0x24548b48; BYTE $0x70 // mov rdx, qword [rsp + 112] - QUAD $0x09165c203a0f4566; BYTE $0x0b // pinsrb xmm11, byte [r14 + rdx + 9], 11 - LONG $0x247c8b48; BYTE $0x78 // mov rdi, qword [rsp + 120] - QUAD $0x093e5c203a0f4566; BYTE $0x0c // pinsrb xmm11, byte [r14 + rdi + 9], 12 + WORD $0x894d; BYTE $0xda // mov r10, r11 + QUAD $0x091e5c203a0f4566; BYTE $0x02 // pinsrb xmm11, byte [r14 + rbx + 9], 2 + WORD $0x8948; BYTE $0xf8 // mov rax, rdi + QUAD $0x093e5c203a0f4566; BYTE $0x03 // pinsrb xmm11, byte [r14 + rdi + 9], 3 + QUAD $0x09165c203a0f4566; BYTE $0x04 // pinsrb xmm11, byte [r14 + rdx + 9], 4 + QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] + QUAD $0x090e5c203a0f4566; BYTE $0x05 // pinsrb xmm11, byte [r14 + rcx + 9], 5 + QUAD $0x00000090249c8b4c // mov r11, qword [rsp + 144] + QUAD $0x091e5c203a0f4766; BYTE $0x06 // pinsrb xmm11, byte [r14 + r11 + 9], 6 + LONG $0x24748b48; BYTE $0x58 // mov rsi, qword [rsp + 88] + QUAD $0x09365c203a0f4566; BYTE $0x07 // pinsrb xmm11, byte [r14 + rsi + 9], 7 + QUAD $0x092e5c203a0f4766; BYTE $0x08 // pinsrb xmm11, byte [r14 + r13 + 9], 8 + QUAD $0x00000088248c8b48 // mov rcx, qword [rsp + 136] + QUAD $0x090e5c203a0f4566; BYTE $0x09 // pinsrb xmm11, byte [r14 + rcx + 9], 9 + QUAD $0x093e5c203a0f4766; BYTE $0x0a // pinsrb xmm11, byte [r14 + r15 + 9], 10 + WORD $0x894c; BYTE $0xca // mov rdx, r9 + QUAD $0x090e5c203a0f4766; BYTE $0x0b // pinsrb xmm11, byte [r14 + r9 + 9], 11 + WORD $0x894c; BYTE $0xe7 // mov rdi, r12 + QUAD $0x09265c203a0f4766; BYTE $0x0c // pinsrb xmm11, byte [r14 + r12 + 9], 12 + LONG $0x245c8b48; BYTE $0x18 // mov rbx, qword [rsp + 24] QUAD $0x091e5c203a0f4566; BYTE $0x0d // pinsrb xmm11, byte [r14 + rbx + 9], 13 - LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] - QUAD $0x09065c203a0f4566; BYTE $0x0e // pinsrb xmm11, byte [r14 + rax + 9], 14 - LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] - QUAD $0x090e5c203a0f4566; BYTE $0x0f // pinsrb xmm11, byte [r14 + rcx + 9], 15 - QUAD $0x0a3e64203a0f4766; BYTE $0x01 // pinsrb xmm12, byte [r14 + r15 + 10], 1 + LONG $0x24448b4c; BYTE $0x20 // mov r8, qword [rsp + 32] + QUAD $0x09065c203a0f4766; BYTE $0x0e // pinsrb xmm11, byte [r14 + r8 + 9], 14 + LONG $0x244c8b4c; BYTE $0x50 // mov r9, qword [rsp + 80] + QUAD $0x090e5c203a0f4766; BYTE $0x0f // pinsrb xmm11, byte [r14 + r9 + 9], 15 + QUAD $0x0a1664203a0f4766; BYTE $0x01 // pinsrb xmm12, byte [r14 + r10 + 10], 1 + LONG $0x24548b4c; BYTE $0x30 // mov r10, qword [rsp + 48] QUAD $0x0a1664203a0f4766; BYTE $0x02 // pinsrb xmm12, byte [r14 + r10 + 10], 2 - QUAD $0x0a2e64203a0f4766; BYTE $0x03 // pinsrb xmm12, byte [r14 + r13 + 10], 3 - LONG $0x24548b4c; BYTE $0x18 // mov r10, qword [rsp + 24] - QUAD $0x0a1664203a0f4766; BYTE $0x04 // pinsrb xmm12, byte [r14 + r10 + 10], 4 - QUAD $0x0a0e64203a0f4766; BYTE $0x05 // pinsrb xmm12, byte [r14 + r9 + 10], 5 - QUAD $0x00000088248c8b4c // mov r9, qword [rsp + 136] - QUAD $0x0a0e64203a0f4766; BYTE $0x06 // pinsrb xmm12, byte [r14 + r9 + 10], 6 - QUAD $0x0a1e64203a0f4766; BYTE $0x07 // pinsrb xmm12, byte [r14 + r11 + 10], 7 - QUAD $0x0a3664203a0f4566; BYTE $0x08 // pinsrb xmm12, byte [r14 + rsi + 10], 8 - QUAD $0x0a0664203a0f4766; BYTE $0x09 // pinsrb xmm12, byte [r14 + r8 + 10], 9 - QUAD $0x0a2664203a0f4766; BYTE $0x0a // pinsrb xmm12, byte [r14 + r12 + 10], 10 + QUAD $0x0a0664203a0f4566; BYTE $0x03 // pinsrb xmm12, byte [r14 + rax + 10], 3 + LONG $0x24648b4c; BYTE $0x78 // mov r12, qword [rsp + 120] + QUAD $0x0a2664203a0f4766; BYTE $0x04 // pinsrb xmm12, byte [r14 + r12 + 10], 4 + QUAD $0x00000080249c8b48 // mov rbx, qword [rsp + 128] + QUAD $0x0a1e64203a0f4566; BYTE $0x05 // pinsrb xmm12, byte [r14 + rbx + 10], 5 + QUAD $0x0a1e64203a0f4766; BYTE $0x06 // pinsrb xmm12, byte [r14 + r11 + 10], 6 + QUAD $0x0a3664203a0f4566; BYTE $0x07 // pinsrb xmm12, byte [r14 + rsi + 10], 7 + QUAD $0x0a2e64203a0f4766; BYTE $0x08 // pinsrb xmm12, byte [r14 + r13 + 10], 8 + QUAD $0x0a0e64203a0f4566; BYTE $0x09 // pinsrb xmm12, byte [r14 + rcx + 10], 9 + QUAD $0x0a3e64203a0f4766; BYTE $0x0a // pinsrb xmm12, byte [r14 + r15 + 10], 10 QUAD $0x0a1664203a0f4566; BYTE $0x0b // pinsrb xmm12, byte [r14 + rdx + 10], 11 QUAD $0x0a3e64203a0f4566; BYTE $0x0c // pinsrb xmm12, byte [r14 + rdi + 10], 12 + LONG $0x245c8b48; BYTE $0x18 // mov rbx, qword [rsp + 24] QUAD $0x0a1e64203a0f4566; BYTE $0x0d // pinsrb xmm12, byte [r14 + rbx + 10], 13 - QUAD $0x0a0664203a0f4566; BYTE $0x0e // pinsrb xmm12, byte [r14 + rax + 10], 14 - WORD $0x8948; BYTE $0xc3 // mov rbx, rax - QUAD $0x0a0e64203a0f4566; BYTE $0x0f // pinsrb xmm12, byte [r14 + rcx + 10], 15 - QUAD $0x0b3e6c203a0f4766; BYTE $0x01 // pinsrb xmm13, byte [r14 + r15 + 11], 1 - LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] - QUAD $0x0b2e6c203a0f4766; BYTE $0x02 // pinsrb xmm13, byte [r14 + r13 + 11], 2 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0a0664203a0f4766; BYTE $0x0e // pinsrb xmm12, byte [r14 + r8 + 10], 14 + QUAD $0x0a0e64203a0f4766; BYTE $0x0f // pinsrb xmm12, byte [r14 + r9 + 10], 15 + LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] + QUAD $0x0b1e6c203a0f4566; BYTE $0x01 // pinsrb xmm13, byte [r14 + rbx + 11], 1 + QUAD $0x0b166c203a0f4766; BYTE $0x02 // pinsrb xmm13, byte [r14 + r10 + 11], 2 + WORD $0x894d; BYTE $0xd4 // mov r12, r10 QUAD $0x0b066c203a0f4566; BYTE $0x03 // pinsrb xmm13, byte [r14 + rax + 11], 3 + LONG $0x24548b4c; BYTE $0x78 // mov r10, qword [rsp + 120] QUAD $0x0b166c203a0f4766; BYTE $0x04 // pinsrb xmm13, byte [r14 + r10 + 11], 4 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x0b066c203a0f4566; BYTE $0x05 // pinsrb xmm13, byte [r14 + rax + 11], 5 - QUAD $0x0b0e6c203a0f4766; BYTE $0x06 // pinsrb xmm13, byte [r14 + r9 + 11], 6 - QUAD $0x0b1e6c203a0f4766; BYTE $0x07 // pinsrb xmm13, byte [r14 + r11 + 11], 7 - QUAD $0x0b366c203a0f4566; BYTE $0x08 // pinsrb xmm13, byte [r14 + rsi + 11], 8 - QUAD $0x0b066c203a0f4766; BYTE $0x09 // pinsrb xmm13, byte [r14 + r8 + 11], 9 - WORD $0x894c; BYTE $0xc0 // mov rax, r8 - QUAD $0x0b266c203a0f4766; BYTE $0x0a // pinsrb xmm13, byte [r14 + r12 + 11], 10 + QUAD $0x0b1e6c203a0f4766; BYTE $0x06 // pinsrb xmm13, byte [r14 + r11 + 11], 6 + QUAD $0x0b366c203a0f4566; BYTE $0x07 // pinsrb xmm13, byte [r14 + rsi + 11], 7 + QUAD $0x0b2e6c203a0f4766; BYTE $0x08 // pinsrb xmm13, byte [r14 + r13 + 11], 8 + QUAD $0x0b0e6c203a0f4566; BYTE $0x09 // pinsrb xmm13, byte [r14 + rcx + 11], 9 + QUAD $0x0b3e6c203a0f4766; BYTE $0x0a // pinsrb xmm13, byte [r14 + r15 + 11], 10 + WORD $0x894c; BYTE $0xf9 // mov rcx, r15 QUAD $0x0b166c203a0f4566; BYTE $0x0b // pinsrb xmm13, byte [r14 + rdx + 11], 11 QUAD $0x0b3e6c203a0f4566; BYTE $0x0c // pinsrb xmm13, byte [r14 + rdi + 11], 12 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] - QUAD $0x0b366c203a0f4566; BYTE $0x0d // pinsrb xmm13, byte [r14 + rsi + 11], 13 - QUAD $0x0b1e6c203a0f4566; BYTE $0x0e // pinsrb xmm13, byte [r14 + rbx + 11], 14 - QUAD $0x0b0e6c203a0f4566; BYTE $0x0f // pinsrb xmm13, byte [r14 + rcx + 11], 15 + LONG $0x246c8b4c; BYTE $0x18 // mov r13, qword [rsp + 24] + QUAD $0x0b2e6c203a0f4766; BYTE $0x0d // pinsrb xmm13, byte [r14 + r13 + 11], 13 + QUAD $0x0b066c203a0f4766; BYTE $0x0e // pinsrb xmm13, byte [r14 + r8 + 11], 14 + QUAD $0x0b0e6c203a0f4766; BYTE $0x0f // pinsrb xmm13, byte [r14 + r9 + 11], 15 LONG $0x740f4566; BYTE $0xde // pcmpeqb xmm11, xmm14 QUAD $0x0001009ddf0f4466; BYTE $0x00 // pandn xmm11, oword 256[rbp] /* [rip + .LCPI5_16] */ LONG $0xfc0f4466; BYTE $0xd8 // paddb xmm11, xmm0 - QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] - LONG $0x74b60f41; WORD $0x170e // movzx esi, byte [r14 + rcx + 23] + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + LONG $0x74b60f41; WORD $0x1706 // movzx esi, byte [r14 + rax + 23] LONG $0x6e0f4466; BYTE $0xc6 // movd xmm8, esi LONG $0x740f4566; BYTE $0xe6 // pcmpeqb xmm12, xmm14 QUAD $0x000110a5df0f4466; BYTE $0x00 // pandn xmm12, oword 272[rbp] /* [rip + .LCPI5_17] */ LONG $0x740f4566; BYTE $0xee // pcmpeqb xmm13, xmm14 QUAD $0x000120addf0f4466; BYTE $0x00 // pandn xmm13, oword 288[rbp] /* [rip + .LCPI5_18] */ LONG $0xeb0f4566; BYTE $0xec // por xmm13, xmm12 - LONG $0x74b60f41; WORD $0x180e // movzx esi, byte [r14 + rcx + 24] + LONG $0x74b60f41; WORD $0x1806 // movzx esi, byte [r14 + rax + 24] LONG $0x6e0f4466; BYTE $0xe6 // movd xmm12, esi - QUAD $0x00e0248c6f0f4466; WORD $0x0000 // movdqa xmm9, oword [rsp + 224] - QUAD $0x0c3e4c203a0f4766; BYTE $0x01 // pinsrb xmm9, byte [r14 + r15 + 12], 1 - LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] - QUAD $0x0c2e4c203a0f4766; BYTE $0x02 // pinsrb xmm9, byte [r14 + r13 + 12], 2 - LONG $0x247c8b4c; BYTE $0x50 // mov r15, qword [rsp + 80] + QUAD $0x00d0248c6f0f4466; WORD $0x0000 // movdqa xmm9, oword [rsp + 208] + QUAD $0x0c1e4c203a0f4566; BYTE $0x01 // pinsrb xmm9, byte [r14 + rbx + 12], 1 + QUAD $0x0c264c203a0f4766; BYTE $0x02 // pinsrb xmm9, byte [r14 + r12 + 12], 2 + LONG $0x247c8b4c; BYTE $0x28 // mov r15, qword [rsp + 40] QUAD $0x0c3e4c203a0f4766; BYTE $0x03 // pinsrb xmm9, byte [r14 + r15 + 12], 3 - LONG $0x245c8b48; BYTE $0x18 // mov rbx, qword [rsp + 24] - QUAD $0x0c1e4c203a0f4566; BYTE $0x04 // pinsrb xmm9, byte [r14 + rbx + 12], 4 - LONG $0x24548b4c; BYTE $0x38 // mov r10, qword [rsp + 56] + WORD $0x894c; BYTE $0xd3 // mov rbx, r10 + QUAD $0x0c164c203a0f4766; BYTE $0x04 // pinsrb xmm9, byte [r14 + r10 + 12], 4 + QUAD $0x0000008024948b4c // mov r10, qword [rsp + 128] QUAD $0x0c164c203a0f4766; BYTE $0x05 // pinsrb xmm9, byte [r14 + r10 + 12], 5 - QUAD $0x0c0e4c203a0f4766; BYTE $0x06 // pinsrb xmm9, byte [r14 + r9 + 12], 6 - WORD $0x894d; BYTE $0xd8 // mov r8, r11 + WORD $0x894d; BYTE $0xd9 // mov r9, r11 + QUAD $0x0c1e4c203a0f4766; BYTE $0x06 // pinsrb xmm9, byte [r14 + r11 + 12], 6 + LONG $0x245c8b4c; BYTE $0x58 // mov r11, qword [rsp + 88] QUAD $0x0c1e4c203a0f4766; BYTE $0x07 // pinsrb xmm9, byte [r14 + r11 + 12], 7 - QUAD $0x00000098249c8b4c // mov r11, qword [rsp + 152] - QUAD $0x0c1e4c203a0f4766; BYTE $0x08 // pinsrb xmm9, byte [r14 + r11 + 12], 8 - WORD $0x8949; BYTE $0xc4 // mov r12, rax - QUAD $0x0c064c203a0f4566; BYTE $0x09 // pinsrb xmm9, byte [r14 + rax + 12], 9 - QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] + LONG $0x24448b4c; BYTE $0x48 // mov r8, qword [rsp + 72] + QUAD $0x0c064c203a0f4766; BYTE $0x08 // pinsrb xmm9, byte [r14 + r8 + 12], 8 + QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] + QUAD $0x0c364c203a0f4566; BYTE $0x09 // pinsrb xmm9, byte [r14 + rsi + 12], 9 QUAD $0x0c0e4c203a0f4566; BYTE $0x0a // pinsrb xmm9, byte [r14 + rcx + 12], 10 QUAD $0x0c164c203a0f4566; BYTE $0x0b // pinsrb xmm9, byte [r14 + rdx + 12], 11 QUAD $0x0c3e4c203a0f4566; BYTE $0x0c // pinsrb xmm9, byte [r14 + rdi + 12], 12 - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] - QUAD $0x0c364c203a0f4566; BYTE $0x0d // pinsrb xmm9, byte [r14 + rsi + 12], 13 - LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x0c2e4c203a0f4766; BYTE $0x0d // pinsrb xmm9, byte [r14 + r13 + 12], 13 + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0c064c203a0f4566; BYTE $0x0e // pinsrb xmm9, byte [r14 + rax + 12], 14 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] QUAD $0x0c064c203a0f4566; BYTE $0x0f // pinsrb xmm9, byte [r14 + rax + 12], 15 LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] QUAD $0x0d0674203a0f4166; BYTE $0x01 // pinsrb xmm6, byte [r14 + rax + 13], 1 - QUAD $0x0d2e74203a0f4366; BYTE $0x02 // pinsrb xmm6, byte [r14 + r13 + 13], 2 + QUAD $0x0d2674203a0f4366; BYTE $0x02 // pinsrb xmm6, byte [r14 + r12 + 13], 2 QUAD $0x0d3e74203a0f4366; BYTE $0x03 // pinsrb xmm6, byte [r14 + r15 + 13], 3 QUAD $0x0d1e74203a0f4166; BYTE $0x04 // pinsrb xmm6, byte [r14 + rbx + 13], 4 QUAD $0x0d1674203a0f4366; BYTE $0x05 // pinsrb xmm6, byte [r14 + r10 + 13], 5 QUAD $0x0d0e74203a0f4366; BYTE $0x06 // pinsrb xmm6, byte [r14 + r9 + 13], 6 - QUAD $0x0d0674203a0f4366; BYTE $0x07 // pinsrb xmm6, byte [r14 + r8 + 13], 7 - QUAD $0x0d1e74203a0f4366; BYTE $0x08 // pinsrb xmm6, byte [r14 + r11 + 13], 8 - QUAD $0x0d2674203a0f4366; BYTE $0x09 // pinsrb xmm6, byte [r14 + r12 + 13], 9 + QUAD $0x0d1e74203a0f4366; BYTE $0x07 // pinsrb xmm6, byte [r14 + r11 + 13], 7 + QUAD $0x0d0674203a0f4366; BYTE $0x08 // pinsrb xmm6, byte [r14 + r8 + 13], 8 + QUAD $0x0d3674203a0f4166; BYTE $0x09 // pinsrb xmm6, byte [r14 + rsi + 13], 9 QUAD $0x0d0e74203a0f4166; BYTE $0x0a // pinsrb xmm6, byte [r14 + rcx + 13], 10 QUAD $0x0d1674203a0f4166; BYTE $0x0b // pinsrb xmm6, byte [r14 + rdx + 13], 11 QUAD $0x0d3e74203a0f4166; BYTE $0x0c // pinsrb xmm6, byte [r14 + rdi + 13], 12 - QUAD $0x0d3674203a0f4166; BYTE $0x0d // pinsrb xmm6, byte [r14 + rsi + 13], 13 - LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] - QUAD $0x0d0674203a0f4166; BYTE $0x0e // pinsrb xmm6, byte [r14 + rax + 13], 14 - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0d2e74203a0f4366; BYTE $0x0d // pinsrb xmm6, byte [r14 + r13 + 13], 13 + LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] + QUAD $0x0d2e74203a0f4366; BYTE $0x0e // pinsrb xmm6, byte [r14 + r13 + 13], 14 + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] QUAD $0x0d0674203a0f4166; BYTE $0x0f // pinsrb xmm6, byte [r14 + rax + 13], 15 LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] QUAD $0x0e067c203a0f4566; BYTE $0x01 // pinsrb xmm15, byte [r14 + rax + 14], 1 - QUAD $0x0e2e7c203a0f4766; BYTE $0x02 // pinsrb xmm15, byte [r14 + r13 + 14], 2 + QUAD $0x0e267c203a0f4766; BYTE $0x02 // pinsrb xmm15, byte [r14 + r12 + 14], 2 QUAD $0x0e3e7c203a0f4766; BYTE $0x03 // pinsrb xmm15, byte [r14 + r15 + 14], 3 QUAD $0x0e1e7c203a0f4566; BYTE $0x04 // pinsrb xmm15, byte [r14 + rbx + 14], 4 QUAD $0x0e167c203a0f4766; BYTE $0x05 // pinsrb xmm15, byte [r14 + r10 + 14], 5 - WORD $0x894c; BYTE $0xd3 // mov rbx, r10 + WORD $0x894d; BYTE $0xd4 // mov r12, r10 QUAD $0x0e0e7c203a0f4766; BYTE $0x06 // pinsrb xmm15, byte [r14 + r9 + 14], 6 - QUAD $0x0e067c203a0f4766; BYTE $0x07 // pinsrb xmm15, byte [r14 + r8 + 14], 7 - QUAD $0x0e1e7c203a0f4766; BYTE $0x08 // pinsrb xmm15, byte [r14 + r11 + 14], 8 - QUAD $0x0e267c203a0f4766; BYTE $0x09 // pinsrb xmm15, byte [r14 + r12 + 14], 9 + WORD $0x894d; BYTE $0xca // mov r10, r9 + QUAD $0x0e1e7c203a0f4766; BYTE $0x07 // pinsrb xmm15, byte [r14 + r11 + 14], 7 + WORD $0x894d; BYTE $0xd9 // mov r9, r11 + QUAD $0x0e067c203a0f4766; BYTE $0x08 // pinsrb xmm15, byte [r14 + r8 + 14], 8 + QUAD $0x0e367c203a0f4566; BYTE $0x09 // pinsrb xmm15, byte [r14 + rsi + 14], 9 QUAD $0x0e0e7c203a0f4566; BYTE $0x0a // pinsrb xmm15, byte [r14 + rcx + 14], 10 - WORD $0x8949; BYTE $0xcc // mov r12, rcx + WORD $0x8949; BYTE $0xcb // mov r11, rcx QUAD $0x0e167c203a0f4566; BYTE $0x0b // pinsrb xmm15, byte [r14 + rdx + 14], 11 - WORD $0x8949; BYTE $0xd2 // mov r10, rdx QUAD $0x0e3e7c203a0f4566; BYTE $0x0c // pinsrb xmm15, byte [r14 + rdi + 14], 12 - QUAD $0x0e367c203a0f4566; BYTE $0x0d // pinsrb xmm15, byte [r14 + rsi + 14], 13 - LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] - QUAD $0x0e067c203a0f4566; BYTE $0x0e // pinsrb xmm15, byte [r14 + rax + 14], 14 + WORD $0x8948; BYTE $0xfa // mov rdx, rdi + LONG $0x245c8b48; BYTE $0x18 // mov rbx, qword [rsp + 24] + QUAD $0x0e1e7c203a0f4566; BYTE $0x0d // pinsrb xmm15, byte [r14 + rbx + 14], 13 + QUAD $0x0e2e7c203a0f4766; BYTE $0x0e // pinsrb xmm15, byte [r14 + r13 + 14], 14 LONG $0x740f4566; BYTE $0xce // pcmpeqb xmm9, xmm14 QUAD $0x0001308ddf0f4466; BYTE $0x00 // pandn xmm9, oword 304[rbp] /* [rip + .LCPI5_19] */ LONG $0xeb0f4566; BYTE $0xcd // por xmm9, xmm13 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] - LONG $0x74b60f41; WORD $0x1906 // movzx esi, byte [r14 + rax + 25] + LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] + LONG $0x74b60f41; WORD $0x190e // movzx esi, byte [r14 + rcx + 25] LONG $0x6e0f4466; BYTE $0xee // movd xmm13, esi QUAD $0x0001609df80f4466; BYTE $0x00 // psubb xmm11, oword 352[rbp] /* [rip + .LCPI5_22] */ LONG $0xeb0f4566; BYTE $0xcb // por xmm9, xmm11 - LONG $0x74b60f41; WORD $0x1a06 // movzx esi, byte [r14 + rax + 26] + LONG $0x74b60f41; WORD $0x1a0e // movzx esi, byte [r14 + rcx + 26] LONG $0xc66e0f66 // movd xmm0, esi - LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] - QUAD $0x0e0e7c203a0f4566; BYTE $0x0f // pinsrb xmm15, byte [r14 + rcx + 14], 15 + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0e067c203a0f4566; BYTE $0x0f // pinsrb xmm15, byte [r14 + rax + 14], 15 LONG $0x740f4166; BYTE $0xf6 // pcmpeqb xmm6, xmm14 QUAD $0x00000140b5df0f66 // pandn xmm6, oword 320[rbp] /* [rip + .LCPI5_20] */ LONG $0x740f4566; BYTE $0xfe // pcmpeqb xmm15, xmm14 QUAD $0x000150bddf0f4466; BYTE $0x00 // pandn xmm15, oword 336[rbp] /* [rip + .LCPI5_21] */ LONG $0xeb0f4466; BYTE $0xfe // por xmm15, xmm6 - LONG $0x74b60f41; WORD $0x1b06 // movzx esi, byte [r14 + rax + 27] + LONG $0x74b60f41; WORD $0x1b0e // movzx esi, byte [r14 + rcx + 27] LONG $0x6e0f4466; BYTE $0xde // movd xmm11, esi QUAD $0x0000c024b46f0f66; BYTE $0x00 // movdqa xmm6, oword [rsp + 192] - LONG $0x247c8b48; BYTE $0x10 // mov rdi, qword [rsp + 16] - QUAD $0x0f3e74203a0f4166; BYTE $0x01 // pinsrb xmm6, byte [r14 + rdi + 15], 1 - WORD $0x894c; BYTE $0xea // mov rdx, r13 - QUAD $0x0f2e74203a0f4366; BYTE $0x02 // pinsrb xmm6, byte [r14 + r13 + 15], 2 - QUAD $0x0f3e74203a0f4366; BYTE $0x03 // pinsrb xmm6, byte [r14 + r15 + 15], 3 - LONG $0x244c8b4c; BYTE $0x18 // mov r9, qword [rsp + 24] - QUAD $0x0f0e74203a0f4366; BYTE $0x04 // pinsrb xmm6, byte [r14 + r9 + 15], 4 - QUAD $0x0f1e74203a0f4166; BYTE $0x05 // pinsrb xmm6, byte [r14 + rbx + 15], 5 - QUAD $0x00000088249c8b48 // mov rbx, qword [rsp + 136] - QUAD $0x0f1e74203a0f4166; BYTE $0x06 // pinsrb xmm6, byte [r14 + rbx + 15], 6 - QUAD $0x0f0674203a0f4366; BYTE $0x07 // pinsrb xmm6, byte [r14 + r8 + 15], 7 - QUAD $0x0f1e74203a0f4366; BYTE $0x08 // pinsrb xmm6, byte [r14 + r11 + 15], 8 - LONG $0x24448b4c; BYTE $0x60 // mov r8, qword [rsp + 96] - QUAD $0x0f0674203a0f4366; BYTE $0x09 // pinsrb xmm6, byte [r14 + r8 + 15], 9 - QUAD $0x0f2674203a0f4366; BYTE $0x0a // pinsrb xmm6, byte [r14 + r12 + 15], 10 + LONG $0x247c8b4c; BYTE $0x10 // mov r15, qword [rsp + 16] + QUAD $0x0f3e74203a0f4366; BYTE $0x01 // pinsrb xmm6, byte [r14 + r15 + 15], 1 + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] + QUAD $0x0f0e74203a0f4166; BYTE $0x02 // pinsrb xmm6, byte [r14 + rcx + 15], 2 + LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] + QUAD $0x0f3e74203a0f4166; BYTE $0x03 // pinsrb xmm6, byte [r14 + rdi + 15], 3 + LONG $0x24448b4c; BYTE $0x78 // mov r8, qword [rsp + 120] + QUAD $0x0f0674203a0f4366; BYTE $0x04 // pinsrb xmm6, byte [r14 + r8 + 15], 4 + QUAD $0x0f2674203a0f4366; BYTE $0x05 // pinsrb xmm6, byte [r14 + r12 + 15], 5 + WORD $0x894c; BYTE $0xd1 // mov rcx, r10 + QUAD $0x0f1674203a0f4366; BYTE $0x06 // pinsrb xmm6, byte [r14 + r10 + 15], 6 + QUAD $0x0f0e74203a0f4366; BYTE $0x07 // pinsrb xmm6, byte [r14 + r9 + 15], 7 + LONG $0x24748b48; BYTE $0x48 // mov rsi, qword [rsp + 72] + QUAD $0x0f3674203a0f4166; BYTE $0x08 // pinsrb xmm6, byte [r14 + rsi + 15], 8 + QUAD $0x00000088248c8b4c // mov r9, qword [rsp + 136] + QUAD $0x0f0e74203a0f4366; BYTE $0x09 // pinsrb xmm6, byte [r14 + r9 + 15], 9 + QUAD $0x0f1e74203a0f4366; BYTE $0x0a // pinsrb xmm6, byte [r14 + r11 + 15], 10 + QUAD $0x0000009824948b4c // mov r10, qword [rsp + 152] QUAD $0x0f1674203a0f4366; BYTE $0x0b // pinsrb xmm6, byte [r14 + r10 + 15], 11 - WORD $0x894d; BYTE $0xd7 // mov r15, r10 - LONG $0x24548b4c; BYTE $0x78 // mov r10, qword [rsp + 120] - QUAD $0x0f1674203a0f4366; BYTE $0x0c // pinsrb xmm6, byte [r14 + r10 + 15], 12 - LONG $0x246c8b4c; BYTE $0x30 // mov r13, qword [rsp + 48] - QUAD $0x0f2e74203a0f4366; BYTE $0x0d // pinsrb xmm6, byte [r14 + r13 + 15], 13 - LONG $0x24748b48; BYTE $0x40 // mov rsi, qword [rsp + 64] - QUAD $0x0f3674203a0f4166; BYTE $0x0e // pinsrb xmm6, byte [r14 + rsi + 15], 14 - QUAD $0x0f0e74203a0f4166; BYTE $0x0f // pinsrb xmm6, byte [r14 + rcx + 15], 15 + QUAD $0x0f1674203a0f4166; BYTE $0x0c // pinsrb xmm6, byte [r14 + rdx + 15], 12 + QUAD $0x0f1e74203a0f4166; BYTE $0x0d // pinsrb xmm6, byte [r14 + rbx + 15], 13 + QUAD $0x0f2e74203a0f4366; BYTE $0x0e // pinsrb xmm6, byte [r14 + r13 + 15], 14 + QUAD $0x0f0674203a0f4166; BYTE $0x0f // pinsrb xmm6, byte [r14 + rax + 15], 15 LONG $0x740f4166; BYTE $0xf6 // pcmpeqb xmm6, xmm14 LONG $0x75df0f66; BYTE $0x60 // pandn xmm6, oword 96[rbp] /* [rip + .LCPI5_6] */ LONG $0xeb0f4166; BYTE $0xf7 // por xmm6, xmm15 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] LONG $0x74b60f41; WORD $0x1c06 // movzx esi, byte [r14 + rax + 28] LONG $0x6e0f4466; BYTE $0xfe // movd xmm15, esi LONG $0xeb0f4166; BYTE $0xf1 // por xmm6, xmm9 QUAD $0x0000c024b47f0f66; BYTE $0x00 // movdqa oword [rsp + 192], xmm6 LONG $0x74b60f41; WORD $0x1d06 // movzx esi, byte [r14 + rax + 29] LONG $0x6e0f4466; BYTE $0xce // movd xmm9, esi - WORD $0x8948; BYTE $0xfe // mov rsi, rdi - QUAD $0x103e54203a0f4566; BYTE $0x01 // pinsrb xmm10, byte [r14 + rdi + 16], 1 - WORD $0x8948; BYTE $0xd0 // mov rax, rdx - QUAD $0x101654203a0f4566; BYTE $0x02 // pinsrb xmm10, byte [r14 + rdx + 16], 2 - LONG $0x24548b48; BYTE $0x50 // mov rdx, qword [rsp + 80] - QUAD $0x101654203a0f4566; BYTE $0x03 // pinsrb xmm10, byte [r14 + rdx + 16], 3 - QUAD $0x100e54203a0f4766; BYTE $0x04 // pinsrb xmm10, byte [r14 + r9 + 16], 4 - LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] - QUAD $0x103e54203a0f4566; BYTE $0x05 // pinsrb xmm10, byte [r14 + rdi + 16], 5 - QUAD $0x101e54203a0f4566; BYTE $0x06 // pinsrb xmm10, byte [r14 + rbx + 16], 6 - LONG $0x245c8b48; BYTE $0x68 // mov rbx, qword [rsp + 104] - QUAD $0x101e54203a0f4566; BYTE $0x07 // pinsrb xmm10, byte [r14 + rbx + 16], 7 - QUAD $0x101e54203a0f4766; BYTE $0x08 // pinsrb xmm10, byte [r14 + r11 + 16], 8 - QUAD $0x100654203a0f4766; BYTE $0x09 // pinsrb xmm10, byte [r14 + r8 + 16], 9 - QUAD $0x102654203a0f4766; BYTE $0x0a // pinsrb xmm10, byte [r14 + r12 + 16], 10 - QUAD $0x103e54203a0f4766; BYTE $0x0b // pinsrb xmm10, byte [r14 + r15 + 16], 11 - QUAD $0x101654203a0f4766; BYTE $0x0c // pinsrb xmm10, byte [r14 + r10 + 16], 12 - QUAD $0x102e54203a0f4766; BYTE $0x0d // pinsrb xmm10, byte [r14 + r13 + 16], 13 - LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] - QUAD $0x100e54203a0f4566; BYTE $0x0e // pinsrb xmm10, byte [r14 + rcx + 16], 14 - LONG $0x246c8b4c; BYTE $0x48 // mov r13, qword [rsp + 72] - QUAD $0x102e54203a0f4766; BYTE $0x0f // pinsrb xmm10, byte [r14 + r13 + 16], 15 + WORD $0x894c; BYTE $0xfe // mov rsi, r15 + QUAD $0x103e54203a0f4766; BYTE $0x01 // pinsrb xmm10, byte [r14 + r15 + 16], 1 + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + QUAD $0x100654203a0f4566; BYTE $0x02 // pinsrb xmm10, byte [r14 + rax + 16], 2 + QUAD $0x103e54203a0f4566; BYTE $0x03 // pinsrb xmm10, byte [r14 + rdi + 16], 3 + WORD $0x8949; BYTE $0xfb // mov r11, rdi + QUAD $0x100654203a0f4766; BYTE $0x04 // pinsrb xmm10, byte [r14 + r8 + 16], 4 + QUAD $0x102654203a0f4766; BYTE $0x05 // pinsrb xmm10, byte [r14 + r12 + 16], 5 + QUAD $0x100e54203a0f4566; BYTE $0x06 // pinsrb xmm10, byte [r14 + rcx + 16], 6 + LONG $0x24548b48; BYTE $0x58 // mov rdx, qword [rsp + 88] + QUAD $0x101654203a0f4566; BYTE $0x07 // pinsrb xmm10, byte [r14 + rdx + 16], 7 + LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] + QUAD $0x100e54203a0f4566; BYTE $0x08 // pinsrb xmm10, byte [r14 + rcx + 16], 8 + QUAD $0x100e54203a0f4766; BYTE $0x09 // pinsrb xmm10, byte [r14 + r9 + 16], 9 + LONG $0x247c8b4c; BYTE $0x70 // mov r15, qword [rsp + 112] + QUAD $0x103e54203a0f4766; BYTE $0x0a // pinsrb xmm10, byte [r14 + r15 + 16], 10 + QUAD $0x101654203a0f4766; BYTE $0x0b // pinsrb xmm10, byte [r14 + r10 + 16], 11 + LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] + QUAD $0x103e54203a0f4566; BYTE $0x0c // pinsrb xmm10, byte [r14 + rdi + 16], 12 + QUAD $0x101e54203a0f4566; BYTE $0x0d // pinsrb xmm10, byte [r14 + rbx + 16], 13 + QUAD $0x102e54203a0f4766; BYTE $0x0e // pinsrb xmm10, byte [r14 + r13 + 16], 14 + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x100654203a0f4566; BYTE $0x0f // pinsrb xmm10, byte [r14 + rax + 16], 15 QUAD $0x113664203a0f4166; BYTE $0x01 // pinsrb xmm4, byte [r14 + rsi + 17], 1 - QUAD $0x110664203a0f4166; BYTE $0x02 // pinsrb xmm4, byte [r14 + rax + 17], 2 - QUAD $0x111664203a0f4166; BYTE $0x03 // pinsrb xmm4, byte [r14 + rdx + 17], 3 - QUAD $0x110e64203a0f4366; BYTE $0x04 // pinsrb xmm4, byte [r14 + r9 + 17], 4 - QUAD $0x113e64203a0f4166; BYTE $0x05 // pinsrb xmm4, byte [r14 + rdi + 17], 5 - QUAD $0x0000008824948b4c // mov r10, qword [rsp + 136] + LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + QUAD $0x113664203a0f4166; BYTE $0x02 // pinsrb xmm4, byte [r14 + rsi + 17], 2 + QUAD $0x111e64203a0f4366; BYTE $0x03 // pinsrb xmm4, byte [r14 + r11 + 17], 3 + QUAD $0x110664203a0f4366; BYTE $0x04 // pinsrb xmm4, byte [r14 + r8 + 17], 4 + QUAD $0x112664203a0f4366; BYTE $0x05 // pinsrb xmm4, byte [r14 + r12 + 17], 5 + QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] QUAD $0x111664203a0f4366; BYTE $0x06 // pinsrb xmm4, byte [r14 + r10 + 17], 6 - WORD $0x8949; BYTE $0xd9 // mov r9, rbx - QUAD $0x111e64203a0f4166; BYTE $0x07 // pinsrb xmm4, byte [r14 + rbx + 17], 7 - QUAD $0x111e64203a0f4366; BYTE $0x08 // pinsrb xmm4, byte [r14 + r11 + 17], 8 - QUAD $0x110664203a0f4366; BYTE $0x09 // pinsrb xmm4, byte [r14 + r8 + 17], 9 - QUAD $0x112664203a0f4366; BYTE $0x0a // pinsrb xmm4, byte [r14 + r12 + 17], 10 + QUAD $0x111664203a0f4166; BYTE $0x07 // pinsrb xmm4, byte [r14 + rdx + 17], 7 + QUAD $0x110e64203a0f4166; BYTE $0x08 // pinsrb xmm4, byte [r14 + rcx + 17], 8 + QUAD $0x110e64203a0f4366; BYTE $0x09 // pinsrb xmm4, byte [r14 + r9 + 17], 9 WORD $0x894d; BYTE $0xf8 // mov r8, r15 - QUAD $0x113e64203a0f4366; BYTE $0x0b // pinsrb xmm4, byte [r14 + r15 + 17], 11 - LONG $0x247c8b48; BYTE $0x78 // mov rdi, qword [rsp + 120] + QUAD $0x113e64203a0f4366; BYTE $0x0a // pinsrb xmm4, byte [r14 + r15 + 17], 10 + QUAD $0x0000009824948b48 // mov rdx, qword [rsp + 152] + QUAD $0x111664203a0f4166; BYTE $0x0b // pinsrb xmm4, byte [r14 + rdx + 17], 11 QUAD $0x113e64203a0f4166; BYTE $0x0c // pinsrb xmm4, byte [r14 + rdi + 17], 12 - LONG $0x24548b48; BYTE $0x30 // mov rdx, qword [rsp + 48] - QUAD $0x111664203a0f4166; BYTE $0x0d // pinsrb xmm4, byte [r14 + rdx + 17], 13 - QUAD $0x110e64203a0f4166; BYTE $0x0e // pinsrb xmm4, byte [r14 + rcx + 17], 14 - QUAD $0x112e64203a0f4366; BYTE $0x0f // pinsrb xmm4, byte [r14 + r13 + 17], 15 + WORD $0x8949; BYTE $0xfb // mov r11, rdi + QUAD $0x111e64203a0f4166; BYTE $0x0d // pinsrb xmm4, byte [r14 + rbx + 17], 13 + QUAD $0x112e64203a0f4366; BYTE $0x0e // pinsrb xmm4, byte [r14 + r13 + 17], 14 + QUAD $0x110664203a0f4166; BYTE $0x0f // pinsrb xmm4, byte [r14 + rax + 17], 15 + WORD $0x8948; BYTE $0xc1 // mov rcx, rax LONG $0x740f4566; BYTE $0xd6 // pcmpeqb xmm10, xmm14 LONG $0x740f4166; BYTE $0xe6 // pcmpeqb xmm4, xmm14 QUAD $0x00000100b56f0f66 // movdqa xmm6, oword 256[rbp] /* [rip + .LCPI5_16] */ LONG $0xe6df0f66 // pandn xmm4, xmm6 LONG $0xfc0f4166; BYTE $0xe2 // paddb xmm4, xmm10 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] LONG $0x74b60f41; WORD $0x1e06 // movzx esi, byte [r14 + rax + 30] LONG $0x6e0f4466; BYTE $0xd6 // movd xmm10, esi LONG $0x24748b48; BYTE $0x10 // mov rsi, qword [rsp + 16] @@ -28290,7 +29548,7 @@ LBB5_67: LONG $0x44b60f41; WORD $0x1f06 // movzx eax, byte [r14 + rax + 31] LONG $0xf06e0f66 // movd xmm6, eax QUAD $0x1f3674203a0f4166; BYTE $0x01 // pinsrb xmm6, byte [r14 + rsi + 31], 1 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] QUAD $0x12067c203a0f4166; BYTE $0x02 // pinsrb xmm7, byte [r14 + rax + 18], 2 QUAD $0x13066c203a0f4166; BYTE $0x02 // pinsrb xmm5, byte [r14 + rax + 19], 2 QUAD $0x14065c203a0f4166; BYTE $0x02 // pinsrb xmm3, byte [r14 + rax + 20], 2 @@ -28305,48 +29563,49 @@ LBB5_67: QUAD $0x1d064c203a0f4566; BYTE $0x02 // pinsrb xmm9, byte [r14 + rax + 29], 2 QUAD $0x1e0654203a0f4566; BYTE $0x02 // pinsrb xmm10, byte [r14 + rax + 30], 2 QUAD $0x1f0674203a0f4166; BYTE $0x02 // pinsrb xmm6, byte [r14 + rax + 31], 2 - LONG $0x247c8b4c; BYTE $0x50 // mov r15, qword [rsp + 80] + LONG $0x247c8b4c; BYTE $0x28 // mov r15, qword [rsp + 40] QUAD $0x123e7c203a0f4366; BYTE $0x03 // pinsrb xmm7, byte [r14 + r15 + 18], 3 - LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + LONG $0x24448b48; BYTE $0x78 // mov rax, qword [rsp + 120] QUAD $0x12067c203a0f4166; BYTE $0x04 // pinsrb xmm7, byte [r14 + rax + 18], 4 - LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] - QUAD $0x121e7c203a0f4166; BYTE $0x05 // pinsrb xmm7, byte [r14 + rbx + 18], 5 + QUAD $0x12267c203a0f4366; BYTE $0x05 // pinsrb xmm7, byte [r14 + r12 + 18], 5 QUAD $0x12167c203a0f4366; BYTE $0x06 // pinsrb xmm7, byte [r14 + r10 + 18], 6 - QUAD $0x120e7c203a0f4366; BYTE $0x07 // pinsrb xmm7, byte [r14 + r9 + 18], 7 - QUAD $0x121e7c203a0f4366; BYTE $0x08 // pinsrb xmm7, byte [r14 + r11 + 18], 8 - LONG $0x24748b48; BYTE $0x60 // mov rsi, qword [rsp + 96] + LONG $0x247c8b48; BYTE $0x58 // mov rdi, qword [rsp + 88] + QUAD $0x123e7c203a0f4166; BYTE $0x07 // pinsrb xmm7, byte [r14 + rdi + 18], 7 + LONG $0x244c8b4c; BYTE $0x48 // mov r9, qword [rsp + 72] + QUAD $0x120e7c203a0f4366; BYTE $0x08 // pinsrb xmm7, byte [r14 + r9 + 18], 8 + QUAD $0x0000008824b48b48 // mov rsi, qword [rsp + 136] QUAD $0x12367c203a0f4166; BYTE $0x09 // pinsrb xmm7, byte [r14 + rsi + 18], 9 - QUAD $0x12267c203a0f4366; BYTE $0x0a // pinsrb xmm7, byte [r14 + r12 + 18], 10 - QUAD $0x12067c203a0f4366; BYTE $0x0b // pinsrb xmm7, byte [r14 + r8 + 18], 11 - QUAD $0x123e7c203a0f4166; BYTE $0x0c // pinsrb xmm7, byte [r14 + rdi + 18], 12 - QUAD $0x12167c203a0f4166; BYTE $0x0d // pinsrb xmm7, byte [r14 + rdx + 18], 13 - QUAD $0x120e7c203a0f4166; BYTE $0x0e // pinsrb xmm7, byte [r14 + rcx + 18], 14 - QUAD $0x122e7c203a0f4366; BYTE $0x0f // pinsrb xmm7, byte [r14 + r13 + 18], 15 + QUAD $0x12067c203a0f4366; BYTE $0x0a // pinsrb xmm7, byte [r14 + r8 + 18], 10 + QUAD $0x12167c203a0f4166; BYTE $0x0b // pinsrb xmm7, byte [r14 + rdx + 18], 11 + QUAD $0x121e7c203a0f4366; BYTE $0x0c // pinsrb xmm7, byte [r14 + r11 + 18], 12 + QUAD $0x121e7c203a0f4166; BYTE $0x0d // pinsrb xmm7, byte [r14 + rbx + 18], 13 + QUAD $0x122e7c203a0f4366; BYTE $0x0e // pinsrb xmm7, byte [r14 + r13 + 18], 14 + QUAD $0x120e7c203a0f4166; BYTE $0x0f // pinsrb xmm7, byte [r14 + rcx + 18], 15 QUAD $0x133e6c203a0f4366; BYTE $0x03 // pinsrb xmm5, byte [r14 + r15 + 19], 3 QUAD $0x13066c203a0f4166; BYTE $0x04 // pinsrb xmm5, byte [r14 + rax + 19], 4 - QUAD $0x131e6c203a0f4166; BYTE $0x05 // pinsrb xmm5, byte [r14 + rbx + 19], 5 + QUAD $0x13266c203a0f4366; BYTE $0x05 // pinsrb xmm5, byte [r14 + r12 + 19], 5 QUAD $0x13166c203a0f4366; BYTE $0x06 // pinsrb xmm5, byte [r14 + r10 + 19], 6 - QUAD $0x130e6c203a0f4366; BYTE $0x07 // pinsrb xmm5, byte [r14 + r9 + 19], 7 - QUAD $0x131e6c203a0f4366; BYTE $0x08 // pinsrb xmm5, byte [r14 + r11 + 19], 8 + QUAD $0x133e6c203a0f4166; BYTE $0x07 // pinsrb xmm5, byte [r14 + rdi + 19], 7 + QUAD $0x130e6c203a0f4366; BYTE $0x08 // pinsrb xmm5, byte [r14 + r9 + 19], 8 QUAD $0x13366c203a0f4166; BYTE $0x09 // pinsrb xmm5, byte [r14 + rsi + 19], 9 - QUAD $0x13266c203a0f4366; BYTE $0x0a // pinsrb xmm5, byte [r14 + r12 + 19], 10 - QUAD $0x13066c203a0f4366; BYTE $0x0b // pinsrb xmm5, byte [r14 + r8 + 19], 11 - QUAD $0x133e6c203a0f4166; BYTE $0x0c // pinsrb xmm5, byte [r14 + rdi + 19], 12 - QUAD $0x13166c203a0f4166; BYTE $0x0d // pinsrb xmm5, byte [r14 + rdx + 19], 13 - QUAD $0x130e6c203a0f4166; BYTE $0x0e // pinsrb xmm5, byte [r14 + rcx + 19], 14 - QUAD $0x132e6c203a0f4366; BYTE $0x0f // pinsrb xmm5, byte [r14 + r13 + 19], 15 + QUAD $0x13066c203a0f4366; BYTE $0x0a // pinsrb xmm5, byte [r14 + r8 + 19], 10 + QUAD $0x13166c203a0f4166; BYTE $0x0b // pinsrb xmm5, byte [r14 + rdx + 19], 11 + QUAD $0x131e6c203a0f4366; BYTE $0x0c // pinsrb xmm5, byte [r14 + r11 + 19], 12 + QUAD $0x131e6c203a0f4166; BYTE $0x0d // pinsrb xmm5, byte [r14 + rbx + 19], 13 + QUAD $0x132e6c203a0f4366; BYTE $0x0e // pinsrb xmm5, byte [r14 + r13 + 19], 14 + QUAD $0x130e6c203a0f4166; BYTE $0x0f // pinsrb xmm5, byte [r14 + rcx + 19], 15 QUAD $0x143e5c203a0f4366; BYTE $0x03 // pinsrb xmm3, byte [r14 + r15 + 20], 3 QUAD $0x14065c203a0f4166; BYTE $0x04 // pinsrb xmm3, byte [r14 + rax + 20], 4 - QUAD $0x141e5c203a0f4166; BYTE $0x05 // pinsrb xmm3, byte [r14 + rbx + 20], 5 + QUAD $0x14265c203a0f4366; BYTE $0x05 // pinsrb xmm3, byte [r14 + r12 + 20], 5 QUAD $0x14165c203a0f4366; BYTE $0x06 // pinsrb xmm3, byte [r14 + r10 + 20], 6 - QUAD $0x140e5c203a0f4366; BYTE $0x07 // pinsrb xmm3, byte [r14 + r9 + 20], 7 - QUAD $0x141e5c203a0f4366; BYTE $0x08 // pinsrb xmm3, byte [r14 + r11 + 20], 8 + QUAD $0x143e5c203a0f4166; BYTE $0x07 // pinsrb xmm3, byte [r14 + rdi + 20], 7 + QUAD $0x140e5c203a0f4366; BYTE $0x08 // pinsrb xmm3, byte [r14 + r9 + 20], 8 QUAD $0x14365c203a0f4166; BYTE $0x09 // pinsrb xmm3, byte [r14 + rsi + 20], 9 - QUAD $0x14265c203a0f4366; BYTE $0x0a // pinsrb xmm3, byte [r14 + r12 + 20], 10 - QUAD $0x14065c203a0f4366; BYTE $0x0b // pinsrb xmm3, byte [r14 + r8 + 20], 11 - QUAD $0x143e5c203a0f4166; BYTE $0x0c // pinsrb xmm3, byte [r14 + rdi + 20], 12 - QUAD $0x14165c203a0f4166; BYTE $0x0d // pinsrb xmm3, byte [r14 + rdx + 20], 13 - QUAD $0x140e5c203a0f4166; BYTE $0x0e // pinsrb xmm3, byte [r14 + rcx + 20], 14 + QUAD $0x14065c203a0f4366; BYTE $0x0a // pinsrb xmm3, byte [r14 + r8 + 20], 10 + QUAD $0x14165c203a0f4166; BYTE $0x0b // pinsrb xmm3, byte [r14 + rdx + 20], 11 + QUAD $0x141e5c203a0f4366; BYTE $0x0c // pinsrb xmm3, byte [r14 + r11 + 20], 12 + QUAD $0x141e5c203a0f4166; BYTE $0x0d // pinsrb xmm3, byte [r14 + rbx + 20], 13 + QUAD $0x142e5c203a0f4366; BYTE $0x0e // pinsrb xmm3, byte [r14 + r13 + 20], 14 LONG $0x740f4166; BYTE $0xfe // pcmpeqb xmm7, xmm14 QUAD $0x000110b56f0f4466; BYTE $0x00 // movdqa xmm14, oword 272[rbp] /* [rip + .LCPI5_17] */ LONG $0xdf0f4166; BYTE $0xfe // pandn xmm7, xmm14 @@ -28354,7 +29613,7 @@ LBB5_67: QUAD $0x000120b56f0f4466; BYTE $0x00 // movdqa xmm14, oword 288[rbp] /* [rip + .LCPI5_18] */ LONG $0xdf0f4166; BYTE $0xee // pandn xmm5, xmm14 LONG $0xefeb0f66 // por xmm5, xmm7 - QUAD $0x142e5c203a0f4366; BYTE $0x0f // pinsrb xmm3, byte [r14 + r13 + 20], 15 + QUAD $0x140e5c203a0f4166; BYTE $0x0f // pinsrb xmm3, byte [r14 + rcx + 20], 15 QUAD $0x00b024b46f0f4466; WORD $0x0000 // movdqa xmm14, oword [rsp + 176] LONG $0x740f4166; BYTE $0xde // pcmpeqb xmm3, xmm14 QUAD $0x00000130bd6f0f66 // movdqa xmm7, oword 304[rbp] /* [rip + .LCPI5_19] */ @@ -28365,42 +29624,42 @@ LBB5_67: LONG $0xdceb0f66 // por xmm3, xmm4 QUAD $0x153e54203a0f4366; BYTE $0x03 // pinsrb xmm2, byte [r14 + r15 + 21], 3 QUAD $0x150654203a0f4166; BYTE $0x04 // pinsrb xmm2, byte [r14 + rax + 21], 4 - QUAD $0x151e54203a0f4166; BYTE $0x05 // pinsrb xmm2, byte [r14 + rbx + 21], 5 + QUAD $0x152654203a0f4366; BYTE $0x05 // pinsrb xmm2, byte [r14 + r12 + 21], 5 QUAD $0x151654203a0f4366; BYTE $0x06 // pinsrb xmm2, byte [r14 + r10 + 21], 6 - QUAD $0x150e54203a0f4366; BYTE $0x07 // pinsrb xmm2, byte [r14 + r9 + 21], 7 - QUAD $0x151e54203a0f4366; BYTE $0x08 // pinsrb xmm2, byte [r14 + r11 + 21], 8 + QUAD $0x153e54203a0f4166; BYTE $0x07 // pinsrb xmm2, byte [r14 + rdi + 21], 7 + QUAD $0x150e54203a0f4366; BYTE $0x08 // pinsrb xmm2, byte [r14 + r9 + 21], 8 QUAD $0x153654203a0f4166; BYTE $0x09 // pinsrb xmm2, byte [r14 + rsi + 21], 9 - QUAD $0x152654203a0f4366; BYTE $0x0a // pinsrb xmm2, byte [r14 + r12 + 21], 10 - QUAD $0x150654203a0f4366; BYTE $0x0b // pinsrb xmm2, byte [r14 + r8 + 21], 11 - QUAD $0x153e54203a0f4166; BYTE $0x0c // pinsrb xmm2, byte [r14 + rdi + 21], 12 - QUAD $0x151654203a0f4166; BYTE $0x0d // pinsrb xmm2, byte [r14 + rdx + 21], 13 - QUAD $0x150e54203a0f4166; BYTE $0x0e // pinsrb xmm2, byte [r14 + rcx + 21], 14 - QUAD $0x152e54203a0f4366; BYTE $0x0f // pinsrb xmm2, byte [r14 + r13 + 21], 15 + QUAD $0x150654203a0f4366; BYTE $0x0a // pinsrb xmm2, byte [r14 + r8 + 21], 10 + QUAD $0x151654203a0f4166; BYTE $0x0b // pinsrb xmm2, byte [r14 + rdx + 21], 11 + QUAD $0x151e54203a0f4366; BYTE $0x0c // pinsrb xmm2, byte [r14 + r11 + 21], 12 + QUAD $0x151e54203a0f4166; BYTE $0x0d // pinsrb xmm2, byte [r14 + rbx + 21], 13 + QUAD $0x152e54203a0f4366; BYTE $0x0e // pinsrb xmm2, byte [r14 + r13 + 21], 14 + QUAD $0x150e54203a0f4166; BYTE $0x0f // pinsrb xmm2, byte [r14 + rcx + 21], 15 QUAD $0x163e4c203a0f4366; BYTE $0x03 // pinsrb xmm1, byte [r14 + r15 + 22], 3 QUAD $0x16064c203a0f4166; BYTE $0x04 // pinsrb xmm1, byte [r14 + rax + 22], 4 - QUAD $0x161e4c203a0f4166; BYTE $0x05 // pinsrb xmm1, byte [r14 + rbx + 22], 5 + QUAD $0x16264c203a0f4366; BYTE $0x05 // pinsrb xmm1, byte [r14 + r12 + 22], 5 QUAD $0x16164c203a0f4366; BYTE $0x06 // pinsrb xmm1, byte [r14 + r10 + 22], 6 - QUAD $0x160e4c203a0f4366; BYTE $0x07 // pinsrb xmm1, byte [r14 + r9 + 22], 7 - QUAD $0x161e4c203a0f4366; BYTE $0x08 // pinsrb xmm1, byte [r14 + r11 + 22], 8 + QUAD $0x163e4c203a0f4166; BYTE $0x07 // pinsrb xmm1, byte [r14 + rdi + 22], 7 + QUAD $0x160e4c203a0f4366; BYTE $0x08 // pinsrb xmm1, byte [r14 + r9 + 22], 8 QUAD $0x16364c203a0f4166; BYTE $0x09 // pinsrb xmm1, byte [r14 + rsi + 22], 9 - QUAD $0x16264c203a0f4366; BYTE $0x0a // pinsrb xmm1, byte [r14 + r12 + 22], 10 - QUAD $0x16064c203a0f4366; BYTE $0x0b // pinsrb xmm1, byte [r14 + r8 + 22], 11 - QUAD $0x163e4c203a0f4166; BYTE $0x0c // pinsrb xmm1, byte [r14 + rdi + 22], 12 - QUAD $0x16164c203a0f4166; BYTE $0x0d // pinsrb xmm1, byte [r14 + rdx + 22], 13 - QUAD $0x160e4c203a0f4166; BYTE $0x0e // pinsrb xmm1, byte [r14 + rcx + 22], 14 - QUAD $0x162e4c203a0f4366; BYTE $0x0f // pinsrb xmm1, byte [r14 + r13 + 22], 15 + QUAD $0x16064c203a0f4366; BYTE $0x0a // pinsrb xmm1, byte [r14 + r8 + 22], 10 + QUAD $0x16164c203a0f4166; BYTE $0x0b // pinsrb xmm1, byte [r14 + rdx + 22], 11 + QUAD $0x161e4c203a0f4366; BYTE $0x0c // pinsrb xmm1, byte [r14 + r11 + 22], 12 + QUAD $0x161e4c203a0f4166; BYTE $0x0d // pinsrb xmm1, byte [r14 + rbx + 22], 13 + QUAD $0x162e4c203a0f4366; BYTE $0x0e // pinsrb xmm1, byte [r14 + r13 + 22], 14 + QUAD $0x160e4c203a0f4166; BYTE $0x0f // pinsrb xmm1, byte [r14 + rcx + 22], 15 QUAD $0x173e44203a0f4766; BYTE $0x03 // pinsrb xmm8, byte [r14 + r15 + 23], 3 QUAD $0x170644203a0f4566; BYTE $0x04 // pinsrb xmm8, byte [r14 + rax + 23], 4 - QUAD $0x171e44203a0f4566; BYTE $0x05 // pinsrb xmm8, byte [r14 + rbx + 23], 5 + QUAD $0x172644203a0f4766; BYTE $0x05 // pinsrb xmm8, byte [r14 + r12 + 23], 5 QUAD $0x171644203a0f4766; BYTE $0x06 // pinsrb xmm8, byte [r14 + r10 + 23], 6 - QUAD $0x170e44203a0f4766; BYTE $0x07 // pinsrb xmm8, byte [r14 + r9 + 23], 7 - QUAD $0x171e44203a0f4766; BYTE $0x08 // pinsrb xmm8, byte [r14 + r11 + 23], 8 + QUAD $0x173e44203a0f4566; BYTE $0x07 // pinsrb xmm8, byte [r14 + rdi + 23], 7 + QUAD $0x170e44203a0f4766; BYTE $0x08 // pinsrb xmm8, byte [r14 + r9 + 23], 8 QUAD $0x173644203a0f4566; BYTE $0x09 // pinsrb xmm8, byte [r14 + rsi + 23], 9 - QUAD $0x172644203a0f4766; BYTE $0x0a // pinsrb xmm8, byte [r14 + r12 + 23], 10 - QUAD $0x170644203a0f4766; BYTE $0x0b // pinsrb xmm8, byte [r14 + r8 + 23], 11 - QUAD $0x173e44203a0f4566; BYTE $0x0c // pinsrb xmm8, byte [r14 + rdi + 23], 12 - QUAD $0x171644203a0f4566; BYTE $0x0d // pinsrb xmm8, byte [r14 + rdx + 23], 13 - QUAD $0x170e44203a0f4566; BYTE $0x0e // pinsrb xmm8, byte [r14 + rcx + 23], 14 + QUAD $0x170644203a0f4766; BYTE $0x0a // pinsrb xmm8, byte [r14 + r8 + 23], 10 + QUAD $0x171644203a0f4566; BYTE $0x0b // pinsrb xmm8, byte [r14 + rdx + 23], 11 + QUAD $0x171e44203a0f4766; BYTE $0x0c // pinsrb xmm8, byte [r14 + r11 + 23], 12 + QUAD $0x171e44203a0f4566; BYTE $0x0d // pinsrb xmm8, byte [r14 + rbx + 23], 13 + QUAD $0x172e44203a0f4766; BYTE $0x0e // pinsrb xmm8, byte [r14 + r13 + 23], 14 LONG $0x740f4166; BYTE $0xd6 // pcmpeqb xmm2, xmm14 QUAD $0x00000140ad6f0f66 // movdqa xmm5, oword 320[rbp] /* [rip + .LCPI5_20] */ LONG $0xd5df0f66 // pandn xmm2, xmm5 @@ -28408,68 +29667,68 @@ LBB5_67: QUAD $0x00000150bd6f0f66 // movdqa xmm7, oword 336[rbp] /* [rip + .LCPI5_21] */ LONG $0xcfdf0f66 // pandn xmm1, xmm7 LONG $0xcaeb0f66 // por xmm1, xmm2 - QUAD $0x172e44203a0f4766; BYTE $0x0f // pinsrb xmm8, byte [r14 + r13 + 23], 15 + QUAD $0x170e44203a0f4566; BYTE $0x0f // pinsrb xmm8, byte [r14 + rcx + 23], 15 LONG $0x740f4566; BYTE $0xc6 // pcmpeqb xmm8, xmm14 LONG $0x656f0f66; BYTE $0x60 // movdqa xmm4, oword 96[rbp] /* [rip + .LCPI5_6] */ LONG $0xdf0f4466; BYTE $0xc4 // pandn xmm8, xmm4 LONG $0xeb0f4466; BYTE $0xc1 // por xmm8, xmm1 QUAD $0x183e64203a0f4766; BYTE $0x03 // pinsrb xmm12, byte [r14 + r15 + 24], 3 QUAD $0x180664203a0f4566; BYTE $0x04 // pinsrb xmm12, byte [r14 + rax + 24], 4 - QUAD $0x181e64203a0f4566; BYTE $0x05 // pinsrb xmm12, byte [r14 + rbx + 24], 5 + QUAD $0x182664203a0f4766; BYTE $0x05 // pinsrb xmm12, byte [r14 + r12 + 24], 5 QUAD $0x181664203a0f4766; BYTE $0x06 // pinsrb xmm12, byte [r14 + r10 + 24], 6 - QUAD $0x180e64203a0f4766; BYTE $0x07 // pinsrb xmm12, byte [r14 + r9 + 24], 7 - QUAD $0x181e64203a0f4766; BYTE $0x08 // pinsrb xmm12, byte [r14 + r11 + 24], 8 + QUAD $0x183e64203a0f4566; BYTE $0x07 // pinsrb xmm12, byte [r14 + rdi + 24], 7 + QUAD $0x180e64203a0f4766; BYTE $0x08 // pinsrb xmm12, byte [r14 + r9 + 24], 8 QUAD $0x183664203a0f4566; BYTE $0x09 // pinsrb xmm12, byte [r14 + rsi + 24], 9 - QUAD $0x182664203a0f4766; BYTE $0x0a // pinsrb xmm12, byte [r14 + r12 + 24], 10 - QUAD $0x180664203a0f4766; BYTE $0x0b // pinsrb xmm12, byte [r14 + r8 + 24], 11 - QUAD $0x183e64203a0f4566; BYTE $0x0c // pinsrb xmm12, byte [r14 + rdi + 24], 12 - QUAD $0x181664203a0f4566; BYTE $0x0d // pinsrb xmm12, byte [r14 + rdx + 24], 13 - QUAD $0x180e64203a0f4566; BYTE $0x0e // pinsrb xmm12, byte [r14 + rcx + 24], 14 - QUAD $0x182e64203a0f4766; BYTE $0x0f // pinsrb xmm12, byte [r14 + r13 + 24], 15 + QUAD $0x180664203a0f4766; BYTE $0x0a // pinsrb xmm12, byte [r14 + r8 + 24], 10 + QUAD $0x181664203a0f4566; BYTE $0x0b // pinsrb xmm12, byte [r14 + rdx + 24], 11 + QUAD $0x181e64203a0f4766; BYTE $0x0c // pinsrb xmm12, byte [r14 + r11 + 24], 12 + QUAD $0x181e64203a0f4566; BYTE $0x0d // pinsrb xmm12, byte [r14 + rbx + 24], 13 + QUAD $0x182e64203a0f4766; BYTE $0x0e // pinsrb xmm12, byte [r14 + r13 + 24], 14 + QUAD $0x180e64203a0f4566; BYTE $0x0f // pinsrb xmm12, byte [r14 + rcx + 24], 15 LONG $0xeb0f4466; BYTE $0xc3 // por xmm8, xmm3 LONG $0x740f4566; BYTE $0xe6 // pcmpeqb xmm12, xmm14 QUAD $0x193e6c203a0f4766; BYTE $0x03 // pinsrb xmm13, byte [r14 + r15 + 25], 3 QUAD $0x19066c203a0f4566; BYTE $0x04 // pinsrb xmm13, byte [r14 + rax + 25], 4 - QUAD $0x191e6c203a0f4566; BYTE $0x05 // pinsrb xmm13, byte [r14 + rbx + 25], 5 + QUAD $0x19266c203a0f4766; BYTE $0x05 // pinsrb xmm13, byte [r14 + r12 + 25], 5 QUAD $0x19166c203a0f4766; BYTE $0x06 // pinsrb xmm13, byte [r14 + r10 + 25], 6 - QUAD $0x190e6c203a0f4766; BYTE $0x07 // pinsrb xmm13, byte [r14 + r9 + 25], 7 - QUAD $0x191e6c203a0f4766; BYTE $0x08 // pinsrb xmm13, byte [r14 + r11 + 25], 8 + QUAD $0x193e6c203a0f4566; BYTE $0x07 // pinsrb xmm13, byte [r14 + rdi + 25], 7 + QUAD $0x190e6c203a0f4766; BYTE $0x08 // pinsrb xmm13, byte [r14 + r9 + 25], 8 QUAD $0x19366c203a0f4566; BYTE $0x09 // pinsrb xmm13, byte [r14 + rsi + 25], 9 - QUAD $0x19266c203a0f4766; BYTE $0x0a // pinsrb xmm13, byte [r14 + r12 + 25], 10 - QUAD $0x19066c203a0f4766; BYTE $0x0b // pinsrb xmm13, byte [r14 + r8 + 25], 11 - QUAD $0x193e6c203a0f4566; BYTE $0x0c // pinsrb xmm13, byte [r14 + rdi + 25], 12 - QUAD $0x19166c203a0f4566; BYTE $0x0d // pinsrb xmm13, byte [r14 + rdx + 25], 13 - QUAD $0x190e6c203a0f4566; BYTE $0x0e // pinsrb xmm13, byte [r14 + rcx + 25], 14 - QUAD $0x192e6c203a0f4766; BYTE $0x0f // pinsrb xmm13, byte [r14 + r13 + 25], 15 + QUAD $0x19066c203a0f4766; BYTE $0x0a // pinsrb xmm13, byte [r14 + r8 + 25], 10 + QUAD $0x19166c203a0f4566; BYTE $0x0b // pinsrb xmm13, byte [r14 + rdx + 25], 11 + QUAD $0x191e6c203a0f4766; BYTE $0x0c // pinsrb xmm13, byte [r14 + r11 + 25], 12 + QUAD $0x191e6c203a0f4566; BYTE $0x0d // pinsrb xmm13, byte [r14 + rbx + 25], 13 + QUAD $0x192e6c203a0f4766; BYTE $0x0e // pinsrb xmm13, byte [r14 + r13 + 25], 14 + QUAD $0x190e6c203a0f4566; BYTE $0x0f // pinsrb xmm13, byte [r14 + rcx + 25], 15 QUAD $0x1a3e44203a0f4366; BYTE $0x03 // pinsrb xmm0, byte [r14 + r15 + 26], 3 QUAD $0x1a0644203a0f4166; BYTE $0x04 // pinsrb xmm0, byte [r14 + rax + 26], 4 - QUAD $0x1a1e44203a0f4166; BYTE $0x05 // pinsrb xmm0, byte [r14 + rbx + 26], 5 + QUAD $0x1a2644203a0f4366; BYTE $0x05 // pinsrb xmm0, byte [r14 + r12 + 26], 5 QUAD $0x1a1644203a0f4366; BYTE $0x06 // pinsrb xmm0, byte [r14 + r10 + 26], 6 - QUAD $0x1a0e44203a0f4366; BYTE $0x07 // pinsrb xmm0, byte [r14 + r9 + 26], 7 - QUAD $0x1a1e44203a0f4366; BYTE $0x08 // pinsrb xmm0, byte [r14 + r11 + 26], 8 + QUAD $0x1a3e44203a0f4166; BYTE $0x07 // pinsrb xmm0, byte [r14 + rdi + 26], 7 + QUAD $0x1a0e44203a0f4366; BYTE $0x08 // pinsrb xmm0, byte [r14 + r9 + 26], 8 QUAD $0x1a3644203a0f4166; BYTE $0x09 // pinsrb xmm0, byte [r14 + rsi + 26], 9 - QUAD $0x1a2644203a0f4366; BYTE $0x0a // pinsrb xmm0, byte [r14 + r12 + 26], 10 - QUAD $0x1a0644203a0f4366; BYTE $0x0b // pinsrb xmm0, byte [r14 + r8 + 26], 11 - QUAD $0x1a3e44203a0f4166; BYTE $0x0c // pinsrb xmm0, byte [r14 + rdi + 26], 12 - QUAD $0x1a1644203a0f4166; BYTE $0x0d // pinsrb xmm0, byte [r14 + rdx + 26], 13 - QUAD $0x1a0e44203a0f4166; BYTE $0x0e // pinsrb xmm0, byte [r14 + rcx + 26], 14 - QUAD $0x1a2e44203a0f4366; BYTE $0x0f // pinsrb xmm0, byte [r14 + r13 + 26], 15 + QUAD $0x1a0644203a0f4366; BYTE $0x0a // pinsrb xmm0, byte [r14 + r8 + 26], 10 + QUAD $0x1a1644203a0f4166; BYTE $0x0b // pinsrb xmm0, byte [r14 + rdx + 26], 11 + QUAD $0x1a1e44203a0f4366; BYTE $0x0c // pinsrb xmm0, byte [r14 + r11 + 26], 12 + QUAD $0x1a1e44203a0f4166; BYTE $0x0d // pinsrb xmm0, byte [r14 + rbx + 26], 13 + QUAD $0x1a2e44203a0f4366; BYTE $0x0e // pinsrb xmm0, byte [r14 + r13 + 26], 14 + QUAD $0x1a0e44203a0f4166; BYTE $0x0f // pinsrb xmm0, byte [r14 + rcx + 26], 15 QUAD $0x1b3e5c203a0f4766; BYTE $0x03 // pinsrb xmm11, byte [r14 + r15 + 27], 3 QUAD $0x1b065c203a0f4566; BYTE $0x04 // pinsrb xmm11, byte [r14 + rax + 27], 4 - QUAD $0x1b1e5c203a0f4566; BYTE $0x05 // pinsrb xmm11, byte [r14 + rbx + 27], 5 + QUAD $0x1b265c203a0f4766; BYTE $0x05 // pinsrb xmm11, byte [r14 + r12 + 27], 5 QUAD $0x1b165c203a0f4766; BYTE $0x06 // pinsrb xmm11, byte [r14 + r10 + 27], 6 - QUAD $0x1b0e5c203a0f4766; BYTE $0x07 // pinsrb xmm11, byte [r14 + r9 + 27], 7 - QUAD $0x1b1e5c203a0f4766; BYTE $0x08 // pinsrb xmm11, byte [r14 + r11 + 27], 8 + QUAD $0x1b3e5c203a0f4566; BYTE $0x07 // pinsrb xmm11, byte [r14 + rdi + 27], 7 + QUAD $0x1b0e5c203a0f4766; BYTE $0x08 // pinsrb xmm11, byte [r14 + r9 + 27], 8 QUAD $0x1b365c203a0f4566; BYTE $0x09 // pinsrb xmm11, byte [r14 + rsi + 27], 9 - QUAD $0x1b265c203a0f4766; BYTE $0x0a // pinsrb xmm11, byte [r14 + r12 + 27], 10 - QUAD $0x1b065c203a0f4766; BYTE $0x0b // pinsrb xmm11, byte [r14 + r8 + 27], 11 - QUAD $0x1b3e5c203a0f4566; BYTE $0x0c // pinsrb xmm11, byte [r14 + rdi + 27], 12 - QUAD $0x1b165c203a0f4566; BYTE $0x0d // pinsrb xmm11, byte [r14 + rdx + 27], 13 - QUAD $0x1b0e5c203a0f4566; BYTE $0x0e // pinsrb xmm11, byte [r14 + rcx + 27], 14 + QUAD $0x1b065c203a0f4766; BYTE $0x0a // pinsrb xmm11, byte [r14 + r8 + 27], 10 + QUAD $0x1b165c203a0f4566; BYTE $0x0b // pinsrb xmm11, byte [r14 + rdx + 27], 11 + QUAD $0x1b1e5c203a0f4766; BYTE $0x0c // pinsrb xmm11, byte [r14 + r11 + 27], 12 + QUAD $0x1b1e5c203a0f4566; BYTE $0x0d // pinsrb xmm11, byte [r14 + rbx + 27], 13 + QUAD $0x1b2e5c203a0f4766; BYTE $0x0e // pinsrb xmm11, byte [r14 + r13 + 27], 14 LONG $0x740f4566; BYTE $0xee // pcmpeqb xmm13, xmm14 QUAD $0x000100addf0f4466; BYTE $0x00 // pandn xmm13, oword 256[rbp] /* [rip + .LCPI5_16] */ LONG $0xfc0f4566; BYTE $0xec // paddb xmm13, xmm12 - QUAD $0x1b2e5c203a0f4766; BYTE $0x0f // pinsrb xmm11, byte [r14 + r13 + 27], 15 + QUAD $0x1b0e5c203a0f4566; BYTE $0x0f // pinsrb xmm11, byte [r14 + rcx + 27], 15 LONG $0x740f4166; BYTE $0xc6 // pcmpeqb xmm0, xmm14 QUAD $0x0000011085df0f66 // pandn xmm0, oword 272[rbp] /* [rip + .LCPI5_17] */ LONG $0x740f4566; BYTE $0xde // pcmpeqb xmm11, xmm14 @@ -28483,61 +29742,61 @@ LBB5_67: QUAD $0x1d064c203a0f4566; BYTE $0x04 // pinsrb xmm9, byte [r14 + rax + 29], 4 QUAD $0x1e0654203a0f4566; BYTE $0x04 // pinsrb xmm10, byte [r14 + rax + 30], 4 QUAD $0x1f0674203a0f4166; BYTE $0x04 // pinsrb xmm6, byte [r14 + rax + 31], 4 - WORD $0x8948; BYTE $0xd8 // mov rax, rbx - QUAD $0x1c1e7c203a0f4566; BYTE $0x05 // pinsrb xmm15, byte [r14 + rbx + 28], 5 - QUAD $0x1d1e4c203a0f4566; BYTE $0x05 // pinsrb xmm9, byte [r14 + rbx + 29], 5 - QUAD $0x1e1e54203a0f4566; BYTE $0x05 // pinsrb xmm10, byte [r14 + rbx + 30], 5 - QUAD $0x1f1e74203a0f4166; BYTE $0x05 // pinsrb xmm6, byte [r14 + rbx + 31], 5 + QUAD $0x1c267c203a0f4766; BYTE $0x05 // pinsrb xmm15, byte [r14 + r12 + 28], 5 + QUAD $0x1d264c203a0f4766; BYTE $0x05 // pinsrb xmm9, byte [r14 + r12 + 29], 5 + QUAD $0x1e2654203a0f4766; BYTE $0x05 // pinsrb xmm10, byte [r14 + r12 + 30], 5 + QUAD $0x1f2674203a0f4366; BYTE $0x05 // pinsrb xmm6, byte [r14 + r12 + 31], 5 WORD $0x894c; BYTE $0xd0 // mov rax, r10 QUAD $0x1c167c203a0f4766; BYTE $0x06 // pinsrb xmm15, byte [r14 + r10 + 28], 6 QUAD $0x1d164c203a0f4766; BYTE $0x06 // pinsrb xmm9, byte [r14 + r10 + 29], 6 QUAD $0x1e1654203a0f4766; BYTE $0x06 // pinsrb xmm10, byte [r14 + r10 + 30], 6 QUAD $0x1f1674203a0f4366; BYTE $0x06 // pinsrb xmm6, byte [r14 + r10 + 31], 6 + WORD $0x8948; BYTE $0xf8 // mov rax, rdi + QUAD $0x1c3e7c203a0f4566; BYTE $0x07 // pinsrb xmm15, byte [r14 + rdi + 28], 7 + QUAD $0x1d3e4c203a0f4566; BYTE $0x07 // pinsrb xmm9, byte [r14 + rdi + 29], 7 + QUAD $0x1e3e54203a0f4566; BYTE $0x07 // pinsrb xmm10, byte [r14 + rdi + 30], 7 + QUAD $0x1f3e74203a0f4166; BYTE $0x07 // pinsrb xmm6, byte [r14 + rdi + 31], 7 WORD $0x894c; BYTE $0xc8 // mov rax, r9 - QUAD $0x1c0e7c203a0f4766; BYTE $0x07 // pinsrb xmm15, byte [r14 + r9 + 28], 7 - QUAD $0x1d0e4c203a0f4766; BYTE $0x07 // pinsrb xmm9, byte [r14 + r9 + 29], 7 - QUAD $0x1e0e54203a0f4766; BYTE $0x07 // pinsrb xmm10, byte [r14 + r9 + 30], 7 - QUAD $0x1f0e74203a0f4366; BYTE $0x07 // pinsrb xmm6, byte [r14 + r9 + 31], 7 - QUAD $0x1c1e7c203a0f4766; BYTE $0x08 // pinsrb xmm15, byte [r14 + r11 + 28], 8 - QUAD $0x1d1e4c203a0f4766; BYTE $0x08 // pinsrb xmm9, byte [r14 + r11 + 29], 8 - QUAD $0x1e1e54203a0f4766; BYTE $0x08 // pinsrb xmm10, byte [r14 + r11 + 30], 8 - QUAD $0x1f1e74203a0f4366; BYTE $0x08 // pinsrb xmm6, byte [r14 + r11 + 31], 8 + QUAD $0x1c0e7c203a0f4766; BYTE $0x08 // pinsrb xmm15, byte [r14 + r9 + 28], 8 + QUAD $0x1d0e4c203a0f4766; BYTE $0x08 // pinsrb xmm9, byte [r14 + r9 + 29], 8 + QUAD $0x1e0e54203a0f4766; BYTE $0x08 // pinsrb xmm10, byte [r14 + r9 + 30], 8 + QUAD $0x1f0e74203a0f4366; BYTE $0x08 // pinsrb xmm6, byte [r14 + r9 + 31], 8 WORD $0x8948; BYTE $0xf0 // mov rax, rsi QUAD $0x1c367c203a0f4566; BYTE $0x09 // pinsrb xmm15, byte [r14 + rsi + 28], 9 QUAD $0x1d364c203a0f4566; BYTE $0x09 // pinsrb xmm9, byte [r14 + rsi + 29], 9 QUAD $0x1e3654203a0f4566; BYTE $0x09 // pinsrb xmm10, byte [r14 + rsi + 30], 9 QUAD $0x1f3674203a0f4166; BYTE $0x09 // pinsrb xmm6, byte [r14 + rsi + 31], 9 - QUAD $0x1c267c203a0f4766; BYTE $0x0a // pinsrb xmm15, byte [r14 + r12 + 28], 10 - QUAD $0x1d264c203a0f4766; BYTE $0x0a // pinsrb xmm9, byte [r14 + r12 + 29], 10 - QUAD $0x1e2654203a0f4766; BYTE $0x0a // pinsrb xmm10, byte [r14 + r12 + 30], 10 - QUAD $0x1f2674203a0f4366; BYTE $0x0a // pinsrb xmm6, byte [r14 + r12 + 31], 10 WORD $0x894c; BYTE $0xc0 // mov rax, r8 - QUAD $0x1c067c203a0f4766; BYTE $0x0b // pinsrb xmm15, byte [r14 + r8 + 28], 11 - QUAD $0x1d064c203a0f4766; BYTE $0x0b // pinsrb xmm9, byte [r14 + r8 + 29], 11 - QUAD $0x1e0654203a0f4766; BYTE $0x0b // pinsrb xmm10, byte [r14 + r8 + 30], 11 - QUAD $0x1f0674203a0f4366; BYTE $0x0b // pinsrb xmm6, byte [r14 + r8 + 31], 11 - WORD $0x8948; BYTE $0xf8 // mov rax, rdi - QUAD $0x1c3e7c203a0f4566; BYTE $0x0c // pinsrb xmm15, byte [r14 + rdi + 28], 12 - QUAD $0x1d3e4c203a0f4566; BYTE $0x0c // pinsrb xmm9, byte [r14 + rdi + 29], 12 - QUAD $0x1e3e54203a0f4566; BYTE $0x0c // pinsrb xmm10, byte [r14 + rdi + 30], 12 - QUAD $0x1f3e74203a0f4166; BYTE $0x0c // pinsrb xmm6, byte [r14 + rdi + 31], 12 + QUAD $0x1c067c203a0f4766; BYTE $0x0a // pinsrb xmm15, byte [r14 + r8 + 28], 10 + QUAD $0x1d064c203a0f4766; BYTE $0x0a // pinsrb xmm9, byte [r14 + r8 + 29], 10 + QUAD $0x1e0654203a0f4766; BYTE $0x0a // pinsrb xmm10, byte [r14 + r8 + 30], 10 + QUAD $0x1f0674203a0f4366; BYTE $0x0a // pinsrb xmm6, byte [r14 + r8 + 31], 10 WORD $0x8948; BYTE $0xd0 // mov rax, rdx - QUAD $0x1c167c203a0f4566; BYTE $0x0d // pinsrb xmm15, byte [r14 + rdx + 28], 13 - QUAD $0x1d164c203a0f4566; BYTE $0x0d // pinsrb xmm9, byte [r14 + rdx + 29], 13 - QUAD $0x1e1654203a0f4566; BYTE $0x0d // pinsrb xmm10, byte [r14 + rdx + 30], 13 - QUAD $0x1f1674203a0f4166; BYTE $0x0d // pinsrb xmm6, byte [r14 + rdx + 31], 13 - WORD $0x8948; BYTE $0xc8 // mov rax, rcx - QUAD $0x1c0e7c203a0f4566; BYTE $0x0e // pinsrb xmm15, byte [r14 + rcx + 28], 14 - QUAD $0x1d0e4c203a0f4566; BYTE $0x0e // pinsrb xmm9, byte [r14 + rcx + 29], 14 - QUAD $0x1e0e54203a0f4566; BYTE $0x0e // pinsrb xmm10, byte [r14 + rcx + 30], 14 - QUAD $0x1f0e74203a0f4166; BYTE $0x0e // pinsrb xmm6, byte [r14 + rcx + 31], 14 - QUAD $0x1c2e7c203a0f4766; BYTE $0x0f // pinsrb xmm15, byte [r14 + r13 + 28], 15 - QUAD $0x1d2e4c203a0f4766; BYTE $0x0f // pinsrb xmm9, byte [r14 + r13 + 29], 15 - QUAD $0x1e2e54203a0f4766; BYTE $0x0f // pinsrb xmm10, byte [r14 + r13 + 30], 15 + QUAD $0x1c167c203a0f4566; BYTE $0x0b // pinsrb xmm15, byte [r14 + rdx + 28], 11 + QUAD $0x1d164c203a0f4566; BYTE $0x0b // pinsrb xmm9, byte [r14 + rdx + 29], 11 + QUAD $0x1e1654203a0f4566; BYTE $0x0b // pinsrb xmm10, byte [r14 + rdx + 30], 11 + QUAD $0x1f1674203a0f4166; BYTE $0x0b // pinsrb xmm6, byte [r14 + rdx + 31], 11 + WORD $0x894c; BYTE $0xd8 // mov rax, r11 + QUAD $0x1c1e7c203a0f4766; BYTE $0x0c // pinsrb xmm15, byte [r14 + r11 + 28], 12 + QUAD $0x1d1e4c203a0f4766; BYTE $0x0c // pinsrb xmm9, byte [r14 + r11 + 29], 12 + QUAD $0x1e1e54203a0f4766; BYTE $0x0c // pinsrb xmm10, byte [r14 + r11 + 30], 12 + QUAD $0x1f1e74203a0f4366; BYTE $0x0c // pinsrb xmm6, byte [r14 + r11 + 31], 12 + QUAD $0x1c1e7c203a0f4566; BYTE $0x0d // pinsrb xmm15, byte [r14 + rbx + 28], 13 + QUAD $0x1d1e4c203a0f4566; BYTE $0x0d // pinsrb xmm9, byte [r14 + rbx + 29], 13 + QUAD $0x1e1e54203a0f4566; BYTE $0x0d // pinsrb xmm10, byte [r14 + rbx + 30], 13 + QUAD $0x1f1e74203a0f4166; BYTE $0x0d // pinsrb xmm6, byte [r14 + rbx + 31], 13 + WORD $0x894c; BYTE $0xe8 // mov rax, r13 + QUAD $0x1c2e7c203a0f4766; BYTE $0x0e // pinsrb xmm15, byte [r14 + r13 + 28], 14 + QUAD $0x1d2e4c203a0f4766; BYTE $0x0e // pinsrb xmm9, byte [r14 + r13 + 29], 14 + QUAD $0x1e2e54203a0f4766; BYTE $0x0e // pinsrb xmm10, byte [r14 + r13 + 30], 14 + QUAD $0x1f2e74203a0f4366; BYTE $0x0e // pinsrb xmm6, byte [r14 + r13 + 31], 14 + QUAD $0x1c0e7c203a0f4566; BYTE $0x0f // pinsrb xmm15, byte [r14 + rcx + 28], 15 + QUAD $0x1d0e4c203a0f4566; BYTE $0x0f // pinsrb xmm9, byte [r14 + rcx + 29], 15 + QUAD $0x1e0e54203a0f4566; BYTE $0x0f // pinsrb xmm10, byte [r14 + rcx + 30], 15 LONG $0x740f4566; BYTE $0xfe // pcmpeqb xmm15, xmm14 QUAD $0x000130bddf0f4466; BYTE $0x00 // pandn xmm15, oword 304[rbp] /* [rip + .LCPI5_19] */ LONG $0xeb0f4566; BYTE $0xfb // por xmm15, xmm11 - QUAD $0x1f2e74203a0f4366; BYTE $0x0f // pinsrb xmm6, byte [r14 + r13 + 31], 15 + QUAD $0x1f0e74203a0f4166; BYTE $0x0f // pinsrb xmm6, byte [r14 + rcx + 31], 15 QUAD $0x000160adf80f4466; BYTE $0x00 // psubb xmm13, oword 352[rbp] /* [rip + .LCPI5_22] */ LONG $0xeb0f4566; BYTE $0xfd // por xmm15, xmm13 LONG $0x740f4566; BYTE $0xce // pcmpeqb xmm9, xmm14 @@ -28551,7 +29810,7 @@ LBB5_67: LONG $0xeb0f4166; BYTE $0xf7 // por xmm6, xmm15 LONG $0x6f0f4166; BYTE $0xc0 // movdqa xmm0, xmm8 LONG $0xc6600f66 // punpcklbw xmm0, xmm6 - QUAD $0x000100249c6f0f66; BYTE $0x00 // movdqa xmm3, oword [rsp + 256] + QUAD $0x0000f0249c6f0f66; BYTE $0x00 // movdqa xmm3, oword [rsp + 240] LONG $0xcb6f0f66 // movdqa xmm1, xmm3 QUAD $0x0000c024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 192] LONG $0xcc600f66 // punpcklbw xmm1, xmm4 @@ -28571,23 +29830,23 @@ LBB5_67: LONG $0x147f0ff3; BYTE $0x88 // movdqu oword [rax + 4*rcx], xmm2 LONG $0x10c18348 // add rcx, 16 WORD $0x8948; BYTE $0xc8 // mov rax, rcx - QUAD $0x000000d8248c3b48 // cmp rcx, qword [rsp + 216] - JNE LBB5_67 - QUAD $0x000000f824948b4c // mov r10, qword [rsp + 248] - QUAD $0x000000d824943b4c // cmp r10, qword [rsp + 216] + QUAD $0x000000e8248c3b48 // cmp rcx, qword [rsp + 232] + JNE LBB5_68 + QUAD $0x0000010824948b4c // mov r10, qword [rsp + 264] + QUAD $0x000000e824943b4c // cmp r10, qword [rsp + 232] QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] - JNE LBB5_69 - JMP LBB5_72 + JNE LBB5_70 + JMP LBB5_73 -LBB5_109: +LBB5_110: LONG $0xf8e28349 // and r10, -8 WORD $0x894c; BYTE $0xd0 // mov rax, r10 LONG $0x06e0c148 // shl rax, 6 WORD $0x014c; BYTE $0xf0 // add rax, r14 LONG $0x24448948; BYTE $0x30 // mov qword [rsp + 48], rax + LONG $0x2454894c; BYTE $0x28 // mov qword [rsp + 40], r10 LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] - LONG $0x2454894c; BYTE $0x18 // mov qword [rsp + 24], r10 LONG $0x90048d4a // lea rax, [rax + 4*r10] LONG $0x24448948; BYTE $0x38 // mov qword [rsp + 56], rax LONG $0x6e0f4166; BYTE $0xc3 // movd xmm0, r11d @@ -28596,13 +29855,13 @@ LBB5_109: WORD $0xff31 // xor edi, edi LONG $0xef0f4566; BYTE $0xc9 // pxor xmm9, xmm9 -LBB5_110: +LBB5_111: LONG $0x247c8948; BYTE $0x40 // mov qword [rsp + 64], rdi LONG $0x06e7c148 // shl rdi, 6 WORD $0x8949; BYTE $0xff // mov r15, rdi WORD $0x8948; BYTE $0xfe // mov rsi, rdi + WORD $0x8949; BYTE $0xfc // mov r12, rdi WORD $0x8948; BYTE $0xfa // mov rdx, rdi - WORD $0x8949; BYTE $0xfd // mov r13, rdi WORD $0x8948; BYTE $0xfb // mov rbx, rdi WORD $0x8949; BYTE $0xf9 // mov r9, rdi LONG $0x04b70f41; BYTE $0x3e // movzx eax, word [r14 + rdi] @@ -28620,39 +29879,39 @@ LBB5_110: LONG $0x44b70f41; WORD $0x0c3e // movzx eax, word [r14 + rdi + 12] LONG $0x44b70f45; WORD $0x0e3e // movzx r8d, word [r14 + rdi + 14] LONG $0x54b70f45; WORD $0x103e // movzx r10d, word [r14 + rdi + 16] - LONG $0x64b70f45; WORD $0x123e // movzx r12d, word [r14 + rdi + 18] + LONG $0x6cb70f45; WORD $0x123e // movzx r13d, word [r14 + rdi + 18] LONG $0x4cb70f41; WORD $0x143e // movzx ecx, word [r14 + rdi + 20] - LONG $0x28244c89 // mov dword [rsp + 40], ecx + LONG $0x20244c89 // mov dword [rsp + 32], ecx WORD $0x8948; BYTE $0xf9 // mov rcx, rdi LONG $0x40c98348 // or rcx, 64 LONG $0x80cf8149; WORD $0x0000; BYTE $0x00 // or r15, 128 LONG $0xc0ce8148; WORD $0x0000; BYTE $0x00 // or rsi, 192 - LONG $0x00ca8148; WORD $0x0001; BYTE $0x00 // or rdx, 256 - LONG $0x40cd8149; WORD $0x0001; BYTE $0x00 // or r13, 320 + LONG $0x00cc8149; WORD $0x0001; BYTE $0x00 // or r12, 256 + LONG $0x40ca8148; WORD $0x0001; BYTE $0x00 // or rdx, 320 LONG $0x80cb8148; WORD $0x0001; BYTE $0x00 // or rbx, 384 LONG $0xc40f4166; WORD $0x0e2c; BYTE $0x01 // pinsrw xmm5, word [r14 + rcx], 1 LONG $0xc40f4366; WORD $0x3e2c; BYTE $0x02 // pinsrw xmm5, word [r14 + r15], 2 LONG $0xc40f4166; WORD $0x362c; BYTE $0x03 // pinsrw xmm5, word [r14 + rsi], 3 - LONG $0xc40f4166; WORD $0x162c; BYTE $0x04 // pinsrw xmm5, word [r14 + rdx], 4 - LONG $0xc40f4366; WORD $0x2e2c; BYTE $0x05 // pinsrw xmm5, word [r14 + r13], 5 + LONG $0xc40f4366; WORD $0x262c; BYTE $0x04 // pinsrw xmm5, word [r14 + r12], 4 + LONG $0xc40f4166; WORD $0x162c; BYTE $0x05 // pinsrw xmm5, word [r14 + rdx], 5 LONG $0xc40f4166; WORD $0x1e2c; BYTE $0x06 // pinsrw xmm5, word [r14 + rbx], 6 QUAD $0x01020e44c40f4166 // pinsrw xmm0, word [r14 + rcx + 2], 1 QUAD $0x02023e44c40f4366 // pinsrw xmm0, word [r14 + r15 + 2], 2 QUAD $0x03023644c40f4166 // pinsrw xmm0, word [r14 + rsi + 2], 3 - QUAD $0x04021644c40f4166 // pinsrw xmm0, word [r14 + rdx + 2], 4 - QUAD $0x05022e44c40f4366 // pinsrw xmm0, word [r14 + r13 + 2], 5 + QUAD $0x04022644c40f4366 // pinsrw xmm0, word [r14 + r12 + 2], 4 + QUAD $0x05021644c40f4166 // pinsrw xmm0, word [r14 + rdx + 2], 5 QUAD $0x06021e44c40f4166 // pinsrw xmm0, word [r14 + rbx + 2], 6 LONG $0xc0c98149; WORD $0x0001; BYTE $0x00 // or r9, 448 QUAD $0x07020e44c40f4366 // pinsrw xmm0, word [r14 + r9 + 2], 7 LONG $0xd06e0f66 // movd xmm2, eax LONG $0x44b70f41; WORD $0x163e // movzx eax, word [r14 + rdi + 22] - LONG $0x20244489 // mov dword [rsp + 32], eax + LONG $0x18244489 // mov dword [rsp + 24], eax LONG $0x750f4166; BYTE $0xc3 // pcmpeqw xmm0, xmm11 QUAD $0x01040e4cc40f4166 // pinsrw xmm1, word [r14 + rcx + 4], 1 QUAD $0x02043e4cc40f4366 // pinsrw xmm1, word [r14 + r15 + 4], 2 QUAD $0x0304364cc40f4166 // pinsrw xmm1, word [r14 + rsi + 4], 3 - QUAD $0x0404164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 4], 4 - QUAD $0x05042e4cc40f4366 // pinsrw xmm1, word [r14 + r13 + 4], 5 + QUAD $0x0404264cc40f4366 // pinsrw xmm1, word [r14 + r12 + 4], 4 + QUAD $0x0504164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 4], 5 QUAD $0x06041e4cc40f4166 // pinsrw xmm1, word [r14 + rbx + 4], 6 QUAD $0x07040e4cc40f4366 // pinsrw xmm1, word [r14 + r9 + 4], 7 LONG $0xc0630f66 // packsswb xmm0, xmm0 @@ -28675,8 +29934,8 @@ LBB5_110: QUAD $0x01060e7cc40f4166 // pinsrw xmm7, word [r14 + rcx + 6], 1 QUAD $0x02063e7cc40f4366 // pinsrw xmm7, word [r14 + r15 + 6], 2 QUAD $0x0306367cc40f4166 // pinsrw xmm7, word [r14 + rsi + 6], 3 - QUAD $0x0406167cc40f4166 // pinsrw xmm7, word [r14 + rdx + 6], 4 - QUAD $0x05062e7cc40f4366 // pinsrw xmm7, word [r14 + r13 + 6], 5 + QUAD $0x0406267cc40f4366 // pinsrw xmm7, word [r14 + r12 + 6], 4 + QUAD $0x0506167cc40f4166 // pinsrw xmm7, word [r14 + rdx + 6], 5 QUAD $0x06061e7cc40f4166 // pinsrw xmm7, word [r14 + rbx + 6], 6 QUAD $0x07060e7cc40f4366 // pinsrw xmm7, word [r14 + r9 + 6], 7 LONG $0x750f4166; BYTE $0xfb // pcmpeqw xmm7, xmm11 @@ -28684,8 +29943,8 @@ LBB5_110: QUAD $0x01080e44c40f4566 // pinsrw xmm8, word [r14 + rcx + 8], 1 QUAD $0x02083e44c40f4766 // pinsrw xmm8, word [r14 + r15 + 8], 2 QUAD $0x03083644c40f4566 // pinsrw xmm8, word [r14 + rsi + 8], 3 - QUAD $0x04081644c40f4566 // pinsrw xmm8, word [r14 + rdx + 8], 4 - QUAD $0x05082e44c40f4766 // pinsrw xmm8, word [r14 + r13 + 8], 5 + QUAD $0x04082644c40f4766 // pinsrw xmm8, word [r14 + r12 + 8], 4 + QUAD $0x05081644c40f4566 // pinsrw xmm8, word [r14 + rdx + 8], 5 QUAD $0x06081e44c40f4566 // pinsrw xmm8, word [r14 + rbx + 8], 6 QUAD $0x07080e44c40f4766 // pinsrw xmm8, word [r14 + r9 + 8], 7 LONG $0xddf80f66 // psubb xmm3, xmm5 @@ -28700,13 +29959,13 @@ LBB5_110: QUAD $0x0000b0ad6f0f4466; BYTE $0x00 // movdqa xmm13, oword 176[rbp] /* [rip + .LCPI5_11] */ LONG $0x6f0f4166; BYTE $0xc0 // movdqa xmm0, xmm8 LONG $0x380f4566; WORD $0xe910 // pblendvb xmm13, xmm9, xmm0 - LONG $0x6e0f4166; BYTE $0xf4 // movd xmm6, r12d - LONG $0x64b70f45; WORD $0x1c3e // movzx r12d, word [r14 + rdi + 28] + LONG $0x6e0f4166; BYTE $0xf5 // movd xmm6, r13d + LONG $0x6cb70f45; WORD $0x1c3e // movzx r13d, word [r14 + rdi + 28] QUAD $0x010a0e64c40f4166 // pinsrw xmm4, word [r14 + rcx + 10], 1 QUAD $0x020a3e64c40f4366 // pinsrw xmm4, word [r14 + r15 + 10], 2 QUAD $0x030a3664c40f4166 // pinsrw xmm4, word [r14 + rsi + 10], 3 - QUAD $0x040a1664c40f4166 // pinsrw xmm4, word [r14 + rdx + 10], 4 - QUAD $0x050a2e64c40f4366 // pinsrw xmm4, word [r14 + r13 + 10], 5 + QUAD $0x040a2664c40f4366 // pinsrw xmm4, word [r14 + r12 + 10], 4 + QUAD $0x050a1664c40f4166 // pinsrw xmm4, word [r14 + rdx + 10], 5 QUAD $0x060a1e64c40f4166 // pinsrw xmm4, word [r14 + rbx + 10], 6 QUAD $0x070a0e64c40f4366 // pinsrw xmm4, word [r14 + r9 + 10], 7 LONG $0x750f4166; BYTE $0xe3 // pcmpeqw xmm4, xmm11 @@ -28714,14 +29973,14 @@ LBB5_110: QUAD $0x010c0e54c40f4166 // pinsrw xmm2, word [r14 + rcx + 12], 1 QUAD $0x020c3e54c40f4366 // pinsrw xmm2, word [r14 + r15 + 12], 2 QUAD $0x030c3654c40f4166 // pinsrw xmm2, word [r14 + rsi + 12], 3 - QUAD $0x040c1654c40f4166 // pinsrw xmm2, word [r14 + rdx + 12], 4 - QUAD $0x050c2e54c40f4366 // pinsrw xmm2, word [r14 + r13 + 12], 5 + QUAD $0x040c2654c40f4366 // pinsrw xmm2, word [r14 + r12 + 12], 4 + QUAD $0x050c1654c40f4166 // pinsrw xmm2, word [r14 + rdx + 12], 5 QUAD $0x060c1e54c40f4166 // pinsrw xmm2, word [r14 + rbx + 12], 6 LONG $0xeb0f4466; BYTE $0xe3 // por xmm12, xmm3 QUAD $0x000000c0ad6f0f66 // movdqa xmm5, oword 192[rbp] /* [rip + .LCPI5_12] */ LONG $0xc46f0f66 // movdqa xmm0, xmm4 LONG $0x380f4166; WORD $0xe910 // pblendvb xmm5, xmm9, xmm0 - LONG $0x646e0f66; WORD $0x2824 // movd xmm4, dword [rsp + 40] + LONG $0x646e0f66; WORD $0x2024 // movd xmm4, dword [rsp + 32] LONG $0x54b70f45; WORD $0x1e3e // movzx r10d, word [r14 + rdi + 30] QUAD $0x070c0e54c40f4366 // pinsrw xmm2, word [r14 + r9 + 12], 7 LONG $0x750f4166; BYTE $0xd3 // pcmpeqw xmm2, xmm11 @@ -28730,26 +29989,26 @@ LBB5_110: QUAD $0x0000d0ad6f0f4466; BYTE $0x00 // movdqa xmm13, oword 208[rbp] /* [rip + .LCPI5_13] */ LONG $0xc26f0f66 // movdqa xmm0, xmm2 LONG $0x380f4566; WORD $0xe910 // pblendvb xmm13, xmm9, xmm0 - LONG $0x5c6e0f66; WORD $0x2024 // movd xmm3, dword [rsp + 32] + LONG $0x5c6e0f66; WORD $0x1824 // movd xmm3, dword [rsp + 24] LONG $0x44b70f41; WORD $0x203e // movzx eax, word [r14 + rdi + 32] - LONG $0x20244489 // mov dword [rsp + 32], eax + LONG $0x18244489 // mov dword [rsp + 24], eax QUAD $0x010e0e4cc40f4166 // pinsrw xmm1, word [r14 + rcx + 14], 1 QUAD $0x020e3e4cc40f4366 // pinsrw xmm1, word [r14 + r15 + 14], 2 QUAD $0x030e364cc40f4166 // pinsrw xmm1, word [r14 + rsi + 14], 3 - QUAD $0x040e164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 14], 4 - QUAD $0x050e2e4cc40f4366 // pinsrw xmm1, word [r14 + r13 + 14], 5 + QUAD $0x040e264cc40f4366 // pinsrw xmm1, word [r14 + r12 + 14], 4 + QUAD $0x050e164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 14], 5 QUAD $0x060e1e4cc40f4166 // pinsrw xmm1, word [r14 + rbx + 14], 6 LONG $0xeb0f4466; BYTE $0xed // por xmm13, xmm5 LONG $0x6e0f4166; BYTE $0xd3 // movd xmm2, r11d LONG $0x44b70f41; WORD $0x223e // movzx eax, word [r14 + rdi + 34] - LONG $0x28244489 // mov dword [rsp + 40], eax + LONG $0x20244489 // mov dword [rsp + 32], eax QUAD $0x070e0e4cc40f4366 // pinsrw xmm1, word [r14 + r9 + 14], 7 LONG $0x750f4166; BYTE $0xcb // pcmpeqw xmm1, xmm11 QUAD $0x01120e74c40f4166 // pinsrw xmm6, word [r14 + rcx + 18], 1 QUAD $0x02123e74c40f4366 // pinsrw xmm6, word [r14 + r15 + 18], 2 QUAD $0x03123674c40f4166 // pinsrw xmm6, word [r14 + rsi + 18], 3 - QUAD $0x04121674c40f4166 // pinsrw xmm6, word [r14 + rdx + 18], 4 - QUAD $0x05122e74c40f4366 // pinsrw xmm6, word [r14 + r13 + 18], 5 + QUAD $0x04122674c40f4366 // pinsrw xmm6, word [r14 + r12 + 18], 4 + QUAD $0x05121674c40f4166 // pinsrw xmm6, word [r14 + rdx + 18], 5 QUAD $0x06121e74c40f4166 // pinsrw xmm6, word [r14 + rbx + 18], 6 LONG $0xc9630f66 // packsswb xmm1, xmm1 QUAD $0x07120e74c40f4366 // pinsrw xmm6, word [r14 + r9 + 18], 7 @@ -28768,14 +30027,14 @@ LBB5_110: QUAD $0x01100e7cc40f4166 // pinsrw xmm7, word [r14 + rcx + 16], 1 QUAD $0x02103e7cc40f4366 // pinsrw xmm7, word [r14 + r15 + 16], 2 QUAD $0x0310367cc40f4166 // pinsrw xmm7, word [r14 + rsi + 16], 3 - QUAD $0x0410167cc40f4166 // pinsrw xmm7, word [r14 + rdx + 16], 4 - QUAD $0x05102e7cc40f4366 // pinsrw xmm7, word [r14 + r13 + 16], 5 + QUAD $0x0410267cc40f4366 // pinsrw xmm7, word [r14 + r12 + 16], 4 + QUAD $0x0510167cc40f4166 // pinsrw xmm7, word [r14 + rdx + 16], 5 QUAD $0x06101e7cc40f4166 // pinsrw xmm7, word [r14 + rbx + 16], 6 QUAD $0x01140e64c40f4166 // pinsrw xmm4, word [r14 + rcx + 20], 1 QUAD $0x02143e64c40f4366 // pinsrw xmm4, word [r14 + r15 + 20], 2 QUAD $0x03143664c40f4166 // pinsrw xmm4, word [r14 + rsi + 20], 3 - QUAD $0x04141664c40f4166 // pinsrw xmm4, word [r14 + rdx + 20], 4 - QUAD $0x05142e64c40f4366 // pinsrw xmm4, word [r14 + r13 + 20], 5 + QUAD $0x04142664c40f4366 // pinsrw xmm4, word [r14 + r12 + 20], 4 + QUAD $0x05141664c40f4166 // pinsrw xmm4, word [r14 + rdx + 20], 5 QUAD $0x06141e64c40f4166 // pinsrw xmm4, word [r14 + rbx + 20], 6 QUAD $0x07140e64c40f4366 // pinsrw xmm4, word [r14 + r9 + 20], 7 LONG $0x750f4166; BYTE $0xe3 // pcmpeqw xmm4, xmm11 @@ -28783,8 +30042,8 @@ LBB5_110: LONG $0xeb0f4566; BYTE $0xe5 // por xmm12, xmm13 LONG $0xc46f0f66 // movdqa xmm0, xmm4 LONG $0x380f4566; WORD $0xf910 // pblendvb xmm15, xmm9, xmm0 - LONG $0x6e0f4166; BYTE $0xe4 // movd xmm4, r12d - LONG $0x64b70f45; WORD $0x263e // movzx r12d, word [r14 + rdi + 38] + LONG $0x6e0f4166; BYTE $0xe5 // movd xmm4, r13d + LONG $0x6cb70f45; WORD $0x263e // movzx r13d, word [r14 + rdi + 38] QUAD $0x07100e7cc40f4366 // pinsrw xmm7, word [r14 + r9 + 16], 7 LONG $0x750f4166; BYTE $0xfb // pcmpeqw xmm7, xmm11 QUAD $0x00000160bdef0f66 // pxor xmm7, oword 352[rbp] /* [rip + .LCPI5_22] */ @@ -28792,8 +30051,8 @@ LBB5_110: QUAD $0x01160e5cc40f4166 // pinsrw xmm3, word [r14 + rcx + 22], 1 QUAD $0x02163e5cc40f4366 // pinsrw xmm3, word [r14 + r15 + 22], 2 QUAD $0x0316365cc40f4166 // pinsrw xmm3, word [r14 + rsi + 22], 3 - QUAD $0x0416165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 22], 4 - QUAD $0x05162e5cc40f4366 // pinsrw xmm3, word [r14 + r13 + 22], 5 + QUAD $0x0416265cc40f4366 // pinsrw xmm3, word [r14 + r12 + 22], 4 + QUAD $0x0516165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 22], 5 QUAD $0x06161e5cc40f4166 // pinsrw xmm3, word [r14 + rbx + 22], 6 QUAD $0x07160e5cc40f4366 // pinsrw xmm3, word [r14 + r9 + 22], 7 LONG $0x750f4166; BYTE $0xdb // pcmpeqw xmm3, xmm11 @@ -28801,8 +30060,8 @@ LBB5_110: QUAD $0x01180e54c40f4166 // pinsrw xmm2, word [r14 + rcx + 24], 1 QUAD $0x02183e54c40f4366 // pinsrw xmm2, word [r14 + r15 + 24], 2 QUAD $0x03183654c40f4166 // pinsrw xmm2, word [r14 + rsi + 24], 3 - QUAD $0x04181654c40f4166 // pinsrw xmm2, word [r14 + rdx + 24], 4 - QUAD $0x05182e54c40f4366 // pinsrw xmm2, word [r14 + r13 + 24], 5 + QUAD $0x04182654c40f4366 // pinsrw xmm2, word [r14 + r12 + 24], 4 + QUAD $0x05181654c40f4166 // pinsrw xmm2, word [r14 + rdx + 24], 5 QUAD $0x06181e54c40f4166 // pinsrw xmm2, word [r14 + rbx + 24], 6 QUAD $0x07180e54c40f4366 // pinsrw xmm2, word [r14 + r9 + 24], 7 LONG $0xf80f4466; BYTE $0xc7 // psubb xmm8, xmm7 @@ -28817,13 +30076,13 @@ LBB5_110: QUAD $0x0000b0ad6f0f4466; BYTE $0x00 // movdqa xmm13, oword 176[rbp] /* [rip + .LCPI5_11] */ LONG $0xc26f0f66 // movdqa xmm0, xmm2 LONG $0x380f4566; WORD $0xe910 // pblendvb xmm13, xmm9, xmm0 - LONG $0x7c6e0f66; WORD $0x2024 // movd xmm7, dword [rsp + 32] + LONG $0x7c6e0f66; WORD $0x1824 // movd xmm7, dword [rsp + 24] LONG $0x54b70f45; WORD $0x2a3e // movzx r10d, word [r14 + rdi + 42] QUAD $0x011a0e4cc40f4166 // pinsrw xmm1, word [r14 + rcx + 26], 1 QUAD $0x021a3e4cc40f4366 // pinsrw xmm1, word [r14 + r15 + 26], 2 QUAD $0x031a364cc40f4166 // pinsrw xmm1, word [r14 + rsi + 26], 3 - QUAD $0x041a164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 26], 4 - QUAD $0x051a2e4cc40f4366 // pinsrw xmm1, word [r14 + r13 + 26], 5 + QUAD $0x041a264cc40f4366 // pinsrw xmm1, word [r14 + r12 + 26], 4 + QUAD $0x051a164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 26], 5 QUAD $0x061a1e4cc40f4166 // pinsrw xmm1, word [r14 + rbx + 26], 6 QUAD $0x071a0e4cc40f4366 // pinsrw xmm1, word [r14 + r9 + 26], 7 LONG $0x750f4166; BYTE $0xcb // pcmpeqw xmm1, xmm11 @@ -28831,17 +30090,17 @@ LBB5_110: QUAD $0x011c0e64c40f4166 // pinsrw xmm4, word [r14 + rcx + 28], 1 QUAD $0x021c3e64c40f4366 // pinsrw xmm4, word [r14 + r15 + 28], 2 QUAD $0x031c3664c40f4166 // pinsrw xmm4, word [r14 + rsi + 28], 3 - QUAD $0x041c1664c40f4166 // pinsrw xmm4, word [r14 + rdx + 28], 4 - QUAD $0x051c2e64c40f4366 // pinsrw xmm4, word [r14 + r13 + 28], 5 + QUAD $0x041c2664c40f4366 // pinsrw xmm4, word [r14 + r12 + 28], 4 + QUAD $0x051c1664c40f4166 // pinsrw xmm4, word [r14 + rdx + 28], 5 QUAD $0x061c1e64c40f4166 // pinsrw xmm4, word [r14 + rbx + 28], 6 LONG $0xeb0f4566; BYTE $0xf0 // por xmm14, xmm8 QUAD $0x0000c0bd6f0f4466; BYTE $0x00 // movdqa xmm15, oword 192[rbp] /* [rip + .LCPI5_12] */ LONG $0x6f0f4166; BYTE $0xef // movdqa xmm5, xmm15 LONG $0xc16f0f66 // movdqa xmm0, xmm1 LONG $0x380f4166; WORD $0xe910 // pblendvb xmm5, xmm9, xmm0 - LONG $0x546e0f66; WORD $0x2824 // movd xmm2, dword [rsp + 40] + LONG $0x546e0f66; WORD $0x2024 // movd xmm2, dword [rsp + 32] LONG $0x44b70f41; WORD $0x2c3e // movzx eax, word [r14 + rdi + 44] - LONG $0x20244489 // mov dword [rsp + 32], eax + LONG $0x18244489 // mov dword [rsp + 24], eax QUAD $0x071c0e64c40f4366 // pinsrw xmm4, word [r14 + r9 + 28], 7 LONG $0x750f4166; BYTE $0xe3 // pcmpeqw xmm4, xmm11 LONG $0xe4630f66 // packsswb xmm4, xmm4 @@ -28854,20 +30113,20 @@ LBB5_110: QUAD $0x011e0e5cc40f4166 // pinsrw xmm3, word [r14 + rcx + 30], 1 QUAD $0x021e3e5cc40f4366 // pinsrw xmm3, word [r14 + r15 + 30], 2 QUAD $0x031e365cc40f4166 // pinsrw xmm3, word [r14 + rsi + 30], 3 - QUAD $0x041e165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 30], 4 - QUAD $0x051e2e5cc40f4366 // pinsrw xmm3, word [r14 + r13 + 30], 5 + QUAD $0x041e265cc40f4366 // pinsrw xmm3, word [r14 + r12 + 30], 4 + QUAD $0x051e165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 30], 5 QUAD $0x061e1e5cc40f4166 // pinsrw xmm3, word [r14 + rbx + 30], 6 LONG $0xf5eb0f66 // por xmm6, xmm5 - LONG $0x6e0f4166; BYTE $0xcc // movd xmm1, r12d + LONG $0x6e0f4166; BYTE $0xcd // movd xmm1, r13d LONG $0x44b70f41; WORD $0x303e // movzx eax, word [r14 + rdi + 48] - LONG $0x28244489 // mov dword [rsp + 40], eax + LONG $0x20244489 // mov dword [rsp + 32], eax QUAD $0x071e0e5cc40f4366 // pinsrw xmm3, word [r14 + r9 + 30], 7 LONG $0x750f4166; BYTE $0xdb // pcmpeqw xmm3, xmm11 QUAD $0x01220e54c40f4166 // pinsrw xmm2, word [r14 + rcx + 34], 1 QUAD $0x02223e54c40f4366 // pinsrw xmm2, word [r14 + r15 + 34], 2 QUAD $0x03223654c40f4166 // pinsrw xmm2, word [r14 + rsi + 34], 3 - QUAD $0x04221654c40f4166 // pinsrw xmm2, word [r14 + rdx + 34], 4 - QUAD $0x05222e54c40f4366 // pinsrw xmm2, word [r14 + r13 + 34], 5 + QUAD $0x04222654c40f4366 // pinsrw xmm2, word [r14 + r12 + 34], 4 + QUAD $0x05221654c40f4166 // pinsrw xmm2, word [r14 + rdx + 34], 5 QUAD $0x06221e54c40f4166 // pinsrw xmm2, word [r14 + rbx + 34], 6 LONG $0xdb630f66 // packsswb xmm3, xmm3 QUAD $0x07220e54c40f4366 // pinsrw xmm2, word [r14 + r9 + 34], 7 @@ -28881,18 +30140,18 @@ LBB5_110: LONG $0xc26f0f66 // movdqa xmm0, xmm2 LONG $0x380f4566; WORD $0xc110 // pblendvb xmm8, xmm9, xmm0 LONG $0x6e0f4166; BYTE $0xd0 // movd xmm2, r8d - LONG $0x64b70f45; WORD $0x323e // movzx r12d, word [r14 + rdi + 50] + LONG $0x6cb70f45; WORD $0x323e // movzx r13d, word [r14 + rdi + 50] QUAD $0x01200e7cc40f4166 // pinsrw xmm7, word [r14 + rcx + 32], 1 QUAD $0x02203e7cc40f4366 // pinsrw xmm7, word [r14 + r15 + 32], 2 QUAD $0x0320367cc40f4166 // pinsrw xmm7, word [r14 + rsi + 32], 3 - QUAD $0x0420167cc40f4166 // pinsrw xmm7, word [r14 + rdx + 32], 4 - QUAD $0x05202e7cc40f4366 // pinsrw xmm7, word [r14 + r13 + 32], 5 + QUAD $0x0420267cc40f4366 // pinsrw xmm7, word [r14 + r12 + 32], 4 + QUAD $0x0520167cc40f4166 // pinsrw xmm7, word [r14 + rdx + 32], 5 QUAD $0x06201e7cc40f4166 // pinsrw xmm7, word [r14 + rbx + 32], 6 QUAD $0x01240e64c40f4166 // pinsrw xmm4, word [r14 + rcx + 36], 1 QUAD $0x02243e64c40f4366 // pinsrw xmm4, word [r14 + r15 + 36], 2 QUAD $0x03243664c40f4166 // pinsrw xmm4, word [r14 + rsi + 36], 3 - QUAD $0x04241664c40f4166 // pinsrw xmm4, word [r14 + rdx + 36], 4 - QUAD $0x05242e64c40f4366 // pinsrw xmm4, word [r14 + r13 + 36], 5 + QUAD $0x04242664c40f4366 // pinsrw xmm4, word [r14 + r12 + 36], 4 + QUAD $0x05241664c40f4166 // pinsrw xmm4, word [r14 + rdx + 36], 5 QUAD $0x06241e64c40f4166 // pinsrw xmm4, word [r14 + rbx + 36], 6 QUAD $0x07240e64c40f4366 // pinsrw xmm4, word [r14 + r9 + 36], 7 LONG $0x750f4166; BYTE $0xe3 // pcmpeqw xmm4, xmm11 @@ -28911,8 +30170,8 @@ LBB5_110: QUAD $0x01260e4cc40f4166 // pinsrw xmm1, word [r14 + rcx + 38], 1 QUAD $0x02263e4cc40f4366 // pinsrw xmm1, word [r14 + r15 + 38], 2 QUAD $0x0326364cc40f4166 // pinsrw xmm1, word [r14 + rsi + 38], 3 - QUAD $0x0426164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 38], 4 - QUAD $0x05262e4cc40f4366 // pinsrw xmm1, word [r14 + r13 + 38], 5 + QUAD $0x0426264cc40f4366 // pinsrw xmm1, word [r14 + r12 + 38], 4 + QUAD $0x0526164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 38], 5 QUAD $0x06261e4cc40f4166 // pinsrw xmm1, word [r14 + rbx + 38], 6 QUAD $0x07260e4cc40f4366 // pinsrw xmm1, word [r14 + r9 + 38], 7 LONG $0x750f4166; BYTE $0xcb // pcmpeqw xmm1, xmm11 @@ -28920,15 +30179,15 @@ LBB5_110: QUAD $0x01280e54c40f4166 // pinsrw xmm2, word [r14 + rcx + 40], 1 QUAD $0x02283e54c40f4366 // pinsrw xmm2, word [r14 + r15 + 40], 2 QUAD $0x03283654c40f4166 // pinsrw xmm2, word [r14 + rsi + 40], 3 - QUAD $0x04281654c40f4166 // pinsrw xmm2, word [r14 + rdx + 40], 4 - QUAD $0x05282e54c40f4366 // pinsrw xmm2, word [r14 + r13 + 40], 5 + QUAD $0x04282654c40f4366 // pinsrw xmm2, word [r14 + r12 + 40], 4 + QUAD $0x05281654c40f4166 // pinsrw xmm2, word [r14 + rdx + 40], 5 QUAD $0x06281e54c40f4166 // pinsrw xmm2, word [r14 + rbx + 40], 6 QUAD $0x07280e54c40f4366 // pinsrw xmm2, word [r14 + r9 + 40], 7 LONG $0xf80f4466; BYTE $0xc7 // psubb xmm8, xmm7 QUAD $0x000000a0ad6f0f66 // movdqa xmm5, oword 160[rbp] /* [rip + .LCPI5_10] */ LONG $0xc16f0f66 // movdqa xmm0, xmm1 LONG $0x380f4166; WORD $0xe910 // pblendvb xmm5, xmm9, xmm0 - LONG $0x4c6e0f66; WORD $0x2024 // movd xmm1, dword [rsp + 32] + LONG $0x4c6e0f66; WORD $0x1824 // movd xmm1, dword [rsp + 24] LONG $0x44b70f45; WORD $0x363e // movzx r8d, word [r14 + rdi + 54] LONG $0x750f4166; BYTE $0xd3 // pcmpeqw xmm2, xmm11 LONG $0xd2630f66 // packsswb xmm2, xmm2 @@ -28941,8 +30200,8 @@ LBB5_110: QUAD $0x012a0e5cc40f4166 // pinsrw xmm3, word [r14 + rcx + 42], 1 QUAD $0x022a3e5cc40f4366 // pinsrw xmm3, word [r14 + r15 + 42], 2 QUAD $0x032a365cc40f4166 // pinsrw xmm3, word [r14 + rsi + 42], 3 - QUAD $0x042a165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 42], 4 - QUAD $0x052a2e5cc40f4366 // pinsrw xmm3, word [r14 + r13 + 42], 5 + QUAD $0x042a265cc40f4366 // pinsrw xmm3, word [r14 + r12 + 42], 4 + QUAD $0x052a165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 42], 5 QUAD $0x062a1e5cc40f4166 // pinsrw xmm3, word [r14 + rbx + 42], 6 QUAD $0x072a0e5cc40f4366 // pinsrw xmm3, word [r14 + r9 + 42], 7 LONG $0x750f4166; BYTE $0xdb // pcmpeqw xmm3, xmm11 @@ -28950,14 +30209,14 @@ LBB5_110: QUAD $0x012c0e4cc40f4166 // pinsrw xmm1, word [r14 + rcx + 44], 1 QUAD $0x022c3e4cc40f4366 // pinsrw xmm1, word [r14 + r15 + 44], 2 QUAD $0x032c364cc40f4166 // pinsrw xmm1, word [r14 + rsi + 44], 3 - QUAD $0x042c164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 44], 4 - QUAD $0x052c2e4cc40f4366 // pinsrw xmm1, word [r14 + r13 + 44], 5 + QUAD $0x042c264cc40f4366 // pinsrw xmm1, word [r14 + r12 + 44], 4 + QUAD $0x052c164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 44], 5 QUAD $0x062c1e4cc40f4166 // pinsrw xmm1, word [r14 + rbx + 44], 6 LONG $0xeb0f4166; BYTE $0xe8 // por xmm5, xmm8 LONG $0x6f0f4166; BYTE $0xd7 // movdqa xmm2, xmm15 LONG $0xc36f0f66 // movdqa xmm0, xmm3 LONG $0x380f4166; WORD $0xd110 // pblendvb xmm2, xmm9, xmm0 - LONG $0x7c6e0f66; WORD $0x2824 // movd xmm7, dword [rsp + 40] + LONG $0x7c6e0f66; WORD $0x2024 // movd xmm7, dword [rsp + 32] LONG $0x5cb70f45; WORD $0x3a3e // movzx r11d, word [r14 + rdi + 58] QUAD $0x072c0e4cc40f4366 // pinsrw xmm1, word [r14 + r9 + 44], 7 LONG $0x750f4166; BYTE $0xcb // pcmpeqw xmm1, xmm11 @@ -28967,15 +30226,15 @@ LBB5_110: LONG $0x6f0f4166; BYTE $0xf7 // movdqa xmm6, xmm15 LONG $0xc16f0f66 // movdqa xmm0, xmm1 LONG $0x380f4166; WORD $0xf110 // pblendvb xmm6, xmm9, xmm0 - LONG $0x6e0f4166; BYTE $0xcc // movd xmm1, r12d - LONG $0x64b70f45; WORD $0x3c3e // movzx r12d, word [r14 + rdi + 60] + LONG $0x6e0f4166; BYTE $0xcd // movd xmm1, r13d + LONG $0x6cb70f45; WORD $0x3c3e // movzx r13d, word [r14 + rdi + 60] LONG $0xf2eb0f66 // por xmm6, xmm2 LONG $0x6e0f4166; BYTE $0xd2 // movd xmm2, r10d QUAD $0x012e0e64c40f4166 // pinsrw xmm4, word [r14 + rcx + 46], 1 QUAD $0x022e3e64c40f4366 // pinsrw xmm4, word [r14 + r15 + 46], 2 QUAD $0x032e3664c40f4166 // pinsrw xmm4, word [r14 + rsi + 46], 3 - QUAD $0x042e1664c40f4166 // pinsrw xmm4, word [r14 + rdx + 46], 4 - QUAD $0x052e2e64c40f4366 // pinsrw xmm4, word [r14 + r13 + 46], 5 + QUAD $0x042e2664c40f4366 // pinsrw xmm4, word [r14 + r12 + 46], 4 + QUAD $0x052e1664c40f4166 // pinsrw xmm4, word [r14 + rdx + 46], 5 QUAD $0x062e1e64c40f4166 // pinsrw xmm4, word [r14 + rbx + 46], 6 QUAD $0x072e0e64c40f4366 // pinsrw xmm4, word [r14 + r9 + 46], 7 LONG $0x750f4166; BYTE $0xe3 // pcmpeqw xmm4, xmm11 @@ -28988,8 +30247,8 @@ LBB5_110: QUAD $0x01320e4cc40f4166 // pinsrw xmm1, word [r14 + rcx + 50], 1 QUAD $0x02323e4cc40f4366 // pinsrw xmm1, word [r14 + r15 + 50], 2 QUAD $0x0332364cc40f4166 // pinsrw xmm1, word [r14 + rsi + 50], 3 - QUAD $0x0432164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 50], 4 - QUAD $0x05322e4cc40f4366 // pinsrw xmm1, word [r14 + r13 + 50], 5 + QUAD $0x0432264cc40f4366 // pinsrw xmm1, word [r14 + r12 + 50], 4 + QUAD $0x0532164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 50], 5 QUAD $0x06321e4cc40f4166 // pinsrw xmm1, word [r14 + rbx + 50], 6 QUAD $0x07320e4cc40f4366 // pinsrw xmm1, word [r14 + r9 + 50], 7 LONG $0x750f4166; BYTE $0xcb // pcmpeqw xmm1, xmm11 @@ -29002,8 +30261,8 @@ LBB5_110: QUAD $0x01300e7cc40f4166 // pinsrw xmm7, word [r14 + rcx + 48], 1 QUAD $0x02303e7cc40f4366 // pinsrw xmm7, word [r14 + r15 + 48], 2 QUAD $0x0330367cc40f4166 // pinsrw xmm7, word [r14 + rsi + 48], 3 - QUAD $0x0430167cc40f4166 // pinsrw xmm7, word [r14 + rdx + 48], 4 - QUAD $0x05302e7cc40f4366 // pinsrw xmm7, word [r14 + r13 + 48], 5 + QUAD $0x0430267cc40f4366 // pinsrw xmm7, word [r14 + r12 + 48], 4 + QUAD $0x0530167cc40f4166 // pinsrw xmm7, word [r14 + rdx + 48], 5 QUAD $0x06301e7cc40f4166 // pinsrw xmm7, word [r14 + rbx + 48], 6 QUAD $0x07300e7cc40f4366 // pinsrw xmm7, word [r14 + r9 + 48], 7 LONG $0x750f4166; BYTE $0xfb // pcmpeqw xmm7, xmm11 @@ -29011,8 +30270,8 @@ LBB5_110: QUAD $0x01340e54c40f4166 // pinsrw xmm2, word [r14 + rcx + 52], 1 QUAD $0x02343e54c40f4366 // pinsrw xmm2, word [r14 + r15 + 52], 2 QUAD $0x03343654c40f4166 // pinsrw xmm2, word [r14 + rsi + 52], 3 - QUAD $0x04341654c40f4166 // pinsrw xmm2, word [r14 + rdx + 52], 4 - QUAD $0x05342e54c40f4366 // pinsrw xmm2, word [r14 + r13 + 52], 5 + QUAD $0x04342654c40f4366 // pinsrw xmm2, word [r14 + r12 + 52], 4 + QUAD $0x05341654c40f4166 // pinsrw xmm2, word [r14 + rdx + 52], 5 QUAD $0x06341e54c40f4166 // pinsrw xmm2, word [r14 + rbx + 52], 6 LONG $0xff630f66 // packsswb xmm7, xmm7 QUAD $0x07340e54c40f4366 // pinsrw xmm2, word [r14 + r9 + 52], 7 @@ -29020,8 +30279,8 @@ LBB5_110: QUAD $0x01360e5cc40f4166 // pinsrw xmm3, word [r14 + rcx + 54], 1 QUAD $0x02363e5cc40f4366 // pinsrw xmm3, word [r14 + r15 + 54], 2 QUAD $0x0336365cc40f4166 // pinsrw xmm3, word [r14 + rsi + 54], 3 - QUAD $0x0436165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 54], 4 - QUAD $0x05362e5cc40f4366 // pinsrw xmm3, word [r14 + r13 + 54], 5 + QUAD $0x0436265cc40f4366 // pinsrw xmm3, word [r14 + r12 + 54], 4 + QUAD $0x0536165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 54], 5 QUAD $0x06361e5cc40f4166 // pinsrw xmm3, word [r14 + rbx + 54], 6 LONG $0xd2630f66 // packsswb xmm2, xmm2 QUAD $0x07360e5cc40f4366 // pinsrw xmm3, word [r14 + r9 + 54], 7 @@ -29029,8 +30288,8 @@ LBB5_110: QUAD $0x01380e4cc40f4166 // pinsrw xmm1, word [r14 + rcx + 56], 1 QUAD $0x02383e4cc40f4366 // pinsrw xmm1, word [r14 + r15 + 56], 2 QUAD $0x0338364cc40f4166 // pinsrw xmm1, word [r14 + rsi + 56], 3 - QUAD $0x0438164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 56], 4 - QUAD $0x05382e4cc40f4366 // pinsrw xmm1, word [r14 + r13 + 56], 5 + QUAD $0x0438264cc40f4366 // pinsrw xmm1, word [r14 + r12 + 56], 4 + QUAD $0x0538164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 56], 5 QUAD $0x06381e4cc40f4166 // pinsrw xmm1, word [r14 + rbx + 56], 6 LONG $0xdb630f66 // packsswb xmm3, xmm3 QUAD $0x07380e4cc40f4366 // pinsrw xmm1, word [r14 + r9 + 56], 7 @@ -29046,20 +30305,20 @@ LBB5_110: QUAD $0x013a0e54c40f4166 // pinsrw xmm2, word [r14 + rcx + 58], 1 QUAD $0x023a3e54c40f4366 // pinsrw xmm2, word [r14 + r15 + 58], 2 QUAD $0x033a3654c40f4166 // pinsrw xmm2, word [r14 + rsi + 58], 3 - QUAD $0x043a1654c40f4166 // pinsrw xmm2, word [r14 + rdx + 58], 4 - QUAD $0x053a2e54c40f4366 // pinsrw xmm2, word [r14 + r13 + 58], 5 + QUAD $0x043a2654c40f4366 // pinsrw xmm2, word [r14 + r12 + 58], 4 + QUAD $0x053a1654c40f4166 // pinsrw xmm2, word [r14 + rdx + 58], 5 QUAD $0x063a1e54c40f4166 // pinsrw xmm2, word [r14 + rbx + 58], 6 QUAD $0x073a0e54c40f4366 // pinsrw xmm2, word [r14 + r9 + 58], 7 LONG $0xc9630f66 // packsswb xmm1, xmm1 LONG $0x750f4166; BYTE $0xd3 // pcmpeqw xmm2, xmm11 LONG $0xf5eb0f66 // por xmm6, xmm5 - LONG $0x6e0f4166; BYTE $0xdc // movd xmm3, r12d + LONG $0x6e0f4166; BYTE $0xdd // movd xmm3, r13d LONG $0x24448b4c; BYTE $0x08 // mov r8, qword [rsp + 8] QUAD $0x013c0e5cc40f4166 // pinsrw xmm3, word [r14 + rcx + 60], 1 QUAD $0x023c3e5cc40f4366 // pinsrw xmm3, word [r14 + r15 + 60], 2 QUAD $0x033c365cc40f4166 // pinsrw xmm3, word [r14 + rsi + 60], 3 - QUAD $0x043c165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 60], 4 - QUAD $0x053c2e5cc40f4366 // pinsrw xmm3, word [r14 + r13 + 60], 5 + QUAD $0x043c265cc40f4366 // pinsrw xmm3, word [r14 + r12 + 60], 4 + QUAD $0x053c165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 60], 5 QUAD $0x063c1e5cc40f4166 // pinsrw xmm3, word [r14 + rbx + 60], 6 LONG $0xd2630f66 // packsswb xmm2, xmm2 QUAD $0x073c0e5cc40f4366 // pinsrw xmm3, word [r14 + r9 + 60], 7 @@ -29082,8 +30341,8 @@ LBB5_110: QUAD $0x013e0e44c40f4166 // pinsrw xmm0, word [r14 + rcx + 62], 1 QUAD $0x023e3e44c40f4366 // pinsrw xmm0, word [r14 + r15 + 62], 2 QUAD $0x033e3644c40f4166 // pinsrw xmm0, word [r14 + rsi + 62], 3 - QUAD $0x043e1644c40f4166 // pinsrw xmm0, word [r14 + rdx + 62], 4 - QUAD $0x053e2e44c40f4366 // pinsrw xmm0, word [r14 + r13 + 62], 5 + QUAD $0x043e2644c40f4366 // pinsrw xmm0, word [r14 + r12 + 62], 4 + QUAD $0x053e1644c40f4166 // pinsrw xmm0, word [r14 + rdx + 62], 5 QUAD $0x063e1e44c40f4166 // pinsrw xmm0, word [r14 + rbx + 62], 6 QUAD $0x073e0e44c40f4366 // pinsrw xmm0, word [r14 + r9 + 62], 7 LONG $0x750f4166; BYTE $0xc3 // pcmpeqw xmm0, xmm11 @@ -29108,25 +30367,25 @@ LBB5_110: LONG $0x7f0f41f3; WORD $0x8844; BYTE $0x10 // movdqu oword [r8 + 4*rcx + 16], xmm0 LONG $0x08c18348 // add rcx, 8 WORD $0x8948; BYTE $0xcf // mov rdi, rcx - LONG $0x244c3b48; BYTE $0x18 // cmp rcx, qword [rsp + 24] - JNE LBB5_110 - QUAD $0x000000e024948b4c // mov r10, qword [rsp + 224] - LONG $0x24543b4c; BYTE $0x18 // cmp r10, qword [rsp + 24] + LONG $0x244c3b48; BYTE $0x28 // cmp rcx, qword [rsp + 40] + JNE LBB5_111 + QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] + LONG $0x24543b4c; BYTE $0x28 // cmp r10, qword [rsp + 40] QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] LONG $0x245c8b44; BYTE $0x10 // mov r11d, dword [rsp + 16] LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - JNE LBB5_112 - JMP LBB5_115 + JNE LBB5_113 + JMP LBB5_116 -LBB5_132: +LBB5_133: LONG $0xf8e28349 // and r10, -8 WORD $0x894c; BYTE $0xd0 // mov rax, r10 LONG $0x06e0c148 // shl rax, 6 WORD $0x014c; BYTE $0xf0 // add rax, r14 LONG $0x24448948; BYTE $0x30 // mov qword [rsp + 48], rax + LONG $0x2454894c; BYTE $0x28 // mov qword [rsp + 40], r10 LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] - LONG $0x2454894c; BYTE $0x18 // mov qword [rsp + 24], r10 LONG $0x90048d4a // lea rax, [rax + 4*r10] LONG $0x24448948; BYTE $0x38 // mov qword [rsp + 56], rax LONG $0x6e0f4166; BYTE $0xc3 // movd xmm0, r11d @@ -29135,13 +30394,13 @@ LBB5_132: WORD $0xff31 // xor edi, edi LONG $0xef0f4566; BYTE $0xc9 // pxor xmm9, xmm9 -LBB5_133: +LBB5_134: LONG $0x247c8948; BYTE $0x40 // mov qword [rsp + 64], rdi LONG $0x06e7c148 // shl rdi, 6 WORD $0x8949; BYTE $0xff // mov r15, rdi WORD $0x8948; BYTE $0xfe // mov rsi, rdi + WORD $0x8949; BYTE $0xfc // mov r12, rdi WORD $0x8948; BYTE $0xfa // mov rdx, rdi - WORD $0x8949; BYTE $0xfd // mov r13, rdi WORD $0x8948; BYTE $0xfb // mov rbx, rdi WORD $0x8949; BYTE $0xf9 // mov r9, rdi LONG $0x04b70f41; BYTE $0x3e // movzx eax, word [r14 + rdi] @@ -29159,39 +30418,39 @@ LBB5_133: LONG $0x44b70f41; WORD $0x0c3e // movzx eax, word [r14 + rdi + 12] LONG $0x44b70f45; WORD $0x0e3e // movzx r8d, word [r14 + rdi + 14] LONG $0x54b70f45; WORD $0x103e // movzx r10d, word [r14 + rdi + 16] - LONG $0x64b70f45; WORD $0x123e // movzx r12d, word [r14 + rdi + 18] + LONG $0x6cb70f45; WORD $0x123e // movzx r13d, word [r14 + rdi + 18] LONG $0x4cb70f41; WORD $0x143e // movzx ecx, word [r14 + rdi + 20] - LONG $0x28244c89 // mov dword [rsp + 40], ecx + LONG $0x20244c89 // mov dword [rsp + 32], ecx WORD $0x8948; BYTE $0xf9 // mov rcx, rdi LONG $0x40c98348 // or rcx, 64 LONG $0x80cf8149; WORD $0x0000; BYTE $0x00 // or r15, 128 LONG $0xc0ce8148; WORD $0x0000; BYTE $0x00 // or rsi, 192 - LONG $0x00ca8148; WORD $0x0001; BYTE $0x00 // or rdx, 256 - LONG $0x40cd8149; WORD $0x0001; BYTE $0x00 // or r13, 320 + LONG $0x00cc8149; WORD $0x0001; BYTE $0x00 // or r12, 256 + LONG $0x40ca8148; WORD $0x0001; BYTE $0x00 // or rdx, 320 LONG $0x80cb8148; WORD $0x0001; BYTE $0x00 // or rbx, 384 LONG $0xc40f4166; WORD $0x0e2c; BYTE $0x01 // pinsrw xmm5, word [r14 + rcx], 1 LONG $0xc40f4366; WORD $0x3e2c; BYTE $0x02 // pinsrw xmm5, word [r14 + r15], 2 LONG $0xc40f4166; WORD $0x362c; BYTE $0x03 // pinsrw xmm5, word [r14 + rsi], 3 - LONG $0xc40f4166; WORD $0x162c; BYTE $0x04 // pinsrw xmm5, word [r14 + rdx], 4 - LONG $0xc40f4366; WORD $0x2e2c; BYTE $0x05 // pinsrw xmm5, word [r14 + r13], 5 + LONG $0xc40f4366; WORD $0x262c; BYTE $0x04 // pinsrw xmm5, word [r14 + r12], 4 + LONG $0xc40f4166; WORD $0x162c; BYTE $0x05 // pinsrw xmm5, word [r14 + rdx], 5 LONG $0xc40f4166; WORD $0x1e2c; BYTE $0x06 // pinsrw xmm5, word [r14 + rbx], 6 QUAD $0x01020e44c40f4166 // pinsrw xmm0, word [r14 + rcx + 2], 1 QUAD $0x02023e44c40f4366 // pinsrw xmm0, word [r14 + r15 + 2], 2 QUAD $0x03023644c40f4166 // pinsrw xmm0, word [r14 + rsi + 2], 3 - QUAD $0x04021644c40f4166 // pinsrw xmm0, word [r14 + rdx + 2], 4 - QUAD $0x05022e44c40f4366 // pinsrw xmm0, word [r14 + r13 + 2], 5 + QUAD $0x04022644c40f4366 // pinsrw xmm0, word [r14 + r12 + 2], 4 + QUAD $0x05021644c40f4166 // pinsrw xmm0, word [r14 + rdx + 2], 5 QUAD $0x06021e44c40f4166 // pinsrw xmm0, word [r14 + rbx + 2], 6 LONG $0xc0c98149; WORD $0x0001; BYTE $0x00 // or r9, 448 QUAD $0x07020e44c40f4366 // pinsrw xmm0, word [r14 + r9 + 2], 7 LONG $0xd06e0f66 // movd xmm2, eax LONG $0x44b70f41; WORD $0x163e // movzx eax, word [r14 + rdi + 22] - LONG $0x20244489 // mov dword [rsp + 32], eax + LONG $0x18244489 // mov dword [rsp + 24], eax LONG $0x750f4166; BYTE $0xc3 // pcmpeqw xmm0, xmm11 QUAD $0x01040e4cc40f4166 // pinsrw xmm1, word [r14 + rcx + 4], 1 QUAD $0x02043e4cc40f4366 // pinsrw xmm1, word [r14 + r15 + 4], 2 QUAD $0x0304364cc40f4166 // pinsrw xmm1, word [r14 + rsi + 4], 3 - QUAD $0x0404164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 4], 4 - QUAD $0x05042e4cc40f4366 // pinsrw xmm1, word [r14 + r13 + 4], 5 + QUAD $0x0404264cc40f4366 // pinsrw xmm1, word [r14 + r12 + 4], 4 + QUAD $0x0504164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 4], 5 QUAD $0x06041e4cc40f4166 // pinsrw xmm1, word [r14 + rbx + 4], 6 QUAD $0x07040e4cc40f4366 // pinsrw xmm1, word [r14 + r9 + 4], 7 LONG $0xc0630f66 // packsswb xmm0, xmm0 @@ -29214,8 +30473,8 @@ LBB5_133: QUAD $0x01060e7cc40f4166 // pinsrw xmm7, word [r14 + rcx + 6], 1 QUAD $0x02063e7cc40f4366 // pinsrw xmm7, word [r14 + r15 + 6], 2 QUAD $0x0306367cc40f4166 // pinsrw xmm7, word [r14 + rsi + 6], 3 - QUAD $0x0406167cc40f4166 // pinsrw xmm7, word [r14 + rdx + 6], 4 - QUAD $0x05062e7cc40f4366 // pinsrw xmm7, word [r14 + r13 + 6], 5 + QUAD $0x0406267cc40f4366 // pinsrw xmm7, word [r14 + r12 + 6], 4 + QUAD $0x0506167cc40f4166 // pinsrw xmm7, word [r14 + rdx + 6], 5 QUAD $0x06061e7cc40f4166 // pinsrw xmm7, word [r14 + rbx + 6], 6 QUAD $0x07060e7cc40f4366 // pinsrw xmm7, word [r14 + r9 + 6], 7 LONG $0x750f4166; BYTE $0xfb // pcmpeqw xmm7, xmm11 @@ -29223,8 +30482,8 @@ LBB5_133: QUAD $0x01080e44c40f4566 // pinsrw xmm8, word [r14 + rcx + 8], 1 QUAD $0x02083e44c40f4766 // pinsrw xmm8, word [r14 + r15 + 8], 2 QUAD $0x03083644c40f4566 // pinsrw xmm8, word [r14 + rsi + 8], 3 - QUAD $0x04081644c40f4566 // pinsrw xmm8, word [r14 + rdx + 8], 4 - QUAD $0x05082e44c40f4766 // pinsrw xmm8, word [r14 + r13 + 8], 5 + QUAD $0x04082644c40f4766 // pinsrw xmm8, word [r14 + r12 + 8], 4 + QUAD $0x05081644c40f4566 // pinsrw xmm8, word [r14 + rdx + 8], 5 QUAD $0x06081e44c40f4566 // pinsrw xmm8, word [r14 + rbx + 8], 6 QUAD $0x07080e44c40f4766 // pinsrw xmm8, word [r14 + r9 + 8], 7 LONG $0xddf80f66 // psubb xmm3, xmm5 @@ -29239,13 +30498,13 @@ LBB5_133: QUAD $0x0000b0ad6f0f4466; BYTE $0x00 // movdqa xmm13, oword 176[rbp] /* [rip + .LCPI5_11] */ LONG $0x6f0f4166; BYTE $0xc0 // movdqa xmm0, xmm8 LONG $0x380f4566; WORD $0xe910 // pblendvb xmm13, xmm9, xmm0 - LONG $0x6e0f4166; BYTE $0xf4 // movd xmm6, r12d - LONG $0x64b70f45; WORD $0x1c3e // movzx r12d, word [r14 + rdi + 28] + LONG $0x6e0f4166; BYTE $0xf5 // movd xmm6, r13d + LONG $0x6cb70f45; WORD $0x1c3e // movzx r13d, word [r14 + rdi + 28] QUAD $0x010a0e64c40f4166 // pinsrw xmm4, word [r14 + rcx + 10], 1 QUAD $0x020a3e64c40f4366 // pinsrw xmm4, word [r14 + r15 + 10], 2 QUAD $0x030a3664c40f4166 // pinsrw xmm4, word [r14 + rsi + 10], 3 - QUAD $0x040a1664c40f4166 // pinsrw xmm4, word [r14 + rdx + 10], 4 - QUAD $0x050a2e64c40f4366 // pinsrw xmm4, word [r14 + r13 + 10], 5 + QUAD $0x040a2664c40f4366 // pinsrw xmm4, word [r14 + r12 + 10], 4 + QUAD $0x050a1664c40f4166 // pinsrw xmm4, word [r14 + rdx + 10], 5 QUAD $0x060a1e64c40f4166 // pinsrw xmm4, word [r14 + rbx + 10], 6 QUAD $0x070a0e64c40f4366 // pinsrw xmm4, word [r14 + r9 + 10], 7 LONG $0x750f4166; BYTE $0xe3 // pcmpeqw xmm4, xmm11 @@ -29253,14 +30512,14 @@ LBB5_133: QUAD $0x010c0e54c40f4166 // pinsrw xmm2, word [r14 + rcx + 12], 1 QUAD $0x020c3e54c40f4366 // pinsrw xmm2, word [r14 + r15 + 12], 2 QUAD $0x030c3654c40f4166 // pinsrw xmm2, word [r14 + rsi + 12], 3 - QUAD $0x040c1654c40f4166 // pinsrw xmm2, word [r14 + rdx + 12], 4 - QUAD $0x050c2e54c40f4366 // pinsrw xmm2, word [r14 + r13 + 12], 5 + QUAD $0x040c2654c40f4366 // pinsrw xmm2, word [r14 + r12 + 12], 4 + QUAD $0x050c1654c40f4166 // pinsrw xmm2, word [r14 + rdx + 12], 5 QUAD $0x060c1e54c40f4166 // pinsrw xmm2, word [r14 + rbx + 12], 6 LONG $0xeb0f4466; BYTE $0xe3 // por xmm12, xmm3 QUAD $0x000000c0ad6f0f66 // movdqa xmm5, oword 192[rbp] /* [rip + .LCPI5_12] */ LONG $0xc46f0f66 // movdqa xmm0, xmm4 LONG $0x380f4166; WORD $0xe910 // pblendvb xmm5, xmm9, xmm0 - LONG $0x646e0f66; WORD $0x2824 // movd xmm4, dword [rsp + 40] + LONG $0x646e0f66; WORD $0x2024 // movd xmm4, dword [rsp + 32] LONG $0x54b70f45; WORD $0x1e3e // movzx r10d, word [r14 + rdi + 30] QUAD $0x070c0e54c40f4366 // pinsrw xmm2, word [r14 + r9 + 12], 7 LONG $0x750f4166; BYTE $0xd3 // pcmpeqw xmm2, xmm11 @@ -29269,26 +30528,26 @@ LBB5_133: QUAD $0x0000d0ad6f0f4466; BYTE $0x00 // movdqa xmm13, oword 208[rbp] /* [rip + .LCPI5_13] */ LONG $0xc26f0f66 // movdqa xmm0, xmm2 LONG $0x380f4566; WORD $0xe910 // pblendvb xmm13, xmm9, xmm0 - LONG $0x5c6e0f66; WORD $0x2024 // movd xmm3, dword [rsp + 32] + LONG $0x5c6e0f66; WORD $0x1824 // movd xmm3, dword [rsp + 24] LONG $0x44b70f41; WORD $0x203e // movzx eax, word [r14 + rdi + 32] - LONG $0x20244489 // mov dword [rsp + 32], eax + LONG $0x18244489 // mov dword [rsp + 24], eax QUAD $0x010e0e4cc40f4166 // pinsrw xmm1, word [r14 + rcx + 14], 1 QUAD $0x020e3e4cc40f4366 // pinsrw xmm1, word [r14 + r15 + 14], 2 QUAD $0x030e364cc40f4166 // pinsrw xmm1, word [r14 + rsi + 14], 3 - QUAD $0x040e164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 14], 4 - QUAD $0x050e2e4cc40f4366 // pinsrw xmm1, word [r14 + r13 + 14], 5 + QUAD $0x040e264cc40f4366 // pinsrw xmm1, word [r14 + r12 + 14], 4 + QUAD $0x050e164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 14], 5 QUAD $0x060e1e4cc40f4166 // pinsrw xmm1, word [r14 + rbx + 14], 6 LONG $0xeb0f4466; BYTE $0xed // por xmm13, xmm5 LONG $0x6e0f4166; BYTE $0xd3 // movd xmm2, r11d LONG $0x44b70f41; WORD $0x223e // movzx eax, word [r14 + rdi + 34] - LONG $0x28244489 // mov dword [rsp + 40], eax + LONG $0x20244489 // mov dword [rsp + 32], eax QUAD $0x070e0e4cc40f4366 // pinsrw xmm1, word [r14 + r9 + 14], 7 LONG $0x750f4166; BYTE $0xcb // pcmpeqw xmm1, xmm11 QUAD $0x01120e74c40f4166 // pinsrw xmm6, word [r14 + rcx + 18], 1 QUAD $0x02123e74c40f4366 // pinsrw xmm6, word [r14 + r15 + 18], 2 QUAD $0x03123674c40f4166 // pinsrw xmm6, word [r14 + rsi + 18], 3 - QUAD $0x04121674c40f4166 // pinsrw xmm6, word [r14 + rdx + 18], 4 - QUAD $0x05122e74c40f4366 // pinsrw xmm6, word [r14 + r13 + 18], 5 + QUAD $0x04122674c40f4366 // pinsrw xmm6, word [r14 + r12 + 18], 4 + QUAD $0x05121674c40f4166 // pinsrw xmm6, word [r14 + rdx + 18], 5 QUAD $0x06121e74c40f4166 // pinsrw xmm6, word [r14 + rbx + 18], 6 LONG $0xc9630f66 // packsswb xmm1, xmm1 QUAD $0x07120e74c40f4366 // pinsrw xmm6, word [r14 + r9 + 18], 7 @@ -29307,14 +30566,14 @@ LBB5_133: QUAD $0x01100e7cc40f4166 // pinsrw xmm7, word [r14 + rcx + 16], 1 QUAD $0x02103e7cc40f4366 // pinsrw xmm7, word [r14 + r15 + 16], 2 QUAD $0x0310367cc40f4166 // pinsrw xmm7, word [r14 + rsi + 16], 3 - QUAD $0x0410167cc40f4166 // pinsrw xmm7, word [r14 + rdx + 16], 4 - QUAD $0x05102e7cc40f4366 // pinsrw xmm7, word [r14 + r13 + 16], 5 + QUAD $0x0410267cc40f4366 // pinsrw xmm7, word [r14 + r12 + 16], 4 + QUAD $0x0510167cc40f4166 // pinsrw xmm7, word [r14 + rdx + 16], 5 QUAD $0x06101e7cc40f4166 // pinsrw xmm7, word [r14 + rbx + 16], 6 QUAD $0x01140e64c40f4166 // pinsrw xmm4, word [r14 + rcx + 20], 1 QUAD $0x02143e64c40f4366 // pinsrw xmm4, word [r14 + r15 + 20], 2 QUAD $0x03143664c40f4166 // pinsrw xmm4, word [r14 + rsi + 20], 3 - QUAD $0x04141664c40f4166 // pinsrw xmm4, word [r14 + rdx + 20], 4 - QUAD $0x05142e64c40f4366 // pinsrw xmm4, word [r14 + r13 + 20], 5 + QUAD $0x04142664c40f4366 // pinsrw xmm4, word [r14 + r12 + 20], 4 + QUAD $0x05141664c40f4166 // pinsrw xmm4, word [r14 + rdx + 20], 5 QUAD $0x06141e64c40f4166 // pinsrw xmm4, word [r14 + rbx + 20], 6 QUAD $0x07140e64c40f4366 // pinsrw xmm4, word [r14 + r9 + 20], 7 LONG $0x750f4166; BYTE $0xe3 // pcmpeqw xmm4, xmm11 @@ -29322,8 +30581,8 @@ LBB5_133: LONG $0xeb0f4566; BYTE $0xe5 // por xmm12, xmm13 LONG $0xc46f0f66 // movdqa xmm0, xmm4 LONG $0x380f4566; WORD $0xf910 // pblendvb xmm15, xmm9, xmm0 - LONG $0x6e0f4166; BYTE $0xe4 // movd xmm4, r12d - LONG $0x64b70f45; WORD $0x263e // movzx r12d, word [r14 + rdi + 38] + LONG $0x6e0f4166; BYTE $0xe5 // movd xmm4, r13d + LONG $0x6cb70f45; WORD $0x263e // movzx r13d, word [r14 + rdi + 38] QUAD $0x07100e7cc40f4366 // pinsrw xmm7, word [r14 + r9 + 16], 7 LONG $0x750f4166; BYTE $0xfb // pcmpeqw xmm7, xmm11 QUAD $0x00000160bdef0f66 // pxor xmm7, oword 352[rbp] /* [rip + .LCPI5_22] */ @@ -29331,8 +30590,8 @@ LBB5_133: QUAD $0x01160e5cc40f4166 // pinsrw xmm3, word [r14 + rcx + 22], 1 QUAD $0x02163e5cc40f4366 // pinsrw xmm3, word [r14 + r15 + 22], 2 QUAD $0x0316365cc40f4166 // pinsrw xmm3, word [r14 + rsi + 22], 3 - QUAD $0x0416165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 22], 4 - QUAD $0x05162e5cc40f4366 // pinsrw xmm3, word [r14 + r13 + 22], 5 + QUAD $0x0416265cc40f4366 // pinsrw xmm3, word [r14 + r12 + 22], 4 + QUAD $0x0516165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 22], 5 QUAD $0x06161e5cc40f4166 // pinsrw xmm3, word [r14 + rbx + 22], 6 QUAD $0x07160e5cc40f4366 // pinsrw xmm3, word [r14 + r9 + 22], 7 LONG $0x750f4166; BYTE $0xdb // pcmpeqw xmm3, xmm11 @@ -29340,8 +30599,8 @@ LBB5_133: QUAD $0x01180e54c40f4166 // pinsrw xmm2, word [r14 + rcx + 24], 1 QUAD $0x02183e54c40f4366 // pinsrw xmm2, word [r14 + r15 + 24], 2 QUAD $0x03183654c40f4166 // pinsrw xmm2, word [r14 + rsi + 24], 3 - QUAD $0x04181654c40f4166 // pinsrw xmm2, word [r14 + rdx + 24], 4 - QUAD $0x05182e54c40f4366 // pinsrw xmm2, word [r14 + r13 + 24], 5 + QUAD $0x04182654c40f4366 // pinsrw xmm2, word [r14 + r12 + 24], 4 + QUAD $0x05181654c40f4166 // pinsrw xmm2, word [r14 + rdx + 24], 5 QUAD $0x06181e54c40f4166 // pinsrw xmm2, word [r14 + rbx + 24], 6 QUAD $0x07180e54c40f4366 // pinsrw xmm2, word [r14 + r9 + 24], 7 LONG $0xf80f4466; BYTE $0xc7 // psubb xmm8, xmm7 @@ -29356,13 +30615,13 @@ LBB5_133: QUAD $0x0000b0ad6f0f4466; BYTE $0x00 // movdqa xmm13, oword 176[rbp] /* [rip + .LCPI5_11] */ LONG $0xc26f0f66 // movdqa xmm0, xmm2 LONG $0x380f4566; WORD $0xe910 // pblendvb xmm13, xmm9, xmm0 - LONG $0x7c6e0f66; WORD $0x2024 // movd xmm7, dword [rsp + 32] + LONG $0x7c6e0f66; WORD $0x1824 // movd xmm7, dword [rsp + 24] LONG $0x54b70f45; WORD $0x2a3e // movzx r10d, word [r14 + rdi + 42] QUAD $0x011a0e4cc40f4166 // pinsrw xmm1, word [r14 + rcx + 26], 1 QUAD $0x021a3e4cc40f4366 // pinsrw xmm1, word [r14 + r15 + 26], 2 QUAD $0x031a364cc40f4166 // pinsrw xmm1, word [r14 + rsi + 26], 3 - QUAD $0x041a164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 26], 4 - QUAD $0x051a2e4cc40f4366 // pinsrw xmm1, word [r14 + r13 + 26], 5 + QUAD $0x041a264cc40f4366 // pinsrw xmm1, word [r14 + r12 + 26], 4 + QUAD $0x051a164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 26], 5 QUAD $0x061a1e4cc40f4166 // pinsrw xmm1, word [r14 + rbx + 26], 6 QUAD $0x071a0e4cc40f4366 // pinsrw xmm1, word [r14 + r9 + 26], 7 LONG $0x750f4166; BYTE $0xcb // pcmpeqw xmm1, xmm11 @@ -29370,17 +30629,17 @@ LBB5_133: QUAD $0x011c0e64c40f4166 // pinsrw xmm4, word [r14 + rcx + 28], 1 QUAD $0x021c3e64c40f4366 // pinsrw xmm4, word [r14 + r15 + 28], 2 QUAD $0x031c3664c40f4166 // pinsrw xmm4, word [r14 + rsi + 28], 3 - QUAD $0x041c1664c40f4166 // pinsrw xmm4, word [r14 + rdx + 28], 4 - QUAD $0x051c2e64c40f4366 // pinsrw xmm4, word [r14 + r13 + 28], 5 + QUAD $0x041c2664c40f4366 // pinsrw xmm4, word [r14 + r12 + 28], 4 + QUAD $0x051c1664c40f4166 // pinsrw xmm4, word [r14 + rdx + 28], 5 QUAD $0x061c1e64c40f4166 // pinsrw xmm4, word [r14 + rbx + 28], 6 LONG $0xeb0f4566; BYTE $0xf0 // por xmm14, xmm8 QUAD $0x0000c0bd6f0f4466; BYTE $0x00 // movdqa xmm15, oword 192[rbp] /* [rip + .LCPI5_12] */ LONG $0x6f0f4166; BYTE $0xef // movdqa xmm5, xmm15 LONG $0xc16f0f66 // movdqa xmm0, xmm1 LONG $0x380f4166; WORD $0xe910 // pblendvb xmm5, xmm9, xmm0 - LONG $0x546e0f66; WORD $0x2824 // movd xmm2, dword [rsp + 40] + LONG $0x546e0f66; WORD $0x2024 // movd xmm2, dword [rsp + 32] LONG $0x44b70f41; WORD $0x2c3e // movzx eax, word [r14 + rdi + 44] - LONG $0x20244489 // mov dword [rsp + 32], eax + LONG $0x18244489 // mov dword [rsp + 24], eax QUAD $0x071c0e64c40f4366 // pinsrw xmm4, word [r14 + r9 + 28], 7 LONG $0x750f4166; BYTE $0xe3 // pcmpeqw xmm4, xmm11 LONG $0xe4630f66 // packsswb xmm4, xmm4 @@ -29393,20 +30652,20 @@ LBB5_133: QUAD $0x011e0e5cc40f4166 // pinsrw xmm3, word [r14 + rcx + 30], 1 QUAD $0x021e3e5cc40f4366 // pinsrw xmm3, word [r14 + r15 + 30], 2 QUAD $0x031e365cc40f4166 // pinsrw xmm3, word [r14 + rsi + 30], 3 - QUAD $0x041e165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 30], 4 - QUAD $0x051e2e5cc40f4366 // pinsrw xmm3, word [r14 + r13 + 30], 5 + QUAD $0x041e265cc40f4366 // pinsrw xmm3, word [r14 + r12 + 30], 4 + QUAD $0x051e165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 30], 5 QUAD $0x061e1e5cc40f4166 // pinsrw xmm3, word [r14 + rbx + 30], 6 LONG $0xf5eb0f66 // por xmm6, xmm5 - LONG $0x6e0f4166; BYTE $0xcc // movd xmm1, r12d + LONG $0x6e0f4166; BYTE $0xcd // movd xmm1, r13d LONG $0x44b70f41; WORD $0x303e // movzx eax, word [r14 + rdi + 48] - LONG $0x28244489 // mov dword [rsp + 40], eax + LONG $0x20244489 // mov dword [rsp + 32], eax QUAD $0x071e0e5cc40f4366 // pinsrw xmm3, word [r14 + r9 + 30], 7 LONG $0x750f4166; BYTE $0xdb // pcmpeqw xmm3, xmm11 QUAD $0x01220e54c40f4166 // pinsrw xmm2, word [r14 + rcx + 34], 1 QUAD $0x02223e54c40f4366 // pinsrw xmm2, word [r14 + r15 + 34], 2 QUAD $0x03223654c40f4166 // pinsrw xmm2, word [r14 + rsi + 34], 3 - QUAD $0x04221654c40f4166 // pinsrw xmm2, word [r14 + rdx + 34], 4 - QUAD $0x05222e54c40f4366 // pinsrw xmm2, word [r14 + r13 + 34], 5 + QUAD $0x04222654c40f4366 // pinsrw xmm2, word [r14 + r12 + 34], 4 + QUAD $0x05221654c40f4166 // pinsrw xmm2, word [r14 + rdx + 34], 5 QUAD $0x06221e54c40f4166 // pinsrw xmm2, word [r14 + rbx + 34], 6 LONG $0xdb630f66 // packsswb xmm3, xmm3 QUAD $0x07220e54c40f4366 // pinsrw xmm2, word [r14 + r9 + 34], 7 @@ -29420,18 +30679,18 @@ LBB5_133: LONG $0xc26f0f66 // movdqa xmm0, xmm2 LONG $0x380f4566; WORD $0xc110 // pblendvb xmm8, xmm9, xmm0 LONG $0x6e0f4166; BYTE $0xd0 // movd xmm2, r8d - LONG $0x64b70f45; WORD $0x323e // movzx r12d, word [r14 + rdi + 50] + LONG $0x6cb70f45; WORD $0x323e // movzx r13d, word [r14 + rdi + 50] QUAD $0x01200e7cc40f4166 // pinsrw xmm7, word [r14 + rcx + 32], 1 QUAD $0x02203e7cc40f4366 // pinsrw xmm7, word [r14 + r15 + 32], 2 QUAD $0x0320367cc40f4166 // pinsrw xmm7, word [r14 + rsi + 32], 3 - QUAD $0x0420167cc40f4166 // pinsrw xmm7, word [r14 + rdx + 32], 4 - QUAD $0x05202e7cc40f4366 // pinsrw xmm7, word [r14 + r13 + 32], 5 + QUAD $0x0420267cc40f4366 // pinsrw xmm7, word [r14 + r12 + 32], 4 + QUAD $0x0520167cc40f4166 // pinsrw xmm7, word [r14 + rdx + 32], 5 QUAD $0x06201e7cc40f4166 // pinsrw xmm7, word [r14 + rbx + 32], 6 QUAD $0x01240e64c40f4166 // pinsrw xmm4, word [r14 + rcx + 36], 1 QUAD $0x02243e64c40f4366 // pinsrw xmm4, word [r14 + r15 + 36], 2 QUAD $0x03243664c40f4166 // pinsrw xmm4, word [r14 + rsi + 36], 3 - QUAD $0x04241664c40f4166 // pinsrw xmm4, word [r14 + rdx + 36], 4 - QUAD $0x05242e64c40f4366 // pinsrw xmm4, word [r14 + r13 + 36], 5 + QUAD $0x04242664c40f4366 // pinsrw xmm4, word [r14 + r12 + 36], 4 + QUAD $0x05241664c40f4166 // pinsrw xmm4, word [r14 + rdx + 36], 5 QUAD $0x06241e64c40f4166 // pinsrw xmm4, word [r14 + rbx + 36], 6 QUAD $0x07240e64c40f4366 // pinsrw xmm4, word [r14 + r9 + 36], 7 LONG $0x750f4166; BYTE $0xe3 // pcmpeqw xmm4, xmm11 @@ -29450,8 +30709,8 @@ LBB5_133: QUAD $0x01260e4cc40f4166 // pinsrw xmm1, word [r14 + rcx + 38], 1 QUAD $0x02263e4cc40f4366 // pinsrw xmm1, word [r14 + r15 + 38], 2 QUAD $0x0326364cc40f4166 // pinsrw xmm1, word [r14 + rsi + 38], 3 - QUAD $0x0426164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 38], 4 - QUAD $0x05262e4cc40f4366 // pinsrw xmm1, word [r14 + r13 + 38], 5 + QUAD $0x0426264cc40f4366 // pinsrw xmm1, word [r14 + r12 + 38], 4 + QUAD $0x0526164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 38], 5 QUAD $0x06261e4cc40f4166 // pinsrw xmm1, word [r14 + rbx + 38], 6 QUAD $0x07260e4cc40f4366 // pinsrw xmm1, word [r14 + r9 + 38], 7 LONG $0x750f4166; BYTE $0xcb // pcmpeqw xmm1, xmm11 @@ -29459,15 +30718,15 @@ LBB5_133: QUAD $0x01280e54c40f4166 // pinsrw xmm2, word [r14 + rcx + 40], 1 QUAD $0x02283e54c40f4366 // pinsrw xmm2, word [r14 + r15 + 40], 2 QUAD $0x03283654c40f4166 // pinsrw xmm2, word [r14 + rsi + 40], 3 - QUAD $0x04281654c40f4166 // pinsrw xmm2, word [r14 + rdx + 40], 4 - QUAD $0x05282e54c40f4366 // pinsrw xmm2, word [r14 + r13 + 40], 5 + QUAD $0x04282654c40f4366 // pinsrw xmm2, word [r14 + r12 + 40], 4 + QUAD $0x05281654c40f4166 // pinsrw xmm2, word [r14 + rdx + 40], 5 QUAD $0x06281e54c40f4166 // pinsrw xmm2, word [r14 + rbx + 40], 6 QUAD $0x07280e54c40f4366 // pinsrw xmm2, word [r14 + r9 + 40], 7 LONG $0xf80f4466; BYTE $0xc7 // psubb xmm8, xmm7 QUAD $0x000000a0ad6f0f66 // movdqa xmm5, oword 160[rbp] /* [rip + .LCPI5_10] */ LONG $0xc16f0f66 // movdqa xmm0, xmm1 LONG $0x380f4166; WORD $0xe910 // pblendvb xmm5, xmm9, xmm0 - LONG $0x4c6e0f66; WORD $0x2024 // movd xmm1, dword [rsp + 32] + LONG $0x4c6e0f66; WORD $0x1824 // movd xmm1, dword [rsp + 24] LONG $0x44b70f45; WORD $0x363e // movzx r8d, word [r14 + rdi + 54] LONG $0x750f4166; BYTE $0xd3 // pcmpeqw xmm2, xmm11 LONG $0xd2630f66 // packsswb xmm2, xmm2 @@ -29480,8 +30739,8 @@ LBB5_133: QUAD $0x012a0e5cc40f4166 // pinsrw xmm3, word [r14 + rcx + 42], 1 QUAD $0x022a3e5cc40f4366 // pinsrw xmm3, word [r14 + r15 + 42], 2 QUAD $0x032a365cc40f4166 // pinsrw xmm3, word [r14 + rsi + 42], 3 - QUAD $0x042a165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 42], 4 - QUAD $0x052a2e5cc40f4366 // pinsrw xmm3, word [r14 + r13 + 42], 5 + QUAD $0x042a265cc40f4366 // pinsrw xmm3, word [r14 + r12 + 42], 4 + QUAD $0x052a165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 42], 5 QUAD $0x062a1e5cc40f4166 // pinsrw xmm3, word [r14 + rbx + 42], 6 QUAD $0x072a0e5cc40f4366 // pinsrw xmm3, word [r14 + r9 + 42], 7 LONG $0x750f4166; BYTE $0xdb // pcmpeqw xmm3, xmm11 @@ -29489,14 +30748,14 @@ LBB5_133: QUAD $0x012c0e4cc40f4166 // pinsrw xmm1, word [r14 + rcx + 44], 1 QUAD $0x022c3e4cc40f4366 // pinsrw xmm1, word [r14 + r15 + 44], 2 QUAD $0x032c364cc40f4166 // pinsrw xmm1, word [r14 + rsi + 44], 3 - QUAD $0x042c164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 44], 4 - QUAD $0x052c2e4cc40f4366 // pinsrw xmm1, word [r14 + r13 + 44], 5 + QUAD $0x042c264cc40f4366 // pinsrw xmm1, word [r14 + r12 + 44], 4 + QUAD $0x052c164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 44], 5 QUAD $0x062c1e4cc40f4166 // pinsrw xmm1, word [r14 + rbx + 44], 6 LONG $0xeb0f4166; BYTE $0xe8 // por xmm5, xmm8 LONG $0x6f0f4166; BYTE $0xd7 // movdqa xmm2, xmm15 LONG $0xc36f0f66 // movdqa xmm0, xmm3 LONG $0x380f4166; WORD $0xd110 // pblendvb xmm2, xmm9, xmm0 - LONG $0x7c6e0f66; WORD $0x2824 // movd xmm7, dword [rsp + 40] + LONG $0x7c6e0f66; WORD $0x2024 // movd xmm7, dword [rsp + 32] LONG $0x5cb70f45; WORD $0x3a3e // movzx r11d, word [r14 + rdi + 58] QUAD $0x072c0e4cc40f4366 // pinsrw xmm1, word [r14 + r9 + 44], 7 LONG $0x750f4166; BYTE $0xcb // pcmpeqw xmm1, xmm11 @@ -29506,15 +30765,15 @@ LBB5_133: LONG $0x6f0f4166; BYTE $0xf7 // movdqa xmm6, xmm15 LONG $0xc16f0f66 // movdqa xmm0, xmm1 LONG $0x380f4166; WORD $0xf110 // pblendvb xmm6, xmm9, xmm0 - LONG $0x6e0f4166; BYTE $0xcc // movd xmm1, r12d - LONG $0x64b70f45; WORD $0x3c3e // movzx r12d, word [r14 + rdi + 60] + LONG $0x6e0f4166; BYTE $0xcd // movd xmm1, r13d + LONG $0x6cb70f45; WORD $0x3c3e // movzx r13d, word [r14 + rdi + 60] LONG $0xf2eb0f66 // por xmm6, xmm2 LONG $0x6e0f4166; BYTE $0xd2 // movd xmm2, r10d QUAD $0x012e0e64c40f4166 // pinsrw xmm4, word [r14 + rcx + 46], 1 QUAD $0x022e3e64c40f4366 // pinsrw xmm4, word [r14 + r15 + 46], 2 QUAD $0x032e3664c40f4166 // pinsrw xmm4, word [r14 + rsi + 46], 3 - QUAD $0x042e1664c40f4166 // pinsrw xmm4, word [r14 + rdx + 46], 4 - QUAD $0x052e2e64c40f4366 // pinsrw xmm4, word [r14 + r13 + 46], 5 + QUAD $0x042e2664c40f4366 // pinsrw xmm4, word [r14 + r12 + 46], 4 + QUAD $0x052e1664c40f4166 // pinsrw xmm4, word [r14 + rdx + 46], 5 QUAD $0x062e1e64c40f4166 // pinsrw xmm4, word [r14 + rbx + 46], 6 QUAD $0x072e0e64c40f4366 // pinsrw xmm4, word [r14 + r9 + 46], 7 LONG $0x750f4166; BYTE $0xe3 // pcmpeqw xmm4, xmm11 @@ -29527,8 +30786,8 @@ LBB5_133: QUAD $0x01320e4cc40f4166 // pinsrw xmm1, word [r14 + rcx + 50], 1 QUAD $0x02323e4cc40f4366 // pinsrw xmm1, word [r14 + r15 + 50], 2 QUAD $0x0332364cc40f4166 // pinsrw xmm1, word [r14 + rsi + 50], 3 - QUAD $0x0432164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 50], 4 - QUAD $0x05322e4cc40f4366 // pinsrw xmm1, word [r14 + r13 + 50], 5 + QUAD $0x0432264cc40f4366 // pinsrw xmm1, word [r14 + r12 + 50], 4 + QUAD $0x0532164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 50], 5 QUAD $0x06321e4cc40f4166 // pinsrw xmm1, word [r14 + rbx + 50], 6 QUAD $0x07320e4cc40f4366 // pinsrw xmm1, word [r14 + r9 + 50], 7 LONG $0x750f4166; BYTE $0xcb // pcmpeqw xmm1, xmm11 @@ -29541,8 +30800,8 @@ LBB5_133: QUAD $0x01300e7cc40f4166 // pinsrw xmm7, word [r14 + rcx + 48], 1 QUAD $0x02303e7cc40f4366 // pinsrw xmm7, word [r14 + r15 + 48], 2 QUAD $0x0330367cc40f4166 // pinsrw xmm7, word [r14 + rsi + 48], 3 - QUAD $0x0430167cc40f4166 // pinsrw xmm7, word [r14 + rdx + 48], 4 - QUAD $0x05302e7cc40f4366 // pinsrw xmm7, word [r14 + r13 + 48], 5 + QUAD $0x0430267cc40f4366 // pinsrw xmm7, word [r14 + r12 + 48], 4 + QUAD $0x0530167cc40f4166 // pinsrw xmm7, word [r14 + rdx + 48], 5 QUAD $0x06301e7cc40f4166 // pinsrw xmm7, word [r14 + rbx + 48], 6 QUAD $0x07300e7cc40f4366 // pinsrw xmm7, word [r14 + r9 + 48], 7 LONG $0x750f4166; BYTE $0xfb // pcmpeqw xmm7, xmm11 @@ -29550,8 +30809,8 @@ LBB5_133: QUAD $0x01340e54c40f4166 // pinsrw xmm2, word [r14 + rcx + 52], 1 QUAD $0x02343e54c40f4366 // pinsrw xmm2, word [r14 + r15 + 52], 2 QUAD $0x03343654c40f4166 // pinsrw xmm2, word [r14 + rsi + 52], 3 - QUAD $0x04341654c40f4166 // pinsrw xmm2, word [r14 + rdx + 52], 4 - QUAD $0x05342e54c40f4366 // pinsrw xmm2, word [r14 + r13 + 52], 5 + QUAD $0x04342654c40f4366 // pinsrw xmm2, word [r14 + r12 + 52], 4 + QUAD $0x05341654c40f4166 // pinsrw xmm2, word [r14 + rdx + 52], 5 QUAD $0x06341e54c40f4166 // pinsrw xmm2, word [r14 + rbx + 52], 6 LONG $0xff630f66 // packsswb xmm7, xmm7 QUAD $0x07340e54c40f4366 // pinsrw xmm2, word [r14 + r9 + 52], 7 @@ -29559,8 +30818,8 @@ LBB5_133: QUAD $0x01360e5cc40f4166 // pinsrw xmm3, word [r14 + rcx + 54], 1 QUAD $0x02363e5cc40f4366 // pinsrw xmm3, word [r14 + r15 + 54], 2 QUAD $0x0336365cc40f4166 // pinsrw xmm3, word [r14 + rsi + 54], 3 - QUAD $0x0436165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 54], 4 - QUAD $0x05362e5cc40f4366 // pinsrw xmm3, word [r14 + r13 + 54], 5 + QUAD $0x0436265cc40f4366 // pinsrw xmm3, word [r14 + r12 + 54], 4 + QUAD $0x0536165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 54], 5 QUAD $0x06361e5cc40f4166 // pinsrw xmm3, word [r14 + rbx + 54], 6 LONG $0xd2630f66 // packsswb xmm2, xmm2 QUAD $0x07360e5cc40f4366 // pinsrw xmm3, word [r14 + r9 + 54], 7 @@ -29568,8 +30827,8 @@ LBB5_133: QUAD $0x01380e4cc40f4166 // pinsrw xmm1, word [r14 + rcx + 56], 1 QUAD $0x02383e4cc40f4366 // pinsrw xmm1, word [r14 + r15 + 56], 2 QUAD $0x0338364cc40f4166 // pinsrw xmm1, word [r14 + rsi + 56], 3 - QUAD $0x0438164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 56], 4 - QUAD $0x05382e4cc40f4366 // pinsrw xmm1, word [r14 + r13 + 56], 5 + QUAD $0x0438264cc40f4366 // pinsrw xmm1, word [r14 + r12 + 56], 4 + QUAD $0x0538164cc40f4166 // pinsrw xmm1, word [r14 + rdx + 56], 5 QUAD $0x06381e4cc40f4166 // pinsrw xmm1, word [r14 + rbx + 56], 6 LONG $0xdb630f66 // packsswb xmm3, xmm3 QUAD $0x07380e4cc40f4366 // pinsrw xmm1, word [r14 + r9 + 56], 7 @@ -29585,20 +30844,20 @@ LBB5_133: QUAD $0x013a0e54c40f4166 // pinsrw xmm2, word [r14 + rcx + 58], 1 QUAD $0x023a3e54c40f4366 // pinsrw xmm2, word [r14 + r15 + 58], 2 QUAD $0x033a3654c40f4166 // pinsrw xmm2, word [r14 + rsi + 58], 3 - QUAD $0x043a1654c40f4166 // pinsrw xmm2, word [r14 + rdx + 58], 4 - QUAD $0x053a2e54c40f4366 // pinsrw xmm2, word [r14 + r13 + 58], 5 + QUAD $0x043a2654c40f4366 // pinsrw xmm2, word [r14 + r12 + 58], 4 + QUAD $0x053a1654c40f4166 // pinsrw xmm2, word [r14 + rdx + 58], 5 QUAD $0x063a1e54c40f4166 // pinsrw xmm2, word [r14 + rbx + 58], 6 QUAD $0x073a0e54c40f4366 // pinsrw xmm2, word [r14 + r9 + 58], 7 LONG $0xc9630f66 // packsswb xmm1, xmm1 LONG $0x750f4166; BYTE $0xd3 // pcmpeqw xmm2, xmm11 LONG $0xf5eb0f66 // por xmm6, xmm5 - LONG $0x6e0f4166; BYTE $0xdc // movd xmm3, r12d + LONG $0x6e0f4166; BYTE $0xdd // movd xmm3, r13d LONG $0x24448b4c; BYTE $0x08 // mov r8, qword [rsp + 8] QUAD $0x013c0e5cc40f4166 // pinsrw xmm3, word [r14 + rcx + 60], 1 QUAD $0x023c3e5cc40f4366 // pinsrw xmm3, word [r14 + r15 + 60], 2 QUAD $0x033c365cc40f4166 // pinsrw xmm3, word [r14 + rsi + 60], 3 - QUAD $0x043c165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 60], 4 - QUAD $0x053c2e5cc40f4366 // pinsrw xmm3, word [r14 + r13 + 60], 5 + QUAD $0x043c265cc40f4366 // pinsrw xmm3, word [r14 + r12 + 60], 4 + QUAD $0x053c165cc40f4166 // pinsrw xmm3, word [r14 + rdx + 60], 5 QUAD $0x063c1e5cc40f4166 // pinsrw xmm3, word [r14 + rbx + 60], 6 LONG $0xd2630f66 // packsswb xmm2, xmm2 QUAD $0x073c0e5cc40f4366 // pinsrw xmm3, word [r14 + r9 + 60], 7 @@ -29621,8 +30880,8 @@ LBB5_133: QUAD $0x013e0e44c40f4166 // pinsrw xmm0, word [r14 + rcx + 62], 1 QUAD $0x023e3e44c40f4366 // pinsrw xmm0, word [r14 + r15 + 62], 2 QUAD $0x033e3644c40f4166 // pinsrw xmm0, word [r14 + rsi + 62], 3 - QUAD $0x043e1644c40f4166 // pinsrw xmm0, word [r14 + rdx + 62], 4 - QUAD $0x053e2e44c40f4366 // pinsrw xmm0, word [r14 + r13 + 62], 5 + QUAD $0x043e2644c40f4366 // pinsrw xmm0, word [r14 + r12 + 62], 4 + QUAD $0x053e1644c40f4166 // pinsrw xmm0, word [r14 + rdx + 62], 5 QUAD $0x063e1e44c40f4166 // pinsrw xmm0, word [r14 + rbx + 62], 6 QUAD $0x073e0e44c40f4366 // pinsrw xmm0, word [r14 + r9 + 62], 7 LONG $0x750f4166; BYTE $0xc3 // pcmpeqw xmm0, xmm11 @@ -29647,25 +30906,25 @@ LBB5_133: LONG $0x7f0f41f3; WORD $0x8844; BYTE $0x10 // movdqu oword [r8 + 4*rcx + 16], xmm0 LONG $0x08c18348 // add rcx, 8 WORD $0x8948; BYTE $0xcf // mov rdi, rcx - LONG $0x244c3b48; BYTE $0x18 // cmp rcx, qword [rsp + 24] - JNE LBB5_133 - QUAD $0x000000e024948b4c // mov r10, qword [rsp + 224] - LONG $0x24543b4c; BYTE $0x18 // cmp r10, qword [rsp + 24] + LONG $0x244c3b48; BYTE $0x28 // cmp rcx, qword [rsp + 40] + JNE LBB5_134 + QUAD $0x000000d024948b4c // mov r10, qword [rsp + 208] + LONG $0x24543b4c; BYTE $0x28 // cmp r10, qword [rsp + 40] QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] LONG $0x245c8b44; BYTE $0x10 // mov r11d, dword [rsp + 16] LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - JNE LBB5_135 - JMP LBB5_138 + JNE LBB5_136 + JMP LBB5_139 -LBB5_180: +LBB5_181: WORD $0x894d; BYTE $0xd0 // mov r8, r10 LONG $0xfce08349 // and r8, -4 WORD $0x894c; BYTE $0xc3 // mov rbx, r8 LONG $0x07e3c148 // shl rbx, 7 WORD $0x014c; BYTE $0xf3 // add rbx, r14 LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] - LONG $0x801c8d4e // lea r11, [rax + 4*r8] + LONG $0x80248d4e // lea r12, [rax + 4*r8] WORD $0x280f; BYTE $0xc8 // movaps xmm1, xmm0 LONG $0x00c8c60f // shufps xmm1, xmm0, 0 LONG $0xfcc68149; WORD $0x0001; BYTE $0x00 // add r14, 508 @@ -29680,7 +30939,7 @@ LBB5_180: LONG $0x6f0f4466; WORD $0x704d // movdqa xmm9, oword 112[rbp] /* [rip + .LCPI5_7] */ LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] -LBB5_181: +LBB5_182: QUAD $0xfffe04b6100f41f3; BYTE $0xff // movss xmm6, dword [r14 - 508] QUAD $0xfffe08be100f41f3; BYTE $0xff // movss xmm7, dword [r14 - 504] QUAD $0xfffe0cae100f41f3; BYTE $0xff // movss xmm5, dword [r14 - 500] @@ -30025,10 +31284,10 @@ LBB5_181: LONG $0x04c18348 // add rcx, 4 LONG $0x00c68149; WORD $0x0002; BYTE $0x00 // add r14, 512 WORD $0x3949; BYTE $0xc8 // cmp r8, rcx - JNE LBB5_181 + JNE LBB5_182 WORD $0x394d; BYTE $0xc2 // cmp r10, r8 - JNE LBB5_183 - JMP LBB5_186 + JNE LBB5_184 + JMP LBB5_187 TEXT ·_comparison_greater_arr_arr_sse4(SB), $80-48 @@ -32763,7 +34022,7 @@ TEXT ·_comparison_greater_arr_scalar_sse4(SB), $360-48 LEAQ LCDATA5<>(SB), BP WORD $0x894d; BYTE $0xc3 // mov r11, r8 - WORD $0x8949; BYTE $0xcc // mov r12, rcx + LONG $0x240c8948 // mov qword [rsp], rcx WORD $0xff83; BYTE $0x06 // cmp edi, 6 JG LBB7_26 WORD $0xff83; BYTE $0x03 // cmp edi, 3 @@ -32771,9 +34030,9 @@ TEXT ·_comparison_greater_arr_scalar_sse4(SB), $360-48 WORD $0xff83; BYTE $0x04 // cmp edi, 4 JE LBB7_98 WORD $0xff83; BYTE $0x05 // cmp edi, 5 - JE LBB7_113 + JE LBB7_114 WORD $0xff83; BYTE $0x06 // cmp edi, 6 - JNE LBB7_200 + JNE LBB7_202 WORD $0x8b44; BYTE $0x2a // mov r13d, dword [rdx] LONG $0x1f538d4d // lea r10, [r11 + 31] WORD $0x854d; BYTE $0xdb // test r11, r11 @@ -32785,6 +34044,7 @@ TEXT ·_comparison_greater_arr_scalar_sse4(SB), $360-48 WORD $0x2941; BYTE $0xc1 // sub r9d, eax JE LBB7_17 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + LONG $0x240c8b4c // mov r9, qword [rsp] LBB7_15: WORD $0x3b44; BYTE $0x2e // cmp r13d, dword [rsi] @@ -32794,8 +34054,7 @@ LBB7_15: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xd8490f48 // cmovns rbx, rax LONG $0x03fbc148 // sar rbx, 3 - WORD $0x894d; BYTE $0xe1 // mov r9, r12 - LONG $0x04b60f45; BYTE $0x1c // movzx r8d, byte [r12 + rbx] + LONG $0x04b60f45; BYTE $0x19 // movzx r8d, byte [r9 + rbx] WORD $0x3044; BYTE $0xc2 // xor dl, r8b LONG $0x00dd3c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rbx] WORD $0xc189 // mov ecx, eax @@ -32804,11 +34063,11 @@ LBB7_15: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xd7 // and dil, dl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x1c3c8841 // mov byte [r12 + rbx], dil + LONG $0x193c8841 // mov byte [r9 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB7_15 - LONG $0x01c48349 // add r12, 1 + LONG $0x24048348; BYTE $0x01 // add qword [rsp], 1 LBB7_17: LONG $0x05fac149 // sar r10, 5 @@ -32816,36 +34075,35 @@ LBB7_17: JL LBB7_21 QUAD $0x00000088249c894c // mov qword [rsp + 136], r11 QUAD $0x000000f02494894c // mov qword [rsp + 240], r10 - QUAD $0x000000b02494894c // mov qword [rsp + 176], r10 + QUAD $0x000000c02494894c // mov qword [rsp + 192], r10 LBB7_19: - QUAD $0x0000008024a4894c // mov qword [rsp + 128], r12 WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d - QUAD $0x000000c02494970f // seta byte [rsp + 192] + QUAD $0x000000d02494970f // seta byte [rsp + 208] LONG $0x046e3944 // cmp dword [rsi + 4], r13d - LONG $0xd7970f40 // seta dil + LONG $0xd2970f41 // seta r10b LONG $0x086e3944 // cmp dword [rsi + 8], r13d - LONG $0xd6970f41 // seta r14b + LONG $0xd7970f40 // seta dil LONG $0x0c6e3944 // cmp dword [rsi + 12], r13d - QUAD $0x000000d02494970f // seta byte [rsp + 208] + QUAD $0x000000b02494970f // seta byte [rsp + 176] LONG $0x106e3944 // cmp dword [rsi + 16], r13d - LONG $0x2454970f; BYTE $0x70 // seta byte [rsp + 112] + LONG $0x2454970f; BYTE $0x68 // seta byte [rsp + 104] LONG $0x146e3944 // cmp dword [rsi + 20], r13d LONG $0x2454970f; BYTE $0x58 // seta byte [rsp + 88] LONG $0x186e3944 // cmp dword [rsi + 24], r13d WORD $0x970f; BYTE $0xd0 // seta al LONG $0x1c6e3944 // cmp dword [rsi + 28], r13d - WORD $0x970f; BYTE $0xd3 // seta bl + LONG $0xd6970f41 // seta r14b LONG $0x206e3944 // cmp dword [rsi + 32], r13d - QUAD $0x000000902494970f // seta byte [rsp + 144] + QUAD $0x000000802494970f // seta byte [rsp + 128] LONG $0x246e3944 // cmp dword [rsi + 36], r13d WORD $0x970f; BYTE $0xd2 // seta dl LONG $0x286e3944 // cmp dword [rsi + 40], r13d LONG $0xd1970f41 // seta r9b LONG $0x2c6e3944 // cmp dword [rsi + 44], r13d - LONG $0xd2970f41 // seta r10b - LONG $0x306e3944 // cmp dword [rsi + 48], r13d LONG $0xd3970f41 // seta r11b + LONG $0x306e3944 // cmp dword [rsi + 48], r13d + WORD $0x970f; BYTE $0xd3 // seta bl LONG $0x346e3944 // cmp dword [rsi + 52], r13d LONG $0xd4970f41 // seta r12b LONG $0x386e3944 // cmp dword [rsi + 56], r13d @@ -32853,126 +34111,127 @@ LBB7_19: LONG $0x3c6e3944 // cmp dword [rsi + 60], r13d WORD $0x970f; BYTE $0xd1 // seta cl LONG $0x406e3944 // cmp dword [rsi + 64], r13d - LONG $0x2454970f; BYTE $0x50 // seta byte [rsp + 80] + LONG $0x2454970f; BYTE $0x48 // seta byte [rsp + 72] LONG $0x446e3944 // cmp dword [rsi + 68], r13d - LONG $0x2454970f; BYTE $0x78 // seta byte [rsp + 120] + QUAD $0x000000902494970f // seta byte [rsp + 144] LONG $0x486e3944 // cmp dword [rsi + 72], r13d - LONG $0x2454970f; BYTE $0x68 // seta byte [rsp + 104] + LONG $0x2454970f; BYTE $0x70 // seta byte [rsp + 112] LONG $0x4c6e3944 // cmp dword [rsi + 76], r13d - LONG $0x2454970f; BYTE $0x60 // seta byte [rsp + 96] + LONG $0x2454970f; BYTE $0x78 // seta byte [rsp + 120] LONG $0x506e3944 // cmp dword [rsi + 80], r13d - LONG $0x2454970f; BYTE $0x40 // seta byte [rsp + 64] + LONG $0x2454970f; BYTE $0x50 // seta byte [rsp + 80] LONG $0x546e3944 // cmp dword [rsi + 84], r13d - LONG $0x2454970f; BYTE $0x48 // seta byte [rsp + 72] + LONG $0x2454970f; BYTE $0x60 // seta byte [rsp + 96] LONG $0x586e3944 // cmp dword [rsi + 88], r13d - LONG $0x2454970f; BYTE $0x38 // seta byte [rsp + 56] + LONG $0x2454970f; BYTE $0x40 // seta byte [rsp + 64] LONG $0x5c6e3944 // cmp dword [rsi + 92], r13d LONG $0xd7970f41 // seta r15b LONG $0x606e3944 // cmp dword [rsi + 96], r13d - LONG $0x2454970f; BYTE $0x08 // seta byte [rsp + 8] + LONG $0x2454970f; BYTE $0x20 // seta byte [rsp + 32] LONG $0x646e3944 // cmp dword [rsi + 100], r13d - LONG $0x2454970f; BYTE $0x30 // seta byte [rsp + 48] + LONG $0x2454970f; BYTE $0x38 // seta byte [rsp + 56] LONG $0x686e3944 // cmp dword [rsi + 104], r13d - LONG $0x2454970f; BYTE $0x18 // seta byte [rsp + 24] + LONG $0x2454970f; BYTE $0x28 // seta byte [rsp + 40] LONG $0x6c6e3944 // cmp dword [rsi + 108], r13d - LONG $0x2454970f; BYTE $0x20 // seta byte [rsp + 32] + LONG $0x2454970f; BYTE $0x30 // seta byte [rsp + 48] LONG $0x706e3944 // cmp dword [rsi + 112], r13d - LONG $0x2454970f; BYTE $0x28 // seta byte [rsp + 40] + LONG $0x2454970f; BYTE $0x18 // seta byte [rsp + 24] LONG $0x746e3944 // cmp dword [rsi + 116], r13d LONG $0x2454970f; BYTE $0x10 // seta byte [rsp + 16] LONG $0x786e3944 // cmp dword [rsi + 120], r13d - LONG $0x2414970f // seta byte [rsp] + LONG $0x2454970f; BYTE $0x08 // seta byte [rsp + 8] LONG $0x7c6e3944 // cmp dword [rsi + 124], r13d LONG $0xd0970f41 // seta r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x000000c024bc0240 // add dil, byte [rsp + 192] + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000d024940244 // add r10b, byte [rsp + 208] WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil + LONG $0x07e6c041 // shl r14b, 7 + WORD $0x0841; BYTE $0xc6 // or r14b, al + LONG $0x02e7c040 // shl dil, 2 + WORD $0x0844; BYTE $0xd7 // or dil, r10b WORD $0xd200 // add dl, dl - LONG $0x90249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 144] - QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] + LONG $0x80249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 128] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x24148b4c // mov r10, qword [rsp] LONG $0x02e1c041 // shl r9b, 2 WORD $0x0841; BYTE $0xd1 // or r9b, dl - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] + LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0xc208 // or dl, al WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b + LONG $0x03e3c041 // shl r11b, 3 + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0x0840; BYTE $0xfa // or dl, dil - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xdb // or bl, r11b LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b + WORD $0x0841; BYTE $0xdc // or r12b, bl QUAD $0x000000a024bcb60f // movzx edi, byte [rsp + 160] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0x0841; BYTE $0xd6 // or r14b, dl WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x0000008024a48b4c // mov r12, qword [rsp + 128] - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] + QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] WORD $0xd200 // add dl, dl - LONG $0x50245402 // add dl, byte [rsp + 80] + LONG $0x48245402 // add dl, byte [rsp + 72] WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] + LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] WORD $0xe2c0; BYTE $0x02 // shl dl, 2 WORD $0x0840; BYTE $0xfa // or dl, dil WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] + LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] WORD $0xe2c0; BYTE $0x03 // shl dl, 3 WORD $0x0840; BYTE $0xfa // or dl, dil WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x40 // movzx edx, byte [rsp + 64] + LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0x0840; BYTE $0xfa // or dl, dil WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] + LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0x0840; BYTE $0xfa // or dl, dil - LONG $0x241c8841 // mov byte [r12], bl - LONG $0x245cb60f; BYTE $0x38 // movzx ebx, byte [rsp + 56] + WORD $0x8845; BYTE $0x32 // mov byte [r10], r14b + LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl - LONG $0x244c8841; BYTE $0x01 // mov byte [r12 + 1], cl + LONG $0x014a8841 // mov byte [r10 + 1], cl WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] + LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] WORD $0xc900 // add cl, cl - LONG $0x08244c02 // add cl, byte [rsp + 8] + LONG $0x20244c02 // add cl, byte [rsp + 32] WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] + LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] WORD $0xe1c0; BYTE $0x02 // shl cl, 2 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] + LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] + LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0xd108 // or cl, dl - LONG $0x2414b60f // movzx edx, byte [rsp] + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] WORD $0xe2c0; BYTE $0x06 // shl dl, 6 LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xd0 // or r8b, dl WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x247c8845; BYTE $0x02 // mov byte [r12 + 2], r15b - LONG $0x24448845; BYTE $0x03 // mov byte [r12 + 3], r8b + LONG $0x027a8845 // mov byte [r10 + 2], r15b + LONG $0x03428845 // mov byte [r10 + 3], r8b LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 - LONG $0x04c48349 // add r12, 4 - QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 + LONG $0x04c28349 // add r10, 4 + LONG $0x2414894c // mov qword [rsp], r10 + QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 JNE LBB7_19 QUAD $0x00000088249c8b4c // mov r11, qword [rsp + 136] QUAD $0x000000f024948b4c // mov r10, qword [rsp + 240] @@ -32980,12 +34239,12 @@ LBB7_19: LBB7_21: LONG $0x05e2c149 // shl r10, 5 WORD $0x394d; BYTE $0xda // cmp r10, r11 - JGE LBB7_200 + JGE LBB7_202 WORD $0x894d; BYTE $0xd8 // mov r8, r11 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 WORD $0x014d; BYTE $0xda // add r10, r11 - JNE LBB7_135 + JNE LBB7_137 WORD $0x3145; BYTE $0xdb // xor r11d, r11d JMP LBB7_24 @@ -32993,14 +34252,14 @@ LBB7_26: WORD $0xff83; BYTE $0x08 // cmp edi, 8 JLE LBB7_27 WORD $0xff83; BYTE $0x09 // cmp edi, 9 - JE LBB7_155 + JE LBB7_157 WORD $0xff83; BYTE $0x0b // cmp edi, 11 - JE LBB7_170 + JE LBB7_172 WORD $0xff83; BYTE $0x0c // cmp edi, 12 - JNE LBB7_200 - LONG $0x1f538d4d // lea r10, [r11 + 31] + JNE LBB7_202 + LONG $0x1f738d4d // lea r14, [r11 + 31] WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xd3490f4d // cmovns r10, r11 + LONG $0xf3490f4d // cmovns r14, r11 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d @@ -33009,17 +34268,19 @@ LBB7_26: WORD $0x2941; BYTE $0xc1 // sub r9d, eax JE LBB7_49 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + LONG $0x24148b4c // mov r10, qword [rsp] LBB7_47: - LONG $0x062e0f66 // ucomisd xmm0, qword [rsi] - LONG $0x08768d48 // lea rsi, [rsi + 8] - WORD $0xd219 // sbb edx, edx + LONG $0x0e100ff2 // movsd xmm1, qword [rsi] + LONG $0x08c68348 // add rsi, 8 + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + WORD $0x970f; BYTE $0xd2 // seta dl + WORD $0xdaf6 // neg dl LONG $0x07788d48 // lea rdi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - WORD $0x894d; BYTE $0xe6 // mov r14, r12 - LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] + LONG $0x0cb60f45; BYTE $0x3a // movzx r9d, byte [r10 + rdi] WORD $0x3044; BYTE $0xca // xor dl, r9b QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -33028,197 +34289,225 @@ LBB7_47: WORD $0xe3d3 // shl ebx, cl WORD $0xd320 // and bl, dl WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3c1c8841 // mov byte [r12 + rdi], bl + LONG $0x3a1c8841 // mov byte [r10 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB7_47 - LONG $0x01c48349 // add r12, 1 + LONG $0x24048348; BYTE $0x01 // add qword [rsp], 1 LBB7_49: - LONG $0x05fac149 // sar r10, 5 + LONG $0x05fec149 // sar r14, 5 LONG $0x20fb8349 // cmp r11, 32 JL LBB7_53 QUAD $0x00000088249c894c // mov qword [rsp + 136], r11 - QUAD $0x000000b02494894c // mov qword [rsp + 176], r10 - QUAD $0x000000c02494894c // mov qword [rsp + 192], r10 + QUAD $0x000000c024b4894c // mov qword [rsp + 192], r14 + QUAD $0x000000d024b4894c // mov qword [rsp + 208], r14 LBB7_51: - QUAD $0x0000008024a4894c // mov qword [rsp + 128], r12 - LONG $0x062e0f66 // ucomisd xmm0, qword [rsi] - QUAD $0x000000d02494920f // setb byte [rsp + 208] - LONG $0x462e0f66; BYTE $0x08 // ucomisd xmm0, qword [rsi + 8] - LONG $0xd1920f41 // setb r9b - LONG $0x462e0f66; BYTE $0x10 // ucomisd xmm0, qword [rsi + 16] - LONG $0xd6920f41 // setb r14b - LONG $0x462e0f66; BYTE $0x18 // ucomisd xmm0, qword [rsi + 24] - LONG $0xd5920f41 // setb r13b - LONG $0x462e0f66; BYTE $0x20 // ucomisd xmm0, qword [rsi + 32] - LONG $0x2454920f; BYTE $0x70 // setb byte [rsp + 112] - LONG $0x462e0f66; BYTE $0x28 // ucomisd xmm0, qword [rsi + 40] - LONG $0x2454920f; BYTE $0x58 // setb byte [rsp + 88] - LONG $0x462e0f66; BYTE $0x30 // ucomisd xmm0, qword [rsi + 48] - WORD $0x920f; BYTE $0xd0 // setb al - LONG $0x462e0f66; BYTE $0x38 // ucomisd xmm0, qword [rsi + 56] - WORD $0x920f; BYTE $0xd3 // setb bl - LONG $0x462e0f66; BYTE $0x40 // ucomisd xmm0, qword [rsi + 64] - QUAD $0x000000a02494920f // setb byte [rsp + 160] - LONG $0x462e0f66; BYTE $0x48 // ucomisd xmm0, qword [rsi + 72] - WORD $0x920f; BYTE $0xd2 // setb dl - LONG $0x462e0f66; BYTE $0x50 // ucomisd xmm0, qword [rsi + 80] - LONG $0xd7920f40 // setb dil - LONG $0x462e0f66; BYTE $0x58 // ucomisd xmm0, qword [rsi + 88] - LONG $0xd2920f41 // setb r10b - LONG $0x462e0f66; BYTE $0x60 // ucomisd xmm0, qword [rsi + 96] - LONG $0xd3920f41 // setb r11b - LONG $0x462e0f66; BYTE $0x68 // ucomisd xmm0, qword [rsi + 104] - LONG $0xd4920f41 // setb r12b - LONG $0x462e0f66; BYTE $0x70 // ucomisd xmm0, qword [rsi + 112] - LONG $0x2454920f; BYTE $0x78 // setb byte [rsp + 120] - LONG $0x462e0f66; BYTE $0x78 // ucomisd xmm0, qword [rsi + 120] - WORD $0x920f; BYTE $0xd1 // setb cl - QUAD $0x00000080862e0f66 // ucomisd xmm0, qword [rsi + 128] - LONG $0x2454920f; BYTE $0x50 // setb byte [rsp + 80] - QUAD $0x00000088862e0f66 // ucomisd xmm0, qword [rsi + 136] - QUAD $0x000000902494920f // setb byte [rsp + 144] - QUAD $0x00000090862e0f66 // ucomisd xmm0, qword [rsi + 144] - LONG $0x2454920f; BYTE $0x68 // setb byte [rsp + 104] - QUAD $0x00000098862e0f66 // ucomisd xmm0, qword [rsi + 152] - LONG $0x2454920f; BYTE $0x60 // setb byte [rsp + 96] - QUAD $0x000000a0862e0f66 // ucomisd xmm0, qword [rsi + 160] - LONG $0x2454920f; BYTE $0x40 // setb byte [rsp + 64] - QUAD $0x000000a8862e0f66 // ucomisd xmm0, qword [rsi + 168] - LONG $0x2454920f; BYTE $0x48 // setb byte [rsp + 72] - QUAD $0x000000b0862e0f66 // ucomisd xmm0, qword [rsi + 176] - LONG $0x2454920f; BYTE $0x38 // setb byte [rsp + 56] - QUAD $0x000000b8862e0f66 // ucomisd xmm0, qword [rsi + 184] - LONG $0xd7920f41 // setb r15b - QUAD $0x000000c0862e0f66 // ucomisd xmm0, qword [rsi + 192] - LONG $0x2454920f; BYTE $0x08 // setb byte [rsp + 8] - QUAD $0x000000c8862e0f66 // ucomisd xmm0, qword [rsi + 200] - LONG $0x2454920f; BYTE $0x30 // setb byte [rsp + 48] - QUAD $0x000000d0862e0f66 // ucomisd xmm0, qword [rsi + 208] - LONG $0x2454920f; BYTE $0x18 // setb byte [rsp + 24] - QUAD $0x000000d8862e0f66 // ucomisd xmm0, qword [rsi + 216] - LONG $0x2454920f; BYTE $0x20 // setb byte [rsp + 32] - QUAD $0x000000e0862e0f66 // ucomisd xmm0, qword [rsi + 224] - LONG $0x2454920f; BYTE $0x28 // setb byte [rsp + 40] - QUAD $0x000000e8862e0f66 // ucomisd xmm0, qword [rsi + 232] - LONG $0x2454920f; BYTE $0x10 // setb byte [rsp + 16] - QUAD $0x000000f0862e0f66 // ucomisd xmm0, qword [rsi + 240] - LONG $0x2414920f // setb byte [rsp] - QUAD $0x000000f8862e0f66 // ucomisd xmm0, qword [rsi + 248] - LONG $0xd0920f41 // setb r8b - WORD $0x0045; BYTE $0xc9 // add r9b, r9b - QUAD $0x000000d0248c0244 // add r9b, byte [rsp + 208] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 + LONG $0x0e100ff2 // movsd xmm1, qword [rsi] + LONG $0x56100ff2; BYTE $0x08 // movsd xmm2, qword [rsi + 8] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0x2454970f; BYTE $0x18 // seta byte [rsp + 24] + LONG $0xd02e0f66 // ucomisd xmm2, xmm0 + WORD $0x970f; BYTE $0xd3 // seta bl + LONG $0x4e100ff2; BYTE $0x10 // movsd xmm1, qword [rsi + 16] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0x4e100ff2; BYTE $0x18 // movsd xmm1, qword [rsi + 24] + LONG $0xd5970f41 // seta r13b + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0xd4970f41 // seta r12b + LONG $0x4e100ff2; BYTE $0x20 // movsd xmm1, qword [rsi + 32] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0x4e100ff2; BYTE $0x28 // movsd xmm1, qword [rsi + 40] + LONG $0x2454970f; BYTE $0x50 // seta byte [rsp + 80] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0x2454970f; BYTE $0x60 // seta byte [rsp + 96] + LONG $0x4e100ff2; BYTE $0x30 // movsd xmm1, qword [rsi + 48] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0x4e100ff2; BYTE $0x38 // movsd xmm1, qword [rsi + 56] + LONG $0x2454970f; BYTE $0x58 // seta byte [rsp + 88] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0x2454970f; BYTE $0x40 // seta byte [rsp + 64] + LONG $0x4e100ff2; BYTE $0x40 // movsd xmm1, qword [rsi + 64] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0x4e100ff2; BYTE $0x48 // movsd xmm1, qword [rsi + 72] + LONG $0x2454970f; BYTE $0x10 // seta byte [rsp + 16] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + WORD $0x970f; BYTE $0xd0 // seta al + LONG $0x4e100ff2; BYTE $0x50 // movsd xmm1, qword [rsi + 80] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0x4e100ff2; BYTE $0x58 // movsd xmm1, qword [rsi + 88] + LONG $0x2454970f; BYTE $0x38 // seta byte [rsp + 56] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0x2454970f; BYTE $0x20 // seta byte [rsp + 32] + LONG $0x4e100ff2; BYTE $0x60 // movsd xmm1, qword [rsi + 96] + LONG $0x5e100ff2; BYTE $0x68 // movsd xmm3, qword [rsi + 104] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0x6e100ff2; BYTE $0x70 // movsd xmm5, qword [rsi + 112] + LONG $0x76100ff2; BYTE $0x78 // movsd xmm6, qword [rsi + 120] + LONG $0x2454970f; BYTE $0x78 // seta byte [rsp + 120] + QUAD $0x00008086100f44f2; BYTE $0x00 // movsd xmm8, qword [rsi + 128] + QUAD $0x0000888e100f44f2; BYTE $0x00 // movsd xmm9, qword [rsi + 136] + LONG $0xd82e0f66 // ucomisd xmm3, xmm0 + QUAD $0x00009096100f44f2; BYTE $0x00 // movsd xmm10, qword [rsi + 144] + QUAD $0x0000989e100f44f2; BYTE $0x00 // movsd xmm11, qword [rsi + 152] + QUAD $0x000000902494970f // seta byte [rsp + 144] + QUAD $0x0000a0a6100f44f2; BYTE $0x00 // movsd xmm12, qword [rsi + 160] + QUAD $0x0000a8ae100f44f2; BYTE $0x00 // movsd xmm13, qword [rsi + 168] + LONG $0xe82e0f66 // ucomisd xmm5, xmm0 + QUAD $0x0000b0b6100f44f2; BYTE $0x00 // movsd xmm14, qword [rsi + 176] + QUAD $0x000000b896100ff2 // movsd xmm2, qword [rsi + 184] + QUAD $0x000000802494970f // seta byte [rsp + 128] + QUAD $0x000000c09e100ff2 // movsd xmm3, qword [rsi + 192] + QUAD $0x000000c8a6100ff2 // movsd xmm4, qword [rsi + 200] + LONG $0xf02e0f66 // ucomisd xmm6, xmm0 + QUAD $0x000000d0b6100ff2 // movsd xmm6, qword [rsi + 208] + QUAD $0x000000d8be100ff2 // movsd xmm7, qword [rsi + 216] + LONG $0xd3970f41 // seta r11b + QUAD $0x000000e08e100ff2 // movsd xmm1, qword [rsi + 224] + QUAD $0x000000e8ae100ff2 // movsd xmm5, qword [rsi + 232] + LONG $0x2e0f4466; BYTE $0xc0 // ucomisd xmm8, xmm0 + QUAD $0x000000b02494970f // seta byte [rsp + 176] + LONG $0x2e0f4466; BYTE $0xc8 // ucomisd xmm9, xmm0 + WORD $0x970f; BYTE $0xd1 // seta cl + LONG $0x2e0f4466; BYTE $0xd0 // ucomisd xmm10, xmm0 + LONG $0xd7970f40 // seta dil + LONG $0x2e0f4466; BYTE $0xd8 // ucomisd xmm11, xmm0 + LONG $0xd0970f41 // seta r8b + LONG $0x2e0f4466; BYTE $0xe0 // ucomisd xmm12, xmm0 + LONG $0xd2970f41 // seta r10b + LONG $0x2e0f4466; BYTE $0xe8 // ucomisd xmm13, xmm0 + LONG $0xd6970f41 // seta r14b + LONG $0x2e0f4466; BYTE $0xf0 // ucomisd xmm14, xmm0 + QUAD $0x000000a02494970f // seta byte [rsp + 160] + LONG $0xd02e0f66 // ucomisd xmm2, xmm0 + LONG $0xd1970f41 // seta r9b + LONG $0xd82e0f66 // ucomisd xmm3, xmm0 + LONG $0x2454970f; BYTE $0x68 // seta byte [rsp + 104] + LONG $0xe02e0f66 // ucomisd xmm4, xmm0 + LONG $0xd7970f41 // seta r15b + LONG $0xf02e0f66 // ucomisd xmm6, xmm0 + LONG $0x2454970f; BYTE $0x70 // seta byte [rsp + 112] + LONG $0xf82e0f66 // ucomisd xmm7, xmm0 + LONG $0x2454970f; BYTE $0x48 // seta byte [rsp + 72] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0x2454970f; BYTE $0x28 // seta byte [rsp + 40] + LONG $0xe82e0f66 // ucomisd xmm5, xmm0 + QUAD $0x000000f08e100ff2 // movsd xmm1, qword [rsi + 240] + LONG $0x2454970f; BYTE $0x30 // seta byte [rsp + 48] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0x2454970f; BYTE $0x08 // seta byte [rsp + 8] + QUAD $0x000000f88e100ff2 // movsd xmm1, qword [rsi + 248] + LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + WORD $0x970f; BYTE $0xd2 // seta dl + WORD $0xdb00 // add bl, bl + LONG $0x18245c02 // add bl, byte [rsp + 24] + LONG $0x02e5c041 // shl r13b, 2 + WORD $0x0841; BYTE $0xdd // or r13b, bl + LONG $0x03e4c041 // shl r12b, 3 + WORD $0x0845; BYTE $0xec // or r12b, r13b + LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xe3 // or bl, r12b + WORD $0x8941; BYTE $0xdc // mov r12d, ebx + LONG $0x245cb60f; BYTE $0x60 // movzx ebx, byte [rsp + 96] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xe3 // or bl, r12b + LONG $0x64b60f44; WORD $0x5824 // movzx r12d, byte [rsp + 88] + LONG $0x06e4c041 // shl r12b, 6 + LONG $0x6cb60f44; WORD $0x4024 // movzx r13d, byte [rsp + 64] + LONG $0x07e5c041 // shl r13b, 7 + WORD $0x0845; BYTE $0xe5 // or r13b, r12b + WORD $0xc000 // add al, al + LONG $0x10244402 // add al, byte [rsp + 16] + LONG $0x64b60f44; WORD $0x3824 // movzx r12d, byte [rsp + 56] + LONG $0x02e4c041 // shl r12b, 2 + WORD $0x0841; BYTE $0xc4 // or r12b, al + WORD $0x8944; BYTE $0xe0 // mov eax, r12d + LONG $0x64b60f44; WORD $0x2024 // movzx r12d, byte [rsp + 32] + LONG $0x03e4c041 // shl r12b, 3 + WORD $0x0841; BYTE $0xc4 // or r12b, al + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xe0 // or al, r12b + WORD $0x0841; BYTE $0xdd // or r13b, bl + QUAD $0x00000090249cb60f // movzx ebx, byte [rsp + 144] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 WORD $0xc308 // or bl, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0845; BYTE $0xce // or r14b, r9b - WORD $0xd200 // add dl, dl - LONG $0xa0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 160] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xf5 // or r13b, r14b - LONG $0x02e7c040 // shl dil, 2 - WORD $0x0840; BYTE $0xd7 // or dil, dl - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0844; BYTE $0xea // or dl, r13b - WORD $0x8941; BYTE $0xd1 // mov r9d, edx - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0844; BYTE $0xca // or dl, r9b - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b - LONG $0x247cb60f; BYTE $0x78 // movzx edi, byte [rsp + 120] - LONG $0x06e7c040 // shl dil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl - WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xd200 // add dl, dl - LONG $0x50245402 // add dl, byte [rsp + 80] - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x40 // movzx edx, byte [rsp + 64] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0x1888 // mov byte [rax], bl - LONG $0x245cb60f; BYTE $0x38 // movzx ebx, byte [rsp + 56] - WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xdf // or r15b, bl - WORD $0x4888; BYTE $0x01 // mov byte [rax + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + LONG $0x07e3c041 // shl r11b, 7 + WORD $0x0841; BYTE $0xc3 // or r11b, al WORD $0xc900 // add cl, cl - LONG $0x08244c02 // add cl, byte [rsp + 8] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx + LONG $0xb0248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 176] + LONG $0x02e7c040 // shl dil, 2 + WORD $0x0840; BYTE $0xcf // or dil, cl + LONG $0x03e0c041 // shl r8b, 3 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + LONG $0x04e2c041 // shl r10b, 4 + WORD $0x0845; BYTE $0xc2 // or r10b, r8b + LONG $0x05e6c041 // shl r14b, 5 + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0841; BYTE $0xdb // or r11b, bl + QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + LONG $0x07e1c041 // shl r9b, 7 + WORD $0x0841; BYTE $0xc1 // or r9b, al + LONG $0x24048b48 // mov rax, qword [rsp] + WORD $0x8844; BYTE $0x28 // mov byte [rax], r13b + WORD $0x0845; BYTE $0xf1 // or r9b, r14b + WORD $0x0045; BYTE $0xff // add r15b, r15b + LONG $0x247c0244; BYTE $0x68 // add r15b, byte [rsp + 104] + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0844; BYTE $0xf8 // or al, r15b + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc389 // mov ebx, eax + LONG $0x24048b48 // mov rax, qword [rsp] LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] + WORD $0xd908 // or cl, bl + WORD $0xcb89 // mov ebx, ecx + LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2414b60f // movzx edx, byte [rsp] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x02788844 // mov byte [rax + 2], r15b - LONG $0x03408844 // mov byte [rax + 3], r8b - LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 + WORD $0xd908 // or cl, bl + LONG $0x01588844 // mov byte [rax + 1], r11b + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + WORD $0xe3c0; BYTE $0x06 // shl bl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xda08 // or dl, bl + LONG $0x02488844 // mov byte [rax + 2], r9b + WORD $0xca08 // or dl, cl + WORD $0x5088; BYTE $0x03 // mov byte [rax + 3], dl LONG $0x04c08348 // add rax, 4 - WORD $0x8949; BYTE $0xc4 // mov r12, rax - QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 + LONG $0x24048948 // mov qword [rsp], rax + QUAD $0x000000d024848348; BYTE $0xff // add qword [rsp + 208], -1 JNE LBB7_51 QUAD $0x00000088249c8b4c // mov r11, qword [rsp + 136] - QUAD $0x000000b024948b4c // mov r10, qword [rsp + 176] + QUAD $0x000000c024b48b4c // mov r14, qword [rsp + 192] LBB7_53: - LONG $0x05e2c149 // shl r10, 5 - WORD $0x394d; BYTE $0xda // cmp r10, r11 - JGE LBB7_200 + LONG $0x05e6c149 // shl r14, 5 + WORD $0x394d; BYTE $0xde // cmp r14, r11 + JGE LBB7_202 WORD $0x894d; BYTE $0xd8 // mov r8, r11 - WORD $0x294d; BYTE $0xd0 // sub r8, r10 - WORD $0xf749; BYTE $0xd2 // not r10 - WORD $0x014d; BYTE $0xda // add r10, r11 - JNE LBB7_193 - WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB7_195 + WORD $0x294d; BYTE $0xf0 // sub r8, r14 + WORD $0xf749; BYTE $0xd6 // not r14 + WORD $0x014d; BYTE $0xde // add r14, r11 + JNE LBB7_196 + WORD $0x3145; BYTE $0xd2 // xor r10d, r10d + JMP LBB7_198 LBB7_2: WORD $0xff83; BYTE $0x02 // cmp edi, 2 JE LBB7_56 WORD $0xff83; BYTE $0x03 // cmp edi, 3 - JNE LBB7_200 - WORD $0x8a44; BYTE $0x32 // mov r14b, byte [rdx] + JNE LBB7_202 + WORD $0x8a44; BYTE $0x22 // mov r12b, byte [rdx] LONG $0x1f538d4d // lea r10, [r11 + 31] WORD $0x854d; BYTE $0xdb // test r11, r11 LONG $0xd3490f4d // cmovns r10, r11 @@ -33229,9 +34518,10 @@ LBB7_2: WORD $0x2941; BYTE $0xc1 // sub r9d, eax JE LBB7_8 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + LONG $0x24348b4c // mov r14, qword [rsp] LBB7_6: - WORD $0x3844; BYTE $0x36 // cmp byte [rsi], r14b + WORD $0x3844; BYTE $0x26 // cmp byte [rsi], r12b LONG $0x01768d48 // lea rsi, [rsi + 1] WORD $0x9f0f; BYTE $0xd2 // setg dl WORD $0xdaf6 // neg dl @@ -33239,8 +34529,7 @@ LBB7_6: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - WORD $0x894d; BYTE $0xe7 // mov r15, r12 - LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] + LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] WORD $0x3044; BYTE $0xca // xor dl, r9b QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -33249,34 +34538,36 @@ LBB7_6: WORD $0xe3d3 // shl ebx, cl WORD $0xd320 // and bl, dl WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3c1c8841 // mov byte [r12 + rdi], bl + LONG $0x3e1c8841 // mov byte [r14 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB7_6 - LONG $0x01c48349 // add r12, 1 + LONG $0x24048348; BYTE $0x01 // add qword [rsp], 1 LBB7_8: - LONG $0x05fac149 // sar r10, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x05fac149 // sar r10, 5 + LONG $0x20fb8349 // cmp r11, 32 JL LBB7_9 - LONG $0x10fa8349 // cmp r10, 16 - LONG $0x24348844 // mov byte [rsp], r14b - QUAD $0x00000088249c894c // mov qword [rsp + 136], r11 - QUAD $0x000001202494894c // mov qword [rsp + 288], r10 + LONG $0x10fa8349 // cmp r10, 16 + LONG $0x24648844; BYTE $0x08 // mov byte [rsp + 8], r12b + QUAD $0x00000088249c894c // mov qword [rsp + 136], r11 + QUAD $0x000001202494894c // mov qword [rsp + 288], r10 JB LBB7_81 - WORD $0x894c; BYTE $0xd0 // mov rax, r10 - LONG $0x05e0c148 // shl rax, 5 - WORD $0x0148; BYTE $0xf0 // add rax, rsi - WORD $0x3949; BYTE $0xc4 // cmp r12, rax + WORD $0x894c; BYTE $0xd0 // mov rax, r10 + LONG $0x05e0c148 // shl rax, 5 + WORD $0x0148; BYTE $0xf0 // add rax, rsi + LONG $0x24043948 // cmp qword [rsp], rax JAE LBB7_84 - LONG $0x94048d4b // lea rax, [r12 + 4*r10] - WORD $0x3948; BYTE $0xc6 // cmp rsi, rax + LONG $0x24048b48 // mov rax, qword [rsp] + LONG $0x90048d4a // lea rax, [rax + 4*r10] + WORD $0x3948; BYTE $0xc6 // cmp rsi, rax JAE LBB7_84 LBB7_81: WORD $0xc031 // xor eax, eax QUAD $0x000000e824848948 // mov qword [rsp + 232], rax - LONG $0x2464894c; BYTE $0x58 // mov qword [rsp + 88], r12 + LONG $0x24048b48 // mov rax, qword [rsp] + LONG $0x24448948; BYTE $0x60 // mov qword [rsp + 96], rax LBB7_87: QUAD $0x000000e824942b4c // sub r10, qword [rsp + 232] @@ -33284,170 +34575,179 @@ LBB7_87: LBB7_88: WORD $0x8948; BYTE $0xf1 // mov rcx, rsi - WORD $0x3844; BYTE $0x36 // cmp byte [rsi], r14b - QUAD $0x000000b024949f0f // setg byte [rsp + 176] - LONG $0x01763844 // cmp byte [rsi + 1], r14b + WORD $0x3844; BYTE $0x26 // cmp byte [rsi], r12b + QUAD $0x000000c024949f0f // setg byte [rsp + 192] + LONG $0x01663844 // cmp byte [rsi + 1], r12b LONG $0xd69f0f40 // setg sil - LONG $0x02713844 // cmp byte [rcx + 2], r14b + LONG $0x02613844 // cmp byte [rcx + 2], r12b LONG $0xd79f0f41 // setg r15b - LONG $0x03713844 // cmp byte [rcx + 3], r14b + LONG $0x03613844 // cmp byte [rcx + 3], r12b LONG $0xd49f0f41 // setg r12b - LONG $0x04713844 // cmp byte [rcx + 4], r14b + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0x4138; BYTE $0x04 // cmp byte [rcx + 4], al + QUAD $0x000000b024949f0f // setg byte [rsp + 176] + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0x4138; BYTE $0x05 // cmp byte [rcx + 5], al + LONG $0x24549f0f; BYTE $0x40 // setg byte [rsp + 64] + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0x4138; BYTE $0x06 // cmp byte [rcx + 6], al QUAD $0x000000d024949f0f // setg byte [rsp + 208] - LONG $0x05713844 // cmp byte [rcx + 5], r14b - LONG $0x24549f0f; BYTE $0x38 // setg byte [rsp + 56] - LONG $0x06713844 // cmp byte [rcx + 6], r14b - QUAD $0x000000c024949f0f // setg byte [rsp + 192] - LONG $0x07713844 // cmp byte [rcx + 7], r14b + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0x4138; BYTE $0x07 // cmp byte [rcx + 7], al LONG $0xd19f0f41 // setg r9b - LONG $0x08713844 // cmp byte [rcx + 8], r14b - QUAD $0x0000009024949f0f // setg byte [rsp + 144] - LONG $0x09713844 // cmp byte [rcx + 9], r14b + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0x4138; BYTE $0x08 // cmp byte [rcx + 8], al + QUAD $0x0000008024949f0f // setg byte [rsp + 128] + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0x4138; BYTE $0x09 // cmp byte [rcx + 9], al WORD $0x9f0f; BYTE $0xd2 // setg dl - LONG $0x0a713844 // cmp byte [rcx + 10], r14b + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0x4138; BYTE $0x0a // cmp byte [rcx + 10], al LONG $0xd79f0f40 // setg dil - LONG $0x0b713844 // cmp byte [rcx + 11], r14b + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0x4138; BYTE $0x0b // cmp byte [rcx + 11], al LONG $0xd29f0f41 // setg r10b - LONG $0x0c713844 // cmp byte [rcx + 12], r14b + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0x4138; BYTE $0x0c // cmp byte [rcx + 12], al LONG $0xd69f0f41 // setg r14b - LONG $0x2404b60f // movzx eax, byte [rsp] + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x0d // cmp byte [rcx + 13], al LONG $0xd59f0f41 // setg r13b - LONG $0x2404b60f // movzx eax, byte [rsp] + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x0e // cmp byte [rcx + 14], al QUAD $0x000000a024949f0f // setg byte [rsp + 160] - LONG $0x2404b60f // movzx eax, byte [rsp] + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x0f // cmp byte [rcx + 15], al LONG $0xd09f0f41 // setg r8b - LONG $0x241cb60f // movzx ebx, byte [rsp] + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x10 // cmp byte [rcx + 16], bl - LONG $0x24549f0f; BYTE $0x78 // setg byte [rsp + 120] - LONG $0x241cb60f // movzx ebx, byte [rsp] + QUAD $0x0000009024949f0f // setg byte [rsp + 144] + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x11 // cmp byte [rcx + 17], bl - LONG $0x24549f0f; BYTE $0x68 // setg byte [rsp + 104] - LONG $0x241cb60f // movzx ebx, byte [rsp] - WORD $0x5938; BYTE $0x12 // cmp byte [rcx + 18], bl LONG $0x24549f0f; BYTE $0x70 // setg byte [rsp + 112] - LONG $0x241cb60f // movzx ebx, byte [rsp] + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + WORD $0x5938; BYTE $0x12 // cmp byte [rcx + 18], bl + LONG $0x24549f0f; BYTE $0x68 // setg byte [rsp + 104] + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x13 // cmp byte [rcx + 19], bl - LONG $0x24549f0f; BYTE $0x60 // setg byte [rsp + 96] - LONG $0x241cb60f // movzx ebx, byte [rsp] + LONG $0x24549f0f; BYTE $0x78 // setg byte [rsp + 120] + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x14 // cmp byte [rcx + 20], bl - LONG $0x24549f0f; BYTE $0x50 // setg byte [rsp + 80] - LONG $0x241cb60f // movzx ebx, byte [rsp] - WORD $0x5938; BYTE $0x15 // cmp byte [rcx + 21], bl LONG $0x24549f0f; BYTE $0x48 // setg byte [rsp + 72] - LONG $0x241cb60f // movzx ebx, byte [rsp] + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] + WORD $0x5938; BYTE $0x15 // cmp byte [rcx + 21], bl + LONG $0x24549f0f; BYTE $0x58 // setg byte [rsp + 88] + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x16 // cmp byte [rcx + 22], bl - LONG $0x24549f0f; BYTE $0x40 // setg byte [rsp + 64] - LONG $0x241cb60f // movzx ebx, byte [rsp] + LONG $0x24549f0f; BYTE $0x50 // setg byte [rsp + 80] + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x17 // cmp byte [rcx + 23], bl LONG $0xd39f0f41 // setg r11b - LONG $0x241cb60f // movzx ebx, byte [rsp] + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x18 // cmp byte [rcx + 24], bl - LONG $0x24549f0f; BYTE $0x30 // setg byte [rsp + 48] - LONG $0x241cb60f // movzx ebx, byte [rsp] + LONG $0x24549f0f; BYTE $0x38 // setg byte [rsp + 56] + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x19 // cmp byte [rcx + 25], bl - LONG $0x24549f0f; BYTE $0x18 // setg byte [rsp + 24] - LONG $0x241cb60f // movzx ebx, byte [rsp] + LONG $0x24549f0f; BYTE $0x28 // setg byte [rsp + 40] + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x1a // cmp byte [rcx + 26], bl - LONG $0x24549f0f; BYTE $0x20 // setg byte [rsp + 32] - LONG $0x241cb60f // movzx ebx, byte [rsp] + LONG $0x24549f0f; BYTE $0x30 // setg byte [rsp + 48] + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x1b // cmp byte [rcx + 27], bl - LONG $0x24549f0f; BYTE $0x08 // setg byte [rsp + 8] - LONG $0x241cb60f // movzx ebx, byte [rsp] + LONG $0x24549f0f; BYTE $0x20 // setg byte [rsp + 32] + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x1c // cmp byte [rcx + 28], bl - LONG $0x24549f0f; BYTE $0x28 // setg byte [rsp + 40] - LONG $0x241cb60f // movzx ebx, byte [rsp] + LONG $0x24549f0f; BYTE $0x18 // setg byte [rsp + 24] + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x1d // cmp byte [rcx + 29], bl LONG $0x24549f0f; BYTE $0x10 // setg byte [rsp + 16] - LONG $0x241cb60f // movzx ebx, byte [rsp] + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x1e // cmp byte [rcx + 30], bl - QUAD $0x0000008024949f0f // setg byte [rsp + 128] - LONG $0x241cb60f // movzx ebx, byte [rsp] + LONG $0x24149f0f // setg byte [rsp] + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x1f // cmp byte [rcx + 31], bl WORD $0x9f0f; BYTE $0xd3 // setg bl WORD $0x0040; BYTE $0xf6 // add sil, sil - QUAD $0x000000b024b40240 // add sil, byte [rsp + 176] - QUAD $0x000000c02484b60f // movzx eax, byte [rsp + 192] + QUAD $0x000000c024b40240 // add sil, byte [rsp + 192] + QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e1c041 // shl r9b, 7 WORD $0x0841; BYTE $0xc1 // or r9b, al LONG $0x02e7c041 // shl r15b, 2 WORD $0x0841; BYTE $0xf7 // or r15b, sil WORD $0xd200 // add dl, dl - LONG $0x90249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 144] + LONG $0x80249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 128] LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xfc // or r12b, r15b LONG $0x02e7c040 // shl dil, 2 WORD $0x0840; BYTE $0xd7 // or dil, dl - QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b + LONG $0x64b60f44; WORD $0x0824 // movzx r12d, byte [rsp + 8] LONG $0x03e2c041 // shl r10b, 3 WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x2454b60f; BYTE $0x38 // movzx edx, byte [rsp + 56] + LONG $0x2454b60f; BYTE $0x40 // movzx edx, byte [rsp + 64] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0xc208 // or dl, al LONG $0x04e6c041 // shl r14b, 4 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x05e5c041 // shl r13b, 5 WORD $0x0845; BYTE $0xf5 // or r13b, r14b - LONG $0x34b60f44; BYTE $0x24 // movzx r14d, byte [rsp] QUAD $0x000000a024b4b60f // movzx esi, byte [rsp + 160] LONG $0x06e6c040 // shl sil, 6 LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xf0 // or r8b, sil WORD $0x0841; BYTE $0xd1 // or r9b, dl WORD $0x0845; BYTE $0xe8 // or r8b, r13b - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] + LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] WORD $0xd200 // add dl, dl - LONG $0x78245402 // add dl, byte [rsp + 120] + LONG $0x90249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 144] WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] + LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] WORD $0xe2c0; BYTE $0x02 // shl dl, 2 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] + LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] WORD $0xe2c0; BYTE $0x03 // shl dl, 3 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] + LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] + LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx - LONG $0x24548b48; BYTE $0x58 // mov rdx, qword [rsp + 88] + LONG $0x24548b48; BYTE $0x60 // mov rdx, qword [rsp + 96] WORD $0x8844; BYTE $0x0a // mov byte [rdx], r9b - LONG $0x247cb60f; BYTE $0x40 // movzx edi, byte [rsp + 64] + LONG $0x247cb60f; BYTE $0x50 // movzx edi, byte [rsp + 80] LONG $0x06e7c040 // shl dil, 6 LONG $0x07e3c041 // shl r11b, 7 WORD $0x0841; BYTE $0xfb // or r11b, dil LONG $0x01428844 // mov byte [rdx + 1], r8b WORD $0x0841; BYTE $0xf3 // or r11b, sil - LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xc000 // add al, al - LONG $0x30244402 // add al, byte [rsp + 48] + LONG $0x38244402 // add al, byte [rsp + 56] WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0x0840; BYTE $0xf0 // or al, sil WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0840; BYTE $0xf0 // or al, sil WORD $0xc689 // mov esi, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0840; BYTE $0xf0 // or al, sil WORD $0xc689 // mov esi, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0x0840; BYTE $0xf0 // or al, sil - QUAD $0x0000008024b4b60f // movzx esi, byte [rsp + 128] + LONG $0x2434b60f // movzx esi, byte [rsp] LONG $0x06e6c040 // shl sil, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0x0840; BYTE $0xf3 // or bl, sil @@ -33456,7 +34756,7 @@ LBB7_88: WORD $0x5a88; BYTE $0x03 // mov byte [rdx + 3], bl LONG $0x20718d48 // lea rsi, [rcx + 32] LONG $0x04c28348 // add rdx, 4 - LONG $0x24548948; BYTE $0x58 // mov qword [rsp + 88], rdx + LONG $0x24548948; BYTE $0x60 // mov qword [rsp + 96], rdx QUAD $0x000000f024848348; BYTE $0xff // add qword [rsp + 240], -1 JNE LBB7_88 QUAD $0x00000088249c8b4c // mov r11, qword [rsp + 136] @@ -33465,9 +34765,9 @@ LBB7_88: LBB7_27: WORD $0xff83; BYTE $0x07 // cmp edi, 7 - JE LBB7_137 + JE LBB7_139 WORD $0xff83; BYTE $0x08 // cmp edi, 8 - JNE LBB7_200 + JNE LBB7_202 WORD $0x8b4c; BYTE $0x2a // mov r13, qword [rdx] LONG $0x1f538d4d // lea r10, [r11 + 31] WORD $0x854d; BYTE $0xdb // test r11, r11 @@ -33479,6 +34779,7 @@ LBB7_27: WORD $0x2941; BYTE $0xc1 // sub r9d, eax JE LBB7_33 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + LONG $0x240c8b4c // mov r9, qword [rsp] LBB7_31: WORD $0x3b4c; BYTE $0x2e // cmp r13, qword [rsi] @@ -33488,8 +34789,7 @@ LBB7_31: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xd8490f48 // cmovns rbx, rax LONG $0x03fbc148 // sar rbx, 3 - WORD $0x894d; BYTE $0xe1 // mov r9, r12 - LONG $0x04b60f45; BYTE $0x1c // movzx r8d, byte [r12 + rbx] + LONG $0x04b60f45; BYTE $0x19 // movzx r8d, byte [r9 + rbx] WORD $0x3044; BYTE $0xc2 // xor dl, r8b LONG $0x00dd3c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rbx] WORD $0xc189 // mov ecx, eax @@ -33498,11 +34798,11 @@ LBB7_31: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xd7 // and dil, dl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x1c3c8841 // mov byte [r12 + rbx], dil + LONG $0x193c8841 // mov byte [r9 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB7_31 - LONG $0x01c48349 // add r12, 1 + LONG $0x24048348; BYTE $0x01 // add qword [rsp], 1 LBB7_33: LONG $0x05fac149 // sar r10, 5 @@ -33510,36 +34810,35 @@ LBB7_33: JL LBB7_37 QUAD $0x00000088249c894c // mov qword [rsp + 136], r11 QUAD $0x000000f02494894c // mov qword [rsp + 240], r10 - QUAD $0x000000b02494894c // mov qword [rsp + 176], r10 + QUAD $0x000000c02494894c // mov qword [rsp + 192], r10 LBB7_35: - QUAD $0x0000008024a4894c // mov qword [rsp + 128], r12 WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 - QUAD $0x000000c02494970f // seta byte [rsp + 192] + QUAD $0x000000d02494970f // seta byte [rsp + 208] LONG $0x086e394c // cmp qword [rsi + 8], r13 - LONG $0xd7970f40 // seta dil + LONG $0xd2970f41 // seta r10b LONG $0x106e394c // cmp qword [rsi + 16], r13 - LONG $0xd6970f41 // seta r14b + LONG $0xd7970f40 // seta dil LONG $0x186e394c // cmp qword [rsi + 24], r13 - QUAD $0x000000d02494970f // seta byte [rsp + 208] + QUAD $0x000000b02494970f // seta byte [rsp + 176] LONG $0x206e394c // cmp qword [rsi + 32], r13 - LONG $0x2454970f; BYTE $0x70 // seta byte [rsp + 112] + LONG $0x2454970f; BYTE $0x68 // seta byte [rsp + 104] LONG $0x286e394c // cmp qword [rsi + 40], r13 LONG $0x2454970f; BYTE $0x58 // seta byte [rsp + 88] LONG $0x306e394c // cmp qword [rsi + 48], r13 WORD $0x970f; BYTE $0xd0 // seta al LONG $0x386e394c // cmp qword [rsi + 56], r13 - WORD $0x970f; BYTE $0xd3 // seta bl + LONG $0xd6970f41 // seta r14b LONG $0x406e394c // cmp qword [rsi + 64], r13 - QUAD $0x000000902494970f // seta byte [rsp + 144] + QUAD $0x000000802494970f // seta byte [rsp + 128] LONG $0x486e394c // cmp qword [rsi + 72], r13 WORD $0x970f; BYTE $0xd2 // seta dl LONG $0x506e394c // cmp qword [rsi + 80], r13 LONG $0xd1970f41 // seta r9b LONG $0x586e394c // cmp qword [rsi + 88], r13 - LONG $0xd2970f41 // seta r10b - LONG $0x606e394c // cmp qword [rsi + 96], r13 LONG $0xd3970f41 // seta r11b + LONG $0x606e394c // cmp qword [rsi + 96], r13 + WORD $0x970f; BYTE $0xd3 // seta bl LONG $0x686e394c // cmp qword [rsi + 104], r13 LONG $0xd4970f41 // seta r12b LONG $0x706e394c // cmp qword [rsi + 112], r13 @@ -33547,126 +34846,127 @@ LBB7_35: LONG $0x786e394c // cmp qword [rsi + 120], r13 WORD $0x970f; BYTE $0xd1 // seta cl LONG $0x80ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 128], r13 - LONG $0x2454970f; BYTE $0x50 // seta byte [rsp + 80] + LONG $0x2454970f; BYTE $0x48 // seta byte [rsp + 72] LONG $0x88ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 136], r13 - LONG $0x2454970f; BYTE $0x78 // seta byte [rsp + 120] + QUAD $0x000000902494970f // seta byte [rsp + 144] LONG $0x90ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 144], r13 - LONG $0x2454970f; BYTE $0x68 // seta byte [rsp + 104] + LONG $0x2454970f; BYTE $0x70 // seta byte [rsp + 112] LONG $0x98ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 152], r13 - LONG $0x2454970f; BYTE $0x60 // seta byte [rsp + 96] + LONG $0x2454970f; BYTE $0x78 // seta byte [rsp + 120] LONG $0xa0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 160], r13 - LONG $0x2454970f; BYTE $0x40 // seta byte [rsp + 64] + LONG $0x2454970f; BYTE $0x50 // seta byte [rsp + 80] LONG $0xa8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 168], r13 - LONG $0x2454970f; BYTE $0x48 // seta byte [rsp + 72] + LONG $0x2454970f; BYTE $0x60 // seta byte [rsp + 96] LONG $0xb0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 176], r13 - LONG $0x2454970f; BYTE $0x38 // seta byte [rsp + 56] + LONG $0x2454970f; BYTE $0x40 // seta byte [rsp + 64] LONG $0xb8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 184], r13 LONG $0xd7970f41 // seta r15b LONG $0xc0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 192], r13 - LONG $0x2454970f; BYTE $0x08 // seta byte [rsp + 8] + LONG $0x2454970f; BYTE $0x20 // seta byte [rsp + 32] LONG $0xc8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 200], r13 - LONG $0x2454970f; BYTE $0x30 // seta byte [rsp + 48] + LONG $0x2454970f; BYTE $0x38 // seta byte [rsp + 56] LONG $0xd0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 208], r13 - LONG $0x2454970f; BYTE $0x18 // seta byte [rsp + 24] + LONG $0x2454970f; BYTE $0x28 // seta byte [rsp + 40] LONG $0xd8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 216], r13 - LONG $0x2454970f; BYTE $0x20 // seta byte [rsp + 32] + LONG $0x2454970f; BYTE $0x30 // seta byte [rsp + 48] LONG $0xe0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 224], r13 - LONG $0x2454970f; BYTE $0x28 // seta byte [rsp + 40] + LONG $0x2454970f; BYTE $0x18 // seta byte [rsp + 24] LONG $0xe8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 232], r13 LONG $0x2454970f; BYTE $0x10 // seta byte [rsp + 16] LONG $0xf0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 240], r13 - LONG $0x2414970f // seta byte [rsp] + LONG $0x2454970f; BYTE $0x08 // seta byte [rsp + 8] LONG $0xf8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 248], r13 LONG $0xd0970f41 // seta r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x000000c024bc0240 // add dil, byte [rsp + 192] + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000d024940244 // add r10b, byte [rsp + 208] WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil + LONG $0x07e6c041 // shl r14b, 7 + WORD $0x0841; BYTE $0xc6 // or r14b, al + LONG $0x02e7c040 // shl dil, 2 + WORD $0x0844; BYTE $0xd7 // or dil, r10b WORD $0xd200 // add dl, dl - LONG $0x90249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 144] - QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] + LONG $0x80249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 128] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x24148b4c // mov r10, qword [rsp] LONG $0x02e1c041 // shl r9b, 2 WORD $0x0841; BYTE $0xd1 // or r9b, dl - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] + LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0xc208 // or dl, al WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b + LONG $0x03e3c041 // shl r11b, 3 + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0x0840; BYTE $0xfa // or dl, dil - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xdb // or bl, r11b LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b + WORD $0x0841; BYTE $0xdc // or r12b, bl QUAD $0x000000a024bcb60f // movzx edi, byte [rsp + 160] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0x0841; BYTE $0xd6 // or r14b, dl WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x0000008024a48b4c // mov r12, qword [rsp + 128] - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] + QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] WORD $0xd200 // add dl, dl - LONG $0x50245402 // add dl, byte [rsp + 80] + LONG $0x48245402 // add dl, byte [rsp + 72] WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] + LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] WORD $0xe2c0; BYTE $0x02 // shl dl, 2 WORD $0x0840; BYTE $0xfa // or dl, dil WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] + LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] WORD $0xe2c0; BYTE $0x03 // shl dl, 3 WORD $0x0840; BYTE $0xfa // or dl, dil WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x40 // movzx edx, byte [rsp + 64] + LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0x0840; BYTE $0xfa // or dl, dil WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] + LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0x0840; BYTE $0xfa // or dl, dil - LONG $0x241c8841 // mov byte [r12], bl - LONG $0x245cb60f; BYTE $0x38 // movzx ebx, byte [rsp + 56] + WORD $0x8845; BYTE $0x32 // mov byte [r10], r14b + LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl - LONG $0x244c8841; BYTE $0x01 // mov byte [r12 + 1], cl + LONG $0x014a8841 // mov byte [r10 + 1], cl WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] + LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] WORD $0xc900 // add cl, cl - LONG $0x08244c02 // add cl, byte [rsp + 8] + LONG $0x20244c02 // add cl, byte [rsp + 32] WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] + LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] WORD $0xe1c0; BYTE $0x02 // shl cl, 2 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] + LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] + LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0xd108 // or cl, dl - LONG $0x2414b60f // movzx edx, byte [rsp] + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] WORD $0xe2c0; BYTE $0x06 // shl dl, 6 LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xd0 // or r8b, dl WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x247c8845; BYTE $0x02 // mov byte [r12 + 2], r15b - LONG $0x24448845; BYTE $0x03 // mov byte [r12 + 3], r8b + LONG $0x027a8845 // mov byte [r10 + 2], r15b + LONG $0x03428845 // mov byte [r10 + 3], r8b LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 - LONG $0x04c48349 // add r12, 4 - QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 + LONG $0x04c28349 // add r10, 4 + LONG $0x2414894c // mov qword [rsp], r10 + QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 JNE LBB7_35 QUAD $0x00000088249c8b4c // mov r11, qword [rsp + 136] QUAD $0x000000f024948b4c // mov r10, qword [rsp + 240] @@ -33674,21 +34974,20 @@ LBB7_35: LBB7_37: LONG $0x05e2c149 // shl r10, 5 WORD $0x394d; BYTE $0xda // cmp r10, r11 - JGE LBB7_200 + JGE LBB7_202 WORD $0x894d; BYTE $0xd8 // mov r8, r11 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 WORD $0x014d; BYTE $0xda // add r10, r11 - JNE LBB7_153 + JNE LBB7_155 WORD $0x3145; BYTE $0xdb // xor r11d, r11d JMP LBB7_40 LBB7_56: - WORD $0x028a // mov al, byte [rdx] - LONG $0x28244488 // mov byte [rsp + 40], al - LONG $0x1f538d4d // lea r10, [r11 + 31] + WORD $0x8a44; BYTE $0x12 // mov r10b, byte [rdx] + LONG $0x1f7b8d4d // lea r15, [r11 + 31] WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xd3490f4d // cmovns r10, r11 + LONG $0xfb490f4d // cmovns r15, r11 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d @@ -33696,18 +34995,17 @@ LBB7_56: WORD $0x2941; BYTE $0xc1 // sub r9d, eax JE LBB7_60 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + LONG $0x24348b4c // mov r14, qword [rsp] LBB7_58: - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] - WORD $0x0e3a // cmp cl, byte [rsi] + WORD $0x3a44; BYTE $0x16 // cmp r10b, byte [rsi] LONG $0x01768d48 // lea rsi, [rsi + 1] WORD $0xd219 // sbb edx, edx LONG $0x07788d48 // lea rdi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - WORD $0x894d; BYTE $0xe6 // mov r14, r12 - LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] + LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] WORD $0x3044; BYTE $0xca // xor dl, r9b QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -33716,201 +35014,223 @@ LBB7_58: WORD $0xe3d3 // shl ebx, cl WORD $0xd320 // and bl, dl WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3c1c8841 // mov byte [r12 + rdi], bl + LONG $0x3e1c8841 // mov byte [r14 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB7_58 - LONG $0x01c48349 // add r12, 1 + LONG $0x24048348; BYTE $0x01 // add qword [rsp], 1 LBB7_60: - LONG $0x05fac149 // sar r10, 5 - LONG $0x20fb8349 // cmp r11, 32 + LONG $0x05ffc149 // sar r15, 5 + LONG $0x20fb8349 // cmp r11, 32 JL LBB7_61 - LONG $0x10fa8349 // cmp r10, 16 - QUAD $0x00000088249c894c // mov qword [rsp + 136], r11 - QUAD $0x000001082494894c // mov qword [rsp + 264], r10 + LONG $0x10ff8349 // cmp r15, 16 + LONG $0x24548844; BYTE $0x08 // mov byte [rsp + 8], r10b + QUAD $0x00000088249c894c // mov qword [rsp + 136], r11 + QUAD $0x0000010824bc894c // mov qword [rsp + 264], r15 JB LBB7_63 - WORD $0x894c; BYTE $0xd0 // mov rax, r10 - LONG $0x05e0c148 // shl rax, 5 - WORD $0x0148; BYTE $0xf0 // add rax, rsi - WORD $0x3949; BYTE $0xc4 // cmp r12, rax + WORD $0x894c; BYTE $0xf8 // mov rax, r15 + LONG $0x05e0c148 // shl rax, 5 + WORD $0x0148; BYTE $0xf0 // add rax, rsi + LONG $0x24043948 // cmp qword [rsp], rax JAE LBB7_66 - LONG $0x94048d4b // lea rax, [r12 + 4*r10] - WORD $0x3948; BYTE $0xc6 // cmp rsi, rax + LONG $0x24048b48 // mov rax, qword [rsp] + LONG $0xb8048d4a // lea rax, [rax + 4*r15] + WORD $0x3948; BYTE $0xc6 // cmp rsi, rax JAE LBB7_66 LBB7_63: WORD $0xc031 // xor eax, eax QUAD $0x000000e824848948 // mov qword [rsp + 232], rax - WORD $0x8949; BYTE $0xf6 // mov r14, rsi - LONG $0x2464894c; BYTE $0x48 // mov qword [rsp + 72], r12 + WORD $0x8949; BYTE $0xf4 // mov r12, rsi + LONG $0x24048b48 // mov rax, qword [rsp] + LONG $0x24448948; BYTE $0x78 // mov qword [rsp + 120], rax LBB7_69: - QUAD $0x000000e824942b4c // sub r10, qword [rsp + 232] - QUAD $0x000000b02494894c // mov qword [rsp + 176], r10 + QUAD $0x000000e824bc2b4c // sub r15, qword [rsp + 232] + QUAD $0x000000c024bc894c // mov qword [rsp + 192], r15 LBB7_70: - WORD $0x894c; BYTE $0xf1 // mov rcx, r14 - LONG $0x74b60f44; WORD $0x2824 // movzx r14d, byte [rsp + 40] - WORD $0x3844; BYTE $0x31 // cmp byte [rcx], r14b - QUAD $0x000000c02494970f // seta byte [rsp + 192] - LONG $0x01713844 // cmp byte [rcx + 1], r14b - LONG $0xd6970f40 // seta sil - LONG $0x02713844 // cmp byte [rcx + 2], r14b - LONG $0xd3970f41 // seta r11b - LONG $0x03713844 // cmp byte [rcx + 3], r14b - LONG $0xd7970f41 // seta r15b - LONG $0x04713844 // cmp byte [rcx + 4], r14b - QUAD $0x000000d02494970f // seta byte [rsp + 208] - LONG $0x05713844 // cmp byte [rcx + 5], r14b - LONG $0x2454970f; BYTE $0x78 // seta byte [rsp + 120] - LONG $0x06713844 // cmp byte [rcx + 6], r14b - WORD $0x970f; BYTE $0xd0 // seta al - LONG $0x07713844 // cmp byte [rcx + 7], r14b - LONG $0xd0970f41 // seta r8b - LONG $0x08713844 // cmp byte [rcx + 8], r14b - QUAD $0x000000902494970f // seta byte [rsp + 144] - LONG $0x09713844 // cmp byte [rcx + 9], r14b - WORD $0x970f; BYTE $0xd2 // seta dl - LONG $0x0a713844 // cmp byte [rcx + 10], r14b - LONG $0xd7970f40 // seta dil - LONG $0x0b713844 // cmp byte [rcx + 11], r14b - LONG $0xd1970f41 // seta r9b - LONG $0x0c713844 // cmp byte [rcx + 12], r14b - LONG $0xd2970f41 // seta r10b - LONG $0x0d713844 // cmp byte [rcx + 13], r14b - LONG $0xd4970f41 // seta r12b - LONG $0x0e713844 // cmp byte [rcx + 14], r14b - QUAD $0x000000a02494970f // seta byte [rsp + 160] - LONG $0x0f713844 // cmp byte [rcx + 15], r14b - WORD $0x970f; BYTE $0xd3 // seta bl - LONG $0x10713844 // cmp byte [rcx + 16], r14b - LONG $0x2454970f; BYTE $0x68 // seta byte [rsp + 104] - LONG $0x11713844 // cmp byte [rcx + 17], r14b - LONG $0xd5970f41 // seta r13b - LONG $0x12713844 // cmp byte [rcx + 18], r14b - LONG $0x2454970f; BYTE $0x70 // seta byte [rsp + 112] - LONG $0x13713844 // cmp byte [rcx + 19], r14b - LONG $0x2454970f; BYTE $0x60 // seta byte [rsp + 96] - LONG $0x14713844 // cmp byte [rcx + 20], r14b - LONG $0x2454970f; BYTE $0x50 // seta byte [rsp + 80] - LONG $0x15713844 // cmp byte [rcx + 21], r14b - LONG $0x2454970f; BYTE $0x40 // seta byte [rsp + 64] - LONG $0x16713844 // cmp byte [rcx + 22], r14b - LONG $0x2454970f; BYTE $0x38 // seta byte [rsp + 56] - LONG $0x17713844 // cmp byte [rcx + 23], r14b - LONG $0x2454970f; BYTE $0x58 // seta byte [rsp + 88] - LONG $0x18713844 // cmp byte [rcx + 24], r14b - LONG $0x2454970f; BYTE $0x18 // seta byte [rsp + 24] - LONG $0x19713844 // cmp byte [rcx + 25], r14b - LONG $0x2454970f; BYTE $0x30 // seta byte [rsp + 48] - LONG $0x1a713844 // cmp byte [rcx + 26], r14b - LONG $0x2454970f; BYTE $0x20 // seta byte [rsp + 32] - LONG $0x1b713844 // cmp byte [rcx + 27], r14b - LONG $0x2454970f; BYTE $0x08 // seta byte [rsp + 8] - LONG $0x1c713844 // cmp byte [rcx + 28], r14b - LONG $0x2454970f; BYTE $0x10 // seta byte [rsp + 16] - LONG $0x1d713844 // cmp byte [rcx + 29], r14b - QUAD $0x000000802494970f // seta byte [rsp + 128] - LONG $0x1e713844 // cmp byte [rcx + 30], r14b - LONG $0x2414970f // seta byte [rsp] - LONG $0x1f713844 // cmp byte [rcx + 31], r14b - LONG $0xd6970f41 // seta r14b - WORD $0x0040; BYTE $0xf6 // add sil, sil - QUAD $0x000000c024b40240 // add sil, byte [rsp + 192] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xc0 // or r8b, al - LONG $0x02e3c041 // shl r11b, 2 - WORD $0x0841; BYTE $0xf3 // or r11b, sil - WORD $0xd200 // add dl, dl - LONG $0x90249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 144] - LONG $0x03e7c041 // shl r15b, 3 - WORD $0x0845; BYTE $0xdf // or r15b, r11b - LONG $0x02e7c040 // shl dil, 2 - WORD $0x0840; BYTE $0xd7 // or dil, dl - QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0x0844; BYTE $0xf8 // or al, r15b - WORD $0xc289 // mov edx, eax - LONG $0x03e1c041 // shl r9b, 3 - WORD $0x0841; BYTE $0xf9 // or r9b, dil - LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xd008 // or al, dl - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - QUAD $0x000000a02494b60f // movzx edx, byte [rsp + 160] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xd308 // or bl, dl - WORD $0x0841; BYTE $0xc0 // or r8b, al - WORD $0x0844; BYTE $0xe3 // or bl, r12b - WORD $0x0045; BYTE $0xed // add r13b, r13b - LONG $0x246c0244; BYTE $0x68 // add r13b, byte [rsp + 104] - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] - WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0x0844; BYTE $0xe8 // or al, r13b - WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] - WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xd008 // or al, dl - WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] - WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xd008 // or al, dl - WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x40 // movzx eax, byte [rsp + 64] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xd008 // or al, dl - WORD $0xc689 // mov esi, eax - LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] - WORD $0x8844; BYTE $0x00 // mov byte [rax], r8b - LONG $0x247cb60f; BYTE $0x38 // movzx edi, byte [rsp + 56] - LONG $0x06e7c040 // shl dil, 6 - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x07 // shl dl, 7 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0x5888; BYTE $0x01 // mov byte [rax + 1], bl - WORD $0x0840; BYTE $0xf2 // or dl, sil - LONG $0x245cb60f; BYTE $0x30 // movzx ebx, byte [rsp + 48] - WORD $0xdb00 // add bl, bl - LONG $0x18245c02 // add bl, byte [rsp + 24] - WORD $0xde89 // mov esi, ebx - LONG $0x245cb60f; BYTE $0x20 // movzx ebx, byte [rsp + 32] - WORD $0xe3c0; BYTE $0x02 // shl bl, 2 - WORD $0x0840; BYTE $0xf3 // or bl, sil - WORD $0xde89 // mov esi, ebx - LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] - WORD $0xe3c0; BYTE $0x03 // shl bl, 3 - WORD $0x0840; BYTE $0xf3 // or bl, sil - WORD $0xde89 // mov esi, ebx - LONG $0x245cb60f; BYTE $0x10 // movzx ebx, byte [rsp + 16] - WORD $0xe3c0; BYTE $0x04 // shl bl, 4 - WORD $0x0840; BYTE $0xf3 // or bl, sil - WORD $0xde89 // mov esi, ebx - QUAD $0x00000080249cb60f // movzx ebx, byte [rsp + 128] - WORD $0xe3c0; BYTE $0x05 // shl bl, 5 - WORD $0x0840; BYTE $0xf3 // or bl, sil - LONG $0x2434b60f // movzx esi, byte [rsp] - LONG $0x06e6c040 // shl sil, 6 - LONG $0x07e6c041 // shl r14b, 7 - WORD $0x0841; BYTE $0xf6 // or r14b, sil - WORD $0x0841; BYTE $0xde // or r14b, bl - WORD $0x5088; BYTE $0x02 // mov byte [rax + 2], dl - LONG $0x03708844 // mov byte [rax + 3], r14b - LONG $0x20718d4c // lea r14, [rcx + 32] - LONG $0x04c08348 // add rax, 4 - LONG $0x24448948; BYTE $0x48 // mov qword [rsp + 72], rax - QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 + WORD $0x894c; BYTE $0xe1 // mov rcx, r12 + LONG $0x24143845 // cmp byte [r12], r10b + QUAD $0x000000d02494970f // seta byte [rsp + 208] + LONG $0x24543845; BYTE $0x01 // cmp byte [r12 + 1], r10b + LONG $0xd6970f41 // seta r14b + LONG $0x24543845; BYTE $0x02 // cmp byte [r12 + 2], r10b + LONG $0xd3970f41 // seta r11b + LONG $0x24543845; BYTE $0x03 // cmp byte [r12 + 3], r10b + LONG $0xd7970f41 // seta r15b + LONG $0x24543845; BYTE $0x04 // cmp byte [r12 + 4], r10b + QUAD $0x000000b02494970f // seta byte [rsp + 176] + LONG $0x24543845; BYTE $0x05 // cmp byte [r12 + 5], r10b + LONG $0x2454970f; BYTE $0x60 // seta byte [rsp + 96] + LONG $0x24543845; BYTE $0x06 // cmp byte [r12 + 6], r10b + WORD $0x970f; BYTE $0xd0 // seta al + LONG $0x24543845; BYTE $0x07 // cmp byte [r12 + 7], r10b + LONG $0xd0970f41 // seta r8b + LONG $0x24543845; BYTE $0x08 // cmp byte [r12 + 8], r10b + QUAD $0x000000802494970f // seta byte [rsp + 128] + LONG $0x24543845; BYTE $0x09 // cmp byte [r12 + 9], r10b + LONG $0xd6970f40 // seta sil + LONG $0x24543845; BYTE $0x0a // cmp byte [r12 + 10], r10b + LONG $0xd7970f40 // seta dil + LONG $0x24543845; BYTE $0x0b // cmp byte [r12 + 11], r10b + LONG $0xd1970f41 // seta r9b + LONG $0x24543845; BYTE $0x0c // cmp byte [r12 + 12], r10b + LONG $0xd2970f41 // seta r10b + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] + LONG $0x24543841; BYTE $0x0d // cmp byte [r12 + 13], dl + LONG $0xd4970f41 // seta r12b + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] + WORD $0x5138; BYTE $0x0e // cmp byte [rcx + 14], dl + QUAD $0x000000a02494970f // seta byte [rsp + 160] + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] + WORD $0x5138; BYTE $0x0f // cmp byte [rcx + 15], dl + WORD $0x970f; BYTE $0xd3 // seta bl + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] + WORD $0x5138; BYTE $0x10 // cmp byte [rcx + 16], dl + QUAD $0x000000902494970f // seta byte [rsp + 144] + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] + WORD $0x5138; BYTE $0x11 // cmp byte [rcx + 17], dl + LONG $0xd5970f41 // seta r13b + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] + WORD $0x5138; BYTE $0x12 // cmp byte [rcx + 18], dl + LONG $0x2454970f; BYTE $0x70 // seta byte [rsp + 112] + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] + WORD $0x5138; BYTE $0x13 // cmp byte [rcx + 19], dl + LONG $0x2454970f; BYTE $0x68 // seta byte [rsp + 104] + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] + WORD $0x5138; BYTE $0x14 // cmp byte [rcx + 20], dl + LONG $0x2454970f; BYTE $0x48 // seta byte [rsp + 72] + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] + WORD $0x5138; BYTE $0x15 // cmp byte [rcx + 21], dl + LONG $0x2454970f; BYTE $0x58 // seta byte [rsp + 88] + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] + WORD $0x5138; BYTE $0x16 // cmp byte [rcx + 22], dl + LONG $0x2454970f; BYTE $0x50 // seta byte [rsp + 80] + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] + WORD $0x5138; BYTE $0x17 // cmp byte [rcx + 23], dl + LONG $0x2454970f; BYTE $0x38 // seta byte [rsp + 56] + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] + WORD $0x5138; BYTE $0x18 // cmp byte [rcx + 24], dl + LONG $0x2454970f; BYTE $0x40 // seta byte [rsp + 64] + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] + WORD $0x5138; BYTE $0x19 // cmp byte [rcx + 25], dl + LONG $0x2454970f; BYTE $0x28 // seta byte [rsp + 40] + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] + WORD $0x5138; BYTE $0x1a // cmp byte [rcx + 26], dl + LONG $0x2454970f; BYTE $0x20 // seta byte [rsp + 32] + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] + WORD $0x5138; BYTE $0x1b // cmp byte [rcx + 27], dl + LONG $0x2454970f; BYTE $0x30 // seta byte [rsp + 48] + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] + WORD $0x5138; BYTE $0x1c // cmp byte [rcx + 28], dl + LONG $0x2454970f; BYTE $0x18 // seta byte [rsp + 24] + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] + WORD $0x5138; BYTE $0x1d // cmp byte [rcx + 29], dl + LONG $0x2454970f; BYTE $0x10 // seta byte [rsp + 16] + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] + WORD $0x5138; BYTE $0x1e // cmp byte [rcx + 30], dl + LONG $0x2414970f // seta byte [rsp] + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] + WORD $0x5138; BYTE $0x1f // cmp byte [rcx + 31], dl + WORD $0x970f; BYTE $0xd2 // seta dl + WORD $0x0045; BYTE $0xf6 // add r14b, r14b + QUAD $0x000000d024b40244 // add r14b, byte [rsp + 208] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + LONG $0x07e0c041 // shl r8b, 7 + WORD $0x0841; BYTE $0xc0 // or r8b, al + LONG $0x02e3c041 // shl r11b, 2 + WORD $0x0845; BYTE $0xf3 // or r11b, r14b + WORD $0x0040; BYTE $0xf6 // add sil, sil + QUAD $0x0000008024b40240 // add sil, byte [rsp + 128] + LONG $0x03e7c041 // shl r15b, 3 + WORD $0x0845; BYTE $0xdf // or r15b, r11b + LONG $0x02e7c040 // shl dil, 2 + WORD $0x0840; BYTE $0xf7 // or dil, sil + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xf8 // or al, r15b + WORD $0xc689 // mov esi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0841; BYTE $0xf9 // or r9b, dil + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf0 // or al, sil + LONG $0x04e2c041 // shl r10b, 4 + WORD $0x0845; BYTE $0xca // or r10b, r9b + LONG $0x05e4c041 // shl r12b, 5 + WORD $0x0845; BYTE $0xd4 // or r12b, r10b + LONG $0x54b60f44; WORD $0x0824 // movzx r10d, byte [rsp + 8] + QUAD $0x000000a024b4b60f // movzx esi, byte [rsp + 160] + LONG $0x06e6c040 // shl sil, 6 + WORD $0xe3c0; BYTE $0x07 // shl bl, 7 + WORD $0x0840; BYTE $0xf3 // or bl, sil + WORD $0x0841; BYTE $0xc0 // or r8b, al + WORD $0x0844; BYTE $0xe3 // or bl, r12b + WORD $0x0045; BYTE $0xed // add r13b, r13b + QUAD $0x0000009024ac0244 // add r13b, byte [rsp + 144] + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0844; BYTE $0xe8 // or al, r13b + WORD $0xc689 // mov esi, eax + LONG $0x2444b60f; BYTE $0x68 // movzx eax, byte [rsp + 104] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf0 // or al, sil + WORD $0xc689 // mov esi, eax + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf0 // or al, sil + WORD $0xc689 // mov esi, eax + LONG $0x2444b60f; BYTE $0x58 // movzx eax, byte [rsp + 88] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf0 // or al, sil + WORD $0x8941; BYTE $0xc1 // mov r9d, eax + LONG $0x24748b48; BYTE $0x78 // mov rsi, qword [rsp + 120] + WORD $0x8844; BYTE $0x06 // mov byte [rsi], r8b + LONG $0x247cb60f; BYTE $0x50 // movzx edi, byte [rsp + 80] + LONG $0x06e7c040 // shl dil, 6 + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] + WORD $0xe0c0; BYTE $0x07 // shl al, 7 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0x5e88; BYTE $0x01 // mov byte [rsi + 1], bl + WORD $0x0844; BYTE $0xc8 // or al, r9b + LONG $0x245cb60f; BYTE $0x28 // movzx ebx, byte [rsp + 40] + WORD $0xdb00 // add bl, bl + LONG $0x40245c02 // add bl, byte [rsp + 64] + WORD $0xdf89 // mov edi, ebx + LONG $0x245cb60f; BYTE $0x20 // movzx ebx, byte [rsp + 32] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0x0840; BYTE $0xfb // or bl, dil + WORD $0xdf89 // mov edi, ebx + LONG $0x245cb60f; BYTE $0x30 // movzx ebx, byte [rsp + 48] + WORD $0xe3c0; BYTE $0x03 // shl bl, 3 + WORD $0x0840; BYTE $0xfb // or bl, dil + WORD $0xdf89 // mov edi, ebx + LONG $0x245cb60f; BYTE $0x18 // movzx ebx, byte [rsp + 24] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0840; BYTE $0xfb // or bl, dil + WORD $0xdf89 // mov edi, ebx + LONG $0x245cb60f; BYTE $0x10 // movzx ebx, byte [rsp + 16] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0840; BYTE $0xfb // or bl, dil + LONG $0x243cb60f // movzx edi, byte [rsp] + LONG $0x06e7c040 // shl dil, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0xda08 // or dl, bl + WORD $0x4688; BYTE $0x02 // mov byte [rsi + 2], al + WORD $0x5688; BYTE $0x03 // mov byte [rsi + 3], dl + LONG $0x20618d4c // lea r12, [rcx + 32] + LONG $0x04c68348 // add rsi, 4 + LONG $0x24748948; BYTE $0x78 // mov qword [rsp + 120], rsi + QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 JNE LBB7_70 - QUAD $0x00000088249c8b4c // mov r11, qword [rsp + 136] - QUAD $0x0000010824948b4c // mov r10, qword [rsp + 264] + QUAD $0x00000088249c8b4c // mov r11, qword [rsp + 136] + QUAD $0x0000010824bc8b4c // mov r15, qword [rsp + 264] JMP LBB7_72 -LBB7_137: +LBB7_139: WORD $0x8b44; BYTE $0x2a // mov r13d, dword [rdx] LONG $0x1f538d4d // lea r10, [r11 + 31] WORD $0x854d; BYTE $0xdb // test r11, r11 @@ -33920,10 +35240,11 @@ LBB7_137: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB7_141 + JE LBB7_143 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + LONG $0x240c8b4c // mov r9, qword [rsp] -LBB7_139: +LBB7_141: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d LONG $0x04768d48 // lea rsi, [rsi + 4] WORD $0x9f0f; BYTE $0xd2 // setg dl @@ -33932,8 +35253,7 @@ LBB7_139: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xd8490f48 // cmovns rbx, rax LONG $0x03fbc148 // sar rbx, 3 - WORD $0x894d; BYTE $0xe1 // mov r9, r12 - LONG $0x04b60f45; BYTE $0x1c // movzx r8d, byte [r12 + rbx] + LONG $0x04b60f45; BYTE $0x19 // movzx r8d, byte [r9 + rbx] WORD $0x3044; BYTE $0xc2 // xor dl, r8b LONG $0x00dd3c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rbx] WORD $0xc189 // mov ecx, eax @@ -33942,48 +35262,47 @@ LBB7_139: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xd7 // and dil, dl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x1c3c8841 // mov byte [r12 + rbx], dil + LONG $0x193c8841 // mov byte [r9 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB7_139 - LONG $0x01c48349 // add r12, 1 + JNE LBB7_141 + LONG $0x24048348; BYTE $0x01 // add qword [rsp], 1 -LBB7_141: +LBB7_143: LONG $0x05fac149 // sar r10, 5 LONG $0x20fb8349 // cmp r11, 32 - JL LBB7_145 + JL LBB7_147 QUAD $0x00000088249c894c // mov qword [rsp + 136], r11 QUAD $0x000000f02494894c // mov qword [rsp + 240], r10 - QUAD $0x000000b02494894c // mov qword [rsp + 176], r10 + QUAD $0x000000c02494894c // mov qword [rsp + 192], r10 -LBB7_143: - QUAD $0x0000008024a4894c // mov qword [rsp + 128], r12 +LBB7_145: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d - QUAD $0x000000c024949f0f // setg byte [rsp + 192] + QUAD $0x000000d024949f0f // setg byte [rsp + 208] LONG $0x046e3944 // cmp dword [rsi + 4], r13d - LONG $0xd79f0f40 // setg dil + LONG $0xd29f0f41 // setg r10b LONG $0x086e3944 // cmp dword [rsi + 8], r13d - LONG $0xd69f0f41 // setg r14b + LONG $0xd79f0f40 // setg dil LONG $0x0c6e3944 // cmp dword [rsi + 12], r13d - QUAD $0x000000d024949f0f // setg byte [rsp + 208] + QUAD $0x000000b024949f0f // setg byte [rsp + 176] LONG $0x106e3944 // cmp dword [rsi + 16], r13d - LONG $0x24549f0f; BYTE $0x70 // setg byte [rsp + 112] + LONG $0x24549f0f; BYTE $0x68 // setg byte [rsp + 104] LONG $0x146e3944 // cmp dword [rsi + 20], r13d LONG $0x24549f0f; BYTE $0x58 // setg byte [rsp + 88] LONG $0x186e3944 // cmp dword [rsi + 24], r13d WORD $0x9f0f; BYTE $0xd0 // setg al LONG $0x1c6e3944 // cmp dword [rsi + 28], r13d - WORD $0x9f0f; BYTE $0xd3 // setg bl + LONG $0xd69f0f41 // setg r14b LONG $0x206e3944 // cmp dword [rsi + 32], r13d - QUAD $0x0000009024949f0f // setg byte [rsp + 144] + QUAD $0x0000008024949f0f // setg byte [rsp + 128] LONG $0x246e3944 // cmp dword [rsi + 36], r13d WORD $0x9f0f; BYTE $0xd2 // setg dl LONG $0x286e3944 // cmp dword [rsi + 40], r13d LONG $0xd19f0f41 // setg r9b LONG $0x2c6e3944 // cmp dword [rsi + 44], r13d - LONG $0xd29f0f41 // setg r10b - LONG $0x306e3944 // cmp dword [rsi + 48], r13d LONG $0xd39f0f41 // setg r11b + LONG $0x306e3944 // cmp dword [rsi + 48], r13d + WORD $0x9f0f; BYTE $0xd3 // setg bl LONG $0x346e3944 // cmp dword [rsi + 52], r13d LONG $0xd49f0f41 // setg r12b LONG $0x386e3944 // cmp dword [rsi + 56], r13d @@ -33991,141 +35310,142 @@ LBB7_143: LONG $0x3c6e3944 // cmp dword [rsi + 60], r13d WORD $0x9f0f; BYTE $0xd1 // setg cl LONG $0x406e3944 // cmp dword [rsi + 64], r13d - LONG $0x24549f0f; BYTE $0x50 // setg byte [rsp + 80] + LONG $0x24549f0f; BYTE $0x48 // setg byte [rsp + 72] LONG $0x446e3944 // cmp dword [rsi + 68], r13d - LONG $0x24549f0f; BYTE $0x78 // setg byte [rsp + 120] + QUAD $0x0000009024949f0f // setg byte [rsp + 144] LONG $0x486e3944 // cmp dword [rsi + 72], r13d - LONG $0x24549f0f; BYTE $0x68 // setg byte [rsp + 104] + LONG $0x24549f0f; BYTE $0x70 // setg byte [rsp + 112] LONG $0x4c6e3944 // cmp dword [rsi + 76], r13d - LONG $0x24549f0f; BYTE $0x60 // setg byte [rsp + 96] + LONG $0x24549f0f; BYTE $0x78 // setg byte [rsp + 120] LONG $0x506e3944 // cmp dword [rsi + 80], r13d - LONG $0x24549f0f; BYTE $0x40 // setg byte [rsp + 64] + LONG $0x24549f0f; BYTE $0x50 // setg byte [rsp + 80] LONG $0x546e3944 // cmp dword [rsi + 84], r13d - LONG $0x24549f0f; BYTE $0x48 // setg byte [rsp + 72] + LONG $0x24549f0f; BYTE $0x60 // setg byte [rsp + 96] LONG $0x586e3944 // cmp dword [rsi + 88], r13d - LONG $0x24549f0f; BYTE $0x38 // setg byte [rsp + 56] + LONG $0x24549f0f; BYTE $0x40 // setg byte [rsp + 64] LONG $0x5c6e3944 // cmp dword [rsi + 92], r13d LONG $0xd79f0f41 // setg r15b LONG $0x606e3944 // cmp dword [rsi + 96], r13d - LONG $0x24549f0f; BYTE $0x08 // setg byte [rsp + 8] + LONG $0x24549f0f; BYTE $0x20 // setg byte [rsp + 32] LONG $0x646e3944 // cmp dword [rsi + 100], r13d - LONG $0x24549f0f; BYTE $0x30 // setg byte [rsp + 48] + LONG $0x24549f0f; BYTE $0x38 // setg byte [rsp + 56] LONG $0x686e3944 // cmp dword [rsi + 104], r13d - LONG $0x24549f0f; BYTE $0x18 // setg byte [rsp + 24] + LONG $0x24549f0f; BYTE $0x28 // setg byte [rsp + 40] LONG $0x6c6e3944 // cmp dword [rsi + 108], r13d - LONG $0x24549f0f; BYTE $0x20 // setg byte [rsp + 32] + LONG $0x24549f0f; BYTE $0x30 // setg byte [rsp + 48] LONG $0x706e3944 // cmp dword [rsi + 112], r13d - LONG $0x24549f0f; BYTE $0x28 // setg byte [rsp + 40] + LONG $0x24549f0f; BYTE $0x18 // setg byte [rsp + 24] LONG $0x746e3944 // cmp dword [rsi + 116], r13d LONG $0x24549f0f; BYTE $0x10 // setg byte [rsp + 16] LONG $0x786e3944 // cmp dword [rsi + 120], r13d - LONG $0x24149f0f // setg byte [rsp] + LONG $0x24549f0f; BYTE $0x08 // setg byte [rsp + 8] LONG $0x7c6e3944 // cmp dword [rsi + 124], r13d LONG $0xd09f0f41 // setg r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x000000c024bc0240 // add dil, byte [rsp + 192] + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000d024940244 // add r10b, byte [rsp + 208] WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil + LONG $0x07e6c041 // shl r14b, 7 + WORD $0x0841; BYTE $0xc6 // or r14b, al + LONG $0x02e7c040 // shl dil, 2 + WORD $0x0844; BYTE $0xd7 // or dil, r10b WORD $0xd200 // add dl, dl - LONG $0x90249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 144] - QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] + LONG $0x80249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 128] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x24148b4c // mov r10, qword [rsp] LONG $0x02e1c041 // shl r9b, 2 WORD $0x0841; BYTE $0xd1 // or r9b, dl - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] + LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0xc208 // or dl, al WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b + LONG $0x03e3c041 // shl r11b, 3 + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0x0840; BYTE $0xfa // or dl, dil - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xdb // or bl, r11b LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b + WORD $0x0841; BYTE $0xdc // or r12b, bl QUAD $0x000000a024bcb60f // movzx edi, byte [rsp + 160] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0x0841; BYTE $0xd6 // or r14b, dl WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x0000008024a48b4c // mov r12, qword [rsp + 128] - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] + QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] WORD $0xd200 // add dl, dl - LONG $0x50245402 // add dl, byte [rsp + 80] + LONG $0x48245402 // add dl, byte [rsp + 72] WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] + LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] WORD $0xe2c0; BYTE $0x02 // shl dl, 2 WORD $0x0840; BYTE $0xfa // or dl, dil WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] + LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] WORD $0xe2c0; BYTE $0x03 // shl dl, 3 WORD $0x0840; BYTE $0xfa // or dl, dil WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x40 // movzx edx, byte [rsp + 64] + LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0x0840; BYTE $0xfa // or dl, dil WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] + LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0x0840; BYTE $0xfa // or dl, dil - LONG $0x241c8841 // mov byte [r12], bl - LONG $0x245cb60f; BYTE $0x38 // movzx ebx, byte [rsp + 56] + WORD $0x8845; BYTE $0x32 // mov byte [r10], r14b + LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl - LONG $0x244c8841; BYTE $0x01 // mov byte [r12 + 1], cl + LONG $0x014a8841 // mov byte [r10 + 1], cl WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] + LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] WORD $0xc900 // add cl, cl - LONG $0x08244c02 // add cl, byte [rsp + 8] + LONG $0x20244c02 // add cl, byte [rsp + 32] WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] + LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] WORD $0xe1c0; BYTE $0x02 // shl cl, 2 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] + LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] + LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0xd108 // or cl, dl - LONG $0x2414b60f // movzx edx, byte [rsp] + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] WORD $0xe2c0; BYTE $0x06 // shl dl, 6 LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xd0 // or r8b, dl WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x247c8845; BYTE $0x02 // mov byte [r12 + 2], r15b - LONG $0x24448845; BYTE $0x03 // mov byte [r12 + 3], r8b + LONG $0x027a8845 // mov byte [r10 + 2], r15b + LONG $0x03428845 // mov byte [r10 + 3], r8b LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 - LONG $0x04c48349 // add r12, 4 - QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 - JNE LBB7_143 + LONG $0x04c28349 // add r10, 4 + LONG $0x2414894c // mov qword [rsp], r10 + QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 + JNE LBB7_145 QUAD $0x00000088249c8b4c // mov r11, qword [rsp + 136] QUAD $0x000000f024948b4c // mov r10, qword [rsp + 240] -LBB7_145: +LBB7_147: LONG $0x05e2c149 // shl r10, 5 WORD $0x394d; BYTE $0xda // cmp r10, r11 - JGE LBB7_200 + JGE LBB7_202 WORD $0x894d; BYTE $0xd8 // mov r8, r11 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 WORD $0x014d; BYTE $0xda // add r10, r11 - JNE LBB7_151 + JNE LBB7_153 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB7_148 + JMP LBB7_150 LBB7_98: LONG $0x2ab70f44 // movzx r13d, word [rdx] @@ -34139,6 +35459,7 @@ LBB7_98: WORD $0x2941; BYTE $0xc1 // sub r9d, eax JE LBB7_102 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + LONG $0x24148b48 // mov rdx, qword [rsp] LBB7_100: LONG $0x2e3b4466 // cmp r13w, word [rsi] @@ -34148,8 +35469,7 @@ LBB7_100: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xd8490f48 // cmovns rbx, rax LONG $0x03fbc148 // sar rbx, 3 - WORD $0x894c; BYTE $0xe2 // mov rdx, r12 - LONG $0x04b60f45; BYTE $0x1c // movzx r8d, byte [r12 + rbx] + LONG $0x04b60f44; BYTE $0x1a // movzx r8d, byte [rdx + rbx] WORD $0x3045; BYTE $0xc1 // xor r9b, r8b LONG $0x00dd3c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rbx] WORD $0xc189 // mov ecx, eax @@ -34158,11 +35478,11 @@ LBB7_100: WORD $0xe7d3 // shl edi, cl WORD $0x2044; BYTE $0xcf // and dil, r9b WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x1c3c8841 // mov byte [r12 + rbx], dil + LONG $0x1a3c8840 // mov byte [rdx + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 JNE LBB7_100 - LONG $0x01c48349 // add r12, 1 + LONG $0x24048348; BYTE $0x01 // add qword [rsp], 1 LBB7_102: LONG $0x05fac149 // sar r10, 5 @@ -34170,40 +35490,39 @@ LBB7_102: JL LBB7_106 QUAD $0x00000088249c894c // mov qword [rsp + 136], r11 QUAD $0x000000f02494894c // mov qword [rsp + 240], r10 - QUAD $0x000000b02494894c // mov qword [rsp + 176], r10 + QUAD $0x000000c02494894c // mov qword [rsp + 192], r10 LBB7_104: - QUAD $0x0000008024a4894c // mov qword [rsp + 128], r12 LONG $0x2e394466 // cmp word [rsi], r13w - LONG $0x2454970f; BYTE $0x58 // seta byte [rsp + 88] + LONG $0x2454970f; BYTE $0x38 // seta byte [rsp + 56] LONG $0x6e394466; BYTE $0x02 // cmp word [rsi + 2], r13w - LONG $0xd7970f40 // seta dil + LONG $0xd2970f41 // seta r10b LONG $0x6e394466; BYTE $0x04 // cmp word [rsi + 4], r13w - LONG $0xd6970f41 // seta r14b + LONG $0xd7970f40 // seta dil LONG $0x6e394466; BYTE $0x06 // cmp word [rsi + 6], r13w - QUAD $0x000000c02494970f // seta byte [rsp + 192] + QUAD $0x000000d02494970f // seta byte [rsp + 208] LONG $0x6e394466; BYTE $0x08 // cmp word [rsi + 8], r13w - QUAD $0x000000902494970f // seta byte [rsp + 144] + QUAD $0x000000802494970f // seta byte [rsp + 128] LONG $0x6e394466; BYTE $0x0a // cmp word [rsi + 10], r13w - LONG $0x2454970f; BYTE $0x78 // seta byte [rsp + 120] + QUAD $0x000000902494970f // seta byte [rsp + 144] LONG $0x6e394466; BYTE $0x0c // cmp word [rsi + 12], r13w WORD $0x970f; BYTE $0xd0 // seta al LONG $0x6e394466; BYTE $0x0e // cmp word [rsi + 14], r13w - WORD $0x970f; BYTE $0xd3 // seta bl + LONG $0xd6970f41 // seta r14b LONG $0x6e394466; BYTE $0x10 // cmp word [rsi + 16], r13w - LONG $0x2454970f; BYTE $0x20 // seta byte [rsp + 32] + LONG $0x2454970f; BYTE $0x18 // seta byte [rsp + 24] LONG $0x6e394466; BYTE $0x12 // cmp word [rsi + 18], r13w WORD $0x970f; BYTE $0xd2 // seta dl LONG $0x6e394466; BYTE $0x14 // cmp word [rsi + 20], r13w LONG $0xd1970f41 // seta r9b LONG $0x6e394466; BYTE $0x16 // cmp word [rsi + 22], r13w - LONG $0xd2970f41 // seta r10b - LONG $0x6e394466; BYTE $0x18 // cmp word [rsi + 24], r13w LONG $0xd3970f41 // seta r11b + LONG $0x6e394466; BYTE $0x18 // cmp word [rsi + 24], r13w + WORD $0x970f; BYTE $0xd3 // seta bl LONG $0x6e394466; BYTE $0x1a // cmp word [rsi + 26], r13w LONG $0xd4970f41 // seta r12b LONG $0x6e394466; BYTE $0x1c // cmp word [rsi + 28], r13w - QUAD $0x000000d02494970f // seta byte [rsp + 208] + QUAD $0x000000b02494970f // seta byte [rsp + 176] LONG $0x6e394466; BYTE $0x1e // cmp word [rsi + 30], r13w WORD $0x970f; BYTE $0xd1 // seta cl LONG $0x6e394466; BYTE $0x20 // cmp word [rsi + 32], r13w @@ -34211,122 +35530,123 @@ LBB7_104: LONG $0x6e394466; BYTE $0x22 // cmp word [rsi + 34], r13w QUAD $0x000000a02494970f // seta byte [rsp + 160] LONG $0x6e394466; BYTE $0x24 // cmp word [rsi + 36], r13w - LONG $0x2454970f; BYTE $0x68 // seta byte [rsp + 104] - LONG $0x6e394466; BYTE $0x26 // cmp word [rsi + 38], r13w LONG $0x2454970f; BYTE $0x70 // seta byte [rsp + 112] + LONG $0x6e394466; BYTE $0x26 // cmp word [rsi + 38], r13w + LONG $0x2454970f; BYTE $0x68 // seta byte [rsp + 104] LONG $0x6e394466; BYTE $0x28 // cmp word [rsi + 40], r13w - LONG $0x2454970f; BYTE $0x60 // seta byte [rsp + 96] + LONG $0x2454970f; BYTE $0x78 // seta byte [rsp + 120] LONG $0x6e394466; BYTE $0x2a // cmp word [rsi + 42], r13w - LONG $0x2454970f; BYTE $0x50 // seta byte [rsp + 80] + LONG $0x2454970f; BYTE $0x48 // seta byte [rsp + 72] LONG $0x6e394466; BYTE $0x2c // cmp word [rsi + 44], r13w - LONG $0x2454970f; BYTE $0x40 // seta byte [rsp + 64] + LONG $0x2454970f; BYTE $0x50 // seta byte [rsp + 80] LONG $0x6e394466; BYTE $0x2e // cmp word [rsi + 46], r13w LONG $0xd7970f41 // seta r15b LONG $0x6e394466; BYTE $0x30 // cmp word [rsi + 48], r13w - LONG $0x2414970f // seta byte [rsp] + LONG $0x2454970f; BYTE $0x08 // seta byte [rsp + 8] LONG $0x6e394466; BYTE $0x32 // cmp word [rsi + 50], r13w - LONG $0x2454970f; BYTE $0x48 // seta byte [rsp + 72] + LONG $0x2454970f; BYTE $0x58 // seta byte [rsp + 88] LONG $0x6e394466; BYTE $0x34 // cmp word [rsi + 52], r13w - LONG $0x2454970f; BYTE $0x38 // seta byte [rsp + 56] + LONG $0x2454970f; BYTE $0x60 // seta byte [rsp + 96] LONG $0x6e394466; BYTE $0x36 // cmp word [rsi + 54], r13w - LONG $0x2454970f; BYTE $0x30 // seta byte [rsp + 48] + LONG $0x2454970f; BYTE $0x40 // seta byte [rsp + 64] LONG $0x6e394466; BYTE $0x38 // cmp word [rsi + 56], r13w - LONG $0x2454970f; BYTE $0x18 // seta byte [rsp + 24] + LONG $0x2454970f; BYTE $0x28 // seta byte [rsp + 40] LONG $0x6e394466; BYTE $0x3a // cmp word [rsi + 58], r13w - LONG $0x2454970f; BYTE $0x08 // seta byte [rsp + 8] + LONG $0x2454970f; BYTE $0x30 // seta byte [rsp + 48] LONG $0x6e394466; BYTE $0x3c // cmp word [rsi + 60], r13w - LONG $0x2454970f; BYTE $0x28 // seta byte [rsp + 40] + LONG $0x2454970f; BYTE $0x20 // seta byte [rsp + 32] LONG $0x6e394466; BYTE $0x3e // cmp word [rsi + 62], r13w LONG $0xd0970f41 // seta r8b - WORD $0x0040; BYTE $0xff // add dil, dil - LONG $0x247c0240; BYTE $0x58 // add dil, byte [rsp + 88] + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + LONG $0x24540244; BYTE $0x38 // add r10b, byte [rsp + 56] WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil + LONG $0x07e6c041 // shl r14b, 7 + WORD $0x0841; BYTE $0xc6 // or r14b, al + LONG $0x02e7c040 // shl dil, 2 + WORD $0x0844; BYTE $0xd7 // or dil, r10b WORD $0xd200 // add dl, dl - LONG $0x20245402 // add dl, byte [rsp + 32] - QUAD $0x000000c02484b60f // movzx eax, byte [rsp + 192] + LONG $0x18245402 // add dl, byte [rsp + 24] + QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x24148b4c // mov r10, qword [rsp] LONG $0x02e1c041 // shl r9b, 2 WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] + QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0xc208 // or dl, al WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] + LONG $0x03e3c041 // shl r11b, 3 + WORD $0x0845; BYTE $0xcb // or r11b, r9b + QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0x0840; BYTE $0xfa // or dl, dil - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xdb // or bl, r11b LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b - QUAD $0x000000d024bcb60f // movzx edi, byte [rsp + 208] + WORD $0x0841; BYTE $0xdc // or r12b, bl + QUAD $0x000000b024bcb60f // movzx edi, byte [rsp + 176] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0x0841; BYTE $0xd6 // or r14b, dl WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x0000008024a48b4c // mov r12, qword [rsp + 128] QUAD $0x000000a02494b60f // movzx edx, byte [rsp + 160] WORD $0xd200 // add dl, dl LONG $0x10245402 // add dl, byte [rsp + 16] WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] + LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] WORD $0xe2c0; BYTE $0x02 // shl dl, 2 WORD $0x0840; BYTE $0xfa // or dl, dil WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] + LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] WORD $0xe2c0; BYTE $0x03 // shl dl, 3 WORD $0x0840; BYTE $0xfa // or dl, dil WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] + LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0x0840; BYTE $0xfa // or dl, dil WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] + LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0x0840; BYTE $0xfa // or dl, dil - LONG $0x241c8841 // mov byte [r12], bl - LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] + WORD $0x8845; BYTE $0x32 // mov byte [r10], r14b + LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl - LONG $0x244c8841; BYTE $0x01 // mov byte [r12 + 1], cl + LONG $0x014a8841 // mov byte [r10 + 1], cl WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x48 // movzx ecx, byte [rsp + 72] + LONG $0x244cb60f; BYTE $0x58 // movzx ecx, byte [rsp + 88] WORD $0xc900 // add cl, cl - WORD $0x0c02; BYTE $0x24 // add cl, byte [rsp] + LONG $0x08244c02 // add cl, byte [rsp + 8] WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] + LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] WORD $0xe1c0; BYTE $0x02 // shl cl, 2 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] + LONG $0x244cb60f; BYTE $0x40 // movzx ecx, byte [rsp + 64] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] + LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x08 // movzx ecx, byte [rsp + 8] + LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x28 // movzx edx, byte [rsp + 40] + LONG $0x2454b60f; BYTE $0x20 // movzx edx, byte [rsp + 32] WORD $0xe2c0; BYTE $0x06 // shl dl, 6 LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xd0 // or r8b, dl WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x247c8845; BYTE $0x02 // mov byte [r12 + 2], r15b - LONG $0x24448845; BYTE $0x03 // mov byte [r12 + 3], r8b + LONG $0x027a8845 // mov byte [r10 + 2], r15b + LONG $0x03428845 // mov byte [r10 + 3], r8b LONG $0x40c68348 // add rsi, 64 - LONG $0x04c48349 // add r12, 4 - QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 + LONG $0x04c28349 // add r10, 4 + LONG $0x2414894c // mov qword [rsp], r10 + QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 JNE LBB7_104 QUAD $0x00000088249c8b4c // mov r11, qword [rsp + 136] QUAD $0x000000f024948b4c // mov r10, qword [rsp + 240] @@ -34334,31 +35654,32 @@ LBB7_104: LBB7_106: LONG $0x05e2c149 // shl r10, 5 WORD $0x394d; BYTE $0xda // cmp r10, r11 - JGE LBB7_200 + JGE LBB7_202 WORD $0x894d; BYTE $0xd8 // mov r8, r11 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 WORD $0x014d; BYTE $0xda // add r10, r11 - JNE LBB7_111 + JNE LBB7_112 WORD $0x3145; BYTE $0xdb // xor r11d, r11d JMP LBB7_109 -LBB7_113: +LBB7_114: WORD $0xb70f; BYTE $0x02 // movzx eax, word [rdx] LONG $0xf0248489; WORD $0x0000; BYTE $0x00 // mov dword [rsp + 240], eax - LONG $0x1f738d4d // lea r14, [r11 + 31] + LONG $0x1f7b8d4d // lea r15, [r11 + 31] WORD $0x854d; BYTE $0xdb // test r11, r11 - LONG $0xf3490f4d // cmovns r14, r11 + LONG $0xfb490f4d // cmovns r15, r11 LONG $0x07418d41 // lea eax, [r9 + 7] WORD $0x8545; BYTE $0xc9 // test r9d, r9d LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB7_117 + JE LBB7_118 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d QUAD $0x000000f024948b44 // mov r10d, dword [rsp + 240] + LONG $0x24348b4c // mov r14, qword [rsp] -LBB7_115: +LBB7_116: LONG $0x16394466 // cmp word [rsi], r10w LONG $0x02768d48 // lea rsi, [rsi + 2] WORD $0x9f0f; BYTE $0xd2 // setg dl @@ -34367,8 +35688,7 @@ LBB7_115: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - WORD $0x894d; BYTE $0xe7 // mov r15, r12 - LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] + LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] WORD $0x3044; BYTE $0xca // xor dl, r9b QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -34377,51 +35697,53 @@ LBB7_115: WORD $0xe3d3 // shl ebx, cl WORD $0xd320 // and bl, dl WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3c1c8841 // mov byte [r12 + rdi], bl + LONG $0x3e1c8841 // mov byte [r14 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB7_115 - LONG $0x01c48349 // add r12, 1 + JNE LBB7_116 + LONG $0x24048348; BYTE $0x01 // add qword [rsp], 1 -LBB7_117: - LONG $0x05fec149 // sar r14, 5 +LBB7_118: + LONG $0x05ffc149 // sar r15, 5 LONG $0x20fb8349 // cmp r11, 32 - JL LBB7_128 - LONG $0x08fe8349 // cmp r14, 8 + JL LBB7_119 + LONG $0x08ff8349 // cmp r15, 8 QUAD $0x00000088249c894c // mov qword [rsp + 136], r11 - QUAD $0x0000011024b4894c // mov qword [rsp + 272], r14 - JB LBB7_119 - WORD $0x894c; BYTE $0xf0 // mov rax, r14 + QUAD $0x0000011024bc894c // mov qword [rsp + 272], r15 + JB LBB7_121 + WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x06e0c148 // shl rax, 6 WORD $0x0148; BYTE $0xf0 // add rax, rsi - WORD $0x3949; BYTE $0xc4 // cmp r12, rax - JAE LBB7_122 - LONG $0xb4048d4b // lea rax, [r12 + 4*r14] + LONG $0x24043948 // cmp qword [rsp], rax + JAE LBB7_124 + LONG $0x24048b48 // mov rax, qword [rsp] + LONG $0xb8048d4a // lea rax, [rax + 4*r15] WORD $0x3948; BYTE $0xf0 // cmp rax, rsi - JBE LBB7_122 + JBE LBB7_124 -LBB7_119: +LBB7_121: WORD $0xc031 // xor eax, eax - LONG $0x24448948; BYTE $0x18 // mov qword [rsp + 24], rax + LONG $0x24448948; BYTE $0x28 // mov qword [rsp + 40], rax + LONG $0x24348b4c // mov r14, qword [rsp] -LBB7_125: - LONG $0x2424894c // mov qword [rsp], r12 - LONG $0x24742b4c; BYTE $0x18 // sub r14, qword [rsp + 24] - QUAD $0x000000b024b4894c // mov qword [rsp + 176], r14 +LBB7_127: + LONG $0x2474894c; BYTE $0x08 // mov qword [rsp + 8], r14 + LONG $0x247c2b4c; BYTE $0x28 // sub r15, qword [rsp + 40] + QUAD $0x000000c024bc894c // mov qword [rsp + 192], r15 QUAD $0x000000f024ac8b44 // mov r13d, dword [rsp + 240] -LBB7_126: +LBB7_128: WORD $0x8949; BYTE $0xf3 // mov r11, rsi LONG $0x2e394466 // cmp word [rsi], r13w - QUAD $0x000000c024949f0f // setg byte [rsp + 192] + QUAD $0x000000d024949f0f // setg byte [rsp + 208] LONG $0x6e394466; BYTE $0x02 // cmp word [rsi + 2], r13w LONG $0xd09f0f41 // setg r8b LONG $0x6e394466; BYTE $0x04 // cmp word [rsi + 4], r13w LONG $0xd69f0f41 // setg r14b LONG $0x6e394466; BYTE $0x06 // cmp word [rsi + 6], r13w - QUAD $0x000000d024949f0f // setg byte [rsp + 208] + QUAD $0x000000b024949f0f // setg byte [rsp + 176] LONG $0x6e394466; BYTE $0x08 // cmp word [rsi + 8], r13w - LONG $0x24549f0f; BYTE $0x70 // setg byte [rsp + 112] + LONG $0x24549f0f; BYTE $0x68 // setg byte [rsp + 104] LONG $0x6e394466; BYTE $0x0a // cmp word [rsi + 10], r13w LONG $0x24549f0f; BYTE $0x58 // setg byte [rsp + 88] LONG $0x6e394466; BYTE $0x0c // cmp word [rsi + 12], r13w @@ -34429,7 +35751,7 @@ LBB7_126: LONG $0x6e394466; BYTE $0x0e // cmp word [rsi + 14], r13w WORD $0x9f0f; BYTE $0xd3 // setg bl LONG $0x6e394466; BYTE $0x10 // cmp word [rsi + 16], r13w - QUAD $0x0000009024949f0f // setg byte [rsp + 144] + QUAD $0x0000008024949f0f // setg byte [rsp + 128] LONG $0x6e394466; BYTE $0x12 // cmp word [rsi + 18], r13w WORD $0x9f0f; BYTE $0xd1 // setg cl LONG $0x6e394466; BYTE $0x14 // cmp word [rsi + 20], r13w @@ -34445,52 +35767,52 @@ LBB7_126: LONG $0x6b394566; BYTE $0x1e // cmp word [r11 + 30], r13w LONG $0xd79f0f40 // setg dil LONG $0x6b394566; BYTE $0x20 // cmp word [r11 + 32], r13w - LONG $0x24549f0f; BYTE $0x50 // setg byte [rsp + 80] + LONG $0x24549f0f; BYTE $0x48 // setg byte [rsp + 72] LONG $0x6b394566; BYTE $0x22 // cmp word [r11 + 34], r13w - LONG $0x24549f0f; BYTE $0x78 // setg byte [rsp + 120] + QUAD $0x0000009024949f0f // setg byte [rsp + 144] LONG $0x6b394566; BYTE $0x24 // cmp word [r11 + 36], r13w - LONG $0x24549f0f; BYTE $0x68 // setg byte [rsp + 104] + LONG $0x24549f0f; BYTE $0x70 // setg byte [rsp + 112] LONG $0x6b394566; BYTE $0x26 // cmp word [r11 + 38], r13w - LONG $0x24549f0f; BYTE $0x60 // setg byte [rsp + 96] + LONG $0x24549f0f; BYTE $0x78 // setg byte [rsp + 120] LONG $0x6b394566; BYTE $0x28 // cmp word [r11 + 40], r13w - LONG $0x24549f0f; BYTE $0x40 // setg byte [rsp + 64] + LONG $0x24549f0f; BYTE $0x50 // setg byte [rsp + 80] LONG $0x6b394566; BYTE $0x2a // cmp word [r11 + 42], r13w - LONG $0x24549f0f; BYTE $0x48 // setg byte [rsp + 72] + LONG $0x24549f0f; BYTE $0x60 // setg byte [rsp + 96] LONG $0x6b394566; BYTE $0x2c // cmp word [r11 + 44], r13w - LONG $0x24549f0f; BYTE $0x38 // setg byte [rsp + 56] + LONG $0x24549f0f; BYTE $0x40 // setg byte [rsp + 64] LONG $0x6b394566; BYTE $0x2e // cmp word [r11 + 46], r13w LONG $0xd79f0f41 // setg r15b LONG $0x6b394566; BYTE $0x30 // cmp word [r11 + 48], r13w - LONG $0x24549f0f; BYTE $0x08 // setg byte [rsp + 8] + LONG $0x24549f0f; BYTE $0x20 // setg byte [rsp + 32] LONG $0x6b394566; BYTE $0x32 // cmp word [r11 + 50], r13w - LONG $0x24549f0f; BYTE $0x30 // setg byte [rsp + 48] + LONG $0x24549f0f; BYTE $0x38 // setg byte [rsp + 56] LONG $0x6b394566; BYTE $0x34 // cmp word [r11 + 52], r13w - LONG $0x24549f0f; BYTE $0x18 // setg byte [rsp + 24] + LONG $0x24549f0f; BYTE $0x28 // setg byte [rsp + 40] LONG $0x6b394566; BYTE $0x36 // cmp word [r11 + 54], r13w - LONG $0x24549f0f; BYTE $0x20 // setg byte [rsp + 32] + LONG $0x24549f0f; BYTE $0x30 // setg byte [rsp + 48] LONG $0x6b394566; BYTE $0x38 // cmp word [r11 + 56], r13w - LONG $0x24549f0f; BYTE $0x28 // setg byte [rsp + 40] + LONG $0x24549f0f; BYTE $0x18 // setg byte [rsp + 24] LONG $0x6b394566; BYTE $0x3a // cmp word [r11 + 58], r13w LONG $0x24549f0f; BYTE $0x10 // setg byte [rsp + 16] LONG $0x6b394566; BYTE $0x3c // cmp word [r11 + 60], r13w - QUAD $0x0000008024949f0f // setg byte [rsp + 128] + LONG $0x24149f0f // setg byte [rsp] LONG $0x6b394566; BYTE $0x3e // cmp word [r11 + 62], r13w WORD $0x9f0f; BYTE $0xd2 // setg dl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - QUAD $0x000000c024840244 // add r8b, byte [rsp + 192] + QUAD $0x000000d024840244 // add r8b, byte [rsp + 208] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xc6 // or r14b, r8b WORD $0xc900 // add cl, cl - LONG $0x90248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 144] - QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] + LONG $0x80248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 128] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b LONG $0x02e6c040 // shl sil, 2 WORD $0x0840; BYTE $0xce // or sil, cl - LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] + LONG $0x244cb60f; BYTE $0x68 // movzx ecx, byte [rsp + 104] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 WORD $0xc108 // or cl, al WORD $0x8941; BYTE $0xc8 // mov r8d, ecx @@ -34509,54 +35831,54 @@ LBB7_126: WORD $0x0840; BYTE $0xf7 // or dil, sil WORD $0xcb08 // or bl, cl WORD $0x0844; BYTE $0xe7 // or dil, r12b - LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] + QUAD $0x00000090248cb60f // movzx ecx, byte [rsp + 144] WORD $0xc900 // add cl, cl - LONG $0x50244c02 // add cl, byte [rsp + 80] + LONG $0x48244c02 // add cl, byte [rsp + 72] WORD $0xce89 // mov esi, ecx - LONG $0x244cb60f; BYTE $0x68 // movzx ecx, byte [rsp + 104] + LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] WORD $0xe1c0; BYTE $0x02 // shl cl, 2 WORD $0x0840; BYTE $0xf1 // or cl, sil WORD $0xce89 // mov esi, ecx - LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] + LONG $0x244cb60f; BYTE $0x78 // movzx ecx, byte [rsp + 120] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 WORD $0x0840; BYTE $0xf1 // or cl, sil WORD $0xce89 // mov esi, ecx - LONG $0x244cb60f; BYTE $0x40 // movzx ecx, byte [rsp + 64] + LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 WORD $0x0840; BYTE $0xf1 // or cl, sil WORD $0xce89 // mov esi, ecx - LONG $0x244cb60f; BYTE $0x48 // movzx ecx, byte [rsp + 72] + LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0x0840; BYTE $0xf1 // or cl, sil WORD $0xce89 // mov esi, ecx - LONG $0x240c8b48 // mov rcx, qword [rsp] + LONG $0x244c8b48; BYTE $0x08 // mov rcx, qword [rsp + 8] WORD $0x1988 // mov byte [rcx], bl - LONG $0x245cb60f; BYTE $0x38 // movzx ebx, byte [rsp + 56] + LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl LONG $0x01798840 // mov byte [rcx + 1], dil WORD $0x0841; BYTE $0xf7 // or r15b, sil - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xc000 // add al, al - LONG $0x08244402 // add al, byte [rsp + 8] + LONG $0x20244402 // add al, byte [rsp + 32] WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] WORD $0xe0c0; BYTE $0x02 // shl al, 2 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0xd808 // or al, bl WORD $0xc389 // mov ebx, eax LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] WORD $0xe0c0; BYTE $0x05 // shl al, 5 WORD $0xd808 // or al, bl - QUAD $0x00000080249cb60f // movzx ebx, byte [rsp + 128] + LONG $0x241cb60f // movzx ebx, byte [rsp] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 WORD $0xe2c0; BYTE $0x07 // shl dl, 7 WORD $0xda08 // or dl, bl @@ -34565,26 +35887,15 @@ LBB7_126: WORD $0x5188; BYTE $0x03 // mov byte [rcx + 3], dl LONG $0x40738d49 // lea rsi, [r11 + 64] LONG $0x04c18348 // add rcx, 4 - LONG $0x240c8948 // mov qword [rsp], rcx - QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 - JNE LBB7_126 + LONG $0x244c8948; BYTE $0x08 // mov qword [rsp + 8], rcx + QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 + JNE LBB7_128 QUAD $0x00000088249c8b4c // mov r11, qword [rsp + 136] - QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] - LONG $0x24248b4c // mov r12, qword [rsp] - -LBB7_128: - LONG $0x05e6c149 // shl r14, 5 - WORD $0x394d; BYTE $0xde // cmp r14, r11 - JGE LBB7_200 - WORD $0x894d; BYTE $0xd8 // mov r8, r11 - WORD $0x294d; BYTE $0xf0 // sub r8, r14 - WORD $0xf749; BYTE $0xd6 // not r14 - WORD $0x014d; BYTE $0xde // add r14, r11 - JNE LBB7_133 - WORD $0x3145; BYTE $0xf6 // xor r14d, r14d - JMP LBB7_131 + QUAD $0x0000011024bc8b4c // mov r15, qword [rsp + 272] + LONG $0x24748b4c; BYTE $0x08 // mov r14, qword [rsp + 8] + JMP LBB7_130 -LBB7_155: +LBB7_157: WORD $0x8b4c; BYTE $0x2a // mov r13, qword [rdx] LONG $0x1f538d4d // lea r10, [r11 + 31] WORD $0x854d; BYTE $0xdb // test r11, r11 @@ -34594,10 +35905,11 @@ LBB7_155: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB7_159 + JE LBB7_161 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + LONG $0x240c8b4c // mov r9, qword [rsp] -LBB7_157: +LBB7_159: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 LONG $0x08768d48 // lea rsi, [rsi + 8] WORD $0x9f0f; BYTE $0xd2 // setg dl @@ -34606,8 +35918,7 @@ LBB7_157: WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xd8490f48 // cmovns rbx, rax LONG $0x03fbc148 // sar rbx, 3 - WORD $0x894d; BYTE $0xe1 // mov r9, r12 - LONG $0x04b60f45; BYTE $0x1c // movzx r8d, byte [r12 + rbx] + LONG $0x04b60f45; BYTE $0x19 // movzx r8d, byte [r9 + rbx] WORD $0x3044; BYTE $0xc2 // xor dl, r8b LONG $0x00dd3c8d; WORD $0x0000; BYTE $0x00 // lea edi, [8*rbx] WORD $0xc189 // mov ecx, eax @@ -34616,48 +35927,47 @@ LBB7_157: WORD $0xe7d3 // shl edi, cl WORD $0x2040; BYTE $0xd7 // and dil, dl WORD $0x3044; BYTE $0xc7 // xor dil, r8b - LONG $0x1c3c8841 // mov byte [r12 + rbx], dil + LONG $0x193c8841 // mov byte [r9 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB7_157 - LONG $0x01c48349 // add r12, 1 + JNE LBB7_159 + LONG $0x24048348; BYTE $0x01 // add qword [rsp], 1 -LBB7_159: +LBB7_161: LONG $0x05fac149 // sar r10, 5 LONG $0x20fb8349 // cmp r11, 32 - JL LBB7_163 + JL LBB7_165 QUAD $0x00000088249c894c // mov qword [rsp + 136], r11 QUAD $0x000000f02494894c // mov qword [rsp + 240], r10 - QUAD $0x000000b02494894c // mov qword [rsp + 176], r10 + QUAD $0x000000c02494894c // mov qword [rsp + 192], r10 -LBB7_161: - QUAD $0x0000008024a4894c // mov qword [rsp + 128], r12 +LBB7_163: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 - QUAD $0x000000c024949f0f // setg byte [rsp + 192] + QUAD $0x000000d024949f0f // setg byte [rsp + 208] LONG $0x086e394c // cmp qword [rsi + 8], r13 - LONG $0xd79f0f40 // setg dil + LONG $0xd29f0f41 // setg r10b LONG $0x106e394c // cmp qword [rsi + 16], r13 - LONG $0xd69f0f41 // setg r14b + LONG $0xd79f0f40 // setg dil LONG $0x186e394c // cmp qword [rsi + 24], r13 - QUAD $0x000000d024949f0f // setg byte [rsp + 208] + QUAD $0x000000b024949f0f // setg byte [rsp + 176] LONG $0x206e394c // cmp qword [rsi + 32], r13 - LONG $0x24549f0f; BYTE $0x70 // setg byte [rsp + 112] + LONG $0x24549f0f; BYTE $0x68 // setg byte [rsp + 104] LONG $0x286e394c // cmp qword [rsi + 40], r13 LONG $0x24549f0f; BYTE $0x58 // setg byte [rsp + 88] LONG $0x306e394c // cmp qword [rsi + 48], r13 WORD $0x9f0f; BYTE $0xd0 // setg al LONG $0x386e394c // cmp qword [rsi + 56], r13 - WORD $0x9f0f; BYTE $0xd3 // setg bl + LONG $0xd69f0f41 // setg r14b LONG $0x406e394c // cmp qword [rsi + 64], r13 - QUAD $0x0000009024949f0f // setg byte [rsp + 144] + QUAD $0x0000008024949f0f // setg byte [rsp + 128] LONG $0x486e394c // cmp qword [rsi + 72], r13 WORD $0x9f0f; BYTE $0xd2 // setg dl LONG $0x506e394c // cmp qword [rsi + 80], r13 LONG $0xd19f0f41 // setg r9b LONG $0x586e394c // cmp qword [rsi + 88], r13 - LONG $0xd29f0f41 // setg r10b - LONG $0x606e394c // cmp qword [rsi + 96], r13 LONG $0xd39f0f41 // setg r11b + LONG $0x606e394c // cmp qword [rsi + 96], r13 + WORD $0x9f0f; BYTE $0xd3 // setg bl LONG $0x686e394c // cmp qword [rsi + 104], r13 LONG $0xd49f0f41 // setg r12b LONG $0x706e394c // cmp qword [rsi + 112], r13 @@ -34665,143 +35975,144 @@ LBB7_161: LONG $0x786e394c // cmp qword [rsi + 120], r13 WORD $0x9f0f; BYTE $0xd1 // setg cl LONG $0x80ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 128], r13 - LONG $0x24549f0f; BYTE $0x50 // setg byte [rsp + 80] + LONG $0x24549f0f; BYTE $0x48 // setg byte [rsp + 72] LONG $0x88ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 136], r13 - LONG $0x24549f0f; BYTE $0x78 // setg byte [rsp + 120] + QUAD $0x0000009024949f0f // setg byte [rsp + 144] LONG $0x90ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 144], r13 - LONG $0x24549f0f; BYTE $0x68 // setg byte [rsp + 104] + LONG $0x24549f0f; BYTE $0x70 // setg byte [rsp + 112] LONG $0x98ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 152], r13 - LONG $0x24549f0f; BYTE $0x60 // setg byte [rsp + 96] + LONG $0x24549f0f; BYTE $0x78 // setg byte [rsp + 120] LONG $0xa0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 160], r13 - LONG $0x24549f0f; BYTE $0x40 // setg byte [rsp + 64] + LONG $0x24549f0f; BYTE $0x50 // setg byte [rsp + 80] LONG $0xa8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 168], r13 - LONG $0x24549f0f; BYTE $0x48 // setg byte [rsp + 72] + LONG $0x24549f0f; BYTE $0x60 // setg byte [rsp + 96] LONG $0xb0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 176], r13 - LONG $0x24549f0f; BYTE $0x38 // setg byte [rsp + 56] + LONG $0x24549f0f; BYTE $0x40 // setg byte [rsp + 64] LONG $0xb8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 184], r13 LONG $0xd79f0f41 // setg r15b LONG $0xc0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 192], r13 - LONG $0x24549f0f; BYTE $0x08 // setg byte [rsp + 8] + LONG $0x24549f0f; BYTE $0x20 // setg byte [rsp + 32] LONG $0xc8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 200], r13 - LONG $0x24549f0f; BYTE $0x30 // setg byte [rsp + 48] + LONG $0x24549f0f; BYTE $0x38 // setg byte [rsp + 56] LONG $0xd0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 208], r13 - LONG $0x24549f0f; BYTE $0x18 // setg byte [rsp + 24] + LONG $0x24549f0f; BYTE $0x28 // setg byte [rsp + 40] LONG $0xd8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 216], r13 - LONG $0x24549f0f; BYTE $0x20 // setg byte [rsp + 32] + LONG $0x24549f0f; BYTE $0x30 // setg byte [rsp + 48] LONG $0xe0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 224], r13 - LONG $0x24549f0f; BYTE $0x28 // setg byte [rsp + 40] + LONG $0x24549f0f; BYTE $0x18 // setg byte [rsp + 24] LONG $0xe8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 232], r13 LONG $0x24549f0f; BYTE $0x10 // setg byte [rsp + 16] LONG $0xf0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 240], r13 - LONG $0x24149f0f // setg byte [rsp] + LONG $0x24549f0f; BYTE $0x08 // setg byte [rsp + 8] LONG $0xf8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 248], r13 LONG $0xd09f0f41 // setg r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x000000c024bc0240 // add dil, byte [rsp + 192] + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000d024940244 // add r10b, byte [rsp + 208] WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil + LONG $0x07e6c041 // shl r14b, 7 + WORD $0x0841; BYTE $0xc6 // or r14b, al + LONG $0x02e7c040 // shl dil, 2 + WORD $0x0844; BYTE $0xd7 // or dil, r10b WORD $0xd200 // add dl, dl - LONG $0x90249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 144] - QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] + LONG $0x80249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 128] + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0x0844; BYTE $0xf0 // or al, r14b + WORD $0x0840; BYTE $0xf8 // or al, dil + LONG $0x24148b4c // mov r10, qword [rsp] LONG $0x02e1c041 // shl r9b, 2 WORD $0x0841; BYTE $0xd1 // or r9b, dl - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] + LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0xc208 // or dl, al WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b + LONG $0x03e3c041 // shl r11b, 3 + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0x0840; BYTE $0xfa // or dl, dil - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xdb // or bl, r11b LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b + WORD $0x0841; BYTE $0xdc // or r12b, bl QUAD $0x000000a024bcb60f // movzx edi, byte [rsp + 160] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0x0841; BYTE $0xd6 // or r14b, dl WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x0000008024a48b4c // mov r12, qword [rsp + 128] - LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] + QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] WORD $0xd200 // add dl, dl - LONG $0x50245402 // add dl, byte [rsp + 80] + LONG $0x48245402 // add dl, byte [rsp + 72] WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] + LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] WORD $0xe2c0; BYTE $0x02 // shl dl, 2 WORD $0x0840; BYTE $0xfa // or dl, dil WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] + LONG $0x2454b60f; BYTE $0x78 // movzx edx, byte [rsp + 120] WORD $0xe2c0; BYTE $0x03 // shl dl, 3 WORD $0x0840; BYTE $0xfa // or dl, dil WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x40 // movzx edx, byte [rsp + 64] + LONG $0x2454b60f; BYTE $0x50 // movzx edx, byte [rsp + 80] WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0x0840; BYTE $0xfa // or dl, dil WORD $0xd789 // mov edi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] + LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0x0840; BYTE $0xfa // or dl, dil - LONG $0x241c8841 // mov byte [r12], bl - LONG $0x245cb60f; BYTE $0x38 // movzx ebx, byte [rsp + 56] + WORD $0x8845; BYTE $0x32 // mov byte [r10], r14b + LONG $0x245cb60f; BYTE $0x40 // movzx ebx, byte [rsp + 64] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl - LONG $0x244c8841; BYTE $0x01 // mov byte [r12 + 1], cl + LONG $0x014a8841 // mov byte [r10 + 1], cl WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] + LONG $0x244cb60f; BYTE $0x38 // movzx ecx, byte [rsp + 56] WORD $0xc900 // add cl, cl - LONG $0x08244c02 // add cl, byte [rsp + 8] + LONG $0x20244c02 // add cl, byte [rsp + 32] WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] + LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] WORD $0xe1c0; BYTE $0x02 // shl cl, 2 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] + LONG $0x244cb60f; BYTE $0x30 // movzx ecx, byte [rsp + 48] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x28 // movzx ecx, byte [rsp + 40] + LONG $0x244cb60f; BYTE $0x18 // movzx ecx, byte [rsp + 24] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 WORD $0xd108 // or cl, dl WORD $0xca89 // mov edx, ecx LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0xd108 // or cl, dl - LONG $0x2414b60f // movzx edx, byte [rsp] + LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] WORD $0xe2c0; BYTE $0x06 // shl dl, 6 LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xd0 // or r8b, dl WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x247c8845; BYTE $0x02 // mov byte [r12 + 2], r15b - LONG $0x24448845; BYTE $0x03 // mov byte [r12 + 3], r8b + LONG $0x027a8845 // mov byte [r10 + 2], r15b + LONG $0x03428845 // mov byte [r10 + 3], r8b LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 - LONG $0x04c48349 // add r12, 4 - QUAD $0x000000b024848348; BYTE $0xff // add qword [rsp + 176], -1 - JNE LBB7_161 + LONG $0x04c28349 // add r10, 4 + LONG $0x2414894c // mov qword [rsp], r10 + QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 + JNE LBB7_163 QUAD $0x00000088249c8b4c // mov r11, qword [rsp + 136] QUAD $0x000000f024948b4c // mov r10, qword [rsp + 240] -LBB7_163: +LBB7_165: LONG $0x05e2c149 // shl r10, 5 WORD $0x394d; BYTE $0xda // cmp r10, r11 - JGE LBB7_200 + JGE LBB7_202 WORD $0x894d; BYTE $0xd8 // mov r8, r11 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 WORD $0x014d; BYTE $0xda // add r10, r11 - JNE LBB7_168 + JNE LBB7_170 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB7_166 + JMP LBB7_168 -LBB7_170: +LBB7_172: LONG $0x1f538d4d // lea r10, [r11 + 31] WORD $0x854d; BYTE $0xdb // test r11, r11 LONG $0xd3490f4d // cmovns r10, r11 @@ -34811,19 +36122,21 @@ LBB7_170: WORD $0xe083; BYTE $0xf8 // and eax, -8 LONG $0x100f44f3; BYTE $0x1a // movss xmm11, dword [rdx] WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB7_174 + JE LBB7_176 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d + LONG $0x24348b4c // mov r14, qword [rsp] -LBB7_172: - LONG $0x1e2e0f44 // ucomiss xmm11, dword [rsi] - LONG $0x04768d48 // lea rsi, [rsi + 4] - WORD $0xd219 // sbb edx, edx +LBB7_174: + LONG $0x06100ff3 // movss xmm0, dword [rsi] + LONG $0x04c68348 // add rsi, 4 + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + WORD $0x970f; BYTE $0xd2 // seta dl + WORD $0xdaf6 // neg dl LONG $0x07788d48 // lea rdi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax LONG $0x03ffc148 // sar rdi, 3 - WORD $0x894d; BYTE $0xe6 // mov r14, r12 - LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] + LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] WORD $0x3044; BYTE $0xca // xor dl, r9b QUAD $0x00000000fd048d44 // lea r8d, [8*rdi] WORD $0xc189 // mov ecx, eax @@ -34832,203 +36145,235 @@ LBB7_172: WORD $0xe3d3 // shl ebx, cl WORD $0xd320 // and bl, dl WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3c1c8841 // mov byte [r12 + rdi], bl + LONG $0x3e1c8841 // mov byte [r14 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB7_172 - LONG $0x01c48349 // add r12, 1 + JNE LBB7_174 + LONG $0x24048348; BYTE $0x01 // add qword [rsp], 1 -LBB7_174: +LBB7_176: LONG $0x05fac149 // sar r10, 5 LONG $0x20fb8349 // cmp r11, 32 - JL LBB7_175 + JL LBB7_177 LONG $0x04fa8349 // cmp r10, 4 - JB LBB7_177 + JB LBB7_179 WORD $0x894c; BYTE $0xd0 // mov rax, r10 LONG $0x07e0c148 // shl rax, 7 WORD $0x0148; BYTE $0xf0 // add rax, rsi - WORD $0x3949; BYTE $0xc4 // cmp r12, rax - JAE LBB7_180 - LONG $0x94048d4b // lea rax, [r12 + 4*r10] + LONG $0x24043948 // cmp qword [rsp], rax + JAE LBB7_182 + LONG $0x24048b48 // mov rax, qword [rsp] + LONG $0x90048d4a // lea rax, [rax + 4*r10] WORD $0x3948; BYTE $0xf0 // cmp rax, rsi - JBE LBB7_180 + JBE LBB7_182 -LBB7_177: - WORD $0x3145; BYTE $0xc0 // xor r8d, r8d - WORD $0x8948; BYTE $0xf3 // mov rbx, rsi - WORD $0x894d; BYTE $0xe6 // mov r14, r12 +LBB7_179: + WORD $0xc031 // xor eax, eax + WORD $0x8948; BYTE $0xf2 // mov rdx, rsi + LONG $0x243c8b4c // mov r15, qword [rsp] -LBB7_183: +LBB7_185: + LONG $0x243c894c // mov qword [rsp], r15 QUAD $0x00000088249c894c // mov qword [rsp + 136], r11 - QUAD $0x000000b02494894c // mov qword [rsp + 176], r10 - WORD $0x294d; BYTE $0xc2 // sub r10, r8 QUAD $0x000000c02494894c // mov qword [rsp + 192], r10 + WORD $0x2949; BYTE $0xc2 // sub r10, rax + QUAD $0x000000d02494894c // mov qword [rsp + 208], r10 -LBB7_184: - LONG $0x2434894c // mov qword [rsp], r14 - LONG $0x1b2e0f44 // ucomiss xmm11, dword [rbx] - QUAD $0x000000d02494920f // setb byte [rsp + 208] - LONG $0x5b2e0f44; BYTE $0x04 // ucomiss xmm11, dword [rbx + 4] - LONG $0xd0920f41 // setb r8b - LONG $0x5b2e0f44; BYTE $0x08 // ucomiss xmm11, dword [rbx + 8] - LONG $0xd6920f41 // setb r14b - LONG $0x5b2e0f44; BYTE $0x0c // ucomiss xmm11, dword [rbx + 12] - LONG $0xd5920f41 // setb r13b - LONG $0x5b2e0f44; BYTE $0x10 // ucomiss xmm11, dword [rbx + 16] - LONG $0x2454920f; BYTE $0x70 // setb byte [rsp + 112] - LONG $0x5b2e0f44; BYTE $0x14 // ucomiss xmm11, dword [rbx + 20] - LONG $0x2454920f; BYTE $0x58 // setb byte [rsp + 88] - LONG $0x5b2e0f44; BYTE $0x18 // ucomiss xmm11, dword [rbx + 24] - WORD $0x920f; BYTE $0xd0 // setb al - LONG $0x5b2e0f44; BYTE $0x1c // ucomiss xmm11, dword [rbx + 28] - LONG $0xd3920f41 // setb r11b - LONG $0x5b2e0f44; BYTE $0x20 // ucomiss xmm11, dword [rbx + 32] - QUAD $0x000000a02494920f // setb byte [rsp + 160] - LONG $0x5b2e0f44; BYTE $0x24 // ucomiss xmm11, dword [rbx + 36] - WORD $0x920f; BYTE $0xd2 // setb dl - LONG $0x5b2e0f44; BYTE $0x28 // ucomiss xmm11, dword [rbx + 40] - LONG $0xd6920f40 // setb sil - LONG $0x5b2e0f44; BYTE $0x2c // ucomiss xmm11, dword [rbx + 44] - LONG $0xd1920f41 // setb r9b - LONG $0x5b2e0f44; BYTE $0x30 // ucomiss xmm11, dword [rbx + 48] - LONG $0xd2920f41 // setb r10b - LONG $0x5b2e0f44; BYTE $0x34 // ucomiss xmm11, dword [rbx + 52] - LONG $0xd4920f41 // setb r12b - LONG $0x5b2e0f44; BYTE $0x38 // ucomiss xmm11, dword [rbx + 56] - LONG $0x2454920f; BYTE $0x78 // setb byte [rsp + 120] - LONG $0x5b2e0f44; BYTE $0x3c // ucomiss xmm11, dword [rbx + 60] - LONG $0xd7920f40 // setb dil - LONG $0x5b2e0f44; BYTE $0x40 // ucomiss xmm11, dword [rbx + 64] - LONG $0x2454920f; BYTE $0x50 // setb byte [rsp + 80] - LONG $0x5b2e0f44; BYTE $0x44 // ucomiss xmm11, dword [rbx + 68] - QUAD $0x000000902494920f // setb byte [rsp + 144] - LONG $0x5b2e0f44; BYTE $0x48 // ucomiss xmm11, dword [rbx + 72] - LONG $0x2454920f; BYTE $0x68 // setb byte [rsp + 104] - LONG $0x5b2e0f44; BYTE $0x4c // ucomiss xmm11, dword [rbx + 76] - LONG $0x2454920f; BYTE $0x60 // setb byte [rsp + 96] - LONG $0x5b2e0f44; BYTE $0x50 // ucomiss xmm11, dword [rbx + 80] - LONG $0x2454920f; BYTE $0x40 // setb byte [rsp + 64] - LONG $0x5b2e0f44; BYTE $0x54 // ucomiss xmm11, dword [rbx + 84] - LONG $0x2454920f; BYTE $0x48 // setb byte [rsp + 72] - LONG $0x5b2e0f44; BYTE $0x58 // ucomiss xmm11, dword [rbx + 88] - LONG $0x2454920f; BYTE $0x38 // setb byte [rsp + 56] - LONG $0x5b2e0f44; BYTE $0x5c // ucomiss xmm11, dword [rbx + 92] - LONG $0xd7920f41 // setb r15b - LONG $0x5b2e0f44; BYTE $0x60 // ucomiss xmm11, dword [rbx + 96] - LONG $0x2454920f; BYTE $0x08 // setb byte [rsp + 8] - LONG $0x5b2e0f44; BYTE $0x64 // ucomiss xmm11, dword [rbx + 100] - LONG $0x2454920f; BYTE $0x30 // setb byte [rsp + 48] - LONG $0x5b2e0f44; BYTE $0x68 // ucomiss xmm11, dword [rbx + 104] - LONG $0x2454920f; BYTE $0x18 // setb byte [rsp + 24] - LONG $0x5b2e0f44; BYTE $0x6c // ucomiss xmm11, dword [rbx + 108] - LONG $0x2454920f; BYTE $0x20 // setb byte [rsp + 32] - LONG $0x5b2e0f44; BYTE $0x70 // ucomiss xmm11, dword [rbx + 112] - LONG $0x2454920f; BYTE $0x28 // setb byte [rsp + 40] - LONG $0x5b2e0f44; BYTE $0x74 // ucomiss xmm11, dword [rbx + 116] - LONG $0x2454920f; BYTE $0x10 // setb byte [rsp + 16] - LONG $0x5b2e0f44; BYTE $0x78 // ucomiss xmm11, dword [rbx + 120] - QUAD $0x000000802494920f // setb byte [rsp + 128] - LONG $0x5b2e0f44; BYTE $0x7c // ucomiss xmm11, dword [rbx + 124] - WORD $0x920f; BYTE $0xd1 // setb cl - WORD $0x0045; BYTE $0xc0 // add r8b, r8b - QUAD $0x000000d024840244 // add r8b, byte [rsp + 208] +LBB7_186: + LONG $0x02100ff3 // movss xmm0, dword [rdx] + LONG $0x4a100ff3; BYTE $0x04 // movss xmm1, dword [rdx + 4] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x2454970f; BYTE $0x18 // seta byte [rsp + 24] + LONG $0xcb2e0f41 // ucomiss xmm1, xmm11 + WORD $0x970f; BYTE $0xd3 // seta bl + LONG $0x42100ff3; BYTE $0x08 // movss xmm0, dword [rdx + 8] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x42100ff3; BYTE $0x0c // movss xmm0, dword [rdx + 12] + LONG $0xd5970f41 // seta r13b + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0xd4970f41 // seta r12b + LONG $0x42100ff3; BYTE $0x10 // movss xmm0, dword [rdx + 16] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x42100ff3; BYTE $0x14 // movss xmm0, dword [rdx + 20] + LONG $0x2454970f; BYTE $0x50 // seta byte [rsp + 80] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x2454970f; BYTE $0x60 // seta byte [rsp + 96] + LONG $0x42100ff3; BYTE $0x18 // movss xmm0, dword [rdx + 24] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x42100ff3; BYTE $0x1c // movss xmm0, dword [rdx + 28] + LONG $0x2454970f; BYTE $0x58 // seta byte [rsp + 88] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x2454970f; BYTE $0x40 // seta byte [rsp + 64] + LONG $0x42100ff3; BYTE $0x20 // movss xmm0, dword [rdx + 32] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x42100ff3; BYTE $0x24 // movss xmm0, dword [rdx + 36] + LONG $0x2454970f; BYTE $0x10 // seta byte [rsp + 16] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + WORD $0x970f; BYTE $0xd0 // seta al + LONG $0x42100ff3; BYTE $0x28 // movss xmm0, dword [rdx + 40] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x42100ff3; BYTE $0x2c // movss xmm0, dword [rdx + 44] + LONG $0x2454970f; BYTE $0x28 // seta byte [rsp + 40] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x2454970f; BYTE $0x20 // seta byte [rsp + 32] + LONG $0x42100ff3; BYTE $0x30 // movss xmm0, dword [rdx + 48] + LONG $0x52100ff3; BYTE $0x34 // movss xmm2, dword [rdx + 52] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x62100ff3; BYTE $0x38 // movss xmm4, dword [rdx + 56] + LONG $0x6a100ff3; BYTE $0x3c // movss xmm5, dword [rdx + 60] + LONG $0x2454970f; BYTE $0x78 // seta byte [rsp + 120] + LONG $0x100f44f3; WORD $0x4042 // movss xmm8, dword [rdx + 64] + LONG $0x100f44f3; WORD $0x444a // movss xmm9, dword [rdx + 68] + LONG $0xd32e0f41 // ucomiss xmm2, xmm11 + LONG $0x100f44f3; WORD $0x4852 // movss xmm10, dword [rdx + 72] + LONG $0x100f44f3; WORD $0x4c62 // movss xmm12, dword [rdx + 76] + QUAD $0x000000902494970f // seta byte [rsp + 144] + LONG $0x100f44f3; WORD $0x506a // movss xmm13, dword [rdx + 80] + LONG $0x100f44f3; WORD $0x5472 // movss xmm14, dword [rdx + 84] + LONG $0xe32e0f41 // ucomiss xmm4, xmm11 + LONG $0x62100ff3; BYTE $0x58 // movss xmm4, dword [rdx + 88] + LONG $0x42100ff3; BYTE $0x5c // movss xmm0, dword [rdx + 92] + QUAD $0x000000802494970f // seta byte [rsp + 128] + LONG $0x4a100ff3; BYTE $0x60 // movss xmm1, dword [rdx + 96] + LONG $0x52100ff3; BYTE $0x64 // movss xmm2, dword [rdx + 100] + LONG $0xeb2e0f41 // ucomiss xmm5, xmm11 + LONG $0x6a100ff3; BYTE $0x68 // movss xmm5, dword [rdx + 104] + LONG $0x5a100ff3; BYTE $0x6c // movss xmm3, dword [rdx + 108] + LONG $0xd3970f41 // seta r11b + LONG $0x72100ff3; BYTE $0x70 // movss xmm6, dword [rdx + 112] + LONG $0x7a100ff3; BYTE $0x74 // movss xmm7, dword [rdx + 116] + LONG $0xc32e0f45 // ucomiss xmm8, xmm11 + QUAD $0x000000b02494970f // seta byte [rsp + 176] + LONG $0xcb2e0f45 // ucomiss xmm9, xmm11 + WORD $0x970f; BYTE $0xd1 // seta cl + LONG $0xd32e0f45 // ucomiss xmm10, xmm11 + LONG $0xd6970f40 // seta sil + LONG $0xe32e0f45 // ucomiss xmm12, xmm11 + LONG $0xd0970f41 // seta r8b + LONG $0xeb2e0f45 // ucomiss xmm13, xmm11 + LONG $0xd2970f41 // seta r10b + LONG $0xf32e0f45 // ucomiss xmm14, xmm11 + LONG $0xd6970f41 // seta r14b + LONG $0xe32e0f41 // ucomiss xmm4, xmm11 + QUAD $0x000000a02494970f // seta byte [rsp + 160] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0xd1970f41 // seta r9b + LONG $0xcb2e0f41 // ucomiss xmm1, xmm11 + LONG $0x2454970f; BYTE $0x68 // seta byte [rsp + 104] + LONG $0xd32e0f41 // ucomiss xmm2, xmm11 + LONG $0xd7970f41 // seta r15b + LONG $0xeb2e0f41 // ucomiss xmm5, xmm11 + LONG $0x2454970f; BYTE $0x70 // seta byte [rsp + 112] + LONG $0xdb2e0f41 // ucomiss xmm3, xmm11 + LONG $0x2454970f; BYTE $0x48 // seta byte [rsp + 72] + LONG $0xf32e0f41 // ucomiss xmm6, xmm11 + LONG $0x2454970f; BYTE $0x38 // seta byte [rsp + 56] + LONG $0xfb2e0f41 // ucomiss xmm7, xmm11 + LONG $0x42100ff3; BYTE $0x78 // movss xmm0, dword [rdx + 120] + LONG $0x2454970f; BYTE $0x30 // seta byte [rsp + 48] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x2454970f; BYTE $0x08 // seta byte [rsp + 8] + LONG $0x42100ff3; BYTE $0x7c // movss xmm0, dword [rdx + 124] + LONG $0x80ea8348 // sub rdx, -128 + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0xd7970f40 // seta dil + WORD $0xdb00 // add bl, bl + LONG $0x18245c02 // add bl, byte [rsp + 24] + LONG $0x02e5c041 // shl r13b, 2 + WORD $0x0841; BYTE $0xdd // or r13b, bl + LONG $0x03e4c041 // shl r12b, 3 + WORD $0x0845; BYTE $0xec // or r12b, r13b + LONG $0x245cb60f; BYTE $0x50 // movzx ebx, byte [rsp + 80] + WORD $0xe3c0; BYTE $0x04 // shl bl, 4 + WORD $0x0844; BYTE $0xe3 // or bl, r12b + WORD $0x8941; BYTE $0xdc // mov r12d, ebx + LONG $0x245cb60f; BYTE $0x60 // movzx ebx, byte [rsp + 96] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0x0844; BYTE $0xe3 // or bl, r12b + LONG $0x64b60f44; WORD $0x5824 // movzx r12d, byte [rsp + 88] + LONG $0x06e4c041 // shl r12b, 6 + LONG $0x6cb60f44; WORD $0x4024 // movzx r13d, byte [rsp + 64] + LONG $0x07e5c041 // shl r13b, 7 + WORD $0x0845; BYTE $0xe5 // or r13b, r12b + WORD $0xc000 // add al, al + LONG $0x10244402 // add al, byte [rsp + 16] + LONG $0x64b60f44; WORD $0x2824 // movzx r12d, byte [rsp + 40] + LONG $0x02e4c041 // shl r12b, 2 + WORD $0x0841; BYTE $0xc4 // or r12b, al + WORD $0x8944; BYTE $0xe0 // mov eax, r12d + LONG $0x64b60f44; WORD $0x2024 // movzx r12d, byte [rsp + 32] + LONG $0x03e4c041 // shl r12b, 3 + WORD $0x0841; BYTE $0xc4 // or r12b, al + LONG $0x2444b60f; BYTE $0x78 // movzx eax, byte [rsp + 120] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xe0 // or al, r12b + WORD $0x0841; BYTE $0xdd // or r13b, bl + QUAD $0x00000090249cb60f // movzx ebx, byte [rsp + 144] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0xc308 // or bl, al + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e3c041 // shl r11b, 7 WORD $0x0841; BYTE $0xc3 // or r11b, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0845; BYTE $0xc6 // or r14b, r8b - WORD $0xd200 // add dl, dl - LONG $0xa0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 160] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xf5 // or r13b, r14b + WORD $0xc900 // add cl, cl + LONG $0xb0248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 176] LONG $0x02e6c040 // shl sil, 2 - WORD $0x0840; BYTE $0xd6 // or sil, dl - LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0844; BYTE $0xea // or dl, r13b - WORD $0x8941; BYTE $0xd0 // mov r8d, edx - LONG $0x03e1c041 // shl r9b, 3 - WORD $0x0841; BYTE $0xf1 // or r9b, sil - LONG $0x2454b60f; BYTE $0x58 // movzx edx, byte [rsp + 88] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0844; BYTE $0xc2 // or dl, r8b + WORD $0x0840; BYTE $0xce // or sil, cl + LONG $0x03e0c041 // shl r8b, 3 + WORD $0x0841; BYTE $0xf0 // or r8b, sil LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0845; BYTE $0xca // or r10b, r9b - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - LONG $0x2474b60f; BYTE $0x78 // movzx esi, byte [rsp + 120] - LONG $0x06e6c040 // shl sil, 6 - LONG $0x07e7c040 // shl dil, 7 - WORD $0x0840; BYTE $0xf7 // or dil, sil - WORD $0x0841; BYTE $0xd3 // or r11b, dl - WORD $0x0844; BYTE $0xe7 // or dil, r12b - LONG $0x24348b4c // mov r14, qword [rsp] - QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] - WORD $0xc000 // add al, al - LONG $0x50244402 // add al, byte [rsp + 80] - LONG $0x2454b60f; BYTE $0x68 // movzx edx, byte [rsp + 104] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0xc208 // or dl, al - WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x60 // movzx edx, byte [rsp + 96] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xf2 // or dl, sil - WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x40 // movzx edx, byte [rsp + 64] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xf2 // or dl, sil - WORD $0xd689 // mov esi, edx - LONG $0x2454b60f; BYTE $0x48 // movzx edx, byte [rsp + 72] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xf2 // or dl, sil - WORD $0x8845; BYTE $0x1e // mov byte [r14], r11b - LONG $0x2474b60f; BYTE $0x38 // movzx esi, byte [rsp + 56] - LONG $0x06e6c040 // shl sil, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xf7 // or r15b, sil - LONG $0x017e8841 // mov byte [r14 + 1], dil - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] - WORD $0xc000 // add al, al - LONG $0x08244402 // add al, byte [rsp + 8] - WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x18 // movzx eax, byte [rsp + 24] + WORD $0x0845; BYTE $0xc2 // or r10b, r8b + LONG $0x05e6c041 // shl r14b, 5 + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0841; BYTE $0xdb // or r11b, bl + QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + LONG $0x07e1c041 // shl r9b, 7 + WORD $0x0841; BYTE $0xc1 // or r9b, al + LONG $0x24348b48 // mov rsi, qword [rsp] + WORD $0x8844; BYTE $0x2e // mov byte [rsi], r13b + WORD $0x0845; BYTE $0xf1 // or r9b, r14b + WORD $0x0045; BYTE $0xff // add r15b, r15b + LONG $0x247c0244; BYTE $0x68 // add r15b, byte [rsp + 104] + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xd008 // or al, dl - WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0x0844; BYTE $0xf8 // or al, r15b + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x48 // movzx eax, byte [rsp + 72] WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xd008 // or al, dl - WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x38 // movzx eax, byte [rsp + 56] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xd008 // or al, dl - WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] - WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xd008 // or al, dl - QUAD $0x000000802494b60f // movzx edx, byte [rsp + 128] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0xd108 // or cl, dl - WORD $0xc108 // or cl, al - LONG $0x027e8845 // mov byte [r14 + 2], r15b - LONG $0x034e8841 // mov byte [r14 + 3], cl - LONG $0x80c38148; WORD $0x0000; BYTE $0x00 // add rbx, 128 - LONG $0x04c68349 // add r14, 4 - QUAD $0x000000c024848348; BYTE $0xff // add qword [rsp + 192], -1 - JNE LBB7_184 + WORD $0xc808 // or al, cl + LONG $0x245cb60f; BYTE $0x30 // movzx ebx, byte [rsp + 48] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0xc308 // or bl, al + LONG $0x015e8844 // mov byte [rsi + 1], r11b + LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0840; BYTE $0xc7 // or dil, al + LONG $0x024e8844 // mov byte [rsi + 2], r9b + WORD $0x0840; BYTE $0xdf // or dil, bl + LONG $0x037e8840 // mov byte [rsi + 3], dil + LONG $0x04c68348 // add rsi, 4 + LONG $0x24348948 // mov qword [rsp], rsi + QUAD $0x000000d024848348; BYTE $0xff // add qword [rsp + 208], -1 + JNE LBB7_186 + LONG $0x243c8b4c // mov r15, qword [rsp] QUAD $0x00000088249c8b4c // mov r11, qword [rsp + 136] - QUAD $0x000000b024948b4c // mov r10, qword [rsp + 176] - JMP LBB7_186 + QUAD $0x000000c024948b4c // mov r10, qword [rsp + 192] + JMP LBB7_188 LBB7_9: - LONG $0x2464894c; BYTE $0x58 // mov qword [rsp + 88], r12 + LONG $0x24048b48 // mov rax, qword [rsp] + LONG $0x24448948; BYTE $0x60 // mov qword [rsp + 96], rax LBB7_90: LONG $0x05e2c149 // shl r10, 5 WORD $0x394d; BYTE $0xda // cmp r10, r11 - JGE LBB7_200 + JGE LBB7_202 WORD $0x894d; BYTE $0xd8 // mov r8, r11 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 @@ -35038,49 +36383,65 @@ LBB7_90: JMP LBB7_96 LBB7_61: - LONG $0x2464894c; BYTE $0x48 // mov qword [rsp + 72], r12 - WORD $0x8949; BYTE $0xf6 // mov r14, rsi + LONG $0x24048b48 // mov rax, qword [rsp] + LONG $0x24448948; BYTE $0x78 // mov qword [rsp + 120], rax + WORD $0x8949; BYTE $0xf4 // mov r12, rsi LBB7_72: - LONG $0x05e2c149 // shl r10, 5 - WORD $0x394d; BYTE $0xda // cmp r10, r11 - JGE LBB7_200 + LONG $0x05e7c149 // shl r15, 5 + WORD $0x394d; BYTE $0xdf // cmp r15, r11 + JGE LBB7_202 WORD $0x894d; BYTE $0xd8 // mov r8, r11 - WORD $0x294d; BYTE $0xd0 // sub r8, r10 - WORD $0xf749; BYTE $0xd2 // not r10 - WORD $0x014d; BYTE $0xda // add r10, r11 + WORD $0x294d; BYTE $0xf8 // sub r8, r15 + WORD $0xf749; BYTE $0xd7 // not r15 + WORD $0x014d; BYTE $0xdf // add r15, r11 JNE LBB7_75 WORD $0xc031 // xor eax, eax JMP LBB7_78 -LBB7_175: - WORD $0x894d; BYTE $0xe6 // mov r14, r12 - WORD $0x8948; BYTE $0xf3 // mov rbx, rsi +LBB7_119: + LONG $0x24348b4c // mov r14, qword [rsp] -LBB7_186: +LBB7_130: + LONG $0x05e7c149 // shl r15, 5 + WORD $0x394d; BYTE $0xdf // cmp r15, r11 + JGE LBB7_202 + WORD $0x894d; BYTE $0xd8 // mov r8, r11 + WORD $0x294d; BYTE $0xf8 // sub r8, r15 + WORD $0xf749; BYTE $0xd7 // not r15 + WORD $0x014d; BYTE $0xdf // add r15, r11 + JNE LBB7_135 + WORD $0x3145; BYTE $0xff // xor r15d, r15d + JMP LBB7_133 + +LBB7_177: + LONG $0x243c8b4c // mov r15, qword [rsp] + WORD $0x8948; BYTE $0xf2 // mov rdx, rsi + +LBB7_188: LONG $0x05e2c149 // shl r10, 5 WORD $0x394d; BYTE $0xda // cmp r10, r11 - JGE LBB7_200 + JGE LBB7_202 WORD $0x894d; BYTE $0xd8 // mov r8, r11 WORD $0x294d; BYTE $0xd0 // sub r8, r10 WORD $0xf749; BYTE $0xd2 // not r10 WORD $0x014d; BYTE $0xda // add r10, r11 - JNE LBB7_191 + JNE LBB7_193 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB7_189 + JMP LBB7_191 -LBB7_153: +LBB7_155: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d + LONG $0x24348b4c // mov r14, qword [rsp] -LBB7_154: +LBB7_156: WORD $0x3b4c; BYTE $0x2e // cmp r13, qword [rsi] WORD $0xff19 // sbb edi, edi WORD $0x894c; BYTE $0xda // mov rdx, r11 LONG $0x03eac148 // shr rdx, 3 - WORD $0x894d; BYTE $0xe6 // mov r14, r12 - LONG $0x14b60f45; BYTE $0x14 // movzx r10d, byte [r12 + rdx] + LONG $0x14b60f45; BYTE $0x16 // movzx r10d, byte [r14 + rdx] WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b0 // mov al, 1 @@ -35088,7 +36449,7 @@ LBB7_154: WORD $0x3044; BYTE $0xd7 // xor dil, r10b WORD $0x2040; BYTE $0xf8 // and al, dil WORD $0x3044; BYTE $0xd0 // xor al, r10b - LONG $0x14048841 // mov byte [r12 + rdx], al + LONG $0x16048841 // mov byte [r14 + rdx], al LONG $0x02c38349 // add r11, 2 LONG $0x086e3b4c // cmp r13, qword [rsi + 8] LONG $0x10768d48 // lea rsi, [rsi + 16] @@ -35099,29 +36460,29 @@ LBB7_154: WORD $0xe3d2 // shl bl, cl WORD $0x2040; BYTE $0xfb // and bl, dil WORD $0xc330 // xor bl, al - LONG $0x141c8841 // mov byte [r12 + rdx], bl + LONG $0x161c8841 // mov byte [r14 + rdx], bl WORD $0x394d; BYTE $0xd9 // cmp r9, r11 - JNE LBB7_154 + JNE LBB7_156 LBB7_40: LONG $0x01c0f641 // test r8b, 1 - JE LBB7_200 + JE LBB7_202 WORD $0x3b4c; BYTE $0x2e // cmp r13, qword [rsi] - JMP LBB7_197 + JMP LBB7_111 -LBB7_151: +LBB7_153: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d + LONG $0x24348b4c // mov r14, qword [rsp] -LBB7_152: +LBB7_154: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d WORD $0x9f0f; BYTE $0xd0 // setg al WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xdf // mov rdi, r11 LONG $0x03efc148 // shr rdi, 3 - WORD $0x894d; BYTE $0xe6 // mov r14, r12 - LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] + LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 @@ -35129,7 +36490,7 @@ LBB7_152: WORD $0x3044; BYTE $0xc8 // xor al, r9b WORD $0xc320 // and bl, al WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3c1c8841 // mov byte [r12 + rdi], bl + LONG $0x3e1c8841 // mov byte [r14 + rdi], bl LONG $0x02c38349 // add r11, 2 LONG $0x046e3944 // cmp dword [rsi + 4], r13d LONG $0x08768d48 // lea rsi, [rsi + 8] @@ -35141,25 +36502,25 @@ LBB7_152: WORD $0xe2d2 // shl dl, cl WORD $0xc220 // and dl, al WORD $0xda30 // xor dl, bl - LONG $0x3c148841 // mov byte [r12 + rdi], dl + LONG $0x3e148841 // mov byte [r14 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB7_152 + JNE LBB7_154 -LBB7_148: +LBB7_150: LONG $0x01c0f641 // test r8b, 1 - JE LBB7_200 + JE LBB7_202 WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d - JMP LBB7_150 + JMP LBB7_152 LBB7_93: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xc9 // xor r9d, r9d - LONG $0x245c8b4c; BYTE $0x58 // mov r11, qword [rsp + 88] + LONG $0x245c8b4c; BYTE $0x60 // mov r11, qword [rsp + 96] LBB7_94: WORD $0x894c; BYTE $0xc8 // mov rax, r9 - LONG $0x0e343846 // cmp byte [rsi + r9], r14b + LONG $0x0e243846 // cmp byte [rsi + r9], r12b WORD $0x9f0f; BYTE $0xd3 // setg bl WORD $0xdbf6 // neg bl WORD $0x894c; BYTE $0xcf // mov rdi, r9 @@ -35173,7 +36534,7 @@ LBB7_94: WORD $0xda20 // and dl, bl WORD $0x3044; BYTE $0xca // xor dl, r9b LONG $0x3b148841 // mov byte [r11 + rdi], dl - LONG $0x06743844; BYTE $0x01 // cmp byte [rsi + rax + 1], r14b + LONG $0x06643844; BYTE $0x01 // cmp byte [rsi + rax + 1], r12b LONG $0x02488d4c // lea r9, [rax + 2] WORD $0x9f0f; BYTE $0xd3 // setg bl WORD $0xdbf6 // neg bl @@ -35190,13 +36551,13 @@ LBB7_94: LBB7_96: LONG $0x01c0f641 // test r8b, 1 - JE LBB7_200 - WORD $0x3844; BYTE $0x36 // cmp byte [rsi], r14b + JE LBB7_202 + WORD $0x3844; BYTE $0x26 // cmp byte [rsi], r12b WORD $0x9f0f; BYTE $0xd0 // setg al WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xca // mov rdx, r9 LONG $0x03eac148 // shr rdx, 3 - LONG $0x24448b4c; BYTE $0x58 // mov r8, qword [rsp + 88] + LONG $0x24448b4c; BYTE $0x60 // mov r8, qword [rsp + 96] LONG $0x103c8a41 // mov dil, byte [r8 + rdx] LONG $0x07e18041 // and r9b, 7 WORD $0x01b3 // mov bl, 1 @@ -35206,17 +36567,16 @@ LBB7_96: WORD $0xc320 // and bl, al WORD $0x3040; BYTE $0xfb // xor bl, dil LONG $0x101c8841 // mov byte [r8 + rdx], bl - JMP LBB7_200 + JMP LBB7_202 LBB7_75: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0xc031 // xor eax, eax - LONG $0x245c8b4c; BYTE $0x48 // mov r11, qword [rsp + 72] - LONG $0x24548a44; BYTE $0x28 // mov r10b, byte [rsp + 40] + LONG $0x245c8b4c; BYTE $0x78 // mov r11, qword [rsp + 120] LBB7_76: - LONG $0x06143a45 // cmp r10b, byte [r14 + rax] + LONG $0x04143a45 // cmp r10b, byte [r12 + rax] WORD $0xf619 // sbb esi, esi WORD $0x8948; BYTE $0xc7 // mov rdi, rax LONG $0x03efc148 // shr rdi, 3 @@ -35229,7 +36589,7 @@ LBB7_76: WORD $0x2040; BYTE $0xf2 // and dl, sil WORD $0xda30 // xor dl, bl LONG $0x3b148841 // mov byte [r11 + rdi], dl - LONG $0x06543a45; BYTE $0x01 // cmp r10b, byte [r14 + rax + 1] + LONG $0x04543a45; BYTE $0x01 // cmp r10b, byte [r12 + rax + 1] LONG $0x02408d48 // lea rax, [rax + 2] WORD $0xf619 // sbb esi, esi WORD $0x3040; BYTE $0xd6 // xor sil, dl @@ -35241,17 +36601,16 @@ LBB7_76: LONG $0x3b1c8841 // mov byte [r11 + rdi], bl WORD $0x3949; BYTE $0xc1 // cmp r9, rax JNE LBB7_76 - WORD $0x0149; BYTE $0xc6 // add r14, rax + WORD $0x0149; BYTE $0xc4 // add r12, rax LBB7_78: LONG $0x01c0f641 // test r8b, 1 - JE LBB7_200 - LONG $0x28244c8a // mov cl, byte [rsp + 40] - WORD $0x3a41; BYTE $0x0e // cmp cl, byte [r14] + JE LBB7_202 + LONG $0x24143a45 // cmp r10b, byte [r12] WORD $0xd219 // sbb edx, edx WORD $0x8948; BYTE $0xc6 // mov rsi, rax LONG $0x03eec148 // shr rsi, 3 - LONG $0x24448b4c; BYTE $0x48 // mov r8, qword [rsp + 72] + LONG $0x24448b4c; BYTE $0x78 // mov r8, qword [rsp + 120] LONG $0x303c8a41 // mov dil, byte [r8 + rsi] WORD $0x0724 // and al, 7 WORD $0x01b3 // mov bl, 1 @@ -35261,20 +36620,20 @@ LBB7_78: WORD $0xd320 // and bl, dl WORD $0x3040; BYTE $0xfb // xor bl, dil LONG $0x301c8841 // mov byte [r8 + rsi], bl - JMP LBB7_200 + JMP LBB7_202 -LBB7_135: +LBB7_137: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d + LONG $0x24348b4c // mov r14, qword [rsp] -LBB7_136: +LBB7_138: WORD $0x3b44; BYTE $0x2e // cmp r13d, dword [rsi] WORD $0xff19 // sbb edi, edi WORD $0x894c; BYTE $0xda // mov rdx, r11 LONG $0x03eac148 // shr rdx, 3 - WORD $0x894d; BYTE $0xe6 // mov r14, r12 - LONG $0x14b60f45; BYTE $0x14 // movzx r10d, byte [r12 + rdx] + LONG $0x14b60f45; BYTE $0x16 // movzx r10d, byte [r14 + rdx] WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b0 // mov al, 1 @@ -35282,7 +36641,7 @@ LBB7_136: WORD $0x3044; BYTE $0xd7 // xor dil, r10b WORD $0x2040; BYTE $0xf8 // and al, dil WORD $0x3044; BYTE $0xd0 // xor al, r10b - LONG $0x14048841 // mov byte [r12 + rdx], al + LONG $0x16048841 // mov byte [r14 + rdx], al LONG $0x02c38349 // add r11, 2 LONG $0x046e3b44 // cmp r13d, dword [rsi + 4] LONG $0x08768d48 // lea rsi, [rsi + 8] @@ -35293,68 +36652,82 @@ LBB7_136: WORD $0xe3d2 // shl bl, cl WORD $0x2040; BYTE $0xfb // and bl, dil WORD $0xc330 // xor bl, al - LONG $0x141c8841 // mov byte [r12 + rdx], bl + LONG $0x161c8841 // mov byte [r14 + rdx], bl WORD $0x394d; BYTE $0xd9 // cmp r9, r11 - JNE LBB7_136 + JNE LBB7_138 LBB7_24: LONG $0x01c0f641 // test r8b, 1 - JE LBB7_200 + JE LBB7_202 WORD $0x3b44; BYTE $0x2e // cmp r13d, dword [rsi] - JMP LBB7_197 + JMP LBB7_111 -LBB7_193: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 - WORD $0x3145; BYTE $0xdb // xor r11d, r11d +LBB7_196: + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 + WORD $0x3145; BYTE $0xd2 // xor r10d, r10d + LONG $0x241c8b4c // mov r11, qword [rsp] -LBB7_194: - LONG $0x062e0f66 // ucomisd xmm0, qword [rsi] - WORD $0xc019 // sbb eax, eax - WORD $0x894c; BYTE $0xdf // mov rdi, r11 +LBB7_197: + LONG $0x0e100ff2 // movsd xmm1, qword [rsi] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + WORD $0x970f; BYTE $0xd0 // seta al + WORD $0xd8f6 // neg al + WORD $0x894c; BYTE $0xd7 // mov rdi, r10 LONG $0x03efc148 // shr rdi, 3 - WORD $0x894d; BYTE $0xe6 // mov r14, r12 - LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] - WORD $0x3044; BYTE $0xc8 // xor al, r9b - WORD $0x8944; BYTE $0xd9 // mov ecx, r11d + WORD $0x8944; BYTE $0xd1 // mov ecx, r10d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 WORD $0xe3d2 // shl bl, cl + LONG $0x14b60f41; BYTE $0x3b // movzx edx, byte [r11 + rdi] + WORD $0xd030 // xor al, dl WORD $0xc320 // and bl, al - WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3c1c8841 // mov byte [r12 + rdi], bl - LONG $0x02c38349 // add r11, 2 - LONG $0x462e0f66; BYTE $0x08 // ucomisd xmm0, qword [rsi + 8] - LONG $0x10768d48 // lea rsi, [rsi + 16] - WORD $0xc019 // sbb eax, eax + WORD $0xd330 // xor bl, dl + LONG $0x3b1c8841 // mov byte [r11 + rdi], bl + LONG $0x02c28349 // add r10, 2 + LONG $0x4e100ff2; BYTE $0x08 // movsd xmm1, qword [rsi + 8] + LONG $0x10c68348 // add rsi, 16 + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + WORD $0x970f; BYTE $0xd0 // seta al + WORD $0xd8f6 // neg al WORD $0xd830 // xor al, bl WORD $0xc980; BYTE $0x01 // or cl, 1 WORD $0x01b2 // mov dl, 1 WORD $0xe2d2 // shl dl, cl WORD $0xc220 // and dl, al WORD $0xda30 // xor dl, bl - LONG $0x3c148841 // mov byte [r12 + rdi], dl - WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB7_194 + LONG $0x3b148841 // mov byte [r11 + rdi], dl + WORD $0x394d; BYTE $0xd1 // cmp r9, r10 + JNE LBB7_197 -LBB7_195: - LONG $0x01c0f641 // test r8b, 1 - JE LBB7_200 - LONG $0x062e0f66 // ucomisd xmm0, qword [rsi] - JMP LBB7_197 +LBB7_198: + LONG $0x01c0f641 // test r8b, 1 + JE LBB7_202 + LONG $0x0e100ff2 // movsd xmm1, qword [rsi] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + WORD $0x970f; BYTE $0xd0 // seta al + WORD $0xd8f6 // neg al + WORD $0x894c; BYTE $0xd2 // mov rdx, r10 + LONG $0x03eac148 // shr rdx, 3 + LONG $0x243c8b48 // mov rdi, qword [rsp] + LONG $0x17348a40 // mov sil, byte [rdi + rdx] + LONG $0x07e28041 // and r10b, 7 + WORD $0x01b3 // mov bl, 1 + WORD $0x8944; BYTE $0xd1 // mov ecx, r10d + JMP LBB7_200 -LBB7_111: +LBB7_112: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d + LONG $0x24348b4c // mov r14, qword [rsp] -LBB7_112: +LBB7_113: LONG $0x2e3b4466 // cmp r13w, word [rsi] WORD $0xff19 // sbb edi, edi WORD $0x894c; BYTE $0xda // mov rdx, r11 LONG $0x03eac148 // shr rdx, 3 - WORD $0x894d; BYTE $0xe6 // mov r14, r12 - LONG $0x14b60f45; BYTE $0x14 // movzx r10d, byte [r12 + rdx] + LONG $0x14b60f45; BYTE $0x16 // movzx r10d, byte [r14 + rdx] WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b0 // mov al, 1 @@ -35362,7 +36735,7 @@ LBB7_112: WORD $0x3044; BYTE $0xd7 // xor dil, r10b WORD $0x2040; BYTE $0xf8 // and al, dil WORD $0x3044; BYTE $0xd0 // xor al, r10b - LONG $0x14048841 // mov byte [r12 + rdx], al + LONG $0x16048841 // mov byte [r14 + rdx], al LONG $0x02c38349 // add r11, 2 LONG $0x6e3b4466; BYTE $0x02 // cmp r13w, word [rsi + 2] LONG $0x04768d48 // lea rsi, [rsi + 4] @@ -35373,97 +36746,42 @@ LBB7_112: WORD $0xe3d2 // shl bl, cl WORD $0x2040; BYTE $0xfb // and bl, dil WORD $0xc330 // xor bl, al - LONG $0x141c8841 // mov byte [r12 + rdx], bl + LONG $0x161c8841 // mov byte [r14 + rdx], bl WORD $0x394d; BYTE $0xd9 // cmp r9, r11 - JNE LBB7_112 + JNE LBB7_113 LBB7_109: LONG $0x01c0f641 // test r8b, 1 - JE LBB7_200 + JE LBB7_202 LONG $0x2e3b4466 // cmp r13w, word [rsi] -LBB7_197: +LBB7_111: WORD $0xc019 // sbb eax, eax WORD $0x894c; BYTE $0xda // mov rdx, r11 LONG $0x03eac148 // shr rdx, 3 - LONG $0x14348a41 // mov sil, byte [r12 + rdx] + LONG $0x243c8b48 // mov rdi, qword [rsp] + LONG $0x17348a40 // mov sil, byte [rdi + rdx] LONG $0x07e38041 // and r11b, 7 WORD $0x01b3 // mov bl, 1 WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe3d2 // shl bl, cl WORD $0x3040; BYTE $0xf0 // xor al, sil WORD $0xc320 // and bl, al - JMP LBB7_198 + JMP LBB7_201 -LBB7_133: - WORD $0x894d; BYTE $0xc1 // mov r9, r8 - LONG $0xfee18349 // and r9, -2 - WORD $0x3145; BYTE $0xf6 // xor r14d, r14d - QUAD $0x000000f0249c8b44 // mov r11d, dword [rsp + 240] - -LBB7_134: - WORD $0x8948; BYTE $0xf0 // mov rax, rsi - LONG $0x1e394466 // cmp word [rsi], r11w - WORD $0x9f0f; BYTE $0xd2 // setg dl - WORD $0xdaf6 // neg dl - WORD $0x894c; BYTE $0xf7 // mov rdi, r14 - LONG $0x03efc148 // shr rdi, 3 - LONG $0x14b60f45; BYTE $0x3c // movzx r10d, byte [r12 + rdi] - WORD $0x8944; BYTE $0xf1 // mov ecx, r14d - WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b3 // mov bl, 1 - WORD $0xe3d2 // shl bl, cl - WORD $0x3044; BYTE $0xd2 // xor dl, r10b - WORD $0xd320 // and bl, dl - WORD $0x3044; BYTE $0xd3 // xor bl, r10b - LONG $0x3c1c8841 // mov byte [r12 + rdi], bl - LONG $0x02c68349 // add r14, 2 - LONG $0x5e394466; BYTE $0x02 // cmp word [rsi + 2], r11w - LONG $0x04768d48 // lea rsi, [rsi + 4] - WORD $0x9f0f; BYTE $0xd2 // setg dl - WORD $0xdaf6 // neg dl - WORD $0xda30 // xor dl, bl - WORD $0xc980; BYTE $0x01 // or cl, 1 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0xd020 // and al, dl - WORD $0xd830 // xor al, bl - LONG $0x3c048841 // mov byte [r12 + rdi], al - WORD $0x394d; BYTE $0xf1 // cmp r9, r14 - JNE LBB7_134 - -LBB7_131: - LONG $0x01c0f641 // test r8b, 1 - JE LBB7_200 - LONG $0xf024848b; WORD $0x0000; BYTE $0x00 // mov eax, dword [rsp + 240] - WORD $0x3966; BYTE $0x06 // cmp word [rsi], ax - WORD $0x9f0f; BYTE $0xd0 // setg al - WORD $0xd8f6 // neg al - WORD $0x894c; BYTE $0xf2 // mov rdx, r14 - LONG $0x03eac148 // shr rdx, 3 - LONG $0x143c8a41 // mov dil, byte [r12 + rdx] - LONG $0x07e68041 // and r14b, 7 - WORD $0x01b3 // mov bl, 1 - WORD $0x8944; BYTE $0xf1 // mov ecx, r14d - WORD $0xe3d2 // shl bl, cl - WORD $0x3040; BYTE $0xf8 // xor al, dil - WORD $0xc320 // and bl, al - WORD $0x3040; BYTE $0xfb // xor bl, dil - JMP LBB7_199 - -LBB7_168: +LBB7_170: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d + LONG $0x24348b4c // mov r14, qword [rsp] -LBB7_169: +LBB7_171: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 WORD $0x9f0f; BYTE $0xd0 // setg al WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xdf // mov rdi, r11 LONG $0x03efc148 // shr rdi, 3 - WORD $0x894d; BYTE $0xe6 // mov r14, r12 - LONG $0x0cb60f45; BYTE $0x3c // movzx r9d, byte [r12 + rdi] + LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 @@ -35471,7 +36789,7 @@ LBB7_169: WORD $0x3044; BYTE $0xc8 // xor al, r9b WORD $0xc320 // and bl, al WORD $0x3044; BYTE $0xcb // xor bl, r9b - LONG $0x3c1c8841 // mov byte [r12 + rdi], bl + LONG $0x3e1c8841 // mov byte [r14 + rdi], bl LONG $0x02c38349 // add r11, 2 LONG $0x086e394c // cmp qword [rsi + 8], r13 LONG $0x10768d48 // lea rsi, [rsi + 16] @@ -35483,88 +36801,155 @@ LBB7_169: WORD $0xe2d2 // shl dl, cl WORD $0xc220 // and dl, al WORD $0xda30 // xor dl, bl - LONG $0x3c148841 // mov byte [r12 + rdi], dl + LONG $0x3e148841 // mov byte [r14 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB7_169 + JNE LBB7_171 -LBB7_166: +LBB7_168: LONG $0x01c0f641 // test r8b, 1 - JE LBB7_200 + JE LBB7_202 WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 -LBB7_150: +LBB7_152: WORD $0x9f0f; BYTE $0xd0 // setg al WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xda // mov rdx, r11 LONG $0x03eac148 // shr rdx, 3 - LONG $0x14348a41 // mov sil, byte [r12 + rdx] + LONG $0x243c8b48 // mov rdi, qword [rsp] + LONG $0x17348a40 // mov sil, byte [rdi + rdx] LONG $0x07e38041 // and r11b, 7 WORD $0x01b3 // mov bl, 1 WORD $0x8944; BYTE $0xd9 // mov ecx, r11d + +LBB7_200: WORD $0xe3d2 // shl bl, cl WORD $0x3040; BYTE $0xf0 // xor al, sil WORD $0xc320 // and bl, al -LBB7_198: +LBB7_201: WORD $0x3040; BYTE $0xf3 // xor bl, sil + WORD $0x1c88; BYTE $0x17 // mov byte [rdi + rdx], bl -LBB7_199: - LONG $0x141c8841 // mov byte [r12 + rdx], bl - -LBB7_200: +LBB7_202: MOVQ 336(SP), SP RET -LBB7_191: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 - WORD $0x3145; BYTE $0xdb // xor r11d, r11d +LBB7_135: + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 + WORD $0x3145; BYTE $0xff // xor r15d, r15d + QUAD $0x000000f0249c8b44 // mov r11d, dword [rsp + 240] -LBB7_192: - LONG $0x1b2e0f44 // ucomiss xmm11, dword [rbx] - WORD $0xd219 // sbb edx, edx - WORD $0x894c; BYTE $0xdf // mov rdi, r11 +LBB7_136: + WORD $0x8948; BYTE $0xf0 // mov rax, rsi + LONG $0x1e394466 // cmp word [rsi], r11w + WORD $0x9f0f; BYTE $0xd2 // setg dl + WORD $0xdaf6 // neg dl + WORD $0x894c; BYTE $0xff // mov rdi, r15 LONG $0x03efc148 // shr rdi, 3 - LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] - WORD $0x3044; BYTE $0xca // xor dl, r9b - WORD $0x8944; BYTE $0xd9 // mov ecx, r11d + LONG $0x14b60f45; BYTE $0x3e // movzx r10d, byte [r14 + rdi] + WORD $0x8944; BYTE $0xf9 // mov ecx, r15d WORD $0xe180; BYTE $0x06 // and cl, 6 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0x3044; BYTE $0xd2 // xor dl, r10b + WORD $0xd320 // and bl, dl + WORD $0x3044; BYTE $0xd3 // xor bl, r10b + LONG $0x3e1c8841 // mov byte [r14 + rdi], bl + LONG $0x02c78349 // add r15, 2 + LONG $0x5e394466; BYTE $0x02 // cmp word [rsi + 2], r11w + LONG $0x04768d48 // lea rsi, [rsi + 4] + WORD $0x9f0f; BYTE $0xd2 // setg dl + WORD $0xdaf6 // neg dl + WORD $0xda30 // xor dl, bl + WORD $0xc980; BYTE $0x01 // or cl, 1 WORD $0x01b0 // mov al, 1 WORD $0xe0d2 // shl al, cl WORD $0xd020 // and al, dl - WORD $0x3044; BYTE $0xc8 // xor al, r9b + WORD $0xd830 // xor al, bl LONG $0x3e048841 // mov byte [r14 + rdi], al - LONG $0x02c38349 // add r11, 2 - LONG $0x5b2e0f44; BYTE $0x04 // ucomiss xmm11, dword [rbx + 4] - LONG $0x085b8d48 // lea rbx, [rbx + 8] - WORD $0xf619 // sbb esi, esi - WORD $0x3040; BYTE $0xc6 // xor sil, al - WORD $0xc980; BYTE $0x01 // or cl, 1 + WORD $0x394d; BYTE $0xf9 // cmp r9, r15 + JNE LBB7_136 + +LBB7_133: + LONG $0x01c0f641 // test r8b, 1 + JE LBB7_202 + LONG $0xf024848b; WORD $0x0000; BYTE $0x00 // mov eax, dword [rsp + 240] + WORD $0x3966; BYTE $0x06 // cmp word [rsi], ax + WORD $0x9f0f; BYTE $0xd0 // setg al + WORD $0xd8f6 // neg al + WORD $0x894c; BYTE $0xfa // mov rdx, r15 + LONG $0x03eac148 // shr rdx, 3 + LONG $0x163c8a41 // mov dil, byte [r14 + rdx] + LONG $0x07e78041 // and r15b, 7 + WORD $0x01b3 // mov bl, 1 + WORD $0x8944; BYTE $0xf9 // mov ecx, r15d + WORD $0xe3d2 // shl bl, cl + WORD $0x3040; BYTE $0xf8 // xor al, dil + WORD $0xc320 // and bl, al + WORD $0x3040; BYTE $0xfb // xor bl, dil + LONG $0x161c8841 // mov byte [r14 + rdx], bl + JMP LBB7_202 + +LBB7_193: + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + LONG $0xfee18349 // and r9, -2 + WORD $0x3145; BYTE $0xdb // xor r11d, r11d + WORD $0x894d; BYTE $0xfa // mov r10, r15 + WORD $0x8948; BYTE $0xd6 // mov rsi, rdx + +LBB7_194: + LONG $0x06100ff3 // movss xmm0, dword [rsi] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + WORD $0x970f; BYTE $0xd3 // seta bl + WORD $0xdbf6 // neg bl + WORD $0x894c; BYTE $0xdf // mov rdi, r11 + LONG $0x03efc148 // shr rdi, 3 + WORD $0x8944; BYTE $0xd9 // mov ecx, r11d + WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b2 // mov dl, 1 WORD $0xe2d2 // shl dl, cl - WORD $0x2040; BYTE $0xf2 // and dl, sil + LONG $0x04b60f41; BYTE $0x3a // movzx eax, byte [r10 + rdi] + WORD $0xc330 // xor bl, al + WORD $0xda20 // and dl, bl WORD $0xc230 // xor dl, al - LONG $0x3e148841 // mov byte [r14 + rdi], dl - WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB7_192 + LONG $0x3a148841 // mov byte [r10 + rdi], dl + LONG $0x02c38349 // add r11, 2 + LONG $0x46100ff3; BYTE $0x04 // movss xmm0, dword [rsi + 4] + LONG $0x08c68348 // add rsi, 8 + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + WORD $0x970f; BYTE $0xd0 // seta al + WORD $0xd8f6 // neg al + WORD $0xd030 // xor al, dl + WORD $0xc980; BYTE $0x01 // or cl, 1 + WORD $0x01b3 // mov bl, 1 + WORD $0xe3d2 // shl bl, cl + WORD $0xc320 // and bl, al + WORD $0xd330 // xor bl, dl + LONG $0x3a1c8841 // mov byte [r10 + rdi], bl + WORD $0x394d; BYTE $0xd9 // cmp r9, r11 + JNE LBB7_194 + WORD $0x8948; BYTE $0xf2 // mov rdx, rsi -LBB7_189: +LBB7_191: LONG $0x01c0f641 // test r8b, 1 - JE LBB7_200 - LONG $0x1b2e0f44 // ucomiss xmm11, dword [rbx] - WORD $0xc019 // sbb eax, eax + JE LBB7_202 + LONG $0x02100ff3 // movss xmm0, dword [rdx] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + WORD $0x970f; BYTE $0xd0 // seta al + WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xda // mov rdx, r11 LONG $0x03eac148 // shr rdx, 3 - LONG $0x16348a41 // mov sil, byte [r14 + rdx] + LONG $0x173c8a41 // mov dil, byte [r15 + rdx] LONG $0x07e38041 // and r11b, 7 WORD $0x01b3 // mov bl, 1 WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe3d2 // shl bl, cl - WORD $0x3040; BYTE $0xf0 // xor al, sil + WORD $0x3040; BYTE $0xf8 // xor al, dil WORD $0xc320 // and bl, al - WORD $0x3040; BYTE $0xf3 // xor bl, sil - LONG $0x161c8841 // mov byte [r14 + rdx], bl - JMP LBB7_200 + WORD $0x3040; BYTE $0xfb // xor bl, dil + LONG $0x171c8841 // mov byte [r15 + rdx], bl + JMP LBB7_202 LBB7_84: LONG $0xf0e28349 // and r10, -16 @@ -35573,31 +36958,31 @@ LBB7_84: WORD $0x0148; BYTE $0xf0 // add rax, rsi QUAD $0x0000010824848948 // mov qword [rsp + 264], rax QUAD $0x000000e82494894c // mov qword [rsp + 232], r10 - LONG $0x94048d4b // lea rax, [r12 + 4*r10] - LONG $0x24448948; BYTE $0x58 // mov qword [rsp + 88], rax - LONG $0xc6b60f41 // movzx eax, r14b + LONG $0x24048b48 // mov rax, qword [rsp] + LONG $0x90048d4a // lea rax, [rax + 4*r10] + LONG $0x24448948; BYTE $0x60 // mov qword [rsp + 96], rax + LONG $0xc4b60f41 // movzx eax, r12b LONG $0xc86e0f66 // movd xmm1, eax LONG $0xc0ef0f66 // pxor xmm0, xmm0 LONG $0x00380f66; BYTE $0xc8 // pshufb xmm1, xmm0 - QUAD $0x0000a0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 160], xmm1 + QUAD $0x000090248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 144], xmm1 WORD $0xc031 // xor eax, eax - QUAD $0x0000008024a4894c // mov qword [rsp + 128], r12 LBB7_85: WORD $0x8948; BYTE $0xc7 // mov rdi, rax QUAD $0x000000f024848948 // mov qword [rsp + 240], rax LONG $0x05e7c148 // shl rdi, 5 - WORD $0x8949; BYTE $0xf8 // mov r8, rdi - WORD $0x8948; BYTE $0xfa // mov rdx, rdi - WORD $0x8949; BYTE $0xf9 // mov r9, rdi WORD $0x8949; BYTE $0xfc // mov r12, rdi + WORD $0x8948; BYTE $0xfa // mov rdx, rdi WORD $0x8949; BYTE $0xfb // mov r11, rdi + WORD $0x8949; BYTE $0xf9 // mov r9, rdi WORD $0x8948; BYTE $0xf8 // mov rax, rdi - LONG $0x247c8948; BYTE $0x20 // mov qword [rsp + 32], rdi + WORD $0x8949; BYTE $0xf8 // mov r8, rdi WORD $0x8949; BYTE $0xfe // mov r14, rdi WORD $0x8949; BYTE $0xfa // mov r10, rdi WORD $0x8949; BYTE $0xff // mov r15, rdi WORD $0x8948; BYTE $0xfb // mov rbx, rdi + LONG $0x247c8948; BYTE $0x38 // mov qword [rsp + 56], rdi LONG $0x3e0cb60f // movzx ecx, byte [rsi + rdi] LONG $0x6e0f4466; BYTE $0xf9 // movd xmm15, ecx LONG $0x3e4cb60f; BYTE $0x01 // movzx ecx, byte [rsi + rdi + 1] @@ -35614,15 +36999,15 @@ LBB7_85: LONG $0xd96e0f66 // movd xmm3, ecx LONG $0x3e4cb60f; BYTE $0x07 // movzx ecx, byte [rsi + rdi + 7] LONG $0xc16e0f66 // movd xmm0, ecx - QUAD $0x0000d024847f0f66; BYTE $0x00 // movdqa oword [rsp + 208], xmm0 + QUAD $0x0000a024847f0f66; BYTE $0x00 // movdqa oword [rsp + 160], xmm0 LONG $0x3e4cb60f; BYTE $0x08 // movzx ecx, byte [rsi + rdi + 8] LONG $0xc16e0f66 // movd xmm0, ecx - QUAD $0x00011024847f0f66; BYTE $0x00 // movdqa oword [rsp + 272], xmm0 + QUAD $0x00013024847f0f66; BYTE $0x00 // movdqa oword [rsp + 304], xmm0 LONG $0x3e4cb60f; BYTE $0x09 // movzx ecx, byte [rsi + rdi + 9] LONG $0x6e0f4466; BYTE $0xd1 // movd xmm10, ecx LONG $0x3e4cb60f; BYTE $0x0a // movzx ecx, byte [rsi + rdi + 10] LONG $0xc16e0f66 // movd xmm0, ecx - QUAD $0x00009024847f0f66; BYTE $0x00 // movdqa oword [rsp + 144], xmm0 + QUAD $0x0000b024847f0f66; BYTE $0x00 // movdqa oword [rsp + 176], xmm0 LONG $0x3e4cb60f; BYTE $0x0b // movzx ecx, byte [rsi + rdi + 11] LONG $0x6e0f4466; BYTE $0xd9 // movd xmm11, ecx LONG $0x3e4cb60f; BYTE $0x0c // movzx ecx, byte [rsi + rdi + 12] @@ -35631,113 +37016,116 @@ LBB7_85: LONG $0x6e0f4466; BYTE $0xe1 // movd xmm12, ecx LONG $0x3e4cb60f; BYTE $0x0e // movzx ecx, byte [rsi + rdi + 14] LONG $0xc16e0f66 // movd xmm0, ecx - QUAD $0x00013024847f0f66; BYTE $0x00 // movdqa oword [rsp + 304], xmm0 + QUAD $0x00011024847f0f66; BYTE $0x00 // movdqa oword [rsp + 272], xmm0 + LONG $0x247c8948; BYTE $0x28 // mov qword [rsp + 40], rdi WORD $0x8949; BYTE $0xfd // mov r13, rdi LONG $0x20cd8349 // or r13, 32 - LONG $0x246c894c; BYTE $0x28 // mov qword [rsp + 40], r13 - LONG $0x40c88349 // or r8, 64 + LONG $0x246c894c; BYTE $0x20 // mov qword [rsp + 32], r13 + LONG $0x40cc8349 // or r12, 64 LONG $0x60ca8348 // or rdx, 96 - LONG $0x24548948; BYTE $0x78 // mov qword [rsp + 120], rdx - LONG $0x80c98149; WORD $0x0000; BYTE $0x00 // or r9, 128 - LONG $0xa0cc8149; WORD $0x0000; BYTE $0x00 // or r12, 160 - LONG $0xc0cb8149; WORD $0x0000; BYTE $0x00 // or r11, 192 + LONG $0x24548948; BYTE $0x68 // mov qword [rsp + 104], rdx + LONG $0x80cb8149; WORD $0x0000; BYTE $0x00 // or r11, 128 LONG $0x245c894c; BYTE $0x40 // mov qword [rsp + 64], r11 - LONG $0x00e00d48; WORD $0x0000 // or rax, 224 - LONG $0x24448948; BYTE $0x48 // mov qword [rsp + 72], rax - LONG $0x245c8b4c; BYTE $0x20 // mov r11, qword [rsp + 32] - LONG $0x00cb8149; WORD $0x0001; BYTE $0x00 // or r11, 256 - LONG $0x20ce8149; WORD $0x0001; BYTE $0x00 // or r14, 288 - LONG $0x40ca8149; WORD $0x0001; BYTE $0x00 // or r10, 320 - LONG $0x60cf8149; WORD $0x0001; BYTE $0x00 // or r15, 352 - LONG $0x247c894c; BYTE $0x50 // mov qword [rsp + 80], r15 - LONG $0x80cb8148; WORD $0x0001; BYTE $0x00 // or rbx, 384 + WORD $0x8949; BYTE $0xfb // mov r11, rdi + LONG $0xa0cb8149; WORD $0x0000; BYTE $0x00 // or r11, 160 + LONG $0x00c00d48; WORD $0x0000 // or rax, 192 + LONG $0x24448948; BYTE $0x50 // mov qword [rsp + 80], rax + LONG $0xe0c98149; WORD $0x0000; BYTE $0x00 // or r9, 224 + LONG $0x00ce8149; WORD $0x0001; BYTE $0x00 // or r14, 256 + QUAD $0x0000008024b4894c // mov qword [rsp + 128], r14 + LONG $0x20ca8149; WORD $0x0001; BYTE $0x00 // or r10, 288 + LONG $0x2454894c; BYTE $0x78 // mov qword [rsp + 120], r10 + LONG $0x40c88149; WORD $0x0001; BYTE $0x00 // or r8, 320 + LONG $0x2444894c; BYTE $0x48 // mov qword [rsp + 72], r8 + LONG $0x60cb8148; WORD $0x0001; BYTE $0x00 // or rbx, 352 + LONG $0x245c8948; BYTE $0x58 // mov qword [rsp + 88], rbx + LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] + LONG $0x80c98148; WORD $0x0001; BYTE $0x00 // or rcx, 384 + LONG $0x244c8948; BYTE $0x38 // mov qword [rsp + 56], rcx WORD $0x8948; BYTE $0xf8 // mov rax, rdi LONG $0x01a00d48; WORD $0x0000 // or rax, 416 - LONG $0x24448948; BYTE $0x08 // mov qword [rsp + 8], rax + LONG $0x24448948; BYTE $0x10 // mov qword [rsp + 16], rax WORD $0x8948; BYTE $0xf8 // mov rax, rdi - WORD $0x8948; BYTE $0xf9 // mov rcx, rdi - LONG $0x247c8948; BYTE $0x18 // mov qword [rsp + 24], rdi LONG $0x01c00d48; WORD $0x0000 // or rax, 448 - LONG $0x24448948; BYTE $0x10 // mov qword [rsp + 16], rax - LONG $0xe0c98148; WORD $0x0001; BYTE $0x00 // or rcx, 480 - LONG $0x244c8948; BYTE $0x30 // mov qword [rsp + 48], rcx + LONG $0x24448948; BYTE $0x18 // mov qword [rsp + 24], rax + WORD $0x8948; BYTE $0xf8 // mov rax, rdi + LONG $0x01e00d48; WORD $0x0000 // or rax, 480 + LONG $0x24448948; BYTE $0x30 // mov qword [rsp + 48], rax QUAD $0x012e3c203a0f4666 // pinsrb xmm15, byte [rsi + r13], 1 - QUAD $0x02063c203a0f4666 // pinsrb xmm15, byte [rsi + r8], 2 + QUAD $0x02263c203a0f4666 // pinsrb xmm15, byte [rsi + r12], 2 QUAD $0x03163c203a0f4466 // pinsrb xmm15, byte [rsi + rdx], 3 - WORD $0x894c; BYTE $0xcf // mov rdi, r9 - LONG $0x244c894c; BYTE $0x38 // mov qword [rsp + 56], r9 - QUAD $0x040e3c203a0f4666 // pinsrb xmm15, byte [rsi + r9], 4 - QUAD $0x05263c203a0f4666 // pinsrb xmm15, byte [rsi + r12], 5 - LONG $0x244c8b4c; BYTE $0x40 // mov r9, qword [rsp + 64] - QUAD $0x060e3c203a0f4666 // pinsrb xmm15, byte [rsi + r9], 6 - LONG $0x246c8b4c; BYTE $0x48 // mov r13, qword [rsp + 72] - QUAD $0x072e3c203a0f4666 // pinsrb xmm15, byte [rsi + r13], 7 - LONG $0x245c894c; BYTE $0x20 // mov qword [rsp + 32], r11 - QUAD $0x081e3c203a0f4666 // pinsrb xmm15, byte [rsi + r11], 8 - QUAD $0x09363c203a0f4666 // pinsrb xmm15, byte [rsi + r14], 9 - QUAD $0x0a163c203a0f4666 // pinsrb xmm15, byte [rsi + r10], 10 - QUAD $0x0b3e3c203a0f4666 // pinsrb xmm15, byte [rsi + r15], 11 - QUAD $0x0c1e3c203a0f4466 // pinsrb xmm15, byte [rsi + rbx], 12 - LONG $0x24548b48; BYTE $0x08 // mov rdx, qword [rsp + 8] + LONG $0x246c8b4c; BYTE $0x40 // mov r13, qword [rsp + 64] + QUAD $0x042e3c203a0f4666 // pinsrb xmm15, byte [rsi + r13], 4 + WORD $0x894c; BYTE $0xdf // mov rdi, r11 + QUAD $0x051e3c203a0f4666 // pinsrb xmm15, byte [rsi + r11], 5 + LONG $0x247c8b4c; BYTE $0x50 // mov r15, qword [rsp + 80] + QUAD $0x063e3c203a0f4666 // pinsrb xmm15, byte [rsi + r15], 6 + QUAD $0x070e3c203a0f4666 // pinsrb xmm15, byte [rsi + r9], 7 + QUAD $0x08363c203a0f4666 // pinsrb xmm15, byte [rsi + r14], 8 + QUAD $0x09163c203a0f4666 // pinsrb xmm15, byte [rsi + r10], 9 + QUAD $0x0a063c203a0f4666 // pinsrb xmm15, byte [rsi + r8], 10 + QUAD $0x0b1e3c203a0f4466 // pinsrb xmm15, byte [rsi + rbx], 11 + QUAD $0x0c0e3c203a0f4466 // pinsrb xmm15, byte [rsi + rcx], 12 + LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] QUAD $0x0d163c203a0f4466 // pinsrb xmm15, byte [rsi + rdx], 13 - QUAD $0x0e063c203a0f4466 // pinsrb xmm15, byte [rsi + rax], 14 - QUAD $0x0f0e3c203a0f4466 // pinsrb xmm15, byte [rsi + rcx], 15 - LONG $0x245c8b4c; BYTE $0x28 // mov r11, qword [rsp + 40] + LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] + QUAD $0x0e163c203a0f4466 // pinsrb xmm15, byte [rsi + rdx], 14 + QUAD $0x0f063c203a0f4466 // pinsrb xmm15, byte [rsi + rax], 15 + LONG $0x245c8b4c; BYTE $0x20 // mov r11, qword [rsp + 32] QUAD $0x011e6c203a0f4266; BYTE $0x01 // pinsrb xmm5, byte [rsi + r11 + 1], 1 - QUAD $0x01066c203a0f4266; BYTE $0x02 // pinsrb xmm5, byte [rsi + r8 + 1], 2 - WORD $0x894d; BYTE $0xc3 // mov r11, r8 - LONG $0x24448b4c; BYTE $0x78 // mov r8, qword [rsp + 120] - QUAD $0x01066c203a0f4266; BYTE $0x03 // pinsrb xmm5, byte [rsi + r8 + 1], 3 - QUAD $0x04013e6c203a0f66 // pinsrb xmm5, byte [rsi + rdi + 1], 4 - QUAD $0x01266c203a0f4266; BYTE $0x05 // pinsrb xmm5, byte [rsi + r12 + 1], 5 - WORD $0x894c; BYTE $0xe7 // mov rdi, r12 - QUAD $0x010e6c203a0f4266; BYTE $0x06 // pinsrb xmm5, byte [rsi + r9 + 1], 6 - QUAD $0x012e6c203a0f4266; BYTE $0x07 // pinsrb xmm5, byte [rsi + r13 + 1], 7 - WORD $0x894d; BYTE $0xec // mov r12, r13 - LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] - QUAD $0x0801166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 1], 8 - QUAD $0x01366c203a0f4266; BYTE $0x09 // pinsrb xmm5, byte [rsi + r14 + 1], 9 - WORD $0x894d; BYTE $0xf1 // mov r9, r14 - QUAD $0x01166c203a0f4266; BYTE $0x0a // pinsrb xmm5, byte [rsi + r10 + 1], 10 - QUAD $0x013e6c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rsi + r15 + 1], 11 - QUAD $0x0c011e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 1], 12 - WORD $0x8949; BYTE $0xdd // mov r13, rbx - QUAD $0x000000c0249c8948 // mov qword [rsp + 192], rbx - LONG $0x247c8b4c; BYTE $0x08 // mov r15, qword [rsp + 8] - QUAD $0x013e6c203a0f4266; BYTE $0x0d // pinsrb xmm5, byte [rsi + r15 + 1], 13 - QUAD $0x0e01066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 1], 14 - QUAD $0x0f010e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 1], 15 - QUAD $0x00a0248c6f0f4466; WORD $0x0000 // movdqa xmm9, oword [rsp + 160] + QUAD $0x01266c203a0f4266; BYTE $0x02 // pinsrb xmm5, byte [rsi + r12 + 1], 2 + LONG $0x245c8b4c; BYTE $0x68 // mov r11, qword [rsp + 104] + QUAD $0x011e6c203a0f4266; BYTE $0x03 // pinsrb xmm5, byte [rsi + r11 + 1], 3 + QUAD $0x012e6c203a0f4266; BYTE $0x04 // pinsrb xmm5, byte [rsi + r13 + 1], 4 + QUAD $0x05013e6c203a0f66 // pinsrb xmm5, byte [rsi + rdi + 1], 5 + QUAD $0x013e6c203a0f4266; BYTE $0x06 // pinsrb xmm5, byte [rsi + r15 + 1], 6 + QUAD $0x010e6c203a0f4266; BYTE $0x07 // pinsrb xmm5, byte [rsi + r9 + 1], 7 + WORD $0x894d; BYTE $0xcd // mov r13, r9 + QUAD $0x01366c203a0f4266; BYTE $0x08 // pinsrb xmm5, byte [rsi + r14 + 1], 8 + QUAD $0x01166c203a0f4266; BYTE $0x09 // pinsrb xmm5, byte [rsi + r10 + 1], 9 + QUAD $0x01066c203a0f4266; BYTE $0x0a // pinsrb xmm5, byte [rsi + r8 + 1], 10 + QUAD $0x0b011e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 1], 11 + QUAD $0x0c010e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 1], 12 + LONG $0x244c8b48; BYTE $0x10 // mov rcx, qword [rsp + 16] + QUAD $0x0d010e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 1], 13 + QUAD $0x0e01166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 1], 14 + QUAD $0x0f01066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 1], 15 + QUAD $0x0090248c6f0f4466; WORD $0x0000 // movdqa xmm9, oword [rsp + 144] LONG $0x640f4166; BYTE $0xe9 // pcmpgtb xmm5, xmm9 LONG $0xfd6f0f66 // movdqa xmm7, xmm5 QUAD $0x000000a0a56f0f66 // movdqa xmm4, oword 160[rbp] /* [rip + .LCPI7_10] */ LONG $0xfcdb0f66 // pand xmm7, xmm4 LONG $0xfdf80f66 // psubb xmm7, xmm5 - LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] LONG $0x065cb60f; BYTE $0x0f // movzx ebx, byte [rsi + rax + 15] LONG $0x6e0f4466; BYTE $0xf3 // movd xmm14, ebx LONG $0x640f4566; BYTE $0xf9 // pcmpgtb xmm15, xmm9 - LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] - QUAD $0x01021674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 2], 1 - QUAD $0x021e74203a0f4266; BYTE $0x02 // pinsrb xmm6, byte [rsi + r11 + 2], 2 - WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - QUAD $0x020674203a0f4266; BYTE $0x03 // pinsrb xmm6, byte [rsi + r8 + 2], 3 - LONG $0x24748b4c; BYTE $0x38 // mov r14, qword [rsp + 56] - QUAD $0x023674203a0f4266; BYTE $0x04 // pinsrb xmm6, byte [rsi + r14 + 2], 4 - QUAD $0x05023e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 2], 5 + LONG $0x24748b4c; BYTE $0x20 // mov r14, qword [rsp + 32] + QUAD $0x023674203a0f4266; BYTE $0x01 // pinsrb xmm6, byte [rsi + r14 + 2], 1 + WORD $0x894c; BYTE $0xe1 // mov rcx, r12 + QUAD $0x022674203a0f4266; BYTE $0x02 // pinsrb xmm6, byte [rsi + r12 + 2], 2 + WORD $0x894c; BYTE $0xda // mov rdx, r11 + QUAD $0x021e74203a0f4266; BYTE $0x03 // pinsrb xmm6, byte [rsi + r11 + 2], 3 LONG $0x24448b4c; BYTE $0x40 // mov r8, qword [rsp + 64] - QUAD $0x020674203a0f4266; BYTE $0x06 // pinsrb xmm6, byte [rsi + r8 + 2], 6 - QUAD $0x022674203a0f4266; BYTE $0x07 // pinsrb xmm6, byte [rsi + r12 + 2], 7 - LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] - QUAD $0x08021e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 2], 8 - QUAD $0x000000b0248c894c // mov qword [rsp + 176], r9 - QUAD $0x020e74203a0f4266; BYTE $0x09 // pinsrb xmm6, byte [rsi + r9 + 2], 9 - QUAD $0x021674203a0f4266; BYTE $0x0a // pinsrb xmm6, byte [rsi + r10 + 2], 10 + QUAD $0x020674203a0f4266; BYTE $0x04 // pinsrb xmm6, byte [rsi + r8 + 2], 4 + QUAD $0x05023e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 2], 5 LONG $0x24648b4c; BYTE $0x50 // mov r12, qword [rsp + 80] - QUAD $0x022674203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rsi + r12 + 2], 11 - QUAD $0x022e74203a0f4266; BYTE $0x0c // pinsrb xmm6, byte [rsi + r13 + 2], 12 - QUAD $0x023e74203a0f4266; BYTE $0x0d // pinsrb xmm6, byte [rsi + r15 + 2], 13 + QUAD $0x022674203a0f4266; BYTE $0x06 // pinsrb xmm6, byte [rsi + r12 + 2], 6 + QUAD $0x000000c0248c894c // mov qword [rsp + 192], r9 + QUAD $0x020e74203a0f4266; BYTE $0x07 // pinsrb xmm6, byte [rsi + r9 + 2], 7 + QUAD $0x0000008024948b4c // mov r10, qword [rsp + 128] + QUAD $0x021674203a0f4266; BYTE $0x08 // pinsrb xmm6, byte [rsi + r10 + 2], 8 + LONG $0x245c8b4c; BYTE $0x78 // mov r11, qword [rsp + 120] + QUAD $0x021e74203a0f4266; BYTE $0x09 // pinsrb xmm6, byte [rsi + r11 + 2], 9 + LONG $0x247c8b4c; BYTE $0x48 // mov r15, qword [rsp + 72] + QUAD $0x023e74203a0f4266; BYTE $0x0a // pinsrb xmm6, byte [rsi + r15 + 2], 10 + LONG $0x245c8b48; BYTE $0x58 // mov rbx, qword [rsp + 88] + QUAD $0x0b021e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 2], 11 + LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] + QUAD $0x0c021e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 2], 12 LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] + QUAD $0x0d021e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 2], 13 + LONG $0x245c8b48; BYTE $0x18 // mov rbx, qword [rsp + 24] QUAD $0x0e021e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 2], 14 LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] QUAD $0x0f021e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 2], 15 @@ -35748,55 +37136,54 @@ LBB7_85: LONG $0xeb0f4166; BYTE $0xf7 // por xmm6, xmm15 LONG $0x065cb60f; BYTE $0x10 // movzx ebx, byte [rsi + rax + 16] LONG $0x6e0f4466; BYTE $0xfb // movd xmm15, ebx - WORD $0x8948; BYTE $0xd0 // mov rax, rdx - QUAD $0x01031654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 3], 1 - WORD $0x894d; BYTE $0xdd // mov r13, r11 - QUAD $0x031e54203a0f4266; BYTE $0x02 // pinsrb xmm2, byte [rsi + r11 + 3], 2 - WORD $0x8949; BYTE $0xcb // mov r11, rcx - QUAD $0x03030e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 3], 3 - QUAD $0x033654203a0f4266; BYTE $0x04 // pinsrb xmm2, byte [rsi + r14 + 3], 4 + QUAD $0x033654203a0f4266; BYTE $0x01 // pinsrb xmm2, byte [rsi + r14 + 3], 1 + QUAD $0x02030e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 3], 2 + WORD $0x8948; BYTE $0xd3 // mov rbx, rdx + QUAD $0x03031654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 3], 3 + WORD $0x894d; BYTE $0xc1 // mov r9, r8 + QUAD $0x030654203a0f4266; BYTE $0x04 // pinsrb xmm2, byte [rsi + r8 + 3], 4 WORD $0x8948; BYTE $0xfa // mov rdx, rdi - LONG $0x247c8948; BYTE $0x68 // mov qword [rsp + 104], rdi + LONG $0x247c8948; BYTE $0x70 // mov qword [rsp + 112], rdi QUAD $0x05033e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 3], 5 - WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - QUAD $0x030654203a0f4266; BYTE $0x06 // pinsrb xmm2, byte [rsi + r8 + 3], 6 - LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] - QUAD $0x07033e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 3], 7 - LONG $0x24448b4c; BYTE $0x20 // mov r8, qword [rsp + 32] - QUAD $0x030654203a0f4266; BYTE $0x08 // pinsrb xmm2, byte [rsi + r8 + 3], 8 - QUAD $0x030e54203a0f4266; BYTE $0x09 // pinsrb xmm2, byte [rsi + r9 + 3], 9 - QUAD $0x031654203a0f4266; BYTE $0x0a // pinsrb xmm2, byte [rsi + r10 + 3], 10 + WORD $0x894c; BYTE $0xe7 // mov rdi, r12 + QUAD $0x032654203a0f4266; BYTE $0x06 // pinsrb xmm2, byte [rsi + r12 + 3], 6 + QUAD $0x032e54203a0f4266; BYTE $0x07 // pinsrb xmm2, byte [rsi + r13 + 3], 7 + QUAD $0x031654203a0f4266; BYTE $0x08 // pinsrb xmm2, byte [rsi + r10 + 3], 8 + QUAD $0x031e54203a0f4266; BYTE $0x09 // pinsrb xmm2, byte [rsi + r11 + 3], 9 + QUAD $0x033e54203a0f4266; BYTE $0x0a // pinsrb xmm2, byte [rsi + r15 + 3], 10 + LONG $0x24648b4c; BYTE $0x58 // mov r12, qword [rsp + 88] QUAD $0x032654203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rsi + r12 + 3], 11 - QUAD $0x000000c024a48b4c // mov r12, qword [rsp + 192] - QUAD $0x032654203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rsi + r12 + 3], 12 - QUAD $0x033e54203a0f4266; BYTE $0x0d // pinsrb xmm2, byte [rsi + r15 + 3], 13 - LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] - QUAD $0x0e031e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 3], 14 - LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] - QUAD $0x0f031e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 3], 15 - QUAD $0x0104064c203a0f66 // pinsrb xmm1, byte [rsi + rax + 4], 1 - QUAD $0x042e4c203a0f4266; BYTE $0x02 // pinsrb xmm1, byte [rsi + r13 + 4], 2 - LONG $0x246c894c; BYTE $0x60 // mov qword [rsp + 96], r13 - QUAD $0x041e4c203a0f4266; BYTE $0x03 // pinsrb xmm1, byte [rsi + r11 + 4], 3 - QUAD $0x04364c203a0f4266; BYTE $0x04 // pinsrb xmm1, byte [rsi + r14 + 4], 4 + LONG $0x246c8b4c; BYTE $0x38 // mov r13, qword [rsp + 56] + QUAD $0x032e54203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rsi + r13 + 3], 12 + LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] + QUAD $0x0d030654203a0f66 // pinsrb xmm2, byte [rsi + rax + 3], 13 + LONG $0x24448b4c; BYTE $0x18 // mov r8, qword [rsp + 24] + QUAD $0x030654203a0f4266; BYTE $0x0e // pinsrb xmm2, byte [rsi + r8 + 3], 14 + LONG $0x24448b4c; BYTE $0x30 // mov r8, qword [rsp + 48] + QUAD $0x030654203a0f4266; BYTE $0x0f // pinsrb xmm2, byte [rsi + r8 + 3], 15 + QUAD $0x04364c203a0f4266; BYTE $0x01 // pinsrb xmm1, byte [rsi + r14 + 4], 1 + QUAD $0x02040e4c203a0f66 // pinsrb xmm1, byte [rsi + rcx + 4], 2 + QUAD $0x03041e4c203a0f66 // pinsrb xmm1, byte [rsi + rbx + 4], 3 + QUAD $0x040e4c203a0f4266; BYTE $0x04 // pinsrb xmm1, byte [rsi + r9 + 4], 4 QUAD $0x0504164c203a0f66 // pinsrb xmm1, byte [rsi + rdx + 4], 5 - QUAD $0x06040e4c203a0f66 // pinsrb xmm1, byte [rsi + rcx + 4], 6 - QUAD $0x07043e4c203a0f66 // pinsrb xmm1, byte [rsi + rdi + 4], 7 - QUAD $0x04064c203a0f4266; BYTE $0x08 // pinsrb xmm1, byte [rsi + r8 + 4], 8 - QUAD $0x040e4c203a0f4266; BYTE $0x09 // pinsrb xmm1, byte [rsi + r9 + 4], 9 - QUAD $0x04164c203a0f4266; BYTE $0x0a // pinsrb xmm1, byte [rsi + r10 + 4], 10 - LONG $0x2454894c; BYTE $0x70 // mov qword [rsp + 112], r10 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] - QUAD $0x0b04064c203a0f66 // pinsrb xmm1, byte [rsi + rax + 4], 11 - QUAD $0x04264c203a0f4266; BYTE $0x0c // pinsrb xmm1, byte [rsi + r12 + 4], 12 - QUAD $0x043e4c203a0f4266; BYTE $0x0d // pinsrb xmm1, byte [rsi + r15 + 4], 13 - WORD $0x894d; BYTE $0xf8 // mov r8, r15 - LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] - QUAD $0x0e04164c203a0f66 // pinsrb xmm1, byte [rsi + rdx + 4], 14 - QUAD $0x0f041e4c203a0f66 // pinsrb xmm1, byte [rsi + rbx + 4], 15 + QUAD $0x06043e4c203a0f66 // pinsrb xmm1, byte [rsi + rdi + 4], 6 + QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] + QUAD $0x0704064c203a0f66 // pinsrb xmm1, byte [rsi + rax + 4], 7 + QUAD $0x04164c203a0f4266; BYTE $0x08 // pinsrb xmm1, byte [rsi + r10 + 4], 8 + QUAD $0x041e4c203a0f4266; BYTE $0x09 // pinsrb xmm1, byte [rsi + r11 + 4], 9 + QUAD $0x043e4c203a0f4266; BYTE $0x0a // pinsrb xmm1, byte [rsi + r15 + 4], 10 + QUAD $0x04264c203a0f4266; BYTE $0x0b // pinsrb xmm1, byte [rsi + r12 + 4], 11 + QUAD $0x042e4c203a0f4266; BYTE $0x0c // pinsrb xmm1, byte [rsi + r13 + 4], 12 + LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] + QUAD $0x0d04064c203a0f66 // pinsrb xmm1, byte [rsi + rax + 4], 13 + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + QUAD $0x04364c203a0f4266; BYTE $0x0e // pinsrb xmm1, byte [rsi + r14 + 4], 14 + WORD $0x894c; BYTE $0xc2 // mov rdx, r8 + QUAD $0x04064c203a0f4266; BYTE $0x0f // pinsrb xmm1, byte [rsi + r8 + 4], 15 + WORD $0x894d; BYTE $0xc7 // mov r15, r8 LONG $0xf7eb0f66 // por xmm6, xmm7 - LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] - LONG $0x065cb60f; BYTE $0x11 // movzx ebx, byte [rsi + rax + 17] + LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] + LONG $0x165cb60f; BYTE $0x11 // movzx ebx, byte [rsi + rdx + 17] LONG $0xc36e0f66 // movd xmm0, ebx LONG $0x640f4166; BYTE $0xd1 // pcmpgtb xmm2, xmm9 QUAD $0x000000c0ad6f0f66 // movdqa xmm5, oword 192[rbp] /* [rip + .LCPI7_12] */ @@ -35805,90 +37192,92 @@ LBB7_85: QUAD $0x000000d0ad6f0f66 // movdqa xmm5, oword 208[rbp] /* [rip + .LCPI7_13] */ LONG $0xcddb0f66 // pand xmm1, xmm5 LONG $0xcaeb0f66 // por xmm1, xmm2 - LONG $0x065cb60f; BYTE $0x12 // movzx ebx, byte [rsi + rax + 18] + LONG $0x165cb60f; BYTE $0x12 // movzx ebx, byte [rsi + rdx + 18] LONG $0xeb6e0f66 // movd xmm5, ebx - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] - QUAD $0x050e44203a0f4466; BYTE $0x01 // pinsrb xmm8, byte [rsi + rcx + 5], 1 - QUAD $0x052e44203a0f4666; BYTE $0x02 // pinsrb xmm8, byte [rsi + r13 + 5], 2 - QUAD $0x051e44203a0f4666; BYTE $0x03 // pinsrb xmm8, byte [rsi + r11 + 5], 3 - QUAD $0x053644203a0f4666; BYTE $0x04 // pinsrb xmm8, byte [rsi + r14 + 5], 4 + LONG $0x24448b4c; BYTE $0x20 // mov r8, qword [rsp + 32] + QUAD $0x050644203a0f4666; BYTE $0x01 // pinsrb xmm8, byte [rsi + r8 + 5], 1 + QUAD $0x050e44203a0f4466; BYTE $0x02 // pinsrb xmm8, byte [rsi + rcx + 5], 2 LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] - QUAD $0x053e44203a0f4466; BYTE $0x05 // pinsrb xmm8, byte [rsi + rdi + 5], 5 - LONG $0x245c8b48; BYTE $0x40 // mov rbx, qword [rsp + 64] - QUAD $0x051e44203a0f4466; BYTE $0x06 // pinsrb xmm8, byte [rsi + rbx + 5], 6 - LONG $0x244c8b4c; BYTE $0x48 // mov r9, qword [rsp + 72] - QUAD $0x050e44203a0f4666; BYTE $0x07 // pinsrb xmm8, byte [rsi + r9 + 5], 7 - LONG $0x24648b4c; BYTE $0x20 // mov r12, qword [rsp + 32] + QUAD $0x053e44203a0f4466; BYTE $0x03 // pinsrb xmm8, byte [rsi + rdi + 5], 3 + LONG $0x244c8b4c; BYTE $0x40 // mov r9, qword [rsp + 64] + QUAD $0x050e44203a0f4666; BYTE $0x04 // pinsrb xmm8, byte [rsi + r9 + 5], 4 + LONG $0x24548b48; BYTE $0x70 // mov rdx, qword [rsp + 112] + QUAD $0x051644203a0f4466; BYTE $0x05 // pinsrb xmm8, byte [rsi + rdx + 5], 5 + LONG $0x24548b4c; BYTE $0x50 // mov r10, qword [rsp + 80] + QUAD $0x051644203a0f4666; BYTE $0x06 // pinsrb xmm8, byte [rsi + r10 + 5], 6 + QUAD $0x000000c0249c8b4c // mov r11, qword [rsp + 192] + QUAD $0x051e44203a0f4666; BYTE $0x07 // pinsrb xmm8, byte [rsi + r11 + 5], 7 + QUAD $0x0000008024a48b4c // mov r12, qword [rsp + 128] QUAD $0x052644203a0f4666; BYTE $0x08 // pinsrb xmm8, byte [rsi + r12 + 5], 8 - QUAD $0x000000b024ac8b4c // mov r13, qword [rsp + 176] + LONG $0x246c8b4c; BYTE $0x78 // mov r13, qword [rsp + 120] QUAD $0x052e44203a0f4666; BYTE $0x09 // pinsrb xmm8, byte [rsi + r13 + 5], 9 - QUAD $0x051644203a0f4666; BYTE $0x0a // pinsrb xmm8, byte [rsi + r10 + 5], 10 - LONG $0x247c8b4c; BYTE $0x50 // mov r15, qword [rsp + 80] - QUAD $0x053e44203a0f4666; BYTE $0x0b // pinsrb xmm8, byte [rsi + r15 + 5], 11 - QUAD $0x000000c0249c8b48 // mov rbx, qword [rsp + 192] + LONG $0x245c8b48; BYTE $0x48 // mov rbx, qword [rsp + 72] + QUAD $0x051e44203a0f4466; BYTE $0x0a // pinsrb xmm8, byte [rsi + rbx + 5], 10 + LONG $0x245c8b48; BYTE $0x58 // mov rbx, qword [rsp + 88] + QUAD $0x051e44203a0f4466; BYTE $0x0b // pinsrb xmm8, byte [rsi + rbx + 5], 11 + LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] QUAD $0x051e44203a0f4466; BYTE $0x0c // pinsrb xmm8, byte [rsi + rbx + 5], 12 - QUAD $0x050644203a0f4666; BYTE $0x0d // pinsrb xmm8, byte [rsi + r8 + 5], 13 - QUAD $0x051644203a0f4466; BYTE $0x0e // pinsrb xmm8, byte [rsi + rdx + 5], 14 - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - QUAD $0x053644203a0f4666; BYTE $0x0f // pinsrb xmm8, byte [rsi + r14 + 5], 15 + QUAD $0x050644203a0f4466; BYTE $0x0d // pinsrb xmm8, byte [rsi + rax + 5], 13 + QUAD $0x053644203a0f4666; BYTE $0x0e // pinsrb xmm8, byte [rsi + r14 + 5], 14 + WORD $0x894c; BYTE $0xf8 // mov rax, r15 + QUAD $0x053e44203a0f4666; BYTE $0x0f // pinsrb xmm8, byte [rsi + r15 + 5], 15 LONG $0x640f4566; BYTE $0xc1 // pcmpgtb xmm8, xmm9 QUAD $0x000000e0956f0f66 // movdqa xmm2, oword 224[rbp] /* [rip + .LCPI7_14] */ LONG $0xdb0f4466; BYTE $0xc2 // pand xmm8, xmm2 LONG $0xeb0f4466; BYTE $0xc1 // por xmm8, xmm1 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] LONG $0x065cb60f; BYTE $0x13 // movzx ebx, byte [rsi + rax + 19] LONG $0xfb6e0f66 // movd xmm7, ebx LONG $0xeb0f4466; BYTE $0xc6 // por xmm8, xmm6 LONG $0x065cb60f; BYTE $0x14 // movzx ebx, byte [rsi + rax + 20] LONG $0xf36e0f66 // movd xmm6, ebx - QUAD $0x01060e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 6], 1 - WORD $0x8949; BYTE $0xca // mov r10, rcx - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] - QUAD $0x0206065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 6], 2 - QUAD $0x061e5c203a0f4266; BYTE $0x03 // pinsrb xmm3, byte [rsi + r11 + 6], 3 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] - QUAD $0x0406065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 6], 4 - WORD $0x8949; BYTE $0xf8 // mov r8, rdi - QUAD $0x05063e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 6], 5 - LONG $0x244c8b48; BYTE $0x40 // mov rcx, qword [rsp + 64] - QUAD $0x06060e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 6], 6 - QUAD $0x060e5c203a0f4266; BYTE $0x07 // pinsrb xmm3, byte [rsi + r9 + 6], 7 + QUAD $0x06065c203a0f4266; BYTE $0x01 // pinsrb xmm3, byte [rsi + r8 + 6], 1 + QUAD $0x02060e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 6], 2 + WORD $0x8949; BYTE $0xfe // mov r14, rdi + QUAD $0x03063e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 6], 3 + WORD $0x894d; BYTE $0xcf // mov r15, r9 + QUAD $0x060e5c203a0f4266; BYTE $0x04 // pinsrb xmm3, byte [rsi + r9 + 6], 4 + QUAD $0x0506165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 6], 5 + WORD $0x894c; BYTE $0xd7 // mov rdi, r10 + QUAD $0x06165c203a0f4266; BYTE $0x06 // pinsrb xmm3, byte [rsi + r10 + 6], 6 + WORD $0x894d; BYTE $0xd9 // mov r9, r11 + QUAD $0x061e5c203a0f4266; BYTE $0x07 // pinsrb xmm3, byte [rsi + r11 + 6], 7 + WORD $0x894d; BYTE $0xe2 // mov r10, r12 QUAD $0x06265c203a0f4266; BYTE $0x08 // pinsrb xmm3, byte [rsi + r12 + 6], 8 - WORD $0x894d; BYTE $0xe1 // mov r9, r12 - WORD $0x894c; BYTE $0xe8 // mov rax, r13 + WORD $0x894c; BYTE $0xeb // mov rbx, r13 QUAD $0x062e5c203a0f4266; BYTE $0x09 // pinsrb xmm3, byte [rsi + r13 + 6], 9 - LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] - QUAD $0x0a063e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 6], 10 - WORD $0x894c; BYTE $0xfb // mov rbx, r15 - QUAD $0x063e5c203a0f4266; BYTE $0x0b // pinsrb xmm3, byte [rsi + r15 + 6], 11 - QUAD $0x000000c024a48b4c // mov r12, qword [rsp + 192] - QUAD $0x06265c203a0f4266; BYTE $0x0c // pinsrb xmm3, byte [rsi + r12 + 6], 12 - LONG $0x24548b48; BYTE $0x08 // mov rdx, qword [rsp + 8] - QUAD $0x0d06165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 6], 13 - LONG $0x247c8b4c; BYTE $0x10 // mov r15, qword [rsp + 16] - QUAD $0x063e5c203a0f4266; BYTE $0x0e // pinsrb xmm3, byte [rsi + r15 + 6], 14 - QUAD $0x06365c203a0f4266; BYTE $0x0f // pinsrb xmm3, byte [rsi + r14 + 6], 15 - QUAD $0x0000d024946f0f66; BYTE $0x00 // movdqa xmm2, oword [rsp + 208] - QUAD $0x071654203a0f4266; BYTE $0x01 // pinsrb xmm2, byte [rsi + r10 + 7], 1 - LONG $0x246c8b4c; BYTE $0x60 // mov r13, qword [rsp + 96] - QUAD $0x072e54203a0f4266; BYTE $0x02 // pinsrb xmm2, byte [rsi + r13 + 7], 2 - QUAD $0x071e54203a0f4266; BYTE $0x03 // pinsrb xmm2, byte [rsi + r11 + 7], 3 - LONG $0x24548b4c; BYTE $0x38 // mov r10, qword [rsp + 56] - QUAD $0x071654203a0f4266; BYTE $0x04 // pinsrb xmm2, byte [rsi + r10 + 7], 4 - QUAD $0x070654203a0f4266; BYTE $0x05 // pinsrb xmm2, byte [rsi + r8 + 7], 5 - WORD $0x894c; BYTE $0xc2 // mov rdx, r8 - QUAD $0x06070e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 7], 6 - LONG $0x244c8b48; BYTE $0x48 // mov rcx, qword [rsp + 72] - QUAD $0x07070e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 7], 7 - QUAD $0x070e54203a0f4266; BYTE $0x08 // pinsrb xmm2, byte [rsi + r9 + 7], 8 - QUAD $0x09070654203a0f66 // pinsrb xmm2, byte [rsi + rax + 7], 9 - QUAD $0x0a073e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 7], 10 - QUAD $0x0b071e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 7], 11 - QUAD $0x072654203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rsi + r12 + 7], 12 - LONG $0x245c8b4c; BYTE $0x08 // mov r11, qword [rsp + 8] + LONG $0x24548b48; BYTE $0x48 // mov rdx, qword [rsp + 72] + QUAD $0x0a06165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 6], 10 + LONG $0x24648b4c; BYTE $0x58 // mov r12, qword [rsp + 88] + QUAD $0x06265c203a0f4266; BYTE $0x0b // pinsrb xmm3, byte [rsi + r12 + 6], 11 + LONG $0x246c8b4c; BYTE $0x38 // mov r13, qword [rsp + 56] + QUAD $0x062e5c203a0f4266; BYTE $0x0c // pinsrb xmm3, byte [rsi + r13 + 6], 12 + LONG $0x245c8b4c; BYTE $0x10 // mov r11, qword [rsp + 16] + QUAD $0x061e5c203a0f4266; BYTE $0x0d // pinsrb xmm3, byte [rsi + r11 + 6], 13 + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + QUAD $0x0e06065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 6], 14 + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + QUAD $0x0f06065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 6], 15 + QUAD $0x0000a024946f0f66; BYTE $0x00 // movdqa xmm2, oword [rsp + 160] + QUAD $0x070654203a0f4266; BYTE $0x01 // pinsrb xmm2, byte [rsi + r8 + 7], 1 + QUAD $0x02070e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 7], 2 + QUAD $0x073654203a0f4266; BYTE $0x03 // pinsrb xmm2, byte [rsi + r14 + 7], 3 + QUAD $0x073e54203a0f4266; BYTE $0x04 // pinsrb xmm2, byte [rsi + r15 + 7], 4 + WORD $0x894d; BYTE $0xfe // mov r14, r15 + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] + QUAD $0x05070654203a0f66 // pinsrb xmm2, byte [rsi + rax + 7], 5 + QUAD $0x06073e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 7], 6 + QUAD $0x070e54203a0f4266; BYTE $0x07 // pinsrb xmm2, byte [rsi + r9 + 7], 7 + QUAD $0x071654203a0f4266; BYTE $0x08 // pinsrb xmm2, byte [rsi + r10 + 7], 8 + QUAD $0x09071e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 7], 9 + QUAD $0x0a071654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 7], 10 + QUAD $0x072654203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rsi + r12 + 7], 11 + QUAD $0x072e54203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rsi + r13 + 7], 12 QUAD $0x071e54203a0f4266; BYTE $0x0d // pinsrb xmm2, byte [rsi + r11 + 7], 13 - QUAD $0x073e54203a0f4266; BYTE $0x0e // pinsrb xmm2, byte [rsi + r15 + 7], 14 - WORD $0x894c; BYTE $0xf7 // mov rdi, r14 - QUAD $0x073654203a0f4266; BYTE $0x0f // pinsrb xmm2, byte [rsi + r14 + 7], 15 + LONG $0x247c8b48; BYTE $0x18 // mov rdi, qword [rsp + 24] + QUAD $0x0e073e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 7], 14 + LONG $0x24548b48; BYTE $0x30 // mov rdx, qword [rsp + 48] + QUAD $0x0f071654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 7], 15 LONG $0x640f4166; BYTE $0xd9 // pcmpgtb xmm3, xmm9 QUAD $0x000000f08d6f0f66 // movdqa xmm1, oword 240[rbp] /* [rip + .LCPI7_15] */ LONG $0xd9db0f66 // pand xmm3, xmm1 @@ -35898,326 +37287,322 @@ LBB7_85: LONG $0xd1db0f66 // pand xmm2, xmm1 LONG $0xd3eb0f66 // por xmm2, xmm3 LONG $0xca6f0f66 // movdqa xmm1, xmm2 - LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] - LONG $0x065cb60f; BYTE $0x15 // movzx ebx, byte [rsi + rax + 21] + LONG $0x24448b4c; BYTE $0x28 // mov r8, qword [rsp + 40] + LONG $0x5cb60f42; WORD $0x1506 // movzx ebx, byte [rsi + r8 + 21] LONG $0xd36e0f66 // movd xmm2, ebx - LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] - QUAD $0x090e54203a0f4466; BYTE $0x01 // pinsrb xmm10, byte [rsi + rcx + 9], 1 - QUAD $0x092e54203a0f4666; BYTE $0x02 // pinsrb xmm10, byte [rsi + r13 + 9], 2 - LONG $0x24448b4c; BYTE $0x78 // mov r8, qword [rsp + 120] - QUAD $0x090654203a0f4666; BYTE $0x03 // pinsrb xmm10, byte [rsi + r8 + 9], 3 - QUAD $0x091654203a0f4666; BYTE $0x04 // pinsrb xmm10, byte [rsi + r10 + 9], 4 - QUAD $0x091654203a0f4466; BYTE $0x05 // pinsrb xmm10, byte [rsi + rdx + 9], 5 - WORD $0x8949; BYTE $0xd6 // mov r14, rdx - LONG $0x24548b48; BYTE $0x40 // mov rdx, qword [rsp + 64] - QUAD $0x091654203a0f4466; BYTE $0x06 // pinsrb xmm10, byte [rsi + rdx + 9], 6 - LONG $0x244c8b4c; BYTE $0x48 // mov r9, qword [rsp + 72] - QUAD $0x090e54203a0f4666; BYTE $0x07 // pinsrb xmm10, byte [rsi + r9 + 9], 7 - LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] - QUAD $0x091e54203a0f4466; BYTE $0x08 // pinsrb xmm10, byte [rsi + rbx + 9], 8 - QUAD $0x000000b0249c8b48 // mov rbx, qword [rsp + 176] - QUAD $0x091e54203a0f4466; BYTE $0x09 // pinsrb xmm10, byte [rsi + rbx + 9], 9 - LONG $0x247c8b4c; BYTE $0x70 // mov r15, qword [rsp + 112] - QUAD $0x093e54203a0f4666; BYTE $0x0a // pinsrb xmm10, byte [rsi + r15 + 9], 10 + LONG $0x244c8b4c; BYTE $0x20 // mov r9, qword [rsp + 32] + QUAD $0x090e54203a0f4666; BYTE $0x01 // pinsrb xmm10, byte [rsi + r9 + 9], 1 + QUAD $0x090e54203a0f4466; BYTE $0x02 // pinsrb xmm10, byte [rsi + rcx + 9], 2 + LONG $0x247c8b4c; BYTE $0x68 // mov r15, qword [rsp + 104] + QUAD $0x093e54203a0f4666; BYTE $0x03 // pinsrb xmm10, byte [rsi + r15 + 9], 3 + QUAD $0x093654203a0f4666; BYTE $0x04 // pinsrb xmm10, byte [rsi + r14 + 9], 4 + LONG $0x245c8b48; BYTE $0x70 // mov rbx, qword [rsp + 112] + QUAD $0x091e54203a0f4466; BYTE $0x05 // pinsrb xmm10, byte [rsi + rbx + 9], 5 LONG $0x245c8b48; BYTE $0x50 // mov rbx, qword [rsp + 80] - QUAD $0x091e54203a0f4466; BYTE $0x0b // pinsrb xmm10, byte [rsi + rbx + 9], 11 - QUAD $0x092654203a0f4666; BYTE $0x0c // pinsrb xmm10, byte [rsi + r12 + 9], 12 - QUAD $0x091e54203a0f4666; BYTE $0x0d // pinsrb xmm10, byte [rsi + r11 + 9], 13 - LONG $0x24548b4c; BYTE $0x10 // mov r10, qword [rsp + 16] - QUAD $0x091654203a0f4666; BYTE $0x0e // pinsrb xmm10, byte [rsi + r10 + 9], 14 - QUAD $0x093e54203a0f4466; BYTE $0x0f // pinsrb xmm10, byte [rsi + rdi + 9], 15 + QUAD $0x091e54203a0f4466; BYTE $0x06 // pinsrb xmm10, byte [rsi + rbx + 9], 6 + QUAD $0x000000c024948b4c // mov r10, qword [rsp + 192] + QUAD $0x091654203a0f4666; BYTE $0x07 // pinsrb xmm10, byte [rsi + r10 + 9], 7 + QUAD $0x00000080249c8b4c // mov r11, qword [rsp + 128] + QUAD $0x091e54203a0f4666; BYTE $0x08 // pinsrb xmm10, byte [rsi + r11 + 9], 8 + LONG $0x245c8b48; BYTE $0x78 // mov rbx, qword [rsp + 120] + QUAD $0x091e54203a0f4466; BYTE $0x09 // pinsrb xmm10, byte [rsi + rbx + 9], 9 + LONG $0x245c8b48; BYTE $0x48 // mov rbx, qword [rsp + 72] + QUAD $0x091e54203a0f4466; BYTE $0x0a // pinsrb xmm10, byte [rsi + rbx + 9], 10 + QUAD $0x092654203a0f4666; BYTE $0x0b // pinsrb xmm10, byte [rsi + r12 + 9], 11 + QUAD $0x092e54203a0f4666; BYTE $0x0c // pinsrb xmm10, byte [rsi + r13 + 9], 12 + LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] + QUAD $0x091e54203a0f4466; BYTE $0x0d // pinsrb xmm10, byte [rsi + rbx + 9], 13 + QUAD $0x093e54203a0f4466; BYTE $0x0e // pinsrb xmm10, byte [rsi + rdi + 9], 14 + QUAD $0x091654203a0f4466; BYTE $0x0f // pinsrb xmm10, byte [rsi + rdx + 9], 15 LONG $0xeb0f4166; BYTE $0xc8 // por xmm1, xmm8 - QUAD $0x0000d0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 208], xmm1 + QUAD $0x0000a0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 160], xmm1 LONG $0x640f4566; BYTE $0xd1 // pcmpgtb xmm10, xmm9 LONG $0x6f0f4166; BYTE $0xca // movdqa xmm1, xmm10 LONG $0x6f0f4466; BYTE $0xc4 // movdqa xmm8, xmm4 LONG $0xccdb0f66 // pand xmm1, xmm4 LONG $0xf80f4166; BYTE $0xca // psubb xmm1, xmm10 - LONG $0x065cb60f; BYTE $0x16 // movzx ebx, byte [rsi + rax + 22] + LONG $0x5cb60f42; WORD $0x1606 // movzx ebx, byte [rsi + r8 + 22] LONG $0xdb6e0f66 // movd xmm3, ebx - QUAD $0x00011024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 272] - QUAD $0x01080e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 8], 1 - WORD $0x8949; BYTE $0xcb // mov r11, rcx - QUAD $0x082e64203a0f4266; BYTE $0x02 // pinsrb xmm4, byte [rsi + r13 + 8], 2 - QUAD $0x080664203a0f4266; BYTE $0x03 // pinsrb xmm4, byte [rsi + r8 + 8], 3 - LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] - QUAD $0x04083e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 8], 4 - QUAD $0x083664203a0f4266; BYTE $0x05 // pinsrb xmm4, byte [rsi + r14 + 8], 5 - QUAD $0x06081664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 8], 6 - WORD $0x894c; BYTE $0xca // mov rdx, r9 - QUAD $0x080e64203a0f4266; BYTE $0x07 // pinsrb xmm4, byte [rsi + r9 + 8], 7 - LONG $0x24748b4c; BYTE $0x20 // mov r14, qword [rsp + 32] - QUAD $0x083664203a0f4266; BYTE $0x08 // pinsrb xmm4, byte [rsi + r14 + 8], 8 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] - QUAD $0x09080664203a0f66 // pinsrb xmm4, byte [rsi + rax + 8], 9 - WORD $0x894c; BYTE $0xfb // mov rbx, r15 - QUAD $0x083e64203a0f4266; BYTE $0x0a // pinsrb xmm4, byte [rsi + r15 + 8], 10 - LONG $0x247c8b4c; BYTE $0x50 // mov r15, qword [rsp + 80] - QUAD $0x083e64203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r15 + 8], 11 - QUAD $0x082664203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r12 + 8], 12 - LONG $0x244c8b48; BYTE $0x08 // mov rcx, qword [rsp + 8] - QUAD $0x0d080e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 8], 13 - QUAD $0x081664203a0f4266; BYTE $0x0e // pinsrb xmm4, byte [rsi + r10 + 8], 14 - LONG $0x244c8b4c; BYTE $0x30 // mov r9, qword [rsp + 48] - QUAD $0x080e64203a0f4266; BYTE $0x0f // pinsrb xmm4, byte [rsi + r9 + 8], 15 + QUAD $0x00013024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 304] + WORD $0x894c; BYTE $0xcb // mov rbx, r9 + QUAD $0x080e64203a0f4266; BYTE $0x01 // pinsrb xmm4, byte [rsi + r9 + 8], 1 + QUAD $0x02080e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 8], 2 + WORD $0x8949; BYTE $0xcc // mov r12, rcx + QUAD $0x083e64203a0f4266; BYTE $0x03 // pinsrb xmm4, byte [rsi + r15 + 8], 3 + WORD $0x894d; BYTE $0xf5 // mov r13, r14 + QUAD $0x083664203a0f4266; BYTE $0x04 // pinsrb xmm4, byte [rsi + r14 + 8], 4 + LONG $0x24548b48; BYTE $0x70 // mov rdx, qword [rsp + 112] + QUAD $0x05081664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 8], 5 + LONG $0x247c8b48; BYTE $0x50 // mov rdi, qword [rsp + 80] + QUAD $0x06083e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 8], 6 + WORD $0x894d; BYTE $0xd1 // mov r9, r10 + QUAD $0x081664203a0f4266; BYTE $0x07 // pinsrb xmm4, byte [rsi + r10 + 8], 7 + WORD $0x894d; BYTE $0xda // mov r10, r11 + QUAD $0x081e64203a0f4266; BYTE $0x08 // pinsrb xmm4, byte [rsi + r11 + 8], 8 + LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] + QUAD $0x09080e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 8], 9 + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0a080664203a0f66 // pinsrb xmm4, byte [rsi + rax + 8], 10 + LONG $0x24748b4c; BYTE $0x58 // mov r14, qword [rsp + 88] + QUAD $0x083664203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r14 + 8], 11 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x0c080664203a0f66 // pinsrb xmm4, byte [rsi + rax + 8], 12 + LONG $0x245c8b4c; BYTE $0x10 // mov r11, qword [rsp + 16] + QUAD $0x081e64203a0f4266; BYTE $0x0d // pinsrb xmm4, byte [rsi + r11 + 8], 13 + LONG $0x24448b4c; BYTE $0x18 // mov r8, qword [rsp + 24] + QUAD $0x080664203a0f4266; BYTE $0x0e // pinsrb xmm4, byte [rsi + r8 + 8], 14 + LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] + QUAD $0x0f080664203a0f66 // pinsrb xmm4, byte [rsi + rax + 8], 15 LONG $0x640f4166; BYTE $0xe1 // pcmpgtb xmm4, xmm9 LONG $0xdb0f4166; BYTE $0xe0 // pand xmm4, xmm8 - QUAD $0x009024946f0f4466; WORD $0x0000 // movdqa xmm10, oword [rsp + 144] - QUAD $0x0a1e54203a0f4666; BYTE $0x01 // pinsrb xmm10, byte [rsi + r11 + 10], 1 - QUAD $0x0a2e54203a0f4666; BYTE $0x02 // pinsrb xmm10, byte [rsi + r13 + 10], 2 - QUAD $0x0a0654203a0f4666; BYTE $0x03 // pinsrb xmm10, byte [rsi + r8 + 10], 3 - QUAD $0x0a3e54203a0f4466; BYTE $0x04 // pinsrb xmm10, byte [rsi + rdi + 10], 4 - LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] - QUAD $0x0a3e54203a0f4466; BYTE $0x05 // pinsrb xmm10, byte [rsi + rdi + 10], 5 - LONG $0x24448b4c; BYTE $0x40 // mov r8, qword [rsp + 64] - QUAD $0x0a0654203a0f4666; BYTE $0x06 // pinsrb xmm10, byte [rsi + r8 + 10], 6 - QUAD $0x0a1654203a0f4466; BYTE $0x07 // pinsrb xmm10, byte [rsi + rdx + 10], 7 - WORD $0x894d; BYTE $0xf3 // mov r11, r14 - QUAD $0x0a3654203a0f4666; BYTE $0x08 // pinsrb xmm10, byte [rsi + r14 + 10], 8 - QUAD $0x0a0654203a0f4466; BYTE $0x09 // pinsrb xmm10, byte [rsi + rax + 10], 9 - QUAD $0x0a1e54203a0f4466; BYTE $0x0a // pinsrb xmm10, byte [rsi + rbx + 10], 10 - QUAD $0x0a3e54203a0f4666; BYTE $0x0b // pinsrb xmm10, byte [rsi + r15 + 10], 11 - QUAD $0x0a2654203a0f4666; BYTE $0x0c // pinsrb xmm10, byte [rsi + r12 + 10], 12 - QUAD $0x0a0e54203a0f4466; BYTE $0x0d // pinsrb xmm10, byte [rsi + rcx + 10], 13 - QUAD $0x0a1654203a0f4666; BYTE $0x0e // pinsrb xmm10, byte [rsi + r10 + 10], 14 - QUAD $0x0a0e54203a0f4666; BYTE $0x0f // pinsrb xmm10, byte [rsi + r9 + 10], 15 + QUAD $0x00b024946f0f4466; WORD $0x0000 // movdqa xmm10, oword [rsp + 176] + QUAD $0x0a1e54203a0f4466; BYTE $0x01 // pinsrb xmm10, byte [rsi + rbx + 10], 1 + QUAD $0x0a2654203a0f4666; BYTE $0x02 // pinsrb xmm10, byte [rsi + r12 + 10], 2 + QUAD $0x0a3e54203a0f4666; BYTE $0x03 // pinsrb xmm10, byte [rsi + r15 + 10], 3 + QUAD $0x0a2e54203a0f4666; BYTE $0x04 // pinsrb xmm10, byte [rsi + r13 + 10], 4 + QUAD $0x0a1654203a0f4466; BYTE $0x05 // pinsrb xmm10, byte [rsi + rdx + 10], 5 + QUAD $0x0a3e54203a0f4466; BYTE $0x06 // pinsrb xmm10, byte [rsi + rdi + 10], 6 + QUAD $0x0a0e54203a0f4666; BYTE $0x07 // pinsrb xmm10, byte [rsi + r9 + 10], 7 + QUAD $0x0a1654203a0f4666; BYTE $0x08 // pinsrb xmm10, byte [rsi + r10 + 10], 8 + QUAD $0x0a0e54203a0f4466; BYTE $0x09 // pinsrb xmm10, byte [rsi + rcx + 10], 9 + LONG $0x247c8b4c; BYTE $0x48 // mov r15, qword [rsp + 72] + QUAD $0x0a3e54203a0f4666; BYTE $0x0a // pinsrb xmm10, byte [rsi + r15 + 10], 10 + QUAD $0x0a3654203a0f4666; BYTE $0x0b // pinsrb xmm10, byte [rsi + r14 + 10], 11 + LONG $0x246c8b4c; BYTE $0x38 // mov r13, qword [rsp + 56] + QUAD $0x0a2e54203a0f4666; BYTE $0x0c // pinsrb xmm10, byte [rsi + r13 + 10], 12 + QUAD $0x0a1e54203a0f4666; BYTE $0x0d // pinsrb xmm10, byte [rsi + r11 + 10], 13 + QUAD $0x0a0654203a0f4666; BYTE $0x0e // pinsrb xmm10, byte [rsi + r8 + 10], 14 + WORD $0x894d; BYTE $0xc3 // mov r11, r8 + QUAD $0x0a0654203a0f4466; BYTE $0x0f // pinsrb xmm10, byte [rsi + rax + 10], 15 LONG $0x640f4566; BYTE $0xd1 // pcmpgtb xmm10, xmm9 QUAD $0x0000b095db0f4466; BYTE $0x00 // pand xmm10, oword 176[rbp] /* [rip + .LCPI7_11] */ LONG $0xeb0f4466; BYTE $0xd4 // por xmm10, xmm4 - LONG $0x244c8b48; BYTE $0x18 // mov rcx, qword [rsp + 24] - LONG $0x0e5cb60f; BYTE $0x17 // movzx ebx, byte [rsi + rcx + 23] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + LONG $0x065cb60f; BYTE $0x17 // movzx ebx, byte [rsi + rax + 23] LONG $0x6e0f4466; BYTE $0xc3 // movd xmm8, ebx LONG $0xeb0f4466; BYTE $0xd1 // por xmm10, xmm1 - QUAD $0x009024947f0f4466; WORD $0x0000 // movdqa oword [rsp + 144], xmm10 - LONG $0x0e5cb60f; BYTE $0x18 // movzx ebx, byte [rsi + rcx + 24] + QUAD $0x00b024947f0f4466; WORD $0x0000 // movdqa oword [rsp + 176], xmm10 + LONG $0x065cb60f; BYTE $0x18 // movzx ebx, byte [rsi + rax + 24] LONG $0x6e0f4466; BYTE $0xd3 // movd xmm10, ebx - LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] - QUAD $0x0b165c203a0f4466; BYTE $0x01 // pinsrb xmm11, byte [rsi + rdx + 11], 1 - QUAD $0x0b2e5c203a0f4666; BYTE $0x02 // pinsrb xmm11, byte [rsi + r13 + 11], 2 - WORD $0x894d; BYTE $0xee // mov r14, r13 - LONG $0x244c8b48; BYTE $0x78 // mov rcx, qword [rsp + 120] - QUAD $0x0b0e5c203a0f4466; BYTE $0x03 // pinsrb xmm11, byte [rsi + rcx + 11], 3 - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] - QUAD $0x0b0e5c203a0f4466; BYTE $0x04 // pinsrb xmm11, byte [rsi + rcx + 11], 4 - WORD $0x8949; BYTE $0xcd // mov r13, rcx - QUAD $0x0b3e5c203a0f4466; BYTE $0x05 // pinsrb xmm11, byte [rsi + rdi + 11], 5 - WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - QUAD $0x0b065c203a0f4666; BYTE $0x06 // pinsrb xmm11, byte [rsi + r8 + 11], 6 - LONG $0x247c8b48; BYTE $0x48 // mov rdi, qword [rsp + 72] - QUAD $0x0b3e5c203a0f4466; BYTE $0x07 // pinsrb xmm11, byte [rsi + rdi + 11], 7 - WORD $0x894d; BYTE $0xd8 // mov r8, r11 - QUAD $0x0b1e5c203a0f4666; BYTE $0x08 // pinsrb xmm11, byte [rsi + r11 + 11], 8 - WORD $0x8949; BYTE $0xc1 // mov r9, rax - QUAD $0x0b065c203a0f4466; BYTE $0x09 // pinsrb xmm11, byte [rsi + rax + 11], 9 - LONG $0x24548b4c; BYTE $0x70 // mov r10, qword [rsp + 112] - QUAD $0x0b165c203a0f4666; BYTE $0x0a // pinsrb xmm11, byte [rsi + r10 + 11], 10 - QUAD $0x0b3e5c203a0f4666; BYTE $0x0b // pinsrb xmm11, byte [rsi + r15 + 11], 11 - QUAD $0x0b265c203a0f4666; BYTE $0x0c // pinsrb xmm11, byte [rsi + r12 + 11], 12 - LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] - QUAD $0x0b065c203a0f4466; BYTE $0x0d // pinsrb xmm11, byte [rsi + rax + 11], 13 + LONG $0x24748b4c; BYTE $0x20 // mov r14, qword [rsp + 32] + QUAD $0x0b365c203a0f4666; BYTE $0x01 // pinsrb xmm11, byte [rsi + r14 + 11], 1 + WORD $0x894c; BYTE $0xe1 // mov rcx, r12 + QUAD $0x000000d024a4894c // mov qword [rsp + 208], r12 + QUAD $0x0b265c203a0f4666; BYTE $0x02 // pinsrb xmm11, byte [rsi + r12 + 11], 2 + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] + QUAD $0x0b065c203a0f4466; BYTE $0x03 // pinsrb xmm11, byte [rsi + rax + 11], 3 + LONG $0x245c8b48; BYTE $0x40 // mov rbx, qword [rsp + 64] + QUAD $0x0b1e5c203a0f4466; BYTE $0x04 // pinsrb xmm11, byte [rsi + rbx + 11], 4 + QUAD $0x0b165c203a0f4466; BYTE $0x05 // pinsrb xmm11, byte [rsi + rdx + 11], 5 + QUAD $0x0b3e5c203a0f4466; BYTE $0x06 // pinsrb xmm11, byte [rsi + rdi + 11], 6 + WORD $0x894d; BYTE $0xc8 // mov r8, r9 + QUAD $0x0b0e5c203a0f4666; BYTE $0x07 // pinsrb xmm11, byte [rsi + r9 + 11], 7 + WORD $0x894d; BYTE $0xd1 // mov r9, r10 + QUAD $0x0b165c203a0f4666; BYTE $0x08 // pinsrb xmm11, byte [rsi + r10 + 11], 8 + LONG $0x24548b4c; BYTE $0x78 // mov r10, qword [rsp + 120] + QUAD $0x0b165c203a0f4666; BYTE $0x09 // pinsrb xmm11, byte [rsi + r10 + 11], 9 + QUAD $0x0b3e5c203a0f4666; BYTE $0x0a // pinsrb xmm11, byte [rsi + r15 + 11], 10 + LONG $0x24648b4c; BYTE $0x58 // mov r12, qword [rsp + 88] + QUAD $0x0b265c203a0f4666; BYTE $0x0b // pinsrb xmm11, byte [rsi + r12 + 11], 11 + QUAD $0x0b2e5c203a0f4666; BYTE $0x0c // pinsrb xmm11, byte [rsi + r13 + 11], 12 LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] - QUAD $0x0b1e5c203a0f4466; BYTE $0x0e // pinsrb xmm11, byte [rsi + rbx + 11], 14 + QUAD $0x0b1e5c203a0f4466; BYTE $0x0d // pinsrb xmm11, byte [rsi + rbx + 11], 13 + QUAD $0x0b1e5c203a0f4666; BYTE $0x0e // pinsrb xmm11, byte [rsi + r11 + 11], 14 LONG $0x245c8b4c; BYTE $0x30 // mov r11, qword [rsp + 48] QUAD $0x0b1e5c203a0f4666; BYTE $0x0f // pinsrb xmm11, byte [rsi + r11 + 11], 15 - QUAD $0x0c166c203a0f4466; BYTE $0x01 // pinsrb xmm13, byte [rsi + rdx + 12], 1 - QUAD $0x0c366c203a0f4666; BYTE $0x02 // pinsrb xmm13, byte [rsi + r14 + 12], 2 - LONG $0x24748b4c; BYTE $0x78 // mov r14, qword [rsp + 120] - QUAD $0x0c366c203a0f4666; BYTE $0x03 // pinsrb xmm13, byte [rsi + r14 + 12], 3 - QUAD $0x0c2e6c203a0f4666; BYTE $0x04 // pinsrb xmm13, byte [rsi + r13 + 12], 4 - LONG $0x246c8b4c; BYTE $0x68 // mov r13, qword [rsp + 104] - QUAD $0x0c2e6c203a0f4666; BYTE $0x05 // pinsrb xmm13, byte [rsi + r13 + 12], 5 - QUAD $0x0c0e6c203a0f4466; BYTE $0x06 // pinsrb xmm13, byte [rsi + rcx + 12], 6 - QUAD $0x0c3e6c203a0f4466; BYTE $0x07 // pinsrb xmm13, byte [rsi + rdi + 12], 7 - QUAD $0x0c066c203a0f4666; BYTE $0x08 // pinsrb xmm13, byte [rsi + r8 + 12], 8 - QUAD $0x0c0e6c203a0f4666; BYTE $0x09 // pinsrb xmm13, byte [rsi + r9 + 12], 9 - QUAD $0x0c166c203a0f4666; BYTE $0x0a // pinsrb xmm13, byte [rsi + r10 + 12], 10 - QUAD $0x0c3e6c203a0f4666; BYTE $0x0b // pinsrb xmm13, byte [rsi + r15 + 12], 11 - QUAD $0x0c266c203a0f4666; BYTE $0x0c // pinsrb xmm13, byte [rsi + r12 + 12], 12 - QUAD $0x0c066c203a0f4466; BYTE $0x0d // pinsrb xmm13, byte [rsi + rax + 12], 13 - WORD $0x8949; BYTE $0xc5 // mov r13, rax + QUAD $0x0c366c203a0f4666; BYTE $0x01 // pinsrb xmm13, byte [rsi + r14 + 12], 1 + QUAD $0x0c0e6c203a0f4466; BYTE $0x02 // pinsrb xmm13, byte [rsi + rcx + 12], 2 + QUAD $0x0c066c203a0f4466; BYTE $0x03 // pinsrb xmm13, byte [rsi + rax + 12], 3 + LONG $0x24748b4c; BYTE $0x40 // mov r14, qword [rsp + 64] + QUAD $0x0c366c203a0f4666; BYTE $0x04 // pinsrb xmm13, byte [rsi + r14 + 12], 4 + QUAD $0x0c166c203a0f4466; BYTE $0x05 // pinsrb xmm13, byte [rsi + rdx + 12], 5 + QUAD $0x0c3e6c203a0f4466; BYTE $0x06 // pinsrb xmm13, byte [rsi + rdi + 12], 6 + QUAD $0x0c066c203a0f4666; BYTE $0x07 // pinsrb xmm13, byte [rsi + r8 + 12], 7 + QUAD $0x0c0e6c203a0f4666; BYTE $0x08 // pinsrb xmm13, byte [rsi + r9 + 12], 8 + QUAD $0x0c166c203a0f4666; BYTE $0x09 // pinsrb xmm13, byte [rsi + r10 + 12], 9 + QUAD $0x0c3e6c203a0f4666; BYTE $0x0a // pinsrb xmm13, byte [rsi + r15 + 12], 10 + QUAD $0x0c266c203a0f4666; BYTE $0x0b // pinsrb xmm13, byte [rsi + r12 + 12], 11 + QUAD $0x0c2e6c203a0f4666; BYTE $0x0c // pinsrb xmm13, byte [rsi + r13 + 12], 12 + QUAD $0x0c1e6c203a0f4466; BYTE $0x0d // pinsrb xmm13, byte [rsi + rbx + 12], 13 + LONG $0x245c8b48; BYTE $0x18 // mov rbx, qword [rsp + 24] QUAD $0x0c1e6c203a0f4466; BYTE $0x0e // pinsrb xmm13, byte [rsi + rbx + 12], 14 - WORD $0x894c; BYTE $0xd8 // mov rax, r11 QUAD $0x0c1e6c203a0f4666; BYTE $0x0f // pinsrb xmm13, byte [rsi + r11 + 12], 15 - QUAD $0x0d1664203a0f4466; BYTE $0x01 // pinsrb xmm12, byte [rsi + rdx + 13], 1 - LONG $0x245c8b4c; BYTE $0x60 // mov r11, qword [rsp + 96] - QUAD $0x0d1e64203a0f4666; BYTE $0x02 // pinsrb xmm12, byte [rsi + r11 + 13], 2 - QUAD $0x0d3664203a0f4666; BYTE $0x03 // pinsrb xmm12, byte [rsi + r14 + 13], 3 - LONG $0x24548b48; BYTE $0x38 // mov rdx, qword [rsp + 56] - QUAD $0x0d1664203a0f4466; BYTE $0x04 // pinsrb xmm12, byte [rsi + rdx + 13], 4 - LONG $0x24548b48; BYTE $0x68 // mov rdx, qword [rsp + 104] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x0d0664203a0f4466; BYTE $0x01 // pinsrb xmm12, byte [rsi + rax + 13], 1 + QUAD $0x0d0e64203a0f4466; BYTE $0x02 // pinsrb xmm12, byte [rsi + rcx + 13], 2 + LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] + QUAD $0x0d0e64203a0f4466; BYTE $0x03 // pinsrb xmm12, byte [rsi + rcx + 13], 3 + QUAD $0x0d3664203a0f4666; BYTE $0x04 // pinsrb xmm12, byte [rsi + r14 + 13], 4 QUAD $0x0d1664203a0f4466; BYTE $0x05 // pinsrb xmm12, byte [rsi + rdx + 13], 5 - QUAD $0x0d0e64203a0f4466; BYTE $0x06 // pinsrb xmm12, byte [rsi + rcx + 13], 6 - QUAD $0x0d3e64203a0f4466; BYTE $0x07 // pinsrb xmm12, byte [rsi + rdi + 13], 7 - QUAD $0x0d0664203a0f4666; BYTE $0x08 // pinsrb xmm12, byte [rsi + r8 + 13], 8 - QUAD $0x0d0e64203a0f4666; BYTE $0x09 // pinsrb xmm12, byte [rsi + r9 + 13], 9 - QUAD $0x0d1664203a0f4666; BYTE $0x0a // pinsrb xmm12, byte [rsi + r10 + 13], 10 - QUAD $0x0d3e64203a0f4666; BYTE $0x0b // pinsrb xmm12, byte [rsi + r15 + 13], 11 - QUAD $0x0d2664203a0f4666; BYTE $0x0c // pinsrb xmm12, byte [rsi + r12 + 13], 12 - WORD $0x894c; BYTE $0xef // mov rdi, r13 - QUAD $0x0d2e64203a0f4666; BYTE $0x0d // pinsrb xmm12, byte [rsi + r13 + 13], 13 + QUAD $0x0d3e64203a0f4466; BYTE $0x06 // pinsrb xmm12, byte [rsi + rdi + 13], 6 + QUAD $0x0d0664203a0f4666; BYTE $0x07 // pinsrb xmm12, byte [rsi + r8 + 13], 7 + QUAD $0x0d0e64203a0f4666; BYTE $0x08 // pinsrb xmm12, byte [rsi + r9 + 13], 8 + QUAD $0x0d1664203a0f4666; BYTE $0x09 // pinsrb xmm12, byte [rsi + r10 + 13], 9 + QUAD $0x0d3e64203a0f4666; BYTE $0x0a // pinsrb xmm12, byte [rsi + r15 + 13], 10 + QUAD $0x0d2664203a0f4666; BYTE $0x0b // pinsrb xmm12, byte [rsi + r12 + 13], 11 + QUAD $0x0d2e64203a0f4666; BYTE $0x0c // pinsrb xmm12, byte [rsi + r13 + 13], 12 + LONG $0x247c8b48; BYTE $0x10 // mov rdi, qword [rsp + 16] + QUAD $0x0d3e64203a0f4466; BYTE $0x0d // pinsrb xmm12, byte [rsi + rdi + 13], 13 QUAD $0x0d1e64203a0f4466; BYTE $0x0e // pinsrb xmm12, byte [rsi + rbx + 13], 14 - QUAD $0x0d0664203a0f4466; BYTE $0x0f // pinsrb xmm12, byte [rsi + rax + 13], 15 + QUAD $0x0d1e64203a0f4666; BYTE $0x0f // pinsrb xmm12, byte [rsi + r11 + 13], 15 LONG $0x640f4566; BYTE $0xd9 // pcmpgtb xmm11, xmm9 QUAD $0x0000c09ddb0f4466; BYTE $0x00 // pand xmm11, oword 192[rbp] /* [rip + .LCPI7_12] */ LONG $0x640f4566; BYTE $0xe9 // pcmpgtb xmm13, xmm9 QUAD $0x0000d0addb0f4466; BYTE $0x00 // pand xmm13, oword 208[rbp] /* [rip + .LCPI7_13] */ LONG $0xeb0f4566; BYTE $0xeb // por xmm13, xmm11 - LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] - LONG $0x065cb60f; BYTE $0x19 // movzx ebx, byte [rsi + rax + 25] + LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] + LONG $0x3e5cb60f; BYTE $0x19 // movzx ebx, byte [rsi + rdi + 25] LONG $0xcb6e0f66 // movd xmm1, ebx LONG $0x640f4566; BYTE $0xe1 // pcmpgtb xmm12, xmm9 QUAD $0x0000e0a5db0f4466; BYTE $0x00 // pand xmm12, oword 224[rbp] /* [rip + .LCPI7_14] */ LONG $0xeb0f4566; BYTE $0xe5 // por xmm12, xmm13 - LONG $0x065cb60f; BYTE $0x1a // movzx ebx, byte [rsi + rax + 26] + LONG $0x3e5cb60f; BYTE $0x1a // movzx ebx, byte [rsi + rdi + 26] LONG $0x6e0f4466; BYTE $0xdb // movd xmm11, ebx - QUAD $0x00013024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 304] - LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x00011024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 272] QUAD $0x010e0664203a0f66 // pinsrb xmm4, byte [rsi + rax + 14], 1 - WORD $0x894d; BYTE $0xdd // mov r13, r11 - QUAD $0x0e1e64203a0f4266; BYTE $0x02 // pinsrb xmm4, byte [rsi + r11 + 14], 2 - WORD $0x894d; BYTE $0xf3 // mov r11, r14 - QUAD $0x0e3664203a0f4266; BYTE $0x03 // pinsrb xmm4, byte [rsi + r14 + 14], 3 - LONG $0x24748b4c; BYTE $0x38 // mov r14, qword [rsp + 56] - QUAD $0x0e3664203a0f4266; BYTE $0x04 // pinsrb xmm4, byte [rsi + r14 + 14], 4 - WORD $0x8948; BYTE $0xd0 // mov rax, rdx + QUAD $0x000000d0249c8b48 // mov rbx, qword [rsp + 208] + QUAD $0x020e1e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 14], 2 + WORD $0x8949; BYTE $0xcb // mov r11, rcx + QUAD $0x030e0e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 14], 3 + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x040e0664203a0f66 // pinsrb xmm4, byte [rsi + rax + 14], 4 + WORD $0x8948; BYTE $0xd1 // mov rcx, rdx QUAD $0x050e1664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 14], 5 - QUAD $0x060e0e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 14], 6 - LONG $0x24548b48; BYTE $0x48 // mov rdx, qword [rsp + 72] - QUAD $0x070e1664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 14], 7 - QUAD $0x0e0664203a0f4266; BYTE $0x08 // pinsrb xmm4, byte [rsi + r8 + 14], 8 - QUAD $0x0e0e64203a0f4266; BYTE $0x09 // pinsrb xmm4, byte [rsi + r9 + 14], 9 - WORD $0x894c; BYTE $0xd3 // mov rbx, r10 - QUAD $0x0e1664203a0f4266; BYTE $0x0a // pinsrb xmm4, byte [rsi + r10 + 14], 10 - QUAD $0x0e3e64203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r15 + 14], 11 - QUAD $0x0e2664203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r12 + 14], 12 - QUAD $0x0d0e3e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 14], 13 - LONG $0x247c8b48; BYTE $0x10 // mov rdi, qword [rsp + 16] + LONG $0x24548b48; BYTE $0x50 // mov rdx, qword [rsp + 80] + QUAD $0x060e1664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 14], 6 + QUAD $0x0e0664203a0f4266; BYTE $0x07 // pinsrb xmm4, byte [rsi + r8 + 14], 7 + QUAD $0x0e0e64203a0f4266; BYTE $0x08 // pinsrb xmm4, byte [rsi + r9 + 14], 8 + QUAD $0x0e1664203a0f4266; BYTE $0x09 // pinsrb xmm4, byte [rsi + r10 + 14], 9 + QUAD $0x0e3e64203a0f4266; BYTE $0x0a // pinsrb xmm4, byte [rsi + r15 + 14], 10 + QUAD $0x0e2664203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r12 + 14], 11 + QUAD $0x0e2e64203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r13 + 14], 12 + LONG $0x24748b4c; BYTE $0x10 // mov r14, qword [rsp + 16] + QUAD $0x0e3664203a0f4266; BYTE $0x0d // pinsrb xmm4, byte [rsi + r14 + 14], 13 + LONG $0x247c8b48; BYTE $0x18 // mov rdi, qword [rsp + 24] QUAD $0x0e0e3e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 14], 14 - LONG $0x24548b4c; BYTE $0x30 // mov r10, qword [rsp + 48] - QUAD $0x0e1664203a0f4266; BYTE $0x0f // pinsrb xmm4, byte [rsi + r10 + 14], 15 - LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] + LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + QUAD $0x0f0e3e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 14], 15 + LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] QUAD $0x0f3e74203a0f4466; BYTE $0x01 // pinsrb xmm14, byte [rsi + rdi + 15], 1 - QUAD $0x0f2e74203a0f4666; BYTE $0x02 // pinsrb xmm14, byte [rsi + r13 + 15], 2 + QUAD $0x0f1e74203a0f4466; BYTE $0x02 // pinsrb xmm14, byte [rsi + rbx + 15], 2 QUAD $0x0f1e74203a0f4666; BYTE $0x03 // pinsrb xmm14, byte [rsi + r11 + 15], 3 - QUAD $0x0f3674203a0f4666; BYTE $0x04 // pinsrb xmm14, byte [rsi + r14 + 15], 4 - QUAD $0x0f0674203a0f4466; BYTE $0x05 // pinsrb xmm14, byte [rsi + rax + 15], 5 - QUAD $0x0f0e74203a0f4466; BYTE $0x06 // pinsrb xmm14, byte [rsi + rcx + 15], 6 - QUAD $0x0f1674203a0f4466; BYTE $0x07 // pinsrb xmm14, byte [rsi + rdx + 15], 7 - QUAD $0x0f0674203a0f4666; BYTE $0x08 // pinsrb xmm14, byte [rsi + r8 + 15], 8 - QUAD $0x0f0e74203a0f4666; BYTE $0x09 // pinsrb xmm14, byte [rsi + r9 + 15], 9 - QUAD $0x0f1e74203a0f4466; BYTE $0x0a // pinsrb xmm14, byte [rsi + rbx + 15], 10 - QUAD $0x0f3e74203a0f4666; BYTE $0x0b // pinsrb xmm14, byte [rsi + r15 + 15], 11 - QUAD $0x0f2674203a0f4666; BYTE $0x0c // pinsrb xmm14, byte [rsi + r12 + 15], 12 - LONG $0x247c8b48; BYTE $0x08 // mov rdi, qword [rsp + 8] - QUAD $0x0f3e74203a0f4466; BYTE $0x0d // pinsrb xmm14, byte [rsi + rdi + 15], 13 - LONG $0x247c8b48; BYTE $0x10 // mov rdi, qword [rsp + 16] + QUAD $0x0f0674203a0f4466; BYTE $0x04 // pinsrb xmm14, byte [rsi + rax + 15], 4 + QUAD $0x0f0e74203a0f4466; BYTE $0x05 // pinsrb xmm14, byte [rsi + rcx + 15], 5 + QUAD $0x0f1674203a0f4466; BYTE $0x06 // pinsrb xmm14, byte [rsi + rdx + 15], 6 + QUAD $0x0f0674203a0f4666; BYTE $0x07 // pinsrb xmm14, byte [rsi + r8 + 15], 7 + QUAD $0x0f0e74203a0f4666; BYTE $0x08 // pinsrb xmm14, byte [rsi + r9 + 15], 8 + QUAD $0x0f1674203a0f4666; BYTE $0x09 // pinsrb xmm14, byte [rsi + r10 + 15], 9 + QUAD $0x0f3e74203a0f4666; BYTE $0x0a // pinsrb xmm14, byte [rsi + r15 + 15], 10 + QUAD $0x0f2674203a0f4666; BYTE $0x0b // pinsrb xmm14, byte [rsi + r12 + 15], 11 + QUAD $0x0f2e74203a0f4666; BYTE $0x0c // pinsrb xmm14, byte [rsi + r13 + 15], 12 + QUAD $0x0f3674203a0f4666; BYTE $0x0d // pinsrb xmm14, byte [rsi + r14 + 15], 13 + LONG $0x247c8b48; BYTE $0x18 // mov rdi, qword [rsp + 24] QUAD $0x0f3e74203a0f4466; BYTE $0x0e // pinsrb xmm14, byte [rsi + rdi + 15], 14 - QUAD $0x0f1674203a0f4666; BYTE $0x0f // pinsrb xmm14, byte [rsi + r10 + 15], 15 - LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] + LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] + QUAD $0x0f3674203a0f4666; BYTE $0x0f // pinsrb xmm14, byte [rsi + r14 + 15], 15 + LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] QUAD $0x103e7c203a0f4466; BYTE $0x01 // pinsrb xmm15, byte [rsi + rdi + 16], 1 - QUAD $0x102e7c203a0f4666; BYTE $0x02 // pinsrb xmm15, byte [rsi + r13 + 16], 2 + QUAD $0x101e7c203a0f4466; BYTE $0x02 // pinsrb xmm15, byte [rsi + rbx + 16], 2 QUAD $0x101e7c203a0f4666; BYTE $0x03 // pinsrb xmm15, byte [rsi + r11 + 16], 3 - QUAD $0x10367c203a0f4666; BYTE $0x04 // pinsrb xmm15, byte [rsi + r14 + 16], 4 - QUAD $0x10067c203a0f4466; BYTE $0x05 // pinsrb xmm15, byte [rsi + rax + 16], 5 - QUAD $0x100e7c203a0f4466; BYTE $0x06 // pinsrb xmm15, byte [rsi + rcx + 16], 6 - QUAD $0x10167c203a0f4466; BYTE $0x07 // pinsrb xmm15, byte [rsi + rdx + 16], 7 - QUAD $0x10067c203a0f4666; BYTE $0x08 // pinsrb xmm15, byte [rsi + r8 + 16], 8 - QUAD $0x100e7c203a0f4666; BYTE $0x09 // pinsrb xmm15, byte [rsi + r9 + 16], 9 - QUAD $0x101e7c203a0f4466; BYTE $0x0a // pinsrb xmm15, byte [rsi + rbx + 16], 10 - QUAD $0x103e7c203a0f4666; BYTE $0x0b // pinsrb xmm15, byte [rsi + r15 + 16], 11 - QUAD $0x10267c203a0f4666; BYTE $0x0c // pinsrb xmm15, byte [rsi + r12 + 16], 12 - LONG $0x247c8b48; BYTE $0x08 // mov rdi, qword [rsp + 8] + QUAD $0x10067c203a0f4466; BYTE $0x04 // pinsrb xmm15, byte [rsi + rax + 16], 4 + QUAD $0x100e7c203a0f4466; BYTE $0x05 // pinsrb xmm15, byte [rsi + rcx + 16], 5 + QUAD $0x10167c203a0f4466; BYTE $0x06 // pinsrb xmm15, byte [rsi + rdx + 16], 6 + QUAD $0x10067c203a0f4666; BYTE $0x07 // pinsrb xmm15, byte [rsi + r8 + 16], 7 + QUAD $0x100e7c203a0f4666; BYTE $0x08 // pinsrb xmm15, byte [rsi + r9 + 16], 8 + QUAD $0x10167c203a0f4666; BYTE $0x09 // pinsrb xmm15, byte [rsi + r10 + 16], 9 + QUAD $0x103e7c203a0f4666; BYTE $0x0a // pinsrb xmm15, byte [rsi + r15 + 16], 10 + QUAD $0x10267c203a0f4666; BYTE $0x0b // pinsrb xmm15, byte [rsi + r12 + 16], 11 + QUAD $0x102e7c203a0f4666; BYTE $0x0c // pinsrb xmm15, byte [rsi + r13 + 16], 12 + LONG $0x247c8b48; BYTE $0x10 // mov rdi, qword [rsp + 16] QUAD $0x103e7c203a0f4466; BYTE $0x0d // pinsrb xmm15, byte [rsi + rdi + 16], 13 - LONG $0x24548b4c; BYTE $0x10 // mov r10, qword [rsp + 16] - QUAD $0x10167c203a0f4666; BYTE $0x0e // pinsrb xmm15, byte [rsi + r10 + 16], 14 - LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] + LONG $0x24748b4c; BYTE $0x18 // mov r14, qword [rsp + 24] + QUAD $0x10367c203a0f4666; BYTE $0x0e // pinsrb xmm15, byte [rsi + r14 + 16], 14 + LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] QUAD $0x01113e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 17], 1 - QUAD $0x112e44203a0f4266; BYTE $0x02 // pinsrb xmm0, byte [rsi + r13 + 17], 2 + QUAD $0x02111e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 17], 2 QUAD $0x111e44203a0f4266; BYTE $0x03 // pinsrb xmm0, byte [rsi + r11 + 17], 3 - QUAD $0x113644203a0f4266; BYTE $0x04 // pinsrb xmm0, byte [rsi + r14 + 17], 4 - QUAD $0x05110644203a0f66 // pinsrb xmm0, byte [rsi + rax + 17], 5 - WORD $0x8949; BYTE $0xc5 // mov r13, rax - QUAD $0x06110e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 17], 6 - QUAD $0x07111644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 17], 7 - QUAD $0x110644203a0f4266; BYTE $0x08 // pinsrb xmm0, byte [rsi + r8 + 17], 8 - QUAD $0x110e44203a0f4266; BYTE $0x09 // pinsrb xmm0, byte [rsi + r9 + 17], 9 - QUAD $0x0a111e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 17], 10 - QUAD $0x113e44203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r15 + 17], 11 - QUAD $0x112644203a0f4266; BYTE $0x0c // pinsrb xmm0, byte [rsi + r12 + 17], 12 - LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] - QUAD $0x0d110644203a0f66 // pinsrb xmm0, byte [rsi + rax + 17], 13 + QUAD $0x04110644203a0f66 // pinsrb xmm0, byte [rsi + rax + 17], 4 + QUAD $0x05110e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 17], 5 + QUAD $0x06111644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 17], 6 + QUAD $0x110644203a0f4266; BYTE $0x07 // pinsrb xmm0, byte [rsi + r8 + 17], 7 + QUAD $0x110e44203a0f4266; BYTE $0x08 // pinsrb xmm0, byte [rsi + r9 + 17], 8 + QUAD $0x111644203a0f4266; BYTE $0x09 // pinsrb xmm0, byte [rsi + r10 + 17], 9 + QUAD $0x113e44203a0f4266; BYTE $0x0a // pinsrb xmm0, byte [rsi + r15 + 17], 10 + QUAD $0x112644203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r12 + 17], 11 + QUAD $0x112e44203a0f4266; BYTE $0x0c // pinsrb xmm0, byte [rsi + r13 + 17], 12 LONG $0x247c8b48; BYTE $0x10 // mov rdi, qword [rsp + 16] - QUAD $0x0e113e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 17], 14 - QUAD $0x009024a4eb0f4466; WORD $0x0000 // por xmm12, oword [rsp + 144] - LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] - LONG $0x065cb60f; BYTE $0x1b // movzx ebx, byte [rsi + rax + 27] + QUAD $0x0d113e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 17], 13 + QUAD $0x113644203a0f4266; BYTE $0x0e // pinsrb xmm0, byte [rsi + r14 + 17], 14 + QUAD $0x00b024a4eb0f4466; WORD $0x0000 // por xmm12, oword [rsp + 176] + LONG $0x247c8b48; BYTE $0x28 // mov rdi, qword [rsp + 40] + LONG $0x3e5cb60f; BYTE $0x1b // movzx ebx, byte [rsi + rdi + 27] LONG $0x6e0f4466; BYTE $0xcb // movd xmm9, ebx - QUAD $0x00a024ac6f0f4466; WORD $0x0000 // movdqa xmm13, oword [rsp + 160] + QUAD $0x009024ac6f0f4466; WORD $0x0000 // movdqa xmm13, oword [rsp + 144] LONG $0x640f4166; BYTE $0xe5 // pcmpgtb xmm4, xmm13 QUAD $0x000000f0a5db0f66 // pand xmm4, oword 240[rbp] /* [rip + .LCPI7_15] */ LONG $0x640f4566; BYTE $0xf5 // pcmpgtb xmm14, xmm13 LONG $0x710f4166; WORD $0x07f6 // psllw xmm14, 7 LONG $0xdb0f4466; WORD $0x6075 // pand xmm14, oword 96[rbp] /* [rip + .LCPI7_6] */ LONG $0xeb0f4466; BYTE $0xf4 // por xmm14, xmm4 - LONG $0x065cb60f; BYTE $0x1c // movzx ebx, byte [rsi + rax + 28] + LONG $0x3e5cb60f; BYTE $0x1c // movzx ebx, byte [rsi + rdi + 28] LONG $0xe36e0f66 // movd xmm4, ebx - LONG $0x24548b4c; BYTE $0x30 // mov r10, qword [rsp + 48] - QUAD $0x111644203a0f4266; BYTE $0x0f // pinsrb xmm0, byte [rsi + r10 + 17], 15 + LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] + QUAD $0x113644203a0f4266; BYTE $0x0f // pinsrb xmm0, byte [rsi + r14 + 17], 15 LONG $0xeb0f4566; BYTE $0xf4 // por xmm14, xmm12 LONG $0x640f4166; BYTE $0xc5 // pcmpgtb xmm0, xmm13 LONG $0x6f0f4466; BYTE $0xe8 // movdqa xmm13, xmm0 QUAD $0x0000a0a56f0f4466; BYTE $0x00 // movdqa xmm12, oword 160[rbp] /* [rip + .LCPI7_10] */ LONG $0xdb0f4566; BYTE $0xec // pand xmm13, xmm12 LONG $0xf80f4466; BYTE $0xe8 // psubb xmm13, xmm0 - QUAD $0x009024ac7f0f4466; WORD $0x0000 // movdqa oword [rsp + 144], xmm13 - LONG $0x065cb60f; BYTE $0x1d // movzx ebx, byte [rsi + rax + 29] + QUAD $0x00b024ac7f0f4466; WORD $0x0000 // movdqa oword [rsp + 176], xmm13 + LONG $0x3e5cb60f; BYTE $0x1d // movzx ebx, byte [rsi + rdi + 29] LONG $0x6e0f4466; BYTE $0xeb // movd xmm13, ebx - QUAD $0x10167c203a0f4666; BYTE $0x0f // pinsrb xmm15, byte [rsi + r10 + 16], 15 - QUAD $0x0000a024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 160] + QUAD $0x10367c203a0f4666; BYTE $0x0f // pinsrb xmm15, byte [rsi + r14 + 16], 15 + QUAD $0x00009024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 144] LONG $0x640f4466; BYTE $0xf8 // pcmpgtb xmm15, xmm0 - LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] - QUAD $0x01121e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 18], 1 - LONG $0x245c8b48; BYTE $0x60 // mov rbx, qword [rsp + 96] + LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] + QUAD $0x01123e6c203a0f66 // pinsrb xmm5, byte [rsi + rdi + 18], 1 + QUAD $0x000000d0249c8b48 // mov rbx, qword [rsp + 208] QUAD $0x02121e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 18], 2 QUAD $0x121e6c203a0f4266; BYTE $0x03 // pinsrb xmm5, byte [rsi + r11 + 18], 3 - QUAD $0x12366c203a0f4266; BYTE $0x04 // pinsrb xmm5, byte [rsi + r14 + 18], 4 - QUAD $0x122e6c203a0f4266; BYTE $0x05 // pinsrb xmm5, byte [rsi + r13 + 18], 5 - QUAD $0x06120e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 18], 6 - QUAD $0x0712166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 18], 7 - QUAD $0x12066c203a0f4266; BYTE $0x08 // pinsrb xmm5, byte [rsi + r8 + 18], 8 - QUAD $0x120e6c203a0f4266; BYTE $0x09 // pinsrb xmm5, byte [rsi + r9 + 18], 9 - LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] - QUAD $0x0a12066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 18], 10 - QUAD $0x123e6c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rsi + r15 + 18], 11 - QUAD $0x12266c203a0f4266; BYTE $0x0c // pinsrb xmm5, byte [rsi + r12 + 18], 12 - LONG $0x245c8b48; BYTE $0x08 // mov rbx, qword [rsp + 8] + QUAD $0x0412066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 18], 4 + QUAD $0x05120e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 18], 5 + QUAD $0x0612166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 18], 6 + QUAD $0x12066c203a0f4266; BYTE $0x07 // pinsrb xmm5, byte [rsi + r8 + 18], 7 + QUAD $0x120e6c203a0f4266; BYTE $0x08 // pinsrb xmm5, byte [rsi + r9 + 18], 8 + QUAD $0x12166c203a0f4266; BYTE $0x09 // pinsrb xmm5, byte [rsi + r10 + 18], 9 + QUAD $0x123e6c203a0f4266; BYTE $0x0a // pinsrb xmm5, byte [rsi + r15 + 18], 10 + QUAD $0x12266c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rsi + r12 + 18], 11 + QUAD $0x122e6c203a0f4266; BYTE $0x0c // pinsrb xmm5, byte [rsi + r13 + 18], 12 + LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] QUAD $0x0d121e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 18], 13 - QUAD $0x0e123e6c203a0f66 // pinsrb xmm5, byte [rsi + rdi + 18], 14 + LONG $0x245c8b48; BYTE $0x18 // mov rbx, qword [rsp + 24] + QUAD $0x0e121e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 18], 14 LONG $0xdb0f4566; BYTE $0xfc // pand xmm15, xmm12 - QUAD $0x12166c203a0f4266; BYTE $0x0f // pinsrb xmm5, byte [rsi + r10 + 18], 15 + QUAD $0x12366c203a0f4266; BYTE $0x0f // pinsrb xmm5, byte [rsi + r14 + 18], 15 LONG $0xe8640f66 // pcmpgtb xmm5, xmm0 QUAD $0x000000b0addb0f66 // pand xmm5, oword 176[rbp] /* [rip + .LCPI7_11] */ LONG $0xeb0f4166; BYTE $0xef // por xmm5, xmm15 - LONG $0x247c8b48; BYTE $0x18 // mov rdi, qword [rsp + 24] - LONG $0x3e5cb60f; BYTE $0x1e // movzx ebx, byte [rsi + rdi + 30] + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + LONG $0x065cb60f; BYTE $0x1e // movzx ebx, byte [rsi + rax + 30] LONG $0x6e0f4466; BYTE $0xe3 // movd xmm12, ebx - LONG $0x245c8b48; BYTE $0x28 // mov rbx, qword [rsp + 40] - QUAD $0x01131e7c203a0f66 // pinsrb xmm7, byte [rsi + rbx + 19], 1 - QUAD $0x01141e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 20], 1 - QUAD $0x01151e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 21], 1 - QUAD $0x01161e5c203a0f66 // pinsrb xmm3, byte [rsi + rbx + 22], 1 - QUAD $0x171e44203a0f4466; BYTE $0x01 // pinsrb xmm8, byte [rsi + rbx + 23], 1 - QUAD $0x181e54203a0f4466; BYTE $0x01 // pinsrb xmm10, byte [rsi + rbx + 24], 1 - QUAD $0x01191e4c203a0f66 // pinsrb xmm1, byte [rsi + rbx + 25], 1 - QUAD $0x1a1e5c203a0f4466; BYTE $0x01 // pinsrb xmm11, byte [rsi + rbx + 26], 1 - QUAD $0x1b1e4c203a0f4466; BYTE $0x01 // pinsrb xmm9, byte [rsi + rbx + 27], 1 - QUAD $0x011c1e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 28], 1 - QUAD $0x1d1e6c203a0f4466; BYTE $0x01 // pinsrb xmm13, byte [rsi + rbx + 29], 1 - QUAD $0x1e1e64203a0f4466; BYTE $0x01 // pinsrb xmm12, byte [rsi + rbx + 30], 1 - LONG $0x3e7cb60f; BYTE $0x1f // movzx edi, byte [rsi + rdi + 31] + WORD $0x8948; BYTE $0xfb // mov rbx, rdi + QUAD $0x01133e7c203a0f66 // pinsrb xmm7, byte [rsi + rdi + 19], 1 + QUAD $0x01143e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 20], 1 + QUAD $0x01153e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 21], 1 + QUAD $0x01163e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 22], 1 + QUAD $0x173e44203a0f4466; BYTE $0x01 // pinsrb xmm8, byte [rsi + rdi + 23], 1 + QUAD $0x183e54203a0f4466; BYTE $0x01 // pinsrb xmm10, byte [rsi + rdi + 24], 1 + QUAD $0x01193e4c203a0f66 // pinsrb xmm1, byte [rsi + rdi + 25], 1 + QUAD $0x1a3e5c203a0f4466; BYTE $0x01 // pinsrb xmm11, byte [rsi + rdi + 26], 1 + QUAD $0x1b3e4c203a0f4466; BYTE $0x01 // pinsrb xmm9, byte [rsi + rdi + 27], 1 + QUAD $0x011c3e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 28], 1 + QUAD $0x1d3e6c203a0f4466; BYTE $0x01 // pinsrb xmm13, byte [rsi + rdi + 29], 1 + QUAD $0x1e3e64203a0f4466; BYTE $0x01 // pinsrb xmm12, byte [rsi + rdi + 30], 1 + LONG $0x067cb60f; BYTE $0x1f // movzx edi, byte [rsi + rax + 31] LONG $0xc76e0f66 // movd xmm0, edi QUAD $0x011f1e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 31], 1 - LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] + QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] QUAD $0x02133e7c203a0f66 // pinsrb xmm7, byte [rsi + rdi + 19], 2 QUAD $0x02143e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 20], 2 QUAD $0x02153e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 21], 2 @@ -36232,84 +37617,85 @@ LBB7_85: QUAD $0x1e3e64203a0f4466; BYTE $0x02 // pinsrb xmm12, byte [rsi + rdi + 30], 2 QUAD $0x021f3e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 31], 2 QUAD $0x131e7c203a0f4266; BYTE $0x03 // pinsrb xmm7, byte [rsi + r11 + 19], 3 - QUAD $0x13367c203a0f4266; BYTE $0x04 // pinsrb xmm7, byte [rsi + r14 + 19], 4 - QUAD $0x132e7c203a0f4266; BYTE $0x05 // pinsrb xmm7, byte [rsi + r13 + 19], 5 - QUAD $0x06130e7c203a0f66 // pinsrb xmm7, byte [rsi + rcx + 19], 6 - QUAD $0x0713167c203a0f66 // pinsrb xmm7, byte [rsi + rdx + 19], 7 - QUAD $0x13067c203a0f4266; BYTE $0x08 // pinsrb xmm7, byte [rsi + r8 + 19], 8 - QUAD $0x130e7c203a0f4266; BYTE $0x09 // pinsrb xmm7, byte [rsi + r9 + 19], 9 - QUAD $0x0a13067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 19], 10 - QUAD $0x133e7c203a0f4266; BYTE $0x0b // pinsrb xmm7, byte [rsi + r15 + 19], 11 - QUAD $0x13267c203a0f4266; BYTE $0x0c // pinsrb xmm7, byte [rsi + r12 + 19], 12 - LONG $0x247c8b48; BYTE $0x08 // mov rdi, qword [rsp + 8] + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x0413067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 19], 4 + QUAD $0x05130e7c203a0f66 // pinsrb xmm7, byte [rsi + rcx + 19], 5 + QUAD $0x0613167c203a0f66 // pinsrb xmm7, byte [rsi + rdx + 19], 6 + QUAD $0x13067c203a0f4266; BYTE $0x07 // pinsrb xmm7, byte [rsi + r8 + 19], 7 + QUAD $0x130e7c203a0f4266; BYTE $0x08 // pinsrb xmm7, byte [rsi + r9 + 19], 8 + QUAD $0x13167c203a0f4266; BYTE $0x09 // pinsrb xmm7, byte [rsi + r10 + 19], 9 + QUAD $0x133e7c203a0f4266; BYTE $0x0a // pinsrb xmm7, byte [rsi + r15 + 19], 10 + QUAD $0x13267c203a0f4266; BYTE $0x0b // pinsrb xmm7, byte [rsi + r12 + 19], 11 + QUAD $0x132e7c203a0f4266; BYTE $0x0c // pinsrb xmm7, byte [rsi + r13 + 19], 12 + LONG $0x247c8b48; BYTE $0x10 // mov rdi, qword [rsp + 16] QUAD $0x0d133e7c203a0f66 // pinsrb xmm7, byte [rsi + rdi + 19], 13 - LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] + LONG $0x245c8b48; BYTE $0x18 // mov rbx, qword [rsp + 24] QUAD $0x0e131e7c203a0f66 // pinsrb xmm7, byte [rsi + rbx + 19], 14 - QUAD $0x13167c203a0f4266; BYTE $0x0f // pinsrb xmm7, byte [rsi + r10 + 19], 15 + QUAD $0x13367c203a0f4266; BYTE $0x0f // pinsrb xmm7, byte [rsi + r14 + 19], 15 QUAD $0x141e74203a0f4266; BYTE $0x03 // pinsrb xmm6, byte [rsi + r11 + 20], 3 - QUAD $0x143674203a0f4266; BYTE $0x04 // pinsrb xmm6, byte [rsi + r14 + 20], 4 - QUAD $0x142e74203a0f4266; BYTE $0x05 // pinsrb xmm6, byte [rsi + r13 + 20], 5 - QUAD $0x06140e74203a0f66 // pinsrb xmm6, byte [rsi + rcx + 20], 6 - QUAD $0x07141674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 20], 7 - QUAD $0x140674203a0f4266; BYTE $0x08 // pinsrb xmm6, byte [rsi + r8 + 20], 8 - QUAD $0x140e74203a0f4266; BYTE $0x09 // pinsrb xmm6, byte [rsi + r9 + 20], 9 - QUAD $0x0a140674203a0f66 // pinsrb xmm6, byte [rsi + rax + 20], 10 - QUAD $0x143e74203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rsi + r15 + 20], 11 - QUAD $0x142674203a0f4266; BYTE $0x0c // pinsrb xmm6, byte [rsi + r12 + 20], 12 + QUAD $0x04140674203a0f66 // pinsrb xmm6, byte [rsi + rax + 20], 4 + QUAD $0x05140e74203a0f66 // pinsrb xmm6, byte [rsi + rcx + 20], 5 + QUAD $0x06141674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 20], 6 + QUAD $0x140674203a0f4266; BYTE $0x07 // pinsrb xmm6, byte [rsi + r8 + 20], 7 + QUAD $0x140e74203a0f4266; BYTE $0x08 // pinsrb xmm6, byte [rsi + r9 + 20], 8 + QUAD $0x141674203a0f4266; BYTE $0x09 // pinsrb xmm6, byte [rsi + r10 + 20], 9 + QUAD $0x143e74203a0f4266; BYTE $0x0a // pinsrb xmm6, byte [rsi + r15 + 20], 10 + QUAD $0x142674203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rsi + r12 + 20], 11 + QUAD $0x142e74203a0f4266; BYTE $0x0c // pinsrb xmm6, byte [rsi + r13 + 20], 12 QUAD $0x0d143e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 20], 13 QUAD $0x0e141e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 20], 14 - QUAD $0x00009024aceb0f66; BYTE $0x00 // por xmm5, oword [rsp + 144] - QUAD $0x141674203a0f4266; BYTE $0x0f // pinsrb xmm6, byte [rsi + r10 + 20], 15 - QUAD $0x00a024bc6f0f4466; WORD $0x0000 // movdqa xmm15, oword [rsp + 160] + QUAD $0x0000b024aceb0f66; BYTE $0x00 // por xmm5, oword [rsp + 176] + QUAD $0x143674203a0f4266; BYTE $0x0f // pinsrb xmm6, byte [rsi + r14 + 20], 15 + QUAD $0x009024bc6f0f4466; WORD $0x0000 // movdqa xmm15, oword [rsp + 144] LONG $0x640f4166; BYTE $0xff // pcmpgtb xmm7, xmm15 QUAD $0x000000c0bddb0f66 // pand xmm7, oword 192[rbp] /* [rip + .LCPI7_12] */ LONG $0x640f4166; BYTE $0xf7 // pcmpgtb xmm6, xmm15 QUAD $0x000000d0b5db0f66 // pand xmm6, oword 208[rbp] /* [rip + .LCPI7_13] */ LONG $0xf7eb0f66 // por xmm6, xmm7 QUAD $0x151e54203a0f4266; BYTE $0x03 // pinsrb xmm2, byte [rsi + r11 + 21], 3 - QUAD $0x153654203a0f4266; BYTE $0x04 // pinsrb xmm2, byte [rsi + r14 + 21], 4 - QUAD $0x152e54203a0f4266; BYTE $0x05 // pinsrb xmm2, byte [rsi + r13 + 21], 5 - QUAD $0x06150e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 21], 6 - QUAD $0x07151654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 21], 7 - QUAD $0x150654203a0f4266; BYTE $0x08 // pinsrb xmm2, byte [rsi + r8 + 21], 8 - QUAD $0x150e54203a0f4266; BYTE $0x09 // pinsrb xmm2, byte [rsi + r9 + 21], 9 - QUAD $0x0a150654203a0f66 // pinsrb xmm2, byte [rsi + rax + 21], 10 - QUAD $0x153e54203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rsi + r15 + 21], 11 - QUAD $0x152654203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rsi + r12 + 21], 12 + QUAD $0x04150654203a0f66 // pinsrb xmm2, byte [rsi + rax + 21], 4 + QUAD $0x05150e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 21], 5 + QUAD $0x06151654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 21], 6 + QUAD $0x150654203a0f4266; BYTE $0x07 // pinsrb xmm2, byte [rsi + r8 + 21], 7 + QUAD $0x150e54203a0f4266; BYTE $0x08 // pinsrb xmm2, byte [rsi + r9 + 21], 8 + QUAD $0x151654203a0f4266; BYTE $0x09 // pinsrb xmm2, byte [rsi + r10 + 21], 9 + QUAD $0x153e54203a0f4266; BYTE $0x0a // pinsrb xmm2, byte [rsi + r15 + 21], 10 + QUAD $0x152654203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rsi + r12 + 21], 11 + QUAD $0x152e54203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rsi + r13 + 21], 12 QUAD $0x0d153e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 21], 13 QUAD $0x0e151e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 21], 14 - QUAD $0x151654203a0f4266; BYTE $0x0f // pinsrb xmm2, byte [rsi + r10 + 21], 15 + QUAD $0x153654203a0f4266; BYTE $0x0f // pinsrb xmm2, byte [rsi + r14 + 21], 15 LONG $0x640f4166; BYTE $0xd7 // pcmpgtb xmm2, xmm15 QUAD $0x000000e0bd6f0f66 // movdqa xmm7, oword 224[rbp] /* [rip + .LCPI7_14] */ LONG $0xd7db0f66 // pand xmm2, xmm7 LONG $0xd6eb0f66 // por xmm2, xmm6 LONG $0xd5eb0f66 // por xmm2, xmm5 QUAD $0x161e5c203a0f4266; BYTE $0x03 // pinsrb xmm3, byte [rsi + r11 + 22], 3 - QUAD $0x16365c203a0f4266; BYTE $0x04 // pinsrb xmm3, byte [rsi + r14 + 22], 4 - QUAD $0x162e5c203a0f4266; BYTE $0x05 // pinsrb xmm3, byte [rsi + r13 + 22], 5 - QUAD $0x06160e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 22], 6 - QUAD $0x0716165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 22], 7 - QUAD $0x16065c203a0f4266; BYTE $0x08 // pinsrb xmm3, byte [rsi + r8 + 22], 8 - QUAD $0x160e5c203a0f4266; BYTE $0x09 // pinsrb xmm3, byte [rsi + r9 + 22], 9 - QUAD $0x0a16065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 22], 10 - QUAD $0x163e5c203a0f4266; BYTE $0x0b // pinsrb xmm3, byte [rsi + r15 + 22], 11 - QUAD $0x16265c203a0f4266; BYTE $0x0c // pinsrb xmm3, byte [rsi + r12 + 22], 12 + QUAD $0x0416065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 22], 4 + QUAD $0x05160e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 22], 5 + QUAD $0x0616165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 22], 6 + QUAD $0x16065c203a0f4266; BYTE $0x07 // pinsrb xmm3, byte [rsi + r8 + 22], 7 + QUAD $0x160e5c203a0f4266; BYTE $0x08 // pinsrb xmm3, byte [rsi + r9 + 22], 8 + QUAD $0x16165c203a0f4266; BYTE $0x09 // pinsrb xmm3, byte [rsi + r10 + 22], 9 + QUAD $0x163e5c203a0f4266; BYTE $0x0a // pinsrb xmm3, byte [rsi + r15 + 22], 10 + QUAD $0x16265c203a0f4266; BYTE $0x0b // pinsrb xmm3, byte [rsi + r12 + 22], 11 + QUAD $0x162e5c203a0f4266; BYTE $0x0c // pinsrb xmm3, byte [rsi + r13 + 22], 12 QUAD $0x0d163e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 22], 13 QUAD $0x0e161e5c203a0f66 // pinsrb xmm3, byte [rsi + rbx + 22], 14 - QUAD $0x16165c203a0f4266; BYTE $0x0f // pinsrb xmm3, byte [rsi + r10 + 22], 15 + QUAD $0x16365c203a0f4266; BYTE $0x0f // pinsrb xmm3, byte [rsi + r14 + 22], 15 QUAD $0x171e44203a0f4666; BYTE $0x03 // pinsrb xmm8, byte [rsi + r11 + 23], 3 - QUAD $0x173644203a0f4666; BYTE $0x04 // pinsrb xmm8, byte [rsi + r14 + 23], 4 - QUAD $0x172e44203a0f4666; BYTE $0x05 // pinsrb xmm8, byte [rsi + r13 + 23], 5 - QUAD $0x170e44203a0f4466; BYTE $0x06 // pinsrb xmm8, byte [rsi + rcx + 23], 6 - QUAD $0x171644203a0f4466; BYTE $0x07 // pinsrb xmm8, byte [rsi + rdx + 23], 7 - QUAD $0x170644203a0f4666; BYTE $0x08 // pinsrb xmm8, byte [rsi + r8 + 23], 8 - QUAD $0x170e44203a0f4666; BYTE $0x09 // pinsrb xmm8, byte [rsi + r9 + 23], 9 - QUAD $0x170644203a0f4466; BYTE $0x0a // pinsrb xmm8, byte [rsi + rax + 23], 10 - QUAD $0x173e44203a0f4666; BYTE $0x0b // pinsrb xmm8, byte [rsi + r15 + 23], 11 - QUAD $0x172644203a0f4666; BYTE $0x0c // pinsrb xmm8, byte [rsi + r12 + 23], 12 + QUAD $0x170644203a0f4466; BYTE $0x04 // pinsrb xmm8, byte [rsi + rax + 23], 4 + QUAD $0x170e44203a0f4466; BYTE $0x05 // pinsrb xmm8, byte [rsi + rcx + 23], 5 + QUAD $0x171644203a0f4466; BYTE $0x06 // pinsrb xmm8, byte [rsi + rdx + 23], 6 + QUAD $0x170644203a0f4666; BYTE $0x07 // pinsrb xmm8, byte [rsi + r8 + 23], 7 + QUAD $0x170e44203a0f4666; BYTE $0x08 // pinsrb xmm8, byte [rsi + r9 + 23], 8 + QUAD $0x171644203a0f4666; BYTE $0x09 // pinsrb xmm8, byte [rsi + r10 + 23], 9 + QUAD $0x173e44203a0f4666; BYTE $0x0a // pinsrb xmm8, byte [rsi + r15 + 23], 10 + QUAD $0x172644203a0f4666; BYTE $0x0b // pinsrb xmm8, byte [rsi + r12 + 23], 11 + QUAD $0x172e44203a0f4666; BYTE $0x0c // pinsrb xmm8, byte [rsi + r13 + 23], 12 QUAD $0x173e44203a0f4466; BYTE $0x0d // pinsrb xmm8, byte [rsi + rdi + 23], 13 QUAD $0x171e44203a0f4466; BYTE $0x0e // pinsrb xmm8, byte [rsi + rbx + 23], 14 - QUAD $0x171644203a0f4666; BYTE $0x0f // pinsrb xmm8, byte [rsi + r10 + 23], 15 + QUAD $0x173644203a0f4666; BYTE $0x0f // pinsrb xmm8, byte [rsi + r14 + 23], 15 LONG $0x640f4166; BYTE $0xdf // pcmpgtb xmm3, xmm15 QUAD $0x000000f0ad6f0f66 // movdqa xmm5, oword 240[rbp] /* [rip + .LCPI7_15] */ LONG $0xdddb0f66 // pand xmm3, xmm5 @@ -36319,18 +37705,18 @@ LBB7_85: LONG $0xdb0f4466; BYTE $0xc6 // pand xmm8, xmm6 LONG $0xeb0f4466; BYTE $0xc3 // por xmm8, xmm3 QUAD $0x191e4c203a0f4266; BYTE $0x03 // pinsrb xmm1, byte [rsi + r11 + 25], 3 - QUAD $0x19364c203a0f4266; BYTE $0x04 // pinsrb xmm1, byte [rsi + r14 + 25], 4 - QUAD $0x192e4c203a0f4266; BYTE $0x05 // pinsrb xmm1, byte [rsi + r13 + 25], 5 - QUAD $0x06190e4c203a0f66 // pinsrb xmm1, byte [rsi + rcx + 25], 6 - QUAD $0x0719164c203a0f66 // pinsrb xmm1, byte [rsi + rdx + 25], 7 - QUAD $0x19064c203a0f4266; BYTE $0x08 // pinsrb xmm1, byte [rsi + r8 + 25], 8 - QUAD $0x190e4c203a0f4266; BYTE $0x09 // pinsrb xmm1, byte [rsi + r9 + 25], 9 - QUAD $0x0a19064c203a0f66 // pinsrb xmm1, byte [rsi + rax + 25], 10 - QUAD $0x193e4c203a0f4266; BYTE $0x0b // pinsrb xmm1, byte [rsi + r15 + 25], 11 - QUAD $0x19264c203a0f4266; BYTE $0x0c // pinsrb xmm1, byte [rsi + r12 + 25], 12 + QUAD $0x0419064c203a0f66 // pinsrb xmm1, byte [rsi + rax + 25], 4 + QUAD $0x05190e4c203a0f66 // pinsrb xmm1, byte [rsi + rcx + 25], 5 + QUAD $0x0619164c203a0f66 // pinsrb xmm1, byte [rsi + rdx + 25], 6 + QUAD $0x19064c203a0f4266; BYTE $0x07 // pinsrb xmm1, byte [rsi + r8 + 25], 7 + QUAD $0x190e4c203a0f4266; BYTE $0x08 // pinsrb xmm1, byte [rsi + r9 + 25], 8 + QUAD $0x19164c203a0f4266; BYTE $0x09 // pinsrb xmm1, byte [rsi + r10 + 25], 9 + QUAD $0x193e4c203a0f4266; BYTE $0x0a // pinsrb xmm1, byte [rsi + r15 + 25], 10 + QUAD $0x19264c203a0f4266; BYTE $0x0b // pinsrb xmm1, byte [rsi + r12 + 25], 11 + QUAD $0x192e4c203a0f4266; BYTE $0x0c // pinsrb xmm1, byte [rsi + r13 + 25], 12 QUAD $0x0d193e4c203a0f66 // pinsrb xmm1, byte [rsi + rdi + 25], 13 QUAD $0x0e191e4c203a0f66 // pinsrb xmm1, byte [rsi + rbx + 25], 14 - QUAD $0x19164c203a0f4266; BYTE $0x0f // pinsrb xmm1, byte [rsi + r10 + 25], 15 + QUAD $0x19364c203a0f4266; BYTE $0x0f // pinsrb xmm1, byte [rsi + r14 + 25], 15 LONG $0xeb0f4466; BYTE $0xc2 // por xmm8, xmm2 LONG $0x640f4166; BYTE $0xcf // pcmpgtb xmm1, xmm15 LONG $0xd16f0f66 // movdqa xmm2, xmm1 @@ -36338,73 +37724,73 @@ LBB7_85: LONG $0xd3db0f66 // pand xmm2, xmm3 LONG $0xd1f80f66 // psubb xmm2, xmm1 QUAD $0x181e54203a0f4666; BYTE $0x03 // pinsrb xmm10, byte [rsi + r11 + 24], 3 - QUAD $0x183654203a0f4666; BYTE $0x04 // pinsrb xmm10, byte [rsi + r14 + 24], 4 - QUAD $0x182e54203a0f4666; BYTE $0x05 // pinsrb xmm10, byte [rsi + r13 + 24], 5 - QUAD $0x180e54203a0f4466; BYTE $0x06 // pinsrb xmm10, byte [rsi + rcx + 24], 6 - QUAD $0x181654203a0f4466; BYTE $0x07 // pinsrb xmm10, byte [rsi + rdx + 24], 7 - QUAD $0x180654203a0f4666; BYTE $0x08 // pinsrb xmm10, byte [rsi + r8 + 24], 8 - QUAD $0x180e54203a0f4666; BYTE $0x09 // pinsrb xmm10, byte [rsi + r9 + 24], 9 - QUAD $0x180654203a0f4466; BYTE $0x0a // pinsrb xmm10, byte [rsi + rax + 24], 10 - QUAD $0x183e54203a0f4666; BYTE $0x0b // pinsrb xmm10, byte [rsi + r15 + 24], 11 - QUAD $0x182654203a0f4666; BYTE $0x0c // pinsrb xmm10, byte [rsi + r12 + 24], 12 + QUAD $0x180654203a0f4466; BYTE $0x04 // pinsrb xmm10, byte [rsi + rax + 24], 4 + QUAD $0x180e54203a0f4466; BYTE $0x05 // pinsrb xmm10, byte [rsi + rcx + 24], 5 + QUAD $0x181654203a0f4466; BYTE $0x06 // pinsrb xmm10, byte [rsi + rdx + 24], 6 + QUAD $0x180654203a0f4666; BYTE $0x07 // pinsrb xmm10, byte [rsi + r8 + 24], 7 + QUAD $0x180e54203a0f4666; BYTE $0x08 // pinsrb xmm10, byte [rsi + r9 + 24], 8 + QUAD $0x181654203a0f4666; BYTE $0x09 // pinsrb xmm10, byte [rsi + r10 + 24], 9 + QUAD $0x183e54203a0f4666; BYTE $0x0a // pinsrb xmm10, byte [rsi + r15 + 24], 10 + QUAD $0x182654203a0f4666; BYTE $0x0b // pinsrb xmm10, byte [rsi + r12 + 24], 11 + QUAD $0x182e54203a0f4666; BYTE $0x0c // pinsrb xmm10, byte [rsi + r13 + 24], 12 QUAD $0x183e54203a0f4466; BYTE $0x0d // pinsrb xmm10, byte [rsi + rdi + 24], 13 QUAD $0x181e54203a0f4466; BYTE $0x0e // pinsrb xmm10, byte [rsi + rbx + 24], 14 - QUAD $0x181654203a0f4666; BYTE $0x0f // pinsrb xmm10, byte [rsi + r10 + 24], 15 + QUAD $0x183654203a0f4666; BYTE $0x0f // pinsrb xmm10, byte [rsi + r14 + 24], 15 LONG $0x640f4566; BYTE $0xd7 // pcmpgtb xmm10, xmm15 LONG $0xdb0f4466; BYTE $0xd3 // pand xmm10, xmm3 QUAD $0x1a1e5c203a0f4666; BYTE $0x03 // pinsrb xmm11, byte [rsi + r11 + 26], 3 - QUAD $0x1a365c203a0f4666; BYTE $0x04 // pinsrb xmm11, byte [rsi + r14 + 26], 4 - QUAD $0x1a2e5c203a0f4666; BYTE $0x05 // pinsrb xmm11, byte [rsi + r13 + 26], 5 - QUAD $0x1a0e5c203a0f4466; BYTE $0x06 // pinsrb xmm11, byte [rsi + rcx + 26], 6 - QUAD $0x1a165c203a0f4466; BYTE $0x07 // pinsrb xmm11, byte [rsi + rdx + 26], 7 - QUAD $0x1a065c203a0f4666; BYTE $0x08 // pinsrb xmm11, byte [rsi + r8 + 26], 8 - QUAD $0x1a0e5c203a0f4666; BYTE $0x09 // pinsrb xmm11, byte [rsi + r9 + 26], 9 - QUAD $0x1a065c203a0f4466; BYTE $0x0a // pinsrb xmm11, byte [rsi + rax + 26], 10 - QUAD $0x1a3e5c203a0f4666; BYTE $0x0b // pinsrb xmm11, byte [rsi + r15 + 26], 11 - QUAD $0x1a265c203a0f4666; BYTE $0x0c // pinsrb xmm11, byte [rsi + r12 + 26], 12 + QUAD $0x1a065c203a0f4466; BYTE $0x04 // pinsrb xmm11, byte [rsi + rax + 26], 4 + QUAD $0x1a0e5c203a0f4466; BYTE $0x05 // pinsrb xmm11, byte [rsi + rcx + 26], 5 + QUAD $0x1a165c203a0f4466; BYTE $0x06 // pinsrb xmm11, byte [rsi + rdx + 26], 6 + QUAD $0x1a065c203a0f4666; BYTE $0x07 // pinsrb xmm11, byte [rsi + r8 + 26], 7 + QUAD $0x1a0e5c203a0f4666; BYTE $0x08 // pinsrb xmm11, byte [rsi + r9 + 26], 8 + QUAD $0x1a165c203a0f4666; BYTE $0x09 // pinsrb xmm11, byte [rsi + r10 + 26], 9 + QUAD $0x1a3e5c203a0f4666; BYTE $0x0a // pinsrb xmm11, byte [rsi + r15 + 26], 10 + QUAD $0x1a265c203a0f4666; BYTE $0x0b // pinsrb xmm11, byte [rsi + r12 + 26], 11 + QUAD $0x1a2e5c203a0f4666; BYTE $0x0c // pinsrb xmm11, byte [rsi + r13 + 26], 12 QUAD $0x1a3e5c203a0f4466; BYTE $0x0d // pinsrb xmm11, byte [rsi + rdi + 26], 13 QUAD $0x1a1e5c203a0f4466; BYTE $0x0e // pinsrb xmm11, byte [rsi + rbx + 26], 14 - QUAD $0x1a165c203a0f4666; BYTE $0x0f // pinsrb xmm11, byte [rsi + r10 + 26], 15 + QUAD $0x1a365c203a0f4666; BYTE $0x0f // pinsrb xmm11, byte [rsi + r14 + 26], 15 LONG $0x640f4566; BYTE $0xdf // pcmpgtb xmm11, xmm15 QUAD $0x0000b09ddb0f4466; BYTE $0x00 // pand xmm11, oword 176[rbp] /* [rip + .LCPI7_11] */ LONG $0xeb0f4566; BYTE $0xda // por xmm11, xmm10 LONG $0xeb0f4466; BYTE $0xda // por xmm11, xmm2 QUAD $0x1b1e4c203a0f4666; BYTE $0x03 // pinsrb xmm9, byte [rsi + r11 + 27], 3 - QUAD $0x1b364c203a0f4666; BYTE $0x04 // pinsrb xmm9, byte [rsi + r14 + 27], 4 - QUAD $0x1b2e4c203a0f4666; BYTE $0x05 // pinsrb xmm9, byte [rsi + r13 + 27], 5 - QUAD $0x1b0e4c203a0f4466; BYTE $0x06 // pinsrb xmm9, byte [rsi + rcx + 27], 6 - QUAD $0x1b164c203a0f4466; BYTE $0x07 // pinsrb xmm9, byte [rsi + rdx + 27], 7 - QUAD $0x1b064c203a0f4666; BYTE $0x08 // pinsrb xmm9, byte [rsi + r8 + 27], 8 - QUAD $0x1b0e4c203a0f4666; BYTE $0x09 // pinsrb xmm9, byte [rsi + r9 + 27], 9 - QUAD $0x1b064c203a0f4466; BYTE $0x0a // pinsrb xmm9, byte [rsi + rax + 27], 10 - QUAD $0x1b3e4c203a0f4666; BYTE $0x0b // pinsrb xmm9, byte [rsi + r15 + 27], 11 - QUAD $0x1b264c203a0f4666; BYTE $0x0c // pinsrb xmm9, byte [rsi + r12 + 27], 12 + QUAD $0x1b064c203a0f4466; BYTE $0x04 // pinsrb xmm9, byte [rsi + rax + 27], 4 + QUAD $0x1b0e4c203a0f4466; BYTE $0x05 // pinsrb xmm9, byte [rsi + rcx + 27], 5 + QUAD $0x1b164c203a0f4466; BYTE $0x06 // pinsrb xmm9, byte [rsi + rdx + 27], 6 + QUAD $0x1b064c203a0f4666; BYTE $0x07 // pinsrb xmm9, byte [rsi + r8 + 27], 7 + QUAD $0x1b0e4c203a0f4666; BYTE $0x08 // pinsrb xmm9, byte [rsi + r9 + 27], 8 + QUAD $0x1b164c203a0f4666; BYTE $0x09 // pinsrb xmm9, byte [rsi + r10 + 27], 9 + QUAD $0x1b3e4c203a0f4666; BYTE $0x0a // pinsrb xmm9, byte [rsi + r15 + 27], 10 + QUAD $0x1b264c203a0f4666; BYTE $0x0b // pinsrb xmm9, byte [rsi + r12 + 27], 11 + QUAD $0x1b2e4c203a0f4666; BYTE $0x0c // pinsrb xmm9, byte [rsi + r13 + 27], 12 QUAD $0x1b3e4c203a0f4466; BYTE $0x0d // pinsrb xmm9, byte [rsi + rdi + 27], 13 QUAD $0x1b1e4c203a0f4466; BYTE $0x0e // pinsrb xmm9, byte [rsi + rbx + 27], 14 - QUAD $0x1b164c203a0f4666; BYTE $0x0f // pinsrb xmm9, byte [rsi + r10 + 27], 15 + QUAD $0x1b364c203a0f4666; BYTE $0x0f // pinsrb xmm9, byte [rsi + r14 + 27], 15 QUAD $0x1c1e64203a0f4266; BYTE $0x03 // pinsrb xmm4, byte [rsi + r11 + 28], 3 - QUAD $0x1c3664203a0f4266; BYTE $0x04 // pinsrb xmm4, byte [rsi + r14 + 28], 4 - QUAD $0x1c2e64203a0f4266; BYTE $0x05 // pinsrb xmm4, byte [rsi + r13 + 28], 5 - QUAD $0x061c0e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 28], 6 - QUAD $0x071c1664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 28], 7 - QUAD $0x1c0664203a0f4266; BYTE $0x08 // pinsrb xmm4, byte [rsi + r8 + 28], 8 - QUAD $0x1c0e64203a0f4266; BYTE $0x09 // pinsrb xmm4, byte [rsi + r9 + 28], 9 - QUAD $0x0a1c0664203a0f66 // pinsrb xmm4, byte [rsi + rax + 28], 10 - QUAD $0x1c3e64203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r15 + 28], 11 - QUAD $0x1c2664203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r12 + 28], 12 + QUAD $0x041c0664203a0f66 // pinsrb xmm4, byte [rsi + rax + 28], 4 + QUAD $0x051c0e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 28], 5 + QUAD $0x061c1664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 28], 6 + QUAD $0x1c0664203a0f4266; BYTE $0x07 // pinsrb xmm4, byte [rsi + r8 + 28], 7 + QUAD $0x1c0e64203a0f4266; BYTE $0x08 // pinsrb xmm4, byte [rsi + r9 + 28], 8 + QUAD $0x1c1664203a0f4266; BYTE $0x09 // pinsrb xmm4, byte [rsi + r10 + 28], 9 + QUAD $0x1c3e64203a0f4266; BYTE $0x0a // pinsrb xmm4, byte [rsi + r15 + 28], 10 + QUAD $0x1c2664203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r12 + 28], 11 + QUAD $0x1c2e64203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r13 + 28], 12 QUAD $0x0d1c3e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 28], 13 QUAD $0x0e1c1e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 28], 14 - QUAD $0x1c1664203a0f4266; BYTE $0x0f // pinsrb xmm4, byte [rsi + r10 + 28], 15 + QUAD $0x1c3664203a0f4266; BYTE $0x0f // pinsrb xmm4, byte [rsi + r14 + 28], 15 QUAD $0x1d1e6c203a0f4666; BYTE $0x03 // pinsrb xmm13, byte [rsi + r11 + 29], 3 - QUAD $0x1d366c203a0f4666; BYTE $0x04 // pinsrb xmm13, byte [rsi + r14 + 29], 4 - QUAD $0x1d2e6c203a0f4666; BYTE $0x05 // pinsrb xmm13, byte [rsi + r13 + 29], 5 - QUAD $0x1d0e6c203a0f4466; BYTE $0x06 // pinsrb xmm13, byte [rsi + rcx + 29], 6 - QUAD $0x1d166c203a0f4466; BYTE $0x07 // pinsrb xmm13, byte [rsi + rdx + 29], 7 - QUAD $0x1d066c203a0f4666; BYTE $0x08 // pinsrb xmm13, byte [rsi + r8 + 29], 8 - QUAD $0x1d0e6c203a0f4666; BYTE $0x09 // pinsrb xmm13, byte [rsi + r9 + 29], 9 - QUAD $0x1d066c203a0f4466; BYTE $0x0a // pinsrb xmm13, byte [rsi + rax + 29], 10 - QUAD $0x1d3e6c203a0f4666; BYTE $0x0b // pinsrb xmm13, byte [rsi + r15 + 29], 11 - QUAD $0x1d266c203a0f4666; BYTE $0x0c // pinsrb xmm13, byte [rsi + r12 + 29], 12 + QUAD $0x1d066c203a0f4466; BYTE $0x04 // pinsrb xmm13, byte [rsi + rax + 29], 4 + QUAD $0x1d0e6c203a0f4466; BYTE $0x05 // pinsrb xmm13, byte [rsi + rcx + 29], 5 + QUAD $0x1d166c203a0f4466; BYTE $0x06 // pinsrb xmm13, byte [rsi + rdx + 29], 6 + QUAD $0x1d066c203a0f4666; BYTE $0x07 // pinsrb xmm13, byte [rsi + r8 + 29], 7 + QUAD $0x1d0e6c203a0f4666; BYTE $0x08 // pinsrb xmm13, byte [rsi + r9 + 29], 8 + QUAD $0x1d166c203a0f4666; BYTE $0x09 // pinsrb xmm13, byte [rsi + r10 + 29], 9 + QUAD $0x1d3e6c203a0f4666; BYTE $0x0a // pinsrb xmm13, byte [rsi + r15 + 29], 10 + QUAD $0x1d266c203a0f4666; BYTE $0x0b // pinsrb xmm13, byte [rsi + r12 + 29], 11 + QUAD $0x1d2e6c203a0f4666; BYTE $0x0c // pinsrb xmm13, byte [rsi + r13 + 29], 12 QUAD $0x1d3e6c203a0f4466; BYTE $0x0d // pinsrb xmm13, byte [rsi + rdi + 29], 13 QUAD $0x1d1e6c203a0f4466; BYTE $0x0e // pinsrb xmm13, byte [rsi + rbx + 29], 14 LONG $0x6f0f4166; BYTE $0xcf // movdqa xmm1, xmm15 @@ -36413,37 +37799,36 @@ LBB7_85: LONG $0x640f4166; BYTE $0xe7 // pcmpgtb xmm4, xmm15 QUAD $0x000000d0a5db0f66 // pand xmm4, oword 208[rbp] /* [rip + .LCPI7_13] */ LONG $0xeb0f4166; BYTE $0xe1 // por xmm4, xmm9 - QUAD $0x1d166c203a0f4666; BYTE $0x0f // pinsrb xmm13, byte [rsi + r10 + 29], 15 + QUAD $0x1d366c203a0f4666; BYTE $0x0f // pinsrb xmm13, byte [rsi + r14 + 29], 15 LONG $0x640f4566; BYTE $0xef // pcmpgtb xmm13, xmm15 LONG $0xdb0f4466; BYTE $0xef // pand xmm13, xmm7 LONG $0xeb0f4466; BYTE $0xec // por xmm13, xmm4 QUAD $0x1e1e64203a0f4666; BYTE $0x03 // pinsrb xmm12, byte [rsi + r11 + 30], 3 QUAD $0x1f1e44203a0f4266; BYTE $0x03 // pinsrb xmm0, byte [rsi + r11 + 31], 3 - QUAD $0x1e3664203a0f4666; BYTE $0x04 // pinsrb xmm12, byte [rsi + r14 + 30], 4 - QUAD $0x1f3644203a0f4266; BYTE $0x04 // pinsrb xmm0, byte [rsi + r14 + 31], 4 - QUAD $0x1e2e64203a0f4666; BYTE $0x05 // pinsrb xmm12, byte [rsi + r13 + 30], 5 - QUAD $0x1f2e44203a0f4266; BYTE $0x05 // pinsrb xmm0, byte [rsi + r13 + 31], 5 - QUAD $0x1e0e64203a0f4466; BYTE $0x06 // pinsrb xmm12, byte [rsi + rcx + 30], 6 - QUAD $0x061f0e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 31], 6 - QUAD $0x1e1664203a0f4466; BYTE $0x07 // pinsrb xmm12, byte [rsi + rdx + 30], 7 - QUAD $0x071f1644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 31], 7 - QUAD $0x1e0664203a0f4666; BYTE $0x08 // pinsrb xmm12, byte [rsi + r8 + 30], 8 - QUAD $0x1f0644203a0f4266; BYTE $0x08 // pinsrb xmm0, byte [rsi + r8 + 31], 8 - QUAD $0x1e0e64203a0f4666; BYTE $0x09 // pinsrb xmm12, byte [rsi + r9 + 30], 9 - QUAD $0x1f0e44203a0f4266; BYTE $0x09 // pinsrb xmm0, byte [rsi + r9 + 31], 9 - QUAD $0x1e0664203a0f4466; BYTE $0x0a // pinsrb xmm12, byte [rsi + rax + 30], 10 - QUAD $0x0a1f0644203a0f66 // pinsrb xmm0, byte [rsi + rax + 31], 10 - QUAD $0x1e3e64203a0f4666; BYTE $0x0b // pinsrb xmm12, byte [rsi + r15 + 30], 11 - QUAD $0x1f3e44203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r15 + 31], 11 - QUAD $0x1e2664203a0f4666; BYTE $0x0c // pinsrb xmm12, byte [rsi + r12 + 30], 12 - QUAD $0x1f2644203a0f4266; BYTE $0x0c // pinsrb xmm0, byte [rsi + r12 + 31], 12 + QUAD $0x1e0664203a0f4466; BYTE $0x04 // pinsrb xmm12, byte [rsi + rax + 30], 4 + QUAD $0x041f0644203a0f66 // pinsrb xmm0, byte [rsi + rax + 31], 4 + QUAD $0x1e0e64203a0f4466; BYTE $0x05 // pinsrb xmm12, byte [rsi + rcx + 30], 5 + QUAD $0x051f0e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 31], 5 + QUAD $0x1e1664203a0f4466; BYTE $0x06 // pinsrb xmm12, byte [rsi + rdx + 30], 6 + QUAD $0x061f1644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 31], 6 + QUAD $0x1e0664203a0f4666; BYTE $0x07 // pinsrb xmm12, byte [rsi + r8 + 30], 7 + QUAD $0x1f0644203a0f4266; BYTE $0x07 // pinsrb xmm0, byte [rsi + r8 + 31], 7 + QUAD $0x1e0e64203a0f4666; BYTE $0x08 // pinsrb xmm12, byte [rsi + r9 + 30], 8 + QUAD $0x1f0e44203a0f4266; BYTE $0x08 // pinsrb xmm0, byte [rsi + r9 + 31], 8 + QUAD $0x1e1664203a0f4666; BYTE $0x09 // pinsrb xmm12, byte [rsi + r10 + 30], 9 + QUAD $0x1f1644203a0f4266; BYTE $0x09 // pinsrb xmm0, byte [rsi + r10 + 31], 9 + QUAD $0x1e3e64203a0f4666; BYTE $0x0a // pinsrb xmm12, byte [rsi + r15 + 30], 10 + QUAD $0x1f3e44203a0f4266; BYTE $0x0a // pinsrb xmm0, byte [rsi + r15 + 31], 10 + QUAD $0x1e2664203a0f4666; BYTE $0x0b // pinsrb xmm12, byte [rsi + r12 + 30], 11 + QUAD $0x1f2644203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r12 + 31], 11 + QUAD $0x1e2e64203a0f4666; BYTE $0x0c // pinsrb xmm12, byte [rsi + r13 + 30], 12 + QUAD $0x1f2e44203a0f4266; BYTE $0x0c // pinsrb xmm0, byte [rsi + r13 + 31], 12 QUAD $0x1e3e64203a0f4466; BYTE $0x0d // pinsrb xmm12, byte [rsi + rdi + 30], 13 QUAD $0x0d1f3e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 31], 13 QUAD $0x1e1e64203a0f4466; BYTE $0x0e // pinsrb xmm12, byte [rsi + rbx + 30], 14 QUAD $0x0e1f1e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 31], 14 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] - QUAD $0x1e1664203a0f4666; BYTE $0x0f // pinsrb xmm12, byte [rsi + r10 + 30], 15 - QUAD $0x1f1644203a0f4266; BYTE $0x0f // pinsrb xmm0, byte [rsi + r10 + 31], 15 + QUAD $0x1e3664203a0f4666; BYTE $0x0f // pinsrb xmm12, byte [rsi + r14 + 30], 15 + QUAD $0x1f3644203a0f4266; BYTE $0x0f // pinsrb xmm0, byte [rsi + r14 + 31], 15 LONG $0xeb0f4566; BYTE $0xeb // por xmm13, xmm11 LONG $0x640f4566; BYTE $0xe7 // pcmpgtb xmm12, xmm15 LONG $0xdb0f4466; BYTE $0xe5 // pand xmm12, xmm5 @@ -36454,7 +37839,7 @@ LBB7_85: LONG $0xeb0f4166; BYTE $0xc5 // por xmm0, xmm13 LONG $0x6f0f4166; BYTE $0xc8 // movdqa xmm1, xmm8 LONG $0xc8600f66 // punpcklbw xmm1, xmm0 - QUAD $0x0000d024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 208] + QUAD $0x0000a024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 160] LONG $0xd46f0f66 // movdqa xmm2, xmm4 LONG $0x600f4166; BYTE $0xd6 // punpcklbw xmm2, xmm14 LONG $0xda6f0f66 // movdqa xmm3, xmm2 @@ -36466,6 +37851,7 @@ LBB7_85: LONG $0x610f4166; BYTE $0xc0 // punpcklwd xmm0, xmm8 LONG $0x690f4166; BYTE $0xe0 // punpckhwd xmm4, xmm8 QUAD $0x000000f0248c8b48 // mov rcx, qword [rsp + 240] + LONG $0x24048b48 // mov rax, qword [rsp] LONG $0x647f0ff3; WORD $0x3088 // movdqu oword [rax + 4*rcx + 48], xmm4 LONG $0x447f0ff3; WORD $0x2088 // movdqu oword [rax + 4*rcx + 32], xmm0 LONG $0x547f0ff3; WORD $0x1088 // movdqu oword [rax + 4*rcx + 16], xmm2 @@ -36476,44 +37862,44 @@ LBB7_85: JNE LBB7_85 QUAD $0x0000012024948b4c // mov r10, qword [rsp + 288] QUAD $0x000000e824943b4c // cmp r10, qword [rsp + 232] - LONG $0x24348a44 // mov r14b, byte [rsp] + LONG $0x24648a44; BYTE $0x08 // mov r12b, byte [rsp + 8] QUAD $0x0000010824b48b48 // mov rsi, qword [rsp + 264] QUAD $0x00000088249c8b4c // mov r11, qword [rsp + 136] JNE LBB7_87 JMP LBB7_90 LBB7_66: - LONG $0xf0e28349 // and r10, -16 - WORD $0x894c; BYTE $0xd0 // mov rax, r10 + LONG $0xf0e78349 // and r15, -16 + WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi QUAD $0x0000014024848948 // mov qword [rsp + 320], rax - QUAD $0x000000e82494894c // mov qword [rsp + 232], r10 - LONG $0x94048d4b // lea rax, [r12 + 4*r10] - LONG $0x24448948; BYTE $0x48 // mov qword [rsp + 72], rax - LONG $0x2444b60f; BYTE $0x28 // movzx eax, byte [rsp + 40] + QUAD $0x000000e824bc894c // mov qword [rsp + 232], r15 + LONG $0x24048b48 // mov rax, qword [rsp] + LONG $0xb8048d4a // lea rax, [rax + 4*r15] + LONG $0x24448948; BYTE $0x78 // mov qword [rsp + 120], rax + LONG $0xc2b60f41 // movzx eax, r10b LONG $0xc86e0f66 // movd xmm1, eax LONG $0xc0ef0f66 // pxor xmm0, xmm0 LONG $0x00380f66; BYTE $0xc8 // pshufb xmm1, xmm0 QUAD $0x000120248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 288], xmm1 WORD $0xc031 // xor eax, eax - QUAD $0x0000008024a4894c // mov qword [rsp + 128], r12 LBB7_67: - QUAD $0x0000009024848948 // mov qword [rsp + 144], rax - QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] + QUAD $0x000000b024848948 // mov qword [rsp + 176], rax + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] LONG $0x05e0c148 // shl rax, 5 + LONG $0x24448948; BYTE $0x20 // mov qword [rsp + 32], rax + WORD $0x8949; BYTE $0xc6 // mov r14, rax WORD $0x8948; BYTE $0xc2 // mov rdx, rax - WORD $0x8949; BYTE $0xc4 // mov r12, rax - WORD $0x8949; BYTE $0xc3 // mov r11, rax WORD $0x8948; BYTE $0xc7 // mov rdi, rax - LONG $0x24448948; BYTE $0x08 // mov qword [rsp + 8], rax + WORD $0x8949; BYTE $0xc5 // mov r13, rax WORD $0x8949; BYTE $0xc1 // mov r9, rax - WORD $0x8949; BYTE $0xc7 // mov r15, rax WORD $0x8949; BYTE $0xc2 // mov r10, rax - WORD $0x8949; BYTE $0xc6 // mov r14, rax + WORD $0x8949; BYTE $0xc3 // mov r11, rax + WORD $0x8949; BYTE $0xc7 // mov r15, rax WORD $0x8949; BYTE $0xc0 // mov r8, rax - LONG $0x24448948; BYTE $0x68 // mov qword [rsp + 104], rax + LONG $0x24448948; BYTE $0x38 // mov qword [rsp + 56], rax LONG $0x060cb60f // movzx ecx, byte [rsi + rax] LONG $0x6e0f4466; BYTE $0xd1 // movd xmm10, ecx LONG $0x064cb60f; BYTE $0x01 // movzx ecx, byte [rsi + rax + 1] @@ -36530,12 +37916,12 @@ LBB7_67: LONG $0xc16e0f66 // movd xmm0, ecx LONG $0x064cb60f; BYTE $0x07 // movzx ecx, byte [rsi + rax + 7] LONG $0xc96e0f66 // movd xmm1, ecx - QUAD $0x0000b0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 176], xmm1 + QUAD $0x0000c0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 192], xmm1 LONG $0x064cb60f; BYTE $0x08 // movzx ecx, byte [rsi + rax + 8] LONG $0x6e0f4466; BYTE $0xf1 // movd xmm14, ecx LONG $0x064cb60f; BYTE $0x09 // movzx ecx, byte [rsi + rax + 9] LONG $0xc96e0f66 // movd xmm1, ecx - QUAD $0x0000c0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 192], xmm1 + QUAD $0x0000d0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 208], xmm1 LONG $0x064cb60f; BYTE $0x0a // movzx ecx, byte [rsi + rax + 10] LONG $0xd16e0f66 // movd xmm2, ecx LONG $0x064cb60f; BYTE $0x0b // movzx ecx, byte [rsi + rax + 11] @@ -36545,171 +37931,172 @@ LBB7_67: QUAD $0x000130248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 304], xmm1 LONG $0x064cb60f; BYTE $0x10 // movzx ecx, byte [rsi + rax + 16] LONG $0x6e0f4466; BYTE $0xe9 // movd xmm13, ecx - LONG $0x24448948; BYTE $0x60 // mov qword [rsp + 96], rax + QUAD $0x000000a024848948 // mov qword [rsp + 160], rax LONG $0x064cb60f; BYTE $0x18 // movzx ecx, byte [rsi + rax + 24] LONG $0x6e0f4466; BYTE $0xf9 // movd xmm15, ecx - WORD $0x8949; BYTE $0xc5 // mov r13, rax - LONG $0x20cd8349 // or r13, 32 - LONG $0x246c894c; BYTE $0x38 // mov qword [rsp + 56], r13 - LONG $0x40ca8348 // or rdx, 64 - LONG $0x24548948; BYTE $0x58 // mov qword [rsp + 88], rdx - LONG $0x60cc8349 // or r12, 96 - LONG $0x2464894c; BYTE $0x10 // mov qword [rsp + 16], r12 - LONG $0x80cb8149; WORD $0x0000; BYTE $0x00 // or r11, 128 + WORD $0x8949; BYTE $0xc4 // mov r12, rax + LONG $0x20cc8349 // or r12, 32 + LONG $0x2464894c; BYTE $0x60 // mov qword [rsp + 96], r12 + LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] + LONG $0x40c98348 // or rcx, 64 + LONG $0x244c8948; BYTE $0x20 // mov qword [rsp + 32], rcx + LONG $0x60ce8349 // or r14, 96 + LONG $0x80ca8148; WORD $0x0000; BYTE $0x00 // or rdx, 128 LONG $0xa0cf8148; WORD $0x0000; BYTE $0x00 // or rdi, 160 - LONG $0x244c8b48; BYTE $0x08 // mov rcx, qword [rsp + 8] - LONG $0xc0c98148; WORD $0x0000; BYTE $0x00 // or rcx, 192 - LONG $0x244c8948; BYTE $0x08 // mov qword [rsp + 8], rcx + LONG $0xc0cd8149; WORD $0x0000; BYTE $0x00 // or r13, 192 + LONG $0x246c894c; BYTE $0x68 // mov qword [rsp + 104], r13 LONG $0xe0c98149; WORD $0x0000; BYTE $0x00 // or r9, 224 - LONG $0x00cf8149; WORD $0x0001; BYTE $0x00 // or r15, 256 - LONG $0x247c894c; BYTE $0x70 // mov qword [rsp + 112], r15 - LONG $0x20ca8149; WORD $0x0001; BYTE $0x00 // or r10, 288 - LONG $0x2454894c; BYTE $0x78 // mov qword [rsp + 120], r10 - LONG $0x40ce8149; WORD $0x0001; BYTE $0x00 // or r14, 320 + LONG $0x00ca8149; WORD $0x0001; BYTE $0x00 // or r10, 256 + LONG $0x2454894c; BYTE $0x70 // mov qword [rsp + 112], r10 + LONG $0x20cb8149; WORD $0x0001; BYTE $0x00 // or r11, 288 + LONG $0x40cf8149; WORD $0x0001; BYTE $0x00 // or r15, 320 LONG $0x60c88149; WORD $0x0001; BYTE $0x00 // or r8, 352 - QUAD $0x000000d02484894c // mov qword [rsp + 208], r8 - LONG $0x24448b4c; BYTE $0x68 // mov r8, qword [rsp + 104] + LONG $0x2444894c; BYTE $0x28 // mov qword [rsp + 40], r8 + LONG $0x24448b4c; BYTE $0x38 // mov r8, qword [rsp + 56] LONG $0x80c88149; WORD $0x0001; BYTE $0x00 // or r8, 384 WORD $0x8948; BYTE $0xc3 // mov rbx, rax LONG $0xa0cb8148; WORD $0x0001; BYTE $0x00 // or rbx, 416 - LONG $0x241c8948 // mov qword [rsp], rbx + LONG $0x245c8948; BYTE $0x10 // mov qword [rsp + 16], rbx WORD $0x8948; BYTE $0xc3 // mov rbx, rax LONG $0xc0cb8148; WORD $0x0001; BYTE $0x00 // or rbx, 448 LONG $0x245c8948; BYTE $0x18 // mov qword [rsp + 24], rbx - WORD $0x8948; BYTE $0xc3 // mov rbx, rax - LONG $0xe0cb8148; WORD $0x0001; BYTE $0x00 // or rbx, 480 - LONG $0x245c8948; BYTE $0x20 // mov qword [rsp + 32], rbx - QUAD $0x012e14203a0f4666 // pinsrb xmm10, byte [rsi + r13], 1 - QUAD $0x021614203a0f4466 // pinsrb xmm10, byte [rsi + rdx], 2 - QUAD $0x032614203a0f4666 // pinsrb xmm10, byte [rsi + r12], 3 - WORD $0x894d; BYTE $0xdc // mov r12, r11 - LONG $0x245c894c; BYTE $0x30 // mov qword [rsp + 48], r11 - QUAD $0x041e14203a0f4666 // pinsrb xmm10, byte [rsi + r11], 4 + LONG $0x01e00d48; WORD $0x0000 // or rax, 480 + LONG $0x24448948; BYTE $0x48 // mov qword [rsp + 72], rax + QUAD $0x012614203a0f4666 // pinsrb xmm10, byte [rsi + r12], 1 + QUAD $0x020e14203a0f4466 // pinsrb xmm10, byte [rsi + rcx], 2 + QUAD $0x033614203a0f4666 // pinsrb xmm10, byte [rsi + r14], 3 + LONG $0x2474894c; BYTE $0x40 // mov qword [rsp + 64], r14 + QUAD $0x041614203a0f4466 // pinsrb xmm10, byte [rsi + rdx], 4 QUAD $0x053e14203a0f4466 // pinsrb xmm10, byte [rsi + rdi], 5 - LONG $0x247c8948; BYTE $0x40 // mov qword [rsp + 64], rdi - QUAD $0x060e14203a0f4466 // pinsrb xmm10, byte [rsi + rcx], 6 + QUAD $0x062e14203a0f4666 // pinsrb xmm10, byte [rsi + r13], 6 QUAD $0x070e14203a0f4666 // pinsrb xmm10, byte [rsi + r9], 7 - WORD $0x894d; BYTE $0xcb // mov r11, r9 - QUAD $0x083e14203a0f4666 // pinsrb xmm10, byte [rsi + r15], 8 - QUAD $0x091614203a0f4666 // pinsrb xmm10, byte [rsi + r10], 9 - QUAD $0x0a3614203a0f4666 // pinsrb xmm10, byte [rsi + r14], 10 - QUAD $0x000000d024ac8b4c // mov r13, qword [rsp + 208] - QUAD $0x0b2e14203a0f4666 // pinsrb xmm10, byte [rsi + r13], 11 + QUAD $0x081614203a0f4666 // pinsrb xmm10, byte [rsi + r10], 8 + QUAD $0x091e14203a0f4666 // pinsrb xmm10, byte [rsi + r11], 9 + QUAD $0x0a3e14203a0f4666 // pinsrb xmm10, byte [rsi + r15], 10 + LONG $0x24648b4c; BYTE $0x28 // mov r12, qword [rsp + 40] + QUAD $0x0b2614203a0f4666 // pinsrb xmm10, byte [rsi + r12], 11 QUAD $0x0c0614203a0f4666 // pinsrb xmm10, byte [rsi + r8], 12 - LONG $0x24048b48 // mov rax, qword [rsp] - QUAD $0x0d0614203a0f4466 // pinsrb xmm10, byte [rsi + rax], 13 - WORD $0x8949; BYTE $0xc7 // mov r15, rax + LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] + QUAD $0x0d1e14203a0f4466 // pinsrb xmm10, byte [rsi + rbx], 13 LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] QUAD $0x0e0614203a0f4466 // pinsrb xmm10, byte [rsi + rax], 14 - QUAD $0x0f1e14203a0f4466 // pinsrb xmm10, byte [rsi + rbx], 15 + LONG $0x24548b4c; BYTE $0x48 // mov r10, qword [rsp + 72] + QUAD $0x0f1614203a0f4666 // pinsrb xmm10, byte [rsi + r10], 15 LONG $0x6f0f4566; BYTE $0xc2 // movdqa xmm8, xmm10 QUAD $0x012024a46f0f4466; WORD $0x0000 // movdqa xmm12, oword [rsp + 288] LONG $0xda0f4566; BYTE $0xc4 // pminub xmm8, xmm12 LONG $0x740f4566; BYTE $0xc2 // pcmpeqb xmm8, xmm10 - LONG $0x244c8b4c; BYTE $0x38 // mov r9, qword [rsp + 56] - QUAD $0x010e64203a0f4266; BYTE $0x01 // pinsrb xmm4, byte [rsi + r9 + 1], 1 - QUAD $0x02011664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 1], 2 - LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] - QUAD $0x03011e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 1], 3 - QUAD $0x012664203a0f4266; BYTE $0x04 // pinsrb xmm4, byte [rsi + r12 + 1], 4 + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + QUAD $0x01010664203a0f66 // pinsrb xmm4, byte [rsi + rax + 1], 1 + QUAD $0x02010e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 1], 2 + QUAD $0x013664203a0f4266; BYTE $0x03 // pinsrb xmm4, byte [rsi + r14 + 1], 3 + QUAD $0x04011664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 1], 4 QUAD $0x05013e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 1], 5 - QUAD $0x06010e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 1], 6 - QUAD $0x011e64203a0f4266; BYTE $0x07 // pinsrb xmm4, byte [rsi + r11 + 1], 7 - LONG $0x24548b4c; BYTE $0x70 // mov r10, qword [rsp + 112] - QUAD $0x011664203a0f4266; BYTE $0x08 // pinsrb xmm4, byte [rsi + r10 + 1], 8 - LONG $0x245c8b48; BYTE $0x78 // mov rbx, qword [rsp + 120] - QUAD $0x09011e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 1], 9 - QUAD $0x013664203a0f4266; BYTE $0x0a // pinsrb xmm4, byte [rsi + r14 + 1], 10 - QUAD $0x012e64203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r13 + 1], 11 + QUAD $0x012e64203a0f4266; BYTE $0x06 // pinsrb xmm4, byte [rsi + r13 + 1], 6 + WORD $0x894d; BYTE $0xce // mov r14, r9 + QUAD $0x010e64203a0f4266; BYTE $0x07 // pinsrb xmm4, byte [rsi + r9 + 1], 7 + LONG $0x245c8b48; BYTE $0x70 // mov rbx, qword [rsp + 112] + QUAD $0x08011e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 1], 8 + QUAD $0x011e64203a0f4266; BYTE $0x09 // pinsrb xmm4, byte [rsi + r11 + 1], 9 + QUAD $0x013e64203a0f4266; BYTE $0x0a // pinsrb xmm4, byte [rsi + r15 + 1], 10 + QUAD $0x012664203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r12 + 1], 11 QUAD $0x010664203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r8 + 1], 12 - QUAD $0x013e64203a0f4266; BYTE $0x0d // pinsrb xmm4, byte [rsi + r15 + 1], 13 + LONG $0x244c8b4c; BYTE $0x10 // mov r9, qword [rsp + 16] + QUAD $0x010e64203a0f4266; BYTE $0x0d // pinsrb xmm4, byte [rsi + r9 + 1], 13 + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] QUAD $0x0e010664203a0f66 // pinsrb xmm4, byte [rsi + rax + 1], 14 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - QUAD $0x0f010664203a0f66 // pinsrb xmm4, byte [rsi + rax + 1], 15 + QUAD $0x011664203a0f4266; BYTE $0x0f // pinsrb xmm4, byte [rsi + r10 + 1], 15 + LONG $0x244c8b4c; BYTE $0x60 // mov r9, qword [rsp + 96] QUAD $0x020e74203a0f4266; BYTE $0x01 // pinsrb xmm6, byte [rsi + r9 + 2], 1 - QUAD $0x02021674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 2], 2 - LONG $0x247c8b4c; BYTE $0x10 // mov r15, qword [rsp + 16] - QUAD $0x023e74203a0f4266; BYTE $0x03 // pinsrb xmm6, byte [rsi + r15 + 2], 3 - QUAD $0x022674203a0f4266; BYTE $0x04 // pinsrb xmm6, byte [rsi + r12 + 2], 4 + QUAD $0x02020e74203a0f66 // pinsrb xmm6, byte [rsi + rcx + 2], 2 + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x03020674203a0f66 // pinsrb xmm6, byte [rsi + rax + 2], 3 + QUAD $0x04021674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 2], 4 QUAD $0x05023e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 2], 5 - QUAD $0x06020e74203a0f66 // pinsrb xmm6, byte [rsi + rcx + 2], 6 - QUAD $0x021e74203a0f4266; BYTE $0x07 // pinsrb xmm6, byte [rsi + r11 + 2], 7 - QUAD $0x021674203a0f4266; BYTE $0x08 // pinsrb xmm6, byte [rsi + r10 + 2], 8 - QUAD $0x09021e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 2], 9 - QUAD $0x023674203a0f4266; BYTE $0x0a // pinsrb xmm6, byte [rsi + r14 + 2], 10 - QUAD $0x022e74203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rsi + r13 + 2], 11 + QUAD $0x022e74203a0f4266; BYTE $0x06 // pinsrb xmm6, byte [rsi + r13 + 2], 6 + QUAD $0x023674203a0f4266; BYTE $0x07 // pinsrb xmm6, byte [rsi + r14 + 2], 7 + QUAD $0x08021e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 2], 8 + QUAD $0x021e74203a0f4266; BYTE $0x09 // pinsrb xmm6, byte [rsi + r11 + 2], 9 + QUAD $0x023e74203a0f4266; BYTE $0x0a // pinsrb xmm6, byte [rsi + r15 + 2], 10 + QUAD $0x022674203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rsi + r12 + 2], 11 QUAD $0x020674203a0f4266; BYTE $0x0c // pinsrb xmm6, byte [rsi + r8 + 2], 12 - LONG $0x243c8b48 // mov rdi, qword [rsp] - QUAD $0x0d023e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 2], 13 - LONG $0x247c8b4c; BYTE $0x18 // mov r15, qword [rsp + 24] - QUAD $0x023e74203a0f4266; BYTE $0x0e // pinsrb xmm6, byte [rsi + r15 + 2], 14 - QUAD $0x0f020674203a0f66 // pinsrb xmm6, byte [rsi + rax + 2], 15 + LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] + QUAD $0x0d020674203a0f66 // pinsrb xmm6, byte [rsi + rax + 2], 13 + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + QUAD $0x0e020674203a0f66 // pinsrb xmm6, byte [rsi + rax + 2], 14 + QUAD $0x021674203a0f4266; BYTE $0x0f // pinsrb xmm6, byte [rsi + r10 + 2], 15 QUAD $0x080e74203a0f4666; BYTE $0x01 // pinsrb xmm14, byte [rsi + r9 + 8], 1 - QUAD $0x081674203a0f4466; BYTE $0x02 // pinsrb xmm14, byte [rsi + rdx + 8], 2 - LONG $0x247c8b4c; BYTE $0x10 // mov r15, qword [rsp + 16] - QUAD $0x083e74203a0f4666; BYTE $0x03 // pinsrb xmm14, byte [rsi + r15 + 8], 3 - QUAD $0x082674203a0f4666; BYTE $0x04 // pinsrb xmm14, byte [rsi + r12 + 8], 4 - LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] + QUAD $0x080e74203a0f4466; BYTE $0x02 // pinsrb xmm14, byte [rsi + rcx + 8], 2 + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x080674203a0f4466; BYTE $0x03 // pinsrb xmm14, byte [rsi + rax + 8], 3 + QUAD $0x081674203a0f4466; BYTE $0x04 // pinsrb xmm14, byte [rsi + rdx + 8], 4 QUAD $0x083e74203a0f4466; BYTE $0x05 // pinsrb xmm14, byte [rsi + rdi + 8], 5 - QUAD $0x080e74203a0f4466; BYTE $0x06 // pinsrb xmm14, byte [rsi + rcx + 8], 6 - QUAD $0x081e74203a0f4666; BYTE $0x07 // pinsrb xmm14, byte [rsi + r11 + 8], 7 - QUAD $0x081674203a0f4666; BYTE $0x08 // pinsrb xmm14, byte [rsi + r10 + 8], 8 - QUAD $0x081e74203a0f4466; BYTE $0x09 // pinsrb xmm14, byte [rsi + rbx + 8], 9 - QUAD $0x083674203a0f4666; BYTE $0x0a // pinsrb xmm14, byte [rsi + r14 + 8], 10 - QUAD $0x082e74203a0f4666; BYTE $0x0b // pinsrb xmm14, byte [rsi + r13 + 8], 11 + QUAD $0x082e74203a0f4666; BYTE $0x06 // pinsrb xmm14, byte [rsi + r13 + 8], 6 + QUAD $0x083674203a0f4666; BYTE $0x07 // pinsrb xmm14, byte [rsi + r14 + 8], 7 + QUAD $0x081e74203a0f4466; BYTE $0x08 // pinsrb xmm14, byte [rsi + rbx + 8], 8 + QUAD $0x081e74203a0f4666; BYTE $0x09 // pinsrb xmm14, byte [rsi + r11 + 8], 9 + QUAD $0x083e74203a0f4666; BYTE $0x0a // pinsrb xmm14, byte [rsi + r15 + 8], 10 + QUAD $0x082674203a0f4666; BYTE $0x0b // pinsrb xmm14, byte [rsi + r12 + 8], 11 QUAD $0x080674203a0f4666; BYTE $0x0c // pinsrb xmm14, byte [rsi + r8 + 8], 12 - LONG $0x24048b48 // mov rax, qword [rsp] + LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] QUAD $0x080674203a0f4466; BYTE $0x0d // pinsrb xmm14, byte [rsi + rax + 8], 13 LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] QUAD $0x080674203a0f4466; BYTE $0x0e // pinsrb xmm14, byte [rsi + rax + 8], 14 - LONG $0x24548b4c; BYTE $0x20 // mov r10, qword [rsp + 32] QUAD $0x081674203a0f4666; BYTE $0x0f // pinsrb xmm14, byte [rsi + r10 + 8], 15 LONG $0x6f0f4566; BYTE $0xd6 // movdqa xmm10, xmm14 LONG $0xda0f4566; BYTE $0xd4 // pminub xmm10, xmm12 LONG $0x740f4566; BYTE $0xd6 // pcmpeqb xmm10, xmm14 QUAD $0x100e6c203a0f4666; BYTE $0x01 // pinsrb xmm13, byte [rsi + r9 + 16], 1 - QUAD $0x10166c203a0f4466; BYTE $0x02 // pinsrb xmm13, byte [rsi + rdx + 16], 2 - WORD $0x894d; BYTE $0xf9 // mov r9, r15 - QUAD $0x103e6c203a0f4666; BYTE $0x03 // pinsrb xmm13, byte [rsi + r15 + 16], 3 - QUAD $0x10266c203a0f4666; BYTE $0x04 // pinsrb xmm13, byte [rsi + r12 + 16], 4 + QUAD $0x100e6c203a0f4466; BYTE $0x02 // pinsrb xmm13, byte [rsi + rcx + 16], 2 + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] + QUAD $0x10066c203a0f4466; BYTE $0x03 // pinsrb xmm13, byte [rsi + rax + 16], 3 + QUAD $0x10166c203a0f4466; BYTE $0x04 // pinsrb xmm13, byte [rsi + rdx + 16], 4 + WORD $0x8948; BYTE $0xd0 // mov rax, rdx + LONG $0x24548948; BYTE $0x58 // mov qword [rsp + 88], rdx QUAD $0x103e6c203a0f4466; BYTE $0x05 // pinsrb xmm13, byte [rsi + rdi + 16], 5 - QUAD $0x100e6c203a0f4466; BYTE $0x06 // pinsrb xmm13, byte [rsi + rcx + 16], 6 - QUAD $0x101e6c203a0f4666; BYTE $0x07 // pinsrb xmm13, byte [rsi + r11 + 16], 7 - LONG $0x247c8b4c; BYTE $0x70 // mov r15, qword [rsp + 112] - QUAD $0x103e6c203a0f4666; BYTE $0x08 // pinsrb xmm13, byte [rsi + r15 + 16], 8 - QUAD $0x101e6c203a0f4466; BYTE $0x09 // pinsrb xmm13, byte [rsi + rbx + 16], 9 - QUAD $0x10366c203a0f4666; BYTE $0x0a // pinsrb xmm13, byte [rsi + r14 + 16], 10 - QUAD $0x102e6c203a0f4666; BYTE $0x0b // pinsrb xmm13, byte [rsi + r13 + 16], 11 + LONG $0x247c8948; BYTE $0x50 // mov qword [rsp + 80], rdi + QUAD $0x102e6c203a0f4666; BYTE $0x06 // pinsrb xmm13, byte [rsi + r13 + 16], 6 + QUAD $0x10366c203a0f4666; BYTE $0x07 // pinsrb xmm13, byte [rsi + r14 + 16], 7 + QUAD $0x101e6c203a0f4466; BYTE $0x08 // pinsrb xmm13, byte [rsi + rbx + 16], 8 + WORD $0x8949; BYTE $0xdd // mov r13, rbx + QUAD $0x101e6c203a0f4666; BYTE $0x09 // pinsrb xmm13, byte [rsi + r11 + 16], 9 + QUAD $0x00000080249c894c // mov qword [rsp + 128], r11 + QUAD $0x103e6c203a0f4666; BYTE $0x0a // pinsrb xmm13, byte [rsi + r15 + 16], 10 + LONG $0x247c894c; BYTE $0x30 // mov qword [rsp + 48], r15 + QUAD $0x10266c203a0f4666; BYTE $0x0b // pinsrb xmm13, byte [rsi + r12 + 16], 11 QUAD $0x10066c203a0f4666; BYTE $0x0c // pinsrb xmm13, byte [rsi + r8 + 16], 12 - LONG $0x24248b4c // mov r12, qword [rsp] - QUAD $0x10266c203a0f4666; BYTE $0x0d // pinsrb xmm13, byte [rsi + r12 + 16], 13 - LONG $0x244c8b48; BYTE $0x18 // mov rcx, qword [rsp + 24] - QUAD $0x100e6c203a0f4466; BYTE $0x0e // pinsrb xmm13, byte [rsi + rcx + 16], 14 - QUAD $0x10166c203a0f4666; BYTE $0x0f // pinsrb xmm13, byte [rsi + r10 + 16], 15 + WORD $0x894c; BYTE $0xc3 // mov rbx, r8 + LONG $0x2444894c; BYTE $0x38 // mov qword [rsp + 56], r8 + LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] + QUAD $0x10166c203a0f4466; BYTE $0x0d // pinsrb xmm13, byte [rsi + rdx + 16], 13 + LONG $0x24548b4c; BYTE $0x18 // mov r10, qword [rsp + 24] + QUAD $0x10166c203a0f4666; BYTE $0x0e // pinsrb xmm13, byte [rsi + r10 + 16], 14 + LONG $0x24448b4c; BYTE $0x48 // mov r8, qword [rsp + 72] + QUAD $0x10066c203a0f4666; BYTE $0x0f // pinsrb xmm13, byte [rsi + r8 + 16], 15 LONG $0x6f0f4166; BYTE $0xdd // movdqa xmm3, xmm13 LONG $0xda0f4166; BYTE $0xdc // pminub xmm3, xmm12 LONG $0x740f4166; BYTE $0xdd // pcmpeqb xmm3, xmm13 QUAD $0x000110249c7f0f66; BYTE $0x00 // movdqa oword [rsp + 272], xmm3 - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] - QUAD $0x18067c203a0f4466; BYTE $0x01 // pinsrb xmm15, byte [rsi + rax + 24], 1 - QUAD $0x18167c203a0f4466; BYTE $0x02 // pinsrb xmm15, byte [rsi + rdx + 24], 2 + QUAD $0x180e7c203a0f4666; BYTE $0x01 // pinsrb xmm15, byte [rsi + r9 + 24], 1 + QUAD $0x180e7c203a0f4466; BYTE $0x02 // pinsrb xmm15, byte [rsi + rcx + 24], 2 + LONG $0x244c8b4c; BYTE $0x40 // mov r9, qword [rsp + 64] QUAD $0x180e7c203a0f4666; BYTE $0x03 // pinsrb xmm15, byte [rsi + r9 + 24], 3 - LONG $0x244c8b4c; BYTE $0x30 // mov r9, qword [rsp + 48] - QUAD $0x180e7c203a0f4666; BYTE $0x04 // pinsrb xmm15, byte [rsi + r9 + 24], 4 + QUAD $0x18067c203a0f4466; BYTE $0x04 // pinsrb xmm15, byte [rsi + rax + 24], 4 QUAD $0x183e7c203a0f4466; BYTE $0x05 // pinsrb xmm15, byte [rsi + rdi + 24], 5 - LONG $0x24448b48; BYTE $0x08 // mov rax, qword [rsp + 8] + LONG $0x24448b48; BYTE $0x68 // mov rax, qword [rsp + 104] QUAD $0x18067c203a0f4466; BYTE $0x06 // pinsrb xmm15, byte [rsi + rax + 24], 6 - QUAD $0x181e7c203a0f4666; BYTE $0x07 // pinsrb xmm15, byte [rsi + r11 + 24], 7 - QUAD $0x183e7c203a0f4666; BYTE $0x08 // pinsrb xmm15, byte [rsi + r15 + 24], 8 - QUAD $0x181e7c203a0f4466; BYTE $0x09 // pinsrb xmm15, byte [rsi + rbx + 24], 9 - QUAD $0x18367c203a0f4666; BYTE $0x0a // pinsrb xmm15, byte [rsi + r14 + 24], 10 - QUAD $0x182e7c203a0f4666; BYTE $0x0b // pinsrb xmm15, byte [rsi + r13 + 24], 11 - QUAD $0x18067c203a0f4666; BYTE $0x0c // pinsrb xmm15, byte [rsi + r8 + 24], 12 - QUAD $0x18267c203a0f4666; BYTE $0x0d // pinsrb xmm15, byte [rsi + r12 + 24], 13 - WORD $0x894d; BYTE $0xe7 // mov r15, r12 - QUAD $0x180e7c203a0f4466; BYTE $0x0e // pinsrb xmm15, byte [rsi + rcx + 24], 14 - WORD $0x8948; BYTE $0xc8 // mov rax, rcx - QUAD $0x18167c203a0f4666; BYTE $0x0f // pinsrb xmm15, byte [rsi + r10 + 24], 15 + QUAD $0x18367c203a0f4666; BYTE $0x07 // pinsrb xmm15, byte [rsi + r14 + 24], 7 + QUAD $0x182e7c203a0f4666; BYTE $0x08 // pinsrb xmm15, byte [rsi + r13 + 24], 8 + WORD $0x894c; BYTE $0xe8 // mov rax, r13 + QUAD $0x181e7c203a0f4666; BYTE $0x09 // pinsrb xmm15, byte [rsi + r11 + 24], 9 + QUAD $0x183e7c203a0f4666; BYTE $0x0a // pinsrb xmm15, byte [rsi + r15 + 24], 10 + QUAD $0x18267c203a0f4666; BYTE $0x0b // pinsrb xmm15, byte [rsi + r12 + 24], 11 + WORD $0x894c; BYTE $0xe1 // mov rcx, r12 + QUAD $0x181e7c203a0f4466; BYTE $0x0c // pinsrb xmm15, byte [rsi + rbx + 24], 12 + QUAD $0x18167c203a0f4466; BYTE $0x0d // pinsrb xmm15, byte [rsi + rdx + 24], 13 + QUAD $0x18167c203a0f4666; BYTE $0x0e // pinsrb xmm15, byte [rsi + r10 + 24], 14 + WORD $0x894d; BYTE $0xd5 // mov r13, r10 + QUAD $0x18067c203a0f4666; BYTE $0x0f // pinsrb xmm15, byte [rsi + r8 + 24], 15 LONG $0x6f0f4166; BYTE $0xdf // movdqa xmm3, xmm15 LONG $0xda0f4166; BYTE $0xdc // pminub xmm3, xmm12 LONG $0x740f4166; BYTE $0xdf // pcmpeqb xmm3, xmm15 @@ -36724,104 +38111,106 @@ LBB7_67: LONG $0x6f0f4466; BYTE $0xf6 // movdqa xmm14, xmm6 LONG $0xda0f4566; BYTE $0xf4 // pminub xmm14, xmm12 LONG $0x740f4466; BYTE $0xf6 // pcmpeqb xmm14, xmm6 - LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] - LONG $0x0e54b60f; BYTE $0x0d // movzx edx, byte [rsi + rcx + 13] + QUAD $0x000000a024948b48 // mov rdx, qword [rsp + 160] + LONG $0x1654b60f; BYTE $0x0d // movzx edx, byte [rsi + rdx + 13] LONG $0xf26e0f66 // movd xmm6, edx - LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] - QUAD $0x03266c203a0f4266; BYTE $0x01 // pinsrb xmm5, byte [rsi + r12 + 3], 1 - LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] - QUAD $0x02030e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 3], 2 - LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] - QUAD $0x0303166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 3], 3 - QUAD $0x030e6c203a0f4266; BYTE $0x04 // pinsrb xmm5, byte [rsi + r9 + 3], 4 - LONG $0x24548b4c; BYTE $0x40 // mov r10, qword [rsp + 64] - QUAD $0x03166c203a0f4266; BYTE $0x05 // pinsrb xmm5, byte [rsi + r10 + 3], 5 - LONG $0x24548b48; BYTE $0x08 // mov rdx, qword [rsp + 8] + LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] + QUAD $0x01033e6c203a0f66 // pinsrb xmm5, byte [rsi + rdi + 3], 1 + LONG $0x245c8b4c; BYTE $0x20 // mov r11, qword [rsp + 32] + QUAD $0x031e6c203a0f4266; BYTE $0x02 // pinsrb xmm5, byte [rsi + r11 + 3], 2 + QUAD $0x030e6c203a0f4266; BYTE $0x03 // pinsrb xmm5, byte [rsi + r9 + 3], 3 + LONG $0x245c8b48; BYTE $0x58 // mov rbx, qword [rsp + 88] + QUAD $0x04031e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 3], 4 + LONG $0x24548b48; BYTE $0x50 // mov rdx, qword [rsp + 80] + QUAD $0x0503166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 3], 5 + LONG $0x24548b48; BYTE $0x68 // mov rdx, qword [rsp + 104] QUAD $0x0603166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 3], 6 - LONG $0x245c894c; BYTE $0x50 // mov qword [rsp + 80], r11 - QUAD $0x031e6c203a0f4266; BYTE $0x07 // pinsrb xmm5, byte [rsi + r11 + 3], 7 - LONG $0x244c8b4c; BYTE $0x70 // mov r9, qword [rsp + 112] - QUAD $0x030e6c203a0f4266; BYTE $0x08 // pinsrb xmm5, byte [rsi + r9 + 3], 8 - QUAD $0x09031e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 3], 9 - QUAD $0x000000a024b4894c // mov qword [rsp + 160], r14 - QUAD $0x03366c203a0f4266; BYTE $0x0a // pinsrb xmm5, byte [rsi + r14 + 3], 10 - QUAD $0x032e6c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rsi + r13 + 3], 11 - QUAD $0x03066c203a0f4266; BYTE $0x0c // pinsrb xmm5, byte [rsi + r8 + 3], 12 - QUAD $0x033e6c203a0f4266; BYTE $0x0d // pinsrb xmm5, byte [rsi + r15 + 3], 13 - QUAD $0x0e03066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 3], 14 - LONG $0x247c8b4c; BYTE $0x20 // mov r15, qword [rsp + 32] - QUAD $0x033e6c203a0f4266; BYTE $0x0f // pinsrb xmm5, byte [rsi + r15 + 3], 15 - QUAD $0x04264c203a0f4666; BYTE $0x01 // pinsrb xmm9, byte [rsi + r12 + 4], 1 - QUAD $0x040e4c203a0f4466; BYTE $0x02 // pinsrb xmm9, byte [rsi + rcx + 4], 2 - LONG $0x247c8b48; BYTE $0x10 // mov rdi, qword [rsp + 16] - QUAD $0x043e4c203a0f4466; BYTE $0x03 // pinsrb xmm9, byte [rsi + rdi + 4], 3 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] - QUAD $0x043e4c203a0f4466; BYTE $0x04 // pinsrb xmm9, byte [rsi + rdi + 4], 4 - QUAD $0x04164c203a0f4666; BYTE $0x05 // pinsrb xmm9, byte [rsi + r10 + 4], 5 + QUAD $0x0000009024b4894c // mov qword [rsp + 144], r14 + QUAD $0x03366c203a0f4266; BYTE $0x07 // pinsrb xmm5, byte [rsi + r14 + 3], 7 + QUAD $0x0803066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 3], 8 + QUAD $0x0000008024bc8b4c // mov r15, qword [rsp + 128] + QUAD $0x033e6c203a0f4266; BYTE $0x09 // pinsrb xmm5, byte [rsi + r15 + 3], 9 + LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] + QUAD $0x03266c203a0f4266; BYTE $0x0a // pinsrb xmm5, byte [rsi + r12 + 3], 10 + QUAD $0x0b030e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 3], 11 + LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + QUAD $0x0c03066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 3], 12 + LONG $0x24548b4c; BYTE $0x10 // mov r10, qword [rsp + 16] + QUAD $0x03166c203a0f4266; BYTE $0x0d // pinsrb xmm5, byte [rsi + r10 + 3], 13 + WORD $0x894d; BYTE $0xee // mov r14, r13 + QUAD $0x032e6c203a0f4266; BYTE $0x0e // pinsrb xmm5, byte [rsi + r13 + 3], 14 + LONG $0x246c8b4c; BYTE $0x48 // mov r13, qword [rsp + 72] + QUAD $0x032e6c203a0f4266; BYTE $0x0f // pinsrb xmm5, byte [rsi + r13 + 3], 15 + QUAD $0x043e4c203a0f4466; BYTE $0x01 // pinsrb xmm9, byte [rsi + rdi + 4], 1 + QUAD $0x041e4c203a0f4666; BYTE $0x02 // pinsrb xmm9, byte [rsi + r11 + 4], 2 + QUAD $0x040e4c203a0f4666; BYTE $0x03 // pinsrb xmm9, byte [rsi + r9 + 4], 3 + QUAD $0x041e4c203a0f4466; BYTE $0x04 // pinsrb xmm9, byte [rsi + rbx + 4], 4 + LONG $0x24448b4c; BYTE $0x50 // mov r8, qword [rsp + 80] + QUAD $0x04064c203a0f4666; BYTE $0x05 // pinsrb xmm9, byte [rsi + r8 + 4], 5 QUAD $0x04164c203a0f4466; BYTE $0x06 // pinsrb xmm9, byte [rsi + rdx + 4], 6 - QUAD $0x041e4c203a0f4666; BYTE $0x07 // pinsrb xmm9, byte [rsi + r11 + 4], 7 - QUAD $0x040e4c203a0f4666; BYTE $0x08 // pinsrb xmm9, byte [rsi + r9 + 4], 8 - QUAD $0x041e4c203a0f4466; BYTE $0x09 // pinsrb xmm9, byte [rsi + rbx + 4], 9 - QUAD $0x04364c203a0f4666; BYTE $0x0a // pinsrb xmm9, byte [rsi + r14 + 4], 10 - QUAD $0x042e4c203a0f4666; BYTE $0x0b // pinsrb xmm9, byte [rsi + r13 + 4], 11 - QUAD $0x04064c203a0f4666; BYTE $0x0c // pinsrb xmm9, byte [rsi + r8 + 4], 12 - LONG $0x243c8b48 // mov rdi, qword [rsp] - QUAD $0x043e4c203a0f4466; BYTE $0x0d // pinsrb xmm9, byte [rsi + rdi + 4], 13 - QUAD $0x04064c203a0f4466; BYTE $0x0e // pinsrb xmm9, byte [rsi + rax + 4], 14 - QUAD $0x043e4c203a0f4666; BYTE $0x0f // pinsrb xmm9, byte [rsi + r15 + 4], 15 - QUAD $0x05267c203a0f4266; BYTE $0x01 // pinsrb xmm7, byte [rsi + r12 + 5], 1 - QUAD $0x02050e7c203a0f66 // pinsrb xmm7, byte [rsi + rcx + 5], 2 - LONG $0x247c8b48; BYTE $0x10 // mov rdi, qword [rsp + 16] - QUAD $0x03053e7c203a0f66 // pinsrb xmm7, byte [rsi + rdi + 5], 3 - LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] - QUAD $0x04053e7c203a0f66 // pinsrb xmm7, byte [rsi + rdi + 5], 4 - QUAD $0x05167c203a0f4266; BYTE $0x05 // pinsrb xmm7, byte [rsi + r10 + 5], 5 + QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] + QUAD $0x040e4c203a0f4466; BYTE $0x07 // pinsrb xmm9, byte [rsi + rcx + 4], 7 + LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] + QUAD $0x040e4c203a0f4466; BYTE $0x08 // pinsrb xmm9, byte [rsi + rcx + 4], 8 + QUAD $0x043e4c203a0f4666; BYTE $0x09 // pinsrb xmm9, byte [rsi + r15 + 4], 9 + QUAD $0x04264c203a0f4666; BYTE $0x0a // pinsrb xmm9, byte [rsi + r12 + 4], 10 + LONG $0x244c8b48; BYTE $0x28 // mov rcx, qword [rsp + 40] + QUAD $0x040e4c203a0f4466; BYTE $0x0b // pinsrb xmm9, byte [rsi + rcx + 4], 11 + WORD $0x8949; BYTE $0xc0 // mov r8, rax + QUAD $0x04064c203a0f4466; BYTE $0x0c // pinsrb xmm9, byte [rsi + rax + 4], 12 + QUAD $0x04164c203a0f4666; BYTE $0x0d // pinsrb xmm9, byte [rsi + r10 + 4], 13 + QUAD $0x04364c203a0f4666; BYTE $0x0e // pinsrb xmm9, byte [rsi + r14 + 4], 14 + QUAD $0x042e4c203a0f4666; BYTE $0x0f // pinsrb xmm9, byte [rsi + r13 + 4], 15 + QUAD $0x01053e7c203a0f66 // pinsrb xmm7, byte [rsi + rdi + 5], 1 + QUAD $0x051e7c203a0f4266; BYTE $0x02 // pinsrb xmm7, byte [rsi + r11 + 5], 2 + QUAD $0x050e7c203a0f4266; BYTE $0x03 // pinsrb xmm7, byte [rsi + r9 + 5], 3 + QUAD $0x04051e7c203a0f66 // pinsrb xmm7, byte [rsi + rbx + 5], 4 + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0505067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 5], 5 QUAD $0x0605167c203a0f66 // pinsrb xmm7, byte [rsi + rdx + 5], 6 - QUAD $0x051e7c203a0f4266; BYTE $0x07 // pinsrb xmm7, byte [rsi + r11 + 5], 7 - QUAD $0x050e7c203a0f4266; BYTE $0x08 // pinsrb xmm7, byte [rsi + r9 + 5], 8 - QUAD $0x09051e7c203a0f66 // pinsrb xmm7, byte [rsi + rbx + 5], 9 - QUAD $0x05367c203a0f4266; BYTE $0x0a // pinsrb xmm7, byte [rsi + r14 + 5], 10 - QUAD $0x052e7c203a0f4266; BYTE $0x0b // pinsrb xmm7, byte [rsi + r13 + 5], 11 + QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] + QUAD $0x0705067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 5], 7 + LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] + QUAD $0x08050e7c203a0f66 // pinsrb xmm7, byte [rsi + rcx + 5], 8 + QUAD $0x053e7c203a0f4266; BYTE $0x09 // pinsrb xmm7, byte [rsi + r15 + 5], 9 + QUAD $0x05267c203a0f4266; BYTE $0x0a // pinsrb xmm7, byte [rsi + r12 + 5], 10 + LONG $0x24448b48; BYTE $0x28 // mov rax, qword [rsp + 40] + QUAD $0x0b05067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 5], 11 QUAD $0x05067c203a0f4266; BYTE $0x0c // pinsrb xmm7, byte [rsi + r8 + 5], 12 - LONG $0x243c8b48 // mov rdi, qword [rsp] - QUAD $0x0d053e7c203a0f66 // pinsrb xmm7, byte [rsi + rdi + 5], 13 - QUAD $0x0e05067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 5], 14 - QUAD $0x053e7c203a0f4266; BYTE $0x0f // pinsrb xmm7, byte [rsi + r15 + 5], 15 - QUAD $0x062644203a0f4266; BYTE $0x01 // pinsrb xmm0, byte [rsi + r12 + 6], 1 - QUAD $0x02060e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 6], 2 - WORD $0x8949; BYTE $0xcf // mov r15, rcx - LONG $0x24648b4c; BYTE $0x10 // mov r12, qword [rsp + 16] - QUAD $0x062644203a0f4266; BYTE $0x03 // pinsrb xmm0, byte [rsi + r12 + 6], 3 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] - QUAD $0x04060e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 6], 4 - QUAD $0x061644203a0f4266; BYTE $0x05 // pinsrb xmm0, byte [rsi + r10 + 6], 5 + QUAD $0x05167c203a0f4266; BYTE $0x0d // pinsrb xmm7, byte [rsi + r10 + 5], 13 + QUAD $0x05367c203a0f4266; BYTE $0x0e // pinsrb xmm7, byte [rsi + r14 + 5], 14 + QUAD $0x052e7c203a0f4266; BYTE $0x0f // pinsrb xmm7, byte [rsi + r13 + 5], 15 + QUAD $0x01063e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 6], 1 + QUAD $0x061e44203a0f4266; BYTE $0x02 // pinsrb xmm0, byte [rsi + r11 + 6], 2 + QUAD $0x060e44203a0f4266; BYTE $0x03 // pinsrb xmm0, byte [rsi + r9 + 6], 3 + QUAD $0x04061e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 6], 4 + LONG $0x247c8b48; BYTE $0x50 // mov rdi, qword [rsp + 80] + QUAD $0x05063e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 6], 5 QUAD $0x06061644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 6], 6 - QUAD $0x061e44203a0f4266; BYTE $0x07 // pinsrb xmm0, byte [rsi + r11 + 6], 7 - QUAD $0x060e44203a0f4266; BYTE $0x08 // pinsrb xmm0, byte [rsi + r9 + 6], 8 - WORD $0x894d; BYTE $0xcb // mov r11, r9 - QUAD $0x09061e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 6], 9 - QUAD $0x063644203a0f4266; BYTE $0x0a // pinsrb xmm0, byte [rsi + r14 + 6], 10 - QUAD $0x062e44203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r13 + 6], 11 - WORD $0x894d; BYTE $0xee // mov r14, r13 + QUAD $0x00000090248c8b4c // mov r9, qword [rsp + 144] + QUAD $0x060e44203a0f4266; BYTE $0x07 // pinsrb xmm0, byte [rsi + r9 + 6], 7 + QUAD $0x08060e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 6], 8 + QUAD $0x063e44203a0f4266; BYTE $0x09 // pinsrb xmm0, byte [rsi + r15 + 6], 9 + QUAD $0x062644203a0f4266; BYTE $0x0a // pinsrb xmm0, byte [rsi + r12 + 6], 10 + QUAD $0x0b060644203a0f66 // pinsrb xmm0, byte [rsi + rax + 6], 11 QUAD $0x060644203a0f4266; BYTE $0x0c // pinsrb xmm0, byte [rsi + r8 + 6], 12 - WORD $0x894d; BYTE $0xc5 // mov r13, r8 - LONG $0x24048b4c // mov r8, qword [rsp] - QUAD $0x060644203a0f4266; BYTE $0x0d // pinsrb xmm0, byte [rsi + r8 + 6], 13 + QUAD $0x061644203a0f4266; BYTE $0x0d // pinsrb xmm0, byte [rsi + r10 + 6], 13 LONG $0xdf0f4466; BYTE $0xc4 // pandn xmm8, xmm4 - QUAD $0x0e060644203a0f66 // pinsrb xmm0, byte [rsi + rax + 6], 14 + QUAD $0x063644203a0f4266; BYTE $0x0e // pinsrb xmm0, byte [rsi + r14 + 6], 14 + WORD $0x894d; BYTE $0xf4 // mov r12, r14 QUAD $0x000000b0a56f0f66 // movdqa xmm4, oword 176[rbp] /* [rip + .LCPI7_11] */ LONG $0xdf0f4466; BYTE $0xf4 // pandn xmm14, xmm4 LONG $0xeb0f4566; BYTE $0xf0 // por xmm14, xmm8 LONG $0x6f0f4466; BYTE $0xfd // movdqa xmm15, xmm5 LONG $0xda0f4566; BYTE $0xfc // pminub xmm15, xmm12 LONG $0x740f4466; BYTE $0xfd // pcmpeqb xmm15, xmm5 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] - LONG $0x0654b60f; BYTE $0x0e // movzx edx, byte [rsi + rax + 14] + QUAD $0x000000a0249c8b48 // mov rbx, qword [rsp + 160] + LONG $0x1e54b60f; BYTE $0x0e // movzx edx, byte [rsi + rbx + 14] LONG $0xea6e0f66 // movd xmm5, edx QUAD $0x000000c0a56f0f66 // movdqa xmm4, oword 192[rbp] /* [rip + .LCPI7_12] */ LONG $0xdf0f4466; BYTE $0xfc // pandn xmm15, xmm4 LONG $0xeb0f4566; BYTE $0xfe // por xmm15, xmm14 - LONG $0x0654b60f; BYTE $0x0f // movzx edx, byte [rsi + rax + 15] + LONG $0x1e54b60f; BYTE $0x0f // movzx edx, byte [rsi + rbx + 15] LONG $0x6e0f4466; BYTE $0xc2 // movd xmm8, edx LONG $0xdb760f66 // pcmpeqd xmm3, xmm3 LONG $0xf80f4466; BYTE $0xeb // psubb xmm13, xmm3 @@ -36833,10 +38222,9 @@ LBB7_67: LONG $0x6f0f4466; BYTE $0xcf // movdqa xmm9, xmm7 LONG $0xda0f4566; BYTE $0xcc // pminub xmm9, xmm12 LONG $0x740f4466; BYTE $0xcf // pcmpeqb xmm9, xmm7 - LONG $0x0654b60f; BYTE $0x11 // movzx edx, byte [rsi + rax + 17] + LONG $0x1e54b60f; BYTE $0x11 // movzx edx, byte [rsi + rbx + 17] LONG $0xfa6e0f66 // movd xmm7, edx - LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] - QUAD $0x0f063e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 6], 15 + QUAD $0x062e44203a0f4266; BYTE $0x0f // pinsrb xmm0, byte [rsi + r13 + 6], 15 QUAD $0x000000d08d6f0f66 // movdqa xmm1, oword 208[rbp] /* [rip + .LCPI7_13] */ LONG $0xe1df0f66 // pandn xmm4, xmm1 QUAD $0x000000e08d6f0f66 // movdqa xmm1, oword 224[rbp] /* [rip + .LCPI7_14] */ @@ -36845,39 +38233,42 @@ LBB7_67: LONG $0xe06f0f66 // movdqa xmm4, xmm0 LONG $0xda0f4166; BYTE $0xe4 // pminub xmm4, xmm12 LONG $0xe0740f66 // pcmpeqb xmm4, xmm0 - LONG $0x0654b60f; BYTE $0x12 // movzx edx, byte [rsi + rax + 18] + LONG $0x1e54b60f; BYTE $0x12 // movzx edx, byte [rsi + rbx + 18] LONG $0xca6e0f66 // movd xmm1, edx - QUAD $0x0000b024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 176] - LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] - QUAD $0x01070e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 7], 1 - QUAD $0x073e44203a0f4266; BYTE $0x02 // pinsrb xmm0, byte [rsi + r15 + 7], 2 - WORD $0x894c; BYTE $0xe3 // mov rbx, r12 - QUAD $0x072644203a0f4266; BYTE $0x03 // pinsrb xmm0, byte [rsi + r12 + 7], 3 - LONG $0x244c8b4c; BYTE $0x30 // mov r9, qword [rsp + 48] - QUAD $0x070e44203a0f4266; BYTE $0x04 // pinsrb xmm0, byte [rsi + r9 + 7], 4 - QUAD $0x071644203a0f4266; BYTE $0x05 // pinsrb xmm0, byte [rsi + r10 + 7], 5 - LONG $0x247c8b4c; BYTE $0x08 // mov r15, qword [rsp + 8] + QUAD $0x0000c024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 192] + LONG $0x24548b4c; BYTE $0x60 // mov r10, qword [rsp + 96] + QUAD $0x071644203a0f4266; BYTE $0x01 // pinsrb xmm0, byte [rsi + r10 + 7], 1 + LONG $0x245c8b4c; BYTE $0x20 // mov r11, qword [rsp + 32] + QUAD $0x071e44203a0f4266; BYTE $0x02 // pinsrb xmm0, byte [rsi + r11 + 7], 2 + LONG $0x24748b4c; BYTE $0x40 // mov r14, qword [rsp + 64] + QUAD $0x073644203a0f4266; BYTE $0x03 // pinsrb xmm0, byte [rsi + r14 + 7], 3 + LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] + QUAD $0x04070e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 7], 4 + QUAD $0x05073e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 7], 5 + LONG $0x247c8b4c; BYTE $0x68 // mov r15, qword [rsp + 104] QUAD $0x073e44203a0f4266; BYTE $0x06 // pinsrb xmm0, byte [rsi + r15 + 7], 6 - LONG $0x24548b48; BYTE $0x50 // mov rdx, qword [rsp + 80] - QUAD $0x07071644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 7], 7 - QUAD $0x071e44203a0f4266; BYTE $0x08 // pinsrb xmm0, byte [rsi + r11 + 7], 8 - LONG $0x24648b4c; BYTE $0x78 // mov r12, qword [rsp + 120] - QUAD $0x072644203a0f4266; BYTE $0x09 // pinsrb xmm0, byte [rsi + r12 + 7], 9 - QUAD $0x000000a0249c8b4c // mov r11, qword [rsp + 160] - QUAD $0x071e44203a0f4266; BYTE $0x0a // pinsrb xmm0, byte [rsi + r11 + 7], 10 - QUAD $0x073644203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r14 + 7], 11 - QUAD $0x072e44203a0f4266; BYTE $0x0c // pinsrb xmm0, byte [rsi + r13 + 7], 12 - QUAD $0x070644203a0f4266; BYTE $0x0d // pinsrb xmm0, byte [rsi + r8 + 7], 13 - LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] - QUAD $0x0e071644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 7], 14 - QUAD $0x0f073e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 7], 15 + QUAD $0x070e44203a0f4266; BYTE $0x07 // pinsrb xmm0, byte [rsi + r9 + 7], 7 + LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] + QUAD $0x08070e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 7], 8 + QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] + QUAD $0x09070e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 7], 9 + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] + QUAD $0x0a070e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 7], 10 + LONG $0x24448b4c; BYTE $0x28 // mov r8, qword [rsp + 40] + QUAD $0x070644203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r8 + 7], 11 + LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] + QUAD $0x0c070e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 7], 12 + LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] + QUAD $0x0d071644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 7], 13 + QUAD $0x072644203a0f4266; BYTE $0x0e // pinsrb xmm0, byte [rsi + r12 + 7], 14 + QUAD $0x072e44203a0f4266; BYTE $0x0f // pinsrb xmm0, byte [rsi + r13 + 7], 15 QUAD $0x000000f09d6f0f66 // movdqa xmm3, oword 240[rbp] /* [rip + .LCPI7_15] */ LONG $0xe3df0f66 // pandn xmm4, xmm3 LONG $0xeb0f4166; BYTE $0xe1 // por xmm4, xmm9 LONG $0x6f0f4466; BYTE $0xc8 // movdqa xmm9, xmm0 LONG $0xda0f4566; BYTE $0xcc // pminub xmm9, xmm12 LONG $0x740f4466; BYTE $0xc8 // pcmpeqb xmm9, xmm0 - LONG $0x0654b60f; BYTE $0x13 // movzx edx, byte [rsi + rax + 19] + LONG $0x1e54b60f; BYTE $0x13 // movzx edx, byte [rsi + rbx + 19] LONG $0xda6e0f66 // movd xmm3, edx LONG $0xef0f4566; BYTE $0xce // pxor xmm9, xmm14 LONG $0x710f4166; WORD $0x07f1 // psllw xmm9, 7 @@ -36885,55 +38276,56 @@ LBB7_67: LONG $0xdb0f4466; BYTE $0xc8 // pand xmm9, xmm0 LONG $0xeb0f4466; BYTE $0xcc // por xmm9, xmm4 LONG $0x6f0f4166; BYTE $0xe1 // movdqa xmm4, xmm9 - LONG $0x0654b60f; BYTE $0x14 // movzx edx, byte [rsi + rax + 20] + LONG $0x1e54b60f; BYTE $0x14 // movzx edx, byte [rsi + rbx + 20] LONG $0x6e0f4466; BYTE $0xca // movd xmm9, edx - QUAD $0x0000c024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 192] - QUAD $0x01090e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 9], 1 - WORD $0x8948; BYTE $0xc8 // mov rax, rcx - LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] - QUAD $0x02090e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 9], 2 - QUAD $0x03091e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 9], 3 - QUAD $0x090e44203a0f4266; BYTE $0x04 // pinsrb xmm0, byte [rsi + r9 + 9], 4 - QUAD $0x091644203a0f4266; BYTE $0x05 // pinsrb xmm0, byte [rsi + r10 + 9], 5 + QUAD $0x0000d024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 208] + WORD $0x894d; BYTE $0xd4 // mov r12, r10 + QUAD $0x091644203a0f4266; BYTE $0x01 // pinsrb xmm0, byte [rsi + r10 + 9], 1 + QUAD $0x091e44203a0f4266; BYTE $0x02 // pinsrb xmm0, byte [rsi + r11 + 9], 2 + WORD $0x894d; BYTE $0xf5 // mov r13, r14 + QUAD $0x093644203a0f4266; BYTE $0x03 // pinsrb xmm0, byte [rsi + r14 + 9], 3 + LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] + QUAD $0x04090644203a0f66 // pinsrb xmm0, byte [rsi + rax + 9], 4 + QUAD $0x05093e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 9], 5 + WORD $0x894d; BYTE $0xf9 // mov r9, r15 QUAD $0x093e44203a0f4266; BYTE $0x06 // pinsrb xmm0, byte [rsi + r15 + 9], 6 - WORD $0x894d; BYTE $0xf8 // mov r8, r15 - LONG $0x247c8b48; BYTE $0x50 // mov rdi, qword [rsp + 80] - QUAD $0x07093e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 9], 7 - LONG $0x247c8b4c; BYTE $0x70 // mov r15, qword [rsp + 112] - QUAD $0x093e44203a0f4266; BYTE $0x08 // pinsrb xmm0, byte [rsi + r15 + 9], 8 - QUAD $0x092644203a0f4266; BYTE $0x09 // pinsrb xmm0, byte [rsi + r12 + 9], 9 - WORD $0x894d; BYTE $0xe2 // mov r10, r12 - QUAD $0x091e44203a0f4266; BYTE $0x0a // pinsrb xmm0, byte [rsi + r11 + 9], 10 - QUAD $0x093644203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r14 + 9], 11 - QUAD $0x092e44203a0f4266; BYTE $0x0c // pinsrb xmm0, byte [rsi + r13 + 9], 12 - LONG $0x246c894c; BYTE $0x68 // mov qword [rsp + 104], r13 - LONG $0x24248b4c // mov r12, qword [rsp] - QUAD $0x092644203a0f4266; BYTE $0x0d // pinsrb xmm0, byte [rsi + r12 + 9], 13 - LONG $0x244c8b4c; BYTE $0x18 // mov r9, qword [rsp + 24] - QUAD $0x090e44203a0f4266; BYTE $0x0e // pinsrb xmm0, byte [rsi + r9 + 9], 14 - LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] - QUAD $0x0f091644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 9], 15 - QUAD $0x010a0654203a0f66 // pinsrb xmm2, byte [rsi + rax + 10], 1 - QUAD $0x020a0e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 10], 2 - QUAD $0x030a1e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 10], 3 - LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] - QUAD $0x040a1e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 10], 4 - LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] - QUAD $0x050a0654203a0f66 // pinsrb xmm2, byte [rsi + rax + 10], 5 - QUAD $0x0a0654203a0f4266; BYTE $0x06 // pinsrb xmm2, byte [rsi + r8 + 10], 6 - QUAD $0x070a3e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 10], 7 - QUAD $0x0a3e54203a0f4266; BYTE $0x08 // pinsrb xmm2, byte [rsi + r15 + 10], 8 - QUAD $0x0a1654203a0f4266; BYTE $0x09 // pinsrb xmm2, byte [rsi + r10 + 10], 9 - QUAD $0x0a1e54203a0f4266; BYTE $0x0a // pinsrb xmm2, byte [rsi + r11 + 10], 10 - QUAD $0x0a3654203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rsi + r14 + 10], 11 - QUAD $0x0a2e54203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rsi + r13 + 10], 12 - QUAD $0x0a2654203a0f4266; BYTE $0x0d // pinsrb xmm2, byte [rsi + r12 + 10], 13 - QUAD $0x0a0e54203a0f4266; BYTE $0x0e // pinsrb xmm2, byte [rsi + r9 + 10], 14 - WORD $0x894d; BYTE $0xcb // mov r11, r9 - QUAD $0x0f0a1654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 10], 15 - WORD $0x8949; BYTE $0xd4 // mov r12, rdx + QUAD $0x0000009024948b48 // mov rdx, qword [rsp + 144] + QUAD $0x07091644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 9], 7 + LONG $0x24748b4c; BYTE $0x70 // mov r14, qword [rsp + 112] + QUAD $0x093644203a0f4266; BYTE $0x08 // pinsrb xmm0, byte [rsi + r14 + 9], 8 + QUAD $0x00000080249c8b4c // mov r11, qword [rsp + 128] + QUAD $0x091e44203a0f4266; BYTE $0x09 // pinsrb xmm0, byte [rsi + r11 + 9], 9 + LONG $0x247c8b4c; BYTE $0x30 // mov r15, qword [rsp + 48] + QUAD $0x093e44203a0f4266; BYTE $0x0a // pinsrb xmm0, byte [rsi + r15 + 9], 10 + QUAD $0x090644203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r8 + 9], 11 + QUAD $0x0c090e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 9], 12 + LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] + QUAD $0x0d091e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 9], 13 + LONG $0x24548b4c; BYTE $0x18 // mov r10, qword [rsp + 24] + QUAD $0x091644203a0f4266; BYTE $0x0e // pinsrb xmm0, byte [rsi + r10 + 9], 14 + LONG $0x24448b48; BYTE $0x48 // mov rax, qword [rsp + 72] + QUAD $0x0f090644203a0f66 // pinsrb xmm0, byte [rsi + rax + 9], 15 + QUAD $0x0a2654203a0f4266; BYTE $0x01 // pinsrb xmm2, byte [rsi + r12 + 10], 1 + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x020a0654203a0f66 // pinsrb xmm2, byte [rsi + rax + 10], 2 + QUAD $0x0a2e54203a0f4266; BYTE $0x03 // pinsrb xmm2, byte [rsi + r13 + 10], 3 + LONG $0x24648b4c; BYTE $0x58 // mov r12, qword [rsp + 88] + QUAD $0x0a2654203a0f4266; BYTE $0x04 // pinsrb xmm2, byte [rsi + r12 + 10], 4 + QUAD $0x050a3e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 10], 5 + QUAD $0x0a0e54203a0f4266; BYTE $0x06 // pinsrb xmm2, byte [rsi + r9 + 10], 6 + QUAD $0x070a1654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 10], 7 + WORD $0x8948; BYTE $0xd7 // mov rdi, rdx + QUAD $0x0a3654203a0f4266; BYTE $0x08 // pinsrb xmm2, byte [rsi + r14 + 10], 8 + QUAD $0x0a1e54203a0f4266; BYTE $0x09 // pinsrb xmm2, byte [rsi + r11 + 10], 9 + QUAD $0x0a3e54203a0f4266; BYTE $0x0a // pinsrb xmm2, byte [rsi + r15 + 10], 10 + QUAD $0x0a0654203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rsi + r8 + 10], 11 + QUAD $0x0c0a0e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 10], 12 + QUAD $0x0d0a1e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 10], 13 + QUAD $0x0a1654203a0f4266; BYTE $0x0e // pinsrb xmm2, byte [rsi + r10 + 10], 14 + LONG $0x246c8b4c; BYTE $0x48 // mov r13, qword [rsp + 72] + QUAD $0x0a2e54203a0f4266; BYTE $0x0f // pinsrb xmm2, byte [rsi + r13 + 10], 15 LONG $0xeb0f4166; BYTE $0xe7 // por xmm4, xmm15 - QUAD $0x0000c024a47f0f66; BYTE $0x00 // movdqa oword [rsp + 192], xmm4 + QUAD $0x0000d024a47f0f66; BYTE $0x00 // movdqa oword [rsp + 208], xmm4 LONG $0xe06f0f66 // movdqa xmm4, xmm0 LONG $0xda0f4166; BYTE $0xe4 // pminub xmm4, xmm12 LONG $0xe0740f66 // pcmpeqb xmm4, xmm0 @@ -36944,35 +38336,39 @@ LBB7_67: LONG $0xc26f0f66 // movdqa xmm0, xmm2 LONG $0xda0f4166; BYTE $0xc4 // pminub xmm0, xmm12 LONG $0xc2740f66 // pcmpeqb xmm0, xmm2 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] LONG $0x0654b60f; BYTE $0x15 // movzx edx, byte [rsi + rax + 21] LONG $0xe26e0f66 // movd xmm4, edx LONG $0xdf0f4566; BYTE $0xd6 // pandn xmm10, xmm14 - LONG $0x24448b4c; BYTE $0x38 // mov r8, qword [rsp + 56] - QUAD $0x0b065c203a0f4666; BYTE $0x01 // pinsrb xmm11, byte [rsi + r8 + 11], 1 - WORD $0x8949; BYTE $0xcd // mov r13, rcx - QUAD $0x0b0e5c203a0f4466; BYTE $0x02 // pinsrb xmm11, byte [rsi + rcx + 11], 2 - LONG $0x244c8b48; BYTE $0x10 // mov rcx, qword [rsp + 16] - QUAD $0x0b0e5c203a0f4466; BYTE $0x03 // pinsrb xmm11, byte [rsi + rcx + 11], 3 - QUAD $0x0b1e5c203a0f4466; BYTE $0x04 // pinsrb xmm11, byte [rsi + rbx + 11], 4 - LONG $0x247c8b48; BYTE $0x40 // mov rdi, qword [rsp + 64] - QUAD $0x0b3e5c203a0f4466; BYTE $0x05 // pinsrb xmm11, byte [rsi + rdi + 11], 5 - LONG $0x24548b48; BYTE $0x08 // mov rdx, qword [rsp + 8] - QUAD $0x0b165c203a0f4466; BYTE $0x06 // pinsrb xmm11, byte [rsi + rdx + 11], 6 - LONG $0x24548b48; BYTE $0x50 // mov rdx, qword [rsp + 80] - QUAD $0x0b165c203a0f4466; BYTE $0x07 // pinsrb xmm11, byte [rsi + rdx + 11], 7 + LONG $0x245c8b4c; BYTE $0x60 // mov r11, qword [rsp + 96] + QUAD $0x0b1e5c203a0f4666; BYTE $0x01 // pinsrb xmm11, byte [rsi + r11 + 11], 1 + LONG $0x24548b4c; BYTE $0x20 // mov r10, qword [rsp + 32] + QUAD $0x0b165c203a0f4666; BYTE $0x02 // pinsrb xmm11, byte [rsi + r10 + 11], 2 + LONG $0x24748b4c; BYTE $0x40 // mov r14, qword [rsp + 64] + QUAD $0x0b365c203a0f4666; BYTE $0x03 // pinsrb xmm11, byte [rsi + r14 + 11], 3 + WORD $0x894d; BYTE $0xe0 // mov r8, r12 + QUAD $0x0b265c203a0f4666; BYTE $0x04 // pinsrb xmm11, byte [rsi + r12 + 11], 4 + LONG $0x244c8b4c; BYTE $0x50 // mov r9, qword [rsp + 80] + QUAD $0x0b0e5c203a0f4666; BYTE $0x05 // pinsrb xmm11, byte [rsi + r9 + 11], 5 + LONG $0x244c8b48; BYTE $0x68 // mov rcx, qword [rsp + 104] + QUAD $0x0b0e5c203a0f4466; BYTE $0x06 // pinsrb xmm11, byte [rsi + rcx + 11], 6 + QUAD $0x0b3e5c203a0f4466; BYTE $0x07 // pinsrb xmm11, byte [rsi + rdi + 11], 7 + WORD $0x8949; BYTE $0xfc // mov r12, rdi + LONG $0x247c8b4c; BYTE $0x70 // mov r15, qword [rsp + 112] QUAD $0x0b3e5c203a0f4666; BYTE $0x08 // pinsrb xmm11, byte [rsi + r15 + 11], 8 - WORD $0x894d; BYTE $0xd1 // mov r9, r10 - QUAD $0x0b165c203a0f4666; BYTE $0x09 // pinsrb xmm11, byte [rsi + r10 + 11], 9 - QUAD $0x000000a024948b4c // mov r10, qword [rsp + 160] - QUAD $0x0b165c203a0f4666; BYTE $0x0a // pinsrb xmm11, byte [rsi + r10 + 11], 10 - QUAD $0x0b365c203a0f4666; BYTE $0x0b // pinsrb xmm11, byte [rsi + r14 + 11], 11 - LONG $0x24748b4c; BYTE $0x68 // mov r14, qword [rsp + 104] - QUAD $0x0b365c203a0f4666; BYTE $0x0c // pinsrb xmm11, byte [rsi + r14 + 11], 12 - LONG $0x241c8b48 // mov rbx, qword [rsp] - QUAD $0x0b1e5c203a0f4466; BYTE $0x0d // pinsrb xmm11, byte [rsi + rbx + 11], 13 - QUAD $0x0b1e5c203a0f4666; BYTE $0x0e // pinsrb xmm11, byte [rsi + r11 + 11], 14 - QUAD $0x0b265c203a0f4666; BYTE $0x0f // pinsrb xmm11, byte [rsi + r12 + 11], 15 + QUAD $0x00000080249c8b48 // mov rbx, qword [rsp + 128] + QUAD $0x0b1e5c203a0f4466; BYTE $0x09 // pinsrb xmm11, byte [rsi + rbx + 11], 9 + LONG $0x24548b48; BYTE $0x30 // mov rdx, qword [rsp + 48] + QUAD $0x0b165c203a0f4466; BYTE $0x0a // pinsrb xmm11, byte [rsi + rdx + 11], 10 + LONG $0x24548b48; BYTE $0x28 // mov rdx, qword [rsp + 40] + QUAD $0x0b165c203a0f4466; BYTE $0x0b // pinsrb xmm11, byte [rsi + rdx + 11], 11 + LONG $0x247c8b48; BYTE $0x38 // mov rdi, qword [rsp + 56] + QUAD $0x0b3e5c203a0f4466; BYTE $0x0c // pinsrb xmm11, byte [rsi + rdi + 11], 12 + LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] + QUAD $0x0b165c203a0f4466; BYTE $0x0d // pinsrb xmm11, byte [rsi + rdx + 11], 13 + LONG $0x24548b48; BYTE $0x18 // mov rdx, qword [rsp + 24] + QUAD $0x0b165c203a0f4466; BYTE $0x0e // pinsrb xmm11, byte [rsi + rdx + 11], 14 + QUAD $0x0b2e5c203a0f4666; BYTE $0x0f // pinsrb xmm11, byte [rsi + r13 + 11], 15 QUAD $0x000000b085df0f66 // pandn xmm0, oword 176[rbp] /* [rip + .LCPI7_11] */ LONG $0xeb0f4166; BYTE $0xc2 // por xmm0, xmm10 LONG $0x6f0f4566; BYTE $0xd3 // movdqa xmm10, xmm11 @@ -36984,49 +38380,50 @@ LBB7_67: LONG $0xeb0f4466; BYTE $0xd0 // por xmm10, xmm0 LONG $0x0654b60f; BYTE $0x17 // movzx edx, byte [rsi + rax + 23] LONG $0x6e0f4466; BYTE $0xda // movd xmm11, edx + WORD $0x894c; BYTE $0xd8 // mov rax, r11 QUAD $0x00013024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 304] - QUAD $0x0c0644203a0f4266; BYTE $0x01 // pinsrb xmm0, byte [rsi + r8 + 12], 1 - WORD $0x894c; BYTE $0xe8 // mov rax, r13 - QUAD $0x0c2e44203a0f4266; BYTE $0x02 // pinsrb xmm0, byte [rsi + r13 + 12], 2 - WORD $0x8948; BYTE $0xca // mov rdx, rcx - QUAD $0x030c0e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 12], 3 - LONG $0x247c8b4c; BYTE $0x30 // mov r15, qword [rsp + 48] - QUAD $0x0c3e44203a0f4266; BYTE $0x04 // pinsrb xmm0, byte [rsi + r15 + 12], 4 - QUAD $0x050c3e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 12], 5 - LONG $0x244c8b48; BYTE $0x08 // mov rcx, qword [rsp + 8] + QUAD $0x0c1e44203a0f4266; BYTE $0x01 // pinsrb xmm0, byte [rsi + r11 + 12], 1 + QUAD $0x0c1644203a0f4266; BYTE $0x02 // pinsrb xmm0, byte [rsi + r10 + 12], 2 + WORD $0x894d; BYTE $0xd3 // mov r11, r10 + WORD $0x894c; BYTE $0xf2 // mov rdx, r14 + QUAD $0x0c3644203a0f4266; BYTE $0x03 // pinsrb xmm0, byte [rsi + r14 + 12], 3 + QUAD $0x0c0644203a0f4266; BYTE $0x04 // pinsrb xmm0, byte [rsi + r8 + 12], 4 + QUAD $0x0c0e44203a0f4266; BYTE $0x05 // pinsrb xmm0, byte [rsi + r9 + 12], 5 QUAD $0x060c0e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 12], 6 - LONG $0x247c8b48; BYTE $0x50 // mov rdi, qword [rsp + 80] - QUAD $0x070c3e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 12], 7 - LONG $0x245c8b4c; BYTE $0x70 // mov r11, qword [rsp + 112] - QUAD $0x0c1e44203a0f4266; BYTE $0x08 // pinsrb xmm0, byte [rsi + r11 + 12], 8 - QUAD $0x0c0e44203a0f4266; BYTE $0x09 // pinsrb xmm0, byte [rsi + r9 + 12], 9 - QUAD $0x0c1644203a0f4266; BYTE $0x0a // pinsrb xmm0, byte [rsi + r10 + 12], 10 - QUAD $0x000000d024ac8b4c // mov r13, qword [rsp + 208] - QUAD $0x0c2e44203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r13 + 12], 11 - QUAD $0x0c3644203a0f4266; BYTE $0x0c // pinsrb xmm0, byte [rsi + r14 + 12], 12 + QUAD $0x0c2644203a0f4266; BYTE $0x07 // pinsrb xmm0, byte [rsi + r12 + 12], 7 + QUAD $0x0c3e44203a0f4266; BYTE $0x08 // pinsrb xmm0, byte [rsi + r15 + 12], 8 + WORD $0x8949; BYTE $0xdc // mov r12, rbx + QUAD $0x090c1e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 12], 9 + LONG $0x245c8b48; BYTE $0x30 // mov rbx, qword [rsp + 48] + QUAD $0x0a0c1e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 12], 10 + LONG $0x24748b4c; BYTE $0x28 // mov r14, qword [rsp + 40] + QUAD $0x0c3644203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r14 + 12], 11 + QUAD $0x0c0c3e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 12], 12 + LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] QUAD $0x0d0c1e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 12], 13 - LONG $0x24548b4c; BYTE $0x18 // mov r10, qword [rsp + 24] - QUAD $0x0c1644203a0f4266; BYTE $0x0e // pinsrb xmm0, byte [rsi + r10 + 12], 14 - QUAD $0x0c2644203a0f4266; BYTE $0x0f // pinsrb xmm0, byte [rsi + r12 + 12], 15 - QUAD $0x0d0674203a0f4266; BYTE $0x01 // pinsrb xmm6, byte [rsi + r8 + 13], 1 - QUAD $0x020d0674203a0f66 // pinsrb xmm6, byte [rsi + rax + 13], 2 + LONG $0x244c8b4c; BYTE $0x18 // mov r9, qword [rsp + 24] + QUAD $0x0c0e44203a0f4266; BYTE $0x0e // pinsrb xmm0, byte [rsi + r9 + 12], 14 + WORD $0x894d; BYTE $0xea // mov r10, r13 + QUAD $0x0c2e44203a0f4266; BYTE $0x0f // pinsrb xmm0, byte [rsi + r13 + 12], 15 + QUAD $0x010d0674203a0f66 // pinsrb xmm6, byte [rsi + rax + 13], 1 + QUAD $0x0d1e74203a0f4266; BYTE $0x02 // pinsrb xmm6, byte [rsi + r11 + 13], 2 QUAD $0x030d1674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 13], 3 - WORD $0x894c; BYTE $0xf8 // mov rax, r15 - QUAD $0x0d3e74203a0f4266; BYTE $0x04 // pinsrb xmm6, byte [rsi + r15 + 13], 4 - LONG $0x247c8b4c; BYTE $0x40 // mov r15, qword [rsp + 64] - QUAD $0x0d3e74203a0f4266; BYTE $0x05 // pinsrb xmm6, byte [rsi + r15 + 13], 5 + QUAD $0x0d0674203a0f4266; BYTE $0x04 // pinsrb xmm6, byte [rsi + r8 + 13], 4 + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x050d0674203a0f66 // pinsrb xmm6, byte [rsi + rax + 13], 5 QUAD $0x060d0e74203a0f66 // pinsrb xmm6, byte [rsi + rcx + 13], 6 - QUAD $0x070d3e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 13], 7 - QUAD $0x0d1e74203a0f4266; BYTE $0x08 // pinsrb xmm6, byte [rsi + r11 + 13], 8 - QUAD $0x0d0e74203a0f4266; BYTE $0x09 // pinsrb xmm6, byte [rsi + r9 + 13], 9 - QUAD $0x000000a024bc8b48 // mov rdi, qword [rsp + 160] - QUAD $0x0a0d3e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 13], 10 - QUAD $0x0d2e74203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rsi + r13 + 13], 11 - QUAD $0x0d3674203a0f4266; BYTE $0x0c // pinsrb xmm6, byte [rsi + r14 + 13], 12 + QUAD $0x00000090249c8b4c // mov r11, qword [rsp + 144] + QUAD $0x0d1e74203a0f4266; BYTE $0x07 // pinsrb xmm6, byte [rsi + r11 + 13], 7 + QUAD $0x0d3e74203a0f4266; BYTE $0x08 // pinsrb xmm6, byte [rsi + r15 + 13], 8 + QUAD $0x0d2674203a0f4266; BYTE $0x09 // pinsrb xmm6, byte [rsi + r12 + 13], 9 + LONG $0x24548b48; BYTE $0x30 // mov rdx, qword [rsp + 48] + QUAD $0x0a0d1674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 13], 10 + QUAD $0x0d3674203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rsi + r14 + 13], 11 + QUAD $0x0c0d3e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 13], 12 QUAD $0x0d0d1e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 13], 13 - WORD $0x894d; BYTE $0xd0 // mov r8, r10 - QUAD $0x0d1674203a0f4266; BYTE $0x0e // pinsrb xmm6, byte [rsi + r10 + 13], 14 - QUAD $0x0d2674203a0f4266; BYTE $0x0f // pinsrb xmm6, byte [rsi + r12 + 13], 15 + QUAD $0x0d0e74203a0f4266; BYTE $0x0e // pinsrb xmm6, byte [rsi + r9 + 13], 14 + QUAD $0x0d2e74203a0f4266; BYTE $0x0f // pinsrb xmm6, byte [rsi + r13 + 13], 15 + WORD $0x894d; BYTE $0xe9 // mov r9, r13 QUAD $0x000100adf80f4466; BYTE $0x00 // psubb xmm13, oword 256[rbp] /* [rip + .LCPI7_16] */ LONG $0xeb0f4566; BYTE $0xd5 // por xmm10, xmm13 LONG $0xd06f0f66 // movdqa xmm2, xmm0 @@ -37035,103 +38432,100 @@ LBB7_67: LONG $0xd0740f66 // pcmpeqb xmm2, xmm0 LONG $0xc66f0f66 // movdqa xmm0, xmm6 LONG $0xda0f4166; BYTE $0xc4 // pminub xmm0, xmm12 - LONG $0xc6740f66 // pcmpeqb xmm0, xmm6 - LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] - LONG $0x0e54b60f; BYTE $0x19 // movzx edx, byte [rsi + rcx + 25] - LONG $0x6e0f4466; BYTE $0xe2 // movd xmm12, edx - LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] - QUAD $0x010e1e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 14], 1 - LONG $0x244c8b48; BYTE $0x58 // mov rcx, qword [rsp + 88] - QUAD $0x020e0e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 14], 2 - LONG $0x24648b4c; BYTE $0x10 // mov r12, qword [rsp + 16] - QUAD $0x0e266c203a0f4266; BYTE $0x03 // pinsrb xmm5, byte [rsi + r12 + 14], 3 - WORD $0x8948; BYTE $0xc2 // mov rdx, rax - QUAD $0x040e066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 14], 4 - WORD $0x894d; BYTE $0xf9 // mov r9, r15 - QUAD $0x0e3e6c203a0f4266; BYTE $0x05 // pinsrb xmm5, byte [rsi + r15 + 14], 5 - LONG $0x244c8b48; BYTE $0x08 // mov rcx, qword [rsp + 8] + LONG $0xc6740f66 // pcmpeqb xmm0, xmm6 + QUAD $0x000000a024948b48 // mov rdx, qword [rsp + 160] + LONG $0x1654b60f; BYTE $0x19 // movzx edx, byte [rsi + rdx + 25] + LONG $0x6e0f4466; BYTE $0xe2 // movd xmm12, edx + LONG $0x245c8b48; BYTE $0x60 // mov rbx, qword [rsp + 96] + QUAD $0x010e1e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 14], 1 + LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] + QUAD $0x0e2e6c203a0f4266; BYTE $0x02 // pinsrb xmm5, byte [rsi + r13 + 14], 2 + LONG $0x24548b48; BYTE $0x40 // mov rdx, qword [rsp + 64] + QUAD $0x030e166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 14], 3 + QUAD $0x0e066c203a0f4266; BYTE $0x04 // pinsrb xmm5, byte [rsi + r8 + 14], 4 + WORD $0x8949; BYTE $0xc0 // mov r8, rax + QUAD $0x050e066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 14], 5 QUAD $0x060e0e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 14], 6 - LONG $0x24548b4c; BYTE $0x50 // mov r10, qword [rsp + 80] - QUAD $0x0e166c203a0f4266; BYTE $0x07 // pinsrb xmm5, byte [rsi + r10 + 14], 7 - WORD $0x894d; BYTE $0xdf // mov r15, r11 - QUAD $0x0e1e6c203a0f4266; BYTE $0x08 // pinsrb xmm5, byte [rsi + r11 + 14], 8 - LONG $0x245c8b4c; BYTE $0x78 // mov r11, qword [rsp + 120] - QUAD $0x0e1e6c203a0f4266; BYTE $0x09 // pinsrb xmm5, byte [rsi + r11 + 14], 9 - QUAD $0x0a0e3e6c203a0f66 // pinsrb xmm5, byte [rsi + rdi + 14], 10 - WORD $0x894d; BYTE $0xee // mov r14, r13 - QUAD $0x0e2e6c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rsi + r13 + 14], 11 - LONG $0x246c8b4c; BYTE $0x68 // mov r13, qword [rsp + 104] - QUAD $0x0e2e6c203a0f4266; BYTE $0x0c // pinsrb xmm5, byte [rsi + r13 + 14], 12 - LONG $0x24048b48 // mov rax, qword [rsp] + WORD $0x894d; BYTE $0xda // mov r10, r11 + QUAD $0x0e1e6c203a0f4266; BYTE $0x07 // pinsrb xmm5, byte [rsi + r11 + 14], 7 + WORD $0x894d; BYTE $0xfe // mov r14, r15 + QUAD $0x0e3e6c203a0f4266; BYTE $0x08 // pinsrb xmm5, byte [rsi + r15 + 14], 8 + WORD $0x894c; BYTE $0xe7 // mov rdi, r12 + QUAD $0x0e266c203a0f4266; BYTE $0x09 // pinsrb xmm5, byte [rsi + r12 + 14], 9 + LONG $0x245c8b4c; BYTE $0x30 // mov r11, qword [rsp + 48] + QUAD $0x0e1e6c203a0f4266; BYTE $0x0a // pinsrb xmm5, byte [rsi + r11 + 14], 10 + LONG $0x247c8b4c; BYTE $0x28 // mov r15, qword [rsp + 40] + QUAD $0x0e3e6c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rsi + r15 + 14], 11 + LONG $0x24648b4c; BYTE $0x38 // mov r12, qword [rsp + 56] + QUAD $0x0e266c203a0f4266; BYTE $0x0c // pinsrb xmm5, byte [rsi + r12 + 14], 12 + LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] QUAD $0x0d0e066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 14], 13 - QUAD $0x0e066c203a0f4266; BYTE $0x0e // pinsrb xmm5, byte [rsi + r8 + 14], 14 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - QUAD $0x0f0e066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 14], 15 + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + QUAD $0x0e0e066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 14], 14 + QUAD $0x0e0e6c203a0f4266; BYTE $0x0f // pinsrb xmm5, byte [rsi + r9 + 14], 15 QUAD $0x0f1e44203a0f4466; BYTE $0x01 // pinsrb xmm8, byte [rsi + rbx + 15], 1 - LONG $0x24448b4c; BYTE $0x58 // mov r8, qword [rsp + 88] - QUAD $0x0f0644203a0f4666; BYTE $0x02 // pinsrb xmm8, byte [rsi + r8 + 15], 2 - QUAD $0x0f2644203a0f4666; BYTE $0x03 // pinsrb xmm8, byte [rsi + r12 + 15], 3 - QUAD $0x0f1644203a0f4466; BYTE $0x04 // pinsrb xmm8, byte [rsi + rdx + 15], 4 - QUAD $0x0f0e44203a0f4666; BYTE $0x05 // pinsrb xmm8, byte [rsi + r9 + 15], 5 + QUAD $0x0f2e44203a0f4666; BYTE $0x02 // pinsrb xmm8, byte [rsi + r13 + 15], 2 + QUAD $0x0f1644203a0f4466; BYTE $0x03 // pinsrb xmm8, byte [rsi + rdx + 15], 3 + LONG $0x246c8b4c; BYTE $0x58 // mov r13, qword [rsp + 88] + QUAD $0x0f2e44203a0f4666; BYTE $0x04 // pinsrb xmm8, byte [rsi + r13 + 15], 4 + QUAD $0x0f0644203a0f4666; BYTE $0x05 // pinsrb xmm8, byte [rsi + r8 + 15], 5 QUAD $0x0f0e44203a0f4466; BYTE $0x06 // pinsrb xmm8, byte [rsi + rcx + 15], 6 QUAD $0x0f1644203a0f4666; BYTE $0x07 // pinsrb xmm8, byte [rsi + r10 + 15], 7 - QUAD $0x0f3e44203a0f4666; BYTE $0x08 // pinsrb xmm8, byte [rsi + r15 + 15], 8 - QUAD $0x0f1e44203a0f4666; BYTE $0x09 // pinsrb xmm8, byte [rsi + r11 + 15], 9 - QUAD $0x0f3e44203a0f4466; BYTE $0x0a // pinsrb xmm8, byte [rsi + rdi + 15], 10 - QUAD $0x0f3644203a0f4666; BYTE $0x0b // pinsrb xmm8, byte [rsi + r14 + 15], 11 - QUAD $0x0f2e44203a0f4666; BYTE $0x0c // pinsrb xmm8, byte [rsi + r13 + 15], 12 - LONG $0x24048b48 // mov rax, qword [rsp] + QUAD $0x0f3644203a0f4666; BYTE $0x08 // pinsrb xmm8, byte [rsi + r14 + 15], 8 + QUAD $0x0f3e44203a0f4466; BYTE $0x09 // pinsrb xmm8, byte [rsi + rdi + 15], 9 + QUAD $0x0f1e44203a0f4666; BYTE $0x0a // pinsrb xmm8, byte [rsi + r11 + 15], 10 + QUAD $0x0f3e44203a0f4666; BYTE $0x0b // pinsrb xmm8, byte [rsi + r15 + 15], 11 + QUAD $0x0f2644203a0f4666; BYTE $0x0c // pinsrb xmm8, byte [rsi + r12 + 15], 12 + LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] QUAD $0x0f0644203a0f4466; BYTE $0x0d // pinsrb xmm8, byte [rsi + rax + 15], 13 - LONG $0x24448b4c; BYTE $0x18 // mov r8, qword [rsp + 24] - QUAD $0x0f0644203a0f4666; BYTE $0x0e // pinsrb xmm8, byte [rsi + r8 + 15], 14 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - QUAD $0x0f0644203a0f4466; BYTE $0x0f // pinsrb xmm8, byte [rsi + rax + 15], 15 + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + QUAD $0x0f0644203a0f4466; BYTE $0x0e // pinsrb xmm8, byte [rsi + rax + 15], 14 + QUAD $0x0f0e44203a0f4666; BYTE $0x0f // pinsrb xmm8, byte [rsi + r9 + 15], 15 QUAD $0x01111e7c203a0f66 // pinsrb xmm7, byte [rsi + rbx + 17], 1 - LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x0211067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 17], 2 - QUAD $0x11267c203a0f4266; BYTE $0x03 // pinsrb xmm7, byte [rsi + r12 + 17], 3 - QUAD $0x0411167c203a0f66 // pinsrb xmm7, byte [rsi + rdx + 17], 4 - QUAD $0x110e7c203a0f4266; BYTE $0x05 // pinsrb xmm7, byte [rsi + r9 + 17], 5 + QUAD $0x0311167c203a0f66 // pinsrb xmm7, byte [rsi + rdx + 17], 3 + QUAD $0x112e7c203a0f4266; BYTE $0x04 // pinsrb xmm7, byte [rsi + r13 + 17], 4 + QUAD $0x11067c203a0f4266; BYTE $0x05 // pinsrb xmm7, byte [rsi + r8 + 17], 5 QUAD $0x06110e7c203a0f66 // pinsrb xmm7, byte [rsi + rcx + 17], 6 QUAD $0x11167c203a0f4266; BYTE $0x07 // pinsrb xmm7, byte [rsi + r10 + 17], 7 - QUAD $0x113e7c203a0f4266; BYTE $0x08 // pinsrb xmm7, byte [rsi + r15 + 17], 8 - QUAD $0x111e7c203a0f4266; BYTE $0x09 // pinsrb xmm7, byte [rsi + r11 + 17], 9 - QUAD $0x0a113e7c203a0f66 // pinsrb xmm7, byte [rsi + rdi + 17], 10 - QUAD $0x11367c203a0f4266; BYTE $0x0b // pinsrb xmm7, byte [rsi + r14 + 17], 11 - QUAD $0x112e7c203a0f4266; BYTE $0x0c // pinsrb xmm7, byte [rsi + r13 + 17], 12 - LONG $0x24048b48 // mov rax, qword [rsp] - QUAD $0x0d11067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 17], 13 - QUAD $0x11067c203a0f4266; BYTE $0x0e // pinsrb xmm7, byte [rsi + r8 + 17], 14 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - QUAD $0x0f11067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 17], 15 + QUAD $0x11367c203a0f4266; BYTE $0x08 // pinsrb xmm7, byte [rsi + r14 + 17], 8 + QUAD $0x09113e7c203a0f66 // pinsrb xmm7, byte [rsi + rdi + 17], 9 + QUAD $0x111e7c203a0f4266; BYTE $0x0a // pinsrb xmm7, byte [rsi + r11 + 17], 10 + QUAD $0x113e7c203a0f4266; BYTE $0x0b // pinsrb xmm7, byte [rsi + r15 + 17], 11 + QUAD $0x11267c203a0f4266; BYTE $0x0c // pinsrb xmm7, byte [rsi + r12 + 17], 12 + LONG $0x246c8b4c; BYTE $0x10 // mov r13, qword [rsp + 16] + QUAD $0x112e7c203a0f4266; BYTE $0x0d // pinsrb xmm7, byte [rsi + r13 + 17], 13 + LONG $0x24448b48; BYTE $0x18 // mov rax, qword [rsp + 24] + QUAD $0x0e11067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 17], 14 + QUAD $0x110e7c203a0f4266; BYTE $0x0f // pinsrb xmm7, byte [rsi + r9 + 17], 15 QUAD $0x01121e4c203a0f66 // pinsrb xmm1, byte [rsi + rbx + 18], 1 - LONG $0x245c8b48; BYTE $0x58 // mov rbx, qword [rsp + 88] + LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] QUAD $0x02121e4c203a0f66 // pinsrb xmm1, byte [rsi + rbx + 18], 2 - QUAD $0x12264c203a0f4266; BYTE $0x03 // pinsrb xmm1, byte [rsi + r12 + 18], 3 - QUAD $0x0412164c203a0f66 // pinsrb xmm1, byte [rsi + rdx + 18], 4 - QUAD $0x120e4c203a0f4266; BYTE $0x05 // pinsrb xmm1, byte [rsi + r9 + 18], 5 + QUAD $0x0312164c203a0f66 // pinsrb xmm1, byte [rsi + rdx + 18], 3 + LONG $0x24448b48; BYTE $0x58 // mov rax, qword [rsp + 88] + QUAD $0x0412064c203a0f66 // pinsrb xmm1, byte [rsi + rax + 18], 4 + QUAD $0x12064c203a0f4266; BYTE $0x05 // pinsrb xmm1, byte [rsi + r8 + 18], 5 QUAD $0x06120e4c203a0f66 // pinsrb xmm1, byte [rsi + rcx + 18], 6 QUAD $0x12164c203a0f4266; BYTE $0x07 // pinsrb xmm1, byte [rsi + r10 + 18], 7 - QUAD $0x123e4c203a0f4266; BYTE $0x08 // pinsrb xmm1, byte [rsi + r15 + 18], 8 - WORD $0x894d; BYTE $0xfc // mov r12, r15 - QUAD $0x121e4c203a0f4266; BYTE $0x09 // pinsrb xmm1, byte [rsi + r11 + 18], 9 - QUAD $0x0a123e4c203a0f66 // pinsrb xmm1, byte [rsi + rdi + 18], 10 - WORD $0x8949; BYTE $0xfa // mov r10, rdi - QUAD $0x12364c203a0f4266; BYTE $0x0b // pinsrb xmm1, byte [rsi + r14 + 18], 11 - WORD $0x894d; BYTE $0xf7 // mov r15, r14 - QUAD $0x122e4c203a0f4266; BYTE $0x0c // pinsrb xmm1, byte [rsi + r13 + 18], 12 - LONG $0x240c8b4c // mov r9, qword [rsp] - QUAD $0x120e4c203a0f4266; BYTE $0x0d // pinsrb xmm1, byte [rsi + r9 + 18], 13 + QUAD $0x12364c203a0f4266; BYTE $0x08 // pinsrb xmm1, byte [rsi + r14 + 18], 8 + WORD $0x894d; BYTE $0xf2 // mov r10, r14 + QUAD $0x09123e4c203a0f66 // pinsrb xmm1, byte [rsi + rdi + 18], 9 + QUAD $0x121e4c203a0f4266; BYTE $0x0a // pinsrb xmm1, byte [rsi + r11 + 18], 10 + QUAD $0x123e4c203a0f4266; BYTE $0x0b // pinsrb xmm1, byte [rsi + r15 + 18], 11 + QUAD $0x12264c203a0f4266; BYTE $0x0c // pinsrb xmm1, byte [rsi + r12 + 18], 12 + QUAD $0x122e4c203a0f4266; BYTE $0x0d // pinsrb xmm1, byte [rsi + r13 + 18], 13 QUAD $0x000000d095df0f66 // pandn xmm2, oword 208[rbp] /* [rip + .LCPI7_13] */ QUAD $0x000000e085df0f66 // pandn xmm0, oword 224[rbp] /* [rip + .LCPI7_14] */ LONG $0xc2eb0f66 // por xmm0, xmm2 LONG $0xd56f0f66 // movdqa xmm2, xmm5 LONG $0xda0f4166; BYTE $0xd5 // pminub xmm2, xmm13 LONG $0xd5740f66 // pcmpeqb xmm2, xmm5 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + QUAD $0x000000a024848b48 // mov rax, qword [rsp + 160] LONG $0x0654b60f; BYTE $0x1a // movzx edx, byte [rsi + rax + 26] LONG $0xea6e0f66 // movd xmm5, edx - QUAD $0x12064c203a0f4266; BYTE $0x0e // pinsrb xmm1, byte [rsi + r8 + 18], 14 + LONG $0x244c8b4c; BYTE $0x18 // mov r9, qword [rsp + 24] + QUAD $0x120e4c203a0f4266; BYTE $0x0e // pinsrb xmm1, byte [rsi + r9 + 18], 14 QUAD $0x000000f095df0f66 // pandn xmm2, oword 240[rbp] /* [rip + .LCPI7_15] */ LONG $0xd0eb0f66 // por xmm2, xmm0 LONG $0x6f0f4166; BYTE $0xf0 // movdqa xmm6, xmm8 @@ -37139,8 +38533,8 @@ LBB7_67: LONG $0x740f4166; BYTE $0xf0 // pcmpeqb xmm6, xmm8 LONG $0x0654b60f; BYTE $0x1b // movzx edx, byte [rsi + rax + 27] LONG $0xc26e0f66 // movd xmm0, edx - LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] - QUAD $0x0f120e4c203a0f66 // pinsrb xmm1, byte [rsi + rcx + 18], 15 + LONG $0x24448b4c; BYTE $0x48 // mov r8, qword [rsp + 72] + QUAD $0x12064c203a0f4266; BYTE $0x0f // pinsrb xmm1, byte [rsi + r8 + 18], 15 QUAD $0x00000100b5ef0f66 // pxor xmm6, oword 256[rbp] /* [rip + .LCPI7_16] */ LONG $0xf6710f66; BYTE $0x07 // psllw xmm6, 7 LONG $0x75db0f66; BYTE $0x60 // pand xmm6, oword 96[rbp] /* [rip + .LCPI7_6] */ @@ -37148,7 +38542,7 @@ LBB7_67: LONG $0x0654b60f; BYTE $0x1c // movzx edx, byte [rsi + rax + 28] LONG $0x6e0f4466; BYTE $0xc2 // movd xmm8, edx LONG $0xeb0f4166; BYTE $0xf2 // por xmm6, xmm10 - QUAD $0x0000b024b47f0f66; BYTE $0x00 // movdqa oword [rsp + 176], xmm6 + QUAD $0x0000c024b47f0f66; BYTE $0x00 // movdqa oword [rsp + 192], xmm6 LONG $0xd76f0f66 // movdqa xmm2, xmm7 LONG $0xda0f4166; BYTE $0xd5 // pminub xmm2, xmm13 LONG $0xd7740f66 // pcmpeqb xmm2, xmm7 @@ -37161,8 +38555,8 @@ LBB7_67: LONG $0x0654b60f; BYTE $0x1d // movzx edx, byte [rsi + rax + 29] LONG $0xf26e0f66 // movd xmm6, edx LONG $0x0654b60f; BYTE $0x1e // movzx edx, byte [rsi + rax + 30] - LONG $0x067cb60f; BYTE $0x1f // movzx edi, byte [rsi + rax + 31] - LONG $0x24448b48; BYTE $0x38 // mov rax, qword [rsp + 56] + LONG $0x064cb60f; BYTE $0x1f // movzx ecx, byte [rsi + rax + 31] + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] QUAD $0x0113065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 19], 1 QUAD $0x14064c203a0f4466; BYTE $0x01 // pinsrb xmm9, byte [rsi + rax + 20], 1 QUAD $0x01150664203a0f66 // pinsrb xmm4, byte [rsi + rax + 21], 1 @@ -37175,7 +38569,7 @@ LBB7_67: QUAD $0x011d0674203a0f66 // pinsrb xmm6, byte [rsi + rax + 29], 1 LONG $0xca6e0f66 // movd xmm1, edx QUAD $0x011e064c203a0f66 // pinsrb xmm1, byte [rsi + rax + 30], 1 - LONG $0xff6e0f66 // movd xmm7, edi + LONG $0xf96e0f66 // movd xmm7, ecx QUAD $0x011f067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 31], 1 WORD $0x8948; BYTE $0xd8 // mov rax, rbx QUAD $0x02131e5c203a0f66 // pinsrb xmm3, byte [rsi + rbx + 19], 2 @@ -37190,73 +38584,79 @@ LBB7_67: QUAD $0x021d1e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 29], 2 QUAD $0x021e1e4c203a0f66 // pinsrb xmm1, byte [rsi + rbx + 30], 2 QUAD $0x021f1e7c203a0f66 // pinsrb xmm7, byte [rsi + rbx + 31], 2 - LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] + LONG $0x24448b48; BYTE $0x40 // mov rax, qword [rsp + 64] QUAD $0x0313065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 19], 3 - LONG $0x24548b48; BYTE $0x30 // mov rdx, qword [rsp + 48] + LONG $0x24548b48; BYTE $0x58 // mov rdx, qword [rsp + 88] QUAD $0x0413165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 19], 4 - LONG $0x246c8b4c; BYTE $0x40 // mov r13, qword [rsp + 64] - QUAD $0x132e5c203a0f4266; BYTE $0x05 // pinsrb xmm3, byte [rsi + r13 + 19], 5 - LONG $0x247c8b48; BYTE $0x08 // mov rdi, qword [rsp + 8] + LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] + QUAD $0x05130e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 19], 5 + LONG $0x247c8b48; BYTE $0x68 // mov rdi, qword [rsp + 104] QUAD $0x06133e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 19], 6 - LONG $0x245c8b4c; BYTE $0x50 // mov r11, qword [rsp + 80] - QUAD $0x131e5c203a0f4266; BYTE $0x07 // pinsrb xmm3, byte [rsi + r11 + 19], 7 - QUAD $0x13265c203a0f4266; BYTE $0x08 // pinsrb xmm3, byte [rsi + r12 + 19], 8 - LONG $0x24748b4c; BYTE $0x78 // mov r14, qword [rsp + 120] - QUAD $0x13365c203a0f4266; BYTE $0x09 // pinsrb xmm3, byte [rsi + r14 + 19], 9 - QUAD $0x13165c203a0f4266; BYTE $0x0a // pinsrb xmm3, byte [rsi + r10 + 19], 10 - QUAD $0x133e5c203a0f4266; BYTE $0x0b // pinsrb xmm3, byte [rsi + r15 + 19], 11 - LONG $0x245c8b48; BYTE $0x68 // mov rbx, qword [rsp + 104] + QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] + QUAD $0x13365c203a0f4266; BYTE $0x07 // pinsrb xmm3, byte [rsi + r14 + 19], 7 + WORD $0x894d; BYTE $0xd4 // mov r12, r10 + QUAD $0x13165c203a0f4266; BYTE $0x08 // pinsrb xmm3, byte [rsi + r10 + 19], 8 + QUAD $0x00000080249c8b4c // mov r11, qword [rsp + 128] + QUAD $0x131e5c203a0f4266; BYTE $0x09 // pinsrb xmm3, byte [rsi + r11 + 19], 9 + LONG $0x247c8b4c; BYTE $0x30 // mov r15, qword [rsp + 48] + QUAD $0x133e5c203a0f4266; BYTE $0x0a // pinsrb xmm3, byte [rsi + r15 + 19], 10 + LONG $0x24548b4c; BYTE $0x28 // mov r10, qword [rsp + 40] + QUAD $0x13165c203a0f4266; BYTE $0x0b // pinsrb xmm3, byte [rsi + r10 + 19], 11 + LONG $0x245c8b48; BYTE $0x38 // mov rbx, qword [rsp + 56] QUAD $0x0c131e5c203a0f66 // pinsrb xmm3, byte [rsi + rbx + 19], 12 - QUAD $0x130e5c203a0f4266; BYTE $0x0d // pinsrb xmm3, byte [rsi + r9 + 19], 13 - QUAD $0x13065c203a0f4266; BYTE $0x0e // pinsrb xmm3, byte [rsi + r8 + 19], 14 - QUAD $0x0f130e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 19], 15 + QUAD $0x132e5c203a0f4266; BYTE $0x0d // pinsrb xmm3, byte [rsi + r13 + 19], 13 + QUAD $0x130e5c203a0f4266; BYTE $0x0e // pinsrb xmm3, byte [rsi + r9 + 19], 14 + QUAD $0x13065c203a0f4266; BYTE $0x0f // pinsrb xmm3, byte [rsi + r8 + 19], 15 QUAD $0x14064c203a0f4466; BYTE $0x03 // pinsrb xmm9, byte [rsi + rax + 20], 3 QUAD $0x14164c203a0f4466; BYTE $0x04 // pinsrb xmm9, byte [rsi + rdx + 20], 4 - QUAD $0x142e4c203a0f4666; BYTE $0x05 // pinsrb xmm9, byte [rsi + r13 + 20], 5 + QUAD $0x140e4c203a0f4466; BYTE $0x05 // pinsrb xmm9, byte [rsi + rcx + 20], 5 QUAD $0x143e4c203a0f4466; BYTE $0x06 // pinsrb xmm9, byte [rsi + rdi + 20], 6 - QUAD $0x141e4c203a0f4666; BYTE $0x07 // pinsrb xmm9, byte [rsi + r11 + 20], 7 + QUAD $0x14364c203a0f4666; BYTE $0x07 // pinsrb xmm9, byte [rsi + r14 + 20], 7 QUAD $0x14264c203a0f4666; BYTE $0x08 // pinsrb xmm9, byte [rsi + r12 + 20], 8 - QUAD $0x14364c203a0f4666; BYTE $0x09 // pinsrb xmm9, byte [rsi + r14 + 20], 9 - QUAD $0x14164c203a0f4666; BYTE $0x0a // pinsrb xmm9, byte [rsi + r10 + 20], 10 - QUAD $0x143e4c203a0f4666; BYTE $0x0b // pinsrb xmm9, byte [rsi + r15 + 20], 11 + QUAD $0x141e4c203a0f4666; BYTE $0x09 // pinsrb xmm9, byte [rsi + r11 + 20], 9 + QUAD $0x143e4c203a0f4666; BYTE $0x0a // pinsrb xmm9, byte [rsi + r15 + 20], 10 + QUAD $0x14164c203a0f4666; BYTE $0x0b // pinsrb xmm9, byte [rsi + r10 + 20], 11 QUAD $0x141e4c203a0f4466; BYTE $0x0c // pinsrb xmm9, byte [rsi + rbx + 20], 12 - QUAD $0x140e4c203a0f4666; BYTE $0x0d // pinsrb xmm9, byte [rsi + r9 + 20], 13 - QUAD $0x14064c203a0f4666; BYTE $0x0e // pinsrb xmm9, byte [rsi + r8 + 20], 14 - QUAD $0x140e4c203a0f4466; BYTE $0x0f // pinsrb xmm9, byte [rsi + rcx + 20], 15 + QUAD $0x142e4c203a0f4666; BYTE $0x0d // pinsrb xmm9, byte [rsi + r13 + 20], 13 + QUAD $0x140e4c203a0f4666; BYTE $0x0e // pinsrb xmm9, byte [rsi + r9 + 20], 14 + QUAD $0x14064c203a0f4666; BYTE $0x0f // pinsrb xmm9, byte [rsi + r8 + 20], 15 QUAD $0x03150664203a0f66 // pinsrb xmm4, byte [rsi + rax + 21], 3 QUAD $0x04151664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 21], 4 - QUAD $0x152e64203a0f4266; BYTE $0x05 // pinsrb xmm4, byte [rsi + r13 + 21], 5 + QUAD $0x05150e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 21], 5 QUAD $0x06153e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 21], 6 - QUAD $0x151e64203a0f4266; BYTE $0x07 // pinsrb xmm4, byte [rsi + r11 + 21], 7 + QUAD $0x153664203a0f4266; BYTE $0x07 // pinsrb xmm4, byte [rsi + r14 + 21], 7 QUAD $0x152664203a0f4266; BYTE $0x08 // pinsrb xmm4, byte [rsi + r12 + 21], 8 - QUAD $0x153664203a0f4266; BYTE $0x09 // pinsrb xmm4, byte [rsi + r14 + 21], 9 - QUAD $0x151664203a0f4266; BYTE $0x0a // pinsrb xmm4, byte [rsi + r10 + 21], 10 - QUAD $0x153e64203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r15 + 21], 11 + QUAD $0x151e64203a0f4266; BYTE $0x09 // pinsrb xmm4, byte [rsi + r11 + 21], 9 + QUAD $0x153e64203a0f4266; BYTE $0x0a // pinsrb xmm4, byte [rsi + r15 + 21], 10 + QUAD $0x151664203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r10 + 21], 11 QUAD $0x0c151e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 21], 12 - QUAD $0x150e64203a0f4266; BYTE $0x0d // pinsrb xmm4, byte [rsi + r9 + 21], 13 - QUAD $0x150664203a0f4266; BYTE $0x0e // pinsrb xmm4, byte [rsi + r8 + 21], 14 - QUAD $0x0f150e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 21], 15 + WORD $0x8949; BYTE $0xd8 // mov r8, rbx + QUAD $0x152e64203a0f4266; BYTE $0x0d // pinsrb xmm4, byte [rsi + r13 + 21], 13 + QUAD $0x150e64203a0f4266; BYTE $0x0e // pinsrb xmm4, byte [rsi + r9 + 21], 14 + LONG $0x245c8b48; BYTE $0x48 // mov rbx, qword [rsp + 72] + QUAD $0x0f151e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 21], 15 QUAD $0x16067c203a0f4466; BYTE $0x03 // pinsrb xmm15, byte [rsi + rax + 22], 3 QUAD $0x16167c203a0f4466; BYTE $0x04 // pinsrb xmm15, byte [rsi + rdx + 22], 4 - QUAD $0x162e7c203a0f4666; BYTE $0x05 // pinsrb xmm15, byte [rsi + r13 + 22], 5 + QUAD $0x160e7c203a0f4466; BYTE $0x05 // pinsrb xmm15, byte [rsi + rcx + 22], 5 QUAD $0x163e7c203a0f4466; BYTE $0x06 // pinsrb xmm15, byte [rsi + rdi + 22], 6 - QUAD $0x161e7c203a0f4666; BYTE $0x07 // pinsrb xmm15, byte [rsi + r11 + 22], 7 + QUAD $0x16367c203a0f4666; BYTE $0x07 // pinsrb xmm15, byte [rsi + r14 + 22], 7 QUAD $0x16267c203a0f4666; BYTE $0x08 // pinsrb xmm15, byte [rsi + r12 + 22], 8 - QUAD $0x16367c203a0f4666; BYTE $0x09 // pinsrb xmm15, byte [rsi + r14 + 22], 9 - QUAD $0x16167c203a0f4666; BYTE $0x0a // pinsrb xmm15, byte [rsi + r10 + 22], 10 + QUAD $0x161e7c203a0f4666; BYTE $0x09 // pinsrb xmm15, byte [rsi + r11 + 22], 9 + QUAD $0x163e7c203a0f4666; BYTE $0x0a // pinsrb xmm15, byte [rsi + r15 + 22], 10 QUAD $0x00011024946f0f66; BYTE $0x00 // movdqa xmm2, oword [rsp + 272] QUAD $0x000000a095df0f66 // pandn xmm2, oword 160[rbp] /* [rip + .LCPI7_10] */ - QUAD $0x163e7c203a0f4666; BYTE $0x0b // pinsrb xmm15, byte [rsi + r15 + 22], 11 + QUAD $0x16167c203a0f4666; BYTE $0x0b // pinsrb xmm15, byte [rsi + r10 + 22], 11 QUAD $0x0000b095df0f4466; BYTE $0x00 // pandn xmm10, oword 176[rbp] /* [rip + .LCPI7_11] */ LONG $0xeb0f4466; BYTE $0xd2 // por xmm10, xmm2 - QUAD $0x161e7c203a0f4466; BYTE $0x0c // pinsrb xmm15, byte [rsi + rbx + 22], 12 + QUAD $0x16067c203a0f4666; BYTE $0x0c // pinsrb xmm15, byte [rsi + r8 + 22], 12 LONG $0xd36f0f66 // movdqa xmm2, xmm3 LONG $0xda0f4166; BYTE $0xd5 // pminub xmm2, xmm13 LONG $0xd3740f66 // pcmpeqb xmm2, xmm3 - QUAD $0x160e7c203a0f4666; BYTE $0x0d // pinsrb xmm15, byte [rsi + r9 + 22], 13 + QUAD $0x162e7c203a0f4666; BYTE $0x0d // pinsrb xmm15, byte [rsi + r13 + 22], 13 QUAD $0x000000c095df0f66 // pandn xmm2, oword 192[rbp] /* [rip + .LCPI7_12] */ LONG $0xeb0f4166; BYTE $0xd2 // por xmm2, xmm10 - QUAD $0x16067c203a0f4666; BYTE $0x0e // pinsrb xmm15, byte [rsi + r8 + 22], 14 + QUAD $0x160e7c203a0f4666; BYTE $0x0e // pinsrb xmm15, byte [rsi + r9 + 22], 14 + WORD $0x894c; BYTE $0xcf // mov rdi, r9 QUAD $0x000100b5f80f4466; BYTE $0x00 // psubb xmm14, oword 256[rbp] /* [rip + .LCPI7_16] */ LONG $0xeb0f4166; BYTE $0xd6 // por xmm2, xmm14 LONG $0x6f0f4566; BYTE $0xd1 // movdqa xmm10, xmm9 @@ -37266,7 +38666,7 @@ LBB7_67: LONG $0x6f0f4566; BYTE $0xcd // movdqa xmm9, xmm13 LONG $0xda0f4166; BYTE $0xdd // pminub xmm3, xmm13 LONG $0xdc740f66 // pcmpeqb xmm3, xmm4 - QUAD $0x160e7c203a0f4466; BYTE $0x0f // pinsrb xmm15, byte [rsi + rcx + 22], 15 + QUAD $0x161e7c203a0f4466; BYTE $0x0f // pinsrb xmm15, byte [rsi + rbx + 22], 15 QUAD $0x0000d0ad6f0f4466; BYTE $0x00 // movdqa xmm13, oword 208[rbp] /* [rip + .LCPI7_13] */ LONG $0xdf0f4566; BYTE $0xd5 // pandn xmm10, xmm13 QUAD $0x000000e0a56f0f66 // movdqa xmm4, oword 224[rbp] /* [rip + .LCPI7_14] */ @@ -37278,17 +38678,20 @@ LBB7_67: LONG $0x740f4166; BYTE $0xe7 // pcmpeqb xmm4, xmm15 QUAD $0x17065c203a0f4466; BYTE $0x03 // pinsrb xmm11, byte [rsi + rax + 23], 3 QUAD $0x17165c203a0f4466; BYTE $0x04 // pinsrb xmm11, byte [rsi + rdx + 23], 4 - QUAD $0x172e5c203a0f4666; BYTE $0x05 // pinsrb xmm11, byte [rsi + r13 + 23], 5 - QUAD $0x173e5c203a0f4466; BYTE $0x06 // pinsrb xmm11, byte [rsi + rdi + 23], 6 - QUAD $0x171e5c203a0f4666; BYTE $0x07 // pinsrb xmm11, byte [rsi + r11 + 23], 7 + QUAD $0x170e5c203a0f4466; BYTE $0x05 // pinsrb xmm11, byte [rsi + rcx + 23], 5 + WORD $0x8949; BYTE $0xc8 // mov r8, rcx + LONG $0x244c8b4c; BYTE $0x68 // mov r9, qword [rsp + 104] + QUAD $0x170e5c203a0f4666; BYTE $0x06 // pinsrb xmm11, byte [rsi + r9 + 23], 6 + QUAD $0x17365c203a0f4666; BYTE $0x07 // pinsrb xmm11, byte [rsi + r14 + 23], 7 QUAD $0x17265c203a0f4666; BYTE $0x08 // pinsrb xmm11, byte [rsi + r12 + 23], 8 - QUAD $0x17365c203a0f4666; BYTE $0x09 // pinsrb xmm11, byte [rsi + r14 + 23], 9 - QUAD $0x17165c203a0f4666; BYTE $0x0a // pinsrb xmm11, byte [rsi + r10 + 23], 10 - QUAD $0x173e5c203a0f4666; BYTE $0x0b // pinsrb xmm11, byte [rsi + r15 + 23], 11 - QUAD $0x171e5c203a0f4466; BYTE $0x0c // pinsrb xmm11, byte [rsi + rbx + 23], 12 - QUAD $0x170e5c203a0f4666; BYTE $0x0d // pinsrb xmm11, byte [rsi + r9 + 23], 13 - QUAD $0x17065c203a0f4666; BYTE $0x0e // pinsrb xmm11, byte [rsi + r8 + 23], 14 - QUAD $0x170e5c203a0f4466; BYTE $0x0f // pinsrb xmm11, byte [rsi + rcx + 23], 15 + QUAD $0x171e5c203a0f4666; BYTE $0x09 // pinsrb xmm11, byte [rsi + r11 + 23], 9 + QUAD $0x173e5c203a0f4666; BYTE $0x0a // pinsrb xmm11, byte [rsi + r15 + 23], 10 + QUAD $0x17165c203a0f4666; BYTE $0x0b // pinsrb xmm11, byte [rsi + r10 + 23], 11 + LONG $0x244c8b48; BYTE $0x38 // mov rcx, qword [rsp + 56] + QUAD $0x170e5c203a0f4466; BYTE $0x0c // pinsrb xmm11, byte [rsi + rcx + 23], 12 + QUAD $0x172e5c203a0f4666; BYTE $0x0d // pinsrb xmm11, byte [rsi + r13 + 23], 13 + QUAD $0x173e5c203a0f4466; BYTE $0x0e // pinsrb xmm11, byte [rsi + rdi + 23], 14 + QUAD $0x171e5c203a0f4466; BYTE $0x0f // pinsrb xmm11, byte [rsi + rbx + 23], 15 QUAD $0x0000f0bd6f0f4466; BYTE $0x00 // movdqa xmm15, oword 240[rbp] /* [rip + .LCPI7_15] */ LONG $0xdf0f4166; BYTE $0xe7 // pandn xmm4, xmm15 LONG $0xe3eb0f66 // por xmm4, xmm3 @@ -37302,30 +38705,30 @@ LBB7_67: LONG $0xdceb0f66 // por xmm3, xmm4 QUAD $0x190664203a0f4466; BYTE $0x03 // pinsrb xmm12, byte [rsi + rax + 25], 3 QUAD $0x191664203a0f4466; BYTE $0x04 // pinsrb xmm12, byte [rsi + rdx + 25], 4 - QUAD $0x192e64203a0f4666; BYTE $0x05 // pinsrb xmm12, byte [rsi + r13 + 25], 5 - QUAD $0x193e64203a0f4466; BYTE $0x06 // pinsrb xmm12, byte [rsi + rdi + 25], 6 - QUAD $0x191e64203a0f4666; BYTE $0x07 // pinsrb xmm12, byte [rsi + r11 + 25], 7 + QUAD $0x190664203a0f4666; BYTE $0x05 // pinsrb xmm12, byte [rsi + r8 + 25], 5 + QUAD $0x190e64203a0f4666; BYTE $0x06 // pinsrb xmm12, byte [rsi + r9 + 25], 6 + QUAD $0x193664203a0f4666; BYTE $0x07 // pinsrb xmm12, byte [rsi + r14 + 25], 7 QUAD $0x192664203a0f4666; BYTE $0x08 // pinsrb xmm12, byte [rsi + r12 + 25], 8 - QUAD $0x193664203a0f4666; BYTE $0x09 // pinsrb xmm12, byte [rsi + r14 + 25], 9 - QUAD $0x191664203a0f4666; BYTE $0x0a // pinsrb xmm12, byte [rsi + r10 + 25], 10 - QUAD $0x193e64203a0f4666; BYTE $0x0b // pinsrb xmm12, byte [rsi + r15 + 25], 11 - QUAD $0x191e64203a0f4466; BYTE $0x0c // pinsrb xmm12, byte [rsi + rbx + 25], 12 - QUAD $0x190e64203a0f4666; BYTE $0x0d // pinsrb xmm12, byte [rsi + r9 + 25], 13 - QUAD $0x190664203a0f4666; BYTE $0x0e // pinsrb xmm12, byte [rsi + r8 + 25], 14 - QUAD $0x190e64203a0f4466; BYTE $0x0f // pinsrb xmm12, byte [rsi + rcx + 25], 15 + QUAD $0x191e64203a0f4666; BYTE $0x09 // pinsrb xmm12, byte [rsi + r11 + 25], 9 + QUAD $0x193e64203a0f4666; BYTE $0x0a // pinsrb xmm12, byte [rsi + r15 + 25], 10 + QUAD $0x191664203a0f4666; BYTE $0x0b // pinsrb xmm12, byte [rsi + r10 + 25], 11 + QUAD $0x190e64203a0f4466; BYTE $0x0c // pinsrb xmm12, byte [rsi + rcx + 25], 12 + QUAD $0x192e64203a0f4666; BYTE $0x0d // pinsrb xmm12, byte [rsi + r13 + 25], 13 + QUAD $0x193e64203a0f4466; BYTE $0x0e // pinsrb xmm12, byte [rsi + rdi + 25], 14 + QUAD $0x191e64203a0f4466; BYTE $0x0f // pinsrb xmm12, byte [rsi + rbx + 25], 15 QUAD $0x031a066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 26], 3 QUAD $0x041a166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 26], 4 - QUAD $0x1a2e6c203a0f4266; BYTE $0x05 // pinsrb xmm5, byte [rsi + r13 + 26], 5 - QUAD $0x061a3e6c203a0f66 // pinsrb xmm5, byte [rsi + rdi + 26], 6 - QUAD $0x1a1e6c203a0f4266; BYTE $0x07 // pinsrb xmm5, byte [rsi + r11 + 26], 7 + QUAD $0x1a066c203a0f4266; BYTE $0x05 // pinsrb xmm5, byte [rsi + r8 + 26], 5 + QUAD $0x1a0e6c203a0f4266; BYTE $0x06 // pinsrb xmm5, byte [rsi + r9 + 26], 6 + QUAD $0x1a366c203a0f4266; BYTE $0x07 // pinsrb xmm5, byte [rsi + r14 + 26], 7 QUAD $0x1a266c203a0f4266; BYTE $0x08 // pinsrb xmm5, byte [rsi + r12 + 26], 8 - QUAD $0x1a366c203a0f4266; BYTE $0x09 // pinsrb xmm5, byte [rsi + r14 + 26], 9 - QUAD $0x1a166c203a0f4266; BYTE $0x0a // pinsrb xmm5, byte [rsi + r10 + 26], 10 - QUAD $0x1a3e6c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rsi + r15 + 26], 11 - QUAD $0x0c1a1e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 26], 12 - QUAD $0x1a0e6c203a0f4266; BYTE $0x0d // pinsrb xmm5, byte [rsi + r9 + 26], 13 - QUAD $0x1a066c203a0f4266; BYTE $0x0e // pinsrb xmm5, byte [rsi + r8 + 26], 14 - QUAD $0x0f1a0e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 26], 15 + QUAD $0x1a1e6c203a0f4266; BYTE $0x09 // pinsrb xmm5, byte [rsi + r11 + 26], 9 + QUAD $0x1a3e6c203a0f4266; BYTE $0x0a // pinsrb xmm5, byte [rsi + r15 + 26], 10 + QUAD $0x1a166c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rsi + r10 + 26], 11 + QUAD $0x0c1a0e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 26], 12 + QUAD $0x1a2e6c203a0f4266; BYTE $0x0d // pinsrb xmm5, byte [rsi + r13 + 26], 13 + QUAD $0x0e1a3e6c203a0f66 // pinsrb xmm5, byte [rsi + rdi + 26], 14 + QUAD $0x0f1a1e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 26], 15 LONG $0xdaeb0f66 // por xmm3, xmm2 LONG $0x6f0f4166; BYTE $0xd4 // movdqa xmm2, xmm12 LONG $0xda0f4166; BYTE $0xd1 // pminub xmm2, xmm9 @@ -37341,17 +38744,17 @@ LBB7_67: LONG $0xdf0f4166; BYTE $0xd2 // pandn xmm2, xmm10 QUAD $0x031b0644203a0f66 // pinsrb xmm0, byte [rsi + rax + 27], 3 QUAD $0x041b1644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 27], 4 - QUAD $0x1b2e44203a0f4266; BYTE $0x05 // pinsrb xmm0, byte [rsi + r13 + 27], 5 - QUAD $0x061b3e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 27], 6 - QUAD $0x1b1e44203a0f4266; BYTE $0x07 // pinsrb xmm0, byte [rsi + r11 + 27], 7 + QUAD $0x1b0644203a0f4266; BYTE $0x05 // pinsrb xmm0, byte [rsi + r8 + 27], 5 + QUAD $0x1b0e44203a0f4266; BYTE $0x06 // pinsrb xmm0, byte [rsi + r9 + 27], 6 + QUAD $0x1b3644203a0f4266; BYTE $0x07 // pinsrb xmm0, byte [rsi + r14 + 27], 7 QUAD $0x1b2644203a0f4266; BYTE $0x08 // pinsrb xmm0, byte [rsi + r12 + 27], 8 - QUAD $0x1b3644203a0f4266; BYTE $0x09 // pinsrb xmm0, byte [rsi + r14 + 27], 9 - QUAD $0x1b1644203a0f4266; BYTE $0x0a // pinsrb xmm0, byte [rsi + r10 + 27], 10 - QUAD $0x1b3e44203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r15 + 27], 11 - QUAD $0x0c1b1e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 27], 12 - QUAD $0x1b0e44203a0f4266; BYTE $0x0d // pinsrb xmm0, byte [rsi + r9 + 27], 13 - QUAD $0x1b0644203a0f4266; BYTE $0x0e // pinsrb xmm0, byte [rsi + r8 + 27], 14 - QUAD $0x0f1b0e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 27], 15 + QUAD $0x1b1e44203a0f4266; BYTE $0x09 // pinsrb xmm0, byte [rsi + r11 + 27], 9 + QUAD $0x1b3e44203a0f4266; BYTE $0x0a // pinsrb xmm0, byte [rsi + r15 + 27], 10 + QUAD $0x1b1644203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r10 + 27], 11 + QUAD $0x0c1b0e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 27], 12 + QUAD $0x1b2e44203a0f4266; BYTE $0x0d // pinsrb xmm0, byte [rsi + r13 + 27], 13 + QUAD $0x0e1b3e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 27], 14 + QUAD $0x0f1b1e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 27], 15 QUAD $0x000000b0a5df0f66 // pandn xmm4, oword 176[rbp] /* [rip + .LCPI7_11] */ LONG $0xe2eb0f66 // por xmm4, xmm2 LONG $0xd06f0f66 // movdqa xmm2, xmm0 @@ -37361,30 +38764,30 @@ LBB7_67: LONG $0xd4eb0f66 // por xmm2, xmm4 QUAD $0x1c0644203a0f4466; BYTE $0x03 // pinsrb xmm8, byte [rsi + rax + 28], 3 QUAD $0x1c1644203a0f4466; BYTE $0x04 // pinsrb xmm8, byte [rsi + rdx + 28], 4 - QUAD $0x1c2e44203a0f4666; BYTE $0x05 // pinsrb xmm8, byte [rsi + r13 + 28], 5 - QUAD $0x1c3e44203a0f4466; BYTE $0x06 // pinsrb xmm8, byte [rsi + rdi + 28], 6 - QUAD $0x1c1e44203a0f4666; BYTE $0x07 // pinsrb xmm8, byte [rsi + r11 + 28], 7 + QUAD $0x1c0644203a0f4666; BYTE $0x05 // pinsrb xmm8, byte [rsi + r8 + 28], 5 + QUAD $0x1c0e44203a0f4666; BYTE $0x06 // pinsrb xmm8, byte [rsi + r9 + 28], 6 + QUAD $0x1c3644203a0f4666; BYTE $0x07 // pinsrb xmm8, byte [rsi + r14 + 28], 7 QUAD $0x1c2644203a0f4666; BYTE $0x08 // pinsrb xmm8, byte [rsi + r12 + 28], 8 - QUAD $0x1c3644203a0f4666; BYTE $0x09 // pinsrb xmm8, byte [rsi + r14 + 28], 9 - QUAD $0x1c1644203a0f4666; BYTE $0x0a // pinsrb xmm8, byte [rsi + r10 + 28], 10 - QUAD $0x1c3e44203a0f4666; BYTE $0x0b // pinsrb xmm8, byte [rsi + r15 + 28], 11 - QUAD $0x1c1e44203a0f4466; BYTE $0x0c // pinsrb xmm8, byte [rsi + rbx + 28], 12 - QUAD $0x1c0e44203a0f4666; BYTE $0x0d // pinsrb xmm8, byte [rsi + r9 + 28], 13 - QUAD $0x1c0644203a0f4666; BYTE $0x0e // pinsrb xmm8, byte [rsi + r8 + 28], 14 - QUAD $0x1c0e44203a0f4466; BYTE $0x0f // pinsrb xmm8, byte [rsi + rcx + 28], 15 + QUAD $0x1c1e44203a0f4666; BYTE $0x09 // pinsrb xmm8, byte [rsi + r11 + 28], 9 + QUAD $0x1c3e44203a0f4666; BYTE $0x0a // pinsrb xmm8, byte [rsi + r15 + 28], 10 + QUAD $0x1c1644203a0f4666; BYTE $0x0b // pinsrb xmm8, byte [rsi + r10 + 28], 11 + QUAD $0x1c0e44203a0f4466; BYTE $0x0c // pinsrb xmm8, byte [rsi + rcx + 28], 12 + QUAD $0x1c2e44203a0f4666; BYTE $0x0d // pinsrb xmm8, byte [rsi + r13 + 28], 13 + QUAD $0x1c3e44203a0f4466; BYTE $0x0e // pinsrb xmm8, byte [rsi + rdi + 28], 14 + QUAD $0x1c1e44203a0f4466; BYTE $0x0f // pinsrb xmm8, byte [rsi + rbx + 28], 15 QUAD $0x031d0674203a0f66 // pinsrb xmm6, byte [rsi + rax + 29], 3 QUAD $0x041d1674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 29], 4 - QUAD $0x1d2e74203a0f4266; BYTE $0x05 // pinsrb xmm6, byte [rsi + r13 + 29], 5 - QUAD $0x061d3e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 29], 6 - QUAD $0x1d1e74203a0f4266; BYTE $0x07 // pinsrb xmm6, byte [rsi + r11 + 29], 7 + QUAD $0x1d0674203a0f4266; BYTE $0x05 // pinsrb xmm6, byte [rsi + r8 + 29], 5 + QUAD $0x1d0e74203a0f4266; BYTE $0x06 // pinsrb xmm6, byte [rsi + r9 + 29], 6 + QUAD $0x1d3674203a0f4266; BYTE $0x07 // pinsrb xmm6, byte [rsi + r14 + 29], 7 QUAD $0x1d2674203a0f4266; BYTE $0x08 // pinsrb xmm6, byte [rsi + r12 + 29], 8 - QUAD $0x1d3674203a0f4266; BYTE $0x09 // pinsrb xmm6, byte [rsi + r14 + 29], 9 - QUAD $0x1d1674203a0f4266; BYTE $0x0a // pinsrb xmm6, byte [rsi + r10 + 29], 10 - QUAD $0x1d3e74203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rsi + r15 + 29], 11 - QUAD $0x0c1d1e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 29], 12 - QUAD $0x1d0e74203a0f4266; BYTE $0x0d // pinsrb xmm6, byte [rsi + r9 + 29], 13 - QUAD $0x1d0674203a0f4266; BYTE $0x0e // pinsrb xmm6, byte [rsi + r8 + 29], 14 - QUAD $0x0f1d0e74203a0f66 // pinsrb xmm6, byte [rsi + rcx + 29], 15 + QUAD $0x1d1e74203a0f4266; BYTE $0x09 // pinsrb xmm6, byte [rsi + r11 + 29], 9 + QUAD $0x1d3e74203a0f4266; BYTE $0x0a // pinsrb xmm6, byte [rsi + r15 + 29], 10 + QUAD $0x1d1674203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rsi + r10 + 29], 11 + QUAD $0x0c1d0e74203a0f66 // pinsrb xmm6, byte [rsi + rcx + 29], 12 + QUAD $0x1d2e74203a0f4266; BYTE $0x0d // pinsrb xmm6, byte [rsi + r13 + 29], 13 + QUAD $0x0e1d3e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 29], 14 + QUAD $0x0f1d1e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 29], 15 LONG $0x760f4566; BYTE $0xd2 // pcmpeqd xmm10, xmm10 LONG $0xf80f4566; BYTE $0xca // psubb xmm9, xmm10 LONG $0xeb0f4166; BYTE $0xd1 // por xmm2, xmm9 @@ -37398,29 +38801,29 @@ LBB7_67: QUAD $0x031f067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 31], 3 QUAD $0x041e164c203a0f66 // pinsrb xmm1, byte [rsi + rdx + 30], 4 QUAD $0x041f167c203a0f66 // pinsrb xmm7, byte [rsi + rdx + 31], 4 - QUAD $0x1e2e4c203a0f4266; BYTE $0x05 // pinsrb xmm1, byte [rsi + r13 + 30], 5 - QUAD $0x1f2e7c203a0f4266; BYTE $0x05 // pinsrb xmm7, byte [rsi + r13 + 31], 5 - QUAD $0x061e3e4c203a0f66 // pinsrb xmm1, byte [rsi + rdi + 30], 6 - QUAD $0x061f3e7c203a0f66 // pinsrb xmm7, byte [rsi + rdi + 31], 6 - QUAD $0x1e1e4c203a0f4266; BYTE $0x07 // pinsrb xmm1, byte [rsi + r11 + 30], 7 - QUAD $0x1f1e7c203a0f4266; BYTE $0x07 // pinsrb xmm7, byte [rsi + r11 + 31], 7 + QUAD $0x1e064c203a0f4266; BYTE $0x05 // pinsrb xmm1, byte [rsi + r8 + 30], 5 + QUAD $0x1f067c203a0f4266; BYTE $0x05 // pinsrb xmm7, byte [rsi + r8 + 31], 5 + QUAD $0x1e0e4c203a0f4266; BYTE $0x06 // pinsrb xmm1, byte [rsi + r9 + 30], 6 + QUAD $0x1f0e7c203a0f4266; BYTE $0x06 // pinsrb xmm7, byte [rsi + r9 + 31], 6 + QUAD $0x1e364c203a0f4266; BYTE $0x07 // pinsrb xmm1, byte [rsi + r14 + 30], 7 + QUAD $0x1f367c203a0f4266; BYTE $0x07 // pinsrb xmm7, byte [rsi + r14 + 31], 7 QUAD $0x1e264c203a0f4266; BYTE $0x08 // pinsrb xmm1, byte [rsi + r12 + 30], 8 QUAD $0x1f267c203a0f4266; BYTE $0x08 // pinsrb xmm7, byte [rsi + r12 + 31], 8 - QUAD $0x1e364c203a0f4266; BYTE $0x09 // pinsrb xmm1, byte [rsi + r14 + 30], 9 - QUAD $0x1f367c203a0f4266; BYTE $0x09 // pinsrb xmm7, byte [rsi + r14 + 31], 9 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] - QUAD $0x1e164c203a0f4266; BYTE $0x0a // pinsrb xmm1, byte [rsi + r10 + 30], 10 - QUAD $0x1f167c203a0f4266; BYTE $0x0a // pinsrb xmm7, byte [rsi + r10 + 31], 10 - QUAD $0x1e3e4c203a0f4266; BYTE $0x0b // pinsrb xmm1, byte [rsi + r15 + 30], 11 - QUAD $0x1f3e7c203a0f4266; BYTE $0x0b // pinsrb xmm7, byte [rsi + r15 + 31], 11 - QUAD $0x0c1e1e4c203a0f66 // pinsrb xmm1, byte [rsi + rbx + 30], 12 - QUAD $0x0c1f1e7c203a0f66 // pinsrb xmm7, byte [rsi + rbx + 31], 12 - QUAD $0x1e0e4c203a0f4266; BYTE $0x0d // pinsrb xmm1, byte [rsi + r9 + 30], 13 - QUAD $0x1f0e7c203a0f4266; BYTE $0x0d // pinsrb xmm7, byte [rsi + r9 + 31], 13 - QUAD $0x1e064c203a0f4266; BYTE $0x0e // pinsrb xmm1, byte [rsi + r8 + 30], 14 - QUAD $0x1f067c203a0f4266; BYTE $0x0e // pinsrb xmm7, byte [rsi + r8 + 31], 14 - QUAD $0x0f1e0e4c203a0f66 // pinsrb xmm1, byte [rsi + rcx + 30], 15 - QUAD $0x0f1f0e7c203a0f66 // pinsrb xmm7, byte [rsi + rcx + 31], 15 + QUAD $0x1e1e4c203a0f4266; BYTE $0x09 // pinsrb xmm1, byte [rsi + r11 + 30], 9 + QUAD $0x1f1e7c203a0f4266; BYTE $0x09 // pinsrb xmm7, byte [rsi + r11 + 31], 9 + QUAD $0x1e3e4c203a0f4266; BYTE $0x0a // pinsrb xmm1, byte [rsi + r15 + 30], 10 + QUAD $0x1f3e7c203a0f4266; BYTE $0x0a // pinsrb xmm7, byte [rsi + r15 + 31], 10 + LONG $0x24048b48 // mov rax, qword [rsp] + QUAD $0x1e164c203a0f4266; BYTE $0x0b // pinsrb xmm1, byte [rsi + r10 + 30], 11 + QUAD $0x1f167c203a0f4266; BYTE $0x0b // pinsrb xmm7, byte [rsi + r10 + 31], 11 + QUAD $0x0c1e0e4c203a0f66 // pinsrb xmm1, byte [rsi + rcx + 30], 12 + QUAD $0x0c1f0e7c203a0f66 // pinsrb xmm7, byte [rsi + rcx + 31], 12 + QUAD $0x1e2e4c203a0f4266; BYTE $0x0d // pinsrb xmm1, byte [rsi + r13 + 30], 13 + QUAD $0x1f2e7c203a0f4266; BYTE $0x0d // pinsrb xmm7, byte [rsi + r13 + 31], 13 + QUAD $0x0e1e3e4c203a0f66 // pinsrb xmm1, byte [rsi + rdi + 30], 14 + QUAD $0x0e1f3e7c203a0f66 // pinsrb xmm7, byte [rsi + rdi + 31], 14 + QUAD $0x0f1e1e4c203a0f66 // pinsrb xmm1, byte [rsi + rbx + 30], 15 + QUAD $0x0f1f1e7c203a0f66 // pinsrb xmm7, byte [rsi + rbx + 31], 15 QUAD $0x000000d085df0f66 // pandn xmm0, oword 208[rbp] /* [rip + .LCPI7_13] */ QUAD $0x000000e0a5df0f66 // pandn xmm4, oword 224[rbp] /* [rip + .LCPI7_14] */ LONG $0xe0eb0f66 // por xmm4, xmm0 @@ -37439,9 +38842,9 @@ LBB7_67: LONG $0xcaeb0f66 // por xmm1, xmm2 LONG $0xc36f0f66 // movdqa xmm0, xmm3 LONG $0xc1600f66 // punpcklbw xmm0, xmm1 - QUAD $0x0000c024ac6f0f66; BYTE $0x00 // movdqa xmm5, oword [rsp + 192] + QUAD $0x0000d024ac6f0f66; BYTE $0x00 // movdqa xmm5, oword [rsp + 208] LONG $0xd56f0f66 // movdqa xmm2, xmm5 - QUAD $0x0000b024b46f0f66; BYTE $0x00 // movdqa xmm6, oword [rsp + 176] + QUAD $0x0000c024b46f0f66; BYTE $0x00 // movdqa xmm6, oword [rsp + 192] LONG $0xd6600f66 // punpcklbw xmm2, xmm6 LONG $0xe26f0f66 // movdqa xmm4, xmm2 LONG $0xe0610f66 // punpcklwd xmm4, xmm0 @@ -37451,437 +38854,34 @@ LBB7_67: LONG $0xc56f0f66 // movdqa xmm0, xmm5 LONG $0xc3610f66 // punpcklwd xmm0, xmm3 LONG $0xeb690f66 // punpckhwd xmm5, xmm3 - QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] + QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] LONG $0x6c7f0ff3; WORD $0x3088 // movdqu oword [rax + 4*rcx + 48], xmm5 LONG $0x447f0ff3; WORD $0x2088 // movdqu oword [rax + 4*rcx + 32], xmm0 LONG $0x547f0ff3; WORD $0x1088 // movdqu oword [rax + 4*rcx + 16], xmm2 + LONG $0x24048948 // mov qword [rsp], rax LONG $0x247f0ff3; BYTE $0x88 // movdqu oword [rax + 4*rcx], xmm4 LONG $0x10c18348 // add rcx, 16 WORD $0x8948; BYTE $0xc8 // mov rax, rcx QUAD $0x000000e8248c3b48 // cmp rcx, qword [rsp + 232] JNE LBB7_67 - QUAD $0x0000010824948b4c // mov r10, qword [rsp + 264] - QUAD $0x000000e824943b4c // cmp r10, qword [rsp + 232] + QUAD $0x0000010824bc8b4c // mov r15, qword [rsp + 264] + QUAD $0x000000e824bc3b4c // cmp r15, qword [rsp + 232] QUAD $0x00000088249c8b4c // mov r11, qword [rsp + 136] - QUAD $0x0000014024b48b4c // mov r14, qword [rsp + 320] + LONG $0x24548a44; BYTE $0x08 // mov r10b, byte [rsp + 8] + QUAD $0x0000014024a48b4c // mov r12, qword [rsp + 320] JNE LBB7_69 JMP LBB7_72 -LBB7_180: - WORD $0x894d; BYTE $0xd0 // mov r8, r10 - LONG $0xfce08349 // and r8, -4 - WORD $0x894c; BYTE $0xc3 // mov rbx, r8 - LONG $0x07e3c148 // shl rbx, 7 - WORD $0x0148; BYTE $0xf3 // add rbx, rsi - LONG $0x84348d4f // lea r14, [r12 + 4*r8] - LONG $0xeb280f45 // movaps xmm13, xmm11 - LONG $0xebc60f45; BYTE $0x00 // shufps xmm13, xmm11, 0 - LONG $0xfcc68148; WORD $0x0001; BYTE $0x00 // add rsi, 508 - WORD $0xc931 // xor ecx, ecx - LONG $0x6f0f4466; WORD $0x007d // movdqa xmm15, oword 0[rbp] /* [rip + .LCPI7_0] */ - -LBB7_181: - QUAD $0xfffffe049e100ff3 // movss xmm3, dword [rsi - 508] - QUAD $0xfffe0896100f44f3; BYTE $0xff // movss xmm10, dword [rsi - 504] - QUAD $0xfffe0c8e100f44f3; BYTE $0xff // movss xmm9, dword [rsi - 500] - QUAD $0xfffffe108e100ff3 // movss xmm1, dword [rsi - 496] - QUAD $0xfffe849e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 380], 16 - QUAD $0xffff049e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 252], 32 - LONG $0x213a0f66; WORD $0x845e; BYTE $0x30 // insertps xmm3, dword [rsi - 124], 48 - QUAD $0xfe8896213a0f4466; WORD $0xffff; BYTE $0x10 // insertps xmm10, dword [rsi - 376], 16 - QUAD $0xff0896213a0f4466; WORD $0xffff; BYTE $0x20 // insertps xmm10, dword [rsi - 248], 32 - QUAD $0x308856213a0f4466 // insertps xmm10, dword [rsi - 120], 48 - QUAD $0xfe8c8e213a0f4466; WORD $0xffff; BYTE $0x10 // insertps xmm9, dword [rsi - 372], 16 - QUAD $0xff0c8e213a0f4466; WORD $0xffff; BYTE $0x20 // insertps xmm9, dword [rsi - 244], 32 - QUAD $0x308c4e213a0f4466 // insertps xmm9, dword [rsi - 116], 48 - QUAD $0xfffe908e213a0f66; WORD $0x10ff // insertps xmm1, dword [rsi - 368], 16 - QUAD $0xffff108e213a0f66; WORD $0x20ff // insertps xmm1, dword [rsi - 240], 32 - LONG $0x213a0f66; WORD $0x904e; BYTE $0x30 // insertps xmm1, dword [rsi - 112], 48 - QUAD $0xfffe1486100f44f3; BYTE $0xff // movss xmm8, dword [rsi - 492] - QUAD $0xfe9486213a0f4466; WORD $0xffff; BYTE $0x10 // insertps xmm8, dword [rsi - 364], 16 - QUAD $0xff1486213a0f4466; WORD $0xffff; BYTE $0x20 // insertps xmm8, dword [rsi - 236], 32 - LONG $0xe5280f45 // movaps xmm12, xmm13 - QUAD $0x309446213a0f4466 // insertps xmm8, dword [rsi - 108], 48 - QUAD $0xfffffe1896100ff3 // movss xmm2, dword [rsi - 488] - QUAD $0xfffe9896213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 360], 16 - QUAD $0xffff1896213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 232], 32 - LONG $0xe3c20f44; BYTE $0x01 // cmpltps xmm12, xmm3 - LONG $0x213a0f66; WORD $0x9856; BYTE $0x30 // insertps xmm2, dword [rsi - 104], 48 - QUAD $0xfffffe1c9e100ff3 // movss xmm3, dword [rsi - 484] - QUAD $0xfffe9c9e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 356], 16 - QUAD $0xffff1c9e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 228], 32 - LONG $0x6b0f4566; BYTE $0xe4 // packssdw xmm12, xmm12 - LONG $0x213a0f66; WORD $0x9c5e; BYTE $0x30 // insertps xmm3, dword [rsi - 100], 48 - QUAD $0xfffffe24a6100ff3 // movss xmm4, dword [rsi - 476] - QUAD $0xfffea4a6213a0f66; WORD $0x10ff // insertps xmm4, dword [rsi - 348], 16 - QUAD $0xffff24a6213a0f66; WORD $0x20ff // insertps xmm4, dword [rsi - 220], 32 - LONG $0x630f4566; BYTE $0xe4 // packsswb xmm12, xmm12 - LONG $0x213a0f66; WORD $0xa466; BYTE $0x30 // insertps xmm4, dword [rsi - 92], 48 - LONG $0xfd280f41 // movaps xmm7, xmm13 - QUAD $0xfffffe44ae100ff3 // movss xmm5, dword [rsi - 444] - QUAD $0xfffec4ae213a0f66; WORD $0x10ff // insertps xmm5, dword [rsi - 316], 16 - QUAD $0xffff44ae213a0f66; WORD $0x20ff // insertps xmm5, dword [rsi - 188], 32 - LONG $0x01fcc20f // cmpltps xmm7, xmm4 - LONG $0x213a0f66; WORD $0xc46e; BYTE $0x30 // insertps xmm5, dword [rsi - 60], 48 - LONG $0xf5280f41 // movaps xmm6, xmm13 - QUAD $0xfffffe6486100ff3 // movss xmm0, dword [rsi - 412] - QUAD $0xfffee486213a0f66; WORD $0x10ff // insertps xmm0, dword [rsi - 284], 16 - QUAD $0xffff6486213a0f66; WORD $0x20ff // insertps xmm0, dword [rsi - 156], 32 - LONG $0x01f5c20f // cmpltps xmm6, xmm5 - LONG $0x213a0f66; WORD $0xe446; BYTE $0x30 // insertps xmm0, dword [rsi - 28], 48 - LONG $0xe5280f41 // movaps xmm4, xmm13 - LONG $0x01e0c20f // cmpltps xmm4, xmm0 - LONG $0xc5280f41 // movaps xmm0, xmm13 - LONG $0xc2c20f41; BYTE $0x01 // cmpltps xmm0, xmm10 - LONG $0xc06b0f66 // packssdw xmm0, xmm0 - LONG $0xc0630f66 // packsswb xmm0, xmm0 - LONG $0x6f0f4466; BYTE $0xf0 // movdqa xmm14, xmm0 - LONG $0xdb0f4566; BYTE $0xf7 // pand xmm14, xmm15 - LONG $0xf80f4466; BYTE $0xf0 // psubb xmm14, xmm0 - QUAD $0xfffe2096100f44f3; BYTE $0xff // movss xmm10, dword [rsi - 480] - QUAD $0xfea096213a0f4466; WORD $0xffff; BYTE $0x10 // insertps xmm10, dword [rsi - 352], 16 - LONG $0xdb0f4566; BYTE $0xe7 // pand xmm12, xmm15 - QUAD $0xff2096213a0f4466; WORD $0xffff; BYTE $0x20 // insertps xmm10, dword [rsi - 224], 32 - LONG $0xeb0f4566; BYTE $0xf4 // por xmm14, xmm12 - LONG $0xed280f41 // movaps xmm5, xmm13 - LONG $0xe9c20f41; BYTE $0x01 // cmpltps xmm5, xmm9 - QUAD $0x30a056213a0f4466 // insertps xmm10, dword [rsi - 96], 48 - LONG $0xed6b0f66 // packssdw xmm5, xmm5 - LONG $0xed630f66 // packsswb xmm5, xmm5 - LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 - LONG $0xf5710f66; BYTE $0x02 // psllw xmm5, 2 - LONG $0x456f0f66; BYTE $0x10 // movdqa xmm0, oword 16[rbp] /* [rip + .LCPI7_1] */ - LONG $0xe8db0f66 // pand xmm5, xmm0 - LONG $0xeb0f4166; BYTE $0xee // por xmm5, xmm14 - LONG $0xc5280f41 // movaps xmm0, xmm13 - LONG $0x01c1c20f // cmpltps xmm0, xmm1 - LONG $0xcd280f41 // movaps xmm1, xmm13 - LONG $0xc8c20f41; BYTE $0x01 // cmpltps xmm1, xmm8 - QUAD $0xfffe288e100f44f3; BYTE $0xff // movss xmm9, dword [rsi - 472] - QUAD $0xfea88e213a0f4466; WORD $0xffff; BYTE $0x10 // insertps xmm9, dword [rsi - 344], 16 - QUAD $0xff288e213a0f4466; WORD $0xffff; BYTE $0x20 // insertps xmm9, dword [rsi - 216], 32 - QUAD $0x30a84e213a0f4466 // insertps xmm9, dword [rsi - 88], 48 - LONG $0xc06b0f66 // packssdw xmm0, xmm0 - LONG $0xc0630f66 // packsswb xmm0, xmm0 - LONG $0xdb0f4166; BYTE $0xc7 // pand xmm0, xmm15 - LONG $0xf0710f66; BYTE $0x03 // psllw xmm0, 3 - LONG $0x6f0f4466; WORD $0x2075 // movdqa xmm14, oword 32[rbp] /* [rip + .LCPI7_2] */ - LONG $0xdb0f4166; BYTE $0xc6 // pand xmm0, xmm14 - LONG $0xc96b0f66 // packssdw xmm1, xmm1 - LONG $0xc9630f66 // packsswb xmm1, xmm1 - LONG $0xdb0f4166; BYTE $0xcf // pand xmm1, xmm15 - LONG $0xf1710f66; BYTE $0x04 // psllw xmm1, 4 - LONG $0x6f0f4466; WORD $0x3075 // movdqa xmm14, oword 48[rbp] /* [rip + .LCPI7_3] */ - LONG $0xdb0f4166; BYTE $0xce // pand xmm1, xmm14 - LONG $0xc8eb0f66 // por xmm1, xmm0 - QUAD $0xfffe2ca6100f44f3; BYTE $0xff // movss xmm12, dword [rsi - 468] - QUAD $0xfeaca6213a0f4466; WORD $0xffff; BYTE $0x10 // insertps xmm12, dword [rsi - 340], 16 - QUAD $0xff2ca6213a0f4466; WORD $0xffff; BYTE $0x20 // insertps xmm12, dword [rsi - 212], 32 - QUAD $0x30ac66213a0f4466 // insertps xmm12, dword [rsi - 84], 48 - LONG $0xcdeb0f66 // por xmm1, xmm5 - LONG $0xc5280f41 // movaps xmm0, xmm13 - LONG $0x01c2c20f // cmpltps xmm0, xmm2 - LONG $0xed280f41 // movaps xmm5, xmm13 - LONG $0x01ebc20f // cmpltps xmm5, xmm3 - QUAD $0xfffffe3096100ff3 // movss xmm2, dword [rsi - 464] - QUAD $0xfffeb096213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 336], 16 - QUAD $0xffff3096213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 208], 32 - LONG $0xff6b0f66 // packssdw xmm7, xmm7 - LONG $0x213a0f66; WORD $0xb056; BYTE $0x30 // insertps xmm2, dword [rsi - 80], 48 - LONG $0xc06b0f66 // packssdw xmm0, xmm0 - LONG $0xc0630f66 // packsswb xmm0, xmm0 - LONG $0xdb0f4166; BYTE $0xc7 // pand xmm0, xmm15 - LONG $0xf0710f66; BYTE $0x05 // psllw xmm0, 5 - LONG $0x6f0f4466; WORD $0x4075 // movdqa xmm14, oword 64[rbp] /* [rip + .LCPI7_4] */ - LONG $0xdb0f4166; BYTE $0xc6 // pand xmm0, xmm14 - LONG $0xed6b0f66 // packssdw xmm5, xmm5 - LONG $0xed630f66 // packsswb xmm5, xmm5 - LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 - LONG $0xf5710f66; BYTE $0x06 // psllw xmm5, 6 - LONG $0x5d6f0f66; BYTE $0x50 // movdqa xmm3, oword 80[rbp] /* [rip + .LCPI7_5] */ - LONG $0xebdb0f66 // pand xmm5, xmm3 - LONG $0xe8eb0f66 // por xmm5, xmm0 - LONG $0xc5280f45 // movaps xmm8, xmm13 - LONG $0xc2c20f45; BYTE $0x01 // cmpltps xmm8, xmm10 - QUAD $0xfffffe349e100ff3 // movss xmm3, dword [rsi - 460] - QUAD $0xfffeb49e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 332], 16 - QUAD $0xffff349e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 204], 32 - LONG $0x213a0f66; WORD $0xb45e; BYTE $0x30 // insertps xmm3, dword [rsi - 76], 48 - LONG $0x6b0f4566; BYTE $0xc0 // packssdw xmm8, xmm8 - LONG $0x630f4566; BYTE $0xc0 // packsswb xmm8, xmm8 - LONG $0x710f4166; WORD $0x07f0 // psllw xmm8, 7 - LONG $0x456f0f66; BYTE $0x60 // movdqa xmm0, oword 96[rbp] /* [rip + .LCPI7_6] */ - LONG $0xdb0f4466; BYTE $0xc0 // pand xmm8, xmm0 - LONG $0xeb0f4466; BYTE $0xc5 // por xmm8, xmm5 - QUAD $0xfffe3896100f44f3; BYTE $0xff // movss xmm10, dword [rsi - 456] - QUAD $0xfeb896213a0f4466; WORD $0xffff; BYTE $0x10 // insertps xmm10, dword [rsi - 328], 16 - QUAD $0xff3896213a0f4466; WORD $0xffff; BYTE $0x20 // insertps xmm10, dword [rsi - 200], 32 - LONG $0xff630f66 // packsswb xmm7, xmm7 - QUAD $0x30b856213a0f4466 // insertps xmm10, dword [rsi - 72], 48 - LONG $0xeb0f4466; BYTE $0xc1 // por xmm8, xmm1 - LONG $0xc5280f41 // movaps xmm0, xmm13 - LONG $0xc1c20f41; BYTE $0x01 // cmpltps xmm0, xmm9 - LONG $0xc06b0f66 // packssdw xmm0, xmm0 - LONG $0xc0630f66 // packsswb xmm0, xmm0 - LONG $0xc86f0f66 // movdqa xmm1, xmm0 - LONG $0xdb0f4166; BYTE $0xcf // pand xmm1, xmm15 - LONG $0xc8f80f66 // psubb xmm1, xmm0 - QUAD $0xfffe3c8e100f44f3; BYTE $0xff // movss xmm9, dword [rsi - 452] - QUAD $0xfebc8e213a0f4466; WORD $0xffff; BYTE $0x10 // insertps xmm9, dword [rsi - 324], 16 - LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 - QUAD $0xff3c8e213a0f4466; WORD $0xffff; BYTE $0x20 // insertps xmm9, dword [rsi - 196], 32 - LONG $0xcfeb0f66 // por xmm1, xmm7 - LONG $0xed280f41 // movaps xmm5, xmm13 - LONG $0xecc20f41; BYTE $0x01 // cmpltps xmm5, xmm12 - QUAD $0x30bc4e213a0f4466 // insertps xmm9, dword [rsi - 68], 48 - LONG $0xed6b0f66 // packssdw xmm5, xmm5 - LONG $0xed630f66 // packsswb xmm5, xmm5 - LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 - LONG $0xf5710f66; BYTE $0x02 // psllw xmm5, 2 - LONG $0x6ddb0f66; BYTE $0x10 // pand xmm5, oword 16[rbp] /* [rip + .LCPI7_1] */ - LONG $0xe9eb0f66 // por xmm5, xmm1 - LONG $0xc5280f41 // movaps xmm0, xmm13 - LONG $0x01c2c20f // cmpltps xmm0, xmm2 - LONG $0xcd280f41 // movaps xmm1, xmm13 - LONG $0x01cbc20f // cmpltps xmm1, xmm3 - QUAD $0xfffffe409e100ff3 // movss xmm3, dword [rsi - 448] - QUAD $0xfffec09e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 320], 16 - QUAD $0xffff409e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 192], 32 - LONG $0x213a0f66; WORD $0xc05e; BYTE $0x30 // insertps xmm3, dword [rsi - 64], 48 - LONG $0xc06b0f66 // packssdw xmm0, xmm0 - LONG $0xc0630f66 // packsswb xmm0, xmm0 - LONG $0xdb0f4166; BYTE $0xc7 // pand xmm0, xmm15 - LONG $0xf0710f66; BYTE $0x03 // psllw xmm0, 3 - LONG $0x6f0f4466; WORD $0x2065 // movdqa xmm12, oword 32[rbp] /* [rip + .LCPI7_2] */ - LONG $0xdb0f4166; BYTE $0xc4 // pand xmm0, xmm12 - LONG $0xc96b0f66 // packssdw xmm1, xmm1 - LONG $0xc9630f66 // packsswb xmm1, xmm1 - LONG $0xdb0f4166; BYTE $0xcf // pand xmm1, xmm15 - LONG $0xf1710f66; BYTE $0x04 // psllw xmm1, 4 - LONG $0x4ddb0f66; BYTE $0x30 // pand xmm1, oword 48[rbp] /* [rip + .LCPI7_3] */ - LONG $0xc8eb0f66 // por xmm1, xmm0 - QUAD $0xfffffe4896100ff3 // movss xmm2, dword [rsi - 440] - QUAD $0xfffec896213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 312], 16 - QUAD $0xffff4896213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 184], 32 - LONG $0x213a0f66; WORD $0xc856; BYTE $0x30 // insertps xmm2, dword [rsi - 56], 48 - LONG $0xcdeb0f66 // por xmm1, xmm5 - LONG $0xc5280f41 // movaps xmm0, xmm13 - LONG $0xc2c20f41; BYTE $0x01 // cmpltps xmm0, xmm10 - LONG $0xed280f41 // movaps xmm5, xmm13 - LONG $0xe9c20f41; BYTE $0x01 // cmpltps xmm5, xmm9 - QUAD $0xfffffe4cbe100ff3 // movss xmm7, dword [rsi - 436] - QUAD $0xfffeccbe213a0f66; WORD $0x10ff // insertps xmm7, dword [rsi - 308], 16 - QUAD $0xffff4cbe213a0f66; WORD $0x20ff // insertps xmm7, dword [rsi - 180], 32 - LONG $0xf66b0f66 // packssdw xmm6, xmm6 - LONG $0x213a0f66; WORD $0xcc7e; BYTE $0x30 // insertps xmm7, dword [rsi - 52], 48 - LONG $0xc06b0f66 // packssdw xmm0, xmm0 - LONG $0xc0630f66 // packsswb xmm0, xmm0 - LONG $0xdb0f4166; BYTE $0xc7 // pand xmm0, xmm15 - LONG $0xf0710f66; BYTE $0x05 // psllw xmm0, 5 - LONG $0xdb0f4166; BYTE $0xc6 // pand xmm0, xmm14 - LONG $0xed6b0f66 // packssdw xmm5, xmm5 - LONG $0xed630f66 // packsswb xmm5, xmm5 - LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 - LONG $0xf5710f66; BYTE $0x06 // psllw xmm5, 6 - LONG $0x6ddb0f66; BYTE $0x50 // pand xmm5, oword 80[rbp] /* [rip + .LCPI7_5] */ - LONG $0xe8eb0f66 // por xmm5, xmm0 - LONG $0xc5280f41 // movaps xmm0, xmm13 - LONG $0x01c3c20f // cmpltps xmm0, xmm3 - QUAD $0xfffffe509e100ff3 // movss xmm3, dword [rsi - 432] - QUAD $0xfffed09e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 304], 16 - QUAD $0xffff509e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 176], 32 - LONG $0x213a0f66; WORD $0xd05e; BYTE $0x30 // insertps xmm3, dword [rsi - 48], 48 - LONG $0xc06b0f66 // packssdw xmm0, xmm0 - LONG $0xc0630f66 // packsswb xmm0, xmm0 - LONG $0xf0710f66; BYTE $0x07 // psllw xmm0, 7 - LONG $0x6f0f4466; WORD $0x6055 // movdqa xmm10, oword 96[rbp] /* [rip + .LCPI7_6] */ - LONG $0xdb0f4166; BYTE $0xc2 // pand xmm0, xmm10 - LONG $0xc5eb0f66 // por xmm0, xmm5 - QUAD $0xfffffe54ae100ff3 // movss xmm5, dword [rsi - 428] - QUAD $0xfffed4ae213a0f66; WORD $0x10ff // insertps xmm5, dword [rsi - 300], 16 - QUAD $0xffff54ae213a0f66; WORD $0x20ff // insertps xmm5, dword [rsi - 172], 32 - LONG $0x213a0f66; WORD $0xd46e; BYTE $0x30 // insertps xmm5, dword [rsi - 44], 48 - LONG $0xc1eb0f66 // por xmm0, xmm1 - QUAD $0xfffe588e100f44f3; BYTE $0xff // movss xmm9, dword [rsi - 424] - QUAD $0xfed88e213a0f4466; WORD $0xffff; BYTE $0x10 // insertps xmm9, dword [rsi - 296], 16 - QUAD $0xff588e213a0f4466; WORD $0xffff; BYTE $0x20 // insertps xmm9, dword [rsi - 168], 32 - LONG $0xf6630f66 // packsswb xmm6, xmm6 - QUAD $0x30d84e213a0f4466 // insertps xmm9, dword [rsi - 40], 48 - LONG $0x620f4466; BYTE $0xc0 // punpckldq xmm8, xmm0 - LONG $0xc5280f41 // movaps xmm0, xmm13 - LONG $0x01c2c20f // cmpltps xmm0, xmm2 - LONG $0xc06b0f66 // packssdw xmm0, xmm0 - LONG $0xc0630f66 // packsswb xmm0, xmm0 - LONG $0xc86f0f66 // movdqa xmm1, xmm0 - LONG $0xdb0f4166; BYTE $0xcf // pand xmm1, xmm15 - LONG $0xc8f80f66 // psubb xmm1, xmm0 - QUAD $0xfffffe5c96100ff3 // movss xmm2, dword [rsi - 420] - QUAD $0xfffedc96213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 292], 16 - LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 - QUAD $0xffff5c96213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 164], 32 - LONG $0xceeb0f66 // por xmm1, xmm6 - LONG $0xf5280f41 // movaps xmm6, xmm13 - LONG $0x01f7c20f // cmpltps xmm6, xmm7 - LONG $0x213a0f66; WORD $0xdc56; BYTE $0x30 // insertps xmm2, dword [rsi - 36], 48 - LONG $0xf66b0f66 // packssdw xmm6, xmm6 - LONG $0xf6630f66 // packsswb xmm6, xmm6 - LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 - LONG $0xf6710f66; BYTE $0x02 // psllw xmm6, 2 - LONG $0x456f0f66; BYTE $0x10 // movdqa xmm0, oword 16[rbp] /* [rip + .LCPI7_1] */ - LONG $0xf0db0f66 // pand xmm6, xmm0 - LONG $0xf1eb0f66 // por xmm6, xmm1 - LONG $0xc5280f41 // movaps xmm0, xmm13 - LONG $0x01c3c20f // cmpltps xmm0, xmm3 - LONG $0xcd280f41 // movaps xmm1, xmm13 - LONG $0x01cdc20f // cmpltps xmm1, xmm5 - QUAD $0xfffffe609e100ff3 // movss xmm3, dword [rsi - 416] - QUAD $0xfffee09e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 288], 16 - QUAD $0xffff609e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 160], 32 - LONG $0x213a0f66; WORD $0xe05e; BYTE $0x30 // insertps xmm3, dword [rsi - 32], 48 - LONG $0xc06b0f66 // packssdw xmm0, xmm0 - LONG $0xc0630f66 // packsswb xmm0, xmm0 - LONG $0xdb0f4166; BYTE $0xc7 // pand xmm0, xmm15 - LONG $0xf0710f66; BYTE $0x03 // psllw xmm0, 3 - LONG $0xdb0f4166; BYTE $0xc4 // pand xmm0, xmm12 - LONG $0xc96b0f66 // packssdw xmm1, xmm1 - LONG $0xc9630f66 // packsswb xmm1, xmm1 - LONG $0xdb0f4166; BYTE $0xcf // pand xmm1, xmm15 - LONG $0xf1710f66; BYTE $0x04 // psllw xmm1, 4 - LONG $0x6f0f4466; WORD $0x3065 // movdqa xmm12, oword 48[rbp] /* [rip + .LCPI7_3] */ - LONG $0xdb0f4166; BYTE $0xcc // pand xmm1, xmm12 - LONG $0xc8eb0f66 // por xmm1, xmm0 - QUAD $0xfffffe68ae100ff3 // movss xmm5, dword [rsi - 408] - QUAD $0xfffee8ae213a0f66; WORD $0x10ff // insertps xmm5, dword [rsi - 280], 16 - QUAD $0xffff68ae213a0f66; WORD $0x20ff // insertps xmm5, dword [rsi - 152], 32 - LONG $0x213a0f66; WORD $0xe86e; BYTE $0x30 // insertps xmm5, dword [rsi - 24], 48 - LONG $0xceeb0f66 // por xmm1, xmm6 - LONG $0xc5280f41 // movaps xmm0, xmm13 - LONG $0xc1c20f41; BYTE $0x01 // cmpltps xmm0, xmm9 - LONG $0xf5280f41 // movaps xmm6, xmm13 - LONG $0x01f2c20f // cmpltps xmm6, xmm2 - QUAD $0xfffffe6cbe100ff3 // movss xmm7, dword [rsi - 404] - QUAD $0xfffeecbe213a0f66; WORD $0x10ff // insertps xmm7, dword [rsi - 276], 16 - QUAD $0xffff6cbe213a0f66; WORD $0x20ff // insertps xmm7, dword [rsi - 148], 32 - LONG $0xe46b0f66 // packssdw xmm4, xmm4 - LONG $0x213a0f66; WORD $0xec7e; BYTE $0x30 // insertps xmm7, dword [rsi - 20], 48 - LONG $0xc06b0f66 // packssdw xmm0, xmm0 - LONG $0xc0630f66 // packsswb xmm0, xmm0 - LONG $0xdb0f4166; BYTE $0xc7 // pand xmm0, xmm15 - LONG $0xf0710f66; BYTE $0x05 // psllw xmm0, 5 - LONG $0xdb0f4166; BYTE $0xc6 // pand xmm0, xmm14 - LONG $0xf66b0f66 // packssdw xmm6, xmm6 - LONG $0xf6630f66 // packsswb xmm6, xmm6 - LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 - LONG $0xf6710f66; BYTE $0x06 // psllw xmm6, 6 - LONG $0x6f0f4466; WORD $0x504d // movdqa xmm9, oword 80[rbp] /* [rip + .LCPI7_5] */ - LONG $0xdb0f4166; BYTE $0xf1 // pand xmm6, xmm9 - LONG $0xf0eb0f66 // por xmm6, xmm0 - LONG $0xd5280f41 // movaps xmm2, xmm13 - LONG $0x01d3c20f // cmpltps xmm2, xmm3 - QUAD $0xfffffe7086100ff3 // movss xmm0, dword [rsi - 400] - QUAD $0xfffef086213a0f66; WORD $0x10ff // insertps xmm0, dword [rsi - 272], 16 - QUAD $0xffff7086213a0f66; WORD $0x20ff // insertps xmm0, dword [rsi - 144], 32 - LONG $0x213a0f66; WORD $0xf046; BYTE $0x30 // insertps xmm0, dword [rsi - 16], 48 - LONG $0xd26b0f66 // packssdw xmm2, xmm2 - LONG $0xd2630f66 // packsswb xmm2, xmm2 - LONG $0xf2710f66; BYTE $0x07 // psllw xmm2, 7 - LONG $0xdb0f4166; BYTE $0xd2 // pand xmm2, xmm10 - LONG $0xd6eb0f66 // por xmm2, xmm6 - QUAD $0xfffffe74b6100ff3 // movss xmm6, dword [rsi - 396] - QUAD $0xfffef4b6213a0f66; WORD $0x10ff // insertps xmm6, dword [rsi - 268], 16 - QUAD $0xffff74b6213a0f66; WORD $0x20ff // insertps xmm6, dword [rsi - 140], 32 - LONG $0xe4630f66 // packsswb xmm4, xmm4 - LONG $0x213a0f66; WORD $0xf476; BYTE $0x30 // insertps xmm6, dword [rsi - 12], 48 - LONG $0xd1eb0f66 // por xmm2, xmm1 - LONG $0xcd280f41 // movaps xmm1, xmm13 - LONG $0x01cdc20f // cmpltps xmm1, xmm5 - LONG $0xc96b0f66 // packssdw xmm1, xmm1 - LONG $0xc9630f66 // packsswb xmm1, xmm1 - LONG $0xe96f0f66 // movdqa xmm5, xmm1 - LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 - LONG $0xe9f80f66 // psubb xmm5, xmm1 - QUAD $0xfffffe789e100ff3 // movss xmm3, dword [rsi - 392] - QUAD $0xfffef89e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 264], 16 - LONG $0xdb0f4166; BYTE $0xe7 // pand xmm4, xmm15 - QUAD $0xffff789e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 136], 32 - LONG $0xeceb0f66 // por xmm5, xmm4 - LONG $0xe5280f41 // movaps xmm4, xmm13 - LONG $0x01e7c20f // cmpltps xmm4, xmm7 - LONG $0x213a0f66; WORD $0xf85e; BYTE $0x30 // insertps xmm3, dword [rsi - 8], 48 - LONG $0xe46b0f66 // packssdw xmm4, xmm4 - LONG $0xe4630f66 // packsswb xmm4, xmm4 - LONG $0xdb0f4166; BYTE $0xe7 // pand xmm4, xmm15 - LONG $0xf4710f66; BYTE $0x02 // psllw xmm4, 2 - LONG $0x65db0f66; BYTE $0x10 // pand xmm4, oword 16[rbp] /* [rip + .LCPI7_1] */ - LONG $0xe5eb0f66 // por xmm4, xmm5 - LONG $0xed280f41 // movaps xmm5, xmm13 - LONG $0x01e8c20f // cmpltps xmm5, xmm0 - LONG $0xcd280f41 // movaps xmm1, xmm13 - LONG $0x01cec20f // cmpltps xmm1, xmm6 - QUAD $0xfffffe7c86100ff3 // movss xmm0, dword [rsi - 388] - QUAD $0xfffefc86213a0f66; WORD $0x10ff // insertps xmm0, dword [rsi - 260], 16 - QUAD $0xffff7c86213a0f66; WORD $0x20ff // insertps xmm0, dword [rsi - 132], 32 - LONG $0x213a0f66; WORD $0xfc46; BYTE $0x30 // insertps xmm0, dword [rsi - 4], 48 - LONG $0xed6b0f66 // packssdw xmm5, xmm5 - LONG $0xed630f66 // packsswb xmm5, xmm5 - LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 - LONG $0xf5710f66; BYTE $0x03 // psllw xmm5, 3 - LONG $0x6ddb0f66; BYTE $0x20 // pand xmm5, oword 32[rbp] /* [rip + .LCPI7_2] */ - LONG $0xc96b0f66 // packssdw xmm1, xmm1 - LONG $0xc9630f66 // packsswb xmm1, xmm1 - LONG $0xdb0f4166; BYTE $0xcf // pand xmm1, xmm15 - LONG $0xf1710f66; BYTE $0x04 // psllw xmm1, 4 - LONG $0xdb0f4166; BYTE $0xcc // pand xmm1, xmm12 - LONG $0xcdeb0f66 // por xmm1, xmm5 - QUAD $0xfffffe80ae100ff3 // movss xmm5, dword [rsi - 384] - QUAD $0xffff00ae213a0f66; WORD $0x10ff // insertps xmm5, dword [rsi - 256], 16 - LONG $0x213a0f66; WORD $0x806e; BYTE $0x20 // insertps xmm5, dword [rsi - 128], 32 - LONG $0xcceb0f66 // por xmm1, xmm4 - LONG $0xe5280f41 // movaps xmm4, xmm13 - LONG $0x01e3c20f // cmpltps xmm4, xmm3 - LONG $0xdd280f41 // movaps xmm3, xmm13 - LONG $0x01d8c20f // cmpltps xmm3, xmm0 - LONG $0x213a0f66; WORD $0x302e // insertps xmm5, dword [rsi], 48 - LONG $0xe46b0f66 // packssdw xmm4, xmm4 - LONG $0xe4630f66 // packsswb xmm4, xmm4 - LONG $0xdb0f4166; BYTE $0xe7 // pand xmm4, xmm15 - LONG $0xf4710f66; BYTE $0x05 // psllw xmm4, 5 - LONG $0xdb0f4166; BYTE $0xe6 // pand xmm4, xmm14 - LONG $0xdb6b0f66 // packssdw xmm3, xmm3 - LONG $0xdb630f66 // packsswb xmm3, xmm3 - LONG $0xdb0f4166; BYTE $0xdf // pand xmm3, xmm15 - LONG $0xf3710f66; BYTE $0x06 // psllw xmm3, 6 - LONG $0xdb0f4166; BYTE $0xd9 // pand xmm3, xmm9 - LONG $0xdceb0f66 // por xmm3, xmm4 - LONG $0xc5280f41 // movaps xmm0, xmm13 - LONG $0x01c5c20f // cmpltps xmm0, xmm5 - LONG $0xc06b0f66 // packssdw xmm0, xmm0 - LONG $0xc0630f66 // packsswb xmm0, xmm0 - LONG $0xf0710f66; BYTE $0x07 // psllw xmm0, 7 - LONG $0xdb0f4166; BYTE $0xc2 // pand xmm0, xmm10 - LONG $0xc3eb0f66 // por xmm0, xmm3 - LONG $0xc1eb0f66 // por xmm0, xmm1 - LONG $0xd0620f66 // punpckldq xmm2, xmm0 - LONG $0x600f4466; BYTE $0xc2 // punpcklbw xmm8, xmm2 - LONG $0x380f4466; WORD $0x4500; BYTE $0x70 // pshufb xmm8, oword 112[rbp] /* [rip + .LCPI7_7] */ - LONG $0x7f0f45f3; WORD $0x8c04 // movdqu oword [r12 + 4*rcx], xmm8 - LONG $0x04c18348 // add rcx, 4 - LONG $0x00c68148; WORD $0x0002; BYTE $0x00 // add rsi, 512 - WORD $0x3949; BYTE $0xc8 // cmp r8, rcx - JNE LBB7_181 - WORD $0x394d; BYTE $0xc2 // cmp r10, r8 - JNE LBB7_183 - JMP LBB7_186 - -LBB7_122: - LONG $0xf8e68349 // and r14, -8 - WORD $0x894c; BYTE $0xf0 // mov rax, r14 +LBB7_124: + LONG $0xf8e78349 // and r15, -8 + WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x06e0c148 // shl rax, 6 WORD $0x0148; BYTE $0xf0 // add rax, rsi - LONG $0x24448948; BYTE $0x30 // mov qword [rsp + 48], rax - LONG $0x2474894c; BYTE $0x18 // mov qword [rsp + 24], r14 - LONG $0xb4048d4b // lea rax, [r12 + 4*r14] - LONG $0x24048948 // mov qword [rsp], rax + LONG $0x24448948; BYTE $0x38 // mov qword [rsp + 56], rax + LONG $0x247c894c; BYTE $0x28 // mov qword [rsp + 40], r15 + LONG $0x24048b48 // mov rax, qword [rsp] + LONG $0xb8048d4a // lea rax, [rax + 4*r15] + LONG $0x24448948; BYTE $0x08 // mov qword [rsp + 8], rax QUAD $0x0000f024846e0f66; BYTE $0x00 // movd xmm0, dword [rsp + 240] LONG $0xc0700ff2; BYTE $0xe0 // pshuflw xmm0, xmm0, 224 LONG $0xc0700f66; BYTE $0x00 // pshufd xmm0, xmm0, 0 @@ -37893,9 +38893,8 @@ LBB7_122: LONG $0x6f0f4466; WORD $0x4065 // movdqa xmm12, oword 64[rbp] /* [rip + .LCPI7_4] */ LONG $0x6f0f4466; WORD $0x506d // movdqa xmm13, oword 80[rbp] /* [rip + .LCPI7_5] */ LONG $0x6f0f4466; WORD $0x6075 // movdqa xmm14, oword 96[rbp] /* [rip + .LCPI7_6] */ - QUAD $0x0000008024a4894c // mov qword [rsp + 128], r12 -LBB7_123: +LBB7_125: LONG $0x247c894c; BYTE $0x10 // mov qword [rsp + 16], r15 LONG $0x06e7c149 // shl r15, 6 WORD $0x894d; BYTE $0xf9 // mov r9, r15 @@ -37931,7 +38930,7 @@ LBB7_123: QUAD $0x02020e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 2], 2 QUAD $0x03022674c40f4266 // pinsrw xmm6, word [rsi + r12 + 2], 3 LONG $0x44b70f42; WORD $0x0c3e // movzx eax, word [rsi + r15 + 12] - LONG $0x08244489 // mov dword [rsp + 8], eax + LONG $0x20244489 // mov dword [rsp + 32], eax QUAD $0x04022e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 2], 4 LONG $0x6e0f4166; BYTE $0xd3 // movd xmm2, r11d LONG $0x5cb70f46; WORD $0x0e3e // movzx r11d, word [rsi + r15 + 14] @@ -37941,7 +38940,7 @@ LBB7_123: LONG $0x74c40f66; WORD $0x023e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 2], 6 LONG $0x6e0f4166; BYTE $0xda // movd xmm3, r10d LONG $0x44b70f42; WORD $0x123e // movzx eax, word [rsi + r15 + 18] - LONG $0x28244489 // mov dword [rsp + 40], eax + LONG $0x18244489 // mov dword [rsp + 24], eax LONG $0x74c40f66; WORD $0x021e; BYTE $0x07 // pinsrw xmm6, word [rsi + rbx + 2], 7 LONG $0xf0650f66 // pcmpgtw xmm6, xmm0 LONG $0xf6630f66 // packsswb xmm6, xmm6 @@ -37975,7 +38974,7 @@ LBB7_123: LONG $0x5cc40f66; WORD $0x083e; BYTE $0x06 // pinsrw xmm3, word [rsi + rdi + 8], 6 LONG $0x5cc40f66; WORD $0x081e; BYTE $0x07 // pinsrw xmm3, word [rsi + rbx + 8], 7 LONG $0xcceb0f66 // por xmm1, xmm4 - LONG $0x7c6e0f66; WORD $0x0824 // movd xmm7, dword [rsp + 8] + LONG $0x7c6e0f66; WORD $0x2024 // movd xmm7, dword [rsp + 32] LONG $0x44b70f42; WORD $0x163e // movzx eax, word [rsi + r15 + 22] LONG $0xd0650f66 // pcmpgtw xmm2, xmm0 LONG $0xd2630f66 // packsswb xmm2, xmm2 @@ -38013,7 +39012,7 @@ LBB7_123: LONG $0x7cc40f66; WORD $0x0c3e; BYTE $0x06 // pinsrw xmm7, word [rsi + rdi + 12], 6 LONG $0x7cc40f66; WORD $0x0c1e; BYTE $0x07 // pinsrw xmm7, word [rsi + rbx + 12], 7 LONG $0xdaeb0f66 // por xmm3, xmm2 - LONG $0x6e0f4466; WORD $0x2444; BYTE $0x28 // movd xmm8, dword [rsp + 40] + LONG $0x6e0f4466; WORD $0x2444; BYTE $0x18 // movd xmm8, dword [rsp + 24] LONG $0x74b70f46; WORD $0x1c3e // movzx r14d, word [rsi + r15 + 28] LONG $0xf0650f66 // pcmpgtw xmm6, xmm0 LONG $0xf6630f66 // packsswb xmm6, xmm6 @@ -38070,7 +39069,7 @@ LBB7_123: LONG $0xf9eb0f66 // por xmm7, xmm1 LONG $0xf26e0f66 // movd xmm6, edx LONG $0x54b70f42; WORD $0x243e // movzx edx, word [rsi + r15 + 36] - LONG $0x20245489 // mov dword [rsp + 32], edx + LONG $0x30245489 // mov dword [rsp + 48], edx QUAD $0x0114066cc40f4266 // pinsrw xmm5, word [rsi + r8 + 20], 1 QUAD $0x02140e6cc40f4266 // pinsrw xmm5, word [rsi + r9 + 20], 2 QUAD $0x0314266cc40f4266 // pinsrw xmm5, word [rsi + r12 + 20], 3 @@ -38086,7 +39085,7 @@ LBB7_123: LONG $0xefeb0f66 // por xmm5, xmm7 LONG $0x6e0f4166; BYTE $0xfe // movd xmm7, r14d LONG $0x54b70f42; WORD $0x263e // movzx edx, word [rsi + r15 + 38] - LONG $0x28245489 // mov dword [rsp + 40], edx + LONG $0x18245489 // mov dword [rsp + 24], edx QUAD $0x01160654c40f4266 // pinsrw xmm2, word [rsi + r8 + 22], 1 QUAD $0x02160e54c40f4266 // pinsrw xmm2, word [rsi + r9 + 22], 2 QUAD $0x03162654c40f4266 // pinsrw xmm2, word [rsi + r12 + 22], 3 @@ -38117,7 +39116,7 @@ LBB7_123: LONG $0xddeb0f66 // por xmm3, xmm5 LONG $0xe86e0f66 // movd xmm5, eax LONG $0x44b70f42; WORD $0x2a3e // movzx eax, word [rsi + r15 + 42] - LONG $0x08244489 // mov dword [rsp + 8], eax + LONG $0x20244489 // mov dword [rsp + 32], eax QUAD $0x011a0674c40f4266 // pinsrw xmm6, word [rsi + r8 + 26], 1 QUAD $0x021a0e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 26], 2 QUAD $0x031a2674c40f4266 // pinsrw xmm6, word [rsi + r12 + 26], 3 @@ -38157,7 +39156,7 @@ LBB7_123: LONG $0xf2710f66; BYTE $0x07 // psllw xmm2, 7 LONG $0xdb0f4166; BYTE $0xd6 // pand xmm2, xmm14 LONG $0xd7eb0f66 // por xmm2, xmm7 - LONG $0x746e0f66; WORD $0x2024 // movd xmm6, dword [rsp + 32] + LONG $0x746e0f66; WORD $0x3024 // movd xmm6, dword [rsp + 48] LONG $0x54b70f42; WORD $0x2e3e // movzx edx, word [rsi + r15 + 46] QUAD $0x0120066cc40f4266 // pinsrw xmm5, word [rsi + r8 + 32], 1 QUAD $0x02200e6cc40f4266 // pinsrw xmm5, word [rsi + r9 + 32], 2 @@ -38178,7 +39177,7 @@ LBB7_123: LONG $0xf96f0f66 // movdqa xmm7, xmm1 LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 LONG $0xf9f80f66 // psubb xmm7, xmm1 - LONG $0x5c6e0f66; WORD $0x2824 // movd xmm3, dword [rsp + 40] + LONG $0x5c6e0f66; WORD $0x1824 // movd xmm3, dword [rsp + 24] LONG $0x5cb70f46; WORD $0x303e // movzx r11d, word [rsi + r15 + 48] LONG $0x6cc40f66; WORD $0x201e; BYTE $0x07 // pinsrw xmm5, word [rsi + rbx + 32], 7 LONG $0xe8650f66 // pcmpgtw xmm5, xmm0 @@ -38213,7 +39212,7 @@ LBB7_123: LONG $0xf6710f66; BYTE $0x02 // psllw xmm6, 2 LONG $0xdb0f4166; BYTE $0xf1 // pand xmm6, xmm9 LONG $0xf7eb0f66 // por xmm6, xmm7 - LONG $0x4c6e0f66; WORD $0x0824 // movd xmm1, dword [rsp + 8] + LONG $0x4c6e0f66; WORD $0x2024 // movd xmm1, dword [rsp + 32] LONG $0x74b70f46; WORD $0x343e // movzx r14d, word [rsi + r15 + 52] LONG $0x6cc40f66; WORD $0x281e; BYTE $0x07 // pinsrw xmm5, word [rsi + rbx + 40], 7 LONG $0xd8650f66 // pcmpgtw xmm3, xmm0 @@ -38288,6 +39287,7 @@ LBB7_123: LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 LONG $0xe9f80f66 // psubb xmm5, xmm1 LONG $0x6e0f4166; BYTE $0xce // movd xmm1, r14d + LONG $0x24348b4c // mov r14, qword [rsp] QUAD $0x01300674c40f4266 // pinsrw xmm6, word [rsi + r8 + 48], 1 QUAD $0x02300e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 48], 2 QUAD $0x03302674c40f4266 // pinsrw xmm6, word [rsi + r12 + 48], 3 @@ -38371,7 +39371,6 @@ LBB7_123: QUAD $0x013e0674c40f4266 // pinsrw xmm6, word [rsi + r8 + 62], 1 QUAD $0x023e0e74c40f4266 // pinsrw xmm6, word [rsi + r9 + 62], 2 QUAD $0x033e2674c40f4266 // pinsrw xmm6, word [rsi + r12 + 62], 3 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x043e2e74c40f4266 // pinsrw xmm6, word [rsi + r13 + 62], 4 LONG $0x74c40f66; WORD $0x3e0e; BYTE $0x05 // pinsrw xmm6, word [rsi + rcx + 62], 5 LONG $0x74c40f66; WORD $0x3e3e; BYTE $0x06 // pinsrw xmm6, word [rsi + rdi + 62], 6 @@ -38394,19 +39393,428 @@ LBB7_123: LONG $0xe2600f66 // punpcklbw xmm4, xmm2 LONG $0xe3610f66 // punpcklwd xmm4, xmm3 LONG $0x244c8b48; BYTE $0x10 // mov rcx, qword [rsp + 16] - LONG $0x247f0ff3; BYTE $0x88 // movdqu oword [rax + 4*rcx], xmm4 - LONG $0x4c7f0ff3; WORD $0x1088 // movdqu oword [rax + 4*rcx + 16], xmm1 + LONG $0x7f0f41f3; WORD $0x8e24 // movdqu oword [r14 + 4*rcx], xmm4 + LONG $0x2434894c // mov qword [rsp], r14 + LONG $0x7f0f41f3; WORD $0x8e4c; BYTE $0x10 // movdqu oword [r14 + 4*rcx + 16], xmm1 LONG $0x08c18348 // add rcx, 8 WORD $0x8949; BYTE $0xcf // mov r15, rcx - LONG $0x244c3b48; BYTE $0x18 // cmp rcx, qword [rsp + 24] - JNE LBB7_123 - QUAD $0x0000011024b48b4c // mov r14, qword [rsp + 272] - LONG $0x24743b4c; BYTE $0x18 // cmp r14, qword [rsp + 24] - QUAD $0x00000088249c8b4c // mov r11, qword [rsp + 136] - LONG $0x24248b4c // mov r12, qword [rsp] - LONG $0x24748b48; BYTE $0x30 // mov rsi, qword [rsp + 48] + LONG $0x244c3b48; BYTE $0x28 // cmp rcx, qword [rsp + 40] JNE LBB7_125 - JMP LBB7_128 + QUAD $0x0000011024bc8b4c // mov r15, qword [rsp + 272] + LONG $0x247c3b4c; BYTE $0x28 // cmp r15, qword [rsp + 40] + QUAD $0x00000088249c8b4c // mov r11, qword [rsp + 136] + LONG $0x24748b4c; BYTE $0x08 // mov r14, qword [rsp + 8] + LONG $0x24748b48; BYTE $0x38 // mov rsi, qword [rsp + 56] + JNE LBB7_127 + JMP LBB7_130 + +LBB7_182: + WORD $0x894c; BYTE $0xd0 // mov rax, r10 + LONG $0xfce08348 // and rax, -4 + WORD $0x8948; BYTE $0xc2 // mov rdx, rax + LONG $0x07e2c148 // shl rdx, 7 + WORD $0x0148; BYTE $0xf2 // add rdx, rsi + LONG $0x240c8b48 // mov rcx, qword [rsp] + LONG $0x813c8d4c // lea r15, [rcx + 4*rax] + LONG $0xeb280f45 // movaps xmm13, xmm11 + LONG $0xebc60f45; BYTE $0x00 // shufps xmm13, xmm11, 0 + LONG $0xfcc68148; WORD $0x0001; BYTE $0x00 // add rsi, 508 + WORD $0xc931 // xor ecx, ecx + LONG $0x6f0f4466; WORD $0x007d // movdqa xmm15, oword 0[rbp] /* [rip + .LCPI7_0] */ + LONG $0x243c8b48 // mov rdi, qword [rsp] + +LBB7_183: + QUAD $0xfffffe049e100ff3 // movss xmm3, dword [rsi - 508] + QUAD $0xfffe0896100f44f3; BYTE $0xff // movss xmm10, dword [rsi - 504] + QUAD $0xfffe0c8e100f44f3; BYTE $0xff // movss xmm9, dword [rsi - 500] + QUAD $0xfffffe108e100ff3 // movss xmm1, dword [rsi - 496] + QUAD $0xfffe849e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 380], 16 + QUAD $0xffff049e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 252], 32 + LONG $0x213a0f66; WORD $0x845e; BYTE $0x30 // insertps xmm3, dword [rsi - 124], 48 + QUAD $0xfe8896213a0f4466; WORD $0xffff; BYTE $0x10 // insertps xmm10, dword [rsi - 376], 16 + QUAD $0xff0896213a0f4466; WORD $0xffff; BYTE $0x20 // insertps xmm10, dword [rsi - 248], 32 + QUAD $0x308856213a0f4466 // insertps xmm10, dword [rsi - 120], 48 + QUAD $0xfe8c8e213a0f4466; WORD $0xffff; BYTE $0x10 // insertps xmm9, dword [rsi - 372], 16 + QUAD $0xff0c8e213a0f4466; WORD $0xffff; BYTE $0x20 // insertps xmm9, dword [rsi - 244], 32 + QUAD $0x308c4e213a0f4466 // insertps xmm9, dword [rsi - 116], 48 + QUAD $0xfffe908e213a0f66; WORD $0x10ff // insertps xmm1, dword [rsi - 368], 16 + QUAD $0xffff108e213a0f66; WORD $0x20ff // insertps xmm1, dword [rsi - 240], 32 + LONG $0x213a0f66; WORD $0x904e; BYTE $0x30 // insertps xmm1, dword [rsi - 112], 48 + QUAD $0xfffe1486100f44f3; BYTE $0xff // movss xmm8, dword [rsi - 492] + QUAD $0xfe9486213a0f4466; WORD $0xffff; BYTE $0x10 // insertps xmm8, dword [rsi - 364], 16 + QUAD $0xff1486213a0f4466; WORD $0xffff; BYTE $0x20 // insertps xmm8, dword [rsi - 236], 32 + LONG $0xe5280f45 // movaps xmm12, xmm13 + QUAD $0x309446213a0f4466 // insertps xmm8, dword [rsi - 108], 48 + QUAD $0xfffffe1896100ff3 // movss xmm2, dword [rsi - 488] + QUAD $0xfffe9896213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 360], 16 + QUAD $0xffff1896213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 232], 32 + LONG $0xe3c20f44; BYTE $0x01 // cmpltps xmm12, xmm3 + LONG $0x213a0f66; WORD $0x9856; BYTE $0x30 // insertps xmm2, dword [rsi - 104], 48 + QUAD $0xfffffe1c9e100ff3 // movss xmm3, dword [rsi - 484] + QUAD $0xfffe9c9e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 356], 16 + QUAD $0xffff1c9e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 228], 32 + LONG $0x6b0f4566; BYTE $0xe4 // packssdw xmm12, xmm12 + LONG $0x213a0f66; WORD $0x9c5e; BYTE $0x30 // insertps xmm3, dword [rsi - 100], 48 + QUAD $0xfffffe24a6100ff3 // movss xmm4, dword [rsi - 476] + QUAD $0xfffea4a6213a0f66; WORD $0x10ff // insertps xmm4, dword [rsi - 348], 16 + QUAD $0xffff24a6213a0f66; WORD $0x20ff // insertps xmm4, dword [rsi - 220], 32 + LONG $0x630f4566; BYTE $0xe4 // packsswb xmm12, xmm12 + LONG $0x213a0f66; WORD $0xa466; BYTE $0x30 // insertps xmm4, dword [rsi - 92], 48 + LONG $0xfd280f41 // movaps xmm7, xmm13 + QUAD $0xfffffe44ae100ff3 // movss xmm5, dword [rsi - 444] + QUAD $0xfffec4ae213a0f66; WORD $0x10ff // insertps xmm5, dword [rsi - 316], 16 + QUAD $0xffff44ae213a0f66; WORD $0x20ff // insertps xmm5, dword [rsi - 188], 32 + LONG $0x01fcc20f // cmpltps xmm7, xmm4 + LONG $0x213a0f66; WORD $0xc46e; BYTE $0x30 // insertps xmm5, dword [rsi - 60], 48 + LONG $0xf5280f41 // movaps xmm6, xmm13 + QUAD $0xfffffe6486100ff3 // movss xmm0, dword [rsi - 412] + QUAD $0xfffee486213a0f66; WORD $0x10ff // insertps xmm0, dword [rsi - 284], 16 + QUAD $0xffff6486213a0f66; WORD $0x20ff // insertps xmm0, dword [rsi - 156], 32 + LONG $0x01f5c20f // cmpltps xmm6, xmm5 + LONG $0x213a0f66; WORD $0xe446; BYTE $0x30 // insertps xmm0, dword [rsi - 28], 48 + LONG $0xe5280f41 // movaps xmm4, xmm13 + LONG $0x01e0c20f // cmpltps xmm4, xmm0 + LONG $0xc5280f41 // movaps xmm0, xmm13 + LONG $0xc2c20f41; BYTE $0x01 // cmpltps xmm0, xmm10 + LONG $0xc06b0f66 // packssdw xmm0, xmm0 + LONG $0xc0630f66 // packsswb xmm0, xmm0 + LONG $0x6f0f4466; BYTE $0xf0 // movdqa xmm14, xmm0 + LONG $0xdb0f4566; BYTE $0xf7 // pand xmm14, xmm15 + LONG $0xf80f4466; BYTE $0xf0 // psubb xmm14, xmm0 + QUAD $0xfffe2096100f44f3; BYTE $0xff // movss xmm10, dword [rsi - 480] + QUAD $0xfea096213a0f4466; WORD $0xffff; BYTE $0x10 // insertps xmm10, dword [rsi - 352], 16 + LONG $0xdb0f4566; BYTE $0xe7 // pand xmm12, xmm15 + QUAD $0xff2096213a0f4466; WORD $0xffff; BYTE $0x20 // insertps xmm10, dword [rsi - 224], 32 + LONG $0xeb0f4566; BYTE $0xf4 // por xmm14, xmm12 + LONG $0xed280f41 // movaps xmm5, xmm13 + LONG $0xe9c20f41; BYTE $0x01 // cmpltps xmm5, xmm9 + QUAD $0x30a056213a0f4466 // insertps xmm10, dword [rsi - 96], 48 + LONG $0xed6b0f66 // packssdw xmm5, xmm5 + LONG $0xed630f66 // packsswb xmm5, xmm5 + LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 + LONG $0xf5710f66; BYTE $0x02 // psllw xmm5, 2 + LONG $0x456f0f66; BYTE $0x10 // movdqa xmm0, oword 16[rbp] /* [rip + .LCPI7_1] */ + LONG $0xe8db0f66 // pand xmm5, xmm0 + LONG $0xeb0f4166; BYTE $0xee // por xmm5, xmm14 + LONG $0xc5280f41 // movaps xmm0, xmm13 + LONG $0x01c1c20f // cmpltps xmm0, xmm1 + LONG $0xcd280f41 // movaps xmm1, xmm13 + LONG $0xc8c20f41; BYTE $0x01 // cmpltps xmm1, xmm8 + QUAD $0xfffe288e100f44f3; BYTE $0xff // movss xmm9, dword [rsi - 472] + QUAD $0xfea88e213a0f4466; WORD $0xffff; BYTE $0x10 // insertps xmm9, dword [rsi - 344], 16 + QUAD $0xff288e213a0f4466; WORD $0xffff; BYTE $0x20 // insertps xmm9, dword [rsi - 216], 32 + QUAD $0x30a84e213a0f4466 // insertps xmm9, dword [rsi - 88], 48 + LONG $0xc06b0f66 // packssdw xmm0, xmm0 + LONG $0xc0630f66 // packsswb xmm0, xmm0 + LONG $0xdb0f4166; BYTE $0xc7 // pand xmm0, xmm15 + LONG $0xf0710f66; BYTE $0x03 // psllw xmm0, 3 + LONG $0x6f0f4466; WORD $0x2075 // movdqa xmm14, oword 32[rbp] /* [rip + .LCPI7_2] */ + LONG $0xdb0f4166; BYTE $0xc6 // pand xmm0, xmm14 + LONG $0xc96b0f66 // packssdw xmm1, xmm1 + LONG $0xc9630f66 // packsswb xmm1, xmm1 + LONG $0xdb0f4166; BYTE $0xcf // pand xmm1, xmm15 + LONG $0xf1710f66; BYTE $0x04 // psllw xmm1, 4 + LONG $0x6f0f4466; WORD $0x3075 // movdqa xmm14, oword 48[rbp] /* [rip + .LCPI7_3] */ + LONG $0xdb0f4166; BYTE $0xce // pand xmm1, xmm14 + LONG $0xc8eb0f66 // por xmm1, xmm0 + QUAD $0xfffe2ca6100f44f3; BYTE $0xff // movss xmm12, dword [rsi - 468] + QUAD $0xfeaca6213a0f4466; WORD $0xffff; BYTE $0x10 // insertps xmm12, dword [rsi - 340], 16 + QUAD $0xff2ca6213a0f4466; WORD $0xffff; BYTE $0x20 // insertps xmm12, dword [rsi - 212], 32 + QUAD $0x30ac66213a0f4466 // insertps xmm12, dword [rsi - 84], 48 + LONG $0xcdeb0f66 // por xmm1, xmm5 + LONG $0xc5280f41 // movaps xmm0, xmm13 + LONG $0x01c2c20f // cmpltps xmm0, xmm2 + LONG $0xed280f41 // movaps xmm5, xmm13 + LONG $0x01ebc20f // cmpltps xmm5, xmm3 + QUAD $0xfffffe3096100ff3 // movss xmm2, dword [rsi - 464] + QUAD $0xfffeb096213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 336], 16 + QUAD $0xffff3096213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 208], 32 + LONG $0xff6b0f66 // packssdw xmm7, xmm7 + LONG $0x213a0f66; WORD $0xb056; BYTE $0x30 // insertps xmm2, dword [rsi - 80], 48 + LONG $0xc06b0f66 // packssdw xmm0, xmm0 + LONG $0xc0630f66 // packsswb xmm0, xmm0 + LONG $0xdb0f4166; BYTE $0xc7 // pand xmm0, xmm15 + LONG $0xf0710f66; BYTE $0x05 // psllw xmm0, 5 + LONG $0x6f0f4466; WORD $0x4075 // movdqa xmm14, oword 64[rbp] /* [rip + .LCPI7_4] */ + LONG $0xdb0f4166; BYTE $0xc6 // pand xmm0, xmm14 + LONG $0xed6b0f66 // packssdw xmm5, xmm5 + LONG $0xed630f66 // packsswb xmm5, xmm5 + LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 + LONG $0xf5710f66; BYTE $0x06 // psllw xmm5, 6 + LONG $0x5d6f0f66; BYTE $0x50 // movdqa xmm3, oword 80[rbp] /* [rip + .LCPI7_5] */ + LONG $0xebdb0f66 // pand xmm5, xmm3 + LONG $0xe8eb0f66 // por xmm5, xmm0 + LONG $0xc5280f45 // movaps xmm8, xmm13 + LONG $0xc2c20f45; BYTE $0x01 // cmpltps xmm8, xmm10 + QUAD $0xfffffe349e100ff3 // movss xmm3, dword [rsi - 460] + QUAD $0xfffeb49e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 332], 16 + QUAD $0xffff349e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 204], 32 + LONG $0x213a0f66; WORD $0xb45e; BYTE $0x30 // insertps xmm3, dword [rsi - 76], 48 + LONG $0x6b0f4566; BYTE $0xc0 // packssdw xmm8, xmm8 + LONG $0x630f4566; BYTE $0xc0 // packsswb xmm8, xmm8 + LONG $0x710f4166; WORD $0x07f0 // psllw xmm8, 7 + LONG $0x456f0f66; BYTE $0x60 // movdqa xmm0, oword 96[rbp] /* [rip + .LCPI7_6] */ + LONG $0xdb0f4466; BYTE $0xc0 // pand xmm8, xmm0 + LONG $0xeb0f4466; BYTE $0xc5 // por xmm8, xmm5 + QUAD $0xfffe3896100f44f3; BYTE $0xff // movss xmm10, dword [rsi - 456] + QUAD $0xfeb896213a0f4466; WORD $0xffff; BYTE $0x10 // insertps xmm10, dword [rsi - 328], 16 + QUAD $0xff3896213a0f4466; WORD $0xffff; BYTE $0x20 // insertps xmm10, dword [rsi - 200], 32 + LONG $0xff630f66 // packsswb xmm7, xmm7 + QUAD $0x30b856213a0f4466 // insertps xmm10, dword [rsi - 72], 48 + LONG $0xeb0f4466; BYTE $0xc1 // por xmm8, xmm1 + LONG $0xc5280f41 // movaps xmm0, xmm13 + LONG $0xc1c20f41; BYTE $0x01 // cmpltps xmm0, xmm9 + LONG $0xc06b0f66 // packssdw xmm0, xmm0 + LONG $0xc0630f66 // packsswb xmm0, xmm0 + LONG $0xc86f0f66 // movdqa xmm1, xmm0 + LONG $0xdb0f4166; BYTE $0xcf // pand xmm1, xmm15 + LONG $0xc8f80f66 // psubb xmm1, xmm0 + QUAD $0xfffe3c8e100f44f3; BYTE $0xff // movss xmm9, dword [rsi - 452] + QUAD $0xfebc8e213a0f4466; WORD $0xffff; BYTE $0x10 // insertps xmm9, dword [rsi - 324], 16 + LONG $0xdb0f4166; BYTE $0xff // pand xmm7, xmm15 + QUAD $0xff3c8e213a0f4466; WORD $0xffff; BYTE $0x20 // insertps xmm9, dword [rsi - 196], 32 + LONG $0xcfeb0f66 // por xmm1, xmm7 + LONG $0xed280f41 // movaps xmm5, xmm13 + LONG $0xecc20f41; BYTE $0x01 // cmpltps xmm5, xmm12 + QUAD $0x30bc4e213a0f4466 // insertps xmm9, dword [rsi - 68], 48 + LONG $0xed6b0f66 // packssdw xmm5, xmm5 + LONG $0xed630f66 // packsswb xmm5, xmm5 + LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 + LONG $0xf5710f66; BYTE $0x02 // psllw xmm5, 2 + LONG $0x6ddb0f66; BYTE $0x10 // pand xmm5, oword 16[rbp] /* [rip + .LCPI7_1] */ + LONG $0xe9eb0f66 // por xmm5, xmm1 + LONG $0xc5280f41 // movaps xmm0, xmm13 + LONG $0x01c2c20f // cmpltps xmm0, xmm2 + LONG $0xcd280f41 // movaps xmm1, xmm13 + LONG $0x01cbc20f // cmpltps xmm1, xmm3 + QUAD $0xfffffe409e100ff3 // movss xmm3, dword [rsi - 448] + QUAD $0xfffec09e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 320], 16 + QUAD $0xffff409e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 192], 32 + LONG $0x213a0f66; WORD $0xc05e; BYTE $0x30 // insertps xmm3, dword [rsi - 64], 48 + LONG $0xc06b0f66 // packssdw xmm0, xmm0 + LONG $0xc0630f66 // packsswb xmm0, xmm0 + LONG $0xdb0f4166; BYTE $0xc7 // pand xmm0, xmm15 + LONG $0xf0710f66; BYTE $0x03 // psllw xmm0, 3 + LONG $0x6f0f4466; WORD $0x2065 // movdqa xmm12, oword 32[rbp] /* [rip + .LCPI7_2] */ + LONG $0xdb0f4166; BYTE $0xc4 // pand xmm0, xmm12 + LONG $0xc96b0f66 // packssdw xmm1, xmm1 + LONG $0xc9630f66 // packsswb xmm1, xmm1 + LONG $0xdb0f4166; BYTE $0xcf // pand xmm1, xmm15 + LONG $0xf1710f66; BYTE $0x04 // psllw xmm1, 4 + LONG $0x4ddb0f66; BYTE $0x30 // pand xmm1, oword 48[rbp] /* [rip + .LCPI7_3] */ + LONG $0xc8eb0f66 // por xmm1, xmm0 + QUAD $0xfffffe4896100ff3 // movss xmm2, dword [rsi - 440] + QUAD $0xfffec896213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 312], 16 + QUAD $0xffff4896213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 184], 32 + LONG $0x213a0f66; WORD $0xc856; BYTE $0x30 // insertps xmm2, dword [rsi - 56], 48 + LONG $0xcdeb0f66 // por xmm1, xmm5 + LONG $0xc5280f41 // movaps xmm0, xmm13 + LONG $0xc2c20f41; BYTE $0x01 // cmpltps xmm0, xmm10 + LONG $0xed280f41 // movaps xmm5, xmm13 + LONG $0xe9c20f41; BYTE $0x01 // cmpltps xmm5, xmm9 + QUAD $0xfffffe4cbe100ff3 // movss xmm7, dword [rsi - 436] + QUAD $0xfffeccbe213a0f66; WORD $0x10ff // insertps xmm7, dword [rsi - 308], 16 + QUAD $0xffff4cbe213a0f66; WORD $0x20ff // insertps xmm7, dword [rsi - 180], 32 + LONG $0xf66b0f66 // packssdw xmm6, xmm6 + LONG $0x213a0f66; WORD $0xcc7e; BYTE $0x30 // insertps xmm7, dword [rsi - 52], 48 + LONG $0xc06b0f66 // packssdw xmm0, xmm0 + LONG $0xc0630f66 // packsswb xmm0, xmm0 + LONG $0xdb0f4166; BYTE $0xc7 // pand xmm0, xmm15 + LONG $0xf0710f66; BYTE $0x05 // psllw xmm0, 5 + LONG $0xdb0f4166; BYTE $0xc6 // pand xmm0, xmm14 + LONG $0xed6b0f66 // packssdw xmm5, xmm5 + LONG $0xed630f66 // packsswb xmm5, xmm5 + LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 + LONG $0xf5710f66; BYTE $0x06 // psllw xmm5, 6 + LONG $0x6ddb0f66; BYTE $0x50 // pand xmm5, oword 80[rbp] /* [rip + .LCPI7_5] */ + LONG $0xe8eb0f66 // por xmm5, xmm0 + LONG $0xc5280f41 // movaps xmm0, xmm13 + LONG $0x01c3c20f // cmpltps xmm0, xmm3 + QUAD $0xfffffe509e100ff3 // movss xmm3, dword [rsi - 432] + QUAD $0xfffed09e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 304], 16 + QUAD $0xffff509e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 176], 32 + LONG $0x213a0f66; WORD $0xd05e; BYTE $0x30 // insertps xmm3, dword [rsi - 48], 48 + LONG $0xc06b0f66 // packssdw xmm0, xmm0 + LONG $0xc0630f66 // packsswb xmm0, xmm0 + LONG $0xf0710f66; BYTE $0x07 // psllw xmm0, 7 + LONG $0x6f0f4466; WORD $0x6055 // movdqa xmm10, oword 96[rbp] /* [rip + .LCPI7_6] */ + LONG $0xdb0f4166; BYTE $0xc2 // pand xmm0, xmm10 + LONG $0xc5eb0f66 // por xmm0, xmm5 + QUAD $0xfffffe54ae100ff3 // movss xmm5, dword [rsi - 428] + QUAD $0xfffed4ae213a0f66; WORD $0x10ff // insertps xmm5, dword [rsi - 300], 16 + QUAD $0xffff54ae213a0f66; WORD $0x20ff // insertps xmm5, dword [rsi - 172], 32 + LONG $0x213a0f66; WORD $0xd46e; BYTE $0x30 // insertps xmm5, dword [rsi - 44], 48 + LONG $0xc1eb0f66 // por xmm0, xmm1 + QUAD $0xfffe588e100f44f3; BYTE $0xff // movss xmm9, dword [rsi - 424] + QUAD $0xfed88e213a0f4466; WORD $0xffff; BYTE $0x10 // insertps xmm9, dword [rsi - 296], 16 + QUAD $0xff588e213a0f4466; WORD $0xffff; BYTE $0x20 // insertps xmm9, dword [rsi - 168], 32 + LONG $0xf6630f66 // packsswb xmm6, xmm6 + QUAD $0x30d84e213a0f4466 // insertps xmm9, dword [rsi - 40], 48 + LONG $0x620f4466; BYTE $0xc0 // punpckldq xmm8, xmm0 + LONG $0xc5280f41 // movaps xmm0, xmm13 + LONG $0x01c2c20f // cmpltps xmm0, xmm2 + LONG $0xc06b0f66 // packssdw xmm0, xmm0 + LONG $0xc0630f66 // packsswb xmm0, xmm0 + LONG $0xc86f0f66 // movdqa xmm1, xmm0 + LONG $0xdb0f4166; BYTE $0xcf // pand xmm1, xmm15 + LONG $0xc8f80f66 // psubb xmm1, xmm0 + QUAD $0xfffffe5c96100ff3 // movss xmm2, dword [rsi - 420] + QUAD $0xfffedc96213a0f66; WORD $0x10ff // insertps xmm2, dword [rsi - 292], 16 + LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 + QUAD $0xffff5c96213a0f66; WORD $0x20ff // insertps xmm2, dword [rsi - 164], 32 + LONG $0xceeb0f66 // por xmm1, xmm6 + LONG $0xf5280f41 // movaps xmm6, xmm13 + LONG $0x01f7c20f // cmpltps xmm6, xmm7 + LONG $0x213a0f66; WORD $0xdc56; BYTE $0x30 // insertps xmm2, dword [rsi - 36], 48 + LONG $0xf66b0f66 // packssdw xmm6, xmm6 + LONG $0xf6630f66 // packsswb xmm6, xmm6 + LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 + LONG $0xf6710f66; BYTE $0x02 // psllw xmm6, 2 + LONG $0x456f0f66; BYTE $0x10 // movdqa xmm0, oword 16[rbp] /* [rip + .LCPI7_1] */ + LONG $0xf0db0f66 // pand xmm6, xmm0 + LONG $0xf1eb0f66 // por xmm6, xmm1 + LONG $0xc5280f41 // movaps xmm0, xmm13 + LONG $0x01c3c20f // cmpltps xmm0, xmm3 + LONG $0xcd280f41 // movaps xmm1, xmm13 + LONG $0x01cdc20f // cmpltps xmm1, xmm5 + QUAD $0xfffffe609e100ff3 // movss xmm3, dword [rsi - 416] + QUAD $0xfffee09e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 288], 16 + QUAD $0xffff609e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 160], 32 + LONG $0x213a0f66; WORD $0xe05e; BYTE $0x30 // insertps xmm3, dword [rsi - 32], 48 + LONG $0xc06b0f66 // packssdw xmm0, xmm0 + LONG $0xc0630f66 // packsswb xmm0, xmm0 + LONG $0xdb0f4166; BYTE $0xc7 // pand xmm0, xmm15 + LONG $0xf0710f66; BYTE $0x03 // psllw xmm0, 3 + LONG $0xdb0f4166; BYTE $0xc4 // pand xmm0, xmm12 + LONG $0xc96b0f66 // packssdw xmm1, xmm1 + LONG $0xc9630f66 // packsswb xmm1, xmm1 + LONG $0xdb0f4166; BYTE $0xcf // pand xmm1, xmm15 + LONG $0xf1710f66; BYTE $0x04 // psllw xmm1, 4 + LONG $0x6f0f4466; WORD $0x3065 // movdqa xmm12, oword 48[rbp] /* [rip + .LCPI7_3] */ + LONG $0xdb0f4166; BYTE $0xcc // pand xmm1, xmm12 + LONG $0xc8eb0f66 // por xmm1, xmm0 + QUAD $0xfffffe68ae100ff3 // movss xmm5, dword [rsi - 408] + QUAD $0xfffee8ae213a0f66; WORD $0x10ff // insertps xmm5, dword [rsi - 280], 16 + QUAD $0xffff68ae213a0f66; WORD $0x20ff // insertps xmm5, dword [rsi - 152], 32 + LONG $0x213a0f66; WORD $0xe86e; BYTE $0x30 // insertps xmm5, dword [rsi - 24], 48 + LONG $0xceeb0f66 // por xmm1, xmm6 + LONG $0xc5280f41 // movaps xmm0, xmm13 + LONG $0xc1c20f41; BYTE $0x01 // cmpltps xmm0, xmm9 + LONG $0xf5280f41 // movaps xmm6, xmm13 + LONG $0x01f2c20f // cmpltps xmm6, xmm2 + QUAD $0xfffffe6cbe100ff3 // movss xmm7, dword [rsi - 404] + QUAD $0xfffeecbe213a0f66; WORD $0x10ff // insertps xmm7, dword [rsi - 276], 16 + QUAD $0xffff6cbe213a0f66; WORD $0x20ff // insertps xmm7, dword [rsi - 148], 32 + LONG $0xe46b0f66 // packssdw xmm4, xmm4 + LONG $0x213a0f66; WORD $0xec7e; BYTE $0x30 // insertps xmm7, dword [rsi - 20], 48 + LONG $0xc06b0f66 // packssdw xmm0, xmm0 + LONG $0xc0630f66 // packsswb xmm0, xmm0 + LONG $0xdb0f4166; BYTE $0xc7 // pand xmm0, xmm15 + LONG $0xf0710f66; BYTE $0x05 // psllw xmm0, 5 + LONG $0xdb0f4166; BYTE $0xc6 // pand xmm0, xmm14 + LONG $0xf66b0f66 // packssdw xmm6, xmm6 + LONG $0xf6630f66 // packsswb xmm6, xmm6 + LONG $0xdb0f4166; BYTE $0xf7 // pand xmm6, xmm15 + LONG $0xf6710f66; BYTE $0x06 // psllw xmm6, 6 + LONG $0x6f0f4466; WORD $0x504d // movdqa xmm9, oword 80[rbp] /* [rip + .LCPI7_5] */ + LONG $0xdb0f4166; BYTE $0xf1 // pand xmm6, xmm9 + LONG $0xf0eb0f66 // por xmm6, xmm0 + LONG $0xd5280f41 // movaps xmm2, xmm13 + LONG $0x01d3c20f // cmpltps xmm2, xmm3 + QUAD $0xfffffe7086100ff3 // movss xmm0, dword [rsi - 400] + QUAD $0xfffef086213a0f66; WORD $0x10ff // insertps xmm0, dword [rsi - 272], 16 + QUAD $0xffff7086213a0f66; WORD $0x20ff // insertps xmm0, dword [rsi - 144], 32 + LONG $0x213a0f66; WORD $0xf046; BYTE $0x30 // insertps xmm0, dword [rsi - 16], 48 + LONG $0xd26b0f66 // packssdw xmm2, xmm2 + LONG $0xd2630f66 // packsswb xmm2, xmm2 + LONG $0xf2710f66; BYTE $0x07 // psllw xmm2, 7 + LONG $0xdb0f4166; BYTE $0xd2 // pand xmm2, xmm10 + LONG $0xd6eb0f66 // por xmm2, xmm6 + QUAD $0xfffffe74b6100ff3 // movss xmm6, dword [rsi - 396] + QUAD $0xfffef4b6213a0f66; WORD $0x10ff // insertps xmm6, dword [rsi - 268], 16 + QUAD $0xffff74b6213a0f66; WORD $0x20ff // insertps xmm6, dword [rsi - 140], 32 + LONG $0xe4630f66 // packsswb xmm4, xmm4 + LONG $0x213a0f66; WORD $0xf476; BYTE $0x30 // insertps xmm6, dword [rsi - 12], 48 + LONG $0xd1eb0f66 // por xmm2, xmm1 + LONG $0xcd280f41 // movaps xmm1, xmm13 + LONG $0x01cdc20f // cmpltps xmm1, xmm5 + LONG $0xc96b0f66 // packssdw xmm1, xmm1 + LONG $0xc9630f66 // packsswb xmm1, xmm1 + LONG $0xe96f0f66 // movdqa xmm5, xmm1 + LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 + LONG $0xe9f80f66 // psubb xmm5, xmm1 + QUAD $0xfffffe789e100ff3 // movss xmm3, dword [rsi - 392] + QUAD $0xfffef89e213a0f66; WORD $0x10ff // insertps xmm3, dword [rsi - 264], 16 + LONG $0xdb0f4166; BYTE $0xe7 // pand xmm4, xmm15 + QUAD $0xffff789e213a0f66; WORD $0x20ff // insertps xmm3, dword [rsi - 136], 32 + LONG $0xeceb0f66 // por xmm5, xmm4 + LONG $0xe5280f41 // movaps xmm4, xmm13 + LONG $0x01e7c20f // cmpltps xmm4, xmm7 + LONG $0x213a0f66; WORD $0xf85e; BYTE $0x30 // insertps xmm3, dword [rsi - 8], 48 + LONG $0xe46b0f66 // packssdw xmm4, xmm4 + LONG $0xe4630f66 // packsswb xmm4, xmm4 + LONG $0xdb0f4166; BYTE $0xe7 // pand xmm4, xmm15 + LONG $0xf4710f66; BYTE $0x02 // psllw xmm4, 2 + LONG $0x65db0f66; BYTE $0x10 // pand xmm4, oword 16[rbp] /* [rip + .LCPI7_1] */ + LONG $0xe5eb0f66 // por xmm4, xmm5 + LONG $0xed280f41 // movaps xmm5, xmm13 + LONG $0x01e8c20f // cmpltps xmm5, xmm0 + LONG $0xcd280f41 // movaps xmm1, xmm13 + LONG $0x01cec20f // cmpltps xmm1, xmm6 + QUAD $0xfffffe7c86100ff3 // movss xmm0, dword [rsi - 388] + QUAD $0xfffefc86213a0f66; WORD $0x10ff // insertps xmm0, dword [rsi - 260], 16 + QUAD $0xffff7c86213a0f66; WORD $0x20ff // insertps xmm0, dword [rsi - 132], 32 + LONG $0x213a0f66; WORD $0xfc46; BYTE $0x30 // insertps xmm0, dword [rsi - 4], 48 + LONG $0xed6b0f66 // packssdw xmm5, xmm5 + LONG $0xed630f66 // packsswb xmm5, xmm5 + LONG $0xdb0f4166; BYTE $0xef // pand xmm5, xmm15 + LONG $0xf5710f66; BYTE $0x03 // psllw xmm5, 3 + LONG $0x6ddb0f66; BYTE $0x20 // pand xmm5, oword 32[rbp] /* [rip + .LCPI7_2] */ + LONG $0xc96b0f66 // packssdw xmm1, xmm1 + LONG $0xc9630f66 // packsswb xmm1, xmm1 + LONG $0xdb0f4166; BYTE $0xcf // pand xmm1, xmm15 + LONG $0xf1710f66; BYTE $0x04 // psllw xmm1, 4 + LONG $0xdb0f4166; BYTE $0xcc // pand xmm1, xmm12 + LONG $0xcdeb0f66 // por xmm1, xmm5 + QUAD $0xfffffe80ae100ff3 // movss xmm5, dword [rsi - 384] + QUAD $0xffff00ae213a0f66; WORD $0x10ff // insertps xmm5, dword [rsi - 256], 16 + LONG $0x213a0f66; WORD $0x806e; BYTE $0x20 // insertps xmm5, dword [rsi - 128], 32 + LONG $0xcceb0f66 // por xmm1, xmm4 + LONG $0xe5280f41 // movaps xmm4, xmm13 + LONG $0x01e3c20f // cmpltps xmm4, xmm3 + LONG $0xdd280f41 // movaps xmm3, xmm13 + LONG $0x01d8c20f // cmpltps xmm3, xmm0 + LONG $0x213a0f66; WORD $0x302e // insertps xmm5, dword [rsi], 48 + LONG $0xe46b0f66 // packssdw xmm4, xmm4 + LONG $0xe4630f66 // packsswb xmm4, xmm4 + LONG $0xdb0f4166; BYTE $0xe7 // pand xmm4, xmm15 + LONG $0xf4710f66; BYTE $0x05 // psllw xmm4, 5 + LONG $0xdb0f4166; BYTE $0xe6 // pand xmm4, xmm14 + LONG $0xdb6b0f66 // packssdw xmm3, xmm3 + LONG $0xdb630f66 // packsswb xmm3, xmm3 + LONG $0xdb0f4166; BYTE $0xdf // pand xmm3, xmm15 + LONG $0xf3710f66; BYTE $0x06 // psllw xmm3, 6 + LONG $0xdb0f4166; BYTE $0xd9 // pand xmm3, xmm9 + LONG $0xdceb0f66 // por xmm3, xmm4 + LONG $0xc5280f41 // movaps xmm0, xmm13 + LONG $0x01c5c20f // cmpltps xmm0, xmm5 + LONG $0xc06b0f66 // packssdw xmm0, xmm0 + LONG $0xc0630f66 // packsswb xmm0, xmm0 + LONG $0xf0710f66; BYTE $0x07 // psllw xmm0, 7 + LONG $0xdb0f4166; BYTE $0xc2 // pand xmm0, xmm10 + LONG $0xc3eb0f66 // por xmm0, xmm3 + LONG $0xc1eb0f66 // por xmm0, xmm1 + LONG $0xd0620f66 // punpckldq xmm2, xmm0 + LONG $0x600f4466; BYTE $0xc2 // punpcklbw xmm8, xmm2 + LONG $0x380f4466; WORD $0x4500; BYTE $0x70 // pshufb xmm8, oword 112[rbp] /* [rip + .LCPI7_7] */ + LONG $0x7f0f44f3; WORD $0x8f04 // movdqu oword [rdi + 4*rcx], xmm8 + LONG $0x04c18348 // add rcx, 4 + LONG $0x00c68148; WORD $0x0002; BYTE $0x00 // add rsi, 512 + WORD $0x3948; BYTE $0xc8 // cmp rax, rcx + JNE LBB7_183 + WORD $0x3949; BYTE $0xc2 // cmp r10, rax + JNE LBB7_185 + JMP LBB7_188 DATA LCDATA6<>+0x000(SB)/8, $0x0000000001010101 DATA LCDATA6<>+0x008(SB)/8, $0x0000000000000000 @@ -46936,15 +48344,15 @@ TEXT ·_comparison_greater_equal_arr_scalar_sse4(SB), $520-48 WORD $0x894d; BYTE $0xc2 // mov r10, r8 WORD $0x8949; BYTE $0xce // mov r14, rcx WORD $0xff83; BYTE $0x06 // cmp edi, 6 - JG LBB10_16 + JG LBB10_26 WORD $0xff83; BYTE $0x03 // cmp edi, 3 - JLE LBB10_31 + JLE LBB10_2 WORD $0xff83; BYTE $0x04 // cmp edi, 4 - JE LBB10_81 + JE LBB10_99 WORD $0xff83; BYTE $0x05 // cmp edi, 5 - JE LBB10_92 + JE LBB10_114 WORD $0xff83; BYTE $0x06 // cmp edi, 6 - JNE LBB10_182 + JNE LBB10_201 WORD $0x8b44; BYTE $0x2a // mov r13d, dword [rdx] LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -46954,10 +48362,10 @@ TEXT ·_comparison_greater_equal_arr_scalar_sse4(SB), $520-48 LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_9 + JE LBB10_17 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB10_7: +LBB10_15: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d LONG $0x04768d48 // lea rsi, [rsi + 4] LONG $0x000000ba; BYTE $0x00 // mov edx, 0 @@ -46978,63 +48386,63 @@ LBB10_7: LONG $0x1e3c8841 // mov byte [r14 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_7 + JNE LBB10_15 LONG $0x01c68349 // add r14, 1 -LBB10_9: +LBB10_17: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB10_13 + JL LBB10_21 LONG $0x2454894c; BYTE $0x48 // mov qword [rsp + 72], r10 QUAD $0x00000170249c894c // mov qword [rsp + 368], r11 QUAD $0x00000140249c894c // mov qword [rsp + 320], r11 -LBB10_11: +LBB10_19: QUAD $0x0000016024b4894c // mov qword [rsp + 352], r14 WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d - QUAD $0x000000a02494930f // setae byte [rsp + 160] + QUAD $0x000000f02494930f // setae byte [rsp + 240] LONG $0x046e3944 // cmp dword [rsi + 4], r13d - LONG $0xd7930f40 // setae dil + LONG $0xd2930f41 // setae r10b LONG $0x086e3944 // cmp dword [rsi + 8], r13d LONG $0xd6930f41 // setae r14b LONG $0x0c6e3944 // cmp dword [rsi + 12], r13d - QUAD $0x000001502494930f // setae byte [rsp + 336] + QUAD $0x000001102494930f // setae byte [rsp + 272] LONG $0x106e3944 // cmp dword [rsi + 16], r13d - QUAD $0x000000e02494930f // setae byte [rsp + 224] - LONG $0x146e3944 // cmp dword [rsi + 20], r13d QUAD $0x000000d02494930f // setae byte [rsp + 208] + LONG $0x146e3944 // cmp dword [rsi + 20], r13d + QUAD $0x000000c02494930f // setae byte [rsp + 192] LONG $0x186e3944 // cmp dword [rsi + 24], r13d WORD $0x930f; BYTE $0xd0 // setae al LONG $0x1c6e3944 // cmp dword [rsi + 28], r13d WORD $0x930f; BYTE $0xd3 // setae bl LONG $0x206e3944 // cmp dword [rsi + 32], r13d - QUAD $0x000001302494930f // setae byte [rsp + 304] + QUAD $0x000001502494930f // setae byte [rsp + 336] LONG $0x246e3944 // cmp dword [rsi + 36], r13d - WORD $0x930f; BYTE $0xd2 // setae dl + LONG $0xd7930f40 // setae dil LONG $0x286e3944 // cmp dword [rsi + 40], r13d - LONG $0xd1930f41 // setae r9b + LONG $0xd0930f41 // setae r8b LONG $0x2c6e3944 // cmp dword [rsi + 44], r13d - LONG $0xd2930f41 // setae r10b + LONG $0xd1930f41 // setae r9b LONG $0x306e3944 // cmp dword [rsi + 48], r13d LONG $0xd3930f41 // setae r11b LONG $0x346e3944 // cmp dword [rsi + 52], r13d LONG $0xd4930f41 // setae r12b LONG $0x386e3944 // cmp dword [rsi + 56], r13d - QUAD $0x000001002494930f // setae byte [rsp + 256] + QUAD $0x000001202494930f // setae byte [rsp + 288] LONG $0x3c6e3944 // cmp dword [rsi + 60], r13d WORD $0x930f; BYTE $0xd1 // setae cl LONG $0x406e3944 // cmp dword [rsi + 64], r13d - QUAD $0x000000b02494930f // setae byte [rsp + 176] + QUAD $0x000000a02494930f // setae byte [rsp + 160] LONG $0x446e3944 // cmp dword [rsi + 68], r13d - QUAD $0x000001102494930f // setae byte [rsp + 272] + QUAD $0x000001302494930f // setae byte [rsp + 304] LONG $0x486e3944 // cmp dword [rsi + 72], r13d - QUAD $0x000001202494930f // setae byte [rsp + 288] + QUAD $0x000001002494930f // setae byte [rsp + 256] LONG $0x4c6e3944 // cmp dword [rsi + 76], r13d - QUAD $0x000000f02494930f // setae byte [rsp + 240] + QUAD $0x000000e02494930f // setae byte [rsp + 224] LONG $0x506e3944 // cmp dword [rsi + 80], r13d - QUAD $0x000000c02494930f // setae byte [rsp + 192] + QUAD $0x000000b02494930f // setae byte [rsp + 176] LONG $0x546e3944 // cmp dword [rsi + 84], r13d - QUAD $0x000000902494930f // setae byte [rsp + 144] + LONG $0x2454930f; BYTE $0x70 // setae byte [rsp + 112] LONG $0x586e3944 // cmp dword [rsi + 88], r13d QUAD $0x000000802494930f // setae byte [rsp + 128] LONG $0x5c6e3944 // cmp dword [rsi + 92], r13d @@ -47042,7 +48450,7 @@ LBB10_11: LONG $0x606e3944 // cmp dword [rsi + 96], r13d LONG $0x2454930f; BYTE $0x30 // setae byte [rsp + 48] LONG $0x646e3944 // cmp dword [rsi + 100], r13d - LONG $0x2454930f; BYTE $0x70 // setae byte [rsp + 112] + QUAD $0x000000902494930f // setae byte [rsp + 144] LONG $0x686e3944 // cmp dword [rsi + 104], r13d LONG $0x2454930f; BYTE $0x60 // setae byte [rsp + 96] LONG $0x6c6e3944 // cmp dword [rsi + 108], r13d @@ -47054,121 +48462,122 @@ LBB10_11: LONG $0x786e3944 // cmp dword [rsi + 120], r13d LONG $0x2454930f; BYTE $0x08 // setae byte [rsp + 8] LONG $0x7c6e3944 // cmp dword [rsi + 124], r13d - LONG $0xd0930f41 // setae r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x000000a024bc0240 // add dil, byte [rsp + 160] + WORD $0x930f; BYTE $0xd2 // setae dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000f024940244 // add r10b, byte [rsp + 240] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0x30249402; WORD $0x0001; BYTE $0x00 // add dl, byte [rsp + 304] - QUAD $0x000001502484b60f // movzx eax, byte [rsp + 336] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + QUAD $0x0000015024bc0240 // add dil, byte [rsp + 336] + QUAD $0x000001102484b60f // movzx eax, byte [rsp + 272] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000e02494b60f // movzx edx, byte [rsp + 224] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - QUAD $0x000000d02494b60f // movzx edx, byte [rsp + 208] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + QUAD $0x0000016024b48b4c // mov r14, qword [rsp + 352] + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + QUAD $0x000000c02484b60f // movzx eax, byte [rsp + 192] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b - QUAD $0x0000010024bcb60f // movzx edi, byte [rsp + 256] + QUAD $0x0000012024bcb60f // movzx edi, byte [rsp + 288] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x0000016024b48b4c // mov r14, qword [rsp + 352] - QUAD $0x000001102494b60f // movzx edx, byte [rsp + 272] - WORD $0xd200 // add dl, dl - LONG $0xb0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 176] - WORD $0xd789 // mov edi, edx - QUAD $0x000001202494b60f // movzx edx, byte [rsp + 288] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000f02494b60f // movzx edx, byte [rsp + 240] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000c02494b60f // movzx edx, byte [rsp + 192] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + QUAD $0x000001302484b60f // movzx eax, byte [rsp + 304] + WORD $0xc000 // add al, al + LONG $0xa0248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 160] + WORD $0xc789 // mov edi, eax + QUAD $0x000001002484b60f // movzx eax, byte [rsp + 256] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x000000e02484b60f // movzx eax, byte [rsp + 224] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil WORD $0x8841; BYTE $0x1e // mov byte [r14], bl QUAD $0x00000080249cb60f // movzx ebx, byte [rsp + 128] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl LONG $0x014e8841 // mov byte [r14 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] - WORD $0xc900 // add cl, cl - LONG $0x30244c02 // add cl, byte [rsp + 48] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0841; BYTE $0xc7 // or r15b, al + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xc000 // add al, al + LONG $0x30244402 // add al, byte [rsp + 48] + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xc808 // or al, cl + LONG $0x244cb60f; BYTE $0x08 // movzx ecx, byte [rsp + 8] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xca08 // or dl, cl + WORD $0xc208 // or dl, al LONG $0x027e8845 // mov byte [r14 + 2], r15b - LONG $0x03468845 // mov byte [r14 + 3], r8b + LONG $0x03568841 // mov byte [r14 + 3], dl LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 LONG $0x04c68349 // add r14, 4 QUAD $0x0000014024848348; BYTE $0xff // add qword [rsp + 320], -1 - JNE LBB10_11 + JNE LBB10_19 LONG $0x24548b4c; BYTE $0x48 // mov r10, qword [rsp + 72] QUAD $0x00000170249c8b4c // mov r11, qword [rsp + 368] -LBB10_13: +LBB10_21: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB10_182 + JGE LBB10_201 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 - JNE LBB10_162 + JNE LBB10_137 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB10_164 + JMP LBB10_24 -LBB10_16: +LBB10_26: WORD $0xff83; BYTE $0x08 // cmp edi, 8 - JLE LBB10_45 + JLE LBB10_27 WORD $0xff83; BYTE $0x09 // cmp edi, 9 - JE LBB10_104 + JE LBB10_157 WORD $0xff83; BYTE $0x0b // cmp edi, 11 - JE LBB10_115 + JE LBB10_172 WORD $0xff83; BYTE $0x0c // cmp edi, 12 - JNE LBB10_182 + JNE LBB10_201 LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 LONG $0xda490f4d // cmovns r11, r10 @@ -47178,14 +48587,15 @@ LBB10_16: WORD $0xe083; BYTE $0xf8 // and eax, -8 LONG $0x02100ff2 // movsd xmm0, qword [rdx] WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_24 + JE LBB10_49 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB10_22: - LONG $0x062e0f66 // ucomisd xmm0, qword [rsi] - WORD $0x960f; BYTE $0xd2 // setbe dl +LBB10_47: + LONG $0x0e100ff2 // movsd xmm1, qword [rsi] LONG $0x08c68348 // add rsi, 8 - WORD $0xdaf6 // neg dl + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0x000000ba; BYTE $0x00 // mov edx, 0 + WORD $0xd280; BYTE $0xff // adc dl, -1 LONG $0x07788d48 // lea rdi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax @@ -47202,191 +48612,221 @@ LBB10_22: LONG $0x3e1c8841 // mov byte [r14 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_22 + JNE LBB10_47 LONG $0x01c68349 // add r14, 1 -LBB10_24: +LBB10_49: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB10_28 + JL LBB10_53 LONG $0x2454894c; BYTE $0x48 // mov qword [rsp + 72], r10 QUAD $0x00000140249c894c // mov qword [rsp + 320], r11 - QUAD $0x000000a0249c894c // mov qword [rsp + 160], r11 + QUAD $0x000000f0249c894c // mov qword [rsp + 240], r11 -LBB10_26: +LBB10_51: QUAD $0x0000016024b4894c // mov qword [rsp + 352], r14 - LONG $0x062e0f66 // ucomisd xmm0, qword [rsi] - QUAD $0x000001502494960f // setbe byte [rsp + 336] - LONG $0x462e0f66; BYTE $0x08 // ucomisd xmm0, qword [rsi + 8] - LONG $0xd1960f41 // setbe r9b - LONG $0x462e0f66; BYTE $0x10 // ucomisd xmm0, qword [rsi + 16] - LONG $0xd6960f41 // setbe r14b - LONG $0x462e0f66; BYTE $0x18 // ucomisd xmm0, qword [rsi + 24] - LONG $0xd5960f41 // setbe r13b - LONG $0x462e0f66; BYTE $0x20 // ucomisd xmm0, qword [rsi + 32] - QUAD $0x000000e02494960f // setbe byte [rsp + 224] - LONG $0x462e0f66; BYTE $0x28 // ucomisd xmm0, qword [rsi + 40] - QUAD $0x000000d02494960f // setbe byte [rsp + 208] - LONG $0x462e0f66; BYTE $0x30 // ucomisd xmm0, qword [rsi + 48] - WORD $0x960f; BYTE $0xd0 // setbe al - LONG $0x462e0f66; BYTE $0x38 // ucomisd xmm0, qword [rsi + 56] - WORD $0x960f; BYTE $0xd3 // setbe bl - LONG $0x462e0f66; BYTE $0x40 // ucomisd xmm0, qword [rsi + 64] - QUAD $0x000001002494960f // setbe byte [rsp + 256] - LONG $0x462e0f66; BYTE $0x48 // ucomisd xmm0, qword [rsi + 72] - WORD $0x960f; BYTE $0xd2 // setbe dl - LONG $0x462e0f66; BYTE $0x50 // ucomisd xmm0, qword [rsi + 80] - LONG $0xd7960f40 // setbe dil - LONG $0x462e0f66; BYTE $0x58 // ucomisd xmm0, qword [rsi + 88] - LONG $0xd2960f41 // setbe r10b - LONG $0x462e0f66; BYTE $0x60 // ucomisd xmm0, qword [rsi + 96] - LONG $0xd3960f41 // setbe r11b - LONG $0x462e0f66; BYTE $0x68 // ucomisd xmm0, qword [rsi + 104] - LONG $0xd4960f41 // setbe r12b - LONG $0x462e0f66; BYTE $0x70 // ucomisd xmm0, qword [rsi + 112] - QUAD $0x000001102494960f // setbe byte [rsp + 272] - LONG $0x462e0f66; BYTE $0x78 // ucomisd xmm0, qword [rsi + 120] - WORD $0x960f; BYTE $0xd1 // setbe cl - QUAD $0x00000080862e0f66 // ucomisd xmm0, qword [rsi + 128] - QUAD $0x000000b02494960f // setbe byte [rsp + 176] - QUAD $0x00000088862e0f66 // ucomisd xmm0, qword [rsi + 136] - QUAD $0x000001302494960f // setbe byte [rsp + 304] - QUAD $0x00000090862e0f66 // ucomisd xmm0, qword [rsi + 144] - QUAD $0x000001202494960f // setbe byte [rsp + 288] - QUAD $0x00000098862e0f66 // ucomisd xmm0, qword [rsi + 152] - QUAD $0x000000f02494960f // setbe byte [rsp + 240] - QUAD $0x000000a0862e0f66 // ucomisd xmm0, qword [rsi + 160] - QUAD $0x000000c02494960f // setbe byte [rsp + 192] - QUAD $0x000000a8862e0f66 // ucomisd xmm0, qword [rsi + 168] - QUAD $0x000000902494960f // setbe byte [rsp + 144] - QUAD $0x000000b0862e0f66 // ucomisd xmm0, qword [rsi + 176] - QUAD $0x000000802494960f // setbe byte [rsp + 128] - QUAD $0x000000b8862e0f66 // ucomisd xmm0, qword [rsi + 184] - LONG $0xd7960f41 // setbe r15b - QUAD $0x000000c0862e0f66 // ucomisd xmm0, qword [rsi + 192] - LONG $0x2454960f; BYTE $0x30 // setbe byte [rsp + 48] - QUAD $0x000000c8862e0f66 // ucomisd xmm0, qword [rsi + 200] - LONG $0x2454960f; BYTE $0x70 // setbe byte [rsp + 112] - QUAD $0x000000d0862e0f66 // ucomisd xmm0, qword [rsi + 208] - LONG $0x2454960f; BYTE $0x60 // setbe byte [rsp + 96] - QUAD $0x000000d8862e0f66 // ucomisd xmm0, qword [rsi + 216] - LONG $0x2454960f; BYTE $0x50 // setbe byte [rsp + 80] - QUAD $0x000000e0862e0f66 // ucomisd xmm0, qword [rsi + 224] - LONG $0x2454960f; BYTE $0x20 // setbe byte [rsp + 32] - QUAD $0x000000e8862e0f66 // ucomisd xmm0, qword [rsi + 232] - LONG $0x2454960f; BYTE $0x10 // setbe byte [rsp + 16] - QUAD $0x000000f0862e0f66 // ucomisd xmm0, qword [rsi + 240] - LONG $0x2454960f; BYTE $0x08 // setbe byte [rsp + 8] - QUAD $0x000000f8862e0f66 // ucomisd xmm0, qword [rsi + 248] - LONG $0xd0960f41 // setbe r8b - WORD $0x0045; BYTE $0xc9 // add r9b, r9b - QUAD $0x00000150248c0244 // add r9b, byte [rsp + 336] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - WORD $0xe3c0; BYTE $0x07 // shl bl, 7 - WORD $0xc308 // or bl, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0845; BYTE $0xce // or r14b, r9b + LONG $0x0e100ff2 // movsd xmm1, qword [rsi] + LONG $0x56100ff2; BYTE $0x08 // movsd xmm2, qword [rsi + 8] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + QUAD $0x000001202494930f // setae byte [rsp + 288] + LONG $0xd02e0f66 // ucomisd xmm2, xmm0 + WORD $0x930f; BYTE $0xd2 // setae dl + LONG $0x4e100ff2; BYTE $0x10 // movsd xmm1, qword [rsi + 16] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0xd7930f40 // setae dil + LONG $0x4e100ff2; BYTE $0x18 // movsd xmm1, qword [rsi + 24] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0xd0930f41 // setae r8b + LONG $0x4e100ff2; BYTE $0x20 // movsd xmm1, qword [rsi + 32] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0xd1930f41 // setae r9b + LONG $0x4e100ff2; BYTE $0x28 // movsd xmm1, qword [rsi + 40] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + QUAD $0x000001102494930f // setae byte [rsp + 272] + LONG $0x4e100ff2; BYTE $0x30 // movsd xmm1, qword [rsi + 48] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + QUAD $0x000001302494930f // setae byte [rsp + 304] + LONG $0x4e100ff2; BYTE $0x38 // movsd xmm1, qword [rsi + 56] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + QUAD $0x000001502494930f // setae byte [rsp + 336] + LONG $0x4e100ff2; BYTE $0x40 // movsd xmm1, qword [rsi + 64] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + QUAD $0x000000c02494930f // setae byte [rsp + 192] + LONG $0x4e100ff2; BYTE $0x48 // movsd xmm1, qword [rsi + 72] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0xd2930f41 // setae r10b + LONG $0x4e100ff2; BYTE $0x50 // movsd xmm1, qword [rsi + 80] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + WORD $0x930f; BYTE $0xd3 // setae bl + LONG $0x4e100ff2; BYTE $0x58 // movsd xmm1, qword [rsi + 88] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0xd7930f41 // setae r15b + LONG $0x4e100ff2; BYTE $0x60 // movsd xmm1, qword [rsi + 96] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + WORD $0x930f; BYTE $0xd0 // setae al + LONG $0x4e100ff2; BYTE $0x68 // movsd xmm1, qword [rsi + 104] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + QUAD $0x000000d02494930f // setae byte [rsp + 208] + LONG $0x4e100ff2; BYTE $0x70 // movsd xmm1, qword [rsi + 112] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + QUAD $0x000000b02494930f // setae byte [rsp + 176] + LONG $0x4e100ff2; BYTE $0x78 // movsd xmm1, qword [rsi + 120] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + QUAD $0x000000e02494930f // setae byte [rsp + 224] + QUAD $0x000000808e100ff2 // movsd xmm1, qword [rsi + 128] + QUAD $0x0000008896100ff2 // movsd xmm2, qword [rsi + 136] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + QUAD $0x000000908e100ff2 // movsd xmm1, qword [rsi + 144] + QUAD $0x000000902494930f // setae byte [rsp + 144] + LONG $0xd02e0f66 // ucomisd xmm2, xmm0 + QUAD $0x0000009896100ff2 // movsd xmm2, qword [rsi + 152] + LONG $0xd3930f41 // setae r11b + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + QUAD $0x000000a08e100ff2 // movsd xmm1, qword [rsi + 160] + LONG $0xd6930f41 // setae r14b + LONG $0xd02e0f66 // ucomisd xmm2, xmm0 + QUAD $0x000000a896100ff2 // movsd xmm2, qword [rsi + 168] + LONG $0xd4930f41 // setae r12b + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + QUAD $0x000000b08e100ff2 // movsd xmm1, qword [rsi + 176] + QUAD $0x000001002494930f // setae byte [rsp + 256] + LONG $0xd02e0f66 // ucomisd xmm2, xmm0 + QUAD $0x000000b896100ff2 // movsd xmm2, qword [rsi + 184] + QUAD $0x000000a02494930f // setae byte [rsp + 160] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + QUAD $0x000000c08e100ff2 // movsd xmm1, qword [rsi + 192] + LONG $0x2454930f; BYTE $0x70 // setae byte [rsp + 112] + LONG $0xd02e0f66 // ucomisd xmm2, xmm0 + QUAD $0x000000c896100ff2 // movsd xmm2, qword [rsi + 200] + LONG $0xd5930f41 // setae r13b + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + QUAD $0x000000d08e100ff2 // movsd xmm1, qword [rsi + 208] + LONG $0x2454930f; BYTE $0x10 // setae byte [rsp + 16] + LONG $0xd02e0f66 // ucomisd xmm2, xmm0 + QUAD $0x000000d896100ff2 // movsd xmm2, qword [rsi + 216] + QUAD $0x000000802494930f // setae byte [rsp + 128] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + QUAD $0x000000e08e100ff2 // movsd xmm1, qword [rsi + 224] + LONG $0x2454930f; BYTE $0x60 // setae byte [rsp + 96] + LONG $0xd02e0f66 // ucomisd xmm2, xmm0 + QUAD $0x000000e896100ff2 // movsd xmm2, qword [rsi + 232] + LONG $0x2454930f; BYTE $0x50 // setae byte [rsp + 80] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + QUAD $0x000000f08e100ff2 // movsd xmm1, qword [rsi + 240] + LONG $0x2454930f; BYTE $0x30 // setae byte [rsp + 48] + LONG $0xd02e0f66 // ucomisd xmm2, xmm0 + QUAD $0x000000f896100ff2 // movsd xmm2, qword [rsi + 248] + LONG $0x2454930f; BYTE $0x20 // setae byte [rsp + 32] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0x2454930f; BYTE $0x08 // setae byte [rsp + 8] + LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 + LONG $0xd02e0f66 // ucomisd xmm2, xmm0 + WORD $0x930f; BYTE $0xd1 // setae cl WORD $0xd200 // add dl, dl - LONG $0x00249402; WORD $0x0001; BYTE $0x00 // add dl, byte [rsp + 256] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xf5 // or r13b, r14b + LONG $0x20249402; WORD $0x0001; BYTE $0x00 // add dl, byte [rsp + 288] LONG $0x02e7c040 // shl dil, 2 WORD $0x0840; BYTE $0xd7 // or dil, dl - QUAD $0x000000e02494b60f // movzx edx, byte [rsp + 224] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0844; BYTE $0xea // or dl, r13b - WORD $0x8941; BYTE $0xd1 // mov r9d, edx - QUAD $0x0000016024b48b4c // mov r14, qword [rsp + 352] - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0841; BYTE $0xfa // or r10b, dil - QUAD $0x000000d02494b60f // movzx edx, byte [rsp + 208] + LONG $0x03e0c041 // shl r8b, 3 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + LONG $0x04e1c041 // shl r9b, 4 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + QUAD $0x000001102494b60f // movzx edx, byte [rsp + 272] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0x0844; BYTE $0xca // or dl, r9b - LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xdc // or r12b, r11b - QUAD $0x0000011024bcb60f // movzx edi, byte [rsp + 272] - LONG $0x06e7c040 // shl dil, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl - WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x000001302484b60f // movzx eax, byte [rsp + 304] - WORD $0xc000 // add al, al - LONG $0xb0248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 176] - QUAD $0x000001202494b60f // movzx edx, byte [rsp + 288] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0xc208 // or dl, al WORD $0xd789 // mov edi, edx - QUAD $0x000000f02494b60f // movzx edx, byte [rsp + 240] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000c02494b60f // movzx edx, byte [rsp + 192] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 + QUAD $0x0001302484b60f44; BYTE $0x00 // movzx r8d, byte [rsp + 304] + LONG $0x06e0c041 // shl r8b, 6 + QUAD $0x000001502494b60f // movzx edx, byte [rsp + 336] + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0x0844; BYTE $0xc2 // or dl, r8b + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000c024940244 // add r10b, byte [rsp + 192] + WORD $0xe3c0; BYTE $0x02 // shl bl, 2 + WORD $0x0844; BYTE $0xd3 // or bl, r10b + LONG $0x03e7c041 // shl r15b, 3 + WORD $0x0841; BYTE $0xdf // or r15b, bl + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xf8 // or al, r15b WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] + QUAD $0x000000d0249cb60f // movzx ebx, byte [rsp + 208] + WORD $0xe3c0; BYTE $0x05 // shl bl, 5 + WORD $0xc308 // or bl, al + WORD $0xdf89 // mov edi, ebx + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + QUAD $0x000000e0249cb60f // movzx ebx, byte [rsp + 224] + WORD $0xe3c0; BYTE $0x07 // shl bl, 7 + WORD $0xc308 // or bl, al + WORD $0x0045; BYTE $0xdb // add r11b, r11b + QUAD $0x00000090249c0244 // add r11b, byte [rsp + 144] + LONG $0x02e6c041 // shl r14b, 2 + WORD $0x0845; BYTE $0xde // or r14b, r11b + LONG $0x03e4c041 // shl r12b, 3 + WORD $0x0845; BYTE $0xf4 // or r12b, r14b + QUAD $0x0000016024b48b4c // mov r14, qword [rsp + 352] + QUAD $0x000001002484b60f // movzx eax, byte [rsp + 256] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xe0 // or al, r12b + WORD $0x8941; BYTE $0xc0 // mov r8d, eax + QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0844; BYTE $0xc0 // or al, r8b + WORD $0x0840; BYTE $0xfb // or bl, dil + LONG $0x247cb60f; BYTE $0x70 // movzx edi, byte [rsp + 112] + LONG $0x06e7c040 // shl dil, 6 + LONG $0x07e5c041 // shl r13b, 7 + WORD $0x0841; BYTE $0xfd // or r13b, dil + WORD $0x8841; BYTE $0x16 // mov byte [r14], dl + WORD $0x0841; BYTE $0xc5 // or r13b, al + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] + WORD $0xc000 // add al, al + LONG $0x10244402 // add al, byte [rsp + 16] + WORD $0xc289 // mov edx, eax + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xd008 // or al, dl + WORD $0xc289 // mov edx, eax + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xd008 // or al, dl + WORD $0xc289 // mov edx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xd008 // or al, dl + LONG $0x2454b60f; BYTE $0x20 // movzx edx, byte [rsp + 32] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0x8841; BYTE $0x1e // mov byte [r14], bl - QUAD $0x00000080249cb60f // movzx ebx, byte [rsp + 128] + WORD $0xc208 // or dl, al + LONG $0x015e8841 // mov byte [r14 + 1], bl + LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xdf // or r15b, bl - LONG $0x014e8841 // mov byte [r14 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] - WORD $0xc900 // add cl, cl - LONG $0x30244c02 // add cl, byte [rsp + 48] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + WORD $0xe1c0; BYTE $0x07 // shl cl, 7 + WORD $0xd908 // or cl, bl + LONG $0x026e8845 // mov byte [r14 + 2], r13b WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl - LONG $0x027e8845 // mov byte [r14 + 2], r15b - LONG $0x03468845 // mov byte [r14 + 3], r8b - LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 + LONG $0x034e8841 // mov byte [r14 + 3], cl LONG $0x04c68349 // add r14, 4 - QUAD $0x000000a024848348; BYTE $0xff // add qword [rsp + 160], -1 - JNE LBB10_26 + QUAD $0x000000f024848348; BYTE $0xff // add qword [rsp + 240], -1 + JNE LBB10_51 LONG $0x24548b4c; BYTE $0x48 // mov r10, qword [rsp + 72] QUAD $0x00000140249c8b4c // mov r11, qword [rsp + 320] -LBB10_28: +LBB10_53: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB10_182 + JGE LBB10_201 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 - JNE LBB10_166 + JNE LBB10_195 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB10_168 + JMP LBB10_197 -LBB10_31: +LBB10_2: WORD $0xff83; BYTE $0x02 // cmp edi, 2 - JE LBB10_58 + JE LBB10_56 WORD $0xff83; BYTE $0x03 // cmp edi, 3 - JNE LBB10_182 + JNE LBB10_201 WORD $0x8a44; BYTE $0x1a // mov r11b, byte [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -47396,10 +48836,10 @@ LBB10_31: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_37 + JE LBB10_8 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB10_35: +LBB10_6: WORD $0x3844; BYTE $0x1e // cmp byte [rsi], r11b LONG $0x01768d48 // lea rsi, [rsi + 1] WORD $0x9d0f; BYTE $0xd2 // setge dl @@ -47420,38 +48860,37 @@ LBB10_35: LONG $0x3e1c8841 // mov byte [r14 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_35 + JNE LBB10_6 LONG $0x01c68349 // add r14, 1 -LBB10_37: +LBB10_8: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB10_127 + JL LBB10_9 LONG $0x10ff8349 // cmp r15, 16 LONG $0x245c8844; BYTE $0x08 // mov byte [rsp + 8], r11b LONG $0x2454894c; BYTE $0x48 // mov qword [rsp + 72], r10 QUAD $0x000001b024bc894c // mov qword [rsp + 432], r15 - JB LBB10_41 + JB LBB10_82 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi WORD $0x3949; BYTE $0xc6 // cmp r14, rax - JAE LBB10_191 + JAE LBB10_85 LONG $0xbe048d4b // lea rax, [r14 + 4*r15] WORD $0x3948; BYTE $0xc6 // cmp rsi, rax - JAE LBB10_191 + JAE LBB10_85 -LBB10_41: - WORD $0xc031 // xor eax, eax - QUAD $0x000000a024848948 // mov qword [rsp + 160], rax - LONG $0x2474894c; BYTE $0x70 // mov qword [rsp + 112], r14 +LBB10_82: + WORD $0xc031 // xor eax, eax + QUAD $0x000000f024848948 // mov qword [rsp + 240], rax + QUAD $0x0000009024b4894c // mov qword [rsp + 144], r14 -LBB10_42: - WORD $0x894d; BYTE $0xfe // mov r14, r15 - QUAD $0x000000a024b42b4c // sub r14, qword [rsp + 160] - QUAD $0x0000017024b4894c // mov qword [rsp + 368], r14 +LBB10_88: + QUAD $0x000000f024bc2b4c // sub r15, qword [rsp + 240] + QUAD $0x0000017024bc894c // mov qword [rsp + 368], r15 -LBB10_43: +LBB10_89: WORD $0x8948; BYTE $0xf1 // mov rcx, rsi WORD $0x3844; BYTE $0x1e // cmp byte [rsi], r11b QUAD $0x0000014024949d0f // setge byte [rsp + 320] @@ -47464,19 +48903,19 @@ LBB10_43: LONG $0xd49d0f41 // setge r12b LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x04 // cmp byte [rcx + 4], al - QUAD $0x0000015024949d0f // setge byte [rsp + 336] + QUAD $0x0000011024949d0f // setge byte [rsp + 272] LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x05 // cmp byte [rcx + 5], al - QUAD $0x0000009024949d0f // setge byte [rsp + 144] + LONG $0x24549d0f; BYTE $0x70 // setge byte [rsp + 112] LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x06 // cmp byte [rcx + 6], al - QUAD $0x000000a024949d0f // setge byte [rsp + 160] + QUAD $0x000000f024949d0f // setge byte [rsp + 240] LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x07 // cmp byte [rcx + 7], al LONG $0xd19d0f41 // setge r9b LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x08 // cmp byte [rcx + 8], al - QUAD $0x0000013024949d0f // setge byte [rsp + 304] + QUAD $0x0000015024949d0f // setge byte [rsp + 336] LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x09 // cmp byte [rcx + 9], al WORD $0x9d0f; BYTE $0xd2 // setge dl @@ -47494,31 +48933,31 @@ LBB10_43: LONG $0xd59d0f41 // setge r13b LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x0e // cmp byte [rcx + 14], al - QUAD $0x0000010024949d0f // setge byte [rsp + 256] + QUAD $0x0000012024949d0f // setge byte [rsp + 288] LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x0f // cmp byte [rcx + 15], al LONG $0xd09d0f41 // setge r8b LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x10 // cmp byte [rcx + 16], bl - QUAD $0x0000011024949d0f // setge byte [rsp + 272] + QUAD $0x0000013024949d0f // setge byte [rsp + 304] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x11 // cmp byte [rcx + 17], bl - QUAD $0x0000012024949d0f // setge byte [rsp + 288] + QUAD $0x0000010024949d0f // setge byte [rsp + 256] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x12 // cmp byte [rcx + 18], bl - QUAD $0x000000e024949d0f // setge byte [rsp + 224] + QUAD $0x000000d024949d0f // setge byte [rsp + 208] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x13 // cmp byte [rcx + 19], bl - QUAD $0x000000f024949d0f // setge byte [rsp + 240] + QUAD $0x000000e024949d0f // setge byte [rsp + 224] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x14 // cmp byte [rcx + 20], bl - QUAD $0x000000b024949d0f // setge byte [rsp + 176] + QUAD $0x000000a024949d0f // setge byte [rsp + 160] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x15 // cmp byte [rcx + 21], bl - QUAD $0x000000d024949d0f // setge byte [rsp + 208] + QUAD $0x000000c024949d0f // setge byte [rsp + 192] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x16 // cmp byte [rcx + 22], bl - QUAD $0x000000c024949d0f // setge byte [rsp + 192] + QUAD $0x000000b024949d0f // setge byte [rsp + 176] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x17 // cmp byte [rcx + 23], bl LONG $0xd39d0f41 // setge r11b @@ -47548,60 +48987,60 @@ LBB10_43: WORD $0x9d0f; BYTE $0xd3 // setge bl WORD $0x0040; BYTE $0xf6 // add sil, sil QUAD $0x0000014024b40240 // add sil, byte [rsp + 320] - QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] + QUAD $0x000000f02484b60f // movzx eax, byte [rsp + 240] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e1c041 // shl r9b, 7 WORD $0x0841; BYTE $0xc1 // or r9b, al LONG $0x02e7c041 // shl r15b, 2 WORD $0x0841; BYTE $0xf7 // or r15b, sil WORD $0xd200 // add dl, dl - LONG $0x30249402; WORD $0x0001; BYTE $0x00 // add dl, byte [rsp + 304] + LONG $0x50249402; WORD $0x0001; BYTE $0x00 // add dl, byte [rsp + 336] LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xfc // or r12b, r15b LONG $0x7cb60f44; WORD $0x0824 // movzx r15d, byte [rsp + 8] LONG $0x02e7c040 // shl dil, 2 WORD $0x0840; BYTE $0xd7 // or dil, dl - QUAD $0x000001502484b60f // movzx eax, byte [rsp + 336] + QUAD $0x000001102484b60f // movzx eax, byte [rsp + 272] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b LONG $0x03e2c041 // shl r10b, 3 WORD $0x0841; BYTE $0xfa // or r10b, dil - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] + LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0xc208 // or dl, al LONG $0x04e6c041 // shl r14b, 4 WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x05e5c041 // shl r13b, 5 WORD $0x0845; BYTE $0xf5 // or r13b, r14b - QUAD $0x0000010024b4b60f // movzx esi, byte [rsp + 256] + QUAD $0x0000012024b4b60f // movzx esi, byte [rsp + 288] LONG $0x06e6c040 // shl sil, 6 LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xf0 // or r8b, sil WORD $0x0841; BYTE $0xd1 // or r9b, dl WORD $0x0845; BYTE $0xe8 // or r8b, r13b - QUAD $0x000001202494b60f // movzx edx, byte [rsp + 288] + QUAD $0x000001002494b60f // movzx edx, byte [rsp + 256] WORD $0xd200 // add dl, dl - LONG $0x10249402; WORD $0x0001; BYTE $0x00 // add dl, byte [rsp + 272] + LONG $0x30249402; WORD $0x0001; BYTE $0x00 // add dl, byte [rsp + 304] WORD $0xd689 // mov esi, edx - QUAD $0x000000e02494b60f // movzx edx, byte [rsp + 224] + QUAD $0x000000d02494b60f // movzx edx, byte [rsp + 208] WORD $0xe2c0; BYTE $0x02 // shl dl, 2 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx - QUAD $0x000000f02494b60f // movzx edx, byte [rsp + 240] + QUAD $0x000000e02494b60f // movzx edx, byte [rsp + 224] WORD $0xe2c0; BYTE $0x03 // shl dl, 3 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx - QUAD $0x000000b02494b60f // movzx edx, byte [rsp + 176] + QUAD $0x000000a02494b60f // movzx edx, byte [rsp + 160] WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx - QUAD $0x000000d02494b60f // movzx edx, byte [rsp + 208] + QUAD $0x000000c02494b60f // movzx edx, byte [rsp + 192] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx - LONG $0x24548b48; BYTE $0x70 // mov rdx, qword [rsp + 112] + QUAD $0x0000009024948b48 // mov rdx, qword [rsp + 144] WORD $0x8844; BYTE $0x0a // mov byte [rdx], r9b - QUAD $0x000000c024bcb60f // movzx edi, byte [rsp + 192] + QUAD $0x000000b024bcb60f // movzx edi, byte [rsp + 176] LONG $0x06e7c040 // shl dil, 6 LONG $0x07e3c041 // shl r11b, 7 WORD $0x0841; BYTE $0xfb // or r11b, dil @@ -47636,18 +49075,18 @@ LBB10_43: WORD $0x5a88; BYTE $0x03 // mov byte [rdx + 3], bl LONG $0x20718d48 // lea rsi, [rcx + 32] LONG $0x04c28348 // add rdx, 4 - LONG $0x24548948; BYTE $0x70 // mov qword [rsp + 112], rdx + QUAD $0x0000009024948948 // mov qword [rsp + 144], rdx QUAD $0x0000017024848348; BYTE $0xff // add qword [rsp + 368], -1 - JNE LBB10_43 + JNE LBB10_89 LONG $0x24548b4c; BYTE $0x48 // mov r10, qword [rsp + 72] QUAD $0x000001b024bc8b4c // mov r15, qword [rsp + 432] - JMP LBB10_128 + JMP LBB10_91 -LBB10_45: +LBB10_27: WORD $0xff83; BYTE $0x07 // cmp edi, 7 - JE LBB10_70 + JE LBB10_139 WORD $0xff83; BYTE $0x08 // cmp edi, 8 - JNE LBB10_182 + JNE LBB10_201 WORD $0x8b4c; BYTE $0x2a // mov r13, qword [rdx] LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -47657,10 +49096,10 @@ LBB10_45: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_51 + JE LBB10_33 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB10_49: +LBB10_31: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 LONG $0x08768d48 // lea rsi, [rsi + 8] LONG $0x000000ba; BYTE $0x00 // mov edx, 0 @@ -47681,63 +49120,63 @@ LBB10_49: LONG $0x1e3c8841 // mov byte [r14 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_49 + JNE LBB10_31 LONG $0x01c68349 // add r14, 1 -LBB10_51: +LBB10_33: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB10_55 + JL LBB10_37 LONG $0x2454894c; BYTE $0x48 // mov qword [rsp + 72], r10 QUAD $0x00000170249c894c // mov qword [rsp + 368], r11 QUAD $0x00000140249c894c // mov qword [rsp + 320], r11 -LBB10_53: +LBB10_35: QUAD $0x0000016024b4894c // mov qword [rsp + 352], r14 WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 - QUAD $0x000000a02494930f // setae byte [rsp + 160] + QUAD $0x000000f02494930f // setae byte [rsp + 240] LONG $0x086e394c // cmp qword [rsi + 8], r13 - LONG $0xd7930f40 // setae dil + LONG $0xd2930f41 // setae r10b LONG $0x106e394c // cmp qword [rsi + 16], r13 LONG $0xd6930f41 // setae r14b LONG $0x186e394c // cmp qword [rsi + 24], r13 - QUAD $0x000001502494930f // setae byte [rsp + 336] + QUAD $0x000001102494930f // setae byte [rsp + 272] LONG $0x206e394c // cmp qword [rsi + 32], r13 - QUAD $0x000000e02494930f // setae byte [rsp + 224] - LONG $0x286e394c // cmp qword [rsi + 40], r13 QUAD $0x000000d02494930f // setae byte [rsp + 208] + LONG $0x286e394c // cmp qword [rsi + 40], r13 + QUAD $0x000000c02494930f // setae byte [rsp + 192] LONG $0x306e394c // cmp qword [rsi + 48], r13 WORD $0x930f; BYTE $0xd0 // setae al LONG $0x386e394c // cmp qword [rsi + 56], r13 WORD $0x930f; BYTE $0xd3 // setae bl LONG $0x406e394c // cmp qword [rsi + 64], r13 - QUAD $0x000001302494930f // setae byte [rsp + 304] + QUAD $0x000001502494930f // setae byte [rsp + 336] LONG $0x486e394c // cmp qword [rsi + 72], r13 - WORD $0x930f; BYTE $0xd2 // setae dl + LONG $0xd7930f40 // setae dil LONG $0x506e394c // cmp qword [rsi + 80], r13 - LONG $0xd1930f41 // setae r9b + LONG $0xd0930f41 // setae r8b LONG $0x586e394c // cmp qword [rsi + 88], r13 - LONG $0xd2930f41 // setae r10b + LONG $0xd1930f41 // setae r9b LONG $0x606e394c // cmp qword [rsi + 96], r13 LONG $0xd3930f41 // setae r11b LONG $0x686e394c // cmp qword [rsi + 104], r13 LONG $0xd4930f41 // setae r12b LONG $0x706e394c // cmp qword [rsi + 112], r13 - QUAD $0x000001002494930f // setae byte [rsp + 256] + QUAD $0x000001202494930f // setae byte [rsp + 288] LONG $0x786e394c // cmp qword [rsi + 120], r13 WORD $0x930f; BYTE $0xd1 // setae cl LONG $0x80ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 128], r13 - QUAD $0x000000b02494930f // setae byte [rsp + 176] + QUAD $0x000000a02494930f // setae byte [rsp + 160] LONG $0x88ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 136], r13 - QUAD $0x000001102494930f // setae byte [rsp + 272] + QUAD $0x000001302494930f // setae byte [rsp + 304] LONG $0x90ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 144], r13 - QUAD $0x000001202494930f // setae byte [rsp + 288] + QUAD $0x000001002494930f // setae byte [rsp + 256] LONG $0x98ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 152], r13 - QUAD $0x000000f02494930f // setae byte [rsp + 240] + QUAD $0x000000e02494930f // setae byte [rsp + 224] LONG $0xa0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 160], r13 - QUAD $0x000000c02494930f // setae byte [rsp + 192] + QUAD $0x000000b02494930f // setae byte [rsp + 176] LONG $0xa8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 168], r13 - QUAD $0x000000902494930f // setae byte [rsp + 144] + LONG $0x2454930f; BYTE $0x70 // setae byte [rsp + 112] LONG $0xb0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 176], r13 QUAD $0x000000802494930f // setae byte [rsp + 128] LONG $0xb8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 184], r13 @@ -47745,7 +49184,7 @@ LBB10_53: LONG $0xc0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 192], r13 LONG $0x2454930f; BYTE $0x30 // setae byte [rsp + 48] LONG $0xc8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 200], r13 - LONG $0x2454930f; BYTE $0x70 // setae byte [rsp + 112] + QUAD $0x000000902494930f // setae byte [rsp + 144] LONG $0xd0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 208], r13 LONG $0x2454930f; BYTE $0x60 // setae byte [rsp + 96] LONG $0xd8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 216], r13 @@ -47757,113 +49196,114 @@ LBB10_53: LONG $0xf0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 240], r13 LONG $0x2454930f; BYTE $0x08 // setae byte [rsp + 8] LONG $0xf8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 248], r13 - LONG $0xd0930f41 // setae r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x000000a024bc0240 // add dil, byte [rsp + 160] + WORD $0x930f; BYTE $0xd2 // setae dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000f024940244 // add r10b, byte [rsp + 240] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0x30249402; WORD $0x0001; BYTE $0x00 // add dl, byte [rsp + 304] - QUAD $0x000001502484b60f // movzx eax, byte [rsp + 336] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + QUAD $0x0000015024bc0240 // add dil, byte [rsp + 336] + QUAD $0x000001102484b60f // movzx eax, byte [rsp + 272] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000e02494b60f // movzx edx, byte [rsp + 224] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - QUAD $0x000000d02494b60f // movzx edx, byte [rsp + 208] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + QUAD $0x0000016024b48b4c // mov r14, qword [rsp + 352] + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + QUAD $0x000000c02484b60f // movzx eax, byte [rsp + 192] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b - QUAD $0x0000010024bcb60f // movzx edi, byte [rsp + 256] + QUAD $0x0000012024bcb60f // movzx edi, byte [rsp + 288] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x0000016024b48b4c // mov r14, qword [rsp + 352] - QUAD $0x000001102494b60f // movzx edx, byte [rsp + 272] - WORD $0xd200 // add dl, dl - LONG $0xb0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 176] - WORD $0xd789 // mov edi, edx - QUAD $0x000001202494b60f // movzx edx, byte [rsp + 288] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000f02494b60f // movzx edx, byte [rsp + 240] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000c02494b60f // movzx edx, byte [rsp + 192] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + QUAD $0x000001302484b60f // movzx eax, byte [rsp + 304] + WORD $0xc000 // add al, al + LONG $0xa0248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 160] + WORD $0xc789 // mov edi, eax + QUAD $0x000001002484b60f // movzx eax, byte [rsp + 256] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x000000e02484b60f // movzx eax, byte [rsp + 224] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil WORD $0x8841; BYTE $0x1e // mov byte [r14], bl QUAD $0x00000080249cb60f // movzx ebx, byte [rsp + 128] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl LONG $0x014e8841 // mov byte [r14 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] - WORD $0xc900 // add cl, cl - LONG $0x30244c02 // add cl, byte [rsp + 48] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0841; BYTE $0xc7 // or r15b, al + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xc000 // add al, al + LONG $0x30244402 // add al, byte [rsp + 48] + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xc808 // or al, cl + LONG $0x244cb60f; BYTE $0x08 // movzx ecx, byte [rsp + 8] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xca08 // or dl, cl + WORD $0xc208 // or dl, al LONG $0x027e8845 // mov byte [r14 + 2], r15b - LONG $0x03468845 // mov byte [r14 + 3], r8b + LONG $0x03568841 // mov byte [r14 + 3], dl LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 LONG $0x04c68349 // add r14, 4 QUAD $0x0000014024848348; BYTE $0xff // add qword [rsp + 320], -1 - JNE LBB10_53 + JNE LBB10_35 LONG $0x24548b4c; BYTE $0x48 // mov r10, qword [rsp + 72] QUAD $0x00000170249c8b4c // mov r11, qword [rsp + 368] -LBB10_55: +LBB10_37: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB10_182 + JGE LBB10_201 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 - JNE LBB10_143 + JNE LBB10_155 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB10_145 + JMP LBB10_40 -LBB10_58: +LBB10_56: WORD $0x8a44; BYTE $0x1a // mov r11b, byte [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -47873,10 +49313,10 @@ LBB10_58: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_62 + JE LBB10_60 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB10_60: +LBB10_58: WORD $0x3844; BYTE $0x1e // cmp byte [rsi], r11b LONG $0x01768d48 // lea rsi, [rsi + 1] LONG $0x000000ba; BYTE $0x00 // mov edx, 0 @@ -47897,38 +49337,37 @@ LBB10_60: LONG $0x3e1c8841 // mov byte [r14 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_60 + JNE LBB10_58 LONG $0x01c68349 // add r14, 1 -LBB10_62: +LBB10_60: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB10_131 + JL LBB10_61 LONG $0x10ff8349 // cmp r15, 16 LONG $0x245c8844; BYTE $0x08 // mov byte [rsp + 8], r11b LONG $0x2454894c; BYTE $0x48 // mov qword [rsp + 72], r10 QUAD $0x000001d024bc894c // mov qword [rsp + 464], r15 - JB LBB10_66 + JB LBB10_63 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi WORD $0x3949; BYTE $0xc6 // cmp r14, rax - JAE LBB10_194 + JAE LBB10_66 LONG $0xbe048d4b // lea rax, [r14 + 4*r15] WORD $0x3948; BYTE $0xc6 // cmp rsi, rax - JAE LBB10_194 + JAE LBB10_66 -LBB10_66: +LBB10_63: WORD $0xc031 // xor eax, eax QUAD $0x000001a024848948 // mov qword [rsp + 416], rax - QUAD $0x000000d024b4894c // mov qword [rsp + 208], r14 + QUAD $0x000000e024b4894c // mov qword [rsp + 224], r14 -LBB10_67: - WORD $0x894d; BYTE $0xfe // mov r14, r15 - QUAD $0x000001a024b42b4c // sub r14, qword [rsp + 416] - QUAD $0x0000017024b4894c // mov qword [rsp + 368], r14 +LBB10_69: + QUAD $0x000001a024bc2b4c // sub r15, qword [rsp + 416] + QUAD $0x0000017024bc894c // mov qword [rsp + 368], r15 -LBB10_68: +LBB10_70: WORD $0x8948; BYTE $0xf1 // mov rcx, rsi WORD $0x3844; BYTE $0x1e // cmp byte [rsi], r11b QUAD $0x000001402494930f // setae byte [rsp + 320] @@ -47941,19 +49380,19 @@ LBB10_68: LONG $0xd4930f41 // setae r12b LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x04 // cmp byte [rcx + 4], al - QUAD $0x000001502494930f // setae byte [rsp + 336] + QUAD $0x000001102494930f // setae byte [rsp + 272] LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x05 // cmp byte [rcx + 5], al QUAD $0x000000802494930f // setae byte [rsp + 128] LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x06 // cmp byte [rcx + 6], al - QUAD $0x000000a02494930f // setae byte [rsp + 160] + QUAD $0x000000f02494930f // setae byte [rsp + 240] LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x07 // cmp byte [rcx + 7], al LONG $0xd1930f41 // setae r9b LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x08 // cmp byte [rcx + 8], al - QUAD $0x000001302494930f // setae byte [rsp + 304] + QUAD $0x000001502494930f // setae byte [rsp + 336] LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x09 // cmp byte [rcx + 9], al WORD $0x930f; BYTE $0xd2 // setae dl @@ -47971,28 +49410,28 @@ LBB10_68: LONG $0xd5930f41 // setae r13b LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x0e // cmp byte [rcx + 14], al - QUAD $0x000001002494930f // setae byte [rsp + 256] + QUAD $0x000001202494930f // setae byte [rsp + 288] LONG $0x2444b60f; BYTE $0x08 // movzx eax, byte [rsp + 8] WORD $0x4138; BYTE $0x0f // cmp byte [rcx + 15], al LONG $0xd0930f41 // setae r8b LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x10 // cmp byte [rcx + 16], bl - QUAD $0x000001102494930f // setae byte [rsp + 272] + QUAD $0x000001302494930f // setae byte [rsp + 304] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x11 // cmp byte [rcx + 17], bl - QUAD $0x000001202494930f // setae byte [rsp + 288] + QUAD $0x000001002494930f // setae byte [rsp + 256] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x12 // cmp byte [rcx + 18], bl - QUAD $0x000000e02494930f // setae byte [rsp + 224] + QUAD $0x000000d02494930f // setae byte [rsp + 208] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x13 // cmp byte [rcx + 19], bl - QUAD $0x000000f02494930f // setae byte [rsp + 240] + QUAD $0x000000a02494930f // setae byte [rsp + 160] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x14 // cmp byte [rcx + 20], bl QUAD $0x000000b02494930f // setae byte [rsp + 176] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x15 // cmp byte [rcx + 21], bl - QUAD $0x000000902494930f // setae byte [rsp + 144] + LONG $0x2454930f; BYTE $0x70 // setae byte [rsp + 112] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x16 // cmp byte [rcx + 22], bl QUAD $0x000000c02494930f // setae byte [rsp + 192] @@ -48001,7 +49440,7 @@ LBB10_68: LONG $0xd3930f41 // setae r11b LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x18 // cmp byte [rcx + 24], bl - LONG $0x2454930f; BYTE $0x70 // setae byte [rsp + 112] + QUAD $0x000000902494930f // setae byte [rsp + 144] LONG $0x245cb60f; BYTE $0x08 // movzx ebx, byte [rsp + 8] WORD $0x5938; BYTE $0x19 // cmp byte [rcx + 25], bl LONG $0x2454930f; BYTE $0x60 // setae byte [rsp + 96] @@ -48025,20 +49464,20 @@ LBB10_68: WORD $0x930f; BYTE $0xd3 // setae bl WORD $0x0040; BYTE $0xf6 // add sil, sil QUAD $0x0000014024b40240 // add sil, byte [rsp + 320] - QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] + QUAD $0x000000f02484b60f // movzx eax, byte [rsp + 240] WORD $0xe0c0; BYTE $0x06 // shl al, 6 LONG $0x07e1c041 // shl r9b, 7 WORD $0x0841; BYTE $0xc1 // or r9b, al LONG $0x02e7c041 // shl r15b, 2 WORD $0x0841; BYTE $0xf7 // or r15b, sil WORD $0xd200 // add dl, dl - LONG $0x30249402; WORD $0x0001; BYTE $0x00 // add dl, byte [rsp + 304] + LONG $0x50249402; WORD $0x0001; BYTE $0x00 // add dl, byte [rsp + 336] LONG $0x03e4c041 // shl r12b, 3 WORD $0x0845; BYTE $0xfc // or r12b, r15b LONG $0x7cb60f44; WORD $0x0824 // movzx r15d, byte [rsp + 8] LONG $0x02e7c040 // shl dil, 2 WORD $0x0840; BYTE $0xd7 // or dil, dl - QUAD $0x000001502484b60f // movzx eax, byte [rsp + 336] + QUAD $0x000001102484b60f // movzx eax, byte [rsp + 272] WORD $0xe0c0; BYTE $0x04 // shl al, 4 WORD $0x0844; BYTE $0xe0 // or al, r12b LONG $0x03e2c041 // shl r10b, 3 @@ -48050,21 +49489,21 @@ LBB10_68: WORD $0x0845; BYTE $0xd6 // or r14b, r10b LONG $0x05e5c041 // shl r13b, 5 WORD $0x0845; BYTE $0xf5 // or r13b, r14b - QUAD $0x0000010024b4b60f // movzx esi, byte [rsp + 256] + QUAD $0x0000012024b4b60f // movzx esi, byte [rsp + 288] LONG $0x06e6c040 // shl sil, 6 LONG $0x07e0c041 // shl r8b, 7 WORD $0x0841; BYTE $0xf0 // or r8b, sil WORD $0x0841; BYTE $0xd1 // or r9b, dl WORD $0x0845; BYTE $0xe8 // or r8b, r13b - QUAD $0x000001202494b60f // movzx edx, byte [rsp + 288] + QUAD $0x000001002494b60f // movzx edx, byte [rsp + 256] WORD $0xd200 // add dl, dl - LONG $0x10249402; WORD $0x0001; BYTE $0x00 // add dl, byte [rsp + 272] + LONG $0x30249402; WORD $0x0001; BYTE $0x00 // add dl, byte [rsp + 304] WORD $0xd689 // mov esi, edx - QUAD $0x000000e02494b60f // movzx edx, byte [rsp + 224] + QUAD $0x000000d02494b60f // movzx edx, byte [rsp + 208] WORD $0xe2c0; BYTE $0x02 // shl dl, 2 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx - QUAD $0x000000f02494b60f // movzx edx, byte [rsp + 240] + QUAD $0x000000a02494b60f // movzx edx, byte [rsp + 160] WORD $0xe2c0; BYTE $0x03 // shl dl, 3 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx @@ -48072,11 +49511,11 @@ LBB10_68: WORD $0xe2c0; BYTE $0x04 // shl dl, 4 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] + LONG $0x2454b60f; BYTE $0x70 // movzx edx, byte [rsp + 112] WORD $0xe2c0; BYTE $0x05 // shl dl, 5 WORD $0x0840; BYTE $0xf2 // or dl, sil WORD $0xd689 // mov esi, edx - QUAD $0x000000d024948b48 // mov rdx, qword [rsp + 208] + QUAD $0x000000e024948b48 // mov rdx, qword [rsp + 224] WORD $0x8844; BYTE $0x0a // mov byte [rdx], r9b QUAD $0x000000c024bcb60f // movzx edi, byte [rsp + 192] LONG $0x06e7c040 // shl dil, 6 @@ -48086,7 +49525,7 @@ LBB10_68: WORD $0x0841; BYTE $0xf3 // or r11b, sil LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] WORD $0xc000 // add al, al - LONG $0x70244402 // add al, byte [rsp + 112] + LONG $0x90248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 144] WORD $0xc689 // mov esi, eax LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] WORD $0xe0c0; BYTE $0x02 // shl al, 2 @@ -48113,14 +49552,14 @@ LBB10_68: WORD $0x5a88; BYTE $0x03 // mov byte [rdx + 3], bl LONG $0x20718d48 // lea rsi, [rcx + 32] LONG $0x04c28348 // add rdx, 4 - QUAD $0x000000d024948948 // mov qword [rsp + 208], rdx + QUAD $0x000000e024948948 // mov qword [rsp + 224], rdx QUAD $0x0000017024848348; BYTE $0xff // add qword [rsp + 368], -1 - JNE LBB10_68 + JNE LBB10_70 LONG $0x24548b4c; BYTE $0x48 // mov r10, qword [rsp + 72] QUAD $0x000001d024bc8b4c // mov r15, qword [rsp + 464] - JMP LBB10_132 + JMP LBB10_72 -LBB10_70: +LBB10_139: WORD $0x8b44; BYTE $0x2a // mov r13d, dword [rdx] LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -48130,10 +49569,10 @@ LBB10_70: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_74 + JE LBB10_143 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB10_72: +LBB10_141: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d LONG $0x04768d48 // lea rsi, [rsi + 4] WORD $0x9d0f; BYTE $0xd2 // setge dl @@ -48154,63 +49593,63 @@ LBB10_72: LONG $0x1e3c8841 // mov byte [r14 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_72 + JNE LBB10_141 LONG $0x01c68349 // add r14, 1 -LBB10_74: +LBB10_143: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB10_78 + JL LBB10_147 LONG $0x2454894c; BYTE $0x48 // mov qword [rsp + 72], r10 QUAD $0x00000170249c894c // mov qword [rsp + 368], r11 QUAD $0x00000140249c894c // mov qword [rsp + 320], r11 -LBB10_76: +LBB10_145: QUAD $0x0000016024b4894c // mov qword [rsp + 352], r14 WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d - QUAD $0x000000a024949d0f // setge byte [rsp + 160] + QUAD $0x000000f024949d0f // setge byte [rsp + 240] LONG $0x046e3944 // cmp dword [rsi + 4], r13d - LONG $0xd79d0f40 // setge dil + LONG $0xd29d0f41 // setge r10b LONG $0x086e3944 // cmp dword [rsi + 8], r13d LONG $0xd69d0f41 // setge r14b LONG $0x0c6e3944 // cmp dword [rsi + 12], r13d - QUAD $0x0000015024949d0f // setge byte [rsp + 336] + QUAD $0x0000011024949d0f // setge byte [rsp + 272] LONG $0x106e3944 // cmp dword [rsi + 16], r13d - QUAD $0x000000e024949d0f // setge byte [rsp + 224] - LONG $0x146e3944 // cmp dword [rsi + 20], r13d QUAD $0x000000d024949d0f // setge byte [rsp + 208] + LONG $0x146e3944 // cmp dword [rsi + 20], r13d + QUAD $0x000000c024949d0f // setge byte [rsp + 192] LONG $0x186e3944 // cmp dword [rsi + 24], r13d WORD $0x9d0f; BYTE $0xd0 // setge al LONG $0x1c6e3944 // cmp dword [rsi + 28], r13d WORD $0x9d0f; BYTE $0xd3 // setge bl LONG $0x206e3944 // cmp dword [rsi + 32], r13d - QUAD $0x0000013024949d0f // setge byte [rsp + 304] + QUAD $0x0000015024949d0f // setge byte [rsp + 336] LONG $0x246e3944 // cmp dword [rsi + 36], r13d - WORD $0x9d0f; BYTE $0xd2 // setge dl + LONG $0xd79d0f40 // setge dil LONG $0x286e3944 // cmp dword [rsi + 40], r13d - LONG $0xd19d0f41 // setge r9b + LONG $0xd09d0f41 // setge r8b LONG $0x2c6e3944 // cmp dword [rsi + 44], r13d - LONG $0xd29d0f41 // setge r10b + LONG $0xd19d0f41 // setge r9b LONG $0x306e3944 // cmp dword [rsi + 48], r13d LONG $0xd39d0f41 // setge r11b LONG $0x346e3944 // cmp dword [rsi + 52], r13d LONG $0xd49d0f41 // setge r12b LONG $0x386e3944 // cmp dword [rsi + 56], r13d - QUAD $0x0000010024949d0f // setge byte [rsp + 256] + QUAD $0x0000012024949d0f // setge byte [rsp + 288] LONG $0x3c6e3944 // cmp dword [rsi + 60], r13d WORD $0x9d0f; BYTE $0xd1 // setge cl LONG $0x406e3944 // cmp dword [rsi + 64], r13d - QUAD $0x000000b024949d0f // setge byte [rsp + 176] + QUAD $0x000000a024949d0f // setge byte [rsp + 160] LONG $0x446e3944 // cmp dword [rsi + 68], r13d - QUAD $0x0000011024949d0f // setge byte [rsp + 272] + QUAD $0x0000013024949d0f // setge byte [rsp + 304] LONG $0x486e3944 // cmp dword [rsi + 72], r13d - QUAD $0x0000012024949d0f // setge byte [rsp + 288] + QUAD $0x0000010024949d0f // setge byte [rsp + 256] LONG $0x4c6e3944 // cmp dword [rsi + 76], r13d - QUAD $0x000000f024949d0f // setge byte [rsp + 240] + QUAD $0x000000e024949d0f // setge byte [rsp + 224] LONG $0x506e3944 // cmp dword [rsi + 80], r13d - QUAD $0x000000c024949d0f // setge byte [rsp + 192] + QUAD $0x000000b024949d0f // setge byte [rsp + 176] LONG $0x546e3944 // cmp dword [rsi + 84], r13d - QUAD $0x0000009024949d0f // setge byte [rsp + 144] + LONG $0x24549d0f; BYTE $0x70 // setge byte [rsp + 112] LONG $0x586e3944 // cmp dword [rsi + 88], r13d QUAD $0x0000008024949d0f // setge byte [rsp + 128] LONG $0x5c6e3944 // cmp dword [rsi + 92], r13d @@ -48218,7 +49657,7 @@ LBB10_76: LONG $0x606e3944 // cmp dword [rsi + 96], r13d LONG $0x24549d0f; BYTE $0x30 // setge byte [rsp + 48] LONG $0x646e3944 // cmp dword [rsi + 100], r13d - LONG $0x24549d0f; BYTE $0x70 // setge byte [rsp + 112] + QUAD $0x0000009024949d0f // setge byte [rsp + 144] LONG $0x686e3944 // cmp dword [rsi + 104], r13d LONG $0x24549d0f; BYTE $0x60 // setge byte [rsp + 96] LONG $0x6c6e3944 // cmp dword [rsi + 108], r13d @@ -48230,113 +49669,114 @@ LBB10_76: LONG $0x786e3944 // cmp dword [rsi + 120], r13d LONG $0x24549d0f; BYTE $0x08 // setge byte [rsp + 8] LONG $0x7c6e3944 // cmp dword [rsi + 124], r13d - LONG $0xd09d0f41 // setge r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x000000a024bc0240 // add dil, byte [rsp + 160] + WORD $0x9d0f; BYTE $0xd2 // setge dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000f024940244 // add r10b, byte [rsp + 240] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0x30249402; WORD $0x0001; BYTE $0x00 // add dl, byte [rsp + 304] - QUAD $0x000001502484b60f // movzx eax, byte [rsp + 336] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + QUAD $0x0000015024bc0240 // add dil, byte [rsp + 336] + QUAD $0x000001102484b60f // movzx eax, byte [rsp + 272] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000e02494b60f // movzx edx, byte [rsp + 224] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - QUAD $0x000000d02494b60f // movzx edx, byte [rsp + 208] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + QUAD $0x0000016024b48b4c // mov r14, qword [rsp + 352] + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + QUAD $0x000000c02484b60f // movzx eax, byte [rsp + 192] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b - QUAD $0x0000010024bcb60f // movzx edi, byte [rsp + 256] + QUAD $0x0000012024bcb60f // movzx edi, byte [rsp + 288] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x0000016024b48b4c // mov r14, qword [rsp + 352] - QUAD $0x000001102494b60f // movzx edx, byte [rsp + 272] - WORD $0xd200 // add dl, dl - LONG $0xb0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 176] - WORD $0xd789 // mov edi, edx - QUAD $0x000001202494b60f // movzx edx, byte [rsp + 288] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000f02494b60f // movzx edx, byte [rsp + 240] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000c02494b60f // movzx edx, byte [rsp + 192] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + QUAD $0x000001302484b60f // movzx eax, byte [rsp + 304] + WORD $0xc000 // add al, al + LONG $0xa0248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 160] + WORD $0xc789 // mov edi, eax + QUAD $0x000001002484b60f // movzx eax, byte [rsp + 256] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x000000e02484b60f // movzx eax, byte [rsp + 224] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil WORD $0x8841; BYTE $0x1e // mov byte [r14], bl QUAD $0x00000080249cb60f // movzx ebx, byte [rsp + 128] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl LONG $0x014e8841 // mov byte [r14 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] - WORD $0xc900 // add cl, cl - LONG $0x30244c02 // add cl, byte [rsp + 48] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0841; BYTE $0xc7 // or r15b, al + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xc000 // add al, al + LONG $0x30244402 // add al, byte [rsp + 48] + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xc808 // or al, cl + LONG $0x244cb60f; BYTE $0x08 // movzx ecx, byte [rsp + 8] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xca08 // or dl, cl + WORD $0xc208 // or dl, al LONG $0x027e8845 // mov byte [r14 + 2], r15b - LONG $0x03468845 // mov byte [r14 + 3], r8b + LONG $0x03568841 // mov byte [r14 + 3], dl LONG $0x80c68148; WORD $0x0000; BYTE $0x00 // add rsi, 128 LONG $0x04c68349 // add r14, 4 QUAD $0x0000014024848348; BYTE $0xff // add qword [rsp + 320], -1 - JNE LBB10_76 + JNE LBB10_145 LONG $0x24548b4c; BYTE $0x48 // mov r10, qword [rsp + 72] QUAD $0x00000170249c8b4c // mov r11, qword [rsp + 368] -LBB10_78: +LBB10_147: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB10_182 + JGE LBB10_201 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 - JNE LBB10_147 + JNE LBB10_153 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB10_149 + JMP LBB10_150 -LBB10_81: +LBB10_99: LONG $0x2ab70f44 // movzx r13d, word [rdx] LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -48346,10 +49786,10 @@ LBB10_81: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_85 + JE LBB10_103 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB10_83: +LBB10_101: LONG $0x2e394466 // cmp word [rsi], r13w LONG $0x02768d48 // lea rsi, [rsi + 2] LONG $0x000000ba; BYTE $0x00 // mov edx, 0 @@ -48370,63 +49810,63 @@ LBB10_83: LONG $0x1e3c8841 // mov byte [r14 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_83 + JNE LBB10_101 LONG $0x01c68349 // add r14, 1 -LBB10_85: +LBB10_103: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB10_89 + JL LBB10_107 LONG $0x2454894c; BYTE $0x48 // mov qword [rsp + 72], r10 QUAD $0x00000170249c894c // mov qword [rsp + 368], r11 QUAD $0x00000140249c894c // mov qword [rsp + 320], r11 -LBB10_87: +LBB10_105: QUAD $0x0000016024b4894c // mov qword [rsp + 352], r14 LONG $0x2e394466 // cmp word [rsi], r13w - QUAD $0x000000a02494930f // setae byte [rsp + 160] + QUAD $0x000000f02494930f // setae byte [rsp + 240] LONG $0x6e394466; BYTE $0x02 // cmp word [rsi + 2], r13w - LONG $0xd7930f40 // setae dil + LONG $0xd2930f41 // setae r10b LONG $0x6e394466; BYTE $0x04 // cmp word [rsi + 4], r13w LONG $0xd6930f41 // setae r14b LONG $0x6e394466; BYTE $0x06 // cmp word [rsi + 6], r13w - QUAD $0x000001502494930f // setae byte [rsp + 336] + QUAD $0x000001102494930f // setae byte [rsp + 272] LONG $0x6e394466; BYTE $0x08 // cmp word [rsi + 8], r13w - QUAD $0x000000e02494930f // setae byte [rsp + 224] - LONG $0x6e394466; BYTE $0x0a // cmp word [rsi + 10], r13w QUAD $0x000000d02494930f // setae byte [rsp + 208] + LONG $0x6e394466; BYTE $0x0a // cmp word [rsi + 10], r13w + QUAD $0x000000c02494930f // setae byte [rsp + 192] LONG $0x6e394466; BYTE $0x0c // cmp word [rsi + 12], r13w WORD $0x930f; BYTE $0xd0 // setae al LONG $0x6e394466; BYTE $0x0e // cmp word [rsi + 14], r13w WORD $0x930f; BYTE $0xd3 // setae bl LONG $0x6e394466; BYTE $0x10 // cmp word [rsi + 16], r13w - QUAD $0x000001302494930f // setae byte [rsp + 304] + QUAD $0x000001502494930f // setae byte [rsp + 336] LONG $0x6e394466; BYTE $0x12 // cmp word [rsi + 18], r13w - WORD $0x930f; BYTE $0xd2 // setae dl + LONG $0xd7930f40 // setae dil LONG $0x6e394466; BYTE $0x14 // cmp word [rsi + 20], r13w - LONG $0xd1930f41 // setae r9b + LONG $0xd0930f41 // setae r8b LONG $0x6e394466; BYTE $0x16 // cmp word [rsi + 22], r13w - LONG $0xd2930f41 // setae r10b + LONG $0xd1930f41 // setae r9b LONG $0x6e394466; BYTE $0x18 // cmp word [rsi + 24], r13w LONG $0xd3930f41 // setae r11b LONG $0x6e394466; BYTE $0x1a // cmp word [rsi + 26], r13w LONG $0xd4930f41 // setae r12b LONG $0x6e394466; BYTE $0x1c // cmp word [rsi + 28], r13w - QUAD $0x000001002494930f // setae byte [rsp + 256] + QUAD $0x000001202494930f // setae byte [rsp + 288] LONG $0x6e394466; BYTE $0x1e // cmp word [rsi + 30], r13w WORD $0x930f; BYTE $0xd1 // setae cl LONG $0x6e394466; BYTE $0x20 // cmp word [rsi + 32], r13w - QUAD $0x000000b02494930f // setae byte [rsp + 176] + QUAD $0x000000a02494930f // setae byte [rsp + 160] LONG $0x6e394466; BYTE $0x22 // cmp word [rsi + 34], r13w - QUAD $0x000001102494930f // setae byte [rsp + 272] + QUAD $0x000001302494930f // setae byte [rsp + 304] LONG $0x6e394466; BYTE $0x24 // cmp word [rsi + 36], r13w - QUAD $0x000001202494930f // setae byte [rsp + 288] + QUAD $0x000001002494930f // setae byte [rsp + 256] LONG $0x6e394466; BYTE $0x26 // cmp word [rsi + 38], r13w - QUAD $0x000000f02494930f // setae byte [rsp + 240] + QUAD $0x000000e02494930f // setae byte [rsp + 224] LONG $0x6e394466; BYTE $0x28 // cmp word [rsi + 40], r13w - QUAD $0x000000c02494930f // setae byte [rsp + 192] + QUAD $0x000000b02494930f // setae byte [rsp + 176] LONG $0x6e394466; BYTE $0x2a // cmp word [rsi + 42], r13w - QUAD $0x000000902494930f // setae byte [rsp + 144] + LONG $0x2454930f; BYTE $0x70 // setae byte [rsp + 112] LONG $0x6e394466; BYTE $0x2c // cmp word [rsi + 44], r13w QUAD $0x000000802494930f // setae byte [rsp + 128] LONG $0x6e394466; BYTE $0x2e // cmp word [rsi + 46], r13w @@ -48434,7 +49874,7 @@ LBB10_87: LONG $0x6e394466; BYTE $0x30 // cmp word [rsi + 48], r13w LONG $0x2454930f; BYTE $0x30 // setae byte [rsp + 48] LONG $0x6e394466; BYTE $0x32 // cmp word [rsi + 50], r13w - LONG $0x2454930f; BYTE $0x70 // setae byte [rsp + 112] + QUAD $0x000000902494930f // setae byte [rsp + 144] LONG $0x6e394466; BYTE $0x34 // cmp word [rsi + 52], r13w LONG $0x2454930f; BYTE $0x60 // setae byte [rsp + 96] LONG $0x6e394466; BYTE $0x36 // cmp word [rsi + 54], r13w @@ -48446,113 +49886,114 @@ LBB10_87: LONG $0x6e394466; BYTE $0x3c // cmp word [rsi + 60], r13w LONG $0x2454930f; BYTE $0x08 // setae byte [rsp + 8] LONG $0x6e394466; BYTE $0x3e // cmp word [rsi + 62], r13w - LONG $0xd0930f41 // setae r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x000000a024bc0240 // add dil, byte [rsp + 160] + WORD $0x930f; BYTE $0xd2 // setae dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000f024940244 // add r10b, byte [rsp + 240] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0x30249402; WORD $0x0001; BYTE $0x00 // add dl, byte [rsp + 304] - QUAD $0x000001502484b60f // movzx eax, byte [rsp + 336] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + QUAD $0x0000015024bc0240 // add dil, byte [rsp + 336] + QUAD $0x000001102484b60f // movzx eax, byte [rsp + 272] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000e02494b60f // movzx edx, byte [rsp + 224] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - QUAD $0x000000d02494b60f // movzx edx, byte [rsp + 208] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + QUAD $0x0000016024b48b4c // mov r14, qword [rsp + 352] + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + QUAD $0x000000c02484b60f // movzx eax, byte [rsp + 192] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b - QUAD $0x0000010024bcb60f // movzx edi, byte [rsp + 256] + QUAD $0x0000012024bcb60f // movzx edi, byte [rsp + 288] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x0000016024b48b4c // mov r14, qword [rsp + 352] - QUAD $0x000001102494b60f // movzx edx, byte [rsp + 272] - WORD $0xd200 // add dl, dl - LONG $0xb0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 176] - WORD $0xd789 // mov edi, edx - QUAD $0x000001202494b60f // movzx edx, byte [rsp + 288] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000f02494b60f // movzx edx, byte [rsp + 240] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000c02494b60f // movzx edx, byte [rsp + 192] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + QUAD $0x000001302484b60f // movzx eax, byte [rsp + 304] + WORD $0xc000 // add al, al + LONG $0xa0248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 160] + WORD $0xc789 // mov edi, eax + QUAD $0x000001002484b60f // movzx eax, byte [rsp + 256] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x000000e02484b60f // movzx eax, byte [rsp + 224] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil WORD $0x8841; BYTE $0x1e // mov byte [r14], bl QUAD $0x00000080249cb60f // movzx ebx, byte [rsp + 128] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl LONG $0x014e8841 // mov byte [r14 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] - WORD $0xc900 // add cl, cl - LONG $0x30244c02 // add cl, byte [rsp + 48] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0841; BYTE $0xc7 // or r15b, al + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xc000 // add al, al + LONG $0x30244402 // add al, byte [rsp + 48] + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xc808 // or al, cl + LONG $0x244cb60f; BYTE $0x08 // movzx ecx, byte [rsp + 8] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xca08 // or dl, cl + WORD $0xc208 // or dl, al LONG $0x027e8845 // mov byte [r14 + 2], r15b - LONG $0x03468845 // mov byte [r14 + 3], r8b + LONG $0x03568841 // mov byte [r14 + 3], dl LONG $0x40c68348 // add rsi, 64 LONG $0x04c68349 // add r14, 4 QUAD $0x0000014024848348; BYTE $0xff // add qword [rsp + 320], -1 - JNE LBB10_87 + JNE LBB10_105 LONG $0x24548b4c; BYTE $0x48 // mov r10, qword [rsp + 72] QUAD $0x00000170249c8b4c // mov r11, qword [rsp + 368] -LBB10_89: +LBB10_107: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB10_182 + JGE LBB10_201 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 - JNE LBB10_170 + JNE LBB10_112 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB10_172 + JMP LBB10_110 -LBB10_92: +LBB10_114: LONG $0x1ab70f44 // movzx r11d, word [rdx] LONG $0x1f7a8d4d // lea r15, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -48562,10 +50003,10 @@ LBB10_92: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_96 + JE LBB10_118 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB10_94: +LBB10_116: LONG $0x1e394466 // cmp word [rsi], r11w LONG $0x02768d48 // lea rsi, [rsi + 2] WORD $0x9d0f; BYTE $0xd2 // setge dl @@ -48586,59 +50027,58 @@ LBB10_94: LONG $0x3e1c8841 // mov byte [r14 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_94 + JNE LBB10_116 LONG $0x01c68349 // add r14, 1 -LBB10_96: +LBB10_118: LONG $0x05ffc149 // sar r15, 5 LONG $0x20fa8349 // cmp r10, 32 QUAD $0x00000188249c8944 // mov dword [rsp + 392], r11d - JL LBB10_135 + JL LBB10_119 LONG $0x08ff8349 // cmp r15, 8 LONG $0x2454894c; BYTE $0x48 // mov qword [rsp + 72], r10 QUAD $0x000001c824bc894c // mov qword [rsp + 456], r15 - JB LBB10_100 + JB LBB10_121 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x06e0c148 // shl rax, 6 WORD $0x0148; BYTE $0xf0 // add rax, rsi WORD $0x3949; BYTE $0xc6 // cmp r14, rax - JAE LBB10_197 + JAE LBB10_124 LONG $0xbe048d4b // lea rax, [r14 + 4*r15] WORD $0x3948; BYTE $0xf0 // cmp rax, rsi - JBE LBB10_197 + JBE LBB10_124 -LBB10_100: +LBB10_121: WORD $0xc031 // xor eax, eax QUAD $0x0000019024848948 // mov qword [rsp + 400], rax WORD $0x8949; BYTE $0xf3 // mov r11, rsi WORD $0x894d; BYTE $0xf4 // mov r12, r14 -LBB10_101: +LBB10_127: LONG $0x2464894c; BYTE $0x08 // mov qword [rsp + 8], r12 - WORD $0x894d; BYTE $0xfe // mov r14, r15 - QUAD $0x0000019024b42b4c // sub r14, qword [rsp + 400] - QUAD $0x0000014024b4894c // mov qword [rsp + 320], r14 + QUAD $0x0000019024bc2b4c // sub r15, qword [rsp + 400] + QUAD $0x0000014024bc894c // mov qword [rsp + 320], r15 QUAD $0x0000018824ac8b44 // mov r13d, dword [rsp + 392] -LBB10_102: +LBB10_128: LONG $0x2b394566 // cmp word [r11], r13w - QUAD $0x000000a024949d0f // setge byte [rsp + 160] + QUAD $0x000000f024949d0f // setge byte [rsp + 240] LONG $0x6b394566; BYTE $0x02 // cmp word [r11 + 2], r13w LONG $0xd09d0f41 // setge r8b LONG $0x6b394566; BYTE $0x04 // cmp word [r11 + 4], r13w LONG $0xd69d0f41 // setge r14b LONG $0x6b394566; BYTE $0x06 // cmp word [r11 + 6], r13w - QUAD $0x0000015024949d0f // setge byte [rsp + 336] + QUAD $0x0000011024949d0f // setge byte [rsp + 272] LONG $0x6b394566; BYTE $0x08 // cmp word [r11 + 8], r13w - QUAD $0x000000e024949d0f // setge byte [rsp + 224] - LONG $0x6b394566; BYTE $0x0a // cmp word [r11 + 10], r13w QUAD $0x000000d024949d0f // setge byte [rsp + 208] + LONG $0x6b394566; BYTE $0x0a // cmp word [r11 + 10], r13w + QUAD $0x000000c024949d0f // setge byte [rsp + 192] LONG $0x6b394566; BYTE $0x0c // cmp word [r11 + 12], r13w WORD $0x9d0f; BYTE $0xd0 // setge al LONG $0x6b394566; BYTE $0x0e // cmp word [r11 + 14], r13w WORD $0x9d0f; BYTE $0xd3 // setge bl LONG $0x6b394566; BYTE $0x10 // cmp word [r11 + 16], r13w - QUAD $0x0000013024949d0f // setge byte [rsp + 304] + QUAD $0x0000015024949d0f // setge byte [rsp + 336] LONG $0x6b394566; BYTE $0x12 // cmp word [r11 + 18], r13w WORD $0x9d0f; BYTE $0xd1 // setge cl LONG $0x6b394566; BYTE $0x14 // cmp word [r11 + 20], r13w @@ -48650,21 +50090,21 @@ LBB10_102: LONG $0x6b394566; BYTE $0x1a // cmp word [r11 + 26], r13w LONG $0xd49d0f41 // setge r12b LONG $0x6b394566; BYTE $0x1c // cmp word [r11 + 28], r13w - QUAD $0x0000010024949d0f // setge byte [rsp + 256] + QUAD $0x0000012024949d0f // setge byte [rsp + 288] LONG $0x6b394566; BYTE $0x1e // cmp word [r11 + 30], r13w LONG $0xd79d0f40 // setge dil LONG $0x6b394566; BYTE $0x20 // cmp word [r11 + 32], r13w - QUAD $0x000000b024949d0f // setge byte [rsp + 176] + QUAD $0x000000a024949d0f // setge byte [rsp + 160] LONG $0x6b394566; BYTE $0x22 // cmp word [r11 + 34], r13w - QUAD $0x0000011024949d0f // setge byte [rsp + 272] + QUAD $0x0000013024949d0f // setge byte [rsp + 304] LONG $0x6b394566; BYTE $0x24 // cmp word [r11 + 36], r13w - QUAD $0x0000012024949d0f // setge byte [rsp + 288] + QUAD $0x0000010024949d0f // setge byte [rsp + 256] LONG $0x6b394566; BYTE $0x26 // cmp word [r11 + 38], r13w - QUAD $0x000000f024949d0f // setge byte [rsp + 240] + QUAD $0x000000e024949d0f // setge byte [rsp + 224] LONG $0x6b394566; BYTE $0x28 // cmp word [r11 + 40], r13w - QUAD $0x000000c024949d0f // setge byte [rsp + 192] + QUAD $0x000000b024949d0f // setge byte [rsp + 176] LONG $0x6b394566; BYTE $0x2a // cmp word [r11 + 42], r13w - QUAD $0x0000009024949d0f // setge byte [rsp + 144] + LONG $0x24549d0f; BYTE $0x70 // setge byte [rsp + 112] LONG $0x6b394566; BYTE $0x2c // cmp word [r11 + 44], r13w QUAD $0x0000008024949d0f // setge byte [rsp + 128] LONG $0x6b394566; BYTE $0x2e // cmp word [r11 + 46], r13w @@ -48672,7 +50112,7 @@ LBB10_102: LONG $0x6b394566; BYTE $0x30 // cmp word [r11 + 48], r13w LONG $0x24549d0f; BYTE $0x30 // setge byte [rsp + 48] LONG $0x6b394566; BYTE $0x32 // cmp word [r11 + 50], r13w - LONG $0x24549d0f; BYTE $0x70 // setge byte [rsp + 112] + QUAD $0x0000009024949d0f // setge byte [rsp + 144] LONG $0x6b394566; BYTE $0x34 // cmp word [r11 + 52], r13w LONG $0x24549d0f; BYTE $0x60 // setge byte [rsp + 96] LONG $0x6b394566; BYTE $0x36 // cmp word [r11 + 54], r13w @@ -48686,55 +50126,55 @@ LBB10_102: LONG $0x6b394566; BYTE $0x3e // cmp word [r11 + 62], r13w WORD $0x9d0f; BYTE $0xd2 // setge dl WORD $0x0045; BYTE $0xc0 // add r8b, r8b - QUAD $0x000000a024840244 // add r8b, byte [rsp + 160] + QUAD $0x000000f024840244 // add r8b, byte [rsp + 240] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 WORD $0x0845; BYTE $0xc6 // or r14b, r8b WORD $0xc900 // add cl, cl - LONG $0x30248c02; WORD $0x0001; BYTE $0x00 // add cl, byte [rsp + 304] - QUAD $0x000001502484b60f // movzx eax, byte [rsp + 336] + LONG $0x50248c02; WORD $0x0001; BYTE $0x00 // add cl, byte [rsp + 336] + QUAD $0x000001102484b60f // movzx eax, byte [rsp + 272] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b LONG $0x02e6c040 // shl sil, 2 WORD $0x0840; BYTE $0xce // or sil, cl - QUAD $0x000000e0248cb60f // movzx ecx, byte [rsp + 224] + QUAD $0x000000d0248cb60f // movzx ecx, byte [rsp + 208] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 WORD $0xc108 // or cl, al WORD $0x8941; BYTE $0xc8 // mov r8d, ecx LONG $0x03e1c041 // shl r9b, 3 WORD $0x0841; BYTE $0xf1 // or r9b, sil - QUAD $0x000000d0248cb60f // movzx ecx, byte [rsp + 208] + QUAD $0x000000c0248cb60f // movzx ecx, byte [rsp + 192] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0x0844; BYTE $0xc1 // or cl, r8b LONG $0x04e2c041 // shl r10b, 4 WORD $0x0845; BYTE $0xca // or r10b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xd4 // or r12b, r10b - QUAD $0x0000010024b4b60f // movzx esi, byte [rsp + 256] + QUAD $0x0000012024b4b60f // movzx esi, byte [rsp + 288] LONG $0x06e6c040 // shl sil, 6 LONG $0x07e7c040 // shl dil, 7 WORD $0x0840; BYTE $0xf7 // or dil, sil WORD $0xcb08 // or bl, cl WORD $0x0844; BYTE $0xe7 // or dil, r12b - QUAD $0x00000110248cb60f // movzx ecx, byte [rsp + 272] + QUAD $0x00000130248cb60f // movzx ecx, byte [rsp + 304] WORD $0xc900 // add cl, cl - LONG $0xb0248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 176] + LONG $0xa0248c02; WORD $0x0000; BYTE $0x00 // add cl, byte [rsp + 160] WORD $0xce89 // mov esi, ecx - QUAD $0x00000120248cb60f // movzx ecx, byte [rsp + 288] + QUAD $0x00000100248cb60f // movzx ecx, byte [rsp + 256] WORD $0xe1c0; BYTE $0x02 // shl cl, 2 WORD $0x0840; BYTE $0xf1 // or cl, sil WORD $0xce89 // mov esi, ecx - QUAD $0x000000f0248cb60f // movzx ecx, byte [rsp + 240] + QUAD $0x000000e0248cb60f // movzx ecx, byte [rsp + 224] WORD $0xe1c0; BYTE $0x03 // shl cl, 3 WORD $0x0840; BYTE $0xf1 // or cl, sil WORD $0xce89 // mov esi, ecx - QUAD $0x000000c0248cb60f // movzx ecx, byte [rsp + 192] + QUAD $0x000000b0248cb60f // movzx ecx, byte [rsp + 176] WORD $0xe1c0; BYTE $0x04 // shl cl, 4 WORD $0x0840; BYTE $0xf1 // or cl, sil WORD $0xce89 // mov esi, ecx - QUAD $0x00000090248cb60f // movzx ecx, byte [rsp + 144] + LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] WORD $0xe1c0; BYTE $0x05 // shl cl, 5 WORD $0x0840; BYTE $0xf1 // or cl, sil WORD $0xce89 // mov esi, ecx @@ -48746,7 +50186,7 @@ LBB10_102: WORD $0x0841; BYTE $0xdf // or r15b, bl LONG $0x01798840 // mov byte [rcx + 1], dil WORD $0x0841; BYTE $0xf7 // or r15b, sil - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] WORD $0xc000 // add al, al LONG $0x30244402 // add al, byte [rsp + 48] WORD $0xc389 // mov ebx, eax @@ -48776,13 +50216,13 @@ LBB10_102: LONG $0x04c18348 // add rcx, 4 LONG $0x244c8948; BYTE $0x08 // mov qword [rsp + 8], rcx QUAD $0x0000014024848348; BYTE $0xff // add qword [rsp + 320], -1 - JNE LBB10_102 + JNE LBB10_128 LONG $0x24548b4c; BYTE $0x48 // mov r10, qword [rsp + 72] QUAD $0x000001c824bc8b4c // mov r15, qword [rsp + 456] LONG $0x24648b4c; BYTE $0x08 // mov r12, qword [rsp + 8] - JMP LBB10_136 + JMP LBB10_130 -LBB10_104: +LBB10_157: WORD $0x8b4c; BYTE $0x2a // mov r13, qword [rdx] LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 @@ -48792,10 +50232,10 @@ LBB10_104: LONG $0xc1490f41 // cmovns eax, r9d WORD $0xe083; BYTE $0xf8 // and eax, -8 WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_108 + JE LBB10_161 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB10_106: +LBB10_159: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 LONG $0x08768d48 // lea rsi, [rsi + 8] WORD $0x9d0f; BYTE $0xd2 // setge dl @@ -48816,63 +50256,63 @@ LBB10_106: LONG $0x1e3c8841 // mov byte [r14 + rbx], dil LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_106 + JNE LBB10_159 LONG $0x01c68349 // add r14, 1 -LBB10_108: +LBB10_161: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB10_112 + JL LBB10_165 LONG $0x2454894c; BYTE $0x48 // mov qword [rsp + 72], r10 QUAD $0x00000170249c894c // mov qword [rsp + 368], r11 QUAD $0x00000140249c894c // mov qword [rsp + 320], r11 -LBB10_110: +LBB10_163: QUAD $0x0000016024b4894c // mov qword [rsp + 352], r14 WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 - QUAD $0x000000a024949d0f // setge byte [rsp + 160] + QUAD $0x000000f024949d0f // setge byte [rsp + 240] LONG $0x086e394c // cmp qword [rsi + 8], r13 - LONG $0xd79d0f40 // setge dil + LONG $0xd29d0f41 // setge r10b LONG $0x106e394c // cmp qword [rsi + 16], r13 LONG $0xd69d0f41 // setge r14b LONG $0x186e394c // cmp qword [rsi + 24], r13 - QUAD $0x0000015024949d0f // setge byte [rsp + 336] + QUAD $0x0000011024949d0f // setge byte [rsp + 272] LONG $0x206e394c // cmp qword [rsi + 32], r13 - QUAD $0x000000e024949d0f // setge byte [rsp + 224] - LONG $0x286e394c // cmp qword [rsi + 40], r13 QUAD $0x000000d024949d0f // setge byte [rsp + 208] + LONG $0x286e394c // cmp qword [rsi + 40], r13 + QUAD $0x000000c024949d0f // setge byte [rsp + 192] LONG $0x306e394c // cmp qword [rsi + 48], r13 WORD $0x9d0f; BYTE $0xd0 // setge al LONG $0x386e394c // cmp qword [rsi + 56], r13 WORD $0x9d0f; BYTE $0xd3 // setge bl LONG $0x406e394c // cmp qword [rsi + 64], r13 - QUAD $0x0000013024949d0f // setge byte [rsp + 304] + QUAD $0x0000015024949d0f // setge byte [rsp + 336] LONG $0x486e394c // cmp qword [rsi + 72], r13 - WORD $0x9d0f; BYTE $0xd2 // setge dl + LONG $0xd79d0f40 // setge dil LONG $0x506e394c // cmp qword [rsi + 80], r13 - LONG $0xd19d0f41 // setge r9b + LONG $0xd09d0f41 // setge r8b LONG $0x586e394c // cmp qword [rsi + 88], r13 - LONG $0xd29d0f41 // setge r10b + LONG $0xd19d0f41 // setge r9b LONG $0x606e394c // cmp qword [rsi + 96], r13 LONG $0xd39d0f41 // setge r11b LONG $0x686e394c // cmp qword [rsi + 104], r13 LONG $0xd49d0f41 // setge r12b LONG $0x706e394c // cmp qword [rsi + 112], r13 - QUAD $0x0000010024949d0f // setge byte [rsp + 256] + QUAD $0x0000012024949d0f // setge byte [rsp + 288] LONG $0x786e394c // cmp qword [rsi + 120], r13 WORD $0x9d0f; BYTE $0xd1 // setge cl LONG $0x80ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 128], r13 - QUAD $0x000000b024949d0f // setge byte [rsp + 176] + QUAD $0x000000a024949d0f // setge byte [rsp + 160] LONG $0x88ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 136], r13 - QUAD $0x0000011024949d0f // setge byte [rsp + 272] + QUAD $0x0000013024949d0f // setge byte [rsp + 304] LONG $0x90ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 144], r13 - QUAD $0x0000012024949d0f // setge byte [rsp + 288] + QUAD $0x0000010024949d0f // setge byte [rsp + 256] LONG $0x98ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 152], r13 - QUAD $0x000000f024949d0f // setge byte [rsp + 240] + QUAD $0x000000e024949d0f // setge byte [rsp + 224] LONG $0xa0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 160], r13 - QUAD $0x000000c024949d0f // setge byte [rsp + 192] + QUAD $0x000000b024949d0f // setge byte [rsp + 176] LONG $0xa8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 168], r13 - QUAD $0x0000009024949d0f // setge byte [rsp + 144] + LONG $0x24549d0f; BYTE $0x70 // setge byte [rsp + 112] LONG $0xb0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 176], r13 QUAD $0x0000008024949d0f // setge byte [rsp + 128] LONG $0xb8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 184], r13 @@ -48880,7 +50320,7 @@ LBB10_110: LONG $0xc0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 192], r13 LONG $0x24549d0f; BYTE $0x30 // setge byte [rsp + 48] LONG $0xc8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 200], r13 - LONG $0x24549d0f; BYTE $0x70 // setge byte [rsp + 112] + QUAD $0x0000009024949d0f // setge byte [rsp + 144] LONG $0xd0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 208], r13 LONG $0x24549d0f; BYTE $0x60 // setge byte [rsp + 96] LONG $0xd8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 216], r13 @@ -48892,113 +50332,114 @@ LBB10_110: LONG $0xf0ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 240], r13 LONG $0x24549d0f; BYTE $0x08 // setge byte [rsp + 8] LONG $0xf8ae394c; WORD $0x0000; BYTE $0x00 // cmp qword [rsi + 248], r13 - LONG $0xd09d0f41 // setge r8b - WORD $0x0040; BYTE $0xff // add dil, dil - QUAD $0x000000a024bc0240 // add dil, byte [rsp + 160] + WORD $0x9d0f; BYTE $0xd2 // setge dl + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x000000f024940244 // add r10b, byte [rsp + 240] WORD $0xe0c0; BYTE $0x06 // shl al, 6 WORD $0xe3c0; BYTE $0x07 // shl bl, 7 WORD $0xc308 // or bl, al LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0841; BYTE $0xfe // or r14b, dil - WORD $0xd200 // add dl, dl - LONG $0x30249402; WORD $0x0001; BYTE $0x00 // add dl, byte [rsp + 304] - QUAD $0x000001502484b60f // movzx eax, byte [rsp + 336] + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + WORD $0x0040; BYTE $0xff // add dil, dil + QUAD $0x0000015024bc0240 // add dil, byte [rsp + 336] + QUAD $0x000001102484b60f // movzx eax, byte [rsp + 272] WORD $0xe0c0; BYTE $0x03 // shl al, 3 WORD $0x0844; BYTE $0xf0 // or al, r14b - LONG $0x02e1c041 // shl r9b, 2 - WORD $0x0841; BYTE $0xd1 // or r9b, dl - QUAD $0x000000e02494b60f // movzx edx, byte [rsp + 224] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0xc208 // or dl, al - WORD $0xd789 // mov edi, edx - LONG $0x03e2c041 // shl r10b, 3 - WORD $0x0845; BYTE $0xca // or r10b, r9b - QUAD $0x000000d02494b60f // movzx edx, byte [rsp + 208] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + WORD $0x8941; BYTE $0xc2 // mov r10d, eax + QUAD $0x0000016024b48b4c // mov r14, qword [rsp + 352] + LONG $0x02e0c041 // shl r8b, 2 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x000000d02484b60f // movzx eax, byte [rsp + 208] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xd0 // or al, r10b + WORD $0xc789 // mov edi, eax + LONG $0x03e1c041 // shl r9b, 3 + WORD $0x0845; BYTE $0xc1 // or r9b, r8b + QUAD $0x000000c02484b60f // movzx eax, byte [rsp + 192] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil LONG $0x04e3c041 // shl r11b, 4 - WORD $0x0845; BYTE $0xd3 // or r11b, r10b + WORD $0x0845; BYTE $0xcb // or r11b, r9b LONG $0x05e4c041 // shl r12b, 5 WORD $0x0845; BYTE $0xdc // or r12b, r11b - QUAD $0x0000010024bcb60f // movzx edi, byte [rsp + 256] + QUAD $0x0000012024bcb60f // movzx edi, byte [rsp + 288] LONG $0x06e7c040 // shl dil, 6 WORD $0xe1c0; BYTE $0x07 // shl cl, 7 WORD $0x0840; BYTE $0xf9 // or cl, dil - WORD $0xd308 // or bl, dl + WORD $0xc308 // or bl, al WORD $0x0844; BYTE $0xe1 // or cl, r12b - QUAD $0x0000016024b48b4c // mov r14, qword [rsp + 352] - QUAD $0x000001102494b60f // movzx edx, byte [rsp + 272] - WORD $0xd200 // add dl, dl - LONG $0xb0249402; WORD $0x0000; BYTE $0x00 // add dl, byte [rsp + 176] - WORD $0xd789 // mov edi, edx - QUAD $0x000001202494b60f // movzx edx, byte [rsp + 288] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000f02494b60f // movzx edx, byte [rsp + 240] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000c02494b60f // movzx edx, byte [rsp + 192] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xfa // or dl, dil - WORD $0xd789 // mov edi, edx - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xfa // or dl, dil + QUAD $0x000001302484b60f // movzx eax, byte [rsp + 304] + WORD $0xc000 // add al, al + LONG $0xa0248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 160] + WORD $0xc789 // mov edi, eax + QUAD $0x000001002484b60f // movzx eax, byte [rsp + 256] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x000000e02484b60f // movzx eax, byte [rsp + 224] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0840; BYTE $0xf8 // or al, dil + WORD $0xc789 // mov edi, eax + LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0840; BYTE $0xf8 // or al, dil WORD $0x8841; BYTE $0x1e // mov byte [r14], bl QUAD $0x00000080249cb60f // movzx ebx, byte [rsp + 128] WORD $0xe3c0; BYTE $0x06 // shl bl, 6 LONG $0x07e7c041 // shl r15b, 7 WORD $0x0841; BYTE $0xdf // or r15b, bl LONG $0x014e8841 // mov byte [r14 + 1], cl - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] - WORD $0xc900 // add cl, cl - LONG $0x30244c02 // add cl, byte [rsp + 48] - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x60 // movzx ecx, byte [rsp + 96] - WORD $0xe1c0; BYTE $0x02 // shl cl, 2 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x50 // movzx ecx, byte [rsp + 80] - WORD $0xe1c0; BYTE $0x03 // shl cl, 3 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x20 // movzx ecx, byte [rsp + 32] - WORD $0xe1c0; BYTE $0x04 // shl cl, 4 - WORD $0xd108 // or cl, dl - WORD $0xca89 // mov edx, ecx - LONG $0x244cb60f; BYTE $0x10 // movzx ecx, byte [rsp + 16] - WORD $0xe1c0; BYTE $0x05 // shl cl, 5 - WORD $0xd108 // or cl, dl - LONG $0x2454b60f; BYTE $0x08 // movzx edx, byte [rsp + 8] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - LONG $0x07e0c041 // shl r8b, 7 - WORD $0x0841; BYTE $0xd0 // or r8b, dl - WORD $0x0841; BYTE $0xc8 // or r8b, cl + WORD $0x0841; BYTE $0xc7 // or r15b, al + QUAD $0x000000902484b60f // movzx eax, byte [rsp + 144] + WORD $0xc000 // add al, al + LONG $0x30244402 // add al, byte [rsp + 48] + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] + WORD $0xe0c0; BYTE $0x02 // shl al, 2 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] + WORD $0xe0c0; BYTE $0x03 // shl al, 3 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0xc808 // or al, cl + LONG $0x244cb60f; BYTE $0x08 // movzx ecx, byte [rsp + 8] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe2c0; BYTE $0x07 // shl dl, 7 + WORD $0xca08 // or dl, cl + WORD $0xc208 // or dl, al LONG $0x027e8845 // mov byte [r14 + 2], r15b - LONG $0x03468845 // mov byte [r14 + 3], r8b + LONG $0x03568841 // mov byte [r14 + 3], dl LONG $0x00c68148; WORD $0x0001; BYTE $0x00 // add rsi, 256 LONG $0x04c68349 // add r14, 4 QUAD $0x0000014024848348; BYTE $0xff // add qword [rsp + 320], -1 - JNE LBB10_110 + JNE LBB10_163 LONG $0x24548b4c; BYTE $0x48 // mov r10, qword [rsp + 72] QUAD $0x00000170249c8b4c // mov r11, qword [rsp + 368] -LBB10_112: +LBB10_165: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB10_182 + JGE LBB10_201 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 - JNE LBB10_175 + JNE LBB10_170 WORD $0x3145; BYTE $0xdb // xor r11d, r11d - JMP LBB10_177 + JMP LBB10_168 -LBB10_115: +LBB10_172: LONG $0x1f5a8d4d // lea r11, [r10 + 31] WORD $0x854d; BYTE $0xd2 // test r10, r10 LONG $0xda490f4d // cmovns r11, r10 @@ -49008,14 +50449,15 @@ LBB10_115: WORD $0xe083; BYTE $0xf8 // and eax, -8 LONG $0x100f44f3; BYTE $0x1a // movss xmm11, dword [rdx] WORD $0x2941; BYTE $0xc1 // sub r9d, eax - JE LBB10_119 + JE LBB10_176 WORD $0x6349; BYTE $0xc1 // movsxd rax, r9d -LBB10_117: - LONG $0x1e2e0f44 // ucomiss xmm11, dword [rsi] - WORD $0x960f; BYTE $0xd2 // setbe dl +LBB10_174: + LONG $0x06100ff3 // movss xmm0, dword [rsi] LONG $0x04c68348 // add rsi, 4 - WORD $0xdaf6 // neg dl + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x000000ba; BYTE $0x00 // mov edx, 0 + WORD $0xd280; BYTE $0xff // adc dl, -1 LONG $0x07788d48 // lea rdi, [rax + 7] WORD $0x8548; BYTE $0xc0 // test rax, rax LONG $0xf8490f48 // cmovns rdi, rax @@ -49032,263 +50474,293 @@ LBB10_117: LONG $0x3e1c8841 // mov byte [r14 + rdi], bl LONG $0x01c08348 // add rax, 1 LONG $0x08f88348 // cmp rax, 8 - JNE LBB10_117 + JNE LBB10_174 LONG $0x01c68349 // add r14, 1 -LBB10_119: +LBB10_176: LONG $0x05fbc149 // sar r11, 5 LONG $0x20fa8349 // cmp r10, 32 - JL LBB10_139 + JL LBB10_177 LONG $0x04fb8349 // cmp r11, 4 - JB LBB10_123 + JB LBB10_179 WORD $0x894c; BYTE $0xd8 // mov rax, r11 LONG $0x07e0c148 // shl rax, 7 WORD $0x0148; BYTE $0xf0 // add rax, rsi WORD $0x3949; BYTE $0xc6 // cmp r14, rax - JAE LBB10_200 + JAE LBB10_182 LONG $0x9e048d4b // lea rax, [r14 + 4*r11] WORD $0x3948; BYTE $0xf0 // cmp rax, rsi - JBE LBB10_200 + JBE LBB10_182 -LBB10_123: - WORD $0x3145; BYTE $0xc0 // xor r8d, r8d - WORD $0x8948; BYTE $0xf3 // mov rbx, rsi +LBB10_179: + WORD $0xc031 // xor eax, eax + WORD $0x8948; BYTE $0xf2 // mov rdx, rsi WORD $0x894d; BYTE $0xf7 // mov r15, r14 -LBB10_124: +LBB10_185: LONG $0x247c894c; BYTE $0x08 // mov qword [rsp + 8], r15 LONG $0x2454894c; BYTE $0x48 // mov qword [rsp + 72], r10 QUAD $0x00000140249c894c // mov qword [rsp + 320], r11 - WORD $0x294d; BYTE $0xc3 // sub r11, r8 - QUAD $0x000000a0249c894c // mov qword [rsp + 160], r11 + WORD $0x2949; BYTE $0xc3 // sub r11, rax + QUAD $0x000000f0249c894c // mov qword [rsp + 240], r11 -LBB10_125: - LONG $0x1b2e0f44 // ucomiss xmm11, dword [rbx] - QUAD $0x000001502494960f // setbe byte [rsp + 336] - LONG $0x5b2e0f44; BYTE $0x04 // ucomiss xmm11, dword [rbx + 4] - LONG $0xd0960f41 // setbe r8b - LONG $0x5b2e0f44; BYTE $0x08 // ucomiss xmm11, dword [rbx + 8] - LONG $0xd6960f41 // setbe r14b - LONG $0x5b2e0f44; BYTE $0x0c // ucomiss xmm11, dword [rbx + 12] - LONG $0xd5960f41 // setbe r13b - LONG $0x5b2e0f44; BYTE $0x10 // ucomiss xmm11, dword [rbx + 16] - QUAD $0x000000e02494960f // setbe byte [rsp + 224] - LONG $0x5b2e0f44; BYTE $0x14 // ucomiss xmm11, dword [rbx + 20] - QUAD $0x000000d02494960f // setbe byte [rsp + 208] - LONG $0x5b2e0f44; BYTE $0x18 // ucomiss xmm11, dword [rbx + 24] - WORD $0x960f; BYTE $0xd0 // setbe al - LONG $0x5b2e0f44; BYTE $0x1c // ucomiss xmm11, dword [rbx + 28] - LONG $0xd3960f41 // setbe r11b - LONG $0x5b2e0f44; BYTE $0x20 // ucomiss xmm11, dword [rbx + 32] - QUAD $0x000001002494960f // setbe byte [rsp + 256] - LONG $0x5b2e0f44; BYTE $0x24 // ucomiss xmm11, dword [rbx + 36] - WORD $0x960f; BYTE $0xd2 // setbe dl - LONG $0x5b2e0f44; BYTE $0x28 // ucomiss xmm11, dword [rbx + 40] - LONG $0xd6960f40 // setbe sil - LONG $0x5b2e0f44; BYTE $0x2c // ucomiss xmm11, dword [rbx + 44] - LONG $0xd7960f40 // setbe dil - LONG $0x5b2e0f44; BYTE $0x30 // ucomiss xmm11, dword [rbx + 48] - LONG $0xd2960f41 // setbe r10b - LONG $0x5b2e0f44; BYTE $0x34 // ucomiss xmm11, dword [rbx + 52] - LONG $0xd4960f41 // setbe r12b - LONG $0x5b2e0f44; BYTE $0x38 // ucomiss xmm11, dword [rbx + 56] - QUAD $0x000001102494960f // setbe byte [rsp + 272] - LONG $0x5b2e0f44; BYTE $0x3c // ucomiss xmm11, dword [rbx + 60] - LONG $0xd1960f41 // setbe r9b - LONG $0x5b2e0f44; BYTE $0x40 // ucomiss xmm11, dword [rbx + 64] - QUAD $0x000000b02494960f // setbe byte [rsp + 176] - LONG $0x5b2e0f44; BYTE $0x44 // ucomiss xmm11, dword [rbx + 68] - QUAD $0x000001302494960f // setbe byte [rsp + 304] - LONG $0x5b2e0f44; BYTE $0x48 // ucomiss xmm11, dword [rbx + 72] - QUAD $0x000001202494960f // setbe byte [rsp + 288] - LONG $0x5b2e0f44; BYTE $0x4c // ucomiss xmm11, dword [rbx + 76] - QUAD $0x000000f02494960f // setbe byte [rsp + 240] - LONG $0x5b2e0f44; BYTE $0x50 // ucomiss xmm11, dword [rbx + 80] - QUAD $0x000000c02494960f // setbe byte [rsp + 192] - LONG $0x5b2e0f44; BYTE $0x54 // ucomiss xmm11, dword [rbx + 84] - QUAD $0x000000902494960f // setbe byte [rsp + 144] - LONG $0x5b2e0f44; BYTE $0x58 // ucomiss xmm11, dword [rbx + 88] - QUAD $0x000000802494960f // setbe byte [rsp + 128] - LONG $0x5b2e0f44; BYTE $0x5c // ucomiss xmm11, dword [rbx + 92] - LONG $0xd7960f41 // setbe r15b - LONG $0x5b2e0f44; BYTE $0x60 // ucomiss xmm11, dword [rbx + 96] - LONG $0x2454960f; BYTE $0x30 // setbe byte [rsp + 48] - LONG $0x5b2e0f44; BYTE $0x64 // ucomiss xmm11, dword [rbx + 100] - LONG $0x2454960f; BYTE $0x70 // setbe byte [rsp + 112] - LONG $0x5b2e0f44; BYTE $0x68 // ucomiss xmm11, dword [rbx + 104] - LONG $0x2454960f; BYTE $0x60 // setbe byte [rsp + 96] - LONG $0x5b2e0f44; BYTE $0x6c // ucomiss xmm11, dword [rbx + 108] - LONG $0x2454960f; BYTE $0x50 // setbe byte [rsp + 80] - LONG $0x5b2e0f44; BYTE $0x70 // ucomiss xmm11, dword [rbx + 112] - LONG $0x2454960f; BYTE $0x20 // setbe byte [rsp + 32] - LONG $0x5b2e0f44; BYTE $0x74 // ucomiss xmm11, dword [rbx + 116] - LONG $0x2454960f; BYTE $0x10 // setbe byte [rsp + 16] - LONG $0x5b2e0f44; BYTE $0x78 // ucomiss xmm11, dword [rbx + 120] - QUAD $0x000001602494960f // setbe byte [rsp + 352] - LONG $0x5b2e0f44; BYTE $0x7c // ucomiss xmm11, dword [rbx + 124] - WORD $0x960f; BYTE $0xd1 // setbe cl - WORD $0x0045; BYTE $0xc0 // add r8b, r8b - QUAD $0x0000015024840244 // add r8b, byte [rsp + 336] - WORD $0xe0c0; BYTE $0x06 // shl al, 6 - LONG $0x07e3c041 // shl r11b, 7 - WORD $0x0841; BYTE $0xc3 // or r11b, al - LONG $0x02e6c041 // shl r14b, 2 - WORD $0x0845; BYTE $0xc6 // or r14b, r8b - WORD $0xd200 // add dl, dl - LONG $0x00249402; WORD $0x0001; BYTE $0x00 // add dl, byte [rsp + 256] - LONG $0x03e5c041 // shl r13b, 3 - WORD $0x0845; BYTE $0xf5 // or r13b, r14b +LBB10_186: + LONG $0x02100ff3 // movss xmm0, dword [rdx] + LONG $0x4a100ff3; BYTE $0x04 // movss xmm1, dword [rdx + 4] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + QUAD $0x000001202494930f // setae byte [rsp + 288] + LONG $0xcb2e0f41 // ucomiss xmm1, xmm11 + WORD $0x930f; BYTE $0xd1 // setae cl + LONG $0x42100ff3; BYTE $0x08 // movss xmm0, dword [rdx + 8] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0xd6930f40 // setae sil + LONG $0x42100ff3; BYTE $0x0c // movss xmm0, dword [rdx + 12] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0xd7930f40 // setae dil + LONG $0x42100ff3; BYTE $0x10 // movss xmm0, dword [rdx + 16] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0xd0930f41 // setae r8b + LONG $0x42100ff3; BYTE $0x14 // movss xmm0, dword [rdx + 20] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + QUAD $0x000001102494930f // setae byte [rsp + 272] + LONG $0x42100ff3; BYTE $0x18 // movss xmm0, dword [rdx + 24] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + QUAD $0x000001302494930f // setae byte [rsp + 304] + LONG $0x42100ff3; BYTE $0x1c // movss xmm0, dword [rdx + 28] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + QUAD $0x000001502494930f // setae byte [rsp + 336] + LONG $0x42100ff3; BYTE $0x20 // movss xmm0, dword [rdx + 32] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + QUAD $0x000000c02494930f // setae byte [rsp + 192] + LONG $0x42100ff3; BYTE $0x24 // movss xmm0, dword [rdx + 36] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0xd1930f41 // setae r9b + LONG $0x42100ff3; BYTE $0x28 // movss xmm0, dword [rdx + 40] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0xd3930f41 // setae r11b + LONG $0x42100ff3; BYTE $0x2c // movss xmm0, dword [rdx + 44] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0xd7930f41 // setae r15b + LONG $0x42100ff3; BYTE $0x30 // movss xmm0, dword [rdx + 48] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + WORD $0x930f; BYTE $0xd0 // setae al + LONG $0x42100ff3; BYTE $0x34 // movss xmm0, dword [rdx + 52] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + QUAD $0x000000d02494930f // setae byte [rsp + 208] + LONG $0x42100ff3; BYTE $0x38 // movss xmm0, dword [rdx + 56] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + QUAD $0x000000b02494930f // setae byte [rsp + 176] + LONG $0x42100ff3; BYTE $0x3c // movss xmm0, dword [rdx + 60] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + QUAD $0x000000e02494930f // setae byte [rsp + 224] + LONG $0x42100ff3; BYTE $0x40 // movss xmm0, dword [rdx + 64] + LONG $0x4a100ff3; BYTE $0x44 // movss xmm1, dword [rdx + 68] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x42100ff3; BYTE $0x48 // movss xmm0, dword [rdx + 72] + QUAD $0x000000902494930f // setae byte [rsp + 144] + LONG $0xcb2e0f41 // ucomiss xmm1, xmm11 + LONG $0x4a100ff3; BYTE $0x4c // movss xmm1, dword [rdx + 76] + LONG $0xd2930f41 // setae r10b + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x42100ff3; BYTE $0x50 // movss xmm0, dword [rdx + 80] + LONG $0xd6930f41 // setae r14b + LONG $0xcb2e0f41 // ucomiss xmm1, xmm11 + LONG $0x4a100ff3; BYTE $0x54 // movss xmm1, dword [rdx + 84] + LONG $0xd4930f41 // setae r12b + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x42100ff3; BYTE $0x58 // movss xmm0, dword [rdx + 88] + QUAD $0x000001002494930f // setae byte [rsp + 256] + LONG $0xcb2e0f41 // ucomiss xmm1, xmm11 + LONG $0x4a100ff3; BYTE $0x5c // movss xmm1, dword [rdx + 92] + QUAD $0x000000a02494930f // setae byte [rsp + 160] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x42100ff3; BYTE $0x60 // movss xmm0, dword [rdx + 96] + LONG $0x2454930f; BYTE $0x70 // setae byte [rsp + 112] + LONG $0xcb2e0f41 // ucomiss xmm1, xmm11 + LONG $0x4a100ff3; BYTE $0x64 // movss xmm1, dword [rdx + 100] + LONG $0xd5930f41 // setae r13b + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x42100ff3; BYTE $0x68 // movss xmm0, dword [rdx + 104] + LONG $0x2454930f; BYTE $0x10 // setae byte [rsp + 16] + LONG $0xcb2e0f41 // ucomiss xmm1, xmm11 + LONG $0x4a100ff3; BYTE $0x6c // movss xmm1, dword [rdx + 108] + QUAD $0x000000802494930f // setae byte [rsp + 128] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x42100ff3; BYTE $0x70 // movss xmm0, dword [rdx + 112] + LONG $0x2454930f; BYTE $0x60 // setae byte [rsp + 96] + LONG $0xcb2e0f41 // ucomiss xmm1, xmm11 + LONG $0x4a100ff3; BYTE $0x74 // movss xmm1, dword [rdx + 116] + LONG $0x2454930f; BYTE $0x50 // setae byte [rsp + 80] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x42100ff3; BYTE $0x78 // movss xmm0, dword [rdx + 120] + LONG $0x2454930f; BYTE $0x30 // setae byte [rsp + 48] + LONG $0xcb2e0f41 // ucomiss xmm1, xmm11 + LONG $0x4a100ff3; BYTE $0x7c // movss xmm1, dword [rdx + 124] + LONG $0x2454930f; BYTE $0x20 // setae byte [rsp + 32] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + QUAD $0x000001602494930f // setae byte [rsp + 352] + LONG $0x80ea8348 // sub rdx, -128 + LONG $0xcb2e0f41 // ucomiss xmm1, xmm11 + WORD $0x930f; BYTE $0xd3 // setae bl + WORD $0xc900 // add cl, cl + LONG $0x20248c02; WORD $0x0001; BYTE $0x00 // add cl, byte [rsp + 288] LONG $0x02e6c040 // shl sil, 2 - WORD $0x0840; BYTE $0xd6 // or sil, dl - QUAD $0x000000e02494b60f // movzx edx, byte [rsp + 224] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0844; BYTE $0xea // or dl, r13b - WORD $0x8941; BYTE $0xd0 // mov r8d, edx + WORD $0x0840; BYTE $0xce // or sil, cl LONG $0x03e7c040 // shl dil, 3 WORD $0x0840; BYTE $0xf7 // or dil, sil - QUAD $0x000000d02494b60f // movzx edx, byte [rsp + 208] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0844; BYTE $0xc2 // or dl, r8b - LONG $0x04e2c041 // shl r10b, 4 - WORD $0x0841; BYTE $0xfa // or r10b, dil - LONG $0x05e4c041 // shl r12b, 5 - WORD $0x0845; BYTE $0xd4 // or r12b, r10b - QUAD $0x0000011024b4b60f // movzx esi, byte [rsp + 272] - LONG $0x06e6c040 // shl sil, 6 - LONG $0x07e1c041 // shl r9b, 7 - WORD $0x0841; BYTE $0xf1 // or r9b, sil - WORD $0x0841; BYTE $0xd3 // or r11b, dl - WORD $0x0845; BYTE $0xe1 // or r9b, r12b - QUAD $0x000001302484b60f // movzx eax, byte [rsp + 304] - WORD $0xc000 // add al, al - LONG $0xb0248402; WORD $0x0000; BYTE $0x00 // add al, byte [rsp + 176] - QUAD $0x000001202494b60f // movzx edx, byte [rsp + 288] - WORD $0xe2c0; BYTE $0x02 // shl dl, 2 - WORD $0xc208 // or dl, al - WORD $0xd689 // mov esi, edx - QUAD $0x000000f02494b60f // movzx edx, byte [rsp + 240] - WORD $0xe2c0; BYTE $0x03 // shl dl, 3 - WORD $0x0840; BYTE $0xf2 // or dl, sil - WORD $0xd689 // mov esi, edx - QUAD $0x000000c02494b60f // movzx edx, byte [rsp + 192] - WORD $0xe2c0; BYTE $0x04 // shl dl, 4 - WORD $0x0840; BYTE $0xf2 // or dl, sil - WORD $0xd689 // mov esi, edx - QUAD $0x000000902494b60f // movzx edx, byte [rsp + 144] - WORD $0xe2c0; BYTE $0x05 // shl dl, 5 - WORD $0x0840; BYTE $0xf2 // or dl, sil - LONG $0x24748b48; BYTE $0x08 // mov rsi, qword [rsp + 8] - WORD $0x8844; BYTE $0x1e // mov byte [rsi], r11b - QUAD $0x0000008024bcb60f // movzx edi, byte [rsp + 128] + LONG $0x04e0c041 // shl r8b, 4 + WORD $0x0841; BYTE $0xf8 // or r8b, dil + QUAD $0x00000110248cb60f // movzx ecx, byte [rsp + 272] + WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + WORD $0x0844; BYTE $0xc1 // or cl, r8b + QUAD $0x0000013024bcb60f // movzx edi, byte [rsp + 304] LONG $0x06e7c040 // shl dil, 6 - LONG $0x07e7c041 // shl r15b, 7 - WORD $0x0841; BYTE $0xff // or r15b, dil - LONG $0x014e8844 // mov byte [rsi + 1], r9b - WORD $0x0841; BYTE $0xd7 // or r15b, dl - LONG $0x2444b60f; BYTE $0x70 // movzx eax, byte [rsp + 112] + QUAD $0x0000015024b4b60f // movzx esi, byte [rsp + 336] + LONG $0x07e6c040 // shl sil, 7 + WORD $0x0840; BYTE $0xfe // or sil, dil + WORD $0x0045; BYTE $0xc9 // add r9b, r9b + QUAD $0x000000c0248c0244 // add r9b, byte [rsp + 192] + LONG $0x02e3c041 // shl r11b, 2 + WORD $0x0845; BYTE $0xcb // or r11b, r9b + LONG $0x03e7c041 // shl r15b, 3 + WORD $0x0845; BYTE $0xdf // or r15b, r11b + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xf8 // or al, r15b + WORD $0x0840; BYTE $0xce // or sil, cl + QUAD $0x000000d0248cb60f // movzx ecx, byte [rsp + 208] + WORD $0xe1c0; BYTE $0x05 // shl cl, 5 + WORD $0xc108 // or cl, al + QUAD $0x000000b02484b60f // movzx eax, byte [rsp + 176] + WORD $0xe0c0; BYTE $0x06 // shl al, 6 + QUAD $0x000000e024bcb60f // movzx edi, byte [rsp + 224] + LONG $0x07e7c040 // shl dil, 7 + WORD $0x0840; BYTE $0xc7 // or dil, al + WORD $0x0045; BYTE $0xd2 // add r10b, r10b + QUAD $0x0000009024940244 // add r10b, byte [rsp + 144] + LONG $0x02e6c041 // shl r14b, 2 + WORD $0x0845; BYTE $0xd6 // or r14b, r10b + LONG $0x03e4c041 // shl r12b, 3 + WORD $0x0845; BYTE $0xf4 // or r12b, r14b + QUAD $0x000001002484b60f // movzx eax, byte [rsp + 256] + WORD $0xe0c0; BYTE $0x04 // shl al, 4 + WORD $0x0844; BYTE $0xe0 // or al, r12b + WORD $0x8941; BYTE $0xc0 // mov r8d, eax + QUAD $0x000000a02484b60f // movzx eax, byte [rsp + 160] + WORD $0xe0c0; BYTE $0x05 // shl al, 5 + WORD $0x0844; BYTE $0xc0 // or al, r8b + WORD $0x0840; BYTE $0xcf // or dil, cl + LONG $0x244cb60f; BYTE $0x70 // movzx ecx, byte [rsp + 112] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + LONG $0x07e5c041 // shl r13b, 7 + WORD $0x0841; BYTE $0xcd // or r13b, cl + LONG $0x24448b4c; BYTE $0x08 // mov r8, qword [rsp + 8] + WORD $0x8841; BYTE $0x30 // mov byte [r8], sil + WORD $0x0841; BYTE $0xc5 // or r13b, al + QUAD $0x000000802484b60f // movzx eax, byte [rsp + 128] WORD $0xc000 // add al, al - LONG $0x30244402 // add al, byte [rsp + 48] - WORD $0xc289 // mov edx, eax + LONG $0x10244402 // add al, byte [rsp + 16] + WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x60 // movzx eax, byte [rsp + 96] WORD $0xe0c0; BYTE $0x02 // shl al, 2 - WORD $0xd008 // or al, dl - WORD $0xc289 // mov edx, eax + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax LONG $0x2444b60f; BYTE $0x50 // movzx eax, byte [rsp + 80] WORD $0xe0c0; BYTE $0x03 // shl al, 3 - WORD $0xd008 // or al, dl - WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x30 // movzx eax, byte [rsp + 48] WORD $0xe0c0; BYTE $0x04 // shl al, 4 - WORD $0xd008 // or al, dl - WORD $0xc289 // mov edx, eax - LONG $0x2444b60f; BYTE $0x10 // movzx eax, byte [rsp + 16] + WORD $0xc808 // or al, cl + WORD $0xc189 // mov ecx, eax + LONG $0x2444b60f; BYTE $0x20 // movzx eax, byte [rsp + 32] WORD $0xe0c0; BYTE $0x05 // shl al, 5 - WORD $0xd008 // or al, dl - QUAD $0x000001602494b60f // movzx edx, byte [rsp + 352] - WORD $0xe2c0; BYTE $0x06 // shl dl, 6 - WORD $0xe1c0; BYTE $0x07 // shl cl, 7 - WORD $0xd108 // or cl, dl - WORD $0xc108 // or cl, al - LONG $0x027e8844 // mov byte [rsi + 2], r15b - WORD $0x4e88; BYTE $0x03 // mov byte [rsi + 3], cl - LONG $0x80c38148; WORD $0x0000; BYTE $0x00 // add rbx, 128 - LONG $0x04c68348 // add rsi, 4 - LONG $0x24748948; BYTE $0x08 // mov qword [rsp + 8], rsi - QUAD $0x000000a024848348; BYTE $0xff // add qword [rsp + 160], -1 - JNE LBB10_125 + WORD $0xc808 // or al, cl + LONG $0x01788841 // mov byte [r8 + 1], dil + QUAD $0x00000160248cb60f // movzx ecx, byte [rsp + 352] + WORD $0xe1c0; BYTE $0x06 // shl cl, 6 + WORD $0xe3c0; BYTE $0x07 // shl bl, 7 + WORD $0xcb08 // or bl, cl + LONG $0x02688845 // mov byte [r8 + 2], r13b + WORD $0xc308 // or bl, al + LONG $0x03588841 // mov byte [r8 + 3], bl + LONG $0x04c08349 // add r8, 4 + LONG $0x2444894c; BYTE $0x08 // mov qword [rsp + 8], r8 + QUAD $0x000000f024848348; BYTE $0xff // add qword [rsp + 240], -1 + JNE LBB10_186 LONG $0x247c8b4c; BYTE $0x08 // mov r15, qword [rsp + 8] LONG $0x24548b4c; BYTE $0x48 // mov r10, qword [rsp + 72] QUAD $0x00000140249c8b4c // mov r11, qword [rsp + 320] - JMP LBB10_140 + JMP LBB10_188 -LBB10_127: - LONG $0x2474894c; BYTE $0x70 // mov qword [rsp + 112], r14 +LBB10_9: + QUAD $0x0000009024b4894c // mov qword [rsp + 144], r14 -LBB10_128: +LBB10_91: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB10_182 + JGE LBB10_201 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB10_151 + JNE LBB10_94 WORD $0x3145; BYTE $0xc9 // xor r9d, r9d - JMP LBB10_154 + JMP LBB10_97 -LBB10_131: - QUAD $0x000000d024b4894c // mov qword [rsp + 208], r14 +LBB10_61: + QUAD $0x000000e024b4894c // mov qword [rsp + 224], r14 -LBB10_132: +LBB10_72: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB10_182 + JGE LBB10_201 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB10_156 + JNE LBB10_75 WORD $0x3145; BYTE $0xc9 // xor r9d, r9d - JMP LBB10_159 + JMP LBB10_78 -LBB10_135: +LBB10_119: WORD $0x894d; BYTE $0xf4 // mov r12, r14 WORD $0x8949; BYTE $0xf3 // mov r11, rsi -LBB10_136: +LBB10_130: LONG $0x05e7c149 // shl r15, 5 WORD $0x394d; BYTE $0xd7 // cmp r15, r10 - JGE LBB10_182 + JGE LBB10_201 WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xf8 // sub r8, r15 WORD $0xf749; BYTE $0xd7 // not r15 WORD $0x014d; BYTE $0xd7 // add r15, r10 - JNE LBB10_183 + JNE LBB10_135 WORD $0xf631 // xor esi, esi - JMP LBB10_185 + JMP LBB10_133 -LBB10_139: +LBB10_177: WORD $0x894d; BYTE $0xf7 // mov r15, r14 - WORD $0x8948; BYTE $0xf3 // mov rbx, rsi + WORD $0x8948; BYTE $0xf2 // mov rdx, rsi -LBB10_140: +LBB10_188: LONG $0x05e3c149 // shl r11, 5 WORD $0x394d; BYTE $0xd3 // cmp r11, r10 - JGE LBB10_182 + JGE LBB10_201 + WORD $0x8948; BYTE $0xd0 // mov rax, rdx WORD $0x894d; BYTE $0xd0 // mov r8, r10 WORD $0x294d; BYTE $0xd8 // sub r8, r11 WORD $0xf749; BYTE $0xd3 // not r11 WORD $0x014d; BYTE $0xd3 // add r11, r10 - JNE LBB10_187 + JNE LBB10_193 WORD $0xf631 // xor esi, esi - JMP LBB10_189 + JMP LBB10_191 -LBB10_143: +LBB10_155: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d -LBB10_144: +LBB10_156: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 LONG $0x000000bf; BYTE $0x00 // mov edi, 0 LONG $0xffd78040 // adc dil, -1 @@ -49316,21 +50788,21 @@ LBB10_144: WORD $0xc330 // xor bl, al LONG $0x161c8841 // mov byte [r14 + rdx], bl WORD $0x394d; BYTE $0xd9 // cmp r9, r11 - JNE LBB10_144 + JNE LBB10_156 -LBB10_145: +LBB10_40: LONG $0x01c0f641 // test r8b, 1 - JE LBB10_182 + JE LBB10_201 WORD $0xc031 // xor eax, eax WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 - JMP LBB10_174 + JMP LBB10_199 -LBB10_147: +LBB10_153: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d -LBB10_148: +LBB10_154: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d WORD $0x9d0f; BYTE $0xd0 // setge al WORD $0xd8f6 // neg al @@ -49358,21 +50830,21 @@ LBB10_148: WORD $0xda30 // xor dl, bl LONG $0x3e148841 // mov byte [r14 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB10_148 + JNE LBB10_154 -LBB10_149: +LBB10_150: LONG $0x01c0f641 // test r8b, 1 - JE LBB10_182 + JE LBB10_201 WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d - JMP LBB10_179 + JMP LBB10_152 -LBB10_151: - WORD $0x894d; BYTE $0xc2 // mov r10, r8 - LONG $0xfee28349 // and r10, -2 - WORD $0x3145; BYTE $0xc9 // xor r9d, r9d - LONG $0x24748b4c; BYTE $0x70 // mov r14, qword [rsp + 112] +LBB10_94: + WORD $0x894d; BYTE $0xc2 // mov r10, r8 + LONG $0xfee28349 // and r10, -2 + WORD $0x3145; BYTE $0xc9 // xor r9d, r9d + QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] -LBB10_152: +LBB10_95: WORD $0x894c; BYTE $0xc8 // mov rax, r9 LONG $0x0e1c3846 // cmp byte [rsi + r9], r11b WORD $0x9d0f; BYTE $0xd3 // setge bl @@ -49400,34 +50872,34 @@ LBB10_152: WORD $0xd030 // xor al, dl LONG $0x3e048841 // mov byte [r14 + rdi], al WORD $0x394d; BYTE $0xca // cmp r10, r9 - JNE LBB10_152 + JNE LBB10_95 WORD $0x014c; BYTE $0xce // add rsi, r9 -LBB10_154: - LONG $0x01c0f641 // test r8b, 1 - JE LBB10_182 - WORD $0x3844; BYTE $0x1e // cmp byte [rsi], r11b - WORD $0x9d0f; BYTE $0xd0 // setge al - WORD $0xd8f6 // neg al - WORD $0x894c; BYTE $0xca // mov rdx, r9 - LONG $0x03eac148 // shr rdx, 3 - LONG $0x24448b4c; BYTE $0x70 // mov r8, qword [rsp + 112] - LONG $0x103c8a41 // mov dil, byte [r8 + rdx] - LONG $0x07e18041 // and r9b, 7 - WORD $0x01b3 // mov bl, 1 - WORD $0x8944; BYTE $0xc9 // mov ecx, r9d - WORD $0xe3d2 // shl bl, cl - WORD $0x3040; BYTE $0xf8 // xor al, dil - WORD $0xc320 // and bl, al - JMP LBB10_161 +LBB10_97: + LONG $0x01c0f641 // test r8b, 1 + JE LBB10_201 + WORD $0x3844; BYTE $0x1e // cmp byte [rsi], r11b + WORD $0x9d0f; BYTE $0xd0 // setge al + WORD $0xd8f6 // neg al + WORD $0x894c; BYTE $0xca // mov rdx, r9 + LONG $0x03eac148 // shr rdx, 3 + QUAD $0x0000009024848b4c // mov r8, qword [rsp + 144] + LONG $0x103c8a41 // mov dil, byte [r8 + rdx] + LONG $0x07e18041 // and r9b, 7 + WORD $0x01b3 // mov bl, 1 + WORD $0x8944; BYTE $0xc9 // mov ecx, r9d + WORD $0xe3d2 // shl bl, cl + WORD $0x3040; BYTE $0xf8 // xor al, dil + WORD $0xc320 // and bl, al + JMP LBB10_80 -LBB10_156: +LBB10_75: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xc9 // xor r9d, r9d - QUAD $0x000000d024b48b4c // mov r14, qword [rsp + 208] + QUAD $0x000000e024b48b4c // mov r14, qword [rsp + 224] -LBB10_157: +LBB10_76: WORD $0x894c; BYTE $0xc8 // mov rax, r9 LONG $0x0e1c3846 // cmp byte [rsi + r9], r11b LONG $0x000000bb; BYTE $0x00 // mov ebx, 0 @@ -49455,18 +50927,18 @@ LBB10_157: WORD $0xd030 // xor al, dl LONG $0x3e048841 // mov byte [r14 + rdi], al WORD $0x394d; BYTE $0xca // cmp r10, r9 - JNE LBB10_157 + JNE LBB10_76 WORD $0x014c; BYTE $0xce // add rsi, r9 -LBB10_159: +LBB10_78: LONG $0x01c0f641 // test r8b, 1 - JE LBB10_182 + JE LBB10_201 WORD $0xc031 // xor eax, eax WORD $0x3844; BYTE $0x1e // cmp byte [rsi], r11b WORD $0xff14 // adc al, -1 WORD $0x894c; BYTE $0xca // mov rdx, r9 LONG $0x03eac148 // shr rdx, 3 - QUAD $0x000000d024848b4c // mov r8, qword [rsp + 208] + QUAD $0x000000e024848b4c // mov r8, qword [rsp + 224] LONG $0x103c8a41 // mov dil, byte [r8 + rdx] LONG $0x07e18041 // and r9b, 7 WORD $0x01b3 // mov bl, 1 @@ -49475,17 +50947,17 @@ LBB10_159: WORD $0x3040; BYTE $0xf8 // xor al, dil WORD $0xc320 // and bl, al -LBB10_161: +LBB10_80: WORD $0x3040; BYTE $0xfb // xor bl, dil LONG $0x101c8841 // mov byte [r8 + rdx], bl - JMP LBB10_182 + JMP LBB10_201 -LBB10_162: +LBB10_137: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d -LBB10_163: +LBB10_138: WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d LONG $0x000000bf; BYTE $0x00 // mov edi, 0 LONG $0xffd78040 // adc dil, -1 @@ -49513,40 +50985,42 @@ LBB10_163: WORD $0xc330 // xor bl, al LONG $0x161c8841 // mov byte [r14 + rdx], bl WORD $0x394d; BYTE $0xd9 // cmp r9, r11 - JNE LBB10_163 + JNE LBB10_138 -LBB10_164: +LBB10_24: LONG $0x01c0f641 // test r8b, 1 - JE LBB10_182 + JE LBB10_201 WORD $0xc031 // xor eax, eax WORD $0x3944; BYTE $0x2e // cmp dword [rsi], r13d - JMP LBB10_174 + JMP LBB10_199 -LBB10_166: +LBB10_195: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d -LBB10_167: - LONG $0x062e0f66 // ucomisd xmm0, qword [rsi] - WORD $0x960f; BYTE $0xd0 // setbe al - WORD $0xd8f6 // neg al +LBB10_196: + LONG $0x0e100ff2 // movsd xmm1, qword [rsi] + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0x000000b8; BYTE $0x00 // mov eax, 0 + WORD $0xff14 // adc al, -1 WORD $0x894c; BYTE $0xdf // mov rdi, r11 LONG $0x03efc148 // shr rdi, 3 LONG $0x0cb60f45; BYTE $0x3e // movzx r9d, byte [r14 + rdi] + WORD $0x3044; BYTE $0xc8 // xor al, r9b WORD $0x8944; BYTE $0xd9 // mov ecx, r11d WORD $0xe180; BYTE $0x06 // and cl, 6 WORD $0x01b3 // mov bl, 1 WORD $0xe3d2 // shl bl, cl - WORD $0x3044; BYTE $0xc8 // xor al, r9b WORD $0xc320 // and bl, al WORD $0x3044; BYTE $0xcb // xor bl, r9b LONG $0x3e1c8841 // mov byte [r14 + rdi], bl LONG $0x02c38349 // add r11, 2 - LONG $0x462e0f66; BYTE $0x08 // ucomisd xmm0, qword [rsi + 8] - WORD $0x960f; BYTE $0xd0 // setbe al + LONG $0x4e100ff2; BYTE $0x08 // movsd xmm1, qword [rsi + 8] LONG $0x10c68348 // add rsi, 16 - WORD $0xd8f6 // neg al + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + LONG $0x000000b8; BYTE $0x00 // mov eax, 0 + WORD $0xff14 // adc al, -1 WORD $0xd830 // xor al, bl WORD $0xc980; BYTE $0x01 // or cl, 1 WORD $0x01b2 // mov dl, 1 @@ -49555,21 +51029,22 @@ LBB10_167: WORD $0xda30 // xor dl, bl LONG $0x3e148841 // mov byte [r14 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB10_167 + JNE LBB10_196 -LBB10_168: - LONG $0x01c0f641 // test r8b, 1 - JE LBB10_182 - LONG $0x062e0f66 // ucomisd xmm0, qword [rsi] - WORD $0x960f; BYTE $0xd0 // setbe al - JMP LBB10_180 +LBB10_197: + LONG $0x01c0f641 // test r8b, 1 + JE LBB10_201 + LONG $0x0e100ff2 // movsd xmm1, qword [rsi] + WORD $0xc031 // xor eax, eax + LONG $0xc82e0f66 // ucomisd xmm1, xmm0 + JMP LBB10_199 -LBB10_170: +LBB10_112: WORD $0x894d; BYTE $0xc1 // mov r9, r8 LONG $0xfee18349 // and r9, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d -LBB10_171: +LBB10_113: LONG $0x2e394466 // cmp word [rsi], r13w LONG $0x000000bf; BYTE $0x00 // mov edi, 0 LONG $0xffd78040 // adc dil, -1 @@ -49597,15 +51072,15 @@ LBB10_171: WORD $0xc330 // xor bl, al LONG $0x161c8841 // mov byte [r14 + rdx], bl WORD $0x394d; BYTE $0xd9 // cmp r9, r11 - JNE LBB10_171 + JNE LBB10_113 -LBB10_172: +LBB10_110: LONG $0x01c0f641 // test r8b, 1 - JE LBB10_182 + JE LBB10_201 WORD $0xc031 // xor eax, eax LONG $0x2e394466 // cmp word [rsi], r13w -LBB10_174: +LBB10_199: WORD $0xff14 // adc al, -1 WORD $0x894c; BYTE $0xda // mov rdx, r11 LONG $0x03eac148 // shr rdx, 3 @@ -49616,14 +51091,14 @@ LBB10_174: WORD $0xe3d2 // shl bl, cl WORD $0x3040; BYTE $0xf0 // xor al, sil WORD $0xc320 // and bl, al - JMP LBB10_181 + JMP LBB10_200 -LBB10_175: +LBB10_170: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0x3145; BYTE $0xdb // xor r11d, r11d -LBB10_176: +LBB10_171: WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 WORD $0x9d0f; BYTE $0xd0 // setge al WORD $0xd8f6 // neg al @@ -49651,17 +51126,15 @@ LBB10_176: WORD $0xda30 // xor dl, bl LONG $0x3e148841 // mov byte [r14 + rdi], dl WORD $0x394d; BYTE $0xda // cmp r10, r11 - JNE LBB10_176 + JNE LBB10_171 -LBB10_177: +LBB10_168: LONG $0x01c0f641 // test r8b, 1 - JE LBB10_182 + JE LBB10_201 WORD $0x394c; BYTE $0x2e // cmp qword [rsi], r13 -LBB10_179: +LBB10_152: WORD $0x9d0f; BYTE $0xd0 // setge al - -LBB10_180: WORD $0xd8f6 // neg al WORD $0x894c; BYTE $0xda // mov rdx, r11 LONG $0x03eac148 // shr rdx, 3 @@ -49673,21 +51146,21 @@ LBB10_180: WORD $0x3040; BYTE $0xf0 // xor al, sil WORD $0xc320 // and bl, al -LBB10_181: +LBB10_200: WORD $0x3040; BYTE $0xf3 // xor bl, sil LONG $0x161c8841 // mov byte [r14 + rdx], bl -LBB10_182: +LBB10_201: MOVQ 496(SP), SP RET -LBB10_183: +LBB10_135: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0xf631 // xor esi, esi QUAD $0x0000018824b48b44 // mov r14d, dword [rsp + 392] -LBB10_184: +LBB10_136: LONG $0x33394566 // cmp word [r11], r14w WORD $0x9d0f; BYTE $0xd3 // setge bl WORD $0xdbf6 // neg bl @@ -49715,11 +51188,11 @@ LBB10_184: WORD $0xd030 // xor al, dl LONG $0x3c048841 // mov byte [r12 + rdi], al WORD $0x3949; BYTE $0xf2 // cmp r10, rsi - JNE LBB10_184 + JNE LBB10_136 -LBB10_185: +LBB10_133: LONG $0x01c0f641 // test r8b, 1 - JE LBB10_182 + JE LBB10_201 LONG $0x8824848b; WORD $0x0001; BYTE $0x00 // mov eax, dword [rsp + 392] LONG $0x03394166 // cmp word [r11], ax WORD $0x9d0f; BYTE $0xd0 // setge al @@ -49735,53 +51208,57 @@ LBB10_185: WORD $0xc320 // and bl, al WORD $0x3040; BYTE $0xfb // xor bl, dil LONG $0x141c8841 // mov byte [r12 + rdx], bl - JMP LBB10_182 + JMP LBB10_201 -LBB10_187: +LBB10_193: WORD $0x894d; BYTE $0xc2 // mov r10, r8 LONG $0xfee28349 // and r10, -2 WORD $0xf631 // xor esi, esi WORD $0x894d; BYTE $0xfb // mov r11, r15 -LBB10_188: - LONG $0x1b2e0f44 // ucomiss xmm11, dword [rbx] - WORD $0x960f; BYTE $0xd2 // setbe dl - WORD $0xdaf6 // neg dl +LBB10_194: + LONG $0x00100ff3 // movss xmm0, dword [rax] + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x000000bb; BYTE $0x00 // mov ebx, 0 + WORD $0xd380; BYTE $0xff // adc bl, -1 WORD $0x8948; BYTE $0xf7 // mov rdi, rsi LONG $0x03efc148 // shr rdi, 3 LONG $0x0cb60f45; BYTE $0x3b // movzx r9d, byte [r11 + rdi] + WORD $0x3044; BYTE $0xcb // xor bl, r9b WORD $0xf189 // mov ecx, esi WORD $0xe180; BYTE $0x06 // and cl, 6 - WORD $0x01b0 // mov al, 1 - WORD $0xe0d2 // shl al, cl - WORD $0x3044; BYTE $0xca // xor dl, r9b - WORD $0xd020 // and al, dl - WORD $0x3044; BYTE $0xc8 // xor al, r9b - LONG $0x3b048841 // mov byte [r11 + rdi], al - LONG $0x02c68348 // add rsi, 2 - LONG $0x5b2e0f44; BYTE $0x04 // ucomiss xmm11, dword [rbx + 4] - LONG $0xd1960f41 // setbe r9b - LONG $0x08c38348 // add rbx, 8 - WORD $0xf641; BYTE $0xd9 // neg r9b - WORD $0x3041; BYTE $0xc1 // xor r9b, al - WORD $0xc980; BYTE $0x01 // or cl, 1 WORD $0x01b2 // mov dl, 1 WORD $0xe2d2 // shl dl, cl - WORD $0x2044; BYTE $0xca // and dl, r9b - WORD $0xc230 // xor dl, al + WORD $0xda20 // and dl, bl + WORD $0x3044; BYTE $0xca // xor dl, r9b LONG $0x3b148841 // mov byte [r11 + rdi], dl + LONG $0x02c68348 // add rsi, 2 + LONG $0x40100ff3; BYTE $0x04 // movss xmm0, dword [rax + 4] + LONG $0x08c08348 // add rax, 8 + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + LONG $0x000000bb; BYTE $0x00 // mov ebx, 0 + WORD $0xd380; BYTE $0xff // adc bl, -1 + WORD $0xd330 // xor bl, dl + WORD $0xc980; BYTE $0x01 // or cl, 1 + WORD $0x8949; BYTE $0xc1 // mov r9, rax + WORD $0x01b0 // mov al, 1 + WORD $0xe0d2 // shl al, cl + WORD $0xd820 // and al, bl + WORD $0xd030 // xor al, dl + LONG $0x3b048841 // mov byte [r11 + rdi], al + WORD $0x894c; BYTE $0xc8 // mov rax, r9 WORD $0x3949; BYTE $0xf2 // cmp r10, rsi - JNE LBB10_188 + JNE LBB10_194 -LBB10_189: +LBB10_191: LONG $0x01c0f641 // test r8b, 1 - JE LBB10_182 - LONG $0x1b2e0f44 // ucomiss xmm11, dword [rbx] - WORD $0x960f; BYTE $0xd0 // setbe al - WORD $0xd8f6 // neg al + JE LBB10_201 + LONG $0x00100ff3 // movss xmm0, dword [rax] + WORD $0xc031 // xor eax, eax + LONG $0xc32e0f41 // ucomiss xmm0, xmm11 + WORD $0xff14 // adc al, -1 WORD $0x8948; BYTE $0xf2 // mov rdx, rsi LONG $0x03eac148 // shr rdx, 3 - WORD $0x894d; BYTE $0xfe // mov r14, r15 LONG $0x173c8a41 // mov dil, byte [r15 + rdx] LONG $0x07e68040 // and sil, 7 WORD $0x01b3 // mov bl, 1 @@ -49791,17 +51268,17 @@ LBB10_189: WORD $0xc320 // and bl, al WORD $0x3040; BYTE $0xfb // xor bl, dil LONG $0x171c8841 // mov byte [r15 + rdx], bl - JMP LBB10_182 + JMP LBB10_201 -LBB10_191: +LBB10_85: LONG $0xf0e78349 // and r15, -16 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 WORD $0x0148; BYTE $0xf0 // add rax, rsi QUAD $0x0000017024848948 // mov qword [rsp + 368], rax - QUAD $0x000000a024bc894c // mov qword [rsp + 160], r15 + QUAD $0x000000f024bc894c // mov qword [rsp + 240], r15 LONG $0xbe048d4b // lea rax, [r14 + 4*r15] - LONG $0x24448948; BYTE $0x70 // mov qword [rsp + 112], rax + QUAD $0x0000009024848948 // mov qword [rsp + 144], rax LONG $0xc3b60f41 // movzx eax, r11b LONG $0xc86e0f66 // movd xmm1, eax LONG $0xc0ef0f66 // pxor xmm0, xmm0 @@ -49810,8 +51287,8 @@ LBB10_191: WORD $0x3145; BYTE $0xc0 // xor r8d, r8d QUAD $0x0000016024b4894c // mov qword [rsp + 352], r14 -LBB10_192: - QUAD $0x000001202484894c // mov qword [rsp + 288], r8 +LBB10_86: + QUAD $0x000001002484894c // mov qword [rsp + 256], r8 LONG $0x05e0c149 // shl r8, 5 WORD $0x894d; BYTE $0xc1 // mov r9, r8 WORD $0x894c; BYTE $0xc7 // mov rdi, r8 @@ -49836,12 +51313,12 @@ LBB10_192: LONG $0xf16e0f66 // movd xmm6, ecx LONG $0x4cb60f42; WORD $0x0506 // movzx ecx, byte [rsi + r8 + 5] LONG $0xc16e0f66 // movd xmm0, ecx - QUAD $0x00009024847f0f66; BYTE $0x00 // movdqa oword [rsp + 144], xmm0 + LONG $0x447f0f66; WORD $0x7024 // movdqa oword [rsp + 112], xmm0 LONG $0x4cb60f42; WORD $0x0606 // movzx ecx, byte [rsi + r8 + 6] LONG $0xf96e0f66 // movd xmm7, ecx LONG $0x4cb60f42; WORD $0x0706 // movzx ecx, byte [rsi + r8 + 7] LONG $0xc16e0f66 // movd xmm0, ecx - QUAD $0x00011024847f0f66; BYTE $0x00 // movdqa oword [rsp + 272], xmm0 + QUAD $0x00013024847f0f66; BYTE $0x00 // movdqa oword [rsp + 304], xmm0 LONG $0x4cb60f42; WORD $0x0806 // movzx ecx, byte [rsi + r8 + 8] LONG $0x6e0f4466; BYTE $0xe9 // movd xmm13, ecx LONG $0x4cb60f42; WORD $0x0906 // movzx ecx, byte [rsi + r8 + 9] @@ -49854,7 +51331,7 @@ LBB10_192: LONG $0x6e0f4466; BYTE $0xe1 // movd xmm12, ecx LONG $0x4cb60f42; WORD $0x1006 // movzx ecx, byte [rsi + r8 + 16] LONG $0x6e0f4466; BYTE $0xf1 // movd xmm14, ecx - QUAD $0x000000d02484894c // mov qword [rsp + 208], r8 + QUAD $0x000000c02484894c // mov qword [rsp + 192], r8 LONG $0x4cb60f42; WORD $0x1806 // movzx ecx, byte [rsi + r8 + 24] LONG $0xe96e0f66 // movd xmm5, ecx WORD $0x894c; BYTE $0xc1 // mov rcx, r8 @@ -49877,7 +51354,7 @@ LBB10_192: LONG $0x60ca8148; WORD $0x0001; BYTE $0x00 // or rdx, 352 LONG $0x24548948; BYTE $0x30 // mov qword [rsp + 48], rdx LONG $0x80ce8149; WORD $0x0001; BYTE $0x00 // or r14, 384 - QUAD $0x000000c024b4894c // mov qword [rsp + 192], r14 + QUAD $0x000000b024b4894c // mov qword [rsp + 176], r14 LONG $0xa0cf8148; WORD $0x0001; BYTE $0x00 // or rdi, 416 LONG $0x247c8948; BYTE $0x60 // mov qword [rsp + 96], rdi WORD $0x894c; BYTE $0xc7 // mov rdi, r8 @@ -49902,7 +51379,7 @@ LBB10_192: QUAD $0x0d2e0c203a0f4666 // pinsrb xmm9, byte [rsi + r13], 13 LONG $0x244c8b48; BYTE $0x10 // mov rcx, qword [rsp + 16] QUAD $0x0e0e0c203a0f4466 // pinsrb xmm9, byte [rsi + rcx], 14 - QUAD $0x000000e024bc8948 // mov qword [rsp + 224], rdi + QUAD $0x000000d024bc8948 // mov qword [rsp + 208], rdi QUAD $0x0f3e0c203a0f4466 // pinsrb xmm9, byte [rsi + rdi], 15 QUAD $0x014024bc6f0f4466; WORD $0x0000 // movdqa xmm15, oword [rsp + 320] LONG $0x6f0f4566; BYTE $0xdf // movdqa xmm11, xmm15 @@ -49981,7 +51458,7 @@ LBB10_192: LONG $0x244c8b48; BYTE $0x10 // mov rcx, qword [rsp + 16] QUAD $0x0e040e74203a0f66 // pinsrb xmm6, byte [rsi + rcx + 4], 14 QUAD $0x0f043e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 4], 15 - QUAD $0x000090249c6f0f66; BYTE $0x00 // movdqa xmm3, oword [rsp + 144] + LONG $0x5c6f0f66; WORD $0x7024 // movdqa xmm3, oword [rsp + 112] LONG $0x244c8b48; BYTE $0x50 // mov rcx, qword [rsp + 80] QUAD $0x01050e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 5], 1 QUAD $0x052e5c203a0f4266; BYTE $0x02 // pinsrb xmm3, byte [rsi + r13 + 5], 2 @@ -50000,7 +51477,7 @@ LBB10_192: LONG $0x244c8b48; BYTE $0x10 // mov rcx, qword [rsp + 16] QUAD $0x0e050e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 5], 14 QUAD $0x0f053e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 5], 15 - QUAD $0x000090249c7f0f66; BYTE $0x00 // movdqa oword [rsp + 144], xmm3 + LONG $0x5c7f0f66; WORD $0x7024 // movdqa oword [rsp + 112], xmm3 LONG $0x247c8b48; BYTE $0x50 // mov rdi, qword [rsp + 80] QUAD $0x01063e7c203a0f66 // pinsrb xmm7, byte [rsi + rdi + 6], 1 WORD $0x894c; BYTE $0xe9 // mov rcx, r13 @@ -50033,7 +51510,7 @@ LBB10_192: LONG $0x244c8b48; BYTE $0x10 // mov rcx, qword [rsp + 16] QUAD $0x080e6c203a0f4466; BYTE $0x0e // pinsrb xmm13, byte [rsi + rcx + 8], 14 LONG $0x640f4566; BYTE $0xd9 // pcmpgtb xmm11, xmm9 - QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] + QUAD $0x000000d024bc8b48 // mov rdi, qword [rsp + 208] QUAD $0x083e6c203a0f4466; BYTE $0x0f // pinsrb xmm13, byte [rsi + rdi + 8], 15 LONG $0x6f0f4566; BYTE $0xcf // movdqa xmm9, xmm15 LONG $0x640f4566; BYTE $0xcd // pcmpgtb xmm9, xmm13 @@ -50042,11 +51519,11 @@ LBB10_192: QUAD $0x100e74203a0f4466; BYTE $0x02 // pinsrb xmm14, byte [rsi + rcx + 16], 2 QUAD $0x100e74203a0f4666; BYTE $0x03 // pinsrb xmm14, byte [rsi + r9 + 16], 3 WORD $0x894d; BYTE $0xce // mov r14, r9 - QUAD $0x000000b0248c894c // mov qword [rsp + 176], r9 + QUAD $0x000000a0248c894c // mov qword [rsp + 160], r9 QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] QUAD $0x100e74203a0f4466; BYTE $0x04 // pinsrb xmm14, byte [rsi + rcx + 16], 4 QUAD $0x102674203a0f4666; BYTE $0x05 // pinsrb xmm14, byte [rsi + r12 + 16], 5 - QUAD $0x000000f024a4894c // mov qword [rsp + 240], r12 + QUAD $0x000000e024a4894c // mov qword [rsp + 224], r12 QUAD $0x103e74203a0f4666; BYTE $0x06 // pinsrb xmm14, byte [rsi + r15 + 16], 6 QUAD $0x101e74203a0f4466; BYTE $0x07 // pinsrb xmm14, byte [rsi + rbx + 16], 7 QUAD $0x101e74203a0f4666; BYTE $0x08 // pinsrb xmm14, byte [rsi + r11 + 16], 8 @@ -50054,7 +51531,7 @@ LBB10_192: QUAD $0x100674203a0f4466; BYTE $0x0a // pinsrb xmm14, byte [rsi + rax + 16], 10 WORD $0x8949; BYTE $0xc1 // mov r9, rax QUAD $0x101674203a0f4466; BYTE $0x0b // pinsrb xmm14, byte [rsi + rdx + 16], 11 - QUAD $0x000000c024948b48 // mov rdx, qword [rsp + 192] + QUAD $0x000000b024948b48 // mov rdx, qword [rsp + 176] QUAD $0x101674203a0f4466; BYTE $0x0c // pinsrb xmm14, byte [rsi + rdx + 16], 12 QUAD $0x100674203a0f4666; BYTE $0x0d // pinsrb xmm14, byte [rsi + r8 + 16], 13 LONG $0x246c8b4c; BYTE $0x10 // mov r13, qword [rsp + 16] @@ -50081,13 +51558,13 @@ LBB10_192: QUAD $0x182e6c203a0f4266; BYTE $0x0e // pinsrb xmm5, byte [rsi + r13 + 24], 14 QUAD $0x0f183e6c203a0f66 // pinsrb xmm5, byte [rsi + rdi + 24], 15 LONG $0x640f4166; BYTE $0xde // pcmpgtb xmm3, xmm14 - QUAD $0x000130249c7f0f66; BYTE $0x00 // movdqa oword [rsp + 304], xmm3 + QUAD $0x000150249c7f0f66; BYTE $0x00 // movdqa oword [rsp + 336], xmm3 LONG $0x6f0f4166; BYTE $0xdf // movdqa xmm3, xmm15 LONG $0xdd640f66 // pcmpgtb xmm3, xmm5 - QUAD $0x000100249c7f0f66; BYTE $0x00 // movdqa oword [rsp + 256], xmm3 + QUAD $0x000120249c7f0f66; BYTE $0x00 // movdqa oword [rsp + 288], xmm3 LONG $0x6f0f4166; BYTE $0xef // movdqa xmm5, xmm15 LONG $0xea640f66 // pcmpgtb xmm5, xmm2 - QUAD $0x000000d0248c8b48 // mov rcx, qword [rsp + 208] + QUAD $0x000000c0248c8b48 // mov rcx, qword [rsp + 192] LONG $0x0e54b60f; BYTE $0x0d // movzx edx, byte [rsi + rcx + 13] LONG $0xd26e0f66 // movd xmm2, edx QUAD $0x06067c203a0f4266; BYTE $0x0d // pinsrb xmm7, byte [rsi + r8 + 6], 13 @@ -50120,7 +51597,7 @@ LBB10_192: LONG $0xe8f80f66 // psubb xmm5, xmm0 LONG $0xeb0f4466; BYTE $0xf5 // por xmm14, xmm5 LONG $0x6f0f4166; BYTE $0xef // movdqa xmm5, xmm15 - QUAD $0x00009024ac640f66; BYTE $0x00 // pcmpgtb xmm5, oword [rsp + 144] + LONG $0x6c640f66; WORD $0x7024 // pcmpgtb xmm5, oword [rsp + 112] LONG $0x6f0f4566; BYTE $0xef // movdqa xmm13, xmm15 LONG $0x6f0f4566; BYTE $0xdf // movdqa xmm11, xmm15 LONG $0x640f4466; BYTE $0xef // pcmpgtb xmm13, xmm7 @@ -50133,16 +51610,16 @@ LBB10_192: LONG $0xeb0f4466; BYTE $0xed // por xmm13, xmm5 LONG $0x0e54b60f; BYTE $0x13 // movzx edx, byte [rsi + rcx + 19] LONG $0x6e0f4466; BYTE $0xfa // movd xmm15, edx - QUAD $0x00011024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 272] + QUAD $0x00013024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 304] LONG $0x247c8b48; BYTE $0x50 // mov rdi, qword [rsp + 80] QUAD $0x01073e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 7], 1 LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] QUAD $0x02070644203a0f66 // pinsrb xmm0, byte [rsi + rax + 7], 2 - QUAD $0x000000b0248c8b48 // mov rcx, qword [rsp + 176] + QUAD $0x000000a0248c8b48 // mov rcx, qword [rsp + 160] QUAD $0x03070e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 7], 3 QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x04070644203a0f66 // pinsrb xmm0, byte [rsi + rax + 7], 4 - QUAD $0x000000f024bc8b4c // mov r15, qword [rsp + 240] + QUAD $0x000000e024bc8b4c // mov r15, qword [rsp + 224] QUAD $0x073e44203a0f4266; BYTE $0x05 // pinsrb xmm0, byte [rsi + r15 + 7], 5 QUAD $0x073644203a0f4266; BYTE $0x06 // pinsrb xmm0, byte [rsi + r14 + 7], 6 QUAD $0x07071e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 7], 7 @@ -50151,11 +51628,11 @@ LBB10_192: QUAD $0x070e44203a0f4266; BYTE $0x0a // pinsrb xmm0, byte [rsi + r9 + 7], 10 LONG $0x24548b48; BYTE $0x30 // mov rdx, qword [rsp + 48] QUAD $0x0b071644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 7], 11 - QUAD $0x000000c024948b48 // mov rdx, qword [rsp + 192] + QUAD $0x000000b024948b48 // mov rdx, qword [rsp + 176] QUAD $0x0c071644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 7], 12 QUAD $0x070644203a0f4266; BYTE $0x0d // pinsrb xmm0, byte [rsi + r8 + 7], 13 QUAD $0x072e44203a0f4266; BYTE $0x0e // pinsrb xmm0, byte [rsi + r13 + 7], 14 - QUAD $0x000000e024a48b4c // mov r12, qword [rsp + 224] + QUAD $0x000000d024a48b4c // mov r12, qword [rsp + 208] QUAD $0x072644203a0f4266; BYTE $0x0f // pinsrb xmm0, byte [rsi + r12 + 7], 15 QUAD $0x093e44203a0f4466; BYTE $0x01 // pinsrb xmm8, byte [rsi + rdi + 9], 1 LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] @@ -50313,7 +51790,7 @@ LBB10_192: QUAD $0x121e7c203a0f4266; BYTE $0x08 // pinsrb xmm7, byte [rsi + r11 + 18], 8 QUAD $0x12167c203a0f4266; BYTE $0x09 // pinsrb xmm7, byte [rsi + r10 + 18], 9 QUAD $0x120e7c203a0f4266; BYTE $0x0a // pinsrb xmm7, byte [rsi + r9 + 18], 10 - QUAD $0x00000150248c894c // mov qword [rsp + 336], r9 + QUAD $0x00000110248c894c // mov qword [rsp + 272], r9 LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] QUAD $0x0b123e7c203a0f66 // pinsrb xmm7, byte [rsi + rdi + 18], 11 QUAD $0x0c12167c203a0f66 // pinsrb xmm7, byte [rsi + rdx + 18], 12 @@ -50327,7 +51804,7 @@ LBB10_192: QUAD $0x132e7c203a0f4666; BYTE $0x02 // pinsrb xmm15, byte [rsi + r13 + 19], 2 QUAD $0x130e7c203a0f4466; BYTE $0x03 // pinsrb xmm15, byte [rsi + rcx + 19], 3 QUAD $0x13067c203a0f4466; BYTE $0x04 // pinsrb xmm15, byte [rsi + rax + 19], 4 - QUAD $0x000000f0248c8b48 // mov rcx, qword [rsp + 240] + QUAD $0x000000e0248c8b48 // mov rcx, qword [rsp + 224] QUAD $0x130e7c203a0f4466; BYTE $0x05 // pinsrb xmm15, byte [rsi + rcx + 19], 5 QUAD $0x13367c203a0f4666; BYTE $0x06 // pinsrb xmm15, byte [rsi + r14 + 19], 6 QUAD $0x131e7c203a0f4466; BYTE $0x07 // pinsrb xmm15, byte [rsi + rbx + 19], 7 @@ -50340,11 +51817,11 @@ LBB10_192: LONG $0x456f0f66; BYTE $0x60 // movdqa xmm0, oword 96[rbp] /* [rip + .LCPI10_6] */ LONG $0xe8df0f66 // pandn xmm5, xmm0 LONG $0xeb0f4166; BYTE $0xed // por xmm5, xmm13 - QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x000000c024848b48 // mov rax, qword [rsp + 192] LONG $0x0654b60f; BYTE $0x14 // movzx edx, byte [rsi + rax + 20] LONG $0xc26e0f66 // movd xmm0, edx LONG $0xeb0f4166; BYTE $0xee // por xmm5, xmm14 - QUAD $0x00009024ac7f0f66; BYTE $0x00 // movdqa oword [rsp + 144], xmm5 + LONG $0x6c7f0f66; WORD $0x7024 // movdqa oword [rsp + 112], xmm5 LONG $0x6f0f4566; BYTE $0xeb // movdqa xmm13, xmm11 LONG $0x640f4566; BYTE $0xe8 // pcmpgtb xmm13, xmm8 LONG $0x0654b60f; BYTE $0x15 // movzx edx, byte [rsi + rax + 21] @@ -50398,7 +51875,7 @@ LBB10_192: LONG $0x0654b60f; BYTE $0x1d // movzx edx, byte [rsi + rax + 29] LONG $0xda6e0f66 // movd xmm3, edx QUAD $0x0001009ddf0f4466; BYTE $0x00 // pandn xmm11, oword 256[rbp] /* [rip + .LCPI10_16] */ - QUAD $0x0130249cfc0f4466; WORD $0x0000 // paddb xmm11, oword [rsp + 304] + QUAD $0x0150249cfc0f4466; WORD $0x0000 // paddb xmm11, oword [rsp + 336] LONG $0xcc6f0f66 // movdqa xmm1, xmm4 LONG $0xcf640f66 // pcmpgtb xmm1, xmm7 LONG $0x6f0f4466; BYTE $0xec // movdqa xmm13, xmm4 @@ -50434,7 +51911,7 @@ LBB10_192: QUAD $0x1d2e5c203a0f4266; BYTE $0x02 // pinsrb xmm3, byte [rsi + r13 + 29], 2 QUAD $0x1e2e64203a0f4266; BYTE $0x02 // pinsrb xmm4, byte [rsi + r13 + 30], 2 QUAD $0x1f2e7c203a0f4666; BYTE $0x02 // pinsrb xmm15, byte [rsi + r13 + 31], 2 - QUAD $0x000000b024948b48 // mov rdx, qword [rsp + 176] + QUAD $0x000000a024948b48 // mov rdx, qword [rsp + 160] QUAD $0x03141644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 20], 3 QUAD $0x151644203a0f4466; BYTE $0x03 // pinsrb xmm8, byte [rsi + rdx + 21], 3 QUAD $0x161654203a0f4466; BYTE $0x03 // pinsrb xmm10, byte [rsi + rdx + 22], 3 @@ -50480,7 +51957,6 @@ LBB10_192: QUAD $0x1d365c203a0f4266; BYTE $0x06 // pinsrb xmm3, byte [rsi + r14 + 29], 6 QUAD $0x1e3664203a0f4266; BYTE $0x06 // pinsrb xmm4, byte [rsi + r14 + 30], 6 QUAD $0x1f367c203a0f4666; BYTE $0x06 // pinsrb xmm15, byte [rsi + r14 + 31], 6 - QUAD $0x0000016024b48b4c // mov r14, qword [rsp + 352] QUAD $0x07141e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 20], 7 QUAD $0x151e44203a0f4466; BYTE $0x07 // pinsrb xmm8, byte [rsi + rbx + 21], 7 QUAD $0x161e54203a0f4466; BYTE $0x07 // pinsrb xmm10, byte [rsi + rbx + 22], 7 @@ -50514,7 +51990,7 @@ LBB10_192: QUAD $0x1d165c203a0f4266; BYTE $0x09 // pinsrb xmm3, byte [rsi + r10 + 29], 9 QUAD $0x1e1664203a0f4266; BYTE $0x09 // pinsrb xmm4, byte [rsi + r10 + 30], 9 QUAD $0x1f167c203a0f4666; BYTE $0x09 // pinsrb xmm15, byte [rsi + r10 + 31], 9 - QUAD $0x0000015024948b4c // mov r10, qword [rsp + 336] + QUAD $0x0000011024948b4c // mov r10, qword [rsp + 272] QUAD $0x141644203a0f4266; BYTE $0x0a // pinsrb xmm0, byte [rsi + r10 + 20], 10 QUAD $0x151644203a0f4666; BYTE $0x0a // pinsrb xmm8, byte [rsi + r10 + 21], 10 QUAD $0x161654203a0f4666; BYTE $0x0a // pinsrb xmm10, byte [rsi + r10 + 22], 10 @@ -50606,7 +52082,7 @@ LBB10_192: LONG $0x6f0f4166; BYTE $0xc8 // movdqa xmm1, xmm8 LONG $0x640f4166; BYTE $0xc9 // pcmpgtb xmm1, xmm9 QUAD $0x000001008ddf0f66 // pandn xmm1, oword 256[rbp] /* [rip + .LCPI10_16] */ - QUAD $0x000100248cfc0f66; BYTE $0x00 // paddb xmm1, oword [rsp + 256] + QUAD $0x000120248cfc0f66; BYTE $0x00 // paddb xmm1, oword [rsp + 288] LONG $0x6f0f4166; BYTE $0xe8 // movdqa xmm5, xmm8 LONG $0x640f4166; BYTE $0xec // pcmpgtb xmm5, xmm12 LONG $0x6f0f4166; BYTE $0xf8 // movdqa xmm7, xmm8 @@ -50626,6 +52102,7 @@ LBB10_192: LONG $0x6f0f4166; BYTE $0xd8 // movdqa xmm3, xmm8 LONG $0xdc640f66 // pcmpgtb xmm3, xmm4 QUAD $0x1f267c203a0f4666; BYTE $0x0f // pinsrb xmm15, byte [rsi + r12 + 31], 15 + QUAD $0x0000016024b48b4c // mov r14, qword [rsp + 352] LONG $0xdf0f4166; BYTE $0xca // pandn xmm1, xmm10 LONG $0xdf0f4166; BYTE $0xdb // pandn xmm3, xmm11 LONG $0xd9eb0f66 // por xmm3, xmm1 @@ -50636,7 +52113,7 @@ LBB10_192: LONG $0xcaeb0f66 // por xmm1, xmm2 LONG $0xd06f0f66 // movdqa xmm2, xmm0 LONG $0xd1600f66 // punpcklbw xmm2, xmm1 - QUAD $0x00009024ac6f0f66; BYTE $0x00 // movdqa xmm5, oword [rsp + 144] + LONG $0x6c6f0f66; WORD $0x7024 // movdqa xmm5, oword [rsp + 112] LONG $0xdd6f0f66 // movdqa xmm3, xmm5 LONG $0x600f4166; BYTE $0xde // punpcklbw xmm3, xmm14 LONG $0xe36f0f66 // movdqa xmm4, xmm3 @@ -50647,24 +52124,24 @@ LBB10_192: LONG $0xcd6f0f66 // movdqa xmm1, xmm5 LONG $0xc8610f66 // punpcklwd xmm1, xmm0 LONG $0xe8690f66 // punpckhwd xmm5, xmm0 - QUAD $0x00000120248c8b48 // mov rcx, qword [rsp + 288] + QUAD $0x00000100248c8b48 // mov rcx, qword [rsp + 256] LONG $0x7f0f41f3; WORD $0x8e6c; BYTE $0x30 // movdqu oword [r14 + 4*rcx + 48], xmm5 LONG $0x7f0f41f3; WORD $0x8e4c; BYTE $0x20 // movdqu oword [r14 + 4*rcx + 32], xmm1 LONG $0x7f0f41f3; WORD $0x8e5c; BYTE $0x10 // movdqu oword [r14 + 4*rcx + 16], xmm3 LONG $0x7f0f41f3; WORD $0x8e24 // movdqu oword [r14 + 4*rcx], xmm4 LONG $0x10c18348 // add rcx, 16 WORD $0x8949; BYTE $0xc8 // mov r8, rcx - QUAD $0x000000a0248c3b48 // cmp rcx, qword [rsp + 160] - JNE LBB10_192 + QUAD $0x000000f0248c3b48 // cmp rcx, qword [rsp + 240] + JNE LBB10_86 QUAD $0x000001b024bc8b4c // mov r15, qword [rsp + 432] - QUAD $0x000000a024bc3b4c // cmp r15, qword [rsp + 160] + QUAD $0x000000f024bc3b4c // cmp r15, qword [rsp + 240] LONG $0x245c8a44; BYTE $0x08 // mov r11b, byte [rsp + 8] QUAD $0x0000017024b48b48 // mov rsi, qword [rsp + 368] LONG $0x24548b4c; BYTE $0x48 // mov r10, qword [rsp + 72] - JNE LBB10_42 - JMP LBB10_128 + JNE LBB10_88 + JMP LBB10_91 -LBB10_194: +LBB10_66: LONG $0xf0e78349 // and r15, -16 WORD $0x894c; BYTE $0xf8 // mov rax, r15 LONG $0x05e0c148 // shl rax, 5 @@ -50672,256 +52149,265 @@ LBB10_194: QUAD $0x0000018824848948 // mov qword [rsp + 392], rax QUAD $0x000001a024bc894c // mov qword [rsp + 416], r15 LONG $0xbe048d4b // lea rax, [r14 + 4*r15] - QUAD $0x000000d024848948 // mov qword [rsp + 208], rax + QUAD $0x000000e024848948 // mov qword [rsp + 224], rax LONG $0xc3b60f41 // movzx eax, r11b LONG $0xc86e0f66 // movd xmm1, eax LONG $0xc0ef0f66 // pxor xmm0, xmm0 LONG $0x00380f66; BYTE $0xc8 // pshufb xmm1, xmm0 QUAD $0x000190248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 400], xmm1 - WORD $0xd231 // xor edx, edx + WORD $0xc031 // xor eax, eax QUAD $0x0000016024b4894c // mov qword [rsp + 352], r14 -LBB10_195: - QUAD $0x0000015024948948 // mov qword [rsp + 336], rdx - LONG $0x05e2c148 // shl rdx, 5 - WORD $0x8948; BYTE $0xd3 // mov rbx, rdx - WORD $0x8949; BYTE $0xd3 // mov r11, rdx - WORD $0x8949; BYTE $0xd4 // mov r12, rdx - QUAD $0x0000009024948948 // mov qword [rsp + 144], rdx - WORD $0x8949; BYTE $0xd0 // mov r8, rdx - WORD $0x8949; BYTE $0xd5 // mov r13, rdx - WORD $0x8949; BYTE $0xd1 // mov r9, rdx - WORD $0x8949; BYTE $0xd2 // mov r10, rdx - WORD $0x8949; BYTE $0xd6 // mov r14, rdx - WORD $0x8948; BYTE $0xd7 // mov rdi, rdx - WORD $0x8949; BYTE $0xd7 // mov r15, rdx - LONG $0x160cb60f // movzx ecx, byte [rsi + rdx] +LBB10_67: + WORD $0x8949; BYTE $0xc1 // mov r9, rax + QUAD $0x0000015024848948 // mov qword [rsp + 336], rax + LONG $0x05e1c149 // shl r9, 5 + WORD $0x894c; BYTE $0xcb // mov rbx, r9 + WORD $0x894c; BYTE $0xcf // mov rdi, r9 + WORD $0x894c; BYTE $0xca // mov rdx, r9 + LONG $0x244c894c; BYTE $0x30 // mov qword [rsp + 48], r9 + WORD $0x894d; BYTE $0xce // mov r14, r9 + WORD $0x894d; BYTE $0xc8 // mov r8, r9 + WORD $0x894d; BYTE $0xca // mov r10, r9 + WORD $0x894d; BYTE $0xcc // mov r12, r9 + WORD $0x894d; BYTE $0xcb // mov r11, r9 + WORD $0x894d; BYTE $0xcd // mov r13, r9 + QUAD $0x000000d0248c894c // mov qword [rsp + 208], r9 + LONG $0x0cb60f42; BYTE $0x0e // movzx ecx, byte [rsi + r9] LONG $0xc16e0f66 // movd xmm0, ecx - LONG $0x164cb60f; BYTE $0x01 // movzx ecx, byte [rsi + rdx + 1] + LONG $0x4cb60f42; WORD $0x010e // movzx ecx, byte [rsi + r9 + 1] LONG $0x6e0f4466; BYTE $0xd9 // movd xmm11, ecx - LONG $0x164cb60f; BYTE $0x02 // movzx ecx, byte [rsi + rdx + 2] + LONG $0x4cb60f42; WORD $0x020e // movzx ecx, byte [rsi + r9 + 2] LONG $0x6e0f4466; BYTE $0xf1 // movd xmm14, ecx - LONG $0x164cb60f; BYTE $0x03 // movzx ecx, byte [rsi + rdx + 3] + LONG $0x4cb60f42; WORD $0x030e // movzx ecx, byte [rsi + r9 + 3] LONG $0xe96e0f66 // movd xmm5, ecx - LONG $0x164cb60f; BYTE $0x04 // movzx ecx, byte [rsi + rdx + 4] + LONG $0x4cb60f42; WORD $0x040e // movzx ecx, byte [rsi + r9 + 4] LONG $0xd96e0f66 // movd xmm3, ecx - LONG $0x164cb60f; BYTE $0x05 // movzx ecx, byte [rsi + rdx + 5] + LONG $0x4cb60f42; WORD $0x050e // movzx ecx, byte [rsi + r9 + 5] LONG $0xc96e0f66 // movd xmm1, ecx - LONG $0x164cb60f; BYTE $0x06 // movzx ecx, byte [rsi + rdx + 6] + LONG $0x4cb60f42; WORD $0x060e // movzx ecx, byte [rsi + r9 + 6] LONG $0xe16e0f66 // movd xmm4, ecx - LONG $0x164cb60f; BYTE $0x07 // movzx ecx, byte [rsi + rdx + 7] + LONG $0x4cb60f42; WORD $0x070e // movzx ecx, byte [rsi + r9 + 7] LONG $0xd16e0f66 // movd xmm2, ecx - QUAD $0x00017024947f0f66; BYTE $0x00 // movdqa oword [rsp + 368], xmm2 - LONG $0x164cb60f; BYTE $0x08 // movzx ecx, byte [rsi + rdx + 8] + QUAD $0x00014024947f0f66; BYTE $0x00 // movdqa oword [rsp + 320], xmm2 + LONG $0x4cb60f42; WORD $0x080e // movzx ecx, byte [rsi + r9 + 8] LONG $0x6e0f4466; BYTE $0xe9 // movd xmm13, ecx - LONG $0x164cb60f; BYTE $0x09 // movzx ecx, byte [rsi + rdx + 9] + LONG $0x4cb60f42; WORD $0x090e // movzx ecx, byte [rsi + r9 + 9] LONG $0xd16e0f66 // movd xmm2, ecx - QUAD $0x0000a024947f0f66; BYTE $0x00 // movdqa oword [rsp + 160], xmm2 - LONG $0x164cb60f; BYTE $0x0a // movzx ecx, byte [rsi + rdx + 10] + QUAD $0x00011024947f0f66; BYTE $0x00 // movdqa oword [rsp + 272], xmm2 + LONG $0x4cb60f42; WORD $0x0a0e // movzx ecx, byte [rsi + r9 + 10] LONG $0x6e0f4466; BYTE $0xc1 // movd xmm8, ecx - LONG $0x164cb60f; BYTE $0x0b // movzx ecx, byte [rsi + rdx + 11] + LONG $0x4cb60f42; WORD $0x0b0e // movzx ecx, byte [rsi + r9 + 11] LONG $0x6e0f4466; BYTE $0xd1 // movd xmm10, ecx - LONG $0x164cb60f; BYTE $0x0c // movzx ecx, byte [rsi + rdx + 12] + LONG $0x4cb60f42; WORD $0x0c0e // movzx ecx, byte [rsi + r9 + 12] LONG $0xf16e0f66 // movd xmm6, ecx - LONG $0x164cb60f; BYTE $0x10 // movzx ecx, byte [rsi + rdx + 16] + LONG $0x4cb60f42; WORD $0x100e // movzx ecx, byte [rsi + r9 + 16] LONG $0x6e0f4466; BYTE $0xe1 // movd xmm12, ecx - LONG $0x164cb60f; BYTE $0x18 // movzx ecx, byte [rsi + rdx + 24] + LONG $0x4cb60f42; WORD $0x180e // movzx ecx, byte [rsi + r9 + 24] LONG $0xd16e0f66 // movd xmm2, ecx - QUAD $0x0000008024948948 // mov qword [rsp + 128], rdx - WORD $0x8948; BYTE $0xd0 // mov rax, rdx - LONG $0x20c88348 // or rax, 32 - LONG $0x24448948; BYTE $0x20 // mov qword [rsp + 32], rax + QUAD $0x00000090248c894c // mov qword [rsp + 144], r9 + WORD $0x894d; BYTE $0xcf // mov r15, r9 + LONG $0x20cf8349 // or r15, 32 + LONG $0x247c894c; BYTE $0x50 // mov qword [rsp + 80], r15 LONG $0x40cb8348 // or rbx, 64 - LONG $0x60cb8349 // or r11, 96 - QUAD $0x00000120249c894c // mov qword [rsp + 288], r11 - LONG $0x80cc8149; WORD $0x0000; BYTE $0x00 // or r12, 128 - LONG $0x2464894c; BYTE $0x60 // mov qword [rsp + 96], r12 - QUAD $0x00000090248c8148; LONG $0x000000a0 // or qword [rsp + 144], 160 - LONG $0xc0c88149; WORD $0x0000; BYTE $0x00 // or r8, 192 - LONG $0xe0cd8149; WORD $0x0000; BYTE $0x00 // or r13, 224 - QUAD $0x0000013024ac894c // mov qword [rsp + 304], r13 - LONG $0x00c98149; WORD $0x0001; BYTE $0x00 // or r9, 256 - LONG $0x20ca8149; WORD $0x0001; BYTE $0x00 // or r10, 288 - QUAD $0x000001102494894c // mov qword [rsp + 272], r10 - LONG $0x40ce8149; WORD $0x0001; BYTE $0x00 // or r14, 320 - LONG $0x60cf8148; WORD $0x0001; BYTE $0x00 // or rdi, 352 - LONG $0x247c8948; BYTE $0x50 // mov qword [rsp + 80], rdi - LONG $0x80cf8149; WORD $0x0001; BYTE $0x00 // or r15, 384 - WORD $0x8948; BYTE $0xd0 // mov rax, rdx + QUAD $0x00000080249c8948 // mov qword [rsp + 128], rbx + LONG $0x60cf8348 // or rdi, 96 + QUAD $0x000000c024bc8948 // mov qword [rsp + 192], rdi + LONG $0x80ca8148; WORD $0x0000; BYTE $0x00 // or rdx, 128 + LONG $0x24548948; BYTE $0x70 // mov qword [rsp + 112], rdx + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] + LONG $0xa0c98148; WORD $0x0000; BYTE $0x00 // or rcx, 160 + LONG $0xc0ce8149; WORD $0x0000; BYTE $0x00 // or r14, 192 + LONG $0xe0c88149; WORD $0x0000; BYTE $0x00 // or r8, 224 + LONG $0x00ca8149; WORD $0x0001; BYTE $0x00 // or r10, 256 + LONG $0x20cc8149; WORD $0x0001; BYTE $0x00 // or r12, 288 + LONG $0x40cb8149; WORD $0x0001; BYTE $0x00 // or r11, 320 + LONG $0x60cd8149; WORD $0x0001; BYTE $0x00 // or r13, 352 + QUAD $0x000000a024ac894c // mov qword [rsp + 160], r13 + QUAD $0x000000d024ac8b4c // mov r13, qword [rsp + 208] + LONG $0x80cd8149; WORD $0x0001; BYTE $0x00 // or r13, 384 + QUAD $0x000000d024ac894c // mov qword [rsp + 208], r13 + WORD $0x894c; BYTE $0xc8 // mov rax, r9 LONG $0x01a00d48; WORD $0x0000 // or rax, 416 - WORD $0x8948; BYTE $0xd1 // mov rcx, rdx - LONG $0x24548948; BYTE $0x10 // mov qword [rsp + 16], rdx - QUAD $0x0001c010244c8148; BYTE $0x00 // or qword [rsp + 16], 448 - LONG $0xe0ca8148; WORD $0x0001; BYTE $0x00 // or rdx, 480 - LONG $0x24548948; BYTE $0x30 // mov qword [rsp + 48], rdx - LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] - LONG $0x203a0f66; WORD $0x0e04; BYTE $0x01 // pinsrb xmm0, byte [rsi + rcx], 1 + LONG $0x24448948; BYTE $0x60 // mov qword [rsp + 96], rax + WORD $0x894c; BYTE $0xc8 // mov rax, r9 + LONG $0x01c00d48; WORD $0x0000 // or rax, 448 + LONG $0x24448948; BYTE $0x10 // mov qword [rsp + 16], rax + WORD $0x894c; BYTE $0xc8 // mov rax, r9 + LONG $0x01e00d48; WORD $0x0000 // or rax, 480 + LONG $0x24448948; BYTE $0x20 // mov qword [rsp + 32], rax + QUAD $0x013e04203a0f4266 // pinsrb xmm0, byte [rsi + r15], 1 LONG $0x203a0f66; WORD $0x1e04; BYTE $0x02 // pinsrb xmm0, byte [rsi + rbx], 2 - QUAD $0x031e04203a0f4266 // pinsrb xmm0, byte [rsi + r11], 3 - QUAD $0x042604203a0f4266 // pinsrb xmm0, byte [rsi + r12], 4 - QUAD $0x00000090249c8b4c // mov r11, qword [rsp + 144] - QUAD $0x051e04203a0f4266 // pinsrb xmm0, byte [rsi + r11], 5 - WORD $0x894c; BYTE $0xc2 // mov rdx, r8 - QUAD $0x060604203a0f4266 // pinsrb xmm0, byte [rsi + r8], 6 - QUAD $0x072e04203a0f4266 // pinsrb xmm0, byte [rsi + r13], 7 - QUAD $0x080e04203a0f4266 // pinsrb xmm0, byte [rsi + r9], 8 - WORD $0x894d; BYTE $0xc8 // mov r8, r9 - QUAD $0x000000e0248c894c // mov qword [rsp + 224], r9 - QUAD $0x091604203a0f4266 // pinsrb xmm0, byte [rsi + r10], 9 - WORD $0x894d; BYTE $0xf1 // mov r9, r14 - QUAD $0x0a3604203a0f4266 // pinsrb xmm0, byte [rsi + r14], 10 - LONG $0x203a0f66; WORD $0x3e04; BYTE $0x0b // pinsrb xmm0, byte [rsi + rdi], 11 - QUAD $0x0c3e04203a0f4266 // pinsrb xmm0, byte [rsi + r15], 12 - LONG $0x203a0f66; WORD $0x0604; BYTE $0x0d // pinsrb xmm0, byte [rsi + rax], 13 + LONG $0x203a0f66; WORD $0x3e04; BYTE $0x03 // pinsrb xmm0, byte [rsi + rdi], 3 + LONG $0x203a0f66; WORD $0x1604; BYTE $0x04 // pinsrb xmm0, byte [rsi + rdx], 4 + LONG $0x244c8948; BYTE $0x30 // mov qword [rsp + 48], rcx + LONG $0x203a0f66; WORD $0x0e04; BYTE $0x05 // pinsrb xmm0, byte [rsi + rcx], 5 + QUAD $0x063604203a0f4266 // pinsrb xmm0, byte [rsi + r14], 6 + QUAD $0x070604203a0f4266 // pinsrb xmm0, byte [rsi + r8], 7 + WORD $0x894d; BYTE $0xd1 // mov r9, r10 + QUAD $0x081604203a0f4266 // pinsrb xmm0, byte [rsi + r10], 8 + QUAD $0x092604203a0f4266 // pinsrb xmm0, byte [rsi + r12], 9 + QUAD $0x0a1e04203a0f4266 // pinsrb xmm0, byte [rsi + r11], 10 + QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] + QUAD $0x0b3e04203a0f4266 // pinsrb xmm0, byte [rsi + r15], 11 + QUAD $0x0c2e04203a0f4266 // pinsrb xmm0, byte [rsi + r13], 12 + LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] + LONG $0x203a0f66; WORD $0x3e04; BYTE $0x0d // pinsrb xmm0, byte [rsi + rdi], 13 LONG $0x244c8b48; BYTE $0x10 // mov rcx, qword [rsp + 16] LONG $0x203a0f66; WORD $0x0e04; BYTE $0x0e // pinsrb xmm0, byte [rsi + rcx], 14 - LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] - LONG $0x203a0f66; WORD $0x0e04; BYTE $0x0f // pinsrb xmm0, byte [rsi + rcx], 15 + LONG $0x203a0f66; WORD $0x0604; BYTE $0x0f // pinsrb xmm0, byte [rsi + rax], 15 LONG $0x6f0f4466; BYTE $0xc8 // movdqa xmm9, xmm0 QUAD $0x00019024bc6f0f66; BYTE $0x00 // movdqa xmm7, oword [rsp + 400] LONG $0xde0f4466; BYTE $0xcf // pmaxub xmm9, xmm7 LONG $0x6f0f4466; BYTE $0xff // movdqa xmm15, xmm7 LONG $0x740f4466; BYTE $0xc8 // pcmpeqb xmm9, xmm0 LONG $0x6f0f4166; BYTE $0xc1 // movdqa xmm0, xmm9 - LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] - QUAD $0x010e5c203a0f4466; BYTE $0x01 // pinsrb xmm11, byte [rsi + rcx + 1], 1 + LONG $0x24548b4c; BYTE $0x50 // mov r10, qword [rsp + 80] + QUAD $0x01165c203a0f4666; BYTE $0x01 // pinsrb xmm11, byte [rsi + r10 + 1], 1 QUAD $0x011e5c203a0f4466; BYTE $0x02 // pinsrb xmm11, byte [rsi + rbx + 1], 2 - QUAD $0x0000012024b48b4c // mov r14, qword [rsp + 288] - QUAD $0x01365c203a0f4666; BYTE $0x03 // pinsrb xmm11, byte [rsi + r14 + 1], 3 - QUAD $0x01265c203a0f4666; BYTE $0x04 // pinsrb xmm11, byte [rsi + r12 + 1], 4 - QUAD $0x011e5c203a0f4666; BYTE $0x05 // pinsrb xmm11, byte [rsi + r11 + 1], 5 - QUAD $0x01165c203a0f4466; BYTE $0x06 // pinsrb xmm11, byte [rsi + rdx + 1], 6 - QUAD $0x012e5c203a0f4666; BYTE $0x07 // pinsrb xmm11, byte [rsi + r13 + 1], 7 - QUAD $0x01065c203a0f4666; BYTE $0x08 // pinsrb xmm11, byte [rsi + r8 + 1], 8 - QUAD $0x01165c203a0f4666; BYTE $0x09 // pinsrb xmm11, byte [rsi + r10 + 1], 9 - QUAD $0x010e5c203a0f4666; BYTE $0x0a // pinsrb xmm11, byte [rsi + r9 + 1], 10 - QUAD $0x013e5c203a0f4466; BYTE $0x0b // pinsrb xmm11, byte [rsi + rdi + 1], 11 - QUAD $0x013e5c203a0f4666; BYTE $0x0c // pinsrb xmm11, byte [rsi + r15 + 1], 12 - QUAD $0x01065c203a0f4466; BYTE $0x0d // pinsrb xmm11, byte [rsi + rax + 1], 13 - LONG $0x24448b4c; BYTE $0x10 // mov r8, qword [rsp + 16] - QUAD $0x01065c203a0f4666; BYTE $0x0e // pinsrb xmm11, byte [rsi + r8 + 1], 14 - LONG $0x24448b4c; BYTE $0x30 // mov r8, qword [rsp + 48] - QUAD $0x01065c203a0f4666; BYTE $0x0f // pinsrb xmm11, byte [rsi + r8 + 1], 15 - QUAD $0x080e6c203a0f4466; BYTE $0x01 // pinsrb xmm13, byte [rsi + rcx + 8], 1 + QUAD $0x000000c024ac8b4c // mov r13, qword [rsp + 192] + QUAD $0x012e5c203a0f4666; BYTE $0x03 // pinsrb xmm11, byte [rsi + r13 + 1], 3 + QUAD $0x01165c203a0f4466; BYTE $0x04 // pinsrb xmm11, byte [rsi + rdx + 1], 4 + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] + QUAD $0x010e5c203a0f4466; BYTE $0x05 // pinsrb xmm11, byte [rsi + rcx + 1], 5 + QUAD $0x01365c203a0f4666; BYTE $0x06 // pinsrb xmm11, byte [rsi + r14 + 1], 6 + QUAD $0x01065c203a0f4666; BYTE $0x07 // pinsrb xmm11, byte [rsi + r8 + 1], 7 + QUAD $0x010e5c203a0f4666; BYTE $0x08 // pinsrb xmm11, byte [rsi + r9 + 1], 8 + WORD $0x894c; BYTE $0xe0 // mov rax, r12 + QUAD $0x0000013024a4894c // mov qword [rsp + 304], r12 + QUAD $0x01265c203a0f4666; BYTE $0x09 // pinsrb xmm11, byte [rsi + r12 + 1], 9 + QUAD $0x011e5c203a0f4666; BYTE $0x0a // pinsrb xmm11, byte [rsi + r11 + 1], 10 + QUAD $0x013e5c203a0f4666; BYTE $0x0b // pinsrb xmm11, byte [rsi + r15 + 1], 11 + QUAD $0x000000d024a48b4c // mov r12, qword [rsp + 208] + QUAD $0x01265c203a0f4666; BYTE $0x0c // pinsrb xmm11, byte [rsi + r12 + 1], 12 + QUAD $0x013e5c203a0f4466; BYTE $0x0d // pinsrb xmm11, byte [rsi + rdi + 1], 13 + LONG $0x24648b4c; BYTE $0x10 // mov r12, qword [rsp + 16] + QUAD $0x01265c203a0f4666; BYTE $0x0e // pinsrb xmm11, byte [rsi + r12 + 1], 14 + LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] + QUAD $0x013e5c203a0f4466; BYTE $0x0f // pinsrb xmm11, byte [rsi + rdi + 1], 15 + QUAD $0x08166c203a0f4666; BYTE $0x01 // pinsrb xmm13, byte [rsi + r10 + 8], 1 QUAD $0x081e6c203a0f4466; BYTE $0x02 // pinsrb xmm13, byte [rsi + rbx + 8], 2 - QUAD $0x08366c203a0f4666; BYTE $0x03 // pinsrb xmm13, byte [rsi + r14 + 8], 3 - QUAD $0x08266c203a0f4666; BYTE $0x04 // pinsrb xmm13, byte [rsi + r12 + 8], 4 - QUAD $0x081e6c203a0f4666; BYTE $0x05 // pinsrb xmm13, byte [rsi + r11 + 8], 5 - QUAD $0x08166c203a0f4466; BYTE $0x06 // pinsrb xmm13, byte [rsi + rdx + 8], 6 - QUAD $0x082e6c203a0f4666; BYTE $0x07 // pinsrb xmm13, byte [rsi + r13 + 8], 7 - QUAD $0x000000e024ac8b4c // mov r13, qword [rsp + 224] - QUAD $0x082e6c203a0f4666; BYTE $0x08 // pinsrb xmm13, byte [rsi + r13 + 8], 8 - QUAD $0x08166c203a0f4666; BYTE $0x09 // pinsrb xmm13, byte [rsi + r10 + 8], 9 - QUAD $0x080e6c203a0f4666; BYTE $0x0a // pinsrb xmm13, byte [rsi + r9 + 8], 10 - QUAD $0x083e6c203a0f4466; BYTE $0x0b // pinsrb xmm13, byte [rsi + rdi + 8], 11 - QUAD $0x083e6c203a0f4666; BYTE $0x0c // pinsrb xmm13, byte [rsi + r15 + 8], 12 + QUAD $0x082e6c203a0f4666; BYTE $0x03 // pinsrb xmm13, byte [rsi + r13 + 8], 3 + QUAD $0x08166c203a0f4466; BYTE $0x04 // pinsrb xmm13, byte [rsi + rdx + 8], 4 + QUAD $0x080e6c203a0f4466; BYTE $0x05 // pinsrb xmm13, byte [rsi + rcx + 8], 5 + QUAD $0x08366c203a0f4666; BYTE $0x06 // pinsrb xmm13, byte [rsi + r14 + 8], 6 + QUAD $0x08066c203a0f4666; BYTE $0x07 // pinsrb xmm13, byte [rsi + r8 + 8], 7 + QUAD $0x080e6c203a0f4666; BYTE $0x08 // pinsrb xmm13, byte [rsi + r9 + 8], 8 + QUAD $0x08066c203a0f4466; BYTE $0x09 // pinsrb xmm13, byte [rsi + rax + 8], 9 + QUAD $0x081e6c203a0f4666; BYTE $0x0a // pinsrb xmm13, byte [rsi + r11 + 8], 10 + QUAD $0x083e6c203a0f4666; BYTE $0x0b // pinsrb xmm13, byte [rsi + r15 + 8], 11 + QUAD $0x000000d024848b48 // mov rax, qword [rsp + 208] + QUAD $0x08066c203a0f4466; BYTE $0x0c // pinsrb xmm13, byte [rsi + rax + 8], 12 + WORD $0x8948; BYTE $0xc7 // mov rdi, rax + LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] QUAD $0x08066c203a0f4466; BYTE $0x0d // pinsrb xmm13, byte [rsi + rax + 8], 13 - LONG $0x244c8b48; BYTE $0x10 // mov rcx, qword [rsp + 16] - QUAD $0x080e6c203a0f4466; BYTE $0x0e // pinsrb xmm13, byte [rsi + rcx + 8], 14 - QUAD $0x08066c203a0f4666; BYTE $0x0f // pinsrb xmm13, byte [rsi + r8 + 8], 15 + QUAD $0x08266c203a0f4666; BYTE $0x0e // pinsrb xmm13, byte [rsi + r12 + 8], 14 + LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + QUAD $0x08066c203a0f4466; BYTE $0x0f // pinsrb xmm13, byte [rsi + rax + 8], 15 LONG $0x6f0f4566; BYTE $0xcd // movdqa xmm9, xmm13 LONG $0xde0f4466; BYTE $0xcf // pmaxub xmm9, xmm7 LONG $0x740f4566; BYTE $0xcd // pcmpeqb xmm9, xmm13 - LONG $0x247c8b48; BYTE $0x20 // mov rdi, qword [rsp + 32] - QUAD $0x103e64203a0f4466; BYTE $0x01 // pinsrb xmm12, byte [rsi + rdi + 16], 1 + QUAD $0x101664203a0f4666; BYTE $0x01 // pinsrb xmm12, byte [rsi + r10 + 16], 1 QUAD $0x101e64203a0f4466; BYTE $0x02 // pinsrb xmm12, byte [rsi + rbx + 16], 2 - WORD $0x8949; BYTE $0xda // mov r10, rbx - QUAD $0x103664203a0f4666; BYTE $0x03 // pinsrb xmm12, byte [rsi + r14 + 16], 3 - QUAD $0x102664203a0f4666; BYTE $0x04 // pinsrb xmm12, byte [rsi + r12 + 16], 4 - QUAD $0x101e64203a0f4666; BYTE $0x05 // pinsrb xmm12, byte [rsi + r11 + 16], 5 - QUAD $0x101664203a0f4466; BYTE $0x06 // pinsrb xmm12, byte [rsi + rdx + 16], 6 - WORD $0x8948; BYTE $0xd1 // mov rcx, rdx - QUAD $0x000000f024948948 // mov qword [rsp + 240], rdx - QUAD $0x00000130249c8b4c // mov r11, qword [rsp + 304] - QUAD $0x101e64203a0f4666; BYTE $0x07 // pinsrb xmm12, byte [rsi + r11 + 16], 7 - QUAD $0x102e64203a0f4666; BYTE $0x08 // pinsrb xmm12, byte [rsi + r13 + 16], 8 - WORD $0x894d; BYTE $0xe8 // mov r8, r13 - QUAD $0x0000011024ac8b4c // mov r13, qword [rsp + 272] - QUAD $0x102e64203a0f4666; BYTE $0x09 // pinsrb xmm12, byte [rsi + r13 + 16], 9 - QUAD $0x100e64203a0f4666; BYTE $0x0a // pinsrb xmm12, byte [rsi + r9 + 16], 10 - LONG $0x24548b48; BYTE $0x50 // mov rdx, qword [rsp + 80] - QUAD $0x101664203a0f4466; BYTE $0x0b // pinsrb xmm12, byte [rsi + rdx + 16], 11 - QUAD $0x103e64203a0f4666; BYTE $0x0c // pinsrb xmm12, byte [rsi + r15 + 16], 12 - QUAD $0x100664203a0f4466; BYTE $0x0d // pinsrb xmm12, byte [rsi + rax + 16], 13 - LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] - QUAD $0x101e64203a0f4466; BYTE $0x0e // pinsrb xmm12, byte [rsi + rbx + 16], 14 - LONG $0x24648b4c; BYTE $0x30 // mov r12, qword [rsp + 48] - QUAD $0x102664203a0f4666; BYTE $0x0f // pinsrb xmm12, byte [rsi + r12 + 16], 15 + QUAD $0x102e64203a0f4666; BYTE $0x03 // pinsrb xmm12, byte [rsi + r13 + 16], 3 + QUAD $0x101664203a0f4466; BYTE $0x04 // pinsrb xmm12, byte [rsi + rdx + 16], 4 + QUAD $0x100e64203a0f4466; BYTE $0x05 // pinsrb xmm12, byte [rsi + rcx + 16], 5 + QUAD $0x103664203a0f4666; BYTE $0x06 // pinsrb xmm12, byte [rsi + r14 + 16], 6 + QUAD $0x100664203a0f4666; BYTE $0x07 // pinsrb xmm12, byte [rsi + r8 + 16], 7 + WORD $0x894c; BYTE $0xc2 // mov rdx, r8 + QUAD $0x000001b02484894c // mov qword [rsp + 432], r8 + QUAD $0x100e64203a0f4666; BYTE $0x08 // pinsrb xmm12, byte [rsi + r9 + 16], 8 + QUAD $0x0000013024a48b4c // mov r12, qword [rsp + 304] + QUAD $0x102664203a0f4666; BYTE $0x09 // pinsrb xmm12, byte [rsi + r12 + 16], 9 + QUAD $0x101e64203a0f4666; BYTE $0x0a // pinsrb xmm12, byte [rsi + r11 + 16], 10 + QUAD $0x000000b0249c894c // mov qword [rsp + 176], r11 + QUAD $0x103e64203a0f4666; BYTE $0x0b // pinsrb xmm12, byte [rsi + r15 + 16], 11 + WORD $0x8948; BYTE $0xf9 // mov rcx, rdi + QUAD $0x103e64203a0f4466; BYTE $0x0c // pinsrb xmm12, byte [rsi + rdi + 16], 12 + LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] + QUAD $0x103e64203a0f4466; BYTE $0x0d // pinsrb xmm12, byte [rsi + rdi + 16], 13 + LONG $0x24448b4c; BYTE $0x10 // mov r8, qword [rsp + 16] + QUAD $0x100664203a0f4666; BYTE $0x0e // pinsrb xmm12, byte [rsi + r8 + 16], 14 + QUAD $0x100664203a0f4466; BYTE $0x0f // pinsrb xmm12, byte [rsi + rax + 16], 15 LONG $0x6f0f4166; BYTE $0xfc // movdqa xmm7, xmm12 LONG $0xde0f4166; BYTE $0xff // pmaxub xmm7, xmm15 LONG $0x740f4166; BYTE $0xfc // pcmpeqb xmm7, xmm12 - QUAD $0x0001b024bc7f0f66; BYTE $0x00 // movdqa oword [rsp + 432], xmm7 - QUAD $0x01183e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 24], 1 - QUAD $0x181654203a0f4266; BYTE $0x02 // pinsrb xmm2, byte [rsi + r10 + 24], 2 - QUAD $0x183654203a0f4266; BYTE $0x03 // pinsrb xmm2, byte [rsi + r14 + 24], 3 - LONG $0x247c8b48; BYTE $0x60 // mov rdi, qword [rsp + 96] - QUAD $0x04183e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 24], 4 - QUAD $0x0000009024b48b4c // mov r14, qword [rsp + 144] - QUAD $0x183654203a0f4266; BYTE $0x05 // pinsrb xmm2, byte [rsi + r14 + 24], 5 - QUAD $0x06180e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 24], 6 - QUAD $0x181e54203a0f4266; BYTE $0x07 // pinsrb xmm2, byte [rsi + r11 + 24], 7 - QUAD $0x180654203a0f4266; BYTE $0x08 // pinsrb xmm2, byte [rsi + r8 + 24], 8 - QUAD $0x182e54203a0f4266; BYTE $0x09 // pinsrb xmm2, byte [rsi + r13 + 24], 9 - QUAD $0x180e54203a0f4266; BYTE $0x0a // pinsrb xmm2, byte [rsi + r9 + 24], 10 - QUAD $0x0b181654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 24], 11 - QUAD $0x183e54203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rsi + r15 + 24], 12 - QUAD $0x0d180654203a0f66 // pinsrb xmm2, byte [rsi + rax + 24], 13 - QUAD $0x0e181e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 24], 14 - QUAD $0x182654203a0f4266; BYTE $0x0f // pinsrb xmm2, byte [rsi + r12 + 24], 15 + QUAD $0x00017024bc7f0f66; BYTE $0x00 // movdqa oword [rsp + 368], xmm7 + QUAD $0x181654203a0f4266; BYTE $0x01 // pinsrb xmm2, byte [rsi + r10 + 24], 1 + QUAD $0x02181e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 24], 2 + QUAD $0x182e54203a0f4266; BYTE $0x03 // pinsrb xmm2, byte [rsi + r13 + 24], 3 + LONG $0x245c8b48; BYTE $0x70 // mov rbx, qword [rsp + 112] + QUAD $0x04181e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 24], 4 + LONG $0x24548b4c; BYTE $0x30 // mov r10, qword [rsp + 48] + QUAD $0x181654203a0f4266; BYTE $0x05 // pinsrb xmm2, byte [rsi + r10 + 24], 5 + QUAD $0x183654203a0f4266; BYTE $0x06 // pinsrb xmm2, byte [rsi + r14 + 24], 6 + QUAD $0x07181654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 24], 7 + QUAD $0x180e54203a0f4266; BYTE $0x08 // pinsrb xmm2, byte [rsi + r9 + 24], 8 + QUAD $0x182654203a0f4266; BYTE $0x09 // pinsrb xmm2, byte [rsi + r12 + 24], 9 + QUAD $0x181e54203a0f4266; BYTE $0x0a // pinsrb xmm2, byte [rsi + r11 + 24], 10 + QUAD $0x183e54203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rsi + r15 + 24], 11 + WORD $0x894d; BYTE $0xfc // mov r12, r15 + QUAD $0x0c180e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 24], 12 + QUAD $0x0d183e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 24], 13 + QUAD $0x180654203a0f4266; BYTE $0x0e // pinsrb xmm2, byte [rsi + r8 + 24], 14 + WORD $0x894d; BYTE $0xc5 // mov r13, r8 + QUAD $0x0f180654203a0f66 // pinsrb xmm2, byte [rsi + rax + 24], 15 LONG $0xfa6f0f66 // movdqa xmm7, xmm2 LONG $0xde0f4166; BYTE $0xff // pmaxub xmm7, xmm15 LONG $0xfa740f66 // pcmpeqb xmm7, xmm2 - QUAD $0x00014024bc7f0f66; BYTE $0x00 // movdqa oword [rsp + 320], xmm7 + QUAD $0x0000f024bc7f0f66; BYTE $0x00 // movdqa oword [rsp + 240], xmm7 LONG $0x6f0f4566; BYTE $0xe3 // movdqa xmm12, xmm11 LONG $0x6f0f4566; BYTE $0xef // movdqa xmm13, xmm15 LONG $0xde0f4566; BYTE $0xe7 // pmaxub xmm12, xmm15 LONG $0x740f4566; BYTE $0xe3 // pcmpeqb xmm12, xmm11 - QUAD $0x0000008024948b48 // mov rdx, qword [rsp + 128] - LONG $0x1654b60f; BYTE $0x0d // movzx edx, byte [rsi + rdx + 13] + QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] + LONG $0x0654b60f; BYTE $0x0d // movzx edx, byte [rsi + rax + 13] LONG $0x6e0f4466; BYTE $0xfa // movd xmm15, edx - LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] - QUAD $0x020e74203a0f4466; BYTE $0x01 // pinsrb xmm14, byte [rsi + rcx + 2], 1 - WORD $0x894c; BYTE $0xd3 // mov rbx, r10 - QUAD $0x021674203a0f4666; BYTE $0x02 // pinsrb xmm14, byte [rsi + r10 + 2], 2 - QUAD $0x0000012024948b4c // mov r10, qword [rsp + 288] - QUAD $0x021674203a0f4666; BYTE $0x03 // pinsrb xmm14, byte [rsi + r10 + 2], 3 - WORD $0x8948; BYTE $0xfa // mov rdx, rdi - QUAD $0x023e74203a0f4466; BYTE $0x04 // pinsrb xmm14, byte [rsi + rdi + 2], 4 - WORD $0x894c; BYTE $0xf1 // mov rcx, r14 - QUAD $0x023674203a0f4666; BYTE $0x05 // pinsrb xmm14, byte [rsi + r14 + 2], 5 - QUAD $0x000000f024bc8b48 // mov rdi, qword [rsp + 240] - QUAD $0x023e74203a0f4466; BYTE $0x06 // pinsrb xmm14, byte [rsi + rdi + 2], 6 - QUAD $0x021e74203a0f4666; BYTE $0x07 // pinsrb xmm14, byte [rsi + r11 + 2], 7 - QUAD $0x020674203a0f4666; BYTE $0x08 // pinsrb xmm14, byte [rsi + r8 + 2], 8 - QUAD $0x022e74203a0f4666; BYTE $0x09 // pinsrb xmm14, byte [rsi + r13 + 2], 9 - QUAD $0x020e74203a0f4666; BYTE $0x0a // pinsrb xmm14, byte [rsi + r9 + 2], 10 - LONG $0x24748b4c; BYTE $0x50 // mov r14, qword [rsp + 80] - QUAD $0x023674203a0f4666; BYTE $0x0b // pinsrb xmm14, byte [rsi + r14 + 2], 11 - QUAD $0x023e74203a0f4666; BYTE $0x0c // pinsrb xmm14, byte [rsi + r15 + 2], 12 - LONG $0x24448948; BYTE $0x70 // mov qword [rsp + 112], rax - QUAD $0x020674203a0f4466; BYTE $0x0d // pinsrb xmm14, byte [rsi + rax + 2], 13 + LONG $0x24448b4c; BYTE $0x50 // mov r8, qword [rsp + 80] + QUAD $0x020674203a0f4666; BYTE $0x01 // pinsrb xmm14, byte [rsi + r8 + 2], 1 + QUAD $0x0000008024bc8b4c // mov r15, qword [rsp + 128] + QUAD $0x023e74203a0f4666; BYTE $0x02 // pinsrb xmm14, byte [rsi + r15 + 2], 2 + QUAD $0x000000c024bc8b48 // mov rdi, qword [rsp + 192] + QUAD $0x023e74203a0f4466; BYTE $0x03 // pinsrb xmm14, byte [rsi + rdi + 2], 3 + WORD $0x8949; BYTE $0xdb // mov r11, rbx + QUAD $0x021e74203a0f4466; BYTE $0x04 // pinsrb xmm14, byte [rsi + rbx + 2], 4 + QUAD $0x021674203a0f4666; BYTE $0x05 // pinsrb xmm14, byte [rsi + r10 + 2], 5 + QUAD $0x023674203a0f4666; BYTE $0x06 // pinsrb xmm14, byte [rsi + r14 + 2], 6 + QUAD $0x000001b0249c8b48 // mov rbx, qword [rsp + 432] + QUAD $0x021e74203a0f4466; BYTE $0x07 // pinsrb xmm14, byte [rsi + rbx + 2], 7 + WORD $0x894c; BYTE $0xca // mov rdx, r9 + QUAD $0x00000100248c894c // mov qword [rsp + 256], r9 + QUAD $0x020e74203a0f4666; BYTE $0x08 // pinsrb xmm14, byte [rsi + r9 + 2], 8 + QUAD $0x00000130248c8b4c // mov r9, qword [rsp + 304] + QUAD $0x020e74203a0f4666; BYTE $0x09 // pinsrb xmm14, byte [rsi + r9 + 2], 9 + QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x020674203a0f4466; BYTE $0x0a // pinsrb xmm14, byte [rsi + rax + 2], 10 + QUAD $0x022674203a0f4666; BYTE $0x0b // pinsrb xmm14, byte [rsi + r12 + 2], 11 + WORD $0x8949; BYTE $0xcc // mov r12, rcx + QUAD $0x020e74203a0f4466; BYTE $0x0c // pinsrb xmm14, byte [rsi + rcx + 2], 12 + LONG $0x244c8b48; BYTE $0x60 // mov rcx, qword [rsp + 96] + QUAD $0x020e74203a0f4466; BYTE $0x0d // pinsrb xmm14, byte [rsi + rcx + 2], 13 + QUAD $0x022e74203a0f4666; BYTE $0x0e // pinsrb xmm14, byte [rsi + r13 + 2], 14 + LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] + QUAD $0x022e74203a0f4666; BYTE $0x0f // pinsrb xmm14, byte [rsi + r13 + 2], 15 + QUAD $0x03066c203a0f4266; BYTE $0x01 // pinsrb xmm5, byte [rsi + r8 + 3], 1 + QUAD $0x033e6c203a0f4266; BYTE $0x02 // pinsrb xmm5, byte [rsi + r15 + 3], 2 + QUAD $0x03033e6c203a0f66 // pinsrb xmm5, byte [rsi + rdi + 3], 3 + WORD $0x8949; BYTE $0xf8 // mov r8, rdi + QUAD $0x031e6c203a0f4266; BYTE $0x04 // pinsrb xmm5, byte [rsi + r11 + 3], 4 + QUAD $0x03166c203a0f4266; BYTE $0x05 // pinsrb xmm5, byte [rsi + r10 + 3], 5 + QUAD $0x03366c203a0f4266; BYTE $0x06 // pinsrb xmm5, byte [rsi + r14 + 3], 6 + QUAD $0x07031e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 3], 7 + QUAD $0x0803166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 3], 8 + QUAD $0x030e6c203a0f4266; BYTE $0x09 // pinsrb xmm5, byte [rsi + r9 + 3], 9 + QUAD $0x0a03066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 3], 10 + QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] + QUAD $0x033e6c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rsi + r15 + 3], 11 + QUAD $0x03266c203a0f4266; BYTE $0x0c // pinsrb xmm5, byte [rsi + r12 + 3], 12 + QUAD $0x0d030e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 3], 13 LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] - QUAD $0x020674203a0f4466; BYTE $0x0e // pinsrb xmm14, byte [rsi + rax + 2], 14 - QUAD $0x022674203a0f4666; BYTE $0x0f // pinsrb xmm14, byte [rsi + r12 + 2], 15 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - QUAD $0x0103066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 3], 1 - QUAD $0x02031e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 3], 2 - QUAD $0x03166c203a0f4266; BYTE $0x03 // pinsrb xmm5, byte [rsi + r10 + 3], 3 - QUAD $0x0403166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 3], 4 - WORD $0x8948; BYTE $0xd0 // mov rax, rdx - QUAD $0x05030e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 3], 5 - QUAD $0x06033e6c203a0f66 // pinsrb xmm5, byte [rsi + rdi + 3], 6 - QUAD $0x031e6c203a0f4266; BYTE $0x07 // pinsrb xmm5, byte [rsi + r11 + 3], 7 - QUAD $0x03066c203a0f4266; BYTE $0x08 // pinsrb xmm5, byte [rsi + r8 + 3], 8 - QUAD $0x032e6c203a0f4266; BYTE $0x09 // pinsrb xmm5, byte [rsi + r13 + 3], 9 - QUAD $0x030e6c203a0f4266; BYTE $0x0a // pinsrb xmm5, byte [rsi + r9 + 3], 10 - QUAD $0x03366c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rsi + r14 + 3], 11 - QUAD $0x033e6c203a0f4266; BYTE $0x0c // pinsrb xmm5, byte [rsi + r15 + 3], 12 - LONG $0x24748b4c; BYTE $0x70 // mov r14, qword [rsp + 112] - QUAD $0x03366c203a0f4266; BYTE $0x0d // pinsrb xmm5, byte [rsi + r14 + 3], 13 - LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] - QUAD $0x0e03166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 3], 14 - QUAD $0x03266c203a0f4266; BYTE $0x0f // pinsrb xmm5, byte [rsi + r12 + 3], 15 + QUAD $0x0e03066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 3], 14 + QUAD $0x032e6c203a0f4266; BYTE $0x0f // pinsrb xmm5, byte [rsi + r13 + 3], 15 QUAD $0x00000100956f0f66 // movdqa xmm2, oword 256[rbp] /* [rip + .LCPI10_16] */ LONG $0xdb0f4466; BYTE $0xe2 // pand xmm12, xmm2 LONG $0xf80f4466; BYTE $0xe0 // psubb xmm12, xmm0 @@ -50931,54 +52417,60 @@ LBB10_195: LONG $0xd56f0f66 // movdqa xmm2, xmm5 LONG $0xde0f4166; BYTE $0xd5 // pmaxub xmm2, xmm13 LONG $0xd5740f66 // pcmpeqb xmm2, xmm5 - QUAD $0x0000008024948b48 // mov rdx, qword [rsp + 128] - LONG $0x1654b60f; BYTE $0x0e // movzx edx, byte [rsi + rdx + 14] + QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] + LONG $0x0654b60f; BYTE $0x0e // movzx edx, byte [rsi + rax + 14] LONG $0x6e0f4466; BYTE $0xf2 // movd xmm14, edx - LONG $0x24648b4c; BYTE $0x20 // mov r12, qword [rsp + 32] - QUAD $0x04265c203a0f4266; BYTE $0x01 // pinsrb xmm3, byte [rsi + r12 + 4], 1 - QUAD $0x02041e5c203a0f66 // pinsrb xmm3, byte [rsi + rbx + 4], 2 - QUAD $0x04165c203a0f4266; BYTE $0x03 // pinsrb xmm3, byte [rsi + r10 + 4], 3 - QUAD $0x0404065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 4], 4 - QUAD $0x05040e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 4], 5 - QUAD $0x06043e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 4], 6 - QUAD $0x041e5c203a0f4266; BYTE $0x07 // pinsrb xmm3, byte [rsi + r11 + 4], 7 - QUAD $0x04065c203a0f4266; BYTE $0x08 // pinsrb xmm3, byte [rsi + r8 + 4], 8 - QUAD $0x042e5c203a0f4266; BYTE $0x09 // pinsrb xmm3, byte [rsi + r13 + 4], 9 - QUAD $0x040e5c203a0f4266; BYTE $0x0a // pinsrb xmm3, byte [rsi + r9 + 4], 10 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] - QUAD $0x0b04065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 4], 11 - QUAD $0x000000c024bc894c // mov qword [rsp + 192], r15 - QUAD $0x043e5c203a0f4266; BYTE $0x0c // pinsrb xmm3, byte [rsi + r15 + 4], 12 - QUAD $0x04365c203a0f4266; BYTE $0x0d // pinsrb xmm3, byte [rsi + r14 + 4], 13 + LONG $0x247c8b48; BYTE $0x50 // mov rdi, qword [rsp + 80] + QUAD $0x01043e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 4], 1 + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] + QUAD $0x0204065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 4], 2 + QUAD $0x04065c203a0f4266; BYTE $0x03 // pinsrb xmm3, byte [rsi + r8 + 4], 3 + QUAD $0x041e5c203a0f4266; BYTE $0x04 // pinsrb xmm3, byte [rsi + r11 + 4], 4 + WORD $0x894c; BYTE $0xd1 // mov rcx, r10 + QUAD $0x04165c203a0f4266; BYTE $0x05 // pinsrb xmm3, byte [rsi + r10 + 4], 5 + QUAD $0x04365c203a0f4266; BYTE $0x06 // pinsrb xmm3, byte [rsi + r14 + 4], 6 + QUAD $0x07041e5c203a0f66 // pinsrb xmm3, byte [rsi + rbx + 4], 7 + QUAD $0x0000010024948b4c // mov r10, qword [rsp + 256] + QUAD $0x04165c203a0f4266; BYTE $0x08 // pinsrb xmm3, byte [rsi + r10 + 4], 8 + QUAD $0x040e5c203a0f4266; BYTE $0x09 // pinsrb xmm3, byte [rsi + r9 + 4], 9 + QUAD $0x000000b024848b4c // mov r8, qword [rsp + 176] + QUAD $0x04065c203a0f4266; BYTE $0x0a // pinsrb xmm3, byte [rsi + r8 + 4], 10 + QUAD $0x043e5c203a0f4266; BYTE $0x0b // pinsrb xmm3, byte [rsi + r15 + 4], 11 + QUAD $0x04265c203a0f4266; BYTE $0x0c // pinsrb xmm3, byte [rsi + r12 + 4], 12 + LONG $0x245c8b4c; BYTE $0x60 // mov r11, qword [rsp + 96] + QUAD $0x041e5c203a0f4266; BYTE $0x0d // pinsrb xmm3, byte [rsi + r11 + 4], 13 LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] QUAD $0x0e04165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 4], 14 - LONG $0x24748b4c; BYTE $0x30 // mov r14, qword [rsp + 48] - QUAD $0x04365c203a0f4266; BYTE $0x0f // pinsrb xmm3, byte [rsi + r14 + 4], 15 - QUAD $0x05264c203a0f4266; BYTE $0x01 // pinsrb xmm1, byte [rsi + r12 + 5], 1 - QUAD $0x02051e4c203a0f66 // pinsrb xmm1, byte [rsi + rbx + 5], 2 - QUAD $0x05164c203a0f4266; BYTE $0x03 // pinsrb xmm1, byte [rsi + r10 + 5], 3 - LONG $0x24648b4c; BYTE $0x60 // mov r12, qword [rsp + 96] - QUAD $0x05264c203a0f4266; BYTE $0x04 // pinsrb xmm1, byte [rsi + r12 + 5], 4 + LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] + QUAD $0x042e5c203a0f4266; BYTE $0x0f // pinsrb xmm3, byte [rsi + r13 + 4], 15 + QUAD $0x01053e4c203a0f66 // pinsrb xmm1, byte [rsi + rdi + 5], 1 + QUAD $0x0205064c203a0f66 // pinsrb xmm1, byte [rsi + rax + 5], 2 + QUAD $0x000000c024bc8b48 // mov rdi, qword [rsp + 192] + QUAD $0x03053e4c203a0f66 // pinsrb xmm1, byte [rsi + rdi + 5], 3 + LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] + QUAD $0x04053e4c203a0f66 // pinsrb xmm1, byte [rsi + rdi + 5], 4 QUAD $0x05050e4c203a0f66 // pinsrb xmm1, byte [rsi + rcx + 5], 5 - QUAD $0x06053e4c203a0f66 // pinsrb xmm1, byte [rsi + rdi + 5], 6 - QUAD $0x051e4c203a0f4266; BYTE $0x07 // pinsrb xmm1, byte [rsi + r11 + 5], 7 - QUAD $0x05064c203a0f4266; BYTE $0x08 // pinsrb xmm1, byte [rsi + r8 + 5], 8 - QUAD $0x052e4c203a0f4266; BYTE $0x09 // pinsrb xmm1, byte [rsi + r13 + 5], 9 - QUAD $0x050e4c203a0f4266; BYTE $0x0a // pinsrb xmm1, byte [rsi + r9 + 5], 10 - QUAD $0x0b05064c203a0f66 // pinsrb xmm1, byte [rsi + rax + 5], 11 - QUAD $0x053e4c203a0f4266; BYTE $0x0c // pinsrb xmm1, byte [rsi + r15 + 5], 12 - LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] - QUAD $0x0d05064c203a0f66 // pinsrb xmm1, byte [rsi + rax + 5], 13 + QUAD $0x05364c203a0f4266; BYTE $0x06 // pinsrb xmm1, byte [rsi + r14 + 5], 6 + QUAD $0x07051e4c203a0f66 // pinsrb xmm1, byte [rsi + rbx + 5], 7 + QUAD $0x05164c203a0f4266; BYTE $0x08 // pinsrb xmm1, byte [rsi + r10 + 5], 8 + WORD $0x894c; BYTE $0xd1 // mov rcx, r10 + QUAD $0x050e4c203a0f4266; BYTE $0x09 // pinsrb xmm1, byte [rsi + r9 + 5], 9 + QUAD $0x05064c203a0f4266; BYTE $0x0a // pinsrb xmm1, byte [rsi + r8 + 5], 10 + QUAD $0x053e4c203a0f4266; BYTE $0x0b // pinsrb xmm1, byte [rsi + r15 + 5], 11 + WORD $0x894d; BYTE $0xfa // mov r10, r15 + QUAD $0x05264c203a0f4266; BYTE $0x0c // pinsrb xmm1, byte [rsi + r12 + 5], 12 + QUAD $0x051e4c203a0f4266; BYTE $0x0d // pinsrb xmm1, byte [rsi + r11 + 5], 13 QUAD $0x0e05164c203a0f66 // pinsrb xmm1, byte [rsi + rdx + 5], 14 QUAD $0x00000110ad6f0f66 // movdqa xmm5, oword 272[rbp] /* [rip + .LCPI10_17] */ LONG $0xdb0f4466; BYTE $0xdd // pand xmm11, xmm5 QUAD $0x00000120ad6f0f66 // movdqa xmm5, oword 288[rbp] /* [rip + .LCPI10_18] */ LONG $0xd5db0f66 // pand xmm2, xmm5 LONG $0xeb0f4166; BYTE $0xd3 // por xmm2, xmm11 - QUAD $0x0000008024bc8b4c // mov r15, qword [rsp + 128] - LONG $0x54b60f42; WORD $0x0f3e // movzx edx, byte [rsi + r15 + 15] + QUAD $0x0000009024bc8b48 // mov rdi, qword [rsp + 144] + LONG $0x3e54b60f; BYTE $0x0f // movzx edx, byte [rsi + rdi + 15] LONG $0x6e0f4466; BYTE $0xda // movd xmm11, edx - QUAD $0x05364c203a0f4266; BYTE $0x0f // pinsrb xmm1, byte [rsi + r14 + 5], 15 + LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] + QUAD $0x052e4c203a0f4266; BYTE $0x0f // pinsrb xmm1, byte [rsi + r13 + 5], 15 LONG $0xeb0f4166; BYTE $0xd4 // por xmm2, xmm12 LONG $0x6f0f4466; BYTE $0xe3 // movdqa xmm12, xmm3 LONG $0xde0f4566; BYTE $0xe5 // pmaxub xmm12, xmm13 @@ -50986,50 +52478,50 @@ LBB10_195: LONG $0xe96f0f66 // movdqa xmm5, xmm1 LONG $0xde0f4166; BYTE $0xed // pmaxub xmm5, xmm13 LONG $0xe9740f66 // pcmpeqb xmm5, xmm1 - LONG $0x54b60f42; WORD $0x113e // movzx edx, byte [rsi + r15 + 17] + LONG $0x3e54b60f; BYTE $0x11 // movzx edx, byte [rsi + rdi + 17] LONG $0xc26e0f66 // movd xmm0, edx - LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] - QUAD $0x01061664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 6], 1 - QUAD $0x000000b0249c8948 // mov qword [rsp + 176], rbx - QUAD $0x02061e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 6], 2 - QUAD $0x061664203a0f4266; BYTE $0x03 // pinsrb xmm4, byte [rsi + r10 + 6], 3 - QUAD $0x062664203a0f4266; BYTE $0x04 // pinsrb xmm4, byte [rsi + r12 + 6], 4 - QUAD $0x05060e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 6], 5 - QUAD $0x06063e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 6], 6 - QUAD $0x061e64203a0f4266; BYTE $0x07 // pinsrb xmm4, byte [rsi + r11 + 6], 7 - QUAD $0x060664203a0f4266; BYTE $0x08 // pinsrb xmm4, byte [rsi + r8 + 6], 8 - QUAD $0x062e64203a0f4266; BYTE $0x09 // pinsrb xmm4, byte [rsi + r13 + 6], 9 - QUAD $0x00000100248c894c // mov qword [rsp + 256], r9 - QUAD $0x060e64203a0f4266; BYTE $0x0a // pinsrb xmm4, byte [rsi + r9 + 6], 10 - LONG $0x24648b4c; BYTE $0x50 // mov r12, qword [rsp + 80] - QUAD $0x062664203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r12 + 6], 11 - QUAD $0x000000c024b48b4c // mov r14, qword [rsp + 192] - QUAD $0x063664203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r14 + 6], 12 - QUAD $0x0d060664203a0f66 // pinsrb xmm4, byte [rsi + rax + 6], 13 - LONG $0x247c8b4c; BYTE $0x10 // mov r15, qword [rsp + 16] - QUAD $0x063e64203a0f4266; BYTE $0x0e // pinsrb xmm4, byte [rsi + r15 + 6], 14 - LONG $0x247c8b4c; BYTE $0x30 // mov r15, qword [rsp + 48] - QUAD $0x063e64203a0f4266; BYTE $0x0f // pinsrb xmm4, byte [rsi + r15 + 6], 15 - QUAD $0x000170249c6f0f66; BYTE $0x00 // movdqa xmm3, oword [rsp + 368] - QUAD $0x0107165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 7], 1 - QUAD $0x02071e5c203a0f66 // pinsrb xmm3, byte [rsi + rbx + 7], 2 - QUAD $0x07165c203a0f4266; BYTE $0x03 // pinsrb xmm3, byte [rsi + r10 + 7], 3 - WORD $0x894c; BYTE $0xd3 // mov rbx, r10 + LONG $0x24448b4c; BYTE $0x50 // mov r8, qword [rsp + 80] + QUAD $0x060664203a0f4266; BYTE $0x01 // pinsrb xmm4, byte [rsi + r8 + 6], 1 + QUAD $0x02060664203a0f66 // pinsrb xmm4, byte [rsi + rax + 6], 2 + QUAD $0x000000c024bc8b48 // mov rdi, qword [rsp + 192] + QUAD $0x03063e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 6], 3 + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] + QUAD $0x04060664203a0f66 // pinsrb xmm4, byte [rsi + rax + 6], 4 + LONG $0x245c8b4c; BYTE $0x30 // mov r11, qword [rsp + 48] + QUAD $0x061e64203a0f4266; BYTE $0x05 // pinsrb xmm4, byte [rsi + r11 + 6], 5 + QUAD $0x063664203a0f4266; BYTE $0x06 // pinsrb xmm4, byte [rsi + r14 + 6], 6 + QUAD $0x07061e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 6], 7 + QUAD $0x08060e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 6], 8 + QUAD $0x060e64203a0f4266; BYTE $0x09 // pinsrb xmm4, byte [rsi + r9 + 6], 9 + QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] + QUAD $0x063e64203a0f4266; BYTE $0x0a // pinsrb xmm4, byte [rsi + r15 + 6], 10 + QUAD $0x061664203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r10 + 6], 11 + QUAD $0x062664203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r12 + 6], 12 LONG $0x24548b48; BYTE $0x60 // mov rdx, qword [rsp + 96] - QUAD $0x0407165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 7], 4 - QUAD $0x05070e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 7], 5 - QUAD $0x06073e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 7], 6 - QUAD $0x071e5c203a0f4266; BYTE $0x07 // pinsrb xmm3, byte [rsi + r11 + 7], 7 - QUAD $0x07065c203a0f4266; BYTE $0x08 // pinsrb xmm3, byte [rsi + r8 + 7], 8 - QUAD $0x072e5c203a0f4266; BYTE $0x09 // pinsrb xmm3, byte [rsi + r13 + 7], 9 - QUAD $0x070e5c203a0f4266; BYTE $0x0a // pinsrb xmm3, byte [rsi + r9 + 7], 10 - QUAD $0x07265c203a0f4266; BYTE $0x0b // pinsrb xmm3, byte [rsi + r12 + 7], 11 - QUAD $0x07365c203a0f4266; BYTE $0x0c // pinsrb xmm3, byte [rsi + r14 + 7], 12 - QUAD $0x0d07065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 7], 13 - LONG $0x247c8b48; BYTE $0x10 // mov rdi, qword [rsp + 16] - QUAD $0x0e073e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 7], 14 - WORD $0x894c; BYTE $0xf9 // mov rcx, r15 - QUAD $0x073e5c203a0f4266; BYTE $0x0f // pinsrb xmm3, byte [rsi + r15 + 7], 15 + QUAD $0x0d061664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 6], 13 + LONG $0x244c8b48; BYTE $0x10 // mov rcx, qword [rsp + 16] + QUAD $0x0e060e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 6], 14 + QUAD $0x062e64203a0f4266; BYTE $0x0f // pinsrb xmm4, byte [rsi + r13 + 6], 15 + QUAD $0x000140249c6f0f66; BYTE $0x00 // movdqa xmm3, oword [rsp + 320] + QUAD $0x07065c203a0f4266; BYTE $0x01 // pinsrb xmm3, byte [rsi + r8 + 7], 1 + QUAD $0x0000008024848b4c // mov r8, qword [rsp + 128] + QUAD $0x07065c203a0f4266; BYTE $0x02 // pinsrb xmm3, byte [rsi + r8 + 7], 2 + QUAD $0x03073e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 7], 3 + QUAD $0x0407065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 7], 4 + WORD $0x894c; BYTE $0xdf // mov rdi, r11 + QUAD $0x071e5c203a0f4266; BYTE $0x05 // pinsrb xmm3, byte [rsi + r11 + 7], 5 + QUAD $0x07365c203a0f4266; BYTE $0x06 // pinsrb xmm3, byte [rsi + r14 + 7], 6 + QUAD $0x0000012024b4894c // mov qword [rsp + 288], r14 + QUAD $0x07071e5c203a0f66 // pinsrb xmm3, byte [rsi + rbx + 7], 7 + QUAD $0x00000100249c8b4c // mov r11, qword [rsp + 256] + QUAD $0x071e5c203a0f4266; BYTE $0x08 // pinsrb xmm3, byte [rsi + r11 + 7], 8 + QUAD $0x070e5c203a0f4266; BYTE $0x09 // pinsrb xmm3, byte [rsi + r9 + 7], 9 + QUAD $0x073e5c203a0f4266; BYTE $0x0a // pinsrb xmm3, byte [rsi + r15 + 7], 10 + QUAD $0x07165c203a0f4266; BYTE $0x0b // pinsrb xmm3, byte [rsi + r10 + 7], 11 + QUAD $0x07265c203a0f4266; BYTE $0x0c // pinsrb xmm3, byte [rsi + r12 + 7], 12 + QUAD $0x0d07165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 7], 13 + QUAD $0x0e070e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 7], 14 + QUAD $0x072e5c203a0f4266; BYTE $0x0f // pinsrb xmm3, byte [rsi + r13 + 7], 15 QUAD $0x000001308d6f0f66 // movdqa xmm1, oword 304[rbp] /* [rip + .LCPI10_19] */ LONG $0xdb0f4466; BYTE $0xe1 // pand xmm12, xmm1 QUAD $0x000001408d6f0f66 // movdqa xmm1, oword 320[rbp] /* [rip + .LCPI10_20] */ @@ -51038,102 +52530,97 @@ LBB10_195: LONG $0xcc6f0f66 // movdqa xmm1, xmm4 LONG $0xde0f4166; BYTE $0xcd // pmaxub xmm1, xmm13 LONG $0xcc740f66 // pcmpeqb xmm1, xmm4 - QUAD $0x0000008024848b4c // mov r8, qword [rsp + 128] - LONG $0x54b60f42; WORD $0x1206 // movzx edx, byte [rsi + r8 + 18] + QUAD $0x0000009024948b4c // mov r10, qword [rsp + 144] + LONG $0x54b60f42; WORD $0x1216 // movzx edx, byte [rsi + r10 + 18] LONG $0xe26e0f66 // movd xmm4, edx QUAD $0x00000150bd6f0f66 // movdqa xmm7, oword 336[rbp] /* [rip + .LCPI10_21] */ LONG $0xcfdb0f66 // pand xmm1, xmm7 LONG $0xcdeb0f66 // por xmm1, xmm5 - LONG $0x54b60f42; WORD $0x1306 // movzx edx, byte [rsi + r8 + 19] + LONG $0x54b60f42; WORD $0x1316 // movzx edx, byte [rsi + r10 + 19] LONG $0xea6e0f66 // movd xmm5, edx LONG $0xcaeb0f66 // por xmm1, xmm2 LONG $0xd36f0f66 // movdqa xmm2, xmm3 LONG $0xde0f4166; BYTE $0xd5 // pmaxub xmm2, xmm13 LONG $0xd3740f66 // pcmpeqb xmm2, xmm3 LONG $0x6f0f4466; BYTE $0xe2 // movdqa xmm12, xmm2 - LONG $0x54b60f42; WORD $0x1406 // movzx edx, byte [rsi + r8 + 20] + LONG $0x54b60f42; WORD $0x1416 // movzx edx, byte [rsi + r10 + 20] LONG $0xd26e0f66 // movd xmm2, edx - QUAD $0x0000a0249c6f0f66; BYTE $0x00 // movdqa xmm3, oword [rsp + 160] - LONG $0x24748b4c; BYTE $0x20 // mov r14, qword [rsp + 32] - QUAD $0x09365c203a0f4266; BYTE $0x01 // pinsrb xmm3, byte [rsi + r14 + 9], 1 - QUAD $0x000000b024948b4c // mov r10, qword [rsp + 176] - QUAD $0x09165c203a0f4266; BYTE $0x02 // pinsrb xmm3, byte [rsi + r10 + 9], 2 - QUAD $0x03091e5c203a0f66 // pinsrb xmm3, byte [rsi + rbx + 9], 3 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] - QUAD $0x0409065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 9], 4 - QUAD $0x00000090248c8b4c // mov r9, qword [rsp + 144] - QUAD $0x090e5c203a0f4266; BYTE $0x05 // pinsrb xmm3, byte [rsi + r9 + 9], 5 - QUAD $0x000000f0249c8b4c // mov r11, qword [rsp + 240] - QUAD $0x091e5c203a0f4266; BYTE $0x06 // pinsrb xmm3, byte [rsi + r11 + 9], 6 - QUAD $0x00000130249c8b48 // mov rbx, qword [rsp + 304] + QUAD $0x000110249c6f0f66; BYTE $0x00 // movdqa xmm3, oword [rsp + 272] + LONG $0x247c8b48; BYTE $0x50 // mov rdi, qword [rsp + 80] + QUAD $0x01093e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 9], 1 + WORD $0x894c; BYTE $0xc0 // mov rax, r8 + QUAD $0x09065c203a0f4266; BYTE $0x02 // pinsrb xmm3, byte [rsi + r8 + 9], 2 + QUAD $0x000000c0248c8b48 // mov rcx, qword [rsp + 192] + QUAD $0x03090e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 9], 3 + LONG $0x244c8b48; BYTE $0x70 // mov rcx, qword [rsp + 112] + QUAD $0x04090e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 9], 4 + LONG $0x24448b4c; BYTE $0x30 // mov r8, qword [rsp + 48] + QUAD $0x09065c203a0f4266; BYTE $0x05 // pinsrb xmm3, byte [rsi + r8 + 9], 5 + QUAD $0x09365c203a0f4266; BYTE $0x06 // pinsrb xmm3, byte [rsi + r14 + 9], 6 QUAD $0x07091e5c203a0f66 // pinsrb xmm3, byte [rsi + rbx + 9], 7 - QUAD $0x000000e024bc8b4c // mov r15, qword [rsp + 224] - QUAD $0x093e5c203a0f4266; BYTE $0x08 // pinsrb xmm3, byte [rsi + r15 + 9], 8 - QUAD $0x092e5c203a0f4266; BYTE $0x09 // pinsrb xmm3, byte [rsi + r13 + 9], 9 - QUAD $0x0000010024a48b4c // mov r12, qword [rsp + 256] - QUAD $0x09265c203a0f4266; BYTE $0x0a // pinsrb xmm3, byte [rsi + r12 + 9], 10 - LONG $0x24548b48; BYTE $0x50 // mov rdx, qword [rsp + 80] - QUAD $0x0b09165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 9], 11 - QUAD $0x000000c024948b48 // mov rdx, qword [rsp + 192] + QUAD $0x091e5c203a0f4266; BYTE $0x08 // pinsrb xmm3, byte [rsi + r11 + 9], 8 + QUAD $0x090e5c203a0f4266; BYTE $0x09 // pinsrb xmm3, byte [rsi + r9 + 9], 9 + QUAD $0x093e5c203a0f4266; BYTE $0x0a // pinsrb xmm3, byte [rsi + r15 + 9], 10 + QUAD $0x000000a024a48b4c // mov r12, qword [rsp + 160] + QUAD $0x09265c203a0f4266; BYTE $0x0b // pinsrb xmm3, byte [rsi + r12 + 9], 11 + QUAD $0x000000d024948b48 // mov rdx, qword [rsp + 208] QUAD $0x0c09165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 9], 12 - LONG $0x24548b48; BYTE $0x70 // mov rdx, qword [rsp + 112] - QUAD $0x0d09165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 9], 13 - QUAD $0x0e093e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 9], 14 - QUAD $0x0f090e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 9], 15 + LONG $0x246c8b4c; BYTE $0x60 // mov r13, qword [rsp + 96] + QUAD $0x092e5c203a0f4266; BYTE $0x0d // pinsrb xmm3, byte [rsi + r13 + 9], 13 + LONG $0x24548b48; BYTE $0x10 // mov rdx, qword [rsp + 16] + QUAD $0x0e09165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 9], 14 + LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] + QUAD $0x0f09165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 9], 15 LONG $0x7d6f0f66; BYTE $0x60 // movdqa xmm7, oword 96[rbp] /* [rip + .LCPI10_6] */ LONG $0xdb0f4466; BYTE $0xe7 // pand xmm12, xmm7 LONG $0xeb0f4466; BYTE $0xe1 // por xmm12, xmm1 - QUAD $0x00a024a47f0f4466; WORD $0x0000 // movdqa oword [rsp + 160], xmm12 + QUAD $0x011024a47f0f4466; WORD $0x0000 // movdqa oword [rsp + 272], xmm12 LONG $0xfb6f0f66 // movdqa xmm7, xmm3 LONG $0xde0f4166; BYTE $0xfd // pmaxub xmm7, xmm13 LONG $0xfb740f66 // pcmpeqb xmm7, xmm3 - LONG $0x54b60f42; WORD $0x1506 // movzx edx, byte [rsi + r8 + 21] + LONG $0x54b60f42; WORD $0x1516 // movzx edx, byte [rsi + r10 + 21] LONG $0xda6e0f66 // movd xmm3, edx - QUAD $0x0a3644203a0f4666; BYTE $0x01 // pinsrb xmm8, byte [rsi + r14 + 10], 1 - WORD $0x894d; BYTE $0xd6 // mov r14, r10 - QUAD $0x0a1644203a0f4666; BYTE $0x02 // pinsrb xmm8, byte [rsi + r10 + 10], 2 - QUAD $0x0000012024948b4c // mov r10, qword [rsp + 288] + QUAD $0x0a3e44203a0f4466; BYTE $0x01 // pinsrb xmm8, byte [rsi + rdi + 10], 1 + QUAD $0x0a0644203a0f4466; BYTE $0x02 // pinsrb xmm8, byte [rsi + rax + 10], 2 + WORD $0x8949; BYTE $0xc6 // mov r14, rax + QUAD $0x000000c024948b4c // mov r10, qword [rsp + 192] QUAD $0x0a1644203a0f4666; BYTE $0x03 // pinsrb xmm8, byte [rsi + r10 + 10], 3 - QUAD $0x0a0644203a0f4466; BYTE $0x04 // pinsrb xmm8, byte [rsi + rax + 10], 4 - WORD $0x894c; BYTE $0xc9 // mov rcx, r9 - QUAD $0x0a0e44203a0f4666; BYTE $0x05 // pinsrb xmm8, byte [rsi + r9 + 10], 5 - WORD $0x894c; BYTE $0xdf // mov rdi, r11 - QUAD $0x0a1e44203a0f4666; BYTE $0x06 // pinsrb xmm8, byte [rsi + r11 + 10], 6 - WORD $0x8949; BYTE $0xdb // mov r11, rbx + QUAD $0x0a0e44203a0f4466; BYTE $0x04 // pinsrb xmm8, byte [rsi + rcx + 10], 4 + QUAD $0x0a0644203a0f4666; BYTE $0x05 // pinsrb xmm8, byte [rsi + r8 + 10], 5 + QUAD $0x0000012024848b48 // mov rax, qword [rsp + 288] + QUAD $0x0a0644203a0f4466; BYTE $0x06 // pinsrb xmm8, byte [rsi + rax + 10], 6 QUAD $0x0a1e44203a0f4466; BYTE $0x07 // pinsrb xmm8, byte [rsi + rbx + 10], 7 - WORD $0x894d; BYTE $0xf8 // mov r8, r15 - QUAD $0x0a3e44203a0f4666; BYTE $0x08 // pinsrb xmm8, byte [rsi + r15 + 10], 8 - QUAD $0x0a2e44203a0f4666; BYTE $0x09 // pinsrb xmm8, byte [rsi + r13 + 10], 9 - WORD $0x894d; BYTE $0xe1 // mov r9, r12 - QUAD $0x0a2644203a0f4666; BYTE $0x0a // pinsrb xmm8, byte [rsi + r12 + 10], 10 - LONG $0x24648b4c; BYTE $0x50 // mov r12, qword [rsp + 80] + QUAD $0x0a1e44203a0f4666; BYTE $0x08 // pinsrb xmm8, byte [rsi + r11 + 10], 8 + QUAD $0x0a0e44203a0f4666; BYTE $0x09 // pinsrb xmm8, byte [rsi + r9 + 10], 9 + WORD $0x894c; BYTE $0xf8 // mov rax, r15 + QUAD $0x0a3e44203a0f4666; BYTE $0x0a // pinsrb xmm8, byte [rsi + r15 + 10], 10 + WORD $0x894c; BYTE $0xe2 // mov rdx, r12 QUAD $0x0a2644203a0f4666; BYTE $0x0b // pinsrb xmm8, byte [rsi + r12 + 10], 11 - QUAD $0x000000c024bc8b4c // mov r15, qword [rsp + 192] - QUAD $0x0a3e44203a0f4666; BYTE $0x0c // pinsrb xmm8, byte [rsi + r15 + 10], 12 - LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] - QUAD $0x0a0644203a0f4466; BYTE $0x0d // pinsrb xmm8, byte [rsi + rax + 10], 13 - LONG $0x245c8b48; BYTE $0x10 // mov rbx, qword [rsp + 16] - QUAD $0x0a1e44203a0f4466; BYTE $0x0e // pinsrb xmm8, byte [rsi + rbx + 10], 14 - LONG $0x24548b48; BYTE $0x30 // mov rdx, qword [rsp + 48] - QUAD $0x0a1644203a0f4466; BYTE $0x0f // pinsrb xmm8, byte [rsi + rdx + 10], 15 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - QUAD $0x0b0654203a0f4466; BYTE $0x01 // pinsrb xmm10, byte [rsi + rax + 11], 1 + QUAD $0x000000d024a48b4c // mov r12, qword [rsp + 208] + QUAD $0x0a2644203a0f4666; BYTE $0x0c // pinsrb xmm8, byte [rsi + r12 + 10], 12 + WORD $0x894d; BYTE $0xef // mov r15, r13 + QUAD $0x0a2e44203a0f4666; BYTE $0x0d // pinsrb xmm8, byte [rsi + r13 + 10], 13 + LONG $0x244c8b48; BYTE $0x10 // mov rcx, qword [rsp + 16] + QUAD $0x0a0e44203a0f4466; BYTE $0x0e // pinsrb xmm8, byte [rsi + rcx + 10], 14 + LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] + QUAD $0x0a2e44203a0f4666; BYTE $0x0f // pinsrb xmm8, byte [rsi + r13 + 10], 15 + QUAD $0x0b3e54203a0f4466; BYTE $0x01 // pinsrb xmm10, byte [rsi + rdi + 11], 1 QUAD $0x0b3654203a0f4666; BYTE $0x02 // pinsrb xmm10, byte [rsi + r14 + 11], 2 QUAD $0x0b1654203a0f4666; BYTE $0x03 // pinsrb xmm10, byte [rsi + r10 + 11], 3 - LONG $0x24748b4c; BYTE $0x60 // mov r14, qword [rsp + 96] - QUAD $0x0b3654203a0f4666; BYTE $0x04 // pinsrb xmm10, byte [rsi + r14 + 11], 4 - QUAD $0x0b0e54203a0f4466; BYTE $0x05 // pinsrb xmm10, byte [rsi + rcx + 11], 5 - QUAD $0x0b3e54203a0f4466; BYTE $0x06 // pinsrb xmm10, byte [rsi + rdi + 11], 6 - QUAD $0x0b1e54203a0f4666; BYTE $0x07 // pinsrb xmm10, byte [rsi + r11 + 11], 7 - QUAD $0x0b0654203a0f4666; BYTE $0x08 // pinsrb xmm10, byte [rsi + r8 + 11], 8 - QUAD $0x0b2e54203a0f4666; BYTE $0x09 // pinsrb xmm10, byte [rsi + r13 + 11], 9 - QUAD $0x0b0e54203a0f4666; BYTE $0x0a // pinsrb xmm10, byte [rsi + r9 + 11], 10 - QUAD $0x0b2654203a0f4666; BYTE $0x0b // pinsrb xmm10, byte [rsi + r12 + 11], 11 - QUAD $0x0b3e54203a0f4666; BYTE $0x0c // pinsrb xmm10, byte [rsi + r15 + 11], 12 - LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] - QUAD $0x0b0654203a0f4466; BYTE $0x0d // pinsrb xmm10, byte [rsi + rax + 11], 13 - QUAD $0x0b1e54203a0f4466; BYTE $0x0e // pinsrb xmm10, byte [rsi + rbx + 11], 14 - QUAD $0x0b1654203a0f4466; BYTE $0x0f // pinsrb xmm10, byte [rsi + rdx + 11], 15 + LONG $0x247c8b48; BYTE $0x70 // mov rdi, qword [rsp + 112] + QUAD $0x0b3e54203a0f4466; BYTE $0x04 // pinsrb xmm10, byte [rsi + rdi + 11], 4 + QUAD $0x0b0654203a0f4666; BYTE $0x05 // pinsrb xmm10, byte [rsi + r8 + 11], 5 + QUAD $0x0000012024b48b4c // mov r14, qword [rsp + 288] + QUAD $0x0b3654203a0f4666; BYTE $0x06 // pinsrb xmm10, byte [rsi + r14 + 11], 6 + QUAD $0x0b1e54203a0f4466; BYTE $0x07 // pinsrb xmm10, byte [rsi + rbx + 11], 7 + QUAD $0x0b1e54203a0f4666; BYTE $0x08 // pinsrb xmm10, byte [rsi + r11 + 11], 8 + QUAD $0x0b0e54203a0f4666; BYTE $0x09 // pinsrb xmm10, byte [rsi + r9 + 11], 9 + QUAD $0x0b0654203a0f4466; BYTE $0x0a // pinsrb xmm10, byte [rsi + rax + 11], 10 + QUAD $0x0b1654203a0f4466; BYTE $0x0b // pinsrb xmm10, byte [rsi + rdx + 11], 11 + QUAD $0x0b2654203a0f4666; BYTE $0x0c // pinsrb xmm10, byte [rsi + r12 + 11], 12 + QUAD $0x0b3e54203a0f4666; BYTE $0x0d // pinsrb xmm10, byte [rsi + r15 + 11], 13 + QUAD $0x0b0e54203a0f4466; BYTE $0x0e // pinsrb xmm10, byte [rsi + rcx + 11], 14 + QUAD $0x0b2e54203a0f4666; BYTE $0x0f // pinsrb xmm10, byte [rsi + r13 + 11], 15 QUAD $0x00000100bddb0f66 // pand xmm7, oword 256[rbp] /* [rip + .LCPI10_16] */ LONG $0xf80f4166; BYTE $0xf9 // psubb xmm7, xmm9 LONG $0x6f0f4166; BYTE $0xc8 // movdqa xmm1, xmm8 @@ -51142,56 +52629,60 @@ LBB10_195: LONG $0x6f0f4566; BYTE $0xca // movdqa xmm9, xmm10 LONG $0xde0f4566; BYTE $0xcd // pmaxub xmm9, xmm13 LONG $0x740f4566; BYTE $0xca // pcmpeqb xmm9, xmm10 - QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] + QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] LONG $0x0654b60f; BYTE $0x16 // movzx edx, byte [rsi + rax + 22] LONG $0x6e0f4466; BYTE $0xd2 // movd xmm10, edx - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - QUAD $0x010c0674203a0f66 // pinsrb xmm6, byte [rsi + rax + 12], 1 - QUAD $0x000000b024a48b4c // mov r12, qword [rsp + 176] - QUAD $0x0c2674203a0f4266; BYTE $0x02 // pinsrb xmm6, byte [rsi + r12 + 12], 2 + LONG $0x24448b4c; BYTE $0x50 // mov r8, qword [rsp + 80] + QUAD $0x0c0674203a0f4266; BYTE $0x01 // pinsrb xmm6, byte [rsi + r8 + 12], 1 + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] + QUAD $0x020c0674203a0f66 // pinsrb xmm6, byte [rsi + rax + 12], 2 QUAD $0x0c1674203a0f4266; BYTE $0x03 // pinsrb xmm6, byte [rsi + r10 + 12], 3 - WORD $0x894c; BYTE $0xf2 // mov rdx, r14 - QUAD $0x0c3674203a0f4266; BYTE $0x04 // pinsrb xmm6, byte [rsi + r14 + 12], 4 - QUAD $0x050c0e74203a0f66 // pinsrb xmm6, byte [rsi + rcx + 12], 5 - QUAD $0x060c3e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 12], 6 - QUAD $0x0c1e74203a0f4266; BYTE $0x07 // pinsrb xmm6, byte [rsi + r11 + 12], 7 - QUAD $0x0c0674203a0f4266; BYTE $0x08 // pinsrb xmm6, byte [rsi + r8 + 12], 8 - QUAD $0x0c2e74203a0f4266; BYTE $0x09 // pinsrb xmm6, byte [rsi + r13 + 12], 9 - QUAD $0x0c0e74203a0f4266; BYTE $0x0a // pinsrb xmm6, byte [rsi + r9 + 12], 10 - LONG $0x24748b4c; BYTE $0x50 // mov r14, qword [rsp + 80] - QUAD $0x0c3674203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rsi + r14 + 12], 11 - QUAD $0x0c3e74203a0f4266; BYTE $0x0c // pinsrb xmm6, byte [rsi + r15 + 12], 12 - LONG $0x245c8b48; BYTE $0x70 // mov rbx, qword [rsp + 112] - QUAD $0x0d0c1e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 12], 13 - LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] - QUAD $0x0e0c0674203a0f66 // pinsrb xmm6, byte [rsi + rax + 12], 14 - LONG $0x24448b48; BYTE $0x30 // mov rax, qword [rsp + 48] - QUAD $0x0f0c0674203a0f66 // pinsrb xmm6, byte [rsi + rax + 12], 15 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] - QUAD $0x0d067c203a0f4466; BYTE $0x01 // pinsrb xmm15, byte [rsi + rax + 13], 1 - QUAD $0x0d267c203a0f4666; BYTE $0x02 // pinsrb xmm15, byte [rsi + r12 + 13], 2 - QUAD $0x0d167c203a0f4666; BYTE $0x03 // pinsrb xmm15, byte [rsi + r10 + 13], 3 - QUAD $0x0d167c203a0f4466; BYTE $0x04 // pinsrb xmm15, byte [rsi + rdx + 13], 4 - QUAD $0x0d0e7c203a0f4466; BYTE $0x05 // pinsrb xmm15, byte [rsi + rcx + 13], 5 - QUAD $0x0d3e7c203a0f4466; BYTE $0x06 // pinsrb xmm15, byte [rsi + rdi + 13], 6 - QUAD $0x0d1e7c203a0f4666; BYTE $0x07 // pinsrb xmm15, byte [rsi + r11 + 13], 7 - QUAD $0x0d067c203a0f4666; BYTE $0x08 // pinsrb xmm15, byte [rsi + r8 + 13], 8 - QUAD $0x0d2e7c203a0f4666; BYTE $0x09 // pinsrb xmm15, byte [rsi + r13 + 13], 9 - QUAD $0x0d0e7c203a0f4666; BYTE $0x0a // pinsrb xmm15, byte [rsi + r9 + 13], 10 - QUAD $0x0d367c203a0f4666; BYTE $0x0b // pinsrb xmm15, byte [rsi + r14 + 13], 11 - QUAD $0x0d3e7c203a0f4666; BYTE $0x0c // pinsrb xmm15, byte [rsi + r15 + 13], 12 - WORD $0x894c; BYTE $0xf8 // mov rax, r15 - QUAD $0x0d1e7c203a0f4466; BYTE $0x0d // pinsrb xmm15, byte [rsi + rbx + 13], 13 - LONG $0x247c8b4c; BYTE $0x10 // mov r15, qword [rsp + 16] - QUAD $0x0d3e7c203a0f4666; BYTE $0x0e // pinsrb xmm15, byte [rsi + r15 + 13], 14 + WORD $0x894d; BYTE $0xd7 // mov r15, r10 + WORD $0x8948; BYTE $0xf9 // mov rcx, rdi + QUAD $0x040c3e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 12], 4 + LONG $0x247c8b48; BYTE $0x30 // mov rdi, qword [rsp + 48] + QUAD $0x050c3e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 12], 5 + QUAD $0x0c3674203a0f4266; BYTE $0x06 // pinsrb xmm6, byte [rsi + r14 + 12], 6 + QUAD $0x070c1e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 12], 7 + QUAD $0x0c1e74203a0f4266; BYTE $0x08 // pinsrb xmm6, byte [rsi + r11 + 12], 8 + QUAD $0x0c0e74203a0f4266; BYTE $0x09 // pinsrb xmm6, byte [rsi + r9 + 12], 9 + QUAD $0x000000b024948b48 // mov rdx, qword [rsp + 176] + QUAD $0x0a0c1674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 12], 10 + QUAD $0x000000a0249c8b4c // mov r11, qword [rsp + 160] + QUAD $0x0c1e74203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rsi + r11 + 12], 11 + QUAD $0x0c2674203a0f4266; BYTE $0x0c // pinsrb xmm6, byte [rsi + r12 + 12], 12 + LONG $0x24548b48; BYTE $0x60 // mov rdx, qword [rsp + 96] + QUAD $0x0d0c1674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 12], 13 + LONG $0x24548b4c; BYTE $0x10 // mov r10, qword [rsp + 16] + QUAD $0x0c1674203a0f4266; BYTE $0x0e // pinsrb xmm6, byte [rsi + r10 + 12], 14 + LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] + QUAD $0x0c2e74203a0f4266; BYTE $0x0f // pinsrb xmm6, byte [rsi + r13 + 12], 15 + QUAD $0x0d067c203a0f4666; BYTE $0x01 // pinsrb xmm15, byte [rsi + r8 + 13], 1 + QUAD $0x0d067c203a0f4466; BYTE $0x02 // pinsrb xmm15, byte [rsi + rax + 13], 2 + QUAD $0x0d3e7c203a0f4666; BYTE $0x03 // pinsrb xmm15, byte [rsi + r15 + 13], 3 + QUAD $0x0d0e7c203a0f4466; BYTE $0x04 // pinsrb xmm15, byte [rsi + rcx + 13], 4 + QUAD $0x0d3e7c203a0f4466; BYTE $0x05 // pinsrb xmm15, byte [rsi + rdi + 13], 5 + WORD $0x8949; BYTE $0xf8 // mov r8, rdi + QUAD $0x0d367c203a0f4666; BYTE $0x06 // pinsrb xmm15, byte [rsi + r14 + 13], 6 + QUAD $0x0d1e7c203a0f4466; BYTE $0x07 // pinsrb xmm15, byte [rsi + rbx + 13], 7 + QUAD $0x0000010024bc8b48 // mov rdi, qword [rsp + 256] + QUAD $0x0d3e7c203a0f4466; BYTE $0x08 // pinsrb xmm15, byte [rsi + rdi + 13], 8 + QUAD $0x0d0e7c203a0f4666; BYTE $0x09 // pinsrb xmm15, byte [rsi + r9 + 13], 9 + QUAD $0x000000b024bc8b4c // mov r15, qword [rsp + 176] + QUAD $0x0d3e7c203a0f4666; BYTE $0x0a // pinsrb xmm15, byte [rsi + r15 + 13], 10 + QUAD $0x0d1e7c203a0f4666; BYTE $0x0b // pinsrb xmm15, byte [rsi + r11 + 13], 11 + QUAD $0x0d267c203a0f4666; BYTE $0x0c // pinsrb xmm15, byte [rsi + r12 + 13], 12 + QUAD $0x0d167c203a0f4466; BYTE $0x0d // pinsrb xmm15, byte [rsi + rdx + 13], 13 + WORD $0x8949; BYTE $0xd3 // mov r11, rdx + QUAD $0x0d167c203a0f4666; BYTE $0x0e // pinsrb xmm15, byte [rsi + r10 + 13], 14 QUAD $0x000001108ddb0f66 // pand xmm1, oword 272[rbp] /* [rip + .LCPI10_17] */ QUAD $0x0001208ddb0f4466; BYTE $0x00 // pand xmm9, oword 288[rbp] /* [rip + .LCPI10_18] */ LONG $0xeb0f4466; BYTE $0xc9 // por xmm9, xmm1 - QUAD $0x00000080249c8b48 // mov rbx, qword [rsp + 128] - LONG $0x1e54b60f; BYTE $0x17 // movzx edx, byte [rsi + rbx + 23] + QUAD $0x0000009024848b48 // mov rax, qword [rsp + 144] + LONG $0x0654b60f; BYTE $0x17 // movzx edx, byte [rsi + rax + 23] LONG $0x6e0f4466; BYTE $0xc2 // movd xmm8, edx - LONG $0x24548b48; BYTE $0x30 // mov rdx, qword [rsp + 48] - QUAD $0x0d167c203a0f4466; BYTE $0x0f // pinsrb xmm15, byte [rsi + rdx + 13], 15 + LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] + QUAD $0x0d2e7c203a0f4666; BYTE $0x0f // pinsrb xmm15, byte [rsi + r13 + 13], 15 LONG $0xeb0f4466; BYTE $0xcf // por xmm9, xmm7 LONG $0xce6f0f66 // movdqa xmm1, xmm6 LONG $0xde0f4166; BYTE $0xcd // pmaxub xmm1, xmm13 @@ -51199,155 +52690,156 @@ LBB10_195: LONG $0x6f0f4166; BYTE $0xff // movdqa xmm7, xmm15 LONG $0xde0f4166; BYTE $0xfd // pmaxub xmm7, xmm13 LONG $0x740f4166; BYTE $0xff // pcmpeqb xmm7, xmm15 - LONG $0x1e54b60f; BYTE $0x19 // movzx edx, byte [rsi + rbx + 25] + LONG $0x0654b60f; BYTE $0x19 // movzx edx, byte [rsi + rax + 25] LONG $0x6e0f4466; BYTE $0xfa // movd xmm15, edx - LONG $0x245c8b48; BYTE $0x20 // mov rbx, qword [rsp + 32] - QUAD $0x0e1e74203a0f4466; BYTE $0x01 // pinsrb xmm14, byte [rsi + rbx + 14], 1 - QUAD $0x0e2674203a0f4666; BYTE $0x02 // pinsrb xmm14, byte [rsi + r12 + 14], 2 + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] + QUAD $0x0e0674203a0f4466; BYTE $0x01 // pinsrb xmm14, byte [rsi + rax + 14], 1 + QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] + QUAD $0x0e0e74203a0f4466; BYTE $0x02 // pinsrb xmm14, byte [rsi + rcx + 14], 2 + QUAD $0x000000c024948b4c // mov r10, qword [rsp + 192] QUAD $0x0e1674203a0f4666; BYTE $0x03 // pinsrb xmm14, byte [rsi + r10 + 14], 3 - LONG $0x24648b4c; BYTE $0x60 // mov r12, qword [rsp + 96] - QUAD $0x0e2674203a0f4666; BYTE $0x04 // pinsrb xmm14, byte [rsi + r12 + 14], 4 - QUAD $0x0e0e74203a0f4466; BYTE $0x05 // pinsrb xmm14, byte [rsi + rcx + 14], 5 - QUAD $0x0e3e74203a0f4466; BYTE $0x06 // pinsrb xmm14, byte [rsi + rdi + 14], 6 - QUAD $0x0e1e74203a0f4666; BYTE $0x07 // pinsrb xmm14, byte [rsi + r11 + 14], 7 - QUAD $0x0e0674203a0f4666; BYTE $0x08 // pinsrb xmm14, byte [rsi + r8 + 14], 8 - WORD $0x894c; BYTE $0xea // mov rdx, r13 - QUAD $0x0e2e74203a0f4666; BYTE $0x09 // pinsrb xmm14, byte [rsi + r13 + 14], 9 - QUAD $0x0e0e74203a0f4666; BYTE $0x0a // pinsrb xmm14, byte [rsi + r9 + 14], 10 - QUAD $0x0e3674203a0f4666; BYTE $0x0b // pinsrb xmm14, byte [rsi + r14 + 14], 11 - QUAD $0x0e0674203a0f4466; BYTE $0x0c // pinsrb xmm14, byte [rsi + rax + 14], 12 - LONG $0x246c8b4c; BYTE $0x70 // mov r13, qword [rsp + 112] - QUAD $0x0e2e74203a0f4666; BYTE $0x0d // pinsrb xmm14, byte [rsi + r13 + 14], 13 - QUAD $0x0e3e74203a0f4666; BYTE $0x0e // pinsrb xmm14, byte [rsi + r15 + 14], 14 - LONG $0x247c8b4c; BYTE $0x30 // mov r15, qword [rsp + 48] - QUAD $0x0e3e74203a0f4666; BYTE $0x0f // pinsrb xmm14, byte [rsi + r15 + 14], 15 - QUAD $0x0f1e5c203a0f4466; BYTE $0x01 // pinsrb xmm11, byte [rsi + rbx + 15], 1 - QUAD $0x000000b0249c8b48 // mov rbx, qword [rsp + 176] - QUAD $0x0f1e5c203a0f4466; BYTE $0x02 // pinsrb xmm11, byte [rsi + rbx + 15], 2 - QUAD $0x0f165c203a0f4666; BYTE $0x03 // pinsrb xmm11, byte [rsi + r10 + 15], 3 - QUAD $0x0f265c203a0f4666; BYTE $0x04 // pinsrb xmm11, byte [rsi + r12 + 15], 4 - QUAD $0x0f0e5c203a0f4466; BYTE $0x05 // pinsrb xmm11, byte [rsi + rcx + 15], 5 - QUAD $0x0f3e5c203a0f4466; BYTE $0x06 // pinsrb xmm11, byte [rsi + rdi + 15], 6 - QUAD $0x0f1e5c203a0f4666; BYTE $0x07 // pinsrb xmm11, byte [rsi + r11 + 15], 7 - QUAD $0x0f065c203a0f4666; BYTE $0x08 // pinsrb xmm11, byte [rsi + r8 + 15], 8 - QUAD $0x0f165c203a0f4466; BYTE $0x09 // pinsrb xmm11, byte [rsi + rdx + 15], 9 - QUAD $0x0f0e5c203a0f4666; BYTE $0x0a // pinsrb xmm11, byte [rsi + r9 + 15], 10 - QUAD $0x0f365c203a0f4666; BYTE $0x0b // pinsrb xmm11, byte [rsi + r14 + 15], 11 - QUAD $0x0f065c203a0f4466; BYTE $0x0c // pinsrb xmm11, byte [rsi + rax + 15], 12 - QUAD $0x0f2e5c203a0f4666; BYTE $0x0d // pinsrb xmm11, byte [rsi + r13 + 15], 13 + LONG $0x24548b48; BYTE $0x70 // mov rdx, qword [rsp + 112] + QUAD $0x0e1674203a0f4466; BYTE $0x04 // pinsrb xmm14, byte [rsi + rdx + 14], 4 + QUAD $0x0e0674203a0f4666; BYTE $0x05 // pinsrb xmm14, byte [rsi + r8 + 14], 5 + WORD $0x894d; BYTE $0xf0 // mov r8, r14 + QUAD $0x0e3674203a0f4666; BYTE $0x06 // pinsrb xmm14, byte [rsi + r14 + 14], 6 + QUAD $0x0e1e74203a0f4466; BYTE $0x07 // pinsrb xmm14, byte [rsi + rbx + 14], 7 + QUAD $0x0e3e74203a0f4466; BYTE $0x08 // pinsrb xmm14, byte [rsi + rdi + 14], 8 + WORD $0x8949; BYTE $0xfe // mov r14, rdi + QUAD $0x0e0e74203a0f4666; BYTE $0x09 // pinsrb xmm14, byte [rsi + r9 + 14], 9 + QUAD $0x0e3e74203a0f4666; BYTE $0x0a // pinsrb xmm14, byte [rsi + r15 + 14], 10 + QUAD $0x000000a024bc8b48 // mov rdi, qword [rsp + 160] + QUAD $0x0e3e74203a0f4466; BYTE $0x0b // pinsrb xmm14, byte [rsi + rdi + 14], 11 + QUAD $0x0e2674203a0f4666; BYTE $0x0c // pinsrb xmm14, byte [rsi + r12 + 14], 12 + QUAD $0x0e1e74203a0f4666; BYTE $0x0d // pinsrb xmm14, byte [rsi + r11 + 14], 13 LONG $0x247c8b48; BYTE $0x10 // mov rdi, qword [rsp + 16] + QUAD $0x0e3e74203a0f4466; BYTE $0x0e // pinsrb xmm14, byte [rsi + rdi + 14], 14 + QUAD $0x0e2e74203a0f4666; BYTE $0x0f // pinsrb xmm14, byte [rsi + r13 + 14], 15 + QUAD $0x0f065c203a0f4466; BYTE $0x01 // pinsrb xmm11, byte [rsi + rax + 15], 1 + QUAD $0x0f0e5c203a0f4466; BYTE $0x02 // pinsrb xmm11, byte [rsi + rcx + 15], 2 + QUAD $0x0f165c203a0f4666; BYTE $0x03 // pinsrb xmm11, byte [rsi + r10 + 15], 3 + QUAD $0x0f165c203a0f4466; BYTE $0x04 // pinsrb xmm11, byte [rsi + rdx + 15], 4 + WORD $0x8948; BYTE $0xd1 // mov rcx, rdx + LONG $0x24548b48; BYTE $0x30 // mov rdx, qword [rsp + 48] + QUAD $0x0f165c203a0f4466; BYTE $0x05 // pinsrb xmm11, byte [rsi + rdx + 15], 5 + QUAD $0x0f065c203a0f4666; BYTE $0x06 // pinsrb xmm11, byte [rsi + r8 + 15], 6 + QUAD $0x0f1e5c203a0f4466; BYTE $0x07 // pinsrb xmm11, byte [rsi + rbx + 15], 7 + QUAD $0x0f365c203a0f4666; BYTE $0x08 // pinsrb xmm11, byte [rsi + r14 + 15], 8 + QUAD $0x0f0e5c203a0f4666; BYTE $0x09 // pinsrb xmm11, byte [rsi + r9 + 15], 9 + QUAD $0x0f3e5c203a0f4666; BYTE $0x0a // pinsrb xmm11, byte [rsi + r15 + 15], 10 + QUAD $0x000000a024848b4c // mov r8, qword [rsp + 160] + QUAD $0x0f065c203a0f4666; BYTE $0x0b // pinsrb xmm11, byte [rsi + r8 + 15], 11 + QUAD $0x0f265c203a0f4666; BYTE $0x0c // pinsrb xmm11, byte [rsi + r12 + 15], 12 + QUAD $0x0f1e5c203a0f4666; BYTE $0x0d // pinsrb xmm11, byte [rsi + r11 + 15], 13 QUAD $0x0f3e5c203a0f4466; BYTE $0x0e // pinsrb xmm11, byte [rsi + rdi + 15], 14 - QUAD $0x0f3e5c203a0f4666; BYTE $0x0f // pinsrb xmm11, byte [rsi + r15 + 15], 15 - WORD $0x894d; BYTE $0xfc // mov r12, r15 + QUAD $0x0f2e5c203a0f4666; BYTE $0x0f // pinsrb xmm11, byte [rsi + r13 + 15], 15 QUAD $0x000001308ddb0f66 // pand xmm1, oword 304[rbp] /* [rip + .LCPI10_19] */ QUAD $0x00000140bddb0f66 // pand xmm7, oword 320[rbp] /* [rip + .LCPI10_20] */ LONG $0xf9eb0f66 // por xmm7, xmm1 LONG $0x6f0f4166; BYTE $0xce // movdqa xmm1, xmm14 LONG $0xde0f4166; BYTE $0xcd // pmaxub xmm1, xmm13 LONG $0x740f4166; BYTE $0xce // pcmpeqb xmm1, xmm14 - QUAD $0x0000008024ac8b4c // mov r13, qword [rsp + 128] - LONG $0x54b60f42; WORD $0x1a2e // movzx edx, byte [rsi + r13 + 26] + QUAD $0x0000009024bc8b48 // mov rdi, qword [rsp + 144] + LONG $0x3e54b60f; BYTE $0x1a // movzx edx, byte [rsi + rdi + 26] LONG $0xf26e0f66 // movd xmm6, edx QUAD $0x000001508ddb0f66 // pand xmm1, oword 336[rbp] /* [rip + .LCPI10_21] */ LONG $0xcfeb0f66 // por xmm1, xmm7 - LONG $0x54b60f42; WORD $0x1b2e // movzx edx, byte [rsi + r13 + 27] + LONG $0x3e54b60f; BYTE $0x1b // movzx edx, byte [rsi + rdi + 27] LONG $0xfa6e0f66 // movd xmm7, edx LONG $0xeb0f4166; BYTE $0xc9 // por xmm1, xmm9 LONG $0x6f0f4566; BYTE $0xf3 // movdqa xmm14, xmm11 LONG $0xde0f4566; BYTE $0xf5 // pmaxub xmm14, xmm13 LONG $0x740f4566; BYTE $0xf3 // pcmpeqb xmm14, xmm11 - LONG $0x54b60f42; WORD $0x1c2e // movzx edx, byte [rsi + r13 + 28] + LONG $0x3e54b60f; BYTE $0x1c // movzx edx, byte [rsi + rdi + 28] LONG $0x6e0f4466; BYTE $0xca // movd xmm9, edx - LONG $0x244c8b48; BYTE $0x20 // mov rcx, qword [rsp + 32] - QUAD $0x01110e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 17], 1 - QUAD $0x02111e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 17], 2 + QUAD $0x01110644203a0f66 // pinsrb xmm0, byte [rsi + rax + 17], 1 + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] + QUAD $0x02110644203a0f66 // pinsrb xmm0, byte [rsi + rax + 17], 2 QUAD $0x111644203a0f4266; BYTE $0x03 // pinsrb xmm0, byte [rsi + r10 + 17], 3 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] - QUAD $0x04110644203a0f66 // pinsrb xmm0, byte [rsi + rax + 17], 4 - QUAD $0x0000009024848b4c // mov r8, qword [rsp + 144] - QUAD $0x110644203a0f4266; BYTE $0x05 // pinsrb xmm0, byte [rsi + r8 + 17], 5 - QUAD $0x000000f0248c8b4c // mov r9, qword [rsp + 240] + QUAD $0x04110e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 17], 4 + LONG $0x24548b48; BYTE $0x30 // mov rdx, qword [rsp + 48] + QUAD $0x05111644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 17], 5 + QUAD $0x00000120248c8b4c // mov r9, qword [rsp + 288] QUAD $0x110e44203a0f4266; BYTE $0x06 // pinsrb xmm0, byte [rsi + r9 + 17], 6 - QUAD $0x111e44203a0f4266; BYTE $0x07 // pinsrb xmm0, byte [rsi + r11 + 17], 7 - QUAD $0x000000e0249c8b48 // mov rbx, qword [rsp + 224] - QUAD $0x08111e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 17], 8 - QUAD $0x0000011024948b48 // mov rdx, qword [rsp + 272] - QUAD $0x09111644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 17], 9 - QUAD $0x0000010024b48b4c // mov r14, qword [rsp + 256] - QUAD $0x113644203a0f4266; BYTE $0x0a // pinsrb xmm0, byte [rsi + r14 + 17], 10 - LONG $0x247c8b4c; BYTE $0x50 // mov r15, qword [rsp + 80] - QUAD $0x113e44203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r15 + 17], 11 - QUAD $0x000000c024948b48 // mov rdx, qword [rsp + 192] - QUAD $0x0c111644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 17], 12 - LONG $0x24548b48; BYTE $0x70 // mov rdx, qword [rsp + 112] - QUAD $0x0d111644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 17], 13 - QUAD $0x0e113e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 17], 14 - QUAD $0x112644203a0f4266; BYTE $0x0f // pinsrb xmm0, byte [rsi + r12 + 17], 15 + QUAD $0x07111e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 17], 7 + QUAD $0x00000100249c8b4c // mov r11, qword [rsp + 256] + QUAD $0x111e44203a0f4266; BYTE $0x08 // pinsrb xmm0, byte [rsi + r11 + 17], 8 + QUAD $0x0000013024bc8b4c // mov r15, qword [rsp + 304] + QUAD $0x113e44203a0f4266; BYTE $0x09 // pinsrb xmm0, byte [rsi + r15 + 17], 9 + QUAD $0x000000b024948b48 // mov rdx, qword [rsp + 176] + QUAD $0x0a111644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 17], 10 + QUAD $0x110644203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r8 + 17], 11 + QUAD $0x112644203a0f4266; BYTE $0x0c // pinsrb xmm0, byte [rsi + r12 + 17], 12 + LONG $0x246c8b4c; BYTE $0x60 // mov r13, qword [rsp + 96] + QUAD $0x112e44203a0f4266; BYTE $0x0d // pinsrb xmm0, byte [rsi + r13 + 17], 13 + LONG $0x24748b4c; BYTE $0x10 // mov r14, qword [rsp + 16] + QUAD $0x113644203a0f4266; BYTE $0x0e // pinsrb xmm0, byte [rsi + r14 + 17], 14 + LONG $0x24548b48; BYTE $0x20 // mov rdx, qword [rsp + 32] + QUAD $0x0f111644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 17], 15 LONG $0xdb0f4466; WORD $0x6075 // pand xmm14, oword 96[rbp] /* [rip + .LCPI10_6] */ LONG $0xeb0f4466; BYTE $0xf1 // por xmm14, xmm1 LONG $0xc86f0f66 // movdqa xmm1, xmm0 LONG $0x6f0f4566; BYTE $0xe5 // movdqa xmm12, xmm13 LONG $0xde0f4166; BYTE $0xcd // pmaxub xmm1, xmm13 LONG $0xc8740f66 // pcmpeqb xmm1, xmm0 - LONG $0x54b60f42; WORD $0x1d2e // movzx edx, byte [rsi + r13 + 29] + LONG $0x3e54b60f; BYTE $0x1d // movzx edx, byte [rsi + rdi + 29] LONG $0xc26e0f66 // movd xmm0, edx - QUAD $0x01120e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 18], 1 - QUAD $0x000000b024a48b4c // mov r12, qword [rsp + 176] - QUAD $0x122664203a0f4266; BYTE $0x02 // pinsrb xmm4, byte [rsi + r12 + 18], 2 + LONG $0x24548b48; BYTE $0x50 // mov rdx, qword [rsp + 80] + QUAD $0x01121664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 18], 1 + QUAD $0x02120664203a0f66 // pinsrb xmm4, byte [rsi + rax + 18], 2 QUAD $0x121664203a0f4266; BYTE $0x03 // pinsrb xmm4, byte [rsi + r10 + 18], 3 - QUAD $0x04120664203a0f66 // pinsrb xmm4, byte [rsi + rax + 18], 4 - WORD $0x894c; BYTE $0xc1 // mov rcx, r8 - QUAD $0x120664203a0f4266; BYTE $0x05 // pinsrb xmm4, byte [rsi + r8 + 18], 5 + QUAD $0x04120e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 18], 4 + LONG $0x244c8b48; BYTE $0x30 // mov rcx, qword [rsp + 48] + QUAD $0x05120e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 18], 5 WORD $0x894c; BYTE $0xcf // mov rdi, r9 QUAD $0x120e64203a0f4266; BYTE $0x06 // pinsrb xmm4, byte [rsi + r9 + 18], 6 - QUAD $0x121e64203a0f4266; BYTE $0x07 // pinsrb xmm4, byte [rsi + r11 + 18], 7 - WORD $0x8949; BYTE $0xd8 // mov r8, rbx - QUAD $0x08121e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 18], 8 - QUAD $0x00000110249c8b48 // mov rbx, qword [rsp + 272] - QUAD $0x09121e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 18], 9 - WORD $0x894d; BYTE $0xf1 // mov r9, r14 - QUAD $0x123664203a0f4266; BYTE $0x0a // pinsrb xmm4, byte [rsi + r14 + 18], 10 - WORD $0x894d; BYTE $0xfe // mov r14, r15 + QUAD $0x07121e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 18], 7 + WORD $0x894d; BYTE $0xd8 // mov r8, r11 + QUAD $0x121e64203a0f4266; BYTE $0x08 // pinsrb xmm4, byte [rsi + r11 + 18], 8 + WORD $0x894d; BYTE $0xf9 // mov r9, r15 + QUAD $0x123e64203a0f4266; BYTE $0x09 // pinsrb xmm4, byte [rsi + r15 + 18], 9 + QUAD $0x000000b0249c8b4c // mov r11, qword [rsp + 176] + QUAD $0x121e64203a0f4266; BYTE $0x0a // pinsrb xmm4, byte [rsi + r11 + 18], 10 + QUAD $0x000000a024bc8b4c // mov r15, qword [rsp + 160] QUAD $0x123e64203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r15 + 18], 11 - QUAD $0x000000c024bc8b4c // mov r15, qword [rsp + 192] - QUAD $0x123e64203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r15 + 18], 12 - LONG $0x24548b48; BYTE $0x70 // mov rdx, qword [rsp + 112] - QUAD $0x0d121664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 18], 13 - LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] - QUAD $0x0e120664203a0f66 // pinsrb xmm4, byte [rsi + rax + 18], 14 - LONG $0x246c8b4c; BYTE $0x30 // mov r13, qword [rsp + 48] + QUAD $0x122664203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r12 + 18], 12 + WORD $0x894c; BYTE $0xea // mov rdx, r13 + QUAD $0x122e64203a0f4266; BYTE $0x0d // pinsrb xmm4, byte [rsi + r13 + 18], 13 + QUAD $0x123664203a0f4266; BYTE $0x0e // pinsrb xmm4, byte [rsi + r14 + 18], 14 + LONG $0x246c8b4c; BYTE $0x20 // mov r13, qword [rsp + 32] QUAD $0x122e64203a0f4266; BYTE $0x0f // pinsrb xmm4, byte [rsi + r13 + 18], 15 - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] QUAD $0x0113066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 19], 1 - QUAD $0x13266c203a0f4266; BYTE $0x02 // pinsrb xmm5, byte [rsi + r12 + 19], 2 + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] + QUAD $0x0213066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 19], 2 QUAD $0x13166c203a0f4266; BYTE $0x03 // pinsrb xmm5, byte [rsi + r10 + 19], 3 - LONG $0x24448b48; BYTE $0x60 // mov rax, qword [rsp + 96] + LONG $0x24448b48; BYTE $0x70 // mov rax, qword [rsp + 112] QUAD $0x0413066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 19], 4 QUAD $0x05130e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 19], 5 QUAD $0x06133e6c203a0f66 // pinsrb xmm5, byte [rsi + rdi + 19], 6 - QUAD $0x131e6c203a0f4266; BYTE $0x07 // pinsrb xmm5, byte [rsi + r11 + 19], 7 + QUAD $0x07131e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 19], 7 QUAD $0x13066c203a0f4266; BYTE $0x08 // pinsrb xmm5, byte [rsi + r8 + 19], 8 - QUAD $0x09131e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 19], 9 - QUAD $0x130e6c203a0f4266; BYTE $0x0a // pinsrb xmm5, byte [rsi + r9 + 19], 10 - QUAD $0x13366c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rsi + r14 + 19], 11 - QUAD $0x133e6c203a0f4266; BYTE $0x0c // pinsrb xmm5, byte [rsi + r15 + 19], 12 + WORD $0x894d; BYTE $0xc6 // mov r14, r8 + QUAD $0x130e6c203a0f4266; BYTE $0x09 // pinsrb xmm5, byte [rsi + r9 + 19], 9 + QUAD $0x131e6c203a0f4266; BYTE $0x0a // pinsrb xmm5, byte [rsi + r11 + 19], 10 + QUAD $0x133e6c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rsi + r15 + 19], 11 + QUAD $0x13266c203a0f4266; BYTE $0x0c // pinsrb xmm5, byte [rsi + r12 + 19], 12 QUAD $0x0d13166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 19], 13 - WORD $0x8948; BYTE $0xd7 // mov rdi, rdx - LONG $0x24648b4c; BYTE $0x10 // mov r12, qword [rsp + 16] - QUAD $0x13266c203a0f4266; BYTE $0x0e // pinsrb xmm5, byte [rsi + r12 + 19], 14 + LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] + QUAD $0x0e13066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 19], 14 QUAD $0x132e6c203a0f4266; BYTE $0x0f // pinsrb xmm5, byte [rsi + r13 + 19], 15 QUAD $0x000001008ddb0f66 // pand xmm1, oword 256[rbp] /* [rip + .LCPI10_16] */ - QUAD $0x0001b0248cf80f66; BYTE $0x00 // psubb xmm1, oword [rsp + 432] + QUAD $0x000170248cf80f66; BYTE $0x00 // psubb xmm1, oword [rsp + 368] LONG $0x6f0f4466; BYTE $0xec // movdqa xmm13, xmm4 LONG $0xde0f4566; BYTE $0xec // pmaxub xmm13, xmm12 LONG $0x740f4466; BYTE $0xec // pcmpeqb xmm13, xmm4 LONG $0x6f0f4466; BYTE $0xdd // movdqa xmm11, xmm5 LONG $0xde0f4566; BYTE $0xdc // pmaxub xmm11, xmm12 LONG $0x740f4466; BYTE $0xdd // pcmpeqb xmm11, xmm5 - QUAD $0x00000080248c8b48 // mov rcx, qword [rsp + 128] - LONG $0x0e54b60f; BYTE $0x1e // movzx edx, byte [rsi + rcx + 30] + QUAD $0x0000009024848b4c // mov r8, qword [rsp + 144] + LONG $0x54b60f42; WORD $0x1e06 // movzx edx, byte [rsi + r8 + 30] LONG $0xe26e0f66 // movd xmm4, edx - LONG $0x24448b48; BYTE $0x20 // mov rax, qword [rsp + 32] + LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] QUAD $0x01140654203a0f66 // pinsrb xmm2, byte [rsi + rax + 20], 1 QUAD $0x0115065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 21], 1 QUAD $0x160654203a0f4466; BYTE $0x01 // pinsrb xmm10, byte [rsi + rax + 22], 1 @@ -51357,11 +52849,11 @@ LBB10_195: QUAD $0x011b067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 27], 1 QUAD $0x1c064c203a0f4466; BYTE $0x01 // pinsrb xmm9, byte [rsi + rax + 28], 1 QUAD $0x011d0644203a0f66 // pinsrb xmm0, byte [rsi + rax + 29], 1 - LONG $0x0e54b60f; BYTE $0x1f // movzx edx, byte [rsi + rcx + 31] + LONG $0x54b60f42; WORD $0x1f06 // movzx edx, byte [rsi + r8 + 31] QUAD $0x011e0664203a0f66 // pinsrb xmm4, byte [rsi + rax + 30], 1 LONG $0xea6e0f66 // movd xmm5, edx QUAD $0x011f066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 31], 1 - QUAD $0x000000b024848b48 // mov rax, qword [rsp + 176] + QUAD $0x0000008024848b48 // mov rax, qword [rsp + 128] QUAD $0x02140654203a0f66 // pinsrb xmm2, byte [rsi + rax + 20], 2 QUAD $0x0215065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 21], 2 QUAD $0x160654203a0f4466; BYTE $0x02 // pinsrb xmm10, byte [rsi + rax + 22], 2 @@ -51374,36 +52866,33 @@ LBB10_195: QUAD $0x021e0664203a0f66 // pinsrb xmm4, byte [rsi + rax + 30], 2 QUAD $0x021f066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 31], 2 QUAD $0x141654203a0f4266; BYTE $0x03 // pinsrb xmm2, byte [rsi + r10 + 20], 3 - LONG $0x24548b48; BYTE $0x60 // mov rdx, qword [rsp + 96] + LONG $0x24548b48; BYTE $0x70 // mov rdx, qword [rsp + 112] QUAD $0x04141654203a0f66 // pinsrb xmm2, byte [rsi + rdx + 20], 4 - QUAD $0x00000090248c8b48 // mov rcx, qword [rsp + 144] QUAD $0x05140e54203a0f66 // pinsrb xmm2, byte [rsi + rcx + 20], 5 - QUAD $0x000000f024848b48 // mov rax, qword [rsp + 240] - QUAD $0x06140654203a0f66 // pinsrb xmm2, byte [rsi + rax + 20], 6 - QUAD $0x141e54203a0f4266; BYTE $0x07 // pinsrb xmm2, byte [rsi + r11 + 20], 7 - QUAD $0x140654203a0f4266; BYTE $0x08 // pinsrb xmm2, byte [rsi + r8 + 20], 8 - QUAD $0x09141e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 20], 9 - QUAD $0x140e54203a0f4266; BYTE $0x0a // pinsrb xmm2, byte [rsi + r9 + 20], 10 - QUAD $0x143654203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rsi + r14 + 20], 11 - QUAD $0x143e54203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rsi + r15 + 20], 12 - QUAD $0x0d143e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 20], 13 - QUAD $0x142654203a0f4266; BYTE $0x0e // pinsrb xmm2, byte [rsi + r12 + 20], 14 + QUAD $0x06143e54203a0f66 // pinsrb xmm2, byte [rsi + rdi + 20], 6 + QUAD $0x07141e54203a0f66 // pinsrb xmm2, byte [rsi + rbx + 20], 7 + QUAD $0x143654203a0f4266; BYTE $0x08 // pinsrb xmm2, byte [rsi + r14 + 20], 8 + QUAD $0x140e54203a0f4266; BYTE $0x09 // pinsrb xmm2, byte [rsi + r9 + 20], 9 + QUAD $0x141e54203a0f4266; BYTE $0x0a // pinsrb xmm2, byte [rsi + r11 + 20], 10 + QUAD $0x143e54203a0f4266; BYTE $0x0b // pinsrb xmm2, byte [rsi + r15 + 20], 11 + QUAD $0x142654203a0f4266; BYTE $0x0c // pinsrb xmm2, byte [rsi + r12 + 20], 12 + LONG $0x24448b4c; BYTE $0x60 // mov r8, qword [rsp + 96] + QUAD $0x140654203a0f4266; BYTE $0x0d // pinsrb xmm2, byte [rsi + r8 + 20], 13 + LONG $0x24448b48; BYTE $0x10 // mov rax, qword [rsp + 16] + QUAD $0x0e140654203a0f66 // pinsrb xmm2, byte [rsi + rax + 20], 14 QUAD $0x142e54203a0f4266; BYTE $0x0f // pinsrb xmm2, byte [rsi + r13 + 20], 15 QUAD $0x15165c203a0f4266; BYTE $0x03 // pinsrb xmm3, byte [rsi + r10 + 21], 3 - WORD $0x894d; BYTE $0xd1 // mov r9, r10 QUAD $0x0415165c203a0f66 // pinsrb xmm3, byte [rsi + rdx + 21], 4 QUAD $0x05150e5c203a0f66 // pinsrb xmm3, byte [rsi + rcx + 21], 5 - QUAD $0x0615065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 21], 6 - QUAD $0x151e5c203a0f4266; BYTE $0x07 // pinsrb xmm3, byte [rsi + r11 + 21], 7 - QUAD $0x15065c203a0f4266; BYTE $0x08 // pinsrb xmm3, byte [rsi + r8 + 21], 8 - QUAD $0x09151e5c203a0f66 // pinsrb xmm3, byte [rsi + rbx + 21], 9 - QUAD $0x0000010024848b4c // mov r8, qword [rsp + 256] - QUAD $0x15065c203a0f4266; BYTE $0x0a // pinsrb xmm3, byte [rsi + r8 + 21], 10 - QUAD $0x15365c203a0f4266; BYTE $0x0b // pinsrb xmm3, byte [rsi + r14 + 21], 11 - QUAD $0x153e5c203a0f4266; BYTE $0x0c // pinsrb xmm3, byte [rsi + r15 + 21], 12 - WORD $0x8949; BYTE $0xfa // mov r10, rdi - QUAD $0x0d153e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 21], 13 - QUAD $0x15265c203a0f4266; BYTE $0x0e // pinsrb xmm3, byte [rsi + r12 + 21], 14 + QUAD $0x06153e5c203a0f66 // pinsrb xmm3, byte [rsi + rdi + 21], 6 + QUAD $0x07151e5c203a0f66 // pinsrb xmm3, byte [rsi + rbx + 21], 7 + QUAD $0x15365c203a0f4266; BYTE $0x08 // pinsrb xmm3, byte [rsi + r14 + 21], 8 + QUAD $0x150e5c203a0f4266; BYTE $0x09 // pinsrb xmm3, byte [rsi + r9 + 21], 9 + QUAD $0x151e5c203a0f4266; BYTE $0x0a // pinsrb xmm3, byte [rsi + r11 + 21], 10 + QUAD $0x153e5c203a0f4266; BYTE $0x0b // pinsrb xmm3, byte [rsi + r15 + 21], 11 + QUAD $0x15265c203a0f4266; BYTE $0x0c // pinsrb xmm3, byte [rsi + r12 + 21], 12 + QUAD $0x15065c203a0f4266; BYTE $0x0d // pinsrb xmm3, byte [rsi + r8 + 21], 13 + QUAD $0x0e15065c203a0f66 // pinsrb xmm3, byte [rsi + rax + 21], 14 QUAD $0x000110addb0f4466; BYTE $0x00 // pand xmm13, oword 272[rbp] /* [rip + .LCPI10_17] */ QUAD $0x0001209ddb0f4466; BYTE $0x00 // pand xmm11, oword 288[rbp] /* [rip + .LCPI10_18] */ LONG $0xeb0f4566; BYTE $0xdd // por xmm11, xmm13 @@ -51415,38 +52904,37 @@ LBB10_195: LONG $0xd36f0f66 // movdqa xmm2, xmm3 LONG $0xde0f4166; BYTE $0xd4 // pmaxub xmm2, xmm12 LONG $0xd3740f66 // pcmpeqb xmm2, xmm3 - QUAD $0x160e54203a0f4666; BYTE $0x03 // pinsrb xmm10, byte [rsi + r9 + 22], 3 + QUAD $0x161654203a0f4666; BYTE $0x03 // pinsrb xmm10, byte [rsi + r10 + 22], 3 QUAD $0x161654203a0f4466; BYTE $0x04 // pinsrb xmm10, byte [rsi + rdx + 22], 4 QUAD $0x160e54203a0f4466; BYTE $0x05 // pinsrb xmm10, byte [rsi + rcx + 22], 5 - QUAD $0x160654203a0f4466; BYTE $0x06 // pinsrb xmm10, byte [rsi + rax + 22], 6 - QUAD $0x161e54203a0f4666; BYTE $0x07 // pinsrb xmm10, byte [rsi + r11 + 22], 7 - QUAD $0x000000e024bc8b48 // mov rdi, qword [rsp + 224] - QUAD $0x163e54203a0f4466; BYTE $0x08 // pinsrb xmm10, byte [rsi + rdi + 22], 8 - QUAD $0x161e54203a0f4466; BYTE $0x09 // pinsrb xmm10, byte [rsi + rbx + 22], 9 - QUAD $0x160654203a0f4666; BYTE $0x0a // pinsrb xmm10, byte [rsi + r8 + 22], 10 - QUAD $0x163654203a0f4666; BYTE $0x0b // pinsrb xmm10, byte [rsi + r14 + 22], 11 - QUAD $0x163e54203a0f4666; BYTE $0x0c // pinsrb xmm10, byte [rsi + r15 + 22], 12 - QUAD $0x161654203a0f4666; BYTE $0x0d // pinsrb xmm10, byte [rsi + r10 + 22], 13 - QUAD $0x162654203a0f4666; BYTE $0x0e // pinsrb xmm10, byte [rsi + r12 + 22], 14 + QUAD $0x163e54203a0f4466; BYTE $0x06 // pinsrb xmm10, byte [rsi + rdi + 22], 6 + QUAD $0x161e54203a0f4466; BYTE $0x07 // pinsrb xmm10, byte [rsi + rbx + 22], 7 + QUAD $0x163654203a0f4666; BYTE $0x08 // pinsrb xmm10, byte [rsi + r14 + 22], 8 + QUAD $0x160e54203a0f4666; BYTE $0x09 // pinsrb xmm10, byte [rsi + r9 + 22], 9 + QUAD $0x161e54203a0f4666; BYTE $0x0a // pinsrb xmm10, byte [rsi + r11 + 22], 10 + QUAD $0x163e54203a0f4666; BYTE $0x0b // pinsrb xmm10, byte [rsi + r15 + 22], 11 + QUAD $0x162654203a0f4666; BYTE $0x0c // pinsrb xmm10, byte [rsi + r12 + 22], 12 + QUAD $0x160654203a0f4666; BYTE $0x0d // pinsrb xmm10, byte [rsi + r8 + 22], 13 + QUAD $0x160654203a0f4466; BYTE $0x0e // pinsrb xmm10, byte [rsi + rax + 22], 14 QUAD $0x162e54203a0f4666; BYTE $0x0f // pinsrb xmm10, byte [rsi + r13 + 22], 15 - QUAD $0x170e44203a0f4666; BYTE $0x03 // pinsrb xmm8, byte [rsi + r9 + 23], 3 + QUAD $0x171644203a0f4666; BYTE $0x03 // pinsrb xmm8, byte [rsi + r10 + 23], 3 QUAD $0x171644203a0f4466; BYTE $0x04 // pinsrb xmm8, byte [rsi + rdx + 23], 4 QUAD $0x170e44203a0f4466; BYTE $0x05 // pinsrb xmm8, byte [rsi + rcx + 23], 5 - QUAD $0x170644203a0f4466; BYTE $0x06 // pinsrb xmm8, byte [rsi + rax + 23], 6 - QUAD $0x171e44203a0f4666; BYTE $0x07 // pinsrb xmm8, byte [rsi + r11 + 23], 7 - QUAD $0x173e44203a0f4466; BYTE $0x08 // pinsrb xmm8, byte [rsi + rdi + 23], 8 - QUAD $0x171e44203a0f4466; BYTE $0x09 // pinsrb xmm8, byte [rsi + rbx + 23], 9 - QUAD $0x170644203a0f4666; BYTE $0x0a // pinsrb xmm8, byte [rsi + r8 + 23], 10 - QUAD $0x173644203a0f4666; BYTE $0x0b // pinsrb xmm8, byte [rsi + r14 + 23], 11 - QUAD $0x173e44203a0f4666; BYTE $0x0c // pinsrb xmm8, byte [rsi + r15 + 23], 12 - QUAD $0x171644203a0f4666; BYTE $0x0d // pinsrb xmm8, byte [rsi + r10 + 23], 13 + QUAD $0x173e44203a0f4466; BYTE $0x06 // pinsrb xmm8, byte [rsi + rdi + 23], 6 + QUAD $0x171e44203a0f4466; BYTE $0x07 // pinsrb xmm8, byte [rsi + rbx + 23], 7 + QUAD $0x173644203a0f4666; BYTE $0x08 // pinsrb xmm8, byte [rsi + r14 + 23], 8 + QUAD $0x170e44203a0f4666; BYTE $0x09 // pinsrb xmm8, byte [rsi + r9 + 23], 9 + QUAD $0x171e44203a0f4666; BYTE $0x0a // pinsrb xmm8, byte [rsi + r11 + 23], 10 + QUAD $0x173e44203a0f4666; BYTE $0x0b // pinsrb xmm8, byte [rsi + r15 + 23], 11 + QUAD $0x172644203a0f4666; BYTE $0x0c // pinsrb xmm8, byte [rsi + r12 + 23], 12 + QUAD $0x170644203a0f4666; BYTE $0x0d // pinsrb xmm8, byte [rsi + r8 + 23], 13 QUAD $0x000001308ddb0f66 // pand xmm1, oword 304[rbp] /* [rip + .LCPI10_19] */ QUAD $0x0000014095db0f66 // pand xmm2, oword 320[rbp] /* [rip + .LCPI10_20] */ LONG $0xd1eb0f66 // por xmm2, xmm1 LONG $0x6f0f4166; BYTE $0xca // movdqa xmm1, xmm10 LONG $0xde0f4166; BYTE $0xcc // pmaxub xmm1, xmm12 LONG $0x740f4166; BYTE $0xca // pcmpeqb xmm1, xmm10 - QUAD $0x172644203a0f4666; BYTE $0x0e // pinsrb xmm8, byte [rsi + r12 + 23], 14 + QUAD $0x170644203a0f4466; BYTE $0x0e // pinsrb xmm8, byte [rsi + rax + 23], 14 QUAD $0x000001508ddb0f66 // pand xmm1, oword 336[rbp] /* [rip + .LCPI10_21] */ LONG $0xcaeb0f66 // por xmm1, xmm2 QUAD $0x172e44203a0f4666; BYTE $0x0f // pinsrb xmm8, byte [rsi + r13 + 23], 15 @@ -51454,18 +52942,18 @@ LBB10_195: LONG $0x6f0f4566; BYTE $0xd0 // movdqa xmm10, xmm8 LONG $0xde0f4566; BYTE $0xd4 // pmaxub xmm10, xmm12 LONG $0x740f4566; BYTE $0xd0 // pcmpeqb xmm10, xmm8 - QUAD $0x190e7c203a0f4666; BYTE $0x03 // pinsrb xmm15, byte [rsi + r9 + 25], 3 + QUAD $0x19167c203a0f4666; BYTE $0x03 // pinsrb xmm15, byte [rsi + r10 + 25], 3 QUAD $0x19167c203a0f4466; BYTE $0x04 // pinsrb xmm15, byte [rsi + rdx + 25], 4 QUAD $0x190e7c203a0f4466; BYTE $0x05 // pinsrb xmm15, byte [rsi + rcx + 25], 5 - QUAD $0x19067c203a0f4466; BYTE $0x06 // pinsrb xmm15, byte [rsi + rax + 25], 6 - QUAD $0x191e7c203a0f4666; BYTE $0x07 // pinsrb xmm15, byte [rsi + r11 + 25], 7 - QUAD $0x193e7c203a0f4466; BYTE $0x08 // pinsrb xmm15, byte [rsi + rdi + 25], 8 - QUAD $0x191e7c203a0f4466; BYTE $0x09 // pinsrb xmm15, byte [rsi + rbx + 25], 9 - QUAD $0x19067c203a0f4666; BYTE $0x0a // pinsrb xmm15, byte [rsi + r8 + 25], 10 - QUAD $0x19367c203a0f4666; BYTE $0x0b // pinsrb xmm15, byte [rsi + r14 + 25], 11 - QUAD $0x193e7c203a0f4666; BYTE $0x0c // pinsrb xmm15, byte [rsi + r15 + 25], 12 - QUAD $0x19167c203a0f4666; BYTE $0x0d // pinsrb xmm15, byte [rsi + r10 + 25], 13 - QUAD $0x19267c203a0f4666; BYTE $0x0e // pinsrb xmm15, byte [rsi + r12 + 25], 14 + QUAD $0x193e7c203a0f4466; BYTE $0x06 // pinsrb xmm15, byte [rsi + rdi + 25], 6 + QUAD $0x191e7c203a0f4466; BYTE $0x07 // pinsrb xmm15, byte [rsi + rbx + 25], 7 + QUAD $0x19367c203a0f4666; BYTE $0x08 // pinsrb xmm15, byte [rsi + r14 + 25], 8 + QUAD $0x190e7c203a0f4666; BYTE $0x09 // pinsrb xmm15, byte [rsi + r9 + 25], 9 + QUAD $0x191e7c203a0f4666; BYTE $0x0a // pinsrb xmm15, byte [rsi + r11 + 25], 10 + QUAD $0x193e7c203a0f4666; BYTE $0x0b // pinsrb xmm15, byte [rsi + r15 + 25], 11 + QUAD $0x19267c203a0f4666; BYTE $0x0c // pinsrb xmm15, byte [rsi + r12 + 25], 12 + QUAD $0x19067c203a0f4666; BYTE $0x0d // pinsrb xmm15, byte [rsi + r8 + 25], 13 + QUAD $0x19067c203a0f4466; BYTE $0x0e // pinsrb xmm15, byte [rsi + rax + 25], 14 QUAD $0x192e7c203a0f4666; BYTE $0x0f // pinsrb xmm15, byte [rsi + r13 + 25], 15 LONG $0x6f0f4466; WORD $0x605d // movdqa xmm11, oword 96[rbp] /* [rip + .LCPI10_6] */ LONG $0xdb0f4566; BYTE $0xd3 // pand xmm10, xmm11 @@ -51473,65 +52961,65 @@ LBB10_195: LONG $0x6f0f4166; BYTE $0xdf // movdqa xmm3, xmm15 LONG $0xde0f4166; BYTE $0xdc // pmaxub xmm3, xmm12 LONG $0x740f4166; BYTE $0xdf // pcmpeqb xmm3, xmm15 - QUAD $0x1a0e74203a0f4266; BYTE $0x03 // pinsrb xmm6, byte [rsi + r9 + 26], 3 + QUAD $0x1a1674203a0f4266; BYTE $0x03 // pinsrb xmm6, byte [rsi + r10 + 26], 3 QUAD $0x041a1674203a0f66 // pinsrb xmm6, byte [rsi + rdx + 26], 4 QUAD $0x051a0e74203a0f66 // pinsrb xmm6, byte [rsi + rcx + 26], 5 - QUAD $0x061a0674203a0f66 // pinsrb xmm6, byte [rsi + rax + 26], 6 - QUAD $0x1a1e74203a0f4266; BYTE $0x07 // pinsrb xmm6, byte [rsi + r11 + 26], 7 - QUAD $0x081a3e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 26], 8 - QUAD $0x091a1e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 26], 9 - QUAD $0x1a0674203a0f4266; BYTE $0x0a // pinsrb xmm6, byte [rsi + r8 + 26], 10 - QUAD $0x1a3674203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rsi + r14 + 26], 11 - QUAD $0x1a3e74203a0f4266; BYTE $0x0c // pinsrb xmm6, byte [rsi + r15 + 26], 12 - QUAD $0x1a1674203a0f4266; BYTE $0x0d // pinsrb xmm6, byte [rsi + r10 + 26], 13 - QUAD $0x1a2674203a0f4266; BYTE $0x0e // pinsrb xmm6, byte [rsi + r12 + 26], 14 + QUAD $0x061a3e74203a0f66 // pinsrb xmm6, byte [rsi + rdi + 26], 6 + QUAD $0x071a1e74203a0f66 // pinsrb xmm6, byte [rsi + rbx + 26], 7 + QUAD $0x1a3674203a0f4266; BYTE $0x08 // pinsrb xmm6, byte [rsi + r14 + 26], 8 + QUAD $0x1a0e74203a0f4266; BYTE $0x09 // pinsrb xmm6, byte [rsi + r9 + 26], 9 + QUAD $0x1a1e74203a0f4266; BYTE $0x0a // pinsrb xmm6, byte [rsi + r11 + 26], 10 + QUAD $0x1a3e74203a0f4266; BYTE $0x0b // pinsrb xmm6, byte [rsi + r15 + 26], 11 + QUAD $0x1a2674203a0f4266; BYTE $0x0c // pinsrb xmm6, byte [rsi + r12 + 26], 12 + QUAD $0x1a0674203a0f4266; BYTE $0x0d // pinsrb xmm6, byte [rsi + r8 + 26], 13 + QUAD $0x0e1a0674203a0f66 // pinsrb xmm6, byte [rsi + rax + 26], 14 QUAD $0x1a2e74203a0f4266; BYTE $0x0f // pinsrb xmm6, byte [rsi + r13 + 26], 15 - QUAD $0x1b0e7c203a0f4266; BYTE $0x03 // pinsrb xmm7, byte [rsi + r9 + 27], 3 + QUAD $0x1b167c203a0f4266; BYTE $0x03 // pinsrb xmm7, byte [rsi + r10 + 27], 3 QUAD $0x041b167c203a0f66 // pinsrb xmm7, byte [rsi + rdx + 27], 4 QUAD $0x051b0e7c203a0f66 // pinsrb xmm7, byte [rsi + rcx + 27], 5 - QUAD $0x061b067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 27], 6 - QUAD $0x1b1e7c203a0f4266; BYTE $0x07 // pinsrb xmm7, byte [rsi + r11 + 27], 7 - QUAD $0x081b3e7c203a0f66 // pinsrb xmm7, byte [rsi + rdi + 27], 8 - QUAD $0x091b1e7c203a0f66 // pinsrb xmm7, byte [rsi + rbx + 27], 9 - QUAD $0x1b067c203a0f4266; BYTE $0x0a // pinsrb xmm7, byte [rsi + r8 + 27], 10 - QUAD $0x1b367c203a0f4266; BYTE $0x0b // pinsrb xmm7, byte [rsi + r14 + 27], 11 - QUAD $0x1b3e7c203a0f4266; BYTE $0x0c // pinsrb xmm7, byte [rsi + r15 + 27], 12 - QUAD $0x1b167c203a0f4266; BYTE $0x0d // pinsrb xmm7, byte [rsi + r10 + 27], 13 - QUAD $0x1b267c203a0f4266; BYTE $0x0e // pinsrb xmm7, byte [rsi + r12 + 27], 14 + QUAD $0x061b3e7c203a0f66 // pinsrb xmm7, byte [rsi + rdi + 27], 6 + QUAD $0x071b1e7c203a0f66 // pinsrb xmm7, byte [rsi + rbx + 27], 7 + QUAD $0x1b367c203a0f4266; BYTE $0x08 // pinsrb xmm7, byte [rsi + r14 + 27], 8 + QUAD $0x1b0e7c203a0f4266; BYTE $0x09 // pinsrb xmm7, byte [rsi + r9 + 27], 9 + QUAD $0x1b1e7c203a0f4266; BYTE $0x0a // pinsrb xmm7, byte [rsi + r11 + 27], 10 + QUAD $0x1b3e7c203a0f4266; BYTE $0x0b // pinsrb xmm7, byte [rsi + r15 + 27], 11 + QUAD $0x1b267c203a0f4266; BYTE $0x0c // pinsrb xmm7, byte [rsi + r12 + 27], 12 + QUAD $0x1b067c203a0f4266; BYTE $0x0d // pinsrb xmm7, byte [rsi + r8 + 27], 13 + QUAD $0x0e1b067c203a0f66 // pinsrb xmm7, byte [rsi + rax + 27], 14 QUAD $0x1b2e7c203a0f4266; BYTE $0x0f // pinsrb xmm7, byte [rsi + r13 + 27], 15 QUAD $0x000001009ddb0f66 // pand xmm3, oword 256[rbp] /* [rip + .LCPI10_16] */ - QUAD $0x000140249cf80f66; BYTE $0x00 // psubb xmm3, oword [rsp + 320] + QUAD $0x0000f0249cf80f66; BYTE $0x00 // psubb xmm3, oword [rsp + 240] LONG $0xd66f0f66 // movdqa xmm2, xmm6 LONG $0xde0f4166; BYTE $0xd4 // pmaxub xmm2, xmm12 LONG $0xd6740f66 // pcmpeqb xmm2, xmm6 LONG $0xcf6f0f66 // movdqa xmm1, xmm7 LONG $0xde0f4166; BYTE $0xcc // pmaxub xmm1, xmm12 LONG $0xcf740f66 // pcmpeqb xmm1, xmm7 - QUAD $0x1c0e4c203a0f4666; BYTE $0x03 // pinsrb xmm9, byte [rsi + r9 + 28], 3 + QUAD $0x1c164c203a0f4666; BYTE $0x03 // pinsrb xmm9, byte [rsi + r10 + 28], 3 QUAD $0x1c164c203a0f4466; BYTE $0x04 // pinsrb xmm9, byte [rsi + rdx + 28], 4 QUAD $0x1c0e4c203a0f4466; BYTE $0x05 // pinsrb xmm9, byte [rsi + rcx + 28], 5 - QUAD $0x1c064c203a0f4466; BYTE $0x06 // pinsrb xmm9, byte [rsi + rax + 28], 6 - QUAD $0x1c1e4c203a0f4666; BYTE $0x07 // pinsrb xmm9, byte [rsi + r11 + 28], 7 - QUAD $0x1c3e4c203a0f4466; BYTE $0x08 // pinsrb xmm9, byte [rsi + rdi + 28], 8 - QUAD $0x1c1e4c203a0f4466; BYTE $0x09 // pinsrb xmm9, byte [rsi + rbx + 28], 9 - QUAD $0x1c064c203a0f4666; BYTE $0x0a // pinsrb xmm9, byte [rsi + r8 + 28], 10 - QUAD $0x1c364c203a0f4666; BYTE $0x0b // pinsrb xmm9, byte [rsi + r14 + 28], 11 - QUAD $0x1c3e4c203a0f4666; BYTE $0x0c // pinsrb xmm9, byte [rsi + r15 + 28], 12 - QUAD $0x1c164c203a0f4666; BYTE $0x0d // pinsrb xmm9, byte [rsi + r10 + 28], 13 - QUAD $0x1c264c203a0f4666; BYTE $0x0e // pinsrb xmm9, byte [rsi + r12 + 28], 14 + QUAD $0x1c3e4c203a0f4466; BYTE $0x06 // pinsrb xmm9, byte [rsi + rdi + 28], 6 + QUAD $0x1c1e4c203a0f4466; BYTE $0x07 // pinsrb xmm9, byte [rsi + rbx + 28], 7 + QUAD $0x1c364c203a0f4666; BYTE $0x08 // pinsrb xmm9, byte [rsi + r14 + 28], 8 + QUAD $0x1c0e4c203a0f4666; BYTE $0x09 // pinsrb xmm9, byte [rsi + r9 + 28], 9 + QUAD $0x1c1e4c203a0f4666; BYTE $0x0a // pinsrb xmm9, byte [rsi + r11 + 28], 10 + QUAD $0x1c3e4c203a0f4666; BYTE $0x0b // pinsrb xmm9, byte [rsi + r15 + 28], 11 + QUAD $0x1c264c203a0f4666; BYTE $0x0c // pinsrb xmm9, byte [rsi + r12 + 28], 12 + QUAD $0x1c064c203a0f4666; BYTE $0x0d // pinsrb xmm9, byte [rsi + r8 + 28], 13 + QUAD $0x1c064c203a0f4466; BYTE $0x0e // pinsrb xmm9, byte [rsi + rax + 28], 14 QUAD $0x1c2e4c203a0f4666; BYTE $0x0f // pinsrb xmm9, byte [rsi + r13 + 28], 15 - QUAD $0x1d0e44203a0f4266; BYTE $0x03 // pinsrb xmm0, byte [rsi + r9 + 29], 3 + QUAD $0x1d1644203a0f4266; BYTE $0x03 // pinsrb xmm0, byte [rsi + r10 + 29], 3 QUAD $0x041d1644203a0f66 // pinsrb xmm0, byte [rsi + rdx + 29], 4 QUAD $0x051d0e44203a0f66 // pinsrb xmm0, byte [rsi + rcx + 29], 5 - QUAD $0x061d0644203a0f66 // pinsrb xmm0, byte [rsi + rax + 29], 6 - QUAD $0x1d1e44203a0f4266; BYTE $0x07 // pinsrb xmm0, byte [rsi + r11 + 29], 7 - QUAD $0x081d3e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 29], 8 - QUAD $0x091d1e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 29], 9 - QUAD $0x1d0644203a0f4266; BYTE $0x0a // pinsrb xmm0, byte [rsi + r8 + 29], 10 - QUAD $0x1d3644203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r14 + 29], 11 - QUAD $0x1d3e44203a0f4266; BYTE $0x0c // pinsrb xmm0, byte [rsi + r15 + 29], 12 - QUAD $0x1d1644203a0f4266; BYTE $0x0d // pinsrb xmm0, byte [rsi + r10 + 29], 13 - QUAD $0x1d2644203a0f4266; BYTE $0x0e // pinsrb xmm0, byte [rsi + r12 + 29], 14 + QUAD $0x061d3e44203a0f66 // pinsrb xmm0, byte [rsi + rdi + 29], 6 + QUAD $0x071d1e44203a0f66 // pinsrb xmm0, byte [rsi + rbx + 29], 7 + QUAD $0x1d3644203a0f4266; BYTE $0x08 // pinsrb xmm0, byte [rsi + r14 + 29], 8 + QUAD $0x1d0e44203a0f4266; BYTE $0x09 // pinsrb xmm0, byte [rsi + r9 + 29], 9 + QUAD $0x1d1e44203a0f4266; BYTE $0x0a // pinsrb xmm0, byte [rsi + r11 + 29], 10 + QUAD $0x1d3e44203a0f4266; BYTE $0x0b // pinsrb xmm0, byte [rsi + r15 + 29], 11 + QUAD $0x1d2644203a0f4266; BYTE $0x0c // pinsrb xmm0, byte [rsi + r12 + 29], 12 + QUAD $0x1d0644203a0f4266; BYTE $0x0d // pinsrb xmm0, byte [rsi + r8 + 29], 13 + QUAD $0x0e1d0644203a0f66 // pinsrb xmm0, byte [rsi + rax + 29], 14 QUAD $0x1d2e44203a0f4266; BYTE $0x0f // pinsrb xmm0, byte [rsi + r13 + 29], 15 QUAD $0x0000011095db0f66 // pand xmm2, oword 272[rbp] /* [rip + .LCPI10_17] */ QUAD $0x000001208ddb0f66 // pand xmm1, oword 288[rbp] /* [rip + .LCPI10_18] */ @@ -51543,34 +53031,31 @@ LBB10_195: LONG $0xd86f0f66 // movdqa xmm3, xmm0 LONG $0xde0f4166; BYTE $0xdc // pmaxub xmm3, xmm12 LONG $0xd8740f66 // pcmpeqb xmm3, xmm0 - QUAD $0x1e0e64203a0f4266; BYTE $0x03 // pinsrb xmm4, byte [rsi + r9 + 30], 3 - QUAD $0x1f0e6c203a0f4266; BYTE $0x03 // pinsrb xmm5, byte [rsi + r9 + 31], 3 + QUAD $0x1e1664203a0f4266; BYTE $0x03 // pinsrb xmm4, byte [rsi + r10 + 30], 3 + QUAD $0x1f166c203a0f4266; BYTE $0x03 // pinsrb xmm5, byte [rsi + r10 + 31], 3 QUAD $0x041e1664203a0f66 // pinsrb xmm4, byte [rsi + rdx + 30], 4 QUAD $0x041f166c203a0f66 // pinsrb xmm5, byte [rsi + rdx + 31], 4 QUAD $0x051e0e64203a0f66 // pinsrb xmm4, byte [rsi + rcx + 30], 5 QUAD $0x051f0e6c203a0f66 // pinsrb xmm5, byte [rsi + rcx + 31], 5 - QUAD $0x061e0664203a0f66 // pinsrb xmm4, byte [rsi + rax + 30], 6 - QUAD $0x061f066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 31], 6 - QUAD $0x1e1e64203a0f4266; BYTE $0x07 // pinsrb xmm4, byte [rsi + r11 + 30], 7 - QUAD $0x1f1e6c203a0f4266; BYTE $0x07 // pinsrb xmm5, byte [rsi + r11 + 31], 7 - WORD $0x8948; BYTE $0xf8 // mov rax, rdi - QUAD $0x081e3e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 30], 8 - QUAD $0x081f3e6c203a0f66 // pinsrb xmm5, byte [rsi + rdi + 31], 8 - QUAD $0x091e1e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 30], 9 - QUAD $0x091f1e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 31], 9 + QUAD $0x061e3e64203a0f66 // pinsrb xmm4, byte [rsi + rdi + 30], 6 + QUAD $0x061f3e6c203a0f66 // pinsrb xmm5, byte [rsi + rdi + 31], 6 + QUAD $0x071e1e64203a0f66 // pinsrb xmm4, byte [rsi + rbx + 30], 7 + QUAD $0x071f1e6c203a0f66 // pinsrb xmm5, byte [rsi + rbx + 31], 7 + QUAD $0x1e3664203a0f4266; BYTE $0x08 // pinsrb xmm4, byte [rsi + r14 + 30], 8 + QUAD $0x1f366c203a0f4266; BYTE $0x08 // pinsrb xmm5, byte [rsi + r14 + 31], 8 + QUAD $0x1e0e64203a0f4266; BYTE $0x09 // pinsrb xmm4, byte [rsi + r9 + 30], 9 + QUAD $0x1f0e6c203a0f4266; BYTE $0x09 // pinsrb xmm5, byte [rsi + r9 + 31], 9 + QUAD $0x1e1e64203a0f4266; BYTE $0x0a // pinsrb xmm4, byte [rsi + r11 + 30], 10 + QUAD $0x1f1e6c203a0f4266; BYTE $0x0a // pinsrb xmm5, byte [rsi + r11 + 31], 10 QUAD $0x0000016024b48b4c // mov r14, qword [rsp + 352] - WORD $0x894c; BYTE $0xc0 // mov rax, r8 - QUAD $0x1e0664203a0f4266; BYTE $0x0a // pinsrb xmm4, byte [rsi + r8 + 30], 10 - QUAD $0x1f066c203a0f4266; BYTE $0x0a // pinsrb xmm5, byte [rsi + r8 + 31], 10 - LONG $0x24448b48; BYTE $0x50 // mov rax, qword [rsp + 80] - QUAD $0x0b1e0664203a0f66 // pinsrb xmm4, byte [rsi + rax + 30], 11 - QUAD $0x0b1f066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 31], 11 - QUAD $0x1e3e64203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r15 + 30], 12 - QUAD $0x1f3e6c203a0f4266; BYTE $0x0c // pinsrb xmm5, byte [rsi + r15 + 31], 12 - QUAD $0x1e1664203a0f4266; BYTE $0x0d // pinsrb xmm4, byte [rsi + r10 + 30], 13 - QUAD $0x1f166c203a0f4266; BYTE $0x0d // pinsrb xmm5, byte [rsi + r10 + 31], 13 - QUAD $0x1e2664203a0f4266; BYTE $0x0e // pinsrb xmm4, byte [rsi + r12 + 30], 14 - QUAD $0x1f266c203a0f4266; BYTE $0x0e // pinsrb xmm5, byte [rsi + r12 + 31], 14 + QUAD $0x1e3e64203a0f4266; BYTE $0x0b // pinsrb xmm4, byte [rsi + r15 + 30], 11 + QUAD $0x1f3e6c203a0f4266; BYTE $0x0b // pinsrb xmm5, byte [rsi + r15 + 31], 11 + QUAD $0x1e2664203a0f4266; BYTE $0x0c // pinsrb xmm4, byte [rsi + r12 + 30], 12 + QUAD $0x1f266c203a0f4266; BYTE $0x0c // pinsrb xmm5, byte [rsi + r12 + 31], 12 + QUAD $0x1e0664203a0f4266; BYTE $0x0d // pinsrb xmm4, byte [rsi + r8 + 30], 13 + QUAD $0x1f066c203a0f4266; BYTE $0x0d // pinsrb xmm5, byte [rsi + r8 + 31], 13 + QUAD $0x0e1e0664203a0f66 // pinsrb xmm4, byte [rsi + rax + 30], 14 + QUAD $0x0e1f066c203a0f66 // pinsrb xmm5, byte [rsi + rax + 31], 14 QUAD $0x1e2e64203a0f4266; BYTE $0x0f // pinsrb xmm4, byte [rsi + r13 + 30], 15 QUAD $0x0000013095db0f66 // pand xmm2, oword 304[rbp] /* [rip + .LCPI10_19] */ QUAD $0x000001409ddb0f66 // pand xmm3, oword 320[rbp] /* [rip + .LCPI10_20] */ @@ -51589,7 +53074,7 @@ LBB10_195: LONG $0xc8eb0f66 // por xmm1, xmm0 LONG $0x6f0f4166; BYTE $0xc2 // movdqa xmm0, xmm10 LONG $0xc1600f66 // punpcklbw xmm0, xmm1 - QUAD $0x0000a024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 160] + QUAD $0x00011024a46f0f66; BYTE $0x00 // movdqa xmm4, oword [rsp + 272] LONG $0xd46f0f66 // movdqa xmm2, xmm4 LONG $0x600f4166; BYTE $0xd6 // punpcklbw xmm2, xmm14 LONG $0xda6f0f66 // movdqa xmm3, xmm2 @@ -51606,25 +53091,24 @@ LBB10_195: LONG $0x7f0f41f3; WORD $0x8e54; BYTE $0x10 // movdqu oword [r14 + 4*rcx + 16], xmm2 LONG $0x7f0f41f3; WORD $0x8e1c // movdqu oword [r14 + 4*rcx], xmm3 LONG $0x10c18348 // add rcx, 16 - WORD $0x8948; BYTE $0xca // mov rdx, rcx + WORD $0x8948; BYTE $0xc8 // mov rax, rcx QUAD $0x000001a0248c3b48 // cmp rcx, qword [rsp + 416] - JNE LBB10_195 + JNE LBB10_67 QUAD $0x000001d024bc8b4c // mov r15, qword [rsp + 464] QUAD $0x000001a024bc3b4c // cmp r15, qword [rsp + 416] LONG $0x245c8a44; BYTE $0x08 // mov r11b, byte [rsp + 8] QUAD $0x0000018824b48b48 // mov rsi, qword [rsp + 392] LONG $0x24548b4c; BYTE $0x48 // mov r10, qword [rsp + 72] - JNE LBB10_67 - JMP LBB10_132 + JNE LBB10_69 + JMP LBB10_72 -LBB10_197: - WORD $0x894c; BYTE $0xf8 // mov rax, r15 - LONG $0xf8e08348 // and rax, -8 - WORD $0x8949; BYTE $0xc3 // mov r11, rax +LBB10_124: + LONG $0xf8e78349 // and r15, -8 + WORD $0x894d; BYTE $0xfb // mov r11, r15 LONG $0x06e3c149 // shl r11, 6 WORD $0x0149; BYTE $0xf3 // add r11, rsi - QUAD $0x0000019024848948 // mov qword [rsp + 400], rax - LONG $0x86048d49 // lea rax, [r14 + 4*rax] + QUAD $0x0000019024bc894c // mov qword [rsp + 400], r15 + LONG $0xbe048d4b // lea rax, [r14 + 4*r15] LONG $0x24448948; BYTE $0x08 // mov qword [rsp + 8], rax QUAD $0x00018824846e0f66; BYTE $0x00 // movd xmm0, dword [rsp + 392] LONG $0xc0700ff2; BYTE $0xe0 // pshuflw xmm0, xmm0, 224 @@ -51632,7 +53116,7 @@ LBB10_197: QUAD $0x0001d024847f0f66; BYTE $0x00 // movdqa oword [rsp + 464], xmm0 WORD $0x3145; BYTE $0xd2 // xor r10d, r10d -LBB10_198: +LBB10_125: WORD $0x894d; BYTE $0xd1 // mov r9, r10 LONG $0x06e1c149 // shl r9, 6 WORD $0x894d; BYTE $0xc8 // mov r8, r9 @@ -51728,7 +53212,7 @@ LBB10_198: QUAD $0x06082664c40f4666 // pinsrw xmm12, word [rsi + r12 + 8], 6 QUAD $0x07082e64c40f4666 // pinsrw xmm12, word [rsi + r13 + 8], 7 LONG $0x650f4166; BYTE $0xfa // pcmpgtw xmm7, xmm10 - LONG $0x7c7f0f66; WORD $0x7024 // movdqa oword [rsp + 112], xmm7 + QUAD $0x00009024bc7f0f66; BYTE $0x00 // movdqa oword [rsp + 144], xmm7 LONG $0xf86f0f66 // movdqa xmm7, xmm0 LONG $0x650f4166; BYTE $0xfc // pcmpgtw xmm7, xmm12 LONG $0x7c7f0f66; WORD $0x2024 // movdqa oword [rsp + 32], xmm7 @@ -51787,7 +53271,7 @@ LBB10_198: QUAD $0x05143e5cc40f4266 // pinsrw xmm3, word [rsi + r15 + 20], 5 QUAD $0x0614265cc40f4266 // pinsrw xmm3, word [rsi + r12 + 20], 6 LONG $0xca650f66 // pcmpgtw xmm1, xmm2 - QUAD $0x0000b0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 176], xmm1 + QUAD $0x0000a0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 160], xmm1 QUAD $0x07142e5cc40f4266 // pinsrw xmm3, word [rsi + r13 + 20], 7 LONG $0xc86f0f66 // movdqa xmm1, xmm0 LONG $0xcb650f66 // pcmpgtw xmm1, xmm3 @@ -51808,7 +53292,7 @@ LBB10_198: QUAD $0x0618266cc40f4266 // pinsrw xmm5, word [rsi + r12 + 24], 6 QUAD $0x07182e6cc40f4266 // pinsrw xmm5, word [rsi + r13 + 24], 7 LONG $0xcc650f66 // pcmpgtw xmm1, xmm4 - QUAD $0x0000c0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 192], xmm1 + QUAD $0x0000b0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 176], xmm1 LONG $0xc86f0f66 // movdqa xmm1, xmm0 LONG $0xcd650f66 // pcmpgtw xmm1, xmm5 LONG $0x4c7f0f66; WORD $0x1024 // movdqa oword [rsp + 16], xmm1 @@ -51827,7 +53311,7 @@ LBB10_198: QUAD $0x051c3e7cc40f4666 // pinsrw xmm15, word [rsi + r15 + 28], 5 QUAD $0x061c267cc40f4666 // pinsrw xmm15, word [rsi + r12 + 28], 6 LONG $0xce650f66 // pcmpgtw xmm1, xmm6 - QUAD $0x0000d0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 208], xmm1 + QUAD $0x0000c0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 192], xmm1 QUAD $0x071c2e7cc40f4666 // pinsrw xmm15, word [rsi + r13 + 28], 7 LONG $0xca6e0f66 // movd xmm1, edx LONG $0x4cc40f66; WORD $0x1e0e; BYTE $0x01 // pinsrw xmm1, word [rsi + rcx + 30], 1 @@ -51838,11 +53322,11 @@ LBB10_198: QUAD $0x061e264cc40f4266 // pinsrw xmm1, word [rsi + r12 + 30], 6 LONG $0xd06f0f66 // movdqa xmm2, xmm0 LONG $0x650f4166; BYTE $0xd7 // pcmpgtw xmm2, xmm15 - QUAD $0x0000f024947f0f66; BYTE $0x00 // movdqa oword [rsp + 240], xmm2 + QUAD $0x0000e024947f0f66; BYTE $0x00 // movdqa oword [rsp + 224], xmm2 QUAD $0x071e2e4cc40f4266 // pinsrw xmm1, word [rsi + r13 + 30], 7 LONG $0xd06f0f66 // movdqa xmm2, xmm0 LONG $0xd1650f66 // pcmpgtw xmm2, xmm1 - QUAD $0x00009024947f0f66; BYTE $0x00 // movdqa oword [rsp + 144], xmm2 + LONG $0x547f0f66; WORD $0x7024 // movdqa oword [rsp + 112], xmm2 LONG $0x44b70f42; WORD $0x200e // movzx eax, word [rsi + r9 + 32] LONG $0xc86e0f66 // movd xmm1, eax LONG $0x4cc40f66; WORD $0x200e; BYTE $0x01 // pinsrw xmm1, word [rsi + rcx + 32], 1 @@ -51863,10 +53347,10 @@ LBB10_198: QUAD $0x07222e54c40f4266 // pinsrw xmm2, word [rsi + r13 + 34], 7 LONG $0xd86f0f66 // movdqa xmm3, xmm0 LONG $0xd9650f66 // pcmpgtw xmm3, xmm1 - QUAD $0x0000e0249c7f0f66; BYTE $0x00 // movdqa oword [rsp + 224], xmm3 + QUAD $0x0000d0249c7f0f66; BYTE $0x00 // movdqa oword [rsp + 208], xmm3 LONG $0xc86f0f66 // movdqa xmm1, xmm0 LONG $0xca650f66 // pcmpgtw xmm1, xmm2 - QUAD $0x000120248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 288], xmm1 + QUAD $0x000100248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 256], xmm1 LONG $0x44b70f42; WORD $0x240e // movzx eax, word [rsi + r9 + 36] LONG $0xc86e0f66 // movd xmm1, eax LONG $0x4cc40f66; WORD $0x240e; BYTE $0x01 // pinsrw xmm1, word [rsi + rcx + 36], 1 @@ -51886,11 +53370,11 @@ LBB10_198: QUAD $0x06262654c40f4266 // pinsrw xmm2, word [rsi + r12 + 38], 6 LONG $0xd86f0f66 // movdqa xmm3, xmm0 LONG $0xd9650f66 // pcmpgtw xmm3, xmm1 - QUAD $0x000100249c7f0f66; BYTE $0x00 // movdqa oword [rsp + 256], xmm3 + QUAD $0x000120249c7f0f66; BYTE $0x00 // movdqa oword [rsp + 288], xmm3 QUAD $0x07262e54c40f4266 // pinsrw xmm2, word [rsi + r13 + 38], 7 LONG $0xc86f0f66 // movdqa xmm1, xmm0 LONG $0xca650f66 // pcmpgtw xmm1, xmm2 - QUAD $0x000110248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 272], xmm1 + QUAD $0x000130248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 304], xmm1 LONG $0x44b70f42; WORD $0x280e // movzx eax, word [rsi + r9 + 40] LONG $0xc86e0f66 // movd xmm1, eax LONG $0x4cc40f66; WORD $0x280e; BYTE $0x01 // pinsrw xmm1, word [rsi + rcx + 40], 1 @@ -51911,10 +53395,10 @@ LBB10_198: QUAD $0x072a2e54c40f4266 // pinsrw xmm2, word [rsi + r13 + 42], 7 LONG $0xd86f0f66 // movdqa xmm3, xmm0 LONG $0xd9650f66 // pcmpgtw xmm3, xmm1 - QUAD $0x000130249c7f0f66; BYTE $0x00 // movdqa oword [rsp + 304], xmm3 + QUAD $0x000150249c7f0f66; BYTE $0x00 // movdqa oword [rsp + 336], xmm3 LONG $0xc86f0f66 // movdqa xmm1, xmm0 LONG $0xca650f66 // pcmpgtw xmm1, xmm2 - QUAD $0x000150248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 336], xmm1 + QUAD $0x000110248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 272], xmm1 LONG $0x44b70f42; WORD $0x2c0e // movzx eax, word [rsi + r9 + 44] LONG $0xc86e0f66 // movd xmm1, eax LONG $0x4cc40f66; WORD $0x2c0e; BYTE $0x01 // pinsrw xmm1, word [rsi + rcx + 44], 1 @@ -51938,7 +53422,7 @@ LBB10_198: QUAD $0x072e2e54c40f4266 // pinsrw xmm2, word [rsi + r13 + 46], 7 LONG $0xc86f0f66 // movdqa xmm1, xmm0 LONG $0xca650f66 // pcmpgtw xmm1, xmm2 - QUAD $0x0000a0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 160], xmm1 + QUAD $0x0000f0248c7f0f66; BYTE $0x00 // movdqa oword [rsp + 240], xmm1 LONG $0x44b70f42; WORD $0x300e // movzx eax, word [rsi + r9 + 48] LONG $0xc86e0f66 // movd xmm1, eax LONG $0x4cc40f66; WORD $0x300e; BYTE $0x01 // pinsrw xmm1, word [rsi + rcx + 48], 1 @@ -52047,7 +53531,7 @@ LBB10_198: LONG $0x760f4566; BYTE $0xc0 // pcmpeqd xmm8, xmm8 LONG $0xc0630f66 // packsswb xmm0, xmm0 LONG $0xf8f80f66 // psubb xmm7, xmm0 - LONG $0x546f0f66; WORD $0x7024 // movdqa xmm2, oword [rsp + 112] + QUAD $0x00009024946f0f66; BYTE $0x00 // movdqa xmm2, oword [rsp + 144] LONG $0xd2630f66 // packsswb xmm2, xmm2 QUAD $0x0000a09d6f0f4466; BYTE $0x00 // movdqa xmm11, oword 160[rbp] /* [rip + .LCPI10_10] */ LONG $0xc26f0f66 // movdqa xmm0, xmm2 @@ -52077,7 +53561,7 @@ LBB10_198: LONG $0xc26f0f66 // movdqa xmm0, xmm2 LONG $0x380f4466; WORD $0xf410 // pblendvb xmm14, xmm4, xmm0 LONG $0xeb0f4166; BYTE $0xcb // por xmm1, xmm11 - QUAD $0x0000b024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 176] + QUAD $0x0000a024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 160] LONG $0xc0630f66 // packsswb xmm0, xmm0 LONG $0x6f0f4466; BYTE $0xdb // movdqa xmm11, xmm3 LONG $0xfb6f0f66 // movdqa xmm7, xmm3 @@ -52092,7 +53576,7 @@ LBB10_198: QUAD $0x000000909d6f0f66 // movdqa xmm3, oword 144[rbp] /* [rip + .LCPI10_9] */ LONG $0xcb6f0f66 // movdqa xmm1, xmm3 LONG $0x10380f66; BYTE $0xcc // pblendvb xmm1, xmm4, xmm0 - QUAD $0x0000c024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 192] + QUAD $0x0000b024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 176] LONG $0xc0630f66 // packsswb xmm0, xmm0 QUAD $0x0000a0856f0f4466; BYTE $0x00 // movdqa xmm8, oword 160[rbp] /* [rip + .LCPI10_10] */ LONG $0x6f0f4166; BYTE $0xd0 // movdqa xmm2, xmm8 @@ -52103,42 +53587,42 @@ LBB10_198: LONG $0xc0630f66 // packsswb xmm0, xmm0 QUAD $0x000000b08d6f0f66 // movdqa xmm1, oword 176[rbp] /* [rip + .LCPI10_11] */ LONG $0x10380f66; BYTE $0xcc // pblendvb xmm1, xmm4, xmm0 - QUAD $0x0000d024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 208] + QUAD $0x0000c024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 192] LONG $0xc0630f66 // packsswb xmm0, xmm0 LONG $0x380f4466; WORD $0xd410 // pblendvb xmm10, xmm4, xmm0 LONG $0xeb0f4466; BYTE $0xd1 // por xmm10, xmm1 - QUAD $0x0000f024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 240] + QUAD $0x0000e024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 224] LONG $0xc0630f66 // packsswb xmm0, xmm0 QUAD $0x000000d08d6f0f66 // movdqa xmm1, oword 208[rbp] /* [rip + .LCPI10_13] */ LONG $0x10380f66; BYTE $0xcc // pblendvb xmm1, xmm4, xmm0 LONG $0xeb0f4166; BYTE $0xca // por xmm1, xmm10 LONG $0xcaeb0f66 // por xmm1, xmm2 - QUAD $0x00009024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 144] + LONG $0x446f0f66; WORD $0x7024 // movdqa xmm0, oword [rsp + 112] LONG $0xc0630f66 // packsswb xmm0, xmm0 QUAD $0x0000e0956f0f4466; BYTE $0x00 // movdqa xmm10, oword 224[rbp] /* [rip + .LCPI10_14] */ LONG $0x380f4466; WORD $0xd410 // pblendvb xmm10, xmm4, xmm0 LONG $0xeb0f4466; BYTE $0xd1 // por xmm10, xmm1 - QUAD $0x00012024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 288] + QUAD $0x00010024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 256] LONG $0xc0630f66 // packsswb xmm0, xmm0 LONG $0x6f0f4166; BYTE $0xcb // movdqa xmm1, xmm11 LONG $0x10380f66; BYTE $0xcc // pblendvb xmm1, xmm4, xmm0 - QUAD $0x00010024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 256] + QUAD $0x00012024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 288] LONG $0xc0630f66 // packsswb xmm0, xmm0 LONG $0xd36f0f66 // movdqa xmm2, xmm3 LONG $0x10380f66; BYTE $0xd4 // pblendvb xmm2, xmm4, xmm0 - QUAD $0x0000e024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 224] + QUAD $0x0000d024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 208] QUAD $0x0000016085ef0f66 // pxor xmm0, oword 352[rbp] /* [rip + .LCPI10_22] */ LONG $0xdb760f66 // pcmpeqd xmm3, xmm3 LONG $0xc0630f66 // packsswb xmm0, xmm0 LONG $0xc8f80f66 // psubb xmm1, xmm0 - QUAD $0x00011024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 272] + QUAD $0x00013024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 304] LONG $0xc0630f66 // packsswb xmm0, xmm0 LONG $0x6f0f4166; BYTE $0xf8 // movdqa xmm7, xmm8 LONG $0x10380f66; BYTE $0xfc // pblendvb xmm7, xmm4, xmm0 LONG $0xfaeb0f66 // por xmm7, xmm2 - QUAD $0x00013024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 304] + QUAD $0x00015024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 336] LONG $0xc0630f66 // packsswb xmm0, xmm0 - QUAD $0x0150249c6f0f4466; WORD $0x0000 // movdqa xmm11, oword [rsp + 336] + QUAD $0x0110249c6f0f4466; WORD $0x0000 // movdqa xmm11, oword [rsp + 272] LONG $0x630f4566; BYTE $0xdb // packsswb xmm11, xmm11 LONG $0xf9eb0f66 // por xmm7, xmm1 QUAD $0x000000b08d6f0f66 // movdqa xmm1, oword 176[rbp] /* [rip + .LCPI10_11] */ @@ -52152,7 +53636,7 @@ LBB10_198: QUAD $0x000000d08d6f0f66 // movdqa xmm1, oword 208[rbp] /* [rip + .LCPI10_13] */ LONG $0x10380f66; BYTE $0xcc // pblendvb xmm1, xmm4, xmm0 LONG $0xcaeb0f66 // por xmm1, xmm2 - QUAD $0x0000a024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 160] + QUAD $0x0000f024846f0f66; BYTE $0x00 // movdqa xmm0, oword [rsp + 240] LONG $0xc0630f66 // packsswb xmm0, xmm0 QUAD $0x0170249c6f0f4466; WORD $0x0000 // movdqa xmm11, oword [rsp + 368] LONG $0x630f4566; BYTE $0xdb // packsswb xmm11, xmm11 @@ -52210,28 +53694,28 @@ LBB10_198: LONG $0x7f0f43f3; WORD $0x9644; BYTE $0x10 // movdqu oword [r14 + 4*r10 + 16], xmm0 LONG $0x08c28349 // add r10, 8 QUAD $0x0000019024943b4c // cmp r10, qword [rsp + 400] - JNE LBB10_198 + JNE LBB10_125 QUAD $0x000001c824bc8b4c // mov r15, qword [rsp + 456] QUAD $0x0000019024bc3b4c // cmp r15, qword [rsp + 400] LONG $0x24548b4c; BYTE $0x48 // mov r10, qword [rsp + 72] LONG $0x24648b4c; BYTE $0x08 // mov r12, qword [rsp + 8] - JNE LBB10_101 - JMP LBB10_136 + JNE LBB10_127 + JMP LBB10_130 -LBB10_200: - WORD $0x894d; BYTE $0xd8 // mov r8, r11 - LONG $0xfce08349 // and r8, -4 - WORD $0x894c; BYTE $0xc3 // mov rbx, r8 - LONG $0x07e3c148 // shl rbx, 7 - WORD $0x0148; BYTE $0xf3 // add rbx, rsi - LONG $0x863c8d4f // lea r15, [r14 + 4*r8] +LBB10_182: + WORD $0x894c; BYTE $0xd8 // mov rax, r11 + LONG $0xfce08348 // and rax, -4 + WORD $0x8948; BYTE $0xc2 // mov rdx, rax + LONG $0x07e2c148 // shl rdx, 7 + WORD $0x0148; BYTE $0xf2 // add rdx, rsi + LONG $0x863c8d4d // lea r15, [r14 + 4*rax] LONG $0xeb280f45 // movaps xmm13, xmm11 LONG $0xebc60f45; BYTE $0x00 // shufps xmm13, xmm11, 0 LONG $0xfcc68148; WORD $0x0001; BYTE $0x00 // add rsi, 508 WORD $0xc931 // xor ecx, ecx LONG $0x6f0f4466; WORD $0x007d // movdqa xmm15, oword 0[rbp] /* [rip + .LCPI10_0] */ -LBB10_201: +LBB10_183: QUAD $0xfffffe049e100ff3 // movss xmm3, dword [rsi - 508] QUAD $0xfffe0896100f44f3; BYTE $0xff // movss xmm10, dword [rsi - 504] QUAD $0xfffe0c8e100f44f3; BYTE $0xff // movss xmm9, dword [rsi - 500] @@ -52618,11 +54102,11 @@ LBB10_201: LONG $0x7f0f45f3; WORD $0x8e04 // movdqu oword [r14 + 4*rcx], xmm8 LONG $0x04c18348 // add rcx, 4 LONG $0x00c68148; WORD $0x0002; BYTE $0x00 // add rsi, 512 - WORD $0x3949; BYTE $0xc8 // cmp r8, rcx - JNE LBB10_201 - WORD $0x394d; BYTE $0xc3 // cmp r11, r8 - JNE LBB10_124 - JMP LBB10_140 + WORD $0x3948; BYTE $0xc8 // cmp rax, rcx + JNE LBB10_183 + WORD $0x3949; BYTE $0xc3 // cmp r11, rax + JNE LBB10_185 + JMP LBB10_188 DATA LCDATA8<>+0x000(SB)/8, $0x0000000001010101 DATA LCDATA8<>+0x008(SB)/8, $0x0000000000000000 diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparisons.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparisons.go similarity index 86% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparisons.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparisons.go index 8a957eaf..b30605bf 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/scalar_comparisons.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/scalar_comparisons.go @@ -23,34 +23,35 @@ import ( "fmt" "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/decimal128" - "github.com/apache/arrow/go/v14/arrow/decimal256" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/scalar" - "github.com/apache/arrow/go/v14/internal/bitutils" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/decimal256" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/arrow/scalar" + "github.com/apache/arrow-go/v18/internal/bitutils" ) type binaryKernel func(left, right, out []byte, offset int) -type cmpFn[LeftT, RightT exec.FixedWidthTypes] func([]LeftT, []RightT, []uint32) -type cmpScalarLeft[LeftT, RightT exec.FixedWidthTypes] func(LeftT, []RightT, []uint32) -type cmpScalarRight[LeftT, RightT exec.FixedWidthTypes] func([]LeftT, RightT, []uint32) +type cmpFn[LeftT, RightT arrow.FixedWidthType] func([]LeftT, []RightT, []uint32) +type cmpScalarLeft[LeftT, RightT arrow.FixedWidthType] func(LeftT, []RightT, []uint32) +type cmpScalarRight[LeftT, RightT arrow.FixedWidthType] func([]LeftT, RightT, []uint32) -type cmpOp[T exec.FixedWidthTypes] struct { +type cmpOp[T arrow.FixedWidthType] struct { arrArr cmpFn[T, T] arrScalar cmpScalarRight[T, T] scalarArr cmpScalarLeft[T, T] } -func comparePrimitiveArrayArray[T exec.FixedWidthTypes](op cmpFn[T, T]) binaryKernel { +func comparePrimitiveArrayArray[T arrow.FixedWidthType](op cmpFn[T, T]) binaryKernel { return func(leftBytes, rightBytes, out []byte, offset int) { const batchSize = 32 var ( - left = exec.GetData[T](leftBytes) - right = exec.GetData[T](rightBytes) + left = arrow.GetData[T](leftBytes) + right = arrow.GetData[T](rightBytes) nvals = len(left) nbatches = nvals / batchSize tmpOutput [batchSize]uint32 @@ -83,11 +84,11 @@ func comparePrimitiveArrayArray[T exec.FixedWidthTypes](op cmpFn[T, T]) binaryKe } } -func comparePrimitiveArrayScalar[T exec.FixedWidthTypes](op cmpScalarRight[T, T]) binaryKernel { +func comparePrimitiveArrayScalar[T arrow.FixedWidthType](op cmpScalarRight[T, T]) binaryKernel { return func(leftBytes, rightBytes, out []byte, offset int) { const batchSize = 32 var ( - left = exec.GetData[T](leftBytes) + left = arrow.GetData[T](leftBytes) rightVal = *(*T)(unsafe.Pointer(&rightBytes[0])) nvals = len(left) nbatches = nvals / batchSize @@ -121,12 +122,12 @@ func comparePrimitiveArrayScalar[T exec.FixedWidthTypes](op cmpScalarRight[T, T] } } -func comparePrimitiveScalarArray[T exec.FixedWidthTypes](op cmpScalarLeft[T, T]) binaryKernel { +func comparePrimitiveScalarArray[T arrow.FixedWidthType](op cmpScalarLeft[T, T]) binaryKernel { return func(leftBytes, rightBytes, out []byte, offset int) { const batchSize = 32 var ( leftVal = *(*T)(unsafe.Pointer(&leftBytes[0])) - right = exec.GetData[T](rightBytes) + right = arrow.GetData[T](rightBytes) nvals = len(right) nbatches = nvals / batchSize @@ -181,7 +182,7 @@ func getOffsetSpanBytes(span *exec.ArraySpan) []byte { return buf[start : start+(span.Len*byteWidth)] } -func compareKernel[T exec.FixedWidthTypes](ctx *exec.KernelCtx, batch *exec.ExecSpan, out *exec.ExecResult) error { +func compareKernel[T arrow.FixedWidthType](ctx *exec.KernelCtx, batch *exec.ExecSpan, out *exec.ExecResult) error { kn := ctx.Kernel.(*exec.ScalarKernel) knData := kn.Data.(CompareFuncData).Funcs() @@ -202,7 +203,7 @@ func compareKernel[T exec.FixedWidthTypes](ctx *exec.KernelCtx, batch *exec.Exec return nil } -func genGoCompareKernel[T exec.FixedWidthTypes](op *cmpOp[T]) *CompareData { +func genGoCompareKernel[T arrow.FixedWidthType](op *cmpOp[T]) *CompareData { return &CompareData{ funcAA: comparePrimitiveArrayArray(op.arrArr), funcAS: comparePrimitiveArrayScalar(op.arrScalar), @@ -376,7 +377,7 @@ func genDecimalCompareKernel[T decimal128.Num | decimal256.Num](op CompareOperat return } -func getCmpOp[T exec.NumericTypes](op CompareOperator) *cmpOp[T] { +func getCmpOp[T arrow.NumericType](op CompareOperator) *cmpOp[T] { switch op { case CmpEQ: return &cmpOp[T]{ @@ -524,7 +525,7 @@ func getBinaryCmp(op CompareOperator) binaryBinOp[bool] { return nil } -func numericCompareKernel[T exec.NumericTypes](ty exec.InputType, op CompareOperator) (kn exec.ScalarKernel) { +func numericCompareKernel[T arrow.NumericType](ty exec.InputType, op CompareOperator) (kn exec.ScalarKernel) { ex := compareKernel[T] kn = exec.NewScalarKernelWithSig(&exec.KernelSignature{ InputTypes: []exec.InputType{ty, ty}, @@ -699,3 +700,48 @@ func CompareKernels(op CompareOperator) []exec.ScalarKernel { return kns } + +func isNullExec(ctx *exec.KernelCtx, batch *exec.ExecSpan, out *exec.ExecResult) error { + out.Release() + input := batch.Values[0].Array + + validityBuf := input.GetBuffer(0) + out.Buffers[1].WrapBuffer(ctx.AllocateBitmap(input.Len)) + if validityBuf != nil { + bitutil.InvertBitmap(validityBuf.Bytes(), int(input.Offset), int(input.Len), + out.Buffers[1].Buf, 0) + } + + return nil +} + +func isNotNullExec(ctx *exec.KernelCtx, batch *exec.ExecSpan, out *exec.ExecResult) error { + out.Release() + input := batch.Values[0].Array + + validityBuf := input.GetBuffer(0) + if validityBuf == nil { + out.Buffers[1].WrapBuffer(ctx.AllocateBitmap(input.Len)) + memory.Set(out.Buffers[1].Buf, 0xFF) + } else { + out.Buffers[1].SetBuffer(validityBuf) + } + + return nil +} + +func IsNullNotNullKernels() []exec.ScalarKernel { + in := exec.InputType{Kind: exec.InputAny} + out := exec.NewOutputType(arrow.FixedWidthTypes.Boolean) + + results := make([]exec.ScalarKernel, 2) + results[0] = exec.NewScalarKernel([]exec.InputType{in}, out, isNullExec, nil) + results[0].NullHandling = exec.NullComputedNoPrealloc + results[0].MemAlloc = exec.MemNoPrealloc + + results[1] = exec.NewScalarKernel([]exec.InputType{in}, out, isNotNullExec, nil) + results[1].NullHandling = exec.NullComputedNoPrealloc + results[1].MemAlloc = exec.MemNoPrealloc + + return results +} diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/string_casts.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/string_casts.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/string_casts.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/string_casts.go index 30705146..1f4b2218 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/string_casts.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/string_casts.go @@ -23,12 +23,12 @@ import ( "strconv" "unicode/utf8" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/float16" - "github.com/apache/arrow/go/v14/internal/bitutils" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/float16" + "github.com/apache/arrow-go/v18/internal/bitutils" ) func validateUtf8Fsb(input *exec.ArraySpan) error { @@ -116,7 +116,7 @@ func CastBinaryToBinary[InOffsetsT, OutOffsetsT int32 | int64](ctx *exec.KernelC outOffsets := exec.GetSpanOffsets[OutOffsetsT](out, 1) castNumericUnsafe(arrow.INT64, arrow.INT32, - exec.GetBytes(inputOffsets), exec.GetBytes(outOffsets), len(inputOffsets)) + arrow.GetBytes(inputOffsets), arrow.GetBytes(outOffsets), len(inputOffsets)) return nil default: // upcast from int32 -> int64 @@ -127,7 +127,7 @@ func CastBinaryToBinary[InOffsetsT, OutOffsetsT int32 | int64](ctx *exec.KernelC outOffsets := exec.GetSpanOffsets[OutOffsetsT](out, 1) castNumericUnsafe(arrow.INT32, arrow.INT64, - exec.GetBytes(inputOffsets), exec.GetBytes(outOffsets), len(inputOffsets)) + arrow.GetBytes(inputOffsets), arrow.GetBytes(outOffsets), len(inputOffsets)) return nil } } @@ -201,8 +201,8 @@ func GetFsbCastKernels() []exec.ScalarKernel { func float16Formatter(v float16.Num) string { return v.String() } func date32Formatter(v arrow.Date32) string { return v.FormattedString() } func date64Formatter(v arrow.Date64) string { return v.FormattedString() } -func numericFormatterSigned[T exec.IntTypes](v T) string { return strconv.FormatInt(int64(v), 10) } -func numericFormatterUnsigned[T exec.UintTypes](v T) string { return strconv.FormatUint(uint64(v), 10) } +func numericFormatterSigned[T arrow.IntType](v T) string { return strconv.FormatInt(int64(v), 10) } +func numericFormatterUnsigned[T arrow.UintType](v T) string { return strconv.FormatUint(uint64(v), 10) } func float32Formatter(v float32) string { return strconv.FormatFloat(float64(v), 'g', -1, 32) } func float64Formatter(v float64) string { return strconv.FormatFloat(v, 'g', -1, 64) } @@ -247,7 +247,7 @@ func timeToStringCastExec[T timeIntrinsic](ctx *exec.KernelCtx, batch *exec.Exec return nil } -func numericToStringCastExec[T exec.IntTypes | exec.UintTypes | exec.FloatTypes](formatter func(T) string) exec.ArrayKernelExec { +func numericToStringCastExec[T arrow.IntType | arrow.UintType | arrow.FloatType](formatter func(T) string) exec.ArrayKernelExec { return func(ctx *exec.KernelCtx, batch *exec.ExecSpan, out *exec.ExecResult) error { var ( input = &batch.Values[0].Array diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/types.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/types.go similarity index 94% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/types.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/types.go index 2788fb70..29cb6f54 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/types.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/types.go @@ -21,10 +21,10 @@ package kernels import ( "fmt" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/scalar" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/scalar" ) var ( diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/vector_hash.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/vector_hash.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/vector_hash.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/vector_hash.go index e0ede826..51968f79 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/vector_hash.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/vector_hash.go @@ -21,13 +21,13 @@ package kernels import ( "fmt" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/bitutils" - "github.com/apache/arrow/go/v14/internal/hashing" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/bitutils" + "github.com/apache/arrow-go/v18/internal/hashing" ) type HashState interface { @@ -178,7 +178,7 @@ func doAppendFixedSize(action Action, memo hashing.MemoTable, arr *exec.ArraySpa }) } -func doAppendNumeric[T exec.IntTypes | exec.UintTypes | exec.FloatTypes](action Action, memo hashing.MemoTable, arr *exec.ArraySpan) error { +func doAppendNumeric[T arrow.IntType | arrow.UintType | arrow.FloatType](action Action, memo hashing.MemoTable, arr *exec.ArraySpan) error { arrData := exec.GetSpanValues[T](arr, 1) shouldEncodeNulls := action.ShouldEncodeNulls() return bitutils.VisitBitBlocksShort(arr.Buffers[0].Buf, arr.Offset, arr.Len, diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/vector_run_end_encode.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/vector_run_end_encode.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/vector_run_end_encode.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/vector_run_end_encode.go index e073ff1f..faedcfba 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/vector_run_end_encode.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/vector_run_end_encode.go @@ -24,14 +24,14 @@ import ( "sort" "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/decimal128" - "github.com/apache/arrow/go/v14/arrow/decimal256" - "github.com/apache/arrow/go/v14/arrow/float16" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/decimal256" + "github.com/apache/arrow-go/v18/arrow/float16" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" ) type RunEndEncodeState struct { @@ -46,18 +46,18 @@ type RunEndsType interface { int16 | int32 | int64 } -func readFixedWidthVal[V exec.FixedWidthTypes](inputValidity, inputValues []byte, offset int64, out *V) bool { +func readFixedWidthVal[V arrow.FixedWidthType](inputValidity, inputValues []byte, offset int64, out *V) bool { sz := int64(unsafe.Sizeof(*out)) *out = *(*V)(unsafe.Pointer(&inputValues[offset*sz])) return bitutil.BitIsSet(inputValidity, int(offset)) } -func writeFixedWidthVal[V exec.FixedWidthTypes](result *exec.ExecResult, offset int64, valid bool, value V) { +func writeFixedWidthVal[V arrow.FixedWidthType](result *exec.ExecResult, offset int64, valid bool, value V) { if len(result.Buffers[0].Buf) != 0 { bitutil.SetBitTo(result.Buffers[0].Buf, int(offset), valid) } - arr := exec.GetData[V](result.Buffers[1].Buf) + arr := arrow.GetData[V](result.Buffers[1].Buf) arr[offset] = value } @@ -73,7 +73,7 @@ func writeBoolVal(result *exec.ExecResult, offset int64, valid bool, value bool) bitutil.SetBitTo(result.Buffers[1].Buf, int(offset), value) } -type runEndEncodeLoopFixedWidth[R RunEndsType, V exec.FixedWidthTypes | bool] struct { +type runEndEncodeLoopFixedWidth[R RunEndsType, V arrow.FixedWidthType | bool] struct { inputLen, inputOffset int64 inputValidity []byte inputValues []byte @@ -84,7 +84,7 @@ type runEndEncodeLoopFixedWidth[R RunEndsType, V exec.FixedWidthTypes | bool] st } func (re *runEndEncodeLoopFixedWidth[R, V]) WriteEncodedRuns(out *exec.ExecResult) int64 { - outputRunEnds := exec.GetData[R](out.Children[0].Buffers[1].Buf) + outputRunEnds := arrow.GetData[R](out.Children[0].Buffers[1].Buf) readOffset := re.inputOffset var currentRun V @@ -155,7 +155,7 @@ func (re *runEndEncodeLoopFixedWidth[R, V]) PreallocOutput(ctx *exec.KernelCtx, valueBuffer = ctx.Allocate(int(numOutput) * bufSpec.ByteWidth) } - reeType := arrow.RunEndEncodedOf(exec.GetDataType[R](), re.valueType) + reeType := arrow.RunEndEncodedOf(arrow.GetDataType[R](), re.valueType) out.Release() *out = exec.ExecResult{ @@ -230,7 +230,7 @@ func (re *runEndEncodeFSB[R]) PreallocOutput(ctx *exec.KernelCtx, numOutput int6 } valueBuffer := ctx.Allocate(re.width * int(numOutput)) - reeType := arrow.RunEndEncodedOf(exec.GetDataType[R](), re.valueType) + reeType := arrow.RunEndEncodedOf(arrow.GetDataType[R](), re.valueType) out.Release() *out = exec.ExecResult{ @@ -258,7 +258,7 @@ func (re *runEndEncodeFSB[R]) PreallocOutput(ctx *exec.KernelCtx, numOutput int6 } func (re *runEndEncodeFSB[R]) WriteEncodedRuns(out *exec.ExecResult) int64 { - outputRunEnds := exec.GetData[R](out.Children[0].Buffers[1].Buf) + outputRunEnds := arrow.GetData[R](out.Children[0].Buffers[1].Buf) outputValues := out.Children[1].Buffers[1].Buf readOffset := re.inputOffset @@ -362,7 +362,7 @@ func (re *runEndEncodeLoopBinary[R, O]) PreallocOutput(ctx *exec.KernelCtx, numO valueBuffer := ctx.Allocate(int(re.estimatedValuesLen)) offsetsBuffer := ctx.Allocate(int(numOutput+1) * int(SizeOf[O]())) - reeType := arrow.RunEndEncodedOf(exec.GetDataType[R](), re.valueType) + reeType := arrow.RunEndEncodedOf(arrow.GetDataType[R](), re.valueType) *out = exec.ExecResult{ Type: reeType, Len: re.inputLen, @@ -389,12 +389,12 @@ func (re *runEndEncodeLoopBinary[R, O]) PreallocOutput(ctx *exec.KernelCtx, numO } func (re *runEndEncodeLoopBinary[R, O]) WriteEncodedRuns(out *exec.ExecResult) int64 { - outputRunEnds := exec.GetData[R](out.Children[0].Buffers[1].Buf) + outputRunEnds := arrow.GetData[R](out.Children[0].Buffers[1].Buf) outputOffsets := exec.GetSpanOffsets[O](&out.Children[1], 1) outputValues := out.Children[1].Buffers[2].Buf // re.offsetValues already accounts for the input.offset so we don't - // need to initalize readOffset to re.inputOffset + // need to initialize readOffset to re.inputOffset var readOffset int64 currentRun, curRunValid := re.readValue(readOffset) readOffset++ @@ -443,7 +443,7 @@ func validateRunEndType[R RunEndsType](length int64) error { return nil } -func createEncoder[R RunEndsType, V exec.FixedWidthTypes](input *exec.ArraySpan) *runEndEncodeLoopFixedWidth[R, V] { +func createEncoder[R RunEndsType, V arrow.FixedWidthType](input *exec.ArraySpan) *runEndEncodeLoopFixedWidth[R, V] { return &runEndEncodeLoopFixedWidth[R, V]{ inputLen: input.Len, inputOffset: input.Offset, @@ -539,7 +539,7 @@ func runEndEncodeImpl[R RunEndsType](ctx *exec.KernelCtx, batch *exec.ExecSpan, ) if inputLen == 0 { - reeType := arrow.RunEndEncodedOf(exec.GetDataType[R](), inputArr.Type) + reeType := arrow.RunEndEncodedOf(arrow.GetDataType[R](), inputArr.Type) *out = exec.ExecResult{ Type: reeType, Children: []exec.ArraySpan{ diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/vector_selection.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/vector_selection.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/vector_selection.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/vector_selection.go index c7a902bd..4a619406 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/internal/kernels/vector_selection.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/internal/kernels/vector_selection.go @@ -22,13 +22,13 @@ import ( "fmt" "math" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/bitutils" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/bitutils" ) type NullSelectionBehavior int8 @@ -99,12 +99,12 @@ type builder[T any] interface { UnsafeAppendBoolToBitmap(bool) } -func getTakeIndices[T exec.IntTypes | exec.UintTypes](mem memory.Allocator, filter *exec.ArraySpan, nullSelect NullSelectionBehavior) arrow.ArrayData { +func getTakeIndices[T arrow.IntType | arrow.UintType](mem memory.Allocator, filter *exec.ArraySpan, nullSelect NullSelectionBehavior) arrow.ArrayData { var ( filterData = filter.Buffers[1].Buf haveFilterNulls = filter.MayHaveNulls() filterIsValid = filter.Buffers[0].Buf - idxType = exec.GetDataType[T]() + idxType = arrow.GetDataType[T]() ) if haveFilterNulls && nullSelect == EmitNulls { @@ -394,7 +394,7 @@ func primitiveFilterImpl(wr writeFiltered, values *exec.ArraySpan, filter *exec. } } -type filterWriter[T exec.UintTypes] struct { +type filterWriter[T arrow.UintType] struct { outPosition int outOffset int valuesOffset int @@ -519,7 +519,7 @@ func PrimitiveFilter(ctx *exec.KernelCtx, batch *exec.ExecSpan, out *exec.ExecRe return nil } -type primitiveGetter[T exec.IntTypes | bool] interface { +type primitiveGetter[T arrow.IntType | bool] interface { IsValid(int64) bool GetValue(int64) T NullCount() int64 @@ -542,7 +542,7 @@ func (b *boolGetter) GetValue(i int64) bool { func (b *boolGetter) NullCount() int64 { return b.inner.Nulls } func (b *boolGetter) Len() int64 { return b.inner.Len } -type primitiveGetterImpl[T exec.IntTypes] struct { +type primitiveGetterImpl[T arrow.IntType] struct { inner *exec.ArraySpan values []T } @@ -608,7 +608,7 @@ func (c *chunkedBoolGetter) GetValue(i int64) bool { func (c *chunkedBoolGetter) NullCount() int64 { return c.nulls } func (c *chunkedBoolGetter) Len() int64 { return c.len } -type chunkedPrimitiveGetter[T exec.IntTypes] struct { +type chunkedPrimitiveGetter[T arrow.IntType] struct { inner *arrow.Chunked resolver *exec.ChunkResolver nulls int64 @@ -619,7 +619,7 @@ type chunkedPrimitiveGetter[T exec.IntTypes] struct { valuesOffset []int64 } -func newChunkedPrimitiveGetter[T exec.IntTypes](arr *arrow.Chunked) *chunkedPrimitiveGetter[T] { +func newChunkedPrimitiveGetter[T arrow.IntType](arr *arrow.Chunked) *chunkedPrimitiveGetter[T] { nchunks := len(arr.Chunks()) lengths := make([]int64, nchunks) valuesData := make([][]T, nchunks) @@ -630,7 +630,7 @@ func newChunkedPrimitiveGetter[T exec.IntTypes](arr *arrow.Chunked) *chunkedPrim lengths[i] = int64(c.Len()) valuesOffset[i] = int64(c.Data().Offset()) valuesIsValid[i] = c.NullBitmapBytes() - valuesData[i] = exec.GetValues[T](c.Data(), 1) + valuesData[i] = arrow.GetValues[T](c.Data(), 1) } return &chunkedPrimitiveGetter[T]{ @@ -662,7 +662,7 @@ func (c *chunkedPrimitiveGetter[T]) GetValue(i int64) T { func (c *chunkedPrimitiveGetter[T]) NullCount() int64 { return c.nulls } func (c *chunkedPrimitiveGetter[T]) Len() int64 { return c.len } -func primitiveTakeImpl[IdxT exec.UintTypes, ValT exec.IntTypes](values primitiveGetter[ValT], indices *exec.ArraySpan, out *exec.ExecResult) { +func primitiveTakeImpl[IdxT arrow.UintType, ValT arrow.IntType](values primitiveGetter[ValT], indices *exec.ArraySpan, out *exec.ExecResult) { var ( indicesData = exec.GetSpanValues[IdxT](indices, 1) indicesIsValid = indices.Buffers[0].Buf @@ -747,7 +747,7 @@ func primitiveTakeImpl[IdxT exec.UintTypes, ValT exec.IntTypes](values primitive out.Nulls = out.Len - validCount } -func booleanTakeImpl[IdxT exec.UintTypes](values primitiveGetter[bool], indices *exec.ArraySpan, out *exec.ExecResult) { +func booleanTakeImpl[IdxT arrow.UintType](values primitiveGetter[bool], indices *exec.ArraySpan, out *exec.ExecResult) { var ( indicesData = exec.GetSpanValues[IdxT](indices, 1) indicesIsValid = indices.Buffers[0].Buf @@ -876,7 +876,7 @@ func booleanTakeDispatch(values, indices *exec.ArraySpan, out *exec.ExecResult) return nil } -func takeIdxChunkedDispatch[ValT exec.IntTypes](values, indices *arrow.Chunked, out []*exec.ExecResult) error { +func takeIdxChunkedDispatch[ValT arrow.IntType](values, indices *arrow.Chunked, out []*exec.ExecResult) error { getter := newChunkedPrimitiveGetter[ValT](values) var fn func(primitiveGetter[ValT], *exec.ArraySpan, *exec.ExecResult) @@ -901,7 +901,7 @@ func takeIdxChunkedDispatch[ValT exec.IntTypes](values, indices *arrow.Chunked, return nil } -func takeIdxDispatch[ValT exec.IntTypes](values, indices *exec.ArraySpan, out *exec.ExecResult) error { +func takeIdxDispatch[ValT arrow.IntType](values, indices *exec.ArraySpan, out *exec.ExecResult) error { getter := &primitiveGetterImpl[ValT]{inner: values, values: exec.GetSpanValues[ValT](values, 1)} switch indices.Type.(arrow.FixedWidthDataType).Bytes() { @@ -1368,7 +1368,7 @@ func binaryFilterImpl[OffsetT int32 | int64](ctx *exec.KernelCtx, values, filter return nil } -func takeExecImpl[T exec.UintTypes](ctx *exec.KernelCtx, outputLen int64, values, indices *exec.ArraySpan, out *exec.ExecResult, visitValid func(int64) error, visitNull func() error) error { +func takeExecImpl[T arrow.UintType](ctx *exec.KernelCtx, outputLen int64, values, indices *exec.ArraySpan, out *exec.ExecResult, visitValid func(int64) error, visitNull func() error) error { var ( validityBuilder = validityBuilder{mem: exec.GetAllocator(ctx.Ctx)} indicesValues = exec.GetSpanValues[T](indices, 1) @@ -1600,7 +1600,7 @@ func ListImpl[OffsetT int32 | int64](ctx *exec.KernelCtx, batch *exec.ExecSpan, out.Buffers[1].WrapBuffer(offsetBuilder.finish()) out.Children = make([]exec.ArraySpan, 1) - out.Children[0].Type = exec.GetDataType[OffsetT]() + out.Children[0].Type = arrow.GetDataType[OffsetT]() out.Children[0].Len = int64(childIdxBuilder.len()) out.Children[0].Buffers[1].WrapBuffer(childIdxBuilder.finish()) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/registry.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/registry.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/registry.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/registry.go index 4f1c435f..12bc0b85 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/registry.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/registry.go @@ -21,7 +21,7 @@ package compute import ( "sync" - "github.com/apache/arrow/go/v14/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/internal/debug" "golang.org/x/exp/maps" "golang.org/x/exp/slices" ) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/scalar_bool.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/scalar_bool.go similarity index 96% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/scalar_bool.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/scalar_bool.go index 49c74568..a46d221b 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/scalar_bool.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/scalar_bool.go @@ -21,9 +21,9 @@ package compute import ( "fmt" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/compute/internal/kernels" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/compute/internal/kernels" ) var ( diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/scalar_compare.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/scalar_compare.go similarity index 70% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/scalar_compare.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/scalar_compare.go index 476f3771..0b182ebe 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/scalar_compare.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/scalar_compare.go @@ -20,10 +20,12 @@ package compute import ( "context" + "fmt" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/compute/internal/kernels" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/compute/internal/kernels" + "github.com/apache/arrow-go/v18/arrow/scalar" ) type compareFunction struct { @@ -134,4 +136,49 @@ func RegisterScalarComparisons(reg FunctionRegistry) { reg.AddFunction(ltFn, false) lteFn := makeFlippedCompare("less_equal", gteFn, EmptyFuncDoc) reg.AddFunction(lteFn, false) + + isOrNotNullKns := kernels.IsNullNotNullKernels() + isNullFn := &compareFunction{*NewScalarFunction("is_null", Unary(), EmptyFuncDoc)} + if err := isNullFn.AddKernel(isOrNotNullKns[0]); err != nil { + panic(err) + } + + isNotNullFn := &compareFunction{*NewScalarFunction("is_not_null", Unary(), EmptyFuncDoc)} + if err := isNotNullFn.AddKernel(isOrNotNullKns[1]); err != nil { + panic(err) + } + + reg.AddFunction(isNullFn, false) + reg.AddFunction(isNotNullFn, false) + + reg.AddFunction(NewMetaFunction("is_nan", Unary(), EmptyFuncDoc, + func(ctx context.Context, opts FunctionOptions, args ...Datum) (Datum, error) { + type hasType interface { + Type() arrow.DataType + } + + // only Scalar, Array and ChunkedArray have a Type method + arg, ok := args[0].(hasType) + if !ok { + // don't support Table/Record/None kinds + return nil, fmt.Errorf("%w: unsupported type for is_nan %s", + arrow.ErrNotImplemented, args[0]) + } + + switch arg.Type() { + case arrow.PrimitiveTypes.Float32, arrow.PrimitiveTypes.Float64: + return CallFunction(ctx, "not_equal", nil, args[0], args[0]) + default: + if arg, ok := args[0].(ArrayLikeDatum); ok { + result, err := scalar.MakeArrayFromScalar(scalar.NewBooleanScalar(false), + int(arg.Len()), GetAllocator(ctx)) + if err != nil { + return nil, err + } + return NewDatumWithoutOwning(result), nil + } + + return NewDatum(false), nil + } + }), false) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/selection.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/selection.go similarity index 99% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/selection.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/selection.go index ed6d8041..feac9d88 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/selection.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/selection.go @@ -22,10 +22,10 @@ import ( "context" "fmt" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/compute/internal/kernels" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/compute/internal/kernels" "golang.org/x/sync/errgroup" ) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/utils.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/utils.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/utils.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/utils.go index cc4d6edc..a6e311d5 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/utils.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/utils.go @@ -21,15 +21,15 @@ package compute import ( "fmt" "io" - "math" "time" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/compute/exec" - "github.com/apache/arrow/go/v14/arrow/compute/internal/kernels" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/compute/exec" + "github.com/apache/arrow-go/v18/arrow/compute/internal/kernels" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/utils" "golang.org/x/xerrors" ) @@ -43,9 +43,9 @@ func (b *bufferWriteSeeker) Reserve(nbytes int) { if b.buf == nil { b.buf = memory.NewResizableBuffer(b.mem) } - newCap := int(math.Max(float64(b.buf.Cap()), 256)) + newCap := utils.Max(b.buf.Cap(), 256) for newCap < b.pos+nbytes { - newCap = bitutil.NextPowerOf2(newCap) + newCap = bitutil.NextPowerOf2(b.pos + nbytes) } b.buf.Reserve(newCap) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/vector_hash.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/vector_hash.go similarity index 94% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/vector_hash.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/vector_hash.go index 5f9aec55..facdd1ff 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/vector_hash.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/vector_hash.go @@ -21,8 +21,8 @@ package compute import ( "context" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/compute/internal/kernels" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/compute/internal/kernels" ) var ( diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/compute/vector_run_ends.go b/vendor/github.com/apache/arrow-go/v18/arrow/compute/vector_run_ends.go similarity index 96% rename from vendor/github.com/apache/arrow/go/v14/arrow/compute/vector_run_ends.go rename to vendor/github.com/apache/arrow-go/v18/arrow/compute/vector_run_ends.go index 48f3dcba..c1545b9b 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/compute/vector_run_ends.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/compute/vector_run_ends.go @@ -21,8 +21,8 @@ package compute import ( "context" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/compute/internal/kernels" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/compute/internal/kernels" ) var ( diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/datatype.go b/vendor/github.com/apache/arrow-go/v18/arrow/datatype.go similarity index 92% rename from vendor/github.com/apache/arrow/go/v14/arrow/datatype.go rename to vendor/github.com/apache/arrow-go/v18/arrow/datatype.go index f0fb24ec..95565859 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/datatype.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/datatype.go @@ -21,7 +21,7 @@ import ( "hash/maphash" "strings" - "github.com/apache/arrow/go/v14/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/internal/debug" ) // Type is a logical type. They can be expressed as @@ -107,7 +107,7 @@ const ( // parameters. DECIMAL128 - // DECIMAL256 is a precision and scale based decimal type, with 256 bit max. not yet implemented + // DECIMAL256 is a precision and scale based decimal type, with 256 bit max. DECIMAL256 // LIST is a list of some logical data type @@ -116,10 +116,10 @@ const ( // STRUCT of logical types STRUCT - // SPARSE_UNION of logical types. not yet implemented + // SPARSE_UNION of logical types SPARSE_UNION - // DENSE_UNION of logical types. not yet implemented + // DENSE_UNION of logical types DENSE_UNION // DICTIONARY aka Category type @@ -138,13 +138,13 @@ const ( // or nanoseconds. DURATION - // like STRING, but 64-bit offsets. not yet implemented + // like STRING, but 64-bit offsets LARGE_STRING - // like BINARY but with 64-bit offsets, not yet implemented + // like BINARY but with 64-bit offsets LARGE_BINARY - // like LIST but with 64-bit offsets. not yet implmented + // like LIST but with 64-bit offsets LARGE_LIST // calendar interval with three fields @@ -165,6 +165,12 @@ const ( // like LIST but with 64-bit offsets LARGE_LIST_VIEW + // Decimal value with 32-bit representation + DECIMAL32 + + // Decimal value with 64-bit representation + DECIMAL64 + // Alias to ensure we do not break any consumers DECIMAL = DECIMAL128 ) @@ -210,6 +216,11 @@ type BinaryDataType interface { binary() } +type BinaryViewDataType interface { + BinaryDataType + view() +} + type OffsetsDataType interface { DataType OffsetTypeTraits() OffsetTraits @@ -272,6 +283,8 @@ func (b BufferSpec) Equals(other BufferSpec) bool { type DataTypeLayout struct { Buffers []BufferSpec HasDict bool + // VariadicSpec is what the buffers beyond len(Buffers) are expected to conform to. + VariadicSpec *BufferSpec } func SpecFixedWidth(w int) BufferSpec { return BufferSpec{KindFixedWidth, w} } @@ -358,10 +371,10 @@ func IsLargeBinaryLike(t Type) bool { return false } -// IsFixedSizeBinary returns true for Decimal128/256 and FixedSizeBinary +// IsFixedSizeBinary returns true for Decimal32/64/128/256 and FixedSizeBinary func IsFixedSizeBinary(t Type) bool { switch t { - case DECIMAL128, DECIMAL256, FIXED_SIZE_BINARY: + case DECIMAL32, DECIMAL64, DECIMAL128, DECIMAL256, FIXED_SIZE_BINARY: return true } return false @@ -370,7 +383,7 @@ func IsFixedSizeBinary(t Type) bool { // IsDecimal returns true for Decimal128 and Decimal256 func IsDecimal(t Type) bool { switch t { - case DECIMAL128, DECIMAL256: + case DECIMAL32, DECIMAL64, DECIMAL128, DECIMAL256: return true } return false diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/datatype_binary.go b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_binary.go similarity index 72% rename from vendor/github.com/apache/arrow/go/v14/arrow/datatype_binary.go rename to vendor/github.com/apache/arrow-go/v18/arrow/datatype_binary.go index a3a85686..f3e601f0 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/datatype_binary.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_binary.go @@ -83,16 +83,57 @@ func (t *LargeStringType) Layout() DataTypeLayout { func (t *LargeStringType) OffsetTypeTraits() OffsetTraits { return Int64Traits } func (LargeStringType) IsUtf8() bool { return true } +type BinaryViewType struct{} + +func (*BinaryViewType) ID() Type { return BINARY_VIEW } +func (*BinaryViewType) Name() string { return "binary_view" } +func (*BinaryViewType) String() string { return "binary_view" } +func (*BinaryViewType) IsUtf8() bool { return false } +func (*BinaryViewType) binary() {} +func (*BinaryViewType) view() {} +func (t *BinaryViewType) Fingerprint() string { return typeFingerprint(t) } +func (*BinaryViewType) Layout() DataTypeLayout { + variadic := SpecVariableWidth() + return DataTypeLayout{ + Buffers: []BufferSpec{SpecBitmap(), SpecFixedWidth(ViewHeaderSizeBytes)}, + VariadicSpec: &variadic, + } +} + +type StringViewType struct{} + +func (*StringViewType) ID() Type { return STRING_VIEW } +func (*StringViewType) Name() string { return "string_view" } +func (*StringViewType) String() string { return "string_view" } +func (*StringViewType) IsUtf8() bool { return true } +func (*StringViewType) binary() {} +func (*StringViewType) view() {} +func (t *StringViewType) Fingerprint() string { return typeFingerprint(t) } +func (*StringViewType) Layout() DataTypeLayout { + variadic := SpecVariableWidth() + return DataTypeLayout{ + Buffers: []BufferSpec{SpecBitmap(), SpecFixedWidth(ViewHeaderSizeBytes)}, + VariadicSpec: &variadic, + } +} + var ( BinaryTypes = struct { Binary BinaryDataType String BinaryDataType LargeBinary BinaryDataType LargeString BinaryDataType + BinaryView BinaryDataType + StringView BinaryDataType }{ Binary: &BinaryType{}, String: &StringType{}, LargeBinary: &LargeBinaryType{}, LargeString: &LargeStringType{}, + BinaryView: &BinaryViewType{}, + StringView: &StringViewType{}, } + + _ BinaryViewDataType = (*StringViewType)(nil) + _ BinaryViewDataType = (*BinaryViewType)(nil) ) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/datatype_encoded.go b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_encoded.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/datatype_encoded.go rename to vendor/github.com/apache/arrow-go/v18/arrow/datatype_encoded.go index c1750a88..749f03a5 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/datatype_encoded.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_encoded.go @@ -58,6 +58,8 @@ func (t *RunEndEncodedType) Fields() []Field { } } +func (t *RunEndEncodedType) NumFields() int { return 2 } + func (*RunEndEncodedType) ValidRunEndsType(dt DataType) bool { switch dt.ID() { case INT16, INT32, INT64: diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/datatype_extension.go b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_extension.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/datatype_extension.go rename to vendor/github.com/apache/arrow-go/v18/arrow/datatype_extension.go index 271c8b0d..f0bcccdf 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/datatype_extension.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_extension.go @@ -46,7 +46,7 @@ func getExtTypeRegistry() *sync.Map { } // RegisterExtensionType registers the provided ExtensionType by calling ExtensionName -// to use as a Key for registrying the type. If a type with the same name is already +// to use as a Key for registering the type. If a type with the same name is already // registered then this will return an error saying so, otherwise it will return nil // if successful registering the type. // This function is safe to call from multiple goroutines simultaneously. @@ -117,7 +117,7 @@ type ExtensionType interface { // concurrently. Serialize() string // Deserialize is called when reading in extension arrays and types via the IPC format - // in order to construct an instance of the appropriate extension type. The data passed in + // in order to construct an instance of the appropriate extension type. The passed in data // is pulled from the ARROW:extension:metadata key and may be nil or an empty slice. // If the storage type is incorrect or something else is invalid with the data this should // return nil and an appropriate error. @@ -161,6 +161,13 @@ func (e *ExtensionBase) Fields() []Field { return nil } +func (e *ExtensionBase) NumFields() int { + if nested, ok := e.Storage.(NestedType); ok { + return nested.NumFields() + } + return 0 +} + func (e *ExtensionBase) Layout() DataTypeLayout { return e.Storage.Layout() } // this no-op exists to ensure that this type must be embedded in any user-defined extension type. diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/datatype_fixedwidth.go b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_fixedwidth.go similarity index 85% rename from vendor/github.com/apache/arrow/go/v14/arrow/datatype_fixedwidth.go rename to vendor/github.com/apache/arrow-go/v18/arrow/datatype_fixedwidth.go index fc0b3aea..5928be3a 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/datatype_fixedwidth.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_fixedwidth.go @@ -19,10 +19,12 @@ package arrow import ( "fmt" "strconv" + "sync" "time" - "github.com/apache/arrow/go/v14/internal/json" - + "github.com/apache/arrow-go/v18/arrow/decimal" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/internal/json" "golang.org/x/xerrors" ) @@ -69,11 +71,6 @@ type ( // Date32FromTime returns a Date32 value from a time object func Date32FromTime(t time.Time) Date32 { - if _, offset := t.Zone(); offset != 0 { - // properly account for timezone adjustments before we calculate - // the number of days by adjusting the time and converting to UTC - t = t.Add(time.Duration(offset) * time.Second).UTC() - } return Date32(t.Truncate(24*time.Hour).Unix() / int64((time.Hour * 24).Seconds())) } @@ -87,11 +84,6 @@ func (d Date32) FormattedString() string { // Date64FromTime returns a Date64 value from a time object func Date64FromTime(t time.Time) Date64 { - if _, offset := t.Zone(); offset != 0 { - // properly account for timezone adjustments before we calculate - // the actual value by adjusting the time and converting to UTC - t = t.Add(time.Duration(offset) * time.Second).UTC() - } // truncate to the start of the day to get the correct value t = t.Truncate(24 * time.Hour) return Date64(t.Unix()*1e3 + int64(t.Nanosecond())/1e6) @@ -347,13 +339,17 @@ type TemporalWithUnit interface { } // TimestampType is encoded as a 64-bit signed integer since the UNIX epoch (2017-01-01T00:00:00Z). -// The zero-value is a second and time zone neutral. Time zone neutral can be -// considered UTC without having "UTC" as a time zone. +// The zero-value is a second and time zone neutral. In Arrow semantics, time zone neutral does not +// represent a physical point in time, but rather a "wall clock" time that only has meaning within +// the context that produced it. In Go, time.Time can only represent instants; there is no notion +// of "wall clock" time. Therefore, time zone neutral timestamps are represented as UTC per Go +// conventions even though the Arrow type itself has no time zone. type TimestampType struct { Unit TimeUnit TimeZone string loc *time.Location + mx sync.RWMutex } func (*TimestampType) ID() Type { return TIMESTAMP } @@ -386,6 +382,8 @@ func (t *TimestampType) TimeUnit() TimeUnit { return t.Unit } // This should be called if you change the value of the TimeZone after having // potentially called GetZone. func (t *TimestampType) ClearCachedLocation() { + t.mx.Lock() + defer t.mx.Unlock() t.loc = nil } @@ -398,10 +396,20 @@ func (t *TimestampType) ClearCachedLocation() { // so if you change the value of TimeZone after calling this, make sure to call // ClearCachedLocation. func (t *TimestampType) GetZone() (*time.Location, error) { + t.mx.RLock() if t.loc != nil { + defer t.mx.RUnlock() return t.loc, nil } + t.mx.RUnlock() + t.mx.Lock() + defer t.mx.Unlock() + // in case GetZone() was called in between releasing the read lock and + // getting the write lock + if t.loc != nil { + return t.loc, nil + } // the TimeZone string is allowed to be either a valid tzdata string // such as "America/New_York" or an absolute offset of the form -XX:XX // or +XX:XX @@ -415,7 +423,7 @@ func (t *TimestampType) GetZone() (*time.Location, error) { if loc, err := time.LoadLocation(t.TimeZone); err == nil { t.loc = loc - return t.loc, err + return loc, err } // at this point we know that the timezone isn't empty, and didn't match @@ -440,17 +448,7 @@ func (t *TimestampType) GetToTimeFunc() (func(Timestamp) time.Time, error) { return nil, err } - switch t.Unit { - case Second: - return func(v Timestamp) time.Time { return time.Unix(int64(v), 0).In(tz) }, nil - case Millisecond: - return func(v Timestamp) time.Time { return time.UnixMilli(int64(v)).In(tz) }, nil - case Microsecond: - return func(v Timestamp) time.Time { return time.UnixMicro(int64(v)).In(tz) }, nil - case Nanosecond: - return func(v Timestamp) time.Time { return time.Unix(0, int64(v)).In(tz) }, nil - } - return nil, fmt.Errorf("invalid timestamp unit: %s", t.Unit) + return func(v Timestamp) time.Time { return v.ToTime(t.Unit).In(tz) }, nil } // Time32Type is encoded as a 32-bit signed integer, representing either seconds or milliseconds since midnight. @@ -535,19 +533,103 @@ type DecimalType interface { DataType GetPrecision() int32 GetScale() int32 + BitWidth() int +} + +// NarrowestDecimalType constructs the smallest decimal type that can represent +// the requested precision. An error is returned if the requested precision +// cannot be represented (prec <= 0 || prec > 76). +// +// For reference: +// +// prec in [ 1, 9] => Decimal32Type +// prec in [10, 18] => Decimal64Type +// prec in [19, 38] => Decimal128Type +// prec in [39, 76] => Decimal256Type +func NarrowestDecimalType(prec, scale int32) (DecimalType, error) { + switch { + case prec <= 0: + return nil, fmt.Errorf("%w: precision must be > 0 for decimal types, got %d", + ErrInvalid, prec) + case prec <= int32(decimal.MaxPrecision[decimal.Decimal32]()): + return &Decimal32Type{Precision: prec, Scale: scale}, nil + case prec <= int32(decimal.MaxPrecision[decimal.Decimal64]()): + return &Decimal64Type{Precision: prec, Scale: scale}, nil + case prec <= int32(decimal.MaxPrecision[decimal.Decimal128]()): + return &Decimal128Type{Precision: prec, Scale: scale}, nil + case prec <= int32(decimal.MaxPrecision[decimal.Decimal256]()): + return &Decimal256Type{Precision: prec, Scale: scale}, nil + default: + return nil, fmt.Errorf("%w: invalid precision for decimal types, %d", + ErrInvalid, prec) + } } func NewDecimalType(id Type, prec, scale int32) (DecimalType, error) { switch id { + case DECIMAL32: + debug.Assert(prec <= int32(decimal.MaxPrecision[decimal.Decimal32]()), "invalid precision for decimal32") + return &Decimal32Type{Precision: prec, Scale: scale}, nil + case DECIMAL64: + debug.Assert(prec <= int32(decimal.MaxPrecision[decimal.Decimal64]()), "invalid precision for decimal64") + return &Decimal64Type{Precision: prec, Scale: scale}, nil case DECIMAL128: + debug.Assert(prec <= int32(decimal.MaxPrecision[decimal.Decimal128]()), "invalid precision for decimal128") return &Decimal128Type{Precision: prec, Scale: scale}, nil case DECIMAL256: + debug.Assert(prec <= int32(decimal.MaxPrecision[decimal.Decimal256]()), "invalid precision for decimal256") return &Decimal256Type{Precision: prec, Scale: scale}, nil default: - return nil, fmt.Errorf("%w: must use DECIMAL128 or DECIMAL256 to create a DecimalType", ErrInvalid) + return nil, fmt.Errorf("%w: must use one of the DECIMAL IDs to create a DecimalType", ErrInvalid) } } +// Decimal32Type represents a fixed-size 32-bit decimal type. +type Decimal32Type struct { + Precision int32 + Scale int32 +} + +func (*Decimal32Type) ID() Type { return DECIMAL32 } +func (*Decimal32Type) Name() string { return "decimal32" } +func (*Decimal32Type) BitWidth() int { return 32 } +func (*Decimal32Type) Bytes() int { return Decimal32SizeBytes } +func (t *Decimal32Type) String() string { + return fmt.Sprintf("%s(%d, %d)", t.Name(), t.Precision, t.Scale) +} +func (t *Decimal32Type) Fingerprint() string { + return fmt.Sprintf("%s[%d,%d,%d]", typeFingerprint(t), t.BitWidth(), t.Precision, t.Scale) +} +func (t *Decimal32Type) GetPrecision() int32 { return t.Precision } +func (t *Decimal32Type) GetScale() int32 { return t.Scale } + +func (Decimal32Type) Layout() DataTypeLayout { + return DataTypeLayout{Buffers: []BufferSpec{SpecBitmap(), SpecFixedWidth(Decimal32SizeBytes)}} +} + +// Decimal64Type represents a fixed-size 32-bit decimal type. +type Decimal64Type struct { + Precision int32 + Scale int32 +} + +func (*Decimal64Type) ID() Type { return DECIMAL64 } +func (*Decimal64Type) Name() string { return "decimal64" } +func (*Decimal64Type) BitWidth() int { return 64 } +func (*Decimal64Type) Bytes() int { return Decimal64SizeBytes } +func (t *Decimal64Type) String() string { + return fmt.Sprintf("%s(%d, %d)", t.Name(), t.Precision, t.Scale) +} +func (t *Decimal64Type) Fingerprint() string { + return fmt.Sprintf("%s[%d,%d,%d]", typeFingerprint(t), t.BitWidth(), t.Precision, t.Scale) +} +func (t *Decimal64Type) GetPrecision() int32 { return t.Precision } +func (t *Decimal64Type) GetScale() int32 { return t.Scale } + +func (Decimal64Type) Layout() DataTypeLayout { + return DataTypeLayout{Buffers: []BufferSpec{SpecBitmap(), SpecFixedWidth(Decimal64SizeBytes)}} +} + // Decimal128Type represents a fixed-size 128-bit decimal type. type Decimal128Type struct { Precision int32 diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/datatype_nested.go b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_nested.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/datatype_nested.go rename to vendor/github.com/apache/arrow-go/v18/arrow/datatype_nested.go index 4ae48803..32c3ed05 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/datatype_nested.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_nested.go @@ -22,7 +22,7 @@ import ( "strconv" "strings" - "github.com/apache/arrow/go/v14/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/internal/debug" ) type ( @@ -32,6 +32,8 @@ type ( // Fields method provides a copy of NestedType fields // (so it can be safely mutated and will not result in updating the NestedType). Fields() []Field + // NumFields provides the number of fields without allocating. + NumFields() int } ListLikeType interface { @@ -109,6 +111,8 @@ func (t *ListType) ElemField() Field { func (t *ListType) Fields() []Field { return []Field{t.ElemField()} } +func (t *ListType) NumFields() int { return 1 } + func (*ListType) Layout() DataTypeLayout { return DataTypeLayout{Buffers: []BufferSpec{SpecBitmap(), SpecFixedWidth(Int32SizeBytes)}} } @@ -242,6 +246,8 @@ func (t *FixedSizeListType) Fingerprint() string { func (t *FixedSizeListType) Fields() []Field { return []Field{t.ElemField()} } +func (t *FixedSizeListType) NumFields() int { return 1 } + func (*FixedSizeListType) Layout() DataTypeLayout { return DataTypeLayout{Buffers: []BufferSpec{SpecBitmap()}} } @@ -308,6 +314,8 @@ func (t *ListViewType) ElemField() Field { func (t *ListViewType) Fields() []Field { return []Field{t.ElemField()} } +func (t *ListViewType) NumFields() int { return 1 } + func (*ListViewType) Layout() DataTypeLayout { return DataTypeLayout{Buffers: []BufferSpec{SpecBitmap(), SpecFixedWidth(Int32SizeBytes), SpecFixedWidth(Int32SizeBytes)}} } @@ -376,6 +384,8 @@ func (t *LargeListViewType) ElemField() Field { func (t *LargeListViewType) Fields() []Field { return []Field{t.ElemField()} } +func (t *LargeListViewType) NumFields() int { return 1 } + func (*LargeListViewType) Layout() DataTypeLayout { return DataTypeLayout{Buffers: []BufferSpec{SpecBitmap(), SpecFixedWidth(Int64SizeBytes), SpecFixedWidth(Int64SizeBytes)}} } @@ -447,6 +457,8 @@ func (t *StructType) Fields() []Field { return fields } +func (t *StructType) NumFields() int { return len(t.fields) } + func (t *StructType) Field(i int) Field { return t.fields[i] } // FieldByName gets the field with the given name. @@ -464,7 +476,7 @@ func (t *StructType) FieldByName(name string) (Field, bool) { // FieldIdx gets the index of the field with the given name. // // If there are multiple fields with the given name, FieldIdx returns -// the index of the first first such field. +// the index of the first such field. func (t *StructType) FieldIdx(name string) (int, bool) { i, ok := t.index[name] if ok { @@ -598,6 +610,8 @@ func (t *MapType) Fingerprint() string { func (t *MapType) Fields() []Field { return []Field{t.ElemField()} } +func (t *MapType) NumFields() int { return 1 } + func (t *MapType) Layout() DataTypeLayout { return t.value.Layout() } @@ -690,6 +704,8 @@ func (t *unionType) Fields() []Field { return fields } +func (t *unionType) NumFields() int { return len(t.children) } + func (t *unionType) TypeCodes() []UnionTypeCode { return t.typeCodes } func (t *unionType) ChildIDs() []int { return t.childIDs[:] } @@ -861,7 +877,7 @@ func DenseUnionFromArrays(children []Array, fields []string, codes []UnionTypeCo } // DenseUnionOf is equivalent to UnionOf(arrow.DenseMode, fields, typeCodes), -// constructing a SparseUnionType from a list of fields and type codes. +// constructing a DenseUnionType from a list of fields and type codes. // // If len(fields) != len(typeCodes) this will panic. They are allowed to be // of length 0. diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/datatype_null.go b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_null.go similarity index 88% rename from vendor/github.com/apache/arrow/go/v14/arrow/datatype_null.go rename to vendor/github.com/apache/arrow-go/v18/arrow/datatype_null.go index 2d2454c6..c852b854 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/datatype_null.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_null.go @@ -27,7 +27,5 @@ func (*NullType) Layout() DataTypeLayout { return DataTypeLayout{Buffers: []BufferSpec{SpecAlwaysNull()}} } -var ( - Null *NullType - _ DataType = Null -) +// Null gives us both the compile-time assertion of DataType interface as well as serving a good element for use in schemas. +var Null DataType = new(NullType) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/datatype_numeric.gen.go b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_numeric.gen.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/datatype_numeric.gen.go rename to vendor/github.com/apache/arrow-go/v18/arrow/datatype_numeric.gen.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/datatype_numeric.gen.go.tmpl b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_numeric.gen.go.tmpl similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/datatype_numeric.gen.go.tmpl rename to vendor/github.com/apache/arrow-go/v18/arrow/datatype_numeric.gen.go.tmpl diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/datatype_numeric.gen.go.tmpldata b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_numeric.gen.go.tmpldata similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/datatype_numeric.gen.go.tmpldata rename to vendor/github.com/apache/arrow-go/v18/arrow/datatype_numeric.gen.go.tmpldata diff --git a/vendor/github.com/apache/arrow-go/v18/arrow/datatype_viewheader.go b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_viewheader.go new file mode 100644 index 00000000..691b97df --- /dev/null +++ b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_viewheader.go @@ -0,0 +1,141 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package arrow + +import ( + "bytes" + "unsafe" + + "github.com/apache/arrow-go/v18/arrow/endian" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" +) + +const ( + ViewPrefixLen = 4 + viewInlineSize = 12 +) + +func IsViewInline(length int) bool { + return length < viewInlineSize +} + +// ViewHeader is a variable length string (utf8) or byte slice with +// a 4 byte prefix and inline optimization for small values (12 bytes +// or fewer). This is similar to Go's standard string but limited by +// a length of Uint32Max and up to the first four bytes of the string +// are copied into the struct. This prefix allows failing comparisons +// early and can reduce CPU cache working set when dealing with short +// strings. +// +// There are two situations: +// +// Entirely inlined string data +// |----|------------| +// ^ ^ +// | | +// size inline string data, zero padded +// +// Reference into buffer +// |----|----|----|----| +// ^ ^ ^ ^ +// | | | | +// size prefix buffer index and offset to out-of-line portion +// +// Adapted from TU Munich's UmbraDB [1], Velox, DuckDB. +// +// [1]: https://db.in.tum.de/~freitag/papers/p29-neumann-cidr20.pdf +type ViewHeader struct { + size int32 + // the first 4 bytes of this are the prefix for the string + // if size <= StringHeaderInlineSize, then the entire string + // is in the data array and is zero padded. + // if size > StringHeaderInlineSize, the next 8 bytes are 2 uint32 + // values which are the buffer index and offset in that buffer + // containing the full string. + data [viewInlineSize]byte +} + +func (sh *ViewHeader) IsInline() bool { + return sh.size <= int32(viewInlineSize) +} + +func (sh *ViewHeader) Len() int { return int(sh.size) } +func (sh *ViewHeader) Prefix() [ViewPrefixLen]byte { + return *(*[4]byte)(unsafe.Pointer(&sh.data)) +} + +func (sh *ViewHeader) BufferIndex() int32 { + return int32(endian.Native.Uint32(sh.data[ViewPrefixLen:])) +} + +func (sh *ViewHeader) BufferOffset() int32 { + return int32(endian.Native.Uint32(sh.data[ViewPrefixLen+4:])) +} + +func (sh *ViewHeader) InlineBytes() (data []byte) { + debug.Assert(sh.IsInline(), "calling InlineBytes on non-inline ViewHeader") + return sh.data[:sh.size] +} + +func (sh *ViewHeader) SetBytes(data []byte) int { + sh.size = int32(len(data)) + if sh.IsInline() { + return copy(sh.data[:], data) + } + return copy(sh.data[:4], data) +} + +func (sh *ViewHeader) SetString(data string) int { + sh.size = int32(len(data)) + if sh.IsInline() { + return copy(sh.data[:], data) + } + return copy(sh.data[:4], data) +} + +func (sh *ViewHeader) SetIndexOffset(bufferIndex, offset int32) { + endian.Native.PutUint32(sh.data[ViewPrefixLen:], uint32(bufferIndex)) + endian.Native.PutUint32(sh.data[ViewPrefixLen+4:], uint32(offset)) +} + +func (sh *ViewHeader) Equals(buffers []*memory.Buffer, other *ViewHeader, otherBuffers []*memory.Buffer) bool { + if sh.sizeAndPrefixAsInt64() != other.sizeAndPrefixAsInt64() { + return false + } + + if sh.IsInline() { + return sh.inlinedAsInt64() == other.inlinedAsInt64() + } + + return bytes.Equal(sh.getBufferBytes(buffers), other.getBufferBytes(otherBuffers)) +} + +func (sh *ViewHeader) getBufferBytes(buffers []*memory.Buffer) []byte { + offset := sh.BufferOffset() + return buffers[sh.BufferIndex()].Bytes()[offset : offset+sh.size] +} + +func (sh *ViewHeader) inlinedAsInt64() int64 { + s := unsafe.Slice((*int64)(unsafe.Pointer(sh)), 2) + return s[1] +} + +func (sh *ViewHeader) sizeAndPrefixAsInt64() int64 { + s := unsafe.Slice((*int64)(unsafe.Pointer(sh)), 2) + return s[0] +} diff --git a/vendor/github.com/apache/arrow-go/v18/arrow/datatype_viewheader_inline.go b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_viewheader_inline.go new file mode 100644 index 00000000..960cc060 --- /dev/null +++ b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_viewheader_inline.go @@ -0,0 +1,31 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build go1.20 + +package arrow + +import ( + "unsafe" + + "github.com/apache/arrow-go/v18/arrow/internal/debug" +) + +func (sh *ViewHeader) InlineString() (data string) { + debug.Assert(sh.IsInline(), "calling InlineString on non-inline ViewHeader") + + return unsafe.String((*byte)(unsafe.Pointer(&sh.data)), sh.size) +} diff --git a/vendor/github.com/apache/arrow-go/v18/arrow/datatype_viewheader_inline_go1.19.go b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_viewheader_inline_go1.19.go new file mode 100644 index 00000000..e1219030 --- /dev/null +++ b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_viewheader_inline_go1.19.go @@ -0,0 +1,35 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build !go1.20 && !tinygo + +package arrow + +import ( + "reflect" + "unsafe" + + "github.com/apache/arrow-go/v18/arrow/internal/debug" +) + +func (sh *ViewHeader) InlineString() (data string) { + debug.Assert(sh.IsInline(), "calling InlineString on non-inline ViewHeader") + + h := (*reflect.StringHeader)(unsafe.Pointer(&data)) + h.Data = uintptr(unsafe.Pointer(&sh.data)) + h.Len = int(sh.size) + return +} diff --git a/vendor/github.com/apache/arrow-go/v18/arrow/datatype_viewheader_inline_tinygo.go b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_viewheader_inline_tinygo.go new file mode 100644 index 00000000..b4cedbda --- /dev/null +++ b/vendor/github.com/apache/arrow-go/v18/arrow/datatype_viewheader_inline_tinygo.go @@ -0,0 +1,35 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build !go1.20 && tinygo + +package arrow + +import ( + "reflect" + "unsafe" + + "github.com/apache/arrow-go/v18/arrow/internal/debug" +) + +func (sh *ViewHeader) InlineString() (data string) { + debug.Assert(sh.IsInline(), "calling InlineString on non-inline ViewHeader") + + h := (*reflect.StringHeader)(unsafe.Pointer(&data)) + h.Data = uintptr(unsafe.Pointer(&sh.data)) + h.Len = uintptr(sh.size) + return +} diff --git a/vendor/github.com/apache/arrow-go/v18/arrow/decimal/decimal.go b/vendor/github.com/apache/arrow-go/v18/arrow/decimal/decimal.go new file mode 100644 index 00000000..098a4e0f --- /dev/null +++ b/vendor/github.com/apache/arrow-go/v18/arrow/decimal/decimal.go @@ -0,0 +1,473 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package decimal + +import ( + "errors" + "fmt" + "math" + "math/big" + "math/bits" + "unsafe" + + "github.com/apache/arrow-go/v18/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/decimal256" + "github.com/apache/arrow-go/v18/arrow/internal/debug" +) + +// DecimalTypes is a generic constraint representing the implemented decimal types +// in this package, and a single point of update for future additions. Everything +// else is constrained by this. +type DecimalTypes interface { + Decimal32 | Decimal64 | Decimal128 | Decimal256 +} + +// Num is an interface that is useful for building generic types for all decimal +// type implementations. It presents all the methods and interfaces necessary to +// operate on the decimal objects without having to care about the bit width. +type Num[T DecimalTypes] interface { + Negate() T + Add(T) T + Sub(T) T + Mul(T) T + Div(T) (res, rem T) + Pow(T) T + + FitsInPrecision(int32) bool + Abs() T + Sign() int + Rescale(int32, int32) (T, error) + Cmp(T) int + + IncreaseScaleBy(int32) T + ReduceScaleBy(int32, bool) T + + ToFloat32(int32) float32 + ToFloat64(int32) float64 + ToBigFloat(int32) *big.Float + + ToString(int32) string +} + +type ( + Decimal32 int32 + Decimal64 int64 + Decimal128 = decimal128.Num + Decimal256 = decimal256.Num +) + +func MaxPrecision[T DecimalTypes]() int { + // max precision is computed by Floor(log10(2^(nbytes * 8 - 1) - 1)) + var z T + return int(math.Floor(math.Log10(math.Pow(2, float64(unsafe.Sizeof(z))*8-1) - 1))) +} + +func (d Decimal32) Negate() Decimal32 { return -d } +func (d Decimal64) Negate() Decimal64 { return -d } + +func (d Decimal32) Add(rhs Decimal32) Decimal32 { return d + rhs } +func (d Decimal64) Add(rhs Decimal64) Decimal64 { return d + rhs } + +func (d Decimal32) Sub(rhs Decimal32) Decimal32 { return d - rhs } +func (d Decimal64) Sub(rhs Decimal64) Decimal64 { return d - rhs } + +func (d Decimal32) Mul(rhs Decimal32) Decimal32 { return d * rhs } +func (d Decimal64) Mul(rhs Decimal64) Decimal64 { return d * rhs } + +func (d Decimal32) Div(rhs Decimal32) (res, rem Decimal32) { + return d / rhs, d % rhs +} + +func (d Decimal64) Div(rhs Decimal64) (res, rem Decimal64) { + return d / rhs, d % rhs +} + +// about 4-5x faster than using math.Pow which requires converting to float64 +// and back to integers +func intPow[T int32 | int64](base, exp T) T { + result := T(1) + for { + if exp&1 == 1 { + result *= base + } + exp >>= 1 + if exp == 0 { + break + } + base *= base + } + + return result +} + +func (d Decimal32) Pow(rhs Decimal32) Decimal32 { + return Decimal32(intPow(int32(d), int32(rhs))) +} + +func (d Decimal64) Pow(rhs Decimal64) Decimal64 { + return Decimal64(intPow(int64(d), int64(rhs))) +} + +func (d Decimal32) Sign() int { + if d == 0 { + return 0 + } + return int(1 | (d >> 31)) +} + +func (d Decimal64) Sign() int { + if d == 0 { + return 0 + } + return int(1 | (d >> 63)) +} + +func (n Decimal32) Abs() Decimal32 { + if n < 0 { + return -n + } + return n +} + +func (n Decimal64) Abs() Decimal64 { + if n < 0 { + return -n + } + return n +} + +func (n Decimal32) FitsInPrecision(prec int32) bool { + debug.Assert(prec > 0, "precision must be > 0") + debug.Assert(prec <= 9, "precision must be <= 9") + return n.Abs() < Decimal32(math.Pow10(int(prec))) +} + +func (n Decimal64) FitsInPrecision(prec int32) bool { + debug.Assert(prec > 0, "precision must be > 0") + debug.Assert(prec <= 18, "precision must be <= 18") + return n.Abs() < Decimal64(math.Pow10(int(prec))) +} + +func (n Decimal32) ToString(scale int32) string { + return n.ToBigFloat(scale).Text('f', int(scale)) +} + +func (n Decimal64) ToString(scale int32) string { + return n.ToBigFloat(scale).Text('f', int(scale)) +} + +var pt5 = big.NewFloat(0.5) + +func decimalFromString[T interface { + Decimal32 | Decimal64 + FitsInPrecision(int32) bool +}](v string, prec, scale int32) (n T, err error) { + var nbits = uint(unsafe.Sizeof(T(0))) * 8 + + var out *big.Float + out, _, err = big.ParseFloat(v, 10, nbits, big.ToNearestEven) + + if scale < 0 { + var tmp big.Int + val, _ := out.Int(&tmp) + if val.BitLen() > int(nbits) { + return n, fmt.Errorf("bitlen too large for decimal%d", nbits) + } + + n = T(val.Int64() / int64(math.Pow10(int(-scale)))) + } else { + var precInBits = uint(math.Round(float64(prec+scale+1)/math.Log10(2))) + 1 + + p := (&big.Float{}).SetInt(big.NewInt(int64(math.Pow10(int(scale))))) + out.SetPrec(precInBits).Mul(out, p) + if out.Signbit() { + out.Sub(out, pt5) + } else { + out.Add(out, pt5) + } + + var tmp big.Int + val, _ := out.Int(&tmp) + if val.BitLen() > int(nbits) { + return n, fmt.Errorf("bitlen too large for decimal%d", nbits) + } + n = T(val.Int64()) + } + + if !n.FitsInPrecision(prec) { + err = fmt.Errorf("val %v doesn't fit in precision %d", n, prec) + } + return +} + +func Decimal32FromString(v string, prec, scale int32) (n Decimal32, err error) { + return decimalFromString[Decimal32](v, prec, scale) +} + +func Decimal64FromString(v string, prec, scale int32) (n Decimal64, err error) { + return decimalFromString[Decimal64](v, prec, scale) +} + +func Decimal128FromString(v string, prec, scale int32) (n Decimal128, err error) { + return decimal128.FromString(v, prec, scale) +} + +func Decimal256FromString(v string, prec, scale int32) (n Decimal256, err error) { + return decimal256.FromString(v, prec, scale) +} + +func scalePositiveFloat64(v float64, prec, scale int32) (float64, error) { + v *= math.Pow10(int(scale)) + v = math.RoundToEven(v) + + maxabs := math.Pow10(int(prec)) + if v >= maxabs { + return 0, fmt.Errorf("cannot convert %f to decimal(precision=%d, scale=%d)", v, prec, scale) + } + return v, nil +} + +func fromPositiveFloat[T Decimal32 | Decimal64, F float32 | float64](v F, prec, scale int32) (T, error) { + if prec > int32(MaxPrecision[T]()) { + return T(0), fmt.Errorf("invalid precision %d for converting float to Decimal", prec) + } + + val, err := scalePositiveFloat64(float64(v), prec, scale) + if err != nil { + return T(0), err + } + + return T(F(val)), nil +} + +func Decimal32FromFloat[F float32 | float64](v F, prec, scale int32) (Decimal32, error) { + if v < 0 { + dec, err := fromPositiveFloat[Decimal32](-v, prec, scale) + if err != nil { + return dec, err + } + + return -dec, nil + } + + return fromPositiveFloat[Decimal32](v, prec, scale) +} + +func Decimal64FromFloat[F float32 | float64](v F, prec, scale int32) (Decimal64, error) { + if v < 0 { + dec, err := fromPositiveFloat[Decimal64](-v, prec, scale) + if err != nil { + return dec, err + } + + return -dec, nil + } + + return fromPositiveFloat[Decimal64](v, prec, scale) +} + +func Decimal128FromFloat(v float64, prec, scale int32) (Decimal128, error) { + return decimal128.FromFloat64(v, prec, scale) +} + +func Decimal256FromFloat(v float64, prec, scale int32) (Decimal256, error) { + return decimal256.FromFloat64(v, prec, scale) +} + +func (n Decimal32) ToFloat32(scale int32) float32 { + return float32(n.ToFloat64(scale)) +} + +func (n Decimal64) ToFloat32(scale int32) float32 { + return float32(n.ToFloat64(scale)) +} + +func (n Decimal32) ToFloat64(scale int32) float64 { + return float64(n) * math.Pow10(-int(scale)) +} + +func (n Decimal64) ToFloat64(scale int32) float64 { + return float64(n) * math.Pow10(-int(scale)) +} + +func (n Decimal32) ToBigFloat(scale int32) *big.Float { + f := (&big.Float{}).SetInt64(int64(n)) + if scale < 0 { + f.SetPrec(32).Mul(f, (&big.Float{}).SetInt64(intPow(10, -int64(scale)))) + } else { + f.SetPrec(32).Quo(f, (&big.Float{}).SetInt64(intPow(10, int64(scale)))) + } + return f +} + +func (n Decimal64) ToBigFloat(scale int32) *big.Float { + f := (&big.Float{}).SetInt64(int64(n)) + if scale < 0 { + f.SetPrec(64).Mul(f, (&big.Float{}).SetInt64(intPow(10, -int64(scale)))) + } else { + f.SetPrec(64).Quo(f, (&big.Float{}).SetInt64(intPow(10, int64(scale)))) + } + return f +} + +func cmpDec[T Decimal32 | Decimal64](lhs, rhs T) int { + switch { + case lhs > rhs: + return 1 + case lhs < rhs: + return -1 + } + return 0 +} + +func (n Decimal32) Cmp(other Decimal32) int { + return cmpDec(n, other) +} + +func (n Decimal64) Cmp(other Decimal64) int { + return cmpDec(n, other) +} + +func (n Decimal32) IncreaseScaleBy(increase int32) Decimal32 { + debug.Assert(increase >= 0, "invalid increase scale for decimal32") + debug.Assert(increase <= 9, "invalid increase scale for decimal32") + + return n * Decimal32(intPow(10, increase)) +} + +func (n Decimal64) IncreaseScaleBy(increase int32) Decimal64 { + debug.Assert(increase >= 0, "invalid increase scale for decimal64") + debug.Assert(increase <= 18, "invalid increase scale for decimal64") + + return n * Decimal64(intPow(10, int64(increase))) +} + +func reduceScale[T interface { + Decimal32 | Decimal64 + Abs() T +}](n T, reduce int32, round bool) T { + if reduce == 0 { + return n + } + + divisor := T(intPow(10, reduce)) + if !round { + return n / divisor + } + + quo, remainder := n/divisor, n%divisor + divisorHalf := divisor / 2 + if remainder.Abs() >= divisorHalf { + if n > 0 { + quo++ + } else { + quo-- + } + } + + return quo +} + +func (n Decimal32) ReduceScaleBy(reduce int32, round bool) Decimal32 { + debug.Assert(reduce >= 0, "invalid reduce scale for decimal32") + debug.Assert(reduce <= 9, "invalid reduce scale for decimal32") + + return reduceScale(n, reduce, round) +} + +func (n Decimal64) ReduceScaleBy(reduce int32, round bool) Decimal64 { + debug.Assert(reduce >= 0, "invalid reduce scale for decimal32") + debug.Assert(reduce <= 18, "invalid reduce scale for decimal32") + + return reduceScale(n, reduce, round) +} + +//lint:ignore U1000 function is being used, staticcheck seems to not follow generics +func (n Decimal32) rescaleWouldCauseDataLoss(deltaScale int32, multiplier Decimal32) (out Decimal32, loss bool) { + if deltaScale < 0 { + debug.Assert(multiplier != 0, "multiplier must not be zero") + quo, remainder := bits.Div32(0, uint32(n), uint32(multiplier)) + return Decimal32(quo), remainder != 0 + } + + overflow, result := bits.Mul32(uint32(n), uint32(multiplier)) + if overflow != 0 { + return Decimal32(result), true + } + + out = Decimal32(result) + return out, out < n +} + +//lint:ignore U1000 function is being used, staticcheck seems to not follow generics +func (n Decimal64) rescaleWouldCauseDataLoss(deltaScale int32, multiplier Decimal64) (out Decimal64, loss bool) { + if deltaScale < 0 { + debug.Assert(multiplier != 0, "multiplier must not be zero") + quo, remainder := bits.Div32(0, uint32(n), uint32(multiplier)) + return Decimal64(quo), remainder != 0 + } + + overflow, result := bits.Mul32(uint32(n), uint32(multiplier)) + if overflow != 0 { + return Decimal64(result), true + } + + out = Decimal64(result) + return out, out < n +} + +func rescale[T interface { + Decimal32 | Decimal64 + rescaleWouldCauseDataLoss(int32, T) (T, bool) + Sign() int +}](n T, originalScale, newScale int32) (out T, err error) { + if originalScale == newScale { + return n, nil + } + + deltaScale := newScale - originalScale + absDeltaScale := int32(math.Abs(float64(deltaScale))) + + sign := n.Sign() + if n < 0 { + n = -n + } + + multiplier := T(intPow(10, absDeltaScale)) + var wouldHaveLoss bool + out, wouldHaveLoss = n.rescaleWouldCauseDataLoss(deltaScale, multiplier) + if wouldHaveLoss { + err = errors.New("rescale data loss") + } + out *= T(sign) + return +} + +func (n Decimal32) Rescale(originalScale, newScale int32) (out Decimal32, err error) { + return rescale(n, originalScale, newScale) +} + +func (n Decimal64) Rescale(originalScale, newScale int32) (out Decimal64, err error) { + return rescale(n, originalScale, newScale) +} + +var ( + _ Num[Decimal32] = Decimal32(0) + _ Num[Decimal64] = Decimal64(0) + _ Num[Decimal128] = Decimal128{} + _ Num[Decimal256] = Decimal256{} +) diff --git a/vendor/github.com/apache/arrow-go/v18/arrow/decimal/traits.go b/vendor/github.com/apache/arrow-go/v18/arrow/decimal/traits.go new file mode 100644 index 00000000..0ec0c315 --- /dev/null +++ b/vendor/github.com/apache/arrow-go/v18/arrow/decimal/traits.go @@ -0,0 +1,78 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package decimal + +// Traits is a convenience for building generic objects for operating on +// Decimal values to get around the limitations of Go generics. By providing this +// interface a generic object can handle producing the proper types to generate +// new decimal values. +type Traits[T DecimalTypes] interface { + BytesRequired(int) int + FromString(string, int32, int32) (T, error) + FromFloat64(float64, int32, int32) (T, error) +} + +var ( + Dec32Traits dec32Traits + Dec64Traits dec64Traits + Dec128Traits dec128Traits + Dec256Traits dec256Traits +) + +type ( + dec32Traits struct{} + dec64Traits struct{} + dec128Traits struct{} + dec256Traits struct{} +) + +func (dec32Traits) BytesRequired(n int) int { return 4 * n } +func (dec64Traits) BytesRequired(n int) int { return 8 * n } +func (dec128Traits) BytesRequired(n int) int { return 16 * n } +func (dec256Traits) BytesRequired(n int) int { return 32 * n } + +func (dec32Traits) FromString(v string, prec, scale int32) (Decimal32, error) { + return Decimal32FromString(v, prec, scale) +} + +func (dec64Traits) FromString(v string, prec, scale int32) (Decimal64, error) { + return Decimal64FromString(v, prec, scale) +} + +func (dec128Traits) FromString(v string, prec, scale int32) (Decimal128, error) { + return Decimal128FromString(v, prec, scale) +} + +func (dec256Traits) FromString(v string, prec, scale int32) (Decimal256, error) { + return Decimal256FromString(v, prec, scale) +} + +func (dec32Traits) FromFloat64(v float64, prec, scale int32) (Decimal32, error) { + return Decimal32FromFloat(v, prec, scale) +} + +func (dec64Traits) FromFloat64(v float64, prec, scale int32) (Decimal64, error) { + return Decimal64FromFloat(v, prec, scale) +} + +func (dec128Traits) FromFloat64(v float64, prec, scale int32) (Decimal128, error) { + return Decimal128FromFloat(v, prec, scale) +} + +func (dec256Traits) FromFloat64(v float64, prec, scale int32) (Decimal256, error) { + return Decimal256FromFloat(v, prec, scale) +} diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/decimal128/decimal128.go b/vendor/github.com/apache/arrow-go/v18/arrow/decimal128/decimal128.go similarity index 91% rename from vendor/github.com/apache/arrow/go/v14/arrow/decimal128/decimal128.go rename to vendor/github.com/apache/arrow-go/v18/arrow/decimal128/decimal128.go index 898d7b42..660c4131 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/decimal128/decimal128.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/decimal128/decimal128.go @@ -23,7 +23,7 @@ import ( "math/big" "math/bits" - "github.com/apache/arrow/go/v14/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/internal/debug" ) const ( @@ -237,7 +237,7 @@ func FromString(v string, prec, scale int32) (n Num, err error) { // math/big library refers to precision in floating point terms // where it refers to the "number of bits of precision in the mantissa". // So we need to figure out how many bits we should use for precision, - // based on the input precision. Too much precision and we're not rounding + // based on the input precision. Too much precision and we aren't rounding // when we should. Too little precision and we round when we shouldn't. // // In general, the number of decimal digits you get from a given number @@ -261,28 +261,40 @@ func FromString(v string, prec, scale int32) (n Num, err error) { var precInBits = uint(math.Round(float64(prec+scale+1)/math.Log10(2))) + 1 var out *big.Float - out, _, err = big.ParseFloat(v, 10, 127, big.ToNearestEven) + out, _, err = big.ParseFloat(v, 10, 128, big.ToNearestEven) if err != nil { return } - // Since we're going to truncate this to get an integer, we need to round - // the value instead because of edge cases so that we match how other implementations - // (e.g. C++) handles Decimal values. So if we're negative we'll subtract 0.5 and if - // we're positive we'll add 0.5. - out.Mul(out, big.NewFloat(math.Pow10(int(scale)))).SetPrec(precInBits) - if out.Signbit() { - out.Sub(out, pt5) + if scale < 0 { + var tmp big.Int + val, _ := out.Int(&tmp) + if val.BitLen() > 127 { + return Num{}, errors.New("bitlen too large for decimal128") + } + n = FromBigInt(val) + n, _ = n.Div(scaleMultipliers[-scale]) } else { - out.Add(out, pt5) - } + // Since we're going to truncate this to get an integer, we need to round + // the value instead because of edge cases so that we match how other implementations + // (e.g. C++) handles Decimal values. So if we're negative we'll subtract 0.5 and if + // we're positive we'll add 0.5. + p := (&big.Float{}).SetInt(scaleMultipliers[scale].BigInt()) + out.SetPrec(precInBits).Mul(out, p) + if out.Signbit() { + out.Sub(out, pt5) + } else { + out.Add(out, pt5) + } - var tmp big.Int - val, _ := out.Int(&tmp) - if val.BitLen() > 127 { - return Num{}, errors.New("bitlen too large for decimal128") + var tmp big.Int + val, _ := out.Int(&tmp) + if val.BitLen() > 127 { + return Num{}, errors.New("bitlen too large for decimal128") + } + n = FromBigInt(val) } - n = FromBigInt(val) + if !n.FitsInPrecision(prec) { err = fmt.Errorf("val %v doesn't fit in precision %d", n, prec) } @@ -315,6 +327,16 @@ func (n Num) ToFloat64(scale int32) float64 { return n.tofloat64Positive(scale) } +func (n Num) ToBigFloat(scale int32) *big.Float { + f := (&big.Float{}).SetInt(n.BigInt()) + if scale < 0 { + f.SetPrec(128).Mul(f, (&big.Float{}).SetInt(scaleMultipliers[-scale].BigInt())) + } else { + f.SetPrec(128).Quo(f, (&big.Float{}).SetInt(scaleMultipliers[scale].BigInt())) + } + return f +} + // LowBits returns the low bits of the two's complement representation of the number. func (n Num) LowBits() uint64 { return n.lo } @@ -505,7 +527,11 @@ func (n Num) FitsInPrecision(prec int32) bool { func (n Num) ToString(scale int32) string { f := (&big.Float{}).SetInt(n.BigInt()) - f.Quo(f, (&big.Float{}).SetInt(scaleMultipliers[scale].BigInt())) + if scale < 0 { + f.SetPrec(128).Mul(f, (&big.Float{}).SetInt(scaleMultipliers[-scale].BigInt())) + } else { + f.SetPrec(128).Quo(f, (&big.Float{}).SetInt(scaleMultipliers[scale].BigInt())) + } return f.Text('f', int(scale)) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/decimal256/decimal256.go b/vendor/github.com/apache/arrow-go/v18/arrow/decimal256/decimal256.go similarity index 93% rename from vendor/github.com/apache/arrow/go/v14/arrow/decimal256/decimal256.go rename to vendor/github.com/apache/arrow-go/v18/arrow/decimal256/decimal256.go index 4bfcd4e0..82c52a65 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/decimal256/decimal256.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/decimal256/decimal256.go @@ -23,8 +23,8 @@ import ( "math/big" "math/bits" - "github.com/apache/arrow/go/v14/arrow/decimal128" - "github.com/apache/arrow/go/v14/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/internal/debug" ) const ( @@ -125,7 +125,7 @@ func FromString(v string, prec, scale int32) (n Num, err error) { // math/big library refers to precision in floating point terms // where it refers to the "number of bits of precision in the mantissa". // So we need to figure out how many bits we should use for precision, - // based on the input precision. Too much precision and we're not rounding + // based on the input precision. Too much precision and we aren't rounding // when we should. Too little precision and we round when we shouldn't. // // In general, the number of decimal digits you get from a given number @@ -154,23 +154,34 @@ func FromString(v string, prec, scale int32) (n Num, err error) { return } - out.Mul(out, big.NewFloat(math.Pow10(int(scale)))).SetPrec(precInBits) - // Since we're going to truncate this to get an integer, we need to round - // the value instead because of edge cases so that we match how other implementations - // (e.g. C++) handles Decimal values. So if we're negative we'll subtract 0.5 and if - // we're positive we'll add 0.5. - if out.Signbit() { - out.Sub(out, pt5) + if scale < 0 { + var tmp big.Int + val, _ := out.Int(&tmp) + if val.BitLen() > 255 { + return Num{}, errors.New("bitlen too large for decimal256") + } + n = FromBigInt(val) + + n, _ = n.Div(scaleMultipliers[-scale]) } else { - out.Add(out, pt5) - } + out.Mul(out, (&big.Float{}).SetInt(scaleMultipliers[scale].BigInt())).SetPrec(precInBits) + // Since we're going to truncate this to get an integer, we need to round + // the value instead because of edge cases so that we match how other implementations + // (e.g. C++) handles Decimal values. So if we're negative we'll subtract 0.5 and if + // we're positive we'll add 0.5. + if out.Signbit() { + out.Sub(out, pt5) + } else { + out.Add(out, pt5) + } - var tmp big.Int - val, _ := out.Int(&tmp) - if val.BitLen() > 255 { - return Num{}, errors.New("bitlen too large for decimal256") + var tmp big.Int + val, _ := out.Int(&tmp) + if val.BitLen() > 255 { + return Num{}, errors.New("bitlen too large for decimal256") + } + n = FromBigInt(val) } - n = FromBigInt(val) if !n.FitsInPrecision(prec) { err = fmt.Errorf("value %v doesn't fit in precision %d", n, prec) } @@ -328,6 +339,16 @@ func (n Num) ToFloat64(scale int32) float64 { return n.tofloat64Positive(scale) } +func (n Num) ToBigFloat(scale int32) *big.Float { + f := (&big.Float{}).SetInt(n.BigInt()) + if scale < 0 { + f.SetPrec(256).Mul(f, (&big.Float{}).SetInt(scaleMultipliers[-scale].BigInt())) + } else { + f.SetPrec(256).Quo(f, (&big.Float{}).SetInt(scaleMultipliers[scale].BigInt())) + } + return f +} + func (n Num) Sign() int { if n == (Num{}) { return 0 @@ -506,7 +527,11 @@ func (n Num) FitsInPrecision(prec int32) bool { func (n Num) ToString(scale int32) string { f := (&big.Float{}).SetInt(n.BigInt()) - f.Quo(f, (&big.Float{}).SetInt(scaleMultipliers[scale].BigInt())) + if scale < 0 { + f.SetPrec(256).Mul(f, (&big.Float{}).SetInt(scaleMultipliers[-scale].BigInt())) + } else { + f.SetPrec(256).Quo(f, (&big.Float{}).SetInt(scaleMultipliers[scale].BigInt())) + } return f.Text('f', int(scale)) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/doc.go b/vendor/github.com/apache/arrow-go/v18/arrow/doc.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/doc.go rename to vendor/github.com/apache/arrow-go/v18/arrow/doc.go index e923d05d..44eda7ec 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/doc.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/doc.go @@ -30,13 +30,11 @@ array is valid (not null). If the array has no null entries, it is possible to o # Requirements -Despite the go.mod stating go1.20, everything is able to be built with go1.19 or higher. - To build with tinygo include the noasm build tag. */ package arrow -const PkgVersion = "14.0.2" +const PkgVersion = "18.0.0" //go:generate go run _tools/tmpl/main.go -i -data=numeric.tmpldata type_traits_numeric.gen.go.tmpl type_traits_numeric.gen_test.go.tmpl array/numeric.gen.go.tmpl array/numericbuilder.gen.go.tmpl array/bufferbuilder_numeric.gen.go.tmpl //go:generate go run _tools/tmpl/main.go -i -data=datatype_numeric.gen.go.tmpldata datatype_numeric.gen.go.tmpl tensor/numeric.gen.go.tmpl tensor/numeric.gen_test.go.tmpl diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/encoded/ree_utils.go b/vendor/github.com/apache/arrow-go/v18/arrow/encoded/ree_utils.go similarity index 99% rename from vendor/github.com/apache/arrow/go/v14/arrow/encoded/ree_utils.go rename to vendor/github.com/apache/arrow-go/v18/arrow/encoded/ree_utils.go index 1f71e7b5..fd0c166b 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/encoded/ree_utils.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/encoded/ree_utils.go @@ -20,7 +20,7 @@ import ( "math" "sort" - "github.com/apache/arrow/go/v14/arrow" + "github.com/apache/arrow-go/v18/arrow" ) // FindPhysicalIndex performs a binary search on the run-ends to return diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/endian/big.go b/vendor/github.com/apache/arrow-go/v18/arrow/endian/big.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/endian/big.go rename to vendor/github.com/apache/arrow-go/v18/arrow/endian/big.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/endian/endian.go b/vendor/github.com/apache/arrow-go/v18/arrow/endian/endian.go similarity index 91% rename from vendor/github.com/apache/arrow/go/v14/arrow/endian/endian.go rename to vendor/github.com/apache/arrow-go/v18/arrow/endian/endian.go index 3ecda7b3..f369945d 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/endian/endian.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/endian/endian.go @@ -17,8 +17,8 @@ package endian import ( - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/internal/flatbuf" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/internal/flatbuf" ) type Endianness flatbuf.Endianness diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/endian/little.go b/vendor/github.com/apache/arrow-go/v18/arrow/endian/little.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/endian/little.go rename to vendor/github.com/apache/arrow-go/v18/arrow/endian/little.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/errors.go b/vendor/github.com/apache/arrow-go/v18/arrow/errors.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/errors.go rename to vendor/github.com/apache/arrow-go/v18/arrow/errors.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/float16/float16.go b/vendor/github.com/apache/arrow-go/v18/arrow/float16/float16.go similarity index 79% rename from vendor/github.com/apache/arrow/go/v14/arrow/float16/float16.go rename to vendor/github.com/apache/arrow-go/v18/arrow/float16/float16.go index 4e03d13d..f61db40e 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/float16/float16.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/float16/float16.go @@ -17,6 +17,7 @@ package float16 import ( + "encoding/binary" "math" "strconv" ) @@ -29,6 +30,11 @@ type Num struct { bits uint16 } +var ( + MaxNum = Num{bits: 0b0111101111111111} + MinNum = MaxNum.Negate() +) + // New creates a new half-precision floating point value from the provided // float32 value. func New(f float32) Num { @@ -86,6 +92,11 @@ func (n Num) Div(rhs Num) Num { return New(n.Float32() / rhs.Float32()) } +// Equal returns true if the value represented by n is == other +func (n Num) Equal(other Num) bool { + return n.Float32() == other.Float32() +} + // Greater returns true if the value represented by n is > other func (n Num) Greater(other Num) bool { return n.Float32() > other.Float32() @@ -152,14 +163,41 @@ func (n Num) Abs() Num { } func (n Num) Sign() int { - f := n.Float32() - if f > 0 { - return 1 - } else if f == 0 { + if n.IsZero() { return 0 + } else if n.Signbit() { + return -1 } - return -1 + return 1 } +func (n Num) Signbit() bool { return (n.bits & 0x8000) != 0 } + +func (n Num) IsNaN() bool { return (n.bits & 0x7fff) > 0x7c00 } + +func (n Num) IsInf() bool { return (n.bits & 0x7c00) == 0x7c00 } + +func (n Num) IsZero() bool { return (n.bits & 0x7fff) == 0 } + func (f Num) Uint16() uint16 { return f.bits } func (f Num) String() string { return strconv.FormatFloat(float64(f.Float32()), 'g', -1, 32) } + +func Inf() Num { return Num{bits: 0x7c00} } + +func NaN() Num { return Num{bits: 0x7fff} } + +func FromBits(src uint16) Num { return Num{bits: src} } + +func FromLEBytes(src []byte) Num { + return Num{bits: binary.LittleEndian.Uint16(src)} +} + +func (f Num) PutLEBytes(dst []byte) { + binary.LittleEndian.PutUint16(dst, f.bits) +} + +func (f Num) ToLEBytes() []byte { + dst := make([]byte, 2) + f.PutLEBytes(dst) + return dst +} diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/debug/assert_off.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/debug/assert_off.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/debug/assert_off.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/debug/assert_off.go index 52b9a233..1450ecc9 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/debug/assert_off.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/debug/assert_off.go @@ -14,6 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:build !assert // +build !assert package debug diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/debug/assert_on.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/debug/assert_on.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/debug/assert_on.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/debug/assert_on.go index 2aa5d6ac..4a57169b 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/debug/assert_on.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/debug/assert_on.go @@ -14,6 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:build assert // +build assert package debug diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/debug/doc.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/debug/doc.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/debug/doc.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/debug/doc.go index 3ee1783c..094e427a 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/debug/doc.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/debug/doc.go @@ -17,14 +17,12 @@ /* Package debug provides APIs for conditional runtime assertions and debug logging. - -Using Assert +# Using Assert To enable runtime assertions, build with the assert tag. When the assert tag is omitted, the code for the assertion will be omitted from the binary. - -Using Log +# Using Log To enable runtime debug logs, build with the debug tag. When the debug tag is omitted, the code for logging will be omitted from the binary. diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/debug/log_off.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/debug/log_off.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/debug/log_off.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/debug/log_off.go index 48da8e1e..760a5cdc 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/debug/log_off.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/debug/log_off.go @@ -14,6 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:build !debug // +build !debug package debug diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/debug/log_on.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/debug/log_on.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/debug/log_on.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/debug/log_on.go index 99d0c8ae..2588e7d1 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/debug/log_on.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/debug/log_on.go @@ -14,6 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:build debug // +build debug package debug diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/debug/util.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/debug/util.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/debug/util.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/debug/util.go index 7bd3d538..ea4eba7f 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/debug/util.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/debug/util.go @@ -14,6 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:build debug || assert // +build debug assert package debug diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/dictutils/dict.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/dictutils/dict.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/dictutils/dict.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/dictutils/dict.go index e09a2f4a..184e29c0 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/dictutils/dict.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/dictutils/dict.go @@ -21,9 +21,9 @@ import ( "fmt" "hash/maphash" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/memory" ) type Kind int8 @@ -104,7 +104,7 @@ func (d *Mapper) InsertPath(pos FieldPos) { d.hasher.Reset() } -func (d *Mapper) ImportField(pos FieldPos, field *arrow.Field) { +func (d *Mapper) ImportField(pos FieldPos, field arrow.Field) { dt := field.Type if dt.ID() == arrow.EXTENSION { dt = dt.(arrow.ExtensionType).StorageType() @@ -126,13 +126,18 @@ func (d *Mapper) ImportField(pos FieldPos, field *arrow.Field) { func (d *Mapper) ImportFields(pos FieldPos, fields []arrow.Field) { for i := range fields { - d.ImportField(pos.Child(int32(i)), &fields[i]) + d.ImportField(pos.Child(int32(i)), fields[i]) } } func (d *Mapper) ImportSchema(schema *arrow.Schema) { d.pathToID = make(map[uint64]int64) - d.ImportFields(NewFieldPos(), schema.Fields()) + // This code path intentionally avoids calling ImportFields with + // schema.Fields to avoid allocations. + pos := NewFieldPos() + for i := 0; i < schema.NumFields(); i++ { + d.ImportField(pos.Child(int32(i)), schema.Field(i)) + } } func hasUnresolvedNestedDict(data arrow.ArrayData) bool { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Binary.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Binary.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Binary.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Binary.go index e8018e74..95e01559 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Binary.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Binary.go @@ -22,7 +22,7 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// Opaque binary data +// / Opaque binary data type Binary struct { _tab flatbuffers.Table } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/BinaryView.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/BinaryView.go similarity index 76% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/BinaryView.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/BinaryView.go index 09ca5e7d..f6906674 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/BinaryView.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/BinaryView.go @@ -22,13 +22,13 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// Logically the same as Binary, but the internal representation uses a view -/// struct that contains the string length and either the string's entire data -/// inline (for small strings) or an inlined prefix, an index of another buffer, -/// and an offset pointing to a slice in that buffer (for non-small strings). -/// -/// Since it uses a variable number of data buffers, each Field with this type -/// must have a corresponding entry in `variadicBufferCounts`. +// / Logically the same as Binary, but the internal representation uses a view +// / struct that contains the string length and either the string's entire data +// / inline (for small strings) or an inlined prefix, an index of another buffer, +// / and an offset pointing to a slice in that buffer (for non-small strings). +// / +// / Since it uses a variable number of data buffers, each Field with this type +// / must have a corresponding entry in `variadicBufferCounts`. type BinaryView struct { _tab flatbuffers.Table } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Block.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Block.go similarity index 83% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Block.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Block.go index 57a697b1..8e33d3e6 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Block.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Block.go @@ -35,31 +35,34 @@ func (rcv *Block) Table() flatbuffers.Table { return rcv._tab.Table } -/// Index to the start of the RecordBlock (note this is past the Message header) +// / Index to the start of the RecordBlock (note this is past the Message header) func (rcv *Block) Offset() int64 { return rcv._tab.GetInt64(rcv._tab.Pos + flatbuffers.UOffsetT(0)) } -/// Index to the start of the RecordBlock (note this is past the Message header) + +// / Index to the start of the RecordBlock (note this is past the Message header) func (rcv *Block) MutateOffset(n int64) bool { return rcv._tab.MutateInt64(rcv._tab.Pos+flatbuffers.UOffsetT(0), n) } -/// Length of the metadata +// / Length of the metadata func (rcv *Block) MetaDataLength() int32 { return rcv._tab.GetInt32(rcv._tab.Pos + flatbuffers.UOffsetT(8)) } -/// Length of the metadata + +// / Length of the metadata func (rcv *Block) MutateMetaDataLength(n int32) bool { return rcv._tab.MutateInt32(rcv._tab.Pos+flatbuffers.UOffsetT(8), n) } -/// Length of the data (this is aligned so there can be a gap between this and -/// the metadata). +// / Length of the data (this is aligned so there can be a gap between this and +// / the metadata). func (rcv *Block) BodyLength() int64 { return rcv._tab.GetInt64(rcv._tab.Pos + flatbuffers.UOffsetT(16)) } -/// Length of the data (this is aligned so there can be a gap between this and -/// the metadata). + +// / Length of the data (this is aligned so there can be a gap between this and +// / the metadata). func (rcv *Block) MutateBodyLength(n int64) bool { return rcv._tab.MutateInt64(rcv._tab.Pos+flatbuffers.UOffsetT(16), n) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/BodyCompression.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/BodyCompression.go similarity index 83% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/BodyCompression.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/BodyCompression.go index 6468e231..c23c2919 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/BodyCompression.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/BodyCompression.go @@ -22,9 +22,9 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// Optional compression for the memory buffers constituting IPC message -/// bodies. Intended for use with RecordBatch but could be used for other -/// message types +// / Optional compression for the memory buffers constituting IPC message +// / bodies. Intended for use with RecordBatch but could be used for other +// / message types type BodyCompression struct { _tab flatbuffers.Table } @@ -45,8 +45,8 @@ func (rcv *BodyCompression) Table() flatbuffers.Table { return rcv._tab } -/// Compressor library. -/// For LZ4_FRAME, each compressed buffer must consist of a single frame. +// / Compressor library. +// / For LZ4_FRAME, each compressed buffer must consist of a single frame. func (rcv *BodyCompression) Codec() CompressionType { o := flatbuffers.UOffsetT(rcv._tab.Offset(4)) if o != 0 { @@ -55,13 +55,13 @@ func (rcv *BodyCompression) Codec() CompressionType { return 0 } -/// Compressor library. -/// For LZ4_FRAME, each compressed buffer must consist of a single frame. +// / Compressor library. +// / For LZ4_FRAME, each compressed buffer must consist of a single frame. func (rcv *BodyCompression) MutateCodec(n CompressionType) bool { return rcv._tab.MutateInt8Slot(4, int8(n)) } -/// Indicates the way the record batch body was compressed +// / Indicates the way the record batch body was compressed func (rcv *BodyCompression) Method() BodyCompressionMethod { o := flatbuffers.UOffsetT(rcv._tab.Offset(6)) if o != 0 { @@ -70,7 +70,7 @@ func (rcv *BodyCompression) Method() BodyCompressionMethod { return 0 } -/// Indicates the way the record batch body was compressed +// / Indicates the way the record batch body was compressed func (rcv *BodyCompression) MutateMethod(n BodyCompressionMethod) bool { return rcv._tab.MutateInt8Slot(6, int8(n)) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/BodyCompressionMethod.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/BodyCompressionMethod.go similarity index 90% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/BodyCompressionMethod.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/BodyCompressionMethod.go index 108ab3e0..bb7234b3 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/BodyCompressionMethod.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/BodyCompressionMethod.go @@ -20,9 +20,9 @@ package flatbuf import "strconv" -/// Provided for forward compatibility in case we need to support different -/// strategies for compressing the IPC message body (like whole-body -/// compression rather than buffer-level) in the future +// / Provided for forward compatibility in case we need to support different +// / strategies for compressing the IPC message body (like whole-body +// / compression rather than buffer-level) in the future type BodyCompressionMethod int8 const ( diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Bool.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Bool.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Bool.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Bool.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Buffer.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Buffer.go similarity index 64% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Buffer.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Buffer.go index eba8d99b..e650e06a 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Buffer.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Buffer.go @@ -22,8 +22,8 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// ---------------------------------------------------------------------- -/// A Buffer represents a single contiguous memory segment +// / ---------------------------------------------------------------------- +// / A Buffer represents a single contiguous memory segment type Buffer struct { _tab flatbuffers.Struct } @@ -37,30 +37,32 @@ func (rcv *Buffer) Table() flatbuffers.Table { return rcv._tab.Table } -/// The relative offset into the shared memory page where the bytes for this -/// buffer starts +// / The relative offset into the shared memory page where the bytes for this +// / buffer starts func (rcv *Buffer) Offset() int64 { return rcv._tab.GetInt64(rcv._tab.Pos + flatbuffers.UOffsetT(0)) } -/// The relative offset into the shared memory page where the bytes for this -/// buffer starts + +// / The relative offset into the shared memory page where the bytes for this +// / buffer starts func (rcv *Buffer) MutateOffset(n int64) bool { return rcv._tab.MutateInt64(rcv._tab.Pos+flatbuffers.UOffsetT(0), n) } -/// The absolute length (in bytes) of the memory buffer. The memory is found -/// from offset (inclusive) to offset + length (non-inclusive). When building -/// messages using the encapsulated IPC message, padding bytes may be written -/// after a buffer, but such padding bytes do not need to be accounted for in -/// the size here. +// / The absolute length (in bytes) of the memory buffer. The memory is found +// / from offset (inclusive) to offset + length (non-inclusive). When building +// / messages using the encapsulated IPC message, padding bytes may be written +// / after a buffer, but such padding bytes do not need to be accounted for in +// / the size here. func (rcv *Buffer) Length() int64 { return rcv._tab.GetInt64(rcv._tab.Pos + flatbuffers.UOffsetT(8)) } -/// The absolute length (in bytes) of the memory buffer. The memory is found -/// from offset (inclusive) to offset + length (non-inclusive). When building -/// messages using the encapsulated IPC message, padding bytes may be written -/// after a buffer, but such padding bytes do not need to be accounted for in -/// the size here. + +// / The absolute length (in bytes) of the memory buffer. The memory is found +// / from offset (inclusive) to offset + length (non-inclusive). When building +// / messages using the encapsulated IPC message, padding bytes may be written +// / after a buffer, but such padding bytes do not need to be accounted for in +// / the size here. func (rcv *Buffer) MutateLength(n int64) bool { return rcv._tab.MutateInt64(rcv._tab.Pos+flatbuffers.UOffsetT(8), n) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/CompressionType.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/CompressionType.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/CompressionType.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/CompressionType.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Date.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Date.go similarity index 83% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Date.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Date.go index 32983ec5..985a8f79 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Date.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Date.go @@ -22,12 +22,12 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// Date is either a 32-bit or 64-bit signed integer type representing an -/// elapsed time since UNIX epoch (1970-01-01), stored in either of two units: -/// -/// * Milliseconds (64 bits) indicating UNIX time elapsed since the epoch (no -/// leap seconds), where the values are evenly divisible by 86400000 -/// * Days (32 bits) since the UNIX epoch +// / Date is either a 32-bit or 64-bit signed integer type representing an +// / elapsed time since UNIX epoch (1970-01-01), stored in either of two units: +// / +// / * Milliseconds (64 bits) indicating UNIX time elapsed since the epoch (no +// / leap seconds), where the values are evenly divisible by 86400000 +// / * Days (32 bits) since the UNIX epoch type Date struct { _tab flatbuffers.Table } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/DateUnit.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/DateUnit.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/DateUnit.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/DateUnit.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Decimal.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Decimal.go similarity index 89% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Decimal.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Decimal.go index c9de254d..234c3964 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Decimal.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Decimal.go @@ -23,9 +23,9 @@ import ( ) /// Exact decimal value represented as an integer value in two's -/// complement. Currently only 128-bit (16-byte) and 256-bit (32-byte) integers -/// are used. The representation uses the endianness indicated -/// in the Schema. +/// complement. Currently 32-bit (4-byte), 64-bit (8-byte), +/// 128-bit (16-byte) and 256-bit (32-byte) integers are used. +/// The representation uses the endianness indicated in the Schema. type Decimal struct { _tab flatbuffers.Table } @@ -74,7 +74,7 @@ func (rcv *Decimal) MutateScale(n int32) bool { return rcv._tab.MutateInt32Slot(6, n) } -/// Number of bits per value. The only accepted widths are 128 and 256. +/// Number of bits per value. The accepted widths are 32, 64, 128 and 256. /// We use bitWidth for consistency with Int::bitWidth. func (rcv *Decimal) BitWidth() int32 { o := flatbuffers.UOffsetT(rcv._tab.Offset(8)) @@ -84,7 +84,7 @@ func (rcv *Decimal) BitWidth() int32 { return 128 } -/// Number of bits per value. The only accepted widths are 128 and 256. +/// Number of bits per value. The accepted widths are 32, 64, 128 and 256. /// We use bitWidth for consistency with Int::bitWidth. func (rcv *Decimal) MutateBitWidth(n int32) bool { return rcv._tab.MutateInt32Slot(8, n) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/DictionaryBatch.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/DictionaryBatch.go similarity index 79% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/DictionaryBatch.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/DictionaryBatch.go index 25b5384e..999c5fda 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/DictionaryBatch.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/DictionaryBatch.go @@ -22,12 +22,12 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// For sending dictionary encoding information. Any Field can be -/// dictionary-encoded, but in this case none of its children may be -/// dictionary-encoded. -/// There is one vector / column per dictionary, but that vector / column -/// may be spread across multiple dictionary batches by using the isDelta -/// flag +// / For sending dictionary encoding information. Any Field can be +// / dictionary-encoded, but in this case none of its children may be +// / dictionary-encoded. +// / There is one vector / column per dictionary, but that vector / column +// / may be spread across multiple dictionary batches by using the isDelta +// / flag type DictionaryBatch struct { _tab flatbuffers.Table } @@ -73,9 +73,9 @@ func (rcv *DictionaryBatch) Data(obj *RecordBatch) *RecordBatch { return nil } -/// If isDelta is true the values in the dictionary are to be appended to a -/// dictionary with the indicated id. If isDelta is false this dictionary -/// should replace the existing dictionary. +// / If isDelta is true the values in the dictionary are to be appended to a +// / dictionary with the indicated id. If isDelta is false this dictionary +// / should replace the existing dictionary. func (rcv *DictionaryBatch) IsDelta() bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(8)) if o != 0 { @@ -84,9 +84,9 @@ func (rcv *DictionaryBatch) IsDelta() bool { return false } -/// If isDelta is true the values in the dictionary are to be appended to a -/// dictionary with the indicated id. If isDelta is false this dictionary -/// should replace the existing dictionary. +// / If isDelta is true the values in the dictionary are to be appended to a +// / dictionary with the indicated id. If isDelta is false this dictionary +// / should replace the existing dictionary. func (rcv *DictionaryBatch) MutateIsDelta(n bool) bool { return rcv._tab.MutateBoolSlot(8, n) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/DictionaryEncoding.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/DictionaryEncoding.go similarity index 67% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/DictionaryEncoding.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/DictionaryEncoding.go index a9b09530..44c38742 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/DictionaryEncoding.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/DictionaryEncoding.go @@ -42,9 +42,9 @@ func (rcv *DictionaryEncoding) Table() flatbuffers.Table { return rcv._tab } -/// The known dictionary id in the application where this data is used. In -/// the file or streaming formats, the dictionary ids are found in the -/// DictionaryBatch messages +// / The known dictionary id in the application where this data is used. In +// / the file or streaming formats, the dictionary ids are found in the +// / DictionaryBatch messages func (rcv *DictionaryEncoding) Id() int64 { o := flatbuffers.UOffsetT(rcv._tab.Offset(4)) if o != 0 { @@ -53,18 +53,18 @@ func (rcv *DictionaryEncoding) Id() int64 { return 0 } -/// The known dictionary id in the application where this data is used. In -/// the file or streaming formats, the dictionary ids are found in the -/// DictionaryBatch messages +// / The known dictionary id in the application where this data is used. In +// / the file or streaming formats, the dictionary ids are found in the +// / DictionaryBatch messages func (rcv *DictionaryEncoding) MutateId(n int64) bool { return rcv._tab.MutateInt64Slot(4, n) } -/// The dictionary indices are constrained to be non-negative integers. If -/// this field is null, the indices must be signed int32. To maximize -/// cross-language compatibility and performance, implementations are -/// recommended to prefer signed integer types over unsigned integer types -/// and to avoid uint64 indices unless they are required by an application. +// / The dictionary indices are constrained to be non-negative integers. If +// / this field is null, the indices must be signed int32. To maximize +// / cross-language compatibility and performance, implementations are +// / recommended to prefer signed integer types over unsigned integer types +// / and to avoid uint64 indices unless they are required by an application. func (rcv *DictionaryEncoding) IndexType(obj *Int) *Int { o := flatbuffers.UOffsetT(rcv._tab.Offset(6)) if o != 0 { @@ -78,15 +78,15 @@ func (rcv *DictionaryEncoding) IndexType(obj *Int) *Int { return nil } -/// The dictionary indices are constrained to be non-negative integers. If -/// this field is null, the indices must be signed int32. To maximize -/// cross-language compatibility and performance, implementations are -/// recommended to prefer signed integer types over unsigned integer types -/// and to avoid uint64 indices unless they are required by an application. -/// By default, dictionaries are not ordered, or the order does not have -/// semantic meaning. In some statistical, applications, dictionary-encoding -/// is used to represent ordered categorical data, and we provide a way to -/// preserve that metadata here +// / The dictionary indices are constrained to be non-negative integers. If +// / this field is null, the indices must be signed int32. To maximize +// / cross-language compatibility and performance, implementations are +// / recommended to prefer signed integer types over unsigned integer types +// / and to avoid uint64 indices unless they are required by an application. +// / By default, dictionaries are not ordered, or the order does not have +// / semantic meaning. In some statistical, applications, dictionary-encoding +// / is used to represent ordered categorical data, and we provide a way to +// / preserve that metadata here func (rcv *DictionaryEncoding) IsOrdered() bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(8)) if o != 0 { @@ -95,10 +95,10 @@ func (rcv *DictionaryEncoding) IsOrdered() bool { return false } -/// By default, dictionaries are not ordered, or the order does not have -/// semantic meaning. In some statistical, applications, dictionary-encoding -/// is used to represent ordered categorical data, and we provide a way to -/// preserve that metadata here +// / By default, dictionaries are not ordered, or the order does not have +// / semantic meaning. In some statistical, applications, dictionary-encoding +// / is used to represent ordered categorical data, and we provide a way to +// / preserve that metadata here func (rcv *DictionaryEncoding) MutateIsOrdered(n bool) bool { return rcv._tab.MutateBoolSlot(8, n) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/DictionaryKind.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/DictionaryKind.go similarity index 82% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/DictionaryKind.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/DictionaryKind.go index 126ba5f7..68251005 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/DictionaryKind.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/DictionaryKind.go @@ -20,11 +20,11 @@ package flatbuf import "strconv" -/// ---------------------------------------------------------------------- -/// Dictionary encoding metadata -/// Maintained for forwards compatibility, in the future -/// Dictionaries might be explicit maps between integers and values -/// allowing for non-contiguous index values +// / ---------------------------------------------------------------------- +// / Dictionary encoding metadata +// / Maintained for forwards compatibility, in the future +// / Dictionaries might be explicit maps between integers and values +// / allowing for non-contiguous index values type DictionaryKind int16 const ( diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Duration.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Duration.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Duration.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Duration.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Endianness.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Endianness.go similarity index 91% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Endianness.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Endianness.go index cefa2ff9..c9619b7b 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Endianness.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Endianness.go @@ -20,8 +20,8 @@ package flatbuf import "strconv" -/// ---------------------------------------------------------------------- -/// Endianness of the platform producing the data +// / ---------------------------------------------------------------------- +// / Endianness of the platform producing the data type Endianness int16 const ( diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Feature.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Feature.go similarity index 65% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Feature.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Feature.go index ae5a0398..2204c440 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Feature.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Feature.go @@ -20,35 +20,35 @@ package flatbuf import "strconv" -/// Represents Arrow Features that might not have full support -/// within implementations. This is intended to be used in -/// two scenarios: -/// 1. A mechanism for readers of Arrow Streams -/// and files to understand that the stream or file makes -/// use of a feature that isn't supported or unknown to -/// the implementation (and therefore can meet the Arrow -/// forward compatibility guarantees). -/// 2. A means of negotiating between a client and server -/// what features a stream is allowed to use. The enums -/// values here are intented to represent higher level -/// features, additional details maybe negotiated -/// with key-value pairs specific to the protocol. -/// -/// Enums added to this list should be assigned power-of-two values -/// to facilitate exchanging and comparing bitmaps for supported -/// features. +// / Represents Arrow Features that might not have full support +// / within implementations. This is intended to be used in +// / two scenarios: +// / 1. A mechanism for readers of Arrow Streams +// / and files to understand that the stream or file makes +// / use of a feature that isn't supported or unknown to +// / the implementation (and therefore can meet the Arrow +// / forward compatibility guarantees). +// / 2. A means of negotiating between a client and server +// / what features a stream is allowed to use. The enums +// / values here are intented to represent higher level +// / features, additional details maybe negotiated +// / with key-value pairs specific to the protocol. +// / +// / Enums added to this list should be assigned power-of-two values +// / to facilitate exchanging and comparing bitmaps for supported +// / features. type Feature int64 const ( /// Needed to make flatbuffers happy. - FeatureUNUSED Feature = 0 + FeatureUNUSED Feature = 0 /// The stream makes use of multiple full dictionaries with the /// same ID and assumes clients implement dictionary replacement /// correctly. FeatureDICTIONARY_REPLACEMENT Feature = 1 /// The stream makes use of compressed bodies as described /// in Message.fbs. - FeatureCOMPRESSED_BODY Feature = 2 + FeatureCOMPRESSED_BODY Feature = 2 ) var EnumNamesFeature = map[Feature]string{ diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Field.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Field.go similarity index 82% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Field.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Field.go index c03cf2f8..8aed29bc 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Field.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Field.go @@ -22,9 +22,9 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// ---------------------------------------------------------------------- -/// A field represents a named column in a record / row batch or child of a -/// nested type. +// / ---------------------------------------------------------------------- +// / A field represents a named column in a record / row batch or child of a +// / nested type. type Field struct { _tab flatbuffers.Table } @@ -45,7 +45,7 @@ func (rcv *Field) Table() flatbuffers.Table { return rcv._tab } -/// Name is not required, in i.e. a List +// / Name is not required, in i.e. a List func (rcv *Field) Name() []byte { o := flatbuffers.UOffsetT(rcv._tab.Offset(4)) if o != 0 { @@ -54,8 +54,8 @@ func (rcv *Field) Name() []byte { return nil } -/// Name is not required, in i.e. a List -/// Whether or not this field can contain nulls. Should be true in general. +// / Name is not required, in i.e. a List +// / Whether or not this field can contain nulls. Should be true in general. func (rcv *Field) Nullable() bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(6)) if o != 0 { @@ -64,7 +64,7 @@ func (rcv *Field) Nullable() bool { return false } -/// Whether or not this field can contain nulls. Should be true in general. +// / Whether or not this field can contain nulls. Should be true in general. func (rcv *Field) MutateNullable(n bool) bool { return rcv._tab.MutateBoolSlot(6, n) } @@ -81,7 +81,7 @@ func (rcv *Field) MutateTypeType(n Type) bool { return rcv._tab.MutateByteSlot(8, byte(n)) } -/// This is the type of the decoded value if the field is dictionary encoded. +// / This is the type of the decoded value if the field is dictionary encoded. func (rcv *Field) Type(obj *flatbuffers.Table) bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(10)) if o != 0 { @@ -91,8 +91,8 @@ func (rcv *Field) Type(obj *flatbuffers.Table) bool { return false } -/// This is the type of the decoded value if the field is dictionary encoded. -/// Present only if the field is dictionary encoded. +// / This is the type of the decoded value if the field is dictionary encoded. +// / Present only if the field is dictionary encoded. func (rcv *Field) Dictionary(obj *DictionaryEncoding) *DictionaryEncoding { o := flatbuffers.UOffsetT(rcv._tab.Offset(12)) if o != 0 { @@ -106,9 +106,9 @@ func (rcv *Field) Dictionary(obj *DictionaryEncoding) *DictionaryEncoding { return nil } -/// Present only if the field is dictionary encoded. -/// children apply only to nested data types like Struct, List and Union. For -/// primitive types children will have length 0. +// / Present only if the field is dictionary encoded. +// / children apply only to nested data types like Struct, List and Union. For +// / primitive types children will have length 0. func (rcv *Field) Children(obj *Field, j int) bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(14)) if o != 0 { @@ -129,9 +129,9 @@ func (rcv *Field) ChildrenLength() int { return 0 } -/// children apply only to nested data types like Struct, List and Union. For -/// primitive types children will have length 0. -/// User-defined metadata +// / children apply only to nested data types like Struct, List and Union. For +// / primitive types children will have length 0. +// / User-defined metadata func (rcv *Field) CustomMetadata(obj *KeyValue, j int) bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(16)) if o != 0 { @@ -152,7 +152,7 @@ func (rcv *Field) CustomMetadataLength() int { return 0 } -/// User-defined metadata +// / User-defined metadata func FieldStart(builder *flatbuffers.Builder) { builder.StartObject(7) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/FieldNode.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/FieldNode.go similarity index 62% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/FieldNode.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/FieldNode.go index 606b30bf..0e258a3d 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/FieldNode.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/FieldNode.go @@ -22,15 +22,15 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// ---------------------------------------------------------------------- -/// Data structures for describing a table row batch (a collection of -/// equal-length Arrow arrays) -/// Metadata about a field at some level of a nested type tree (but not -/// its children). -/// -/// For example, a List with values `[[1, 2, 3], null, [4], [5, 6], null]` -/// would have {length: 5, null_count: 2} for its List node, and {length: 6, -/// null_count: 0} for its Int16 node, as separate FieldNode structs +// / ---------------------------------------------------------------------- +// / Data structures for describing a table row batch (a collection of +// / equal-length Arrow arrays) +// / Metadata about a field at some level of a nested type tree (but not +// / its children). +// / +// / For example, a List with values `[[1, 2, 3], null, [4], [5, 6], null]` +// / would have {length: 5, null_count: 2} for its List node, and {length: 6, +// / null_count: 0} for its Int16 node, as separate FieldNode structs type FieldNode struct { _tab flatbuffers.Struct } @@ -44,26 +44,28 @@ func (rcv *FieldNode) Table() flatbuffers.Table { return rcv._tab.Table } -/// The number of value slots in the Arrow array at this level of a nested -/// tree +// / The number of value slots in the Arrow array at this level of a nested +// / tree func (rcv *FieldNode) Length() int64 { return rcv._tab.GetInt64(rcv._tab.Pos + flatbuffers.UOffsetT(0)) } -/// The number of value slots in the Arrow array at this level of a nested -/// tree + +// / The number of value slots in the Arrow array at this level of a nested +// / tree func (rcv *FieldNode) MutateLength(n int64) bool { return rcv._tab.MutateInt64(rcv._tab.Pos+flatbuffers.UOffsetT(0), n) } -/// The number of observed nulls. Fields with null_count == 0 may choose not -/// to write their physical validity bitmap out as a materialized buffer, -/// instead setting the length of the bitmap buffer to 0. +// / The number of observed nulls. Fields with null_count == 0 may choose not +// / to write their physical validity bitmap out as a materialized buffer, +// / instead setting the length of the bitmap buffer to 0. func (rcv *FieldNode) NullCount() int64 { return rcv._tab.GetInt64(rcv._tab.Pos + flatbuffers.UOffsetT(8)) } -/// The number of observed nulls. Fields with null_count == 0 may choose not -/// to write their physical validity bitmap out as a materialized buffer, -/// instead setting the length of the bitmap buffer to 0. + +// / The number of observed nulls. Fields with null_count == 0 may choose not +// / to write their physical validity bitmap out as a materialized buffer, +// / instead setting the length of the bitmap buffer to 0. func (rcv *FieldNode) MutateNullCount(n int64) bool { return rcv._tab.MutateInt64(rcv._tab.Pos+flatbuffers.UOffsetT(8), n) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/FixedSizeBinary.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/FixedSizeBinary.go similarity index 96% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/FixedSizeBinary.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/FixedSizeBinary.go index 4e660d50..2725dfb9 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/FixedSizeBinary.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/FixedSizeBinary.go @@ -42,7 +42,7 @@ func (rcv *FixedSizeBinary) Table() flatbuffers.Table { return rcv._tab } -/// Number of bytes per value +// / Number of bytes per value func (rcv *FixedSizeBinary) ByteWidth() int32 { o := flatbuffers.UOffsetT(rcv._tab.Offset(4)) if o != 0 { @@ -51,7 +51,7 @@ func (rcv *FixedSizeBinary) ByteWidth() int32 { return 0 } -/// Number of bytes per value +// / Number of bytes per value func (rcv *FixedSizeBinary) MutateByteWidth(n int32) bool { return rcv._tab.MutateInt32Slot(4, n) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/FixedSizeList.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/FixedSizeList.go similarity index 96% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/FixedSizeList.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/FixedSizeList.go index dabf5cc8..534ca27f 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/FixedSizeList.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/FixedSizeList.go @@ -42,7 +42,7 @@ func (rcv *FixedSizeList) Table() flatbuffers.Table { return rcv._tab } -/// Number of list items per value +// / Number of list items per value func (rcv *FixedSizeList) ListSize() int32 { o := flatbuffers.UOffsetT(rcv._tab.Offset(4)) if o != 0 { @@ -51,7 +51,7 @@ func (rcv *FixedSizeList) ListSize() int32 { return 0 } -/// Number of list items per value +// / Number of list items per value func (rcv *FixedSizeList) MutateListSize(n int32) bool { return rcv._tab.MutateInt32Slot(4, n) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/FloatingPoint.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/FloatingPoint.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/FloatingPoint.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/FloatingPoint.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Footer.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Footer.go similarity index 96% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Footer.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Footer.go index 65b0ff09..d65af41e 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Footer.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Footer.go @@ -22,9 +22,9 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// ---------------------------------------------------------------------- -/// Arrow File metadata -/// +// / ---------------------------------------------------------------------- +// / Arrow File metadata +// / type Footer struct { _tab flatbuffers.Table } @@ -108,7 +108,7 @@ func (rcv *Footer) RecordBatchesLength() int { return 0 } -/// User-defined metadata +// / User-defined metadata func (rcv *Footer) CustomMetadata(obj *KeyValue, j int) bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(12)) if o != 0 { @@ -129,7 +129,7 @@ func (rcv *Footer) CustomMetadataLength() int { return 0 } -/// User-defined metadata +// / User-defined metadata func FooterStart(builder *flatbuffers.Builder) { builder.StartObject(5) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Int.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Int.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Int.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Int.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Interval.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Interval.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Interval.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Interval.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/IntervalUnit.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/IntervalUnit.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/IntervalUnit.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/IntervalUnit.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/KeyValue.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/KeyValue.go similarity index 91% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/KeyValue.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/KeyValue.go index c1b85318..0cd5dc62 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/KeyValue.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/KeyValue.go @@ -22,9 +22,9 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// ---------------------------------------------------------------------- -/// user defined key value pairs to add custom metadata to arrow -/// key namespacing is the responsibility of the user +// / ---------------------------------------------------------------------- +// / user defined key value pairs to add custom metadata to arrow +// / key namespacing is the responsibility of the user type KeyValue struct { _tab flatbuffers.Table } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/LargeBinary.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/LargeBinary.go similarity index 93% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/LargeBinary.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/LargeBinary.go index 2c3befcc..b25ecc41 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/LargeBinary.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/LargeBinary.go @@ -22,8 +22,8 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// Same as Binary, but with 64-bit offsets, allowing to represent -/// extremely large data values. +// / Same as Binary, but with 64-bit offsets, allowing to represent +// / extremely large data values. type LargeBinary struct { _tab flatbuffers.Table } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/LargeList.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/LargeList.go similarity index 93% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/LargeList.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/LargeList.go index 92f22845..d8bfb9c0 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/LargeList.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/LargeList.go @@ -22,8 +22,8 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// Same as List, but with 64-bit offsets, allowing to represent -/// extremely large data values. +// / Same as List, but with 64-bit offsets, allowing to represent +// / extremely large data values. type LargeList struct { _tab flatbuffers.Table } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/LargeListView.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/LargeListView.go similarity index 93% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/LargeListView.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/LargeListView.go index 5b1df149..4608c1de 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/LargeListView.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/LargeListView.go @@ -22,8 +22,8 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// Same as ListView, but with 64-bit offsets and sizes, allowing to represent -/// extremely large data values. +// / Same as ListView, but with 64-bit offsets and sizes, allowing to represent +// / extremely large data values. type LargeListView struct { _tab flatbuffers.Table } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/LargeUtf8.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/LargeUtf8.go similarity index 93% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/LargeUtf8.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/LargeUtf8.go index e78b33e1..4478fed8 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/LargeUtf8.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/LargeUtf8.go @@ -22,8 +22,8 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// Same as Utf8, but with 64-bit offsets, allowing to represent -/// extremely large data values. +// / Same as Utf8, but with 64-bit offsets, allowing to represent +// / extremely large data values. type LargeUtf8 struct { _tab flatbuffers.Table } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/List.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/List.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/List.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/List.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/ListView.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/ListView.go similarity index 89% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/ListView.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/ListView.go index 46b1e0b3..cde43cf5 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/ListView.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/ListView.go @@ -22,9 +22,9 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// Represents the same logical types that List can, but contains offsets and -/// sizes allowing for writes in any order and sharing of child values among -/// list values. +// / Represents the same logical types that List can, but contains offsets and +// / sizes allowing for writes in any order and sharing of child values among +// / list values. type ListView struct { _tab flatbuffers.Table } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Map.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Map.go similarity index 60% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Map.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Map.go index 8802aba1..d4871e55 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Map.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Map.go @@ -22,31 +22,31 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// A Map is a logical nested type that is represented as -/// -/// List> -/// -/// In this layout, the keys and values are each respectively contiguous. We do -/// not constrain the key and value types, so the application is responsible -/// for ensuring that the keys are hashable and unique. Whether the keys are sorted -/// may be set in the metadata for this field. -/// -/// In a field with Map type, the field has a child Struct field, which then -/// has two children: key type and the second the value type. The names of the -/// child fields may be respectively "entries", "key", and "value", but this is -/// not enforced. -/// -/// Map -/// ```text -/// - child[0] entries: Struct -/// - child[0] key: K -/// - child[1] value: V -/// ``` -/// Neither the "entries" field nor the "key" field may be nullable. -/// -/// The metadata is structured so that Arrow systems without special handling -/// for Map can make Map an alias for List. The "layout" attribute for the Map -/// field must have the same contents as a List. +// / A Map is a logical nested type that is represented as +// / +// / List> +// / +// / In this layout, the keys and values are each respectively contiguous. We do +// / not constrain the key and value types, so the application is responsible +// / for ensuring that the keys are hashable and unique. Whether the keys are sorted +// / may be set in the metadata for this field. +// / +// / In a field with Map type, the field has a child Struct field, which then +// / has two children: key type and the second the value type. The names of the +// / child fields may be respectively "entries", "key", and "value", but this is +// / not enforced. +// / +// / Map +// / ```text +// / - child[0] entries: Struct +// / - child[0] key: K +// / - child[1] value: V +// / ``` +// / Neither the "entries" field nor the "key" field may be nullable. +// / +// / The metadata is structured so that Arrow systems without special handling +// / for Map can make Map an alias for List. The "layout" attribute for the Map +// / field must have the same contents as a List. type Map struct { _tab flatbuffers.Table } @@ -67,7 +67,7 @@ func (rcv *Map) Table() flatbuffers.Table { return rcv._tab } -/// Set to true if the keys within each value are sorted +// / Set to true if the keys within each value are sorted func (rcv *Map) KeysSorted() bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(4)) if o != 0 { @@ -76,7 +76,7 @@ func (rcv *Map) KeysSorted() bool { return false } -/// Set to true if the keys within each value are sorted +// / Set to true if the keys within each value are sorted func (rcv *Map) MutateKeysSorted(n bool) bool { return rcv._tab.MutateBoolSlot(4, n) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Message.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Message.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Message.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Message.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/MessageHeader.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/MessageHeader.go similarity index 81% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/MessageHeader.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/MessageHeader.go index c12fc105..d7f9907c 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/MessageHeader.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/MessageHeader.go @@ -20,14 +20,14 @@ package flatbuf import "strconv" -/// ---------------------------------------------------------------------- -/// The root Message type -/// This union enables us to easily send different message types without -/// redundant storage, and in the future we can easily add new message types. -/// -/// Arrow implementations do not need to implement all of the message types, -/// which may include experimental metadata types. For maximum compatibility, -/// it is best to send data using RecordBatch +// / ---------------------------------------------------------------------- +// / The root Message type +// / This union enables us to easily send different message types without +// / redundant storage, and in the future we can easily add new message types. +// / +// / Arrow implementations do not need to implement all of the message types, +// / which may include experimental metadata types. For maximum compatibility, +// / it is best to send data using RecordBatch type MessageHeader byte const ( diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/MetadataVersion.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/MetadataVersion.go similarity index 96% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/MetadataVersion.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/MetadataVersion.go index 21b234f9..bb5e99dd 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/MetadataVersion.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/MetadataVersion.go @@ -31,7 +31,7 @@ const ( MetadataVersionV3 MetadataVersion = 2 /// >= 0.8.0 (December 2017). Non-backwards compatible with V3. MetadataVersionV4 MetadataVersion = 3 - /// >= 1.0.0 (July 2020. Backwards compatible with V4 (V5 readers can read V4 + /// >= 1.0.0 (July 2020). Backwards compatible with V4 (V5 readers can read V4 /// metadata and IPC messages). Implementations are recommended to provide a /// V4 compatibility mode with V5 format changes disabled. /// diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Null.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Null.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Null.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Null.go index 3c3eb4bd..3b93a1b6 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Null.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Null.go @@ -22,7 +22,7 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// These are stored in the flatbuffer in the Type union below +// / These are stored in the flatbuffer in the Type union below type Null struct { _tab flatbuffers.Table } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Precision.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Precision.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Precision.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Precision.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/RecordBatch.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/RecordBatch.go similarity index 62% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/RecordBatch.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/RecordBatch.go index c50f4a6e..52c72a8a 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/RecordBatch.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/RecordBatch.go @@ -22,9 +22,9 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// A data header describing the shared memory layout of a "record" or "row" -/// batch. Some systems call this a "row batch" internally and others a "record -/// batch". +// / A data header describing the shared memory layout of a "record" or "row" +// / batch. Some systems call this a "row batch" internally and others a "record +// / batch". type RecordBatch struct { _tab flatbuffers.Table } @@ -45,8 +45,8 @@ func (rcv *RecordBatch) Table() flatbuffers.Table { return rcv._tab } -/// number of records / rows. The arrays in the batch should all have this -/// length +// / number of records / rows. The arrays in the batch should all have this +// / length func (rcv *RecordBatch) Length() int64 { o := flatbuffers.UOffsetT(rcv._tab.Offset(4)) if o != 0 { @@ -55,13 +55,13 @@ func (rcv *RecordBatch) Length() int64 { return 0 } -/// number of records / rows. The arrays in the batch should all have this -/// length +// / number of records / rows. The arrays in the batch should all have this +// / length func (rcv *RecordBatch) MutateLength(n int64) bool { return rcv._tab.MutateInt64Slot(4, n) } -/// Nodes correspond to the pre-ordered flattened logical schema +// / Nodes correspond to the pre-ordered flattened logical schema func (rcv *RecordBatch) Nodes(obj *FieldNode, j int) bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(6)) if o != 0 { @@ -81,13 +81,13 @@ func (rcv *RecordBatch) NodesLength() int { return 0 } -/// Nodes correspond to the pre-ordered flattened logical schema -/// Buffers correspond to the pre-ordered flattened buffer tree -/// -/// The number of buffers appended to this list depends on the schema. For -/// example, most primitive arrays will have 2 buffers, 1 for the validity -/// bitmap and 1 for the values. For struct arrays, there will only be a -/// single buffer for the validity (nulls) bitmap +// / Nodes correspond to the pre-ordered flattened logical schema +// / Buffers correspond to the pre-ordered flattened buffer tree +// / +// / The number of buffers appended to this list depends on the schema. For +// / example, most primitive arrays will have 2 buffers, 1 for the validity +// / bitmap and 1 for the values. For struct arrays, there will only be a +// / single buffer for the validity (nulls) bitmap func (rcv *RecordBatch) Buffers(obj *Buffer, j int) bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(8)) if o != 0 { @@ -107,13 +107,13 @@ func (rcv *RecordBatch) BuffersLength() int { return 0 } -/// Buffers correspond to the pre-ordered flattened buffer tree -/// -/// The number of buffers appended to this list depends on the schema. For -/// example, most primitive arrays will have 2 buffers, 1 for the validity -/// bitmap and 1 for the values. For struct arrays, there will only be a -/// single buffer for the validity (nulls) bitmap -/// Optional compression of the message body +// / Buffers correspond to the pre-ordered flattened buffer tree +// / +// / The number of buffers appended to this list depends on the schema. For +// / example, most primitive arrays will have 2 buffers, 1 for the validity +// / bitmap and 1 for the values. For struct arrays, there will only be a +// / single buffer for the validity (nulls) bitmap +// / Optional compression of the message body func (rcv *RecordBatch) Compression(obj *BodyCompression) *BodyCompression { o := flatbuffers.UOffsetT(rcv._tab.Offset(10)) if o != 0 { @@ -127,21 +127,21 @@ func (rcv *RecordBatch) Compression(obj *BodyCompression) *BodyCompression { return nil } -/// Optional compression of the message body -/// Some types such as Utf8View are represented using a variable number of buffers. -/// For each such Field in the pre-ordered flattened logical schema, there will be -/// an entry in variadicBufferCounts to indicate the number of number of variadic -/// buffers which belong to that Field in the current RecordBatch. -/// -/// For example, the schema -/// col1: Struct -/// col2: Utf8View -/// contains two Fields with variadic buffers so variadicBufferCounts will have -/// two entries, the first counting the variadic buffers of `col1.beta` and the -/// second counting `col2`'s. -/// -/// This field may be omitted if and only if the schema contains no Fields with -/// a variable number of buffers, such as BinaryView and Utf8View. +// / Optional compression of the message body +// / Some types such as Utf8View are represented using a variable number of buffers. +// / For each such Field in the pre-ordered flattened logical schema, there will be +// / an entry in variadicBufferCounts to indicate the number of number of variadic +// / buffers which belong to that Field in the current RecordBatch. +// / +// / For example, the schema +// / col1: Struct +// / col2: Utf8View +// / contains two Fields with variadic buffers so variadicBufferCounts will have +// / two entries, the first counting the variadic buffers of `col1.beta` and the +// / second counting `col2`'s. +// / +// / This field may be omitted if and only if the schema contains no Fields with +// / a variable number of buffers, such as BinaryView and Utf8View. func (rcv *RecordBatch) VariadicBufferCounts(j int) int64 { o := flatbuffers.UOffsetT(rcv._tab.Offset(12)) if o != 0 { @@ -159,20 +159,20 @@ func (rcv *RecordBatch) VariadicBufferCountsLength() int { return 0 } -/// Some types such as Utf8View are represented using a variable number of buffers. -/// For each such Field in the pre-ordered flattened logical schema, there will be -/// an entry in variadicBufferCounts to indicate the number of number of variadic -/// buffers which belong to that Field in the current RecordBatch. -/// -/// For example, the schema -/// col1: Struct -/// col2: Utf8View -/// contains two Fields with variadic buffers so variadicBufferCounts will have -/// two entries, the first counting the variadic buffers of `col1.beta` and the -/// second counting `col2`'s. -/// -/// This field may be omitted if and only if the schema contains no Fields with -/// a variable number of buffers, such as BinaryView and Utf8View. +// / Some types such as Utf8View are represented using a variable number of buffers. +// / For each such Field in the pre-ordered flattened logical schema, there will be +// / an entry in variadicBufferCounts to indicate the number of number of variadic +// / buffers which belong to that Field in the current RecordBatch. +// / +// / For example, the schema +// / col1: Struct +// / col2: Utf8View +// / contains two Fields with variadic buffers so variadicBufferCounts will have +// / two entries, the first counting the variadic buffers of `col1.beta` and the +// / second counting `col2`'s. +// / +// / This field may be omitted if and only if the schema contains no Fields with +// / a variable number of buffers, such as BinaryView and Utf8View. func (rcv *RecordBatch) MutateVariadicBufferCounts(j int, n int64) bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(12)) if o != 0 { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/RunEndEncoded.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/RunEndEncoded.go similarity index 83% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/RunEndEncoded.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/RunEndEncoded.go index fa414c1b..b88460b2 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/RunEndEncoded.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/RunEndEncoded.go @@ -22,11 +22,11 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// Contains two child arrays, run_ends and values. -/// The run_ends child array must be a 16/32/64-bit integer array -/// which encodes the indices at which the run with the value in -/// each corresponding index in the values child array ends. -/// Like list/struct types, the value array can be of any type. +// / Contains two child arrays, run_ends and values. +// / The run_ends child array must be a 16/32/64-bit integer array +// / which encodes the indices at which the run with the value in +// / each corresponding index in the values child array ends. +// / Like list/struct types, the value array can be of any type. type RunEndEncoded struct { _tab flatbuffers.Table } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/RunLengthEncoded.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/RunLengthEncoded.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/RunLengthEncoded.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/RunLengthEncoded.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Schema.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Schema.go similarity index 89% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Schema.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Schema.go index 4ee5ecc9..ae5b248a 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Schema.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Schema.go @@ -22,8 +22,8 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// ---------------------------------------------------------------------- -/// A Schema describes the columns in a row batch +// / ---------------------------------------------------------------------- +// / A Schema describes the columns in a row batch type Schema struct { _tab flatbuffers.Table } @@ -44,9 +44,9 @@ func (rcv *Schema) Table() flatbuffers.Table { return rcv._tab } -/// endianness of the buffer -/// it is Little Endian by default -/// if endianness doesn't match the underlying system then the vectors need to be converted +// / endianness of the buffer +// / it is Little Endian by default +// / if endianness doesn't match the underlying system then the vectors need to be converted func (rcv *Schema) Endianness() Endianness { o := flatbuffers.UOffsetT(rcv._tab.Offset(4)) if o != 0 { @@ -55,9 +55,9 @@ func (rcv *Schema) Endianness() Endianness { return 0 } -/// endianness of the buffer -/// it is Little Endian by default -/// if endianness doesn't match the underlying system then the vectors need to be converted +// / endianness of the buffer +// / it is Little Endian by default +// / if endianness doesn't match the underlying system then the vectors need to be converted func (rcv *Schema) MutateEndianness(n Endianness) bool { return rcv._tab.MutateInt16Slot(4, int16(n)) } @@ -102,7 +102,7 @@ func (rcv *Schema) CustomMetadataLength() int { return 0 } -/// Features used in the stream/file. +// / Features used in the stream/file. func (rcv *Schema) Features(j int) Feature { o := flatbuffers.UOffsetT(rcv._tab.Offset(10)) if o != 0 { @@ -120,7 +120,7 @@ func (rcv *Schema) FeaturesLength() int { return 0 } -/// Features used in the stream/file. +// / Features used in the stream/file. func (rcv *Schema) MutateFeatures(j int, n Feature) bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(10)) if o != 0 { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/SparseMatrixCompressedAxis.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/SparseMatrixCompressedAxis.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/SparseMatrixCompressedAxis.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/SparseMatrixCompressedAxis.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/SparseMatrixIndexCSR.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/SparseMatrixIndexCSR.go similarity index 59% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/SparseMatrixIndexCSR.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/SparseMatrixIndexCSR.go index de821765..2477af10 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/SparseMatrixIndexCSR.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/SparseMatrixIndexCSR.go @@ -22,7 +22,7 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// Compressed Sparse Row format, that is matrix-specific. +// / Compressed Sparse Row format, that is matrix-specific. type SparseMatrixIndexCSR struct { _tab flatbuffers.Table } @@ -43,7 +43,7 @@ func (rcv *SparseMatrixIndexCSR) Table() flatbuffers.Table { return rcv._tab } -/// The type of values in indptrBuffer +// / The type of values in indptrBuffer func (rcv *SparseMatrixIndexCSR) IndptrType(obj *Int) *Int { o := flatbuffers.UOffsetT(rcv._tab.Offset(4)) if o != 0 { @@ -57,29 +57,29 @@ func (rcv *SparseMatrixIndexCSR) IndptrType(obj *Int) *Int { return nil } -/// The type of values in indptrBuffer -/// indptrBuffer stores the location and size of indptr array that -/// represents the range of the rows. -/// The i-th row spans from indptr[i] to indptr[i+1] in the data. -/// The length of this array is 1 + (the number of rows), and the type -/// of index value is long. -/// -/// For example, let X be the following 6x4 matrix: -/// -/// X := [[0, 1, 2, 0], -/// [0, 0, 3, 0], -/// [0, 4, 0, 5], -/// [0, 0, 0, 0], -/// [6, 0, 7, 8], -/// [0, 9, 0, 0]]. -/// -/// The array of non-zero values in X is: -/// -/// values(X) = [1, 2, 3, 4, 5, 6, 7, 8, 9]. -/// -/// And the indptr of X is: -/// -/// indptr(X) = [0, 2, 3, 5, 5, 8, 10]. +// / The type of values in indptrBuffer +// / indptrBuffer stores the location and size of indptr array that +// / represents the range of the rows. +// / The i-th row spans from indptr[i] to indptr[i+1] in the data. +// / The length of this array is 1 + (the number of rows), and the type +// / of index value is long. +// / +// / For example, let X be the following 6x4 matrix: +// / +// / X := [[0, 1, 2, 0], +// / [0, 0, 3, 0], +// / [0, 4, 0, 5], +// / [0, 0, 0, 0], +// / [6, 0, 7, 8], +// / [0, 9, 0, 0]]. +// / +// / The array of non-zero values in X is: +// / +// / values(X) = [1, 2, 3, 4, 5, 6, 7, 8, 9]. +// / +// / And the indptr of X is: +// / +// / indptr(X) = [0, 2, 3, 5, 5, 8, 10]. func (rcv *SparseMatrixIndexCSR) IndptrBuffer(obj *Buffer) *Buffer { o := flatbuffers.UOffsetT(rcv._tab.Offset(6)) if o != 0 { @@ -93,29 +93,29 @@ func (rcv *SparseMatrixIndexCSR) IndptrBuffer(obj *Buffer) *Buffer { return nil } -/// indptrBuffer stores the location and size of indptr array that -/// represents the range of the rows. -/// The i-th row spans from indptr[i] to indptr[i+1] in the data. -/// The length of this array is 1 + (the number of rows), and the type -/// of index value is long. -/// -/// For example, let X be the following 6x4 matrix: -/// -/// X := [[0, 1, 2, 0], -/// [0, 0, 3, 0], -/// [0, 4, 0, 5], -/// [0, 0, 0, 0], -/// [6, 0, 7, 8], -/// [0, 9, 0, 0]]. -/// -/// The array of non-zero values in X is: -/// -/// values(X) = [1, 2, 3, 4, 5, 6, 7, 8, 9]. -/// -/// And the indptr of X is: -/// -/// indptr(X) = [0, 2, 3, 5, 5, 8, 10]. -/// The type of values in indicesBuffer +// / indptrBuffer stores the location and size of indptr array that +// / represents the range of the rows. +// / The i-th row spans from indptr[i] to indptr[i+1] in the data. +// / The length of this array is 1 + (the number of rows), and the type +// / of index value is long. +// / +// / For example, let X be the following 6x4 matrix: +// / +// / X := [[0, 1, 2, 0], +// / [0, 0, 3, 0], +// / [0, 4, 0, 5], +// / [0, 0, 0, 0], +// / [6, 0, 7, 8], +// / [0, 9, 0, 0]]. +// / +// / The array of non-zero values in X is: +// / +// / values(X) = [1, 2, 3, 4, 5, 6, 7, 8, 9]. +// / +// / And the indptr of X is: +// / +// / indptr(X) = [0, 2, 3, 5, 5, 8, 10]. +// / The type of values in indicesBuffer func (rcv *SparseMatrixIndexCSR) IndicesType(obj *Int) *Int { o := flatbuffers.UOffsetT(rcv._tab.Offset(8)) if o != 0 { @@ -129,16 +129,16 @@ func (rcv *SparseMatrixIndexCSR) IndicesType(obj *Int) *Int { return nil } -/// The type of values in indicesBuffer -/// indicesBuffer stores the location and size of the array that -/// contains the column indices of the corresponding non-zero values. -/// The type of index value is long. -/// -/// For example, the indices of the above X is: -/// -/// indices(X) = [1, 2, 2, 1, 3, 0, 2, 3, 1]. -/// -/// Note that the indices are sorted in lexicographical order for each row. +// / The type of values in indicesBuffer +// / indicesBuffer stores the location and size of the array that +// / contains the column indices of the corresponding non-zero values. +// / The type of index value is long. +// / +// / For example, the indices of the above X is: +// / +// / indices(X) = [1, 2, 2, 1, 3, 0, 2, 3, 1]. +// / +// / Note that the indices are sorted in lexicographical order for each row. func (rcv *SparseMatrixIndexCSR) IndicesBuffer(obj *Buffer) *Buffer { o := flatbuffers.UOffsetT(rcv._tab.Offset(10)) if o != 0 { @@ -152,15 +152,15 @@ func (rcv *SparseMatrixIndexCSR) IndicesBuffer(obj *Buffer) *Buffer { return nil } -/// indicesBuffer stores the location and size of the array that -/// contains the column indices of the corresponding non-zero values. -/// The type of index value is long. -/// -/// For example, the indices of the above X is: -/// -/// indices(X) = [1, 2, 2, 1, 3, 0, 2, 3, 1]. -/// -/// Note that the indices are sorted in lexicographical order for each row. +// / indicesBuffer stores the location and size of the array that +// / contains the column indices of the corresponding non-zero values. +// / The type of index value is long. +// / +// / For example, the indices of the above X is: +// / +// / indices(X) = [1, 2, 2, 1, 3, 0, 2, 3, 1]. +// / +// / Note that the indices are sorted in lexicographical order for each row. func SparseMatrixIndexCSRStart(builder *flatbuffers.Builder) { builder.StartObject(4) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/SparseMatrixIndexCSX.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/SparseMatrixIndexCSX.go similarity index 60% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/SparseMatrixIndexCSX.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/SparseMatrixIndexCSX.go index c28cc5d0..7f262dee 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/SparseMatrixIndexCSX.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/SparseMatrixIndexCSX.go @@ -22,7 +22,7 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// Compressed Sparse format, that is matrix-specific. +// / Compressed Sparse format, that is matrix-specific. type SparseMatrixIndexCSX struct { _tab flatbuffers.Table } @@ -43,7 +43,7 @@ func (rcv *SparseMatrixIndexCSX) Table() flatbuffers.Table { return rcv._tab } -/// Which axis, row or column, is compressed +// / Which axis, row or column, is compressed func (rcv *SparseMatrixIndexCSX) CompressedAxis() SparseMatrixCompressedAxis { o := flatbuffers.UOffsetT(rcv._tab.Offset(4)) if o != 0 { @@ -52,12 +52,12 @@ func (rcv *SparseMatrixIndexCSX) CompressedAxis() SparseMatrixCompressedAxis { return 0 } -/// Which axis, row or column, is compressed +// / Which axis, row or column, is compressed func (rcv *SparseMatrixIndexCSX) MutateCompressedAxis(n SparseMatrixCompressedAxis) bool { return rcv._tab.MutateInt16Slot(4, int16(n)) } -/// The type of values in indptrBuffer +// / The type of values in indptrBuffer func (rcv *SparseMatrixIndexCSX) IndptrType(obj *Int) *Int { o := flatbuffers.UOffsetT(rcv._tab.Offset(6)) if o != 0 { @@ -71,30 +71,30 @@ func (rcv *SparseMatrixIndexCSX) IndptrType(obj *Int) *Int { return nil } -/// The type of values in indptrBuffer -/// indptrBuffer stores the location and size of indptr array that -/// represents the range of the rows. -/// The i-th row spans from `indptr[i]` to `indptr[i+1]` in the data. -/// The length of this array is 1 + (the number of rows), and the type -/// of index value is long. -/// -/// For example, let X be the following 6x4 matrix: -/// ```text -/// X := [[0, 1, 2, 0], -/// [0, 0, 3, 0], -/// [0, 4, 0, 5], -/// [0, 0, 0, 0], -/// [6, 0, 7, 8], -/// [0, 9, 0, 0]]. -/// ``` -/// The array of non-zero values in X is: -/// ```text -/// values(X) = [1, 2, 3, 4, 5, 6, 7, 8, 9]. -/// ``` -/// And the indptr of X is: -/// ```text -/// indptr(X) = [0, 2, 3, 5, 5, 8, 10]. -/// ``` +// / The type of values in indptrBuffer +// / indptrBuffer stores the location and size of indptr array that +// / represents the range of the rows. +// / The i-th row spans from `indptr[i]` to `indptr[i+1]` in the data. +// / The length of this array is 1 + (the number of rows), and the type +// / of index value is long. +// / +// / For example, let X be the following 6x4 matrix: +// / ```text +// / X := [[0, 1, 2, 0], +// / [0, 0, 3, 0], +// / [0, 4, 0, 5], +// / [0, 0, 0, 0], +// / [6, 0, 7, 8], +// / [0, 9, 0, 0]]. +// / ``` +// / The array of non-zero values in X is: +// / ```text +// / values(X) = [1, 2, 3, 4, 5, 6, 7, 8, 9]. +// / ``` +// / And the indptr of X is: +// / ```text +// / indptr(X) = [0, 2, 3, 5, 5, 8, 10]. +// / ``` func (rcv *SparseMatrixIndexCSX) IndptrBuffer(obj *Buffer) *Buffer { o := flatbuffers.UOffsetT(rcv._tab.Offset(8)) if o != 0 { @@ -108,30 +108,30 @@ func (rcv *SparseMatrixIndexCSX) IndptrBuffer(obj *Buffer) *Buffer { return nil } -/// indptrBuffer stores the location and size of indptr array that -/// represents the range of the rows. -/// The i-th row spans from `indptr[i]` to `indptr[i+1]` in the data. -/// The length of this array is 1 + (the number of rows), and the type -/// of index value is long. -/// -/// For example, let X be the following 6x4 matrix: -/// ```text -/// X := [[0, 1, 2, 0], -/// [0, 0, 3, 0], -/// [0, 4, 0, 5], -/// [0, 0, 0, 0], -/// [6, 0, 7, 8], -/// [0, 9, 0, 0]]. -/// ``` -/// The array of non-zero values in X is: -/// ```text -/// values(X) = [1, 2, 3, 4, 5, 6, 7, 8, 9]. -/// ``` -/// And the indptr of X is: -/// ```text -/// indptr(X) = [0, 2, 3, 5, 5, 8, 10]. -/// ``` -/// The type of values in indicesBuffer +// / indptrBuffer stores the location and size of indptr array that +// / represents the range of the rows. +// / The i-th row spans from `indptr[i]` to `indptr[i+1]` in the data. +// / The length of this array is 1 + (the number of rows), and the type +// / of index value is long. +// / +// / For example, let X be the following 6x4 matrix: +// / ```text +// / X := [[0, 1, 2, 0], +// / [0, 0, 3, 0], +// / [0, 4, 0, 5], +// / [0, 0, 0, 0], +// / [6, 0, 7, 8], +// / [0, 9, 0, 0]]. +// / ``` +// / The array of non-zero values in X is: +// / ```text +// / values(X) = [1, 2, 3, 4, 5, 6, 7, 8, 9]. +// / ``` +// / And the indptr of X is: +// / ```text +// / indptr(X) = [0, 2, 3, 5, 5, 8, 10]. +// / ``` +// / The type of values in indicesBuffer func (rcv *SparseMatrixIndexCSX) IndicesType(obj *Int) *Int { o := flatbuffers.UOffsetT(rcv._tab.Offset(10)) if o != 0 { @@ -145,16 +145,16 @@ func (rcv *SparseMatrixIndexCSX) IndicesType(obj *Int) *Int { return nil } -/// The type of values in indicesBuffer -/// indicesBuffer stores the location and size of the array that -/// contains the column indices of the corresponding non-zero values. -/// The type of index value is long. -/// -/// For example, the indices of the above X is: -/// ```text -/// indices(X) = [1, 2, 2, 1, 3, 0, 2, 3, 1]. -/// ``` -/// Note that the indices are sorted in lexicographical order for each row. +// / The type of values in indicesBuffer +// / indicesBuffer stores the location and size of the array that +// / contains the column indices of the corresponding non-zero values. +// / The type of index value is long. +// / +// / For example, the indices of the above X is: +// / ```text +// / indices(X) = [1, 2, 2, 1, 3, 0, 2, 3, 1]. +// / ``` +// / Note that the indices are sorted in lexicographical order for each row. func (rcv *SparseMatrixIndexCSX) IndicesBuffer(obj *Buffer) *Buffer { o := flatbuffers.UOffsetT(rcv._tab.Offset(12)) if o != 0 { @@ -168,15 +168,15 @@ func (rcv *SparseMatrixIndexCSX) IndicesBuffer(obj *Buffer) *Buffer { return nil } -/// indicesBuffer stores the location and size of the array that -/// contains the column indices of the corresponding non-zero values. -/// The type of index value is long. -/// -/// For example, the indices of the above X is: -/// ```text -/// indices(X) = [1, 2, 2, 1, 3, 0, 2, 3, 1]. -/// ``` -/// Note that the indices are sorted in lexicographical order for each row. +// / indicesBuffer stores the location and size of the array that +// / contains the column indices of the corresponding non-zero values. +// / The type of index value is long. +// / +// / For example, the indices of the above X is: +// / ```text +// / indices(X) = [1, 2, 2, 1, 3, 0, 2, 3, 1]. +// / ``` +// / Note that the indices are sorted in lexicographical order for each row. func SparseMatrixIndexCSXStart(builder *flatbuffers.Builder) { builder.StartObject(5) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/SparseTensor.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/SparseTensor.go similarity index 87% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/SparseTensor.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/SparseTensor.go index 6f3f5579..8f67e1fc 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/SparseTensor.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/SparseTensor.go @@ -54,9 +54,9 @@ func (rcv *SparseTensor) MutateTypeType(n Type) bool { return rcv._tab.MutateByteSlot(4, byte(n)) } -/// The type of data contained in a value cell. -/// Currently only fixed-width value types are supported, -/// no strings or nested types. +// / The type of data contained in a value cell. +// / Currently only fixed-width value types are supported, +// / no strings or nested types. func (rcv *SparseTensor) Type(obj *flatbuffers.Table) bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(6)) if o != 0 { @@ -66,10 +66,10 @@ func (rcv *SparseTensor) Type(obj *flatbuffers.Table) bool { return false } -/// The type of data contained in a value cell. -/// Currently only fixed-width value types are supported, -/// no strings or nested types. -/// The dimensions of the tensor, optionally named. +// / The type of data contained in a value cell. +// / Currently only fixed-width value types are supported, +// / no strings or nested types. +// / The dimensions of the tensor, optionally named. func (rcv *SparseTensor) Shape(obj *TensorDim, j int) bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(8)) if o != 0 { @@ -90,8 +90,8 @@ func (rcv *SparseTensor) ShapeLength() int { return 0 } -/// The dimensions of the tensor, optionally named. -/// The number of non-zero values in a sparse tensor. +// / The dimensions of the tensor, optionally named. +// / The number of non-zero values in a sparse tensor. func (rcv *SparseTensor) NonZeroLength() int64 { o := flatbuffers.UOffsetT(rcv._tab.Offset(10)) if o != 0 { @@ -100,7 +100,7 @@ func (rcv *SparseTensor) NonZeroLength() int64 { return 0 } -/// The number of non-zero values in a sparse tensor. +// / The number of non-zero values in a sparse tensor. func (rcv *SparseTensor) MutateNonZeroLength(n int64) bool { return rcv._tab.MutateInt64Slot(10, n) } @@ -117,7 +117,7 @@ func (rcv *SparseTensor) MutateSparseIndexType(n SparseTensorIndex) bool { return rcv._tab.MutateByteSlot(12, byte(n)) } -/// Sparse tensor index +// / Sparse tensor index func (rcv *SparseTensor) SparseIndex(obj *flatbuffers.Table) bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(14)) if o != 0 { @@ -127,8 +127,8 @@ func (rcv *SparseTensor) SparseIndex(obj *flatbuffers.Table) bool { return false } -/// Sparse tensor index -/// The location and size of the tensor's data +// / Sparse tensor index +// / The location and size of the tensor's data func (rcv *SparseTensor) Data(obj *Buffer) *Buffer { o := flatbuffers.UOffsetT(rcv._tab.Offset(16)) if o != 0 { @@ -142,7 +142,7 @@ func (rcv *SparseTensor) Data(obj *Buffer) *Buffer { return nil } -/// The location and size of the tensor's data +// / The location and size of the tensor's data func SparseTensorStart(builder *flatbuffers.Builder) { builder.StartObject(7) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/SparseTensorIndex.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/SparseTensorIndex.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/SparseTensorIndex.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/SparseTensorIndex.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/SparseTensorIndexCOO.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/SparseTensorIndexCOO.go similarity index 62% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/SparseTensorIndexCOO.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/SparseTensorIndexCOO.go index f8eee99f..bf1c218e 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/SparseTensorIndexCOO.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/SparseTensorIndexCOO.go @@ -22,38 +22,38 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// ---------------------------------------------------------------------- -/// EXPERIMENTAL: Data structures for sparse tensors -/// Coordinate (COO) format of sparse tensor index. -/// -/// COO's index list are represented as a NxM matrix, -/// where N is the number of non-zero values, -/// and M is the number of dimensions of a sparse tensor. -/// -/// indicesBuffer stores the location and size of the data of this indices -/// matrix. The value type and the stride of the indices matrix is -/// specified in indicesType and indicesStrides fields. -/// -/// For example, let X be a 2x3x4x5 tensor, and it has the following -/// 6 non-zero values: -/// ```text -/// X[0, 1, 2, 0] := 1 -/// X[1, 1, 2, 3] := 2 -/// X[0, 2, 1, 0] := 3 -/// X[0, 1, 3, 0] := 4 -/// X[0, 1, 2, 1] := 5 -/// X[1, 2, 0, 4] := 6 -/// ``` -/// In COO format, the index matrix of X is the following 4x6 matrix: -/// ```text -/// [[0, 0, 0, 0, 1, 1], -/// [1, 1, 1, 2, 1, 2], -/// [2, 2, 3, 1, 2, 0], -/// [0, 1, 0, 0, 3, 4]] -/// ``` -/// When isCanonical is true, the indices is sorted in lexicographical order -/// (row-major order), and it does not have duplicated entries. Otherwise, -/// the indices may not be sorted, or may have duplicated entries. +// / ---------------------------------------------------------------------- +// / EXPERIMENTAL: Data structures for sparse tensors +// / Coordinate (COO) format of sparse tensor index. +// / +// / COO's index list are represented as a NxM matrix, +// / where N is the number of non-zero values, +// / and M is the number of dimensions of a sparse tensor. +// / +// / indicesBuffer stores the location and size of the data of this indices +// / matrix. The value type and the stride of the indices matrix is +// / specified in indicesType and indicesStrides fields. +// / +// / For example, let X be a 2x3x4x5 tensor, and it has the following +// / 6 non-zero values: +// / ```text +// / X[0, 1, 2, 0] := 1 +// / X[1, 1, 2, 3] := 2 +// / X[0, 2, 1, 0] := 3 +// / X[0, 1, 3, 0] := 4 +// / X[0, 1, 2, 1] := 5 +// / X[1, 2, 0, 4] := 6 +// / ``` +// / In COO format, the index matrix of X is the following 4x6 matrix: +// / ```text +// / [[0, 0, 0, 0, 1, 1], +// / [1, 1, 1, 2, 1, 2], +// / [2, 2, 3, 1, 2, 0], +// / [0, 1, 0, 0, 3, 4]] +// / ``` +// / When isCanonical is true, the indices is sorted in lexicographical order +// / (row-major order), and it does not have duplicated entries. Otherwise, +// / the indices may not be sorted, or may have duplicated entries. type SparseTensorIndexCOO struct { _tab flatbuffers.Table } @@ -74,7 +74,7 @@ func (rcv *SparseTensorIndexCOO) Table() flatbuffers.Table { return rcv._tab } -/// The type of values in indicesBuffer +// / The type of values in indicesBuffer func (rcv *SparseTensorIndexCOO) IndicesType(obj *Int) *Int { o := flatbuffers.UOffsetT(rcv._tab.Offset(4)) if o != 0 { @@ -88,9 +88,9 @@ func (rcv *SparseTensorIndexCOO) IndicesType(obj *Int) *Int { return nil } -/// The type of values in indicesBuffer -/// Non-negative byte offsets to advance one value cell along each dimension -/// If omitted, default to row-major order (C-like). +// / The type of values in indicesBuffer +// / Non-negative byte offsets to advance one value cell along each dimension +// / If omitted, default to row-major order (C-like). func (rcv *SparseTensorIndexCOO) IndicesStrides(j int) int64 { o := flatbuffers.UOffsetT(rcv._tab.Offset(6)) if o != 0 { @@ -108,8 +108,8 @@ func (rcv *SparseTensorIndexCOO) IndicesStridesLength() int { return 0 } -/// Non-negative byte offsets to advance one value cell along each dimension -/// If omitted, default to row-major order (C-like). +// / Non-negative byte offsets to advance one value cell along each dimension +// / If omitted, default to row-major order (C-like). func (rcv *SparseTensorIndexCOO) MutateIndicesStrides(j int, n int64) bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(6)) if o != 0 { @@ -119,7 +119,7 @@ func (rcv *SparseTensorIndexCOO) MutateIndicesStrides(j int, n int64) bool { return false } -/// The location and size of the indices matrix's data +// / The location and size of the indices matrix's data func (rcv *SparseTensorIndexCOO) IndicesBuffer(obj *Buffer) *Buffer { o := flatbuffers.UOffsetT(rcv._tab.Offset(8)) if o != 0 { @@ -133,12 +133,12 @@ func (rcv *SparseTensorIndexCOO) IndicesBuffer(obj *Buffer) *Buffer { return nil } -/// The location and size of the indices matrix's data -/// This flag is true if and only if the indices matrix is sorted in -/// row-major order, and does not have duplicated entries. -/// This sort order is the same as of Tensorflow's SparseTensor, -/// but it is inverse order of SciPy's canonical coo_matrix -/// (SciPy employs column-major order for its coo_matrix). +// / The location and size of the indices matrix's data +// / This flag is true if and only if the indices matrix is sorted in +// / row-major order, and does not have duplicated entries. +// / This sort order is the same as of Tensorflow's SparseTensor, +// / but it is inverse order of SciPy's canonical coo_matrix +// / (SciPy employs column-major order for its coo_matrix). func (rcv *SparseTensorIndexCOO) IsCanonical() bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(10)) if o != 0 { @@ -147,11 +147,11 @@ func (rcv *SparseTensorIndexCOO) IsCanonical() bool { return false } -/// This flag is true if and only if the indices matrix is sorted in -/// row-major order, and does not have duplicated entries. -/// This sort order is the same as of Tensorflow's SparseTensor, -/// but it is inverse order of SciPy's canonical coo_matrix -/// (SciPy employs column-major order for its coo_matrix). +// / This flag is true if and only if the indices matrix is sorted in +// / row-major order, and does not have duplicated entries. +// / This sort order is the same as of Tensorflow's SparseTensor, +// / but it is inverse order of SciPy's canonical coo_matrix +// / (SciPy employs column-major order for its coo_matrix). func (rcv *SparseTensorIndexCOO) MutateIsCanonical(n bool) bool { return rcv._tab.MutateBoolSlot(10, n) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/SparseTensorIndexCSF.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/SparseTensorIndexCSF.go similarity index 51% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/SparseTensorIndexCSF.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/SparseTensorIndexCSF.go index a824c84e..66226e04 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/SparseTensorIndexCSF.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/SparseTensorIndexCSF.go @@ -22,7 +22,7 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// Compressed Sparse Fiber (CSF) sparse tensor index. +// / Compressed Sparse Fiber (CSF) sparse tensor index. type SparseTensorIndexCSF struct { _tab flatbuffers.Table } @@ -43,37 +43,37 @@ func (rcv *SparseTensorIndexCSF) Table() flatbuffers.Table { return rcv._tab } -/// CSF is a generalization of compressed sparse row (CSR) index. -/// See [smith2017knl](http://shaden.io/pub-files/smith2017knl.pdf) -/// -/// CSF index recursively compresses each dimension of a tensor into a set -/// of prefix trees. Each path from a root to leaf forms one tensor -/// non-zero index. CSF is implemented with two arrays of buffers and one -/// arrays of integers. -/// -/// For example, let X be a 2x3x4x5 tensor and let it have the following -/// 8 non-zero values: -/// ```text -/// X[0, 0, 0, 1] := 1 -/// X[0, 0, 0, 2] := 2 -/// X[0, 1, 0, 0] := 3 -/// X[0, 1, 0, 2] := 4 -/// X[0, 1, 1, 0] := 5 -/// X[1, 1, 1, 0] := 6 -/// X[1, 1, 1, 1] := 7 -/// X[1, 1, 1, 2] := 8 -/// ``` -/// As a prefix tree this would be represented as: -/// ```text -/// 0 1 -/// / \ | -/// 0 1 1 -/// / / \ | -/// 0 0 1 1 -/// /| /| | /| | -/// 1 2 0 2 0 0 1 2 -/// ``` -/// The type of values in indptrBuffers +// / CSF is a generalization of compressed sparse row (CSR) index. +// / See [smith2017knl](http://shaden.io/pub-files/smith2017knl.pdf) +// / +// / CSF index recursively compresses each dimension of a tensor into a set +// / of prefix trees. Each path from a root to leaf forms one tensor +// / non-zero index. CSF is implemented with two arrays of buffers and one +// / arrays of integers. +// / +// / For example, let X be a 2x3x4x5 tensor and let it have the following +// / 8 non-zero values: +// / ```text +// / X[0, 0, 0, 1] := 1 +// / X[0, 0, 0, 2] := 2 +// / X[0, 1, 0, 0] := 3 +// / X[0, 1, 0, 2] := 4 +// / X[0, 1, 1, 0] := 5 +// / X[1, 1, 1, 0] := 6 +// / X[1, 1, 1, 1] := 7 +// / X[1, 1, 1, 2] := 8 +// / ``` +// / As a prefix tree this would be represented as: +// / ```text +// / 0 1 +// / / \ | +// / 0 1 1 +// / / / \ | +// / 0 0 1 1 +// / /| /| | /| | +// / 1 2 0 2 0 0 1 2 +// / ``` +// / The type of values in indptrBuffers func (rcv *SparseTensorIndexCSF) IndptrType(obj *Int) *Int { o := flatbuffers.UOffsetT(rcv._tab.Offset(4)) if o != 0 { @@ -87,51 +87,51 @@ func (rcv *SparseTensorIndexCSF) IndptrType(obj *Int) *Int { return nil } -/// CSF is a generalization of compressed sparse row (CSR) index. -/// See [smith2017knl](http://shaden.io/pub-files/smith2017knl.pdf) -/// -/// CSF index recursively compresses each dimension of a tensor into a set -/// of prefix trees. Each path from a root to leaf forms one tensor -/// non-zero index. CSF is implemented with two arrays of buffers and one -/// arrays of integers. -/// -/// For example, let X be a 2x3x4x5 tensor and let it have the following -/// 8 non-zero values: -/// ```text -/// X[0, 0, 0, 1] := 1 -/// X[0, 0, 0, 2] := 2 -/// X[0, 1, 0, 0] := 3 -/// X[0, 1, 0, 2] := 4 -/// X[0, 1, 1, 0] := 5 -/// X[1, 1, 1, 0] := 6 -/// X[1, 1, 1, 1] := 7 -/// X[1, 1, 1, 2] := 8 -/// ``` -/// As a prefix tree this would be represented as: -/// ```text -/// 0 1 -/// / \ | -/// 0 1 1 -/// / / \ | -/// 0 0 1 1 -/// /| /| | /| | -/// 1 2 0 2 0 0 1 2 -/// ``` -/// The type of values in indptrBuffers -/// indptrBuffers stores the sparsity structure. -/// Each two consecutive dimensions in a tensor correspond to a buffer in -/// indptrBuffers. A pair of consecutive values at `indptrBuffers[dim][i]` -/// and `indptrBuffers[dim][i + 1]` signify a range of nodes in -/// `indicesBuffers[dim + 1]` who are children of `indicesBuffers[dim][i]` node. -/// -/// For example, the indptrBuffers for the above X is: -/// ```text -/// indptrBuffer(X) = [ -/// [0, 2, 3], -/// [0, 1, 3, 4], -/// [0, 2, 4, 5, 8] -/// ]. -/// ``` +// / CSF is a generalization of compressed sparse row (CSR) index. +// / See [smith2017knl](http://shaden.io/pub-files/smith2017knl.pdf) +// / +// / CSF index recursively compresses each dimension of a tensor into a set +// / of prefix trees. Each path from a root to leaf forms one tensor +// / non-zero index. CSF is implemented with two arrays of buffers and one +// / arrays of integers. +// / +// / For example, let X be a 2x3x4x5 tensor and let it have the following +// / 8 non-zero values: +// / ```text +// / X[0, 0, 0, 1] := 1 +// / X[0, 0, 0, 2] := 2 +// / X[0, 1, 0, 0] := 3 +// / X[0, 1, 0, 2] := 4 +// / X[0, 1, 1, 0] := 5 +// / X[1, 1, 1, 0] := 6 +// / X[1, 1, 1, 1] := 7 +// / X[1, 1, 1, 2] := 8 +// / ``` +// / As a prefix tree this would be represented as: +// / ```text +// / 0 1 +// / / \ | +// / 0 1 1 +// / / / \ | +// / 0 0 1 1 +// / /| /| | /| | +// / 1 2 0 2 0 0 1 2 +// / ``` +// / The type of values in indptrBuffers +// / indptrBuffers stores the sparsity structure. +// / Each two consecutive dimensions in a tensor correspond to a buffer in +// / indptrBuffers. A pair of consecutive values at `indptrBuffers[dim][i]` +// / and `indptrBuffers[dim][i + 1]` signify a range of nodes in +// / `indicesBuffers[dim + 1]` who are children of `indicesBuffers[dim][i]` node. +// / +// / For example, the indptrBuffers for the above X is: +// / ```text +// / indptrBuffer(X) = [ +// / [0, 2, 3], +// / [0, 1, 3, 4], +// / [0, 2, 4, 5, 8] +// / ]. +// / ``` func (rcv *SparseTensorIndexCSF) IndptrBuffers(obj *Buffer, j int) bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(6)) if o != 0 { @@ -151,21 +151,21 @@ func (rcv *SparseTensorIndexCSF) IndptrBuffersLength() int { return 0 } -/// indptrBuffers stores the sparsity structure. -/// Each two consecutive dimensions in a tensor correspond to a buffer in -/// indptrBuffers. A pair of consecutive values at `indptrBuffers[dim][i]` -/// and `indptrBuffers[dim][i + 1]` signify a range of nodes in -/// `indicesBuffers[dim + 1]` who are children of `indicesBuffers[dim][i]` node. -/// -/// For example, the indptrBuffers for the above X is: -/// ```text -/// indptrBuffer(X) = [ -/// [0, 2, 3], -/// [0, 1, 3, 4], -/// [0, 2, 4, 5, 8] -/// ]. -/// ``` -/// The type of values in indicesBuffers +// / indptrBuffers stores the sparsity structure. +// / Each two consecutive dimensions in a tensor correspond to a buffer in +// / indptrBuffers. A pair of consecutive values at `indptrBuffers[dim][i]` +// / and `indptrBuffers[dim][i + 1]` signify a range of nodes in +// / `indicesBuffers[dim + 1]` who are children of `indicesBuffers[dim][i]` node. +// / +// / For example, the indptrBuffers for the above X is: +// / ```text +// / indptrBuffer(X) = [ +// / [0, 2, 3], +// / [0, 1, 3, 4], +// / [0, 2, 4, 5, 8] +// / ]. +// / ``` +// / The type of values in indicesBuffers func (rcv *SparseTensorIndexCSF) IndicesType(obj *Int) *Int { o := flatbuffers.UOffsetT(rcv._tab.Offset(8)) if o != 0 { @@ -179,18 +179,18 @@ func (rcv *SparseTensorIndexCSF) IndicesType(obj *Int) *Int { return nil } -/// The type of values in indicesBuffers -/// indicesBuffers stores values of nodes. -/// Each tensor dimension corresponds to a buffer in indicesBuffers. -/// For example, the indicesBuffers for the above X is: -/// ```text -/// indicesBuffer(X) = [ -/// [0, 1], -/// [0, 1, 1], -/// [0, 0, 1, 1], -/// [1, 2, 0, 2, 0, 0, 1, 2] -/// ]. -/// ``` +// / The type of values in indicesBuffers +// / indicesBuffers stores values of nodes. +// / Each tensor dimension corresponds to a buffer in indicesBuffers. +// / For example, the indicesBuffers for the above X is: +// / ```text +// / indicesBuffer(X) = [ +// / [0, 1], +// / [0, 1, 1], +// / [0, 0, 1, 1], +// / [1, 2, 0, 2, 0, 0, 1, 2] +// / ]. +// / ``` func (rcv *SparseTensorIndexCSF) IndicesBuffers(obj *Buffer, j int) bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(10)) if o != 0 { @@ -210,23 +210,23 @@ func (rcv *SparseTensorIndexCSF) IndicesBuffersLength() int { return 0 } -/// indicesBuffers stores values of nodes. -/// Each tensor dimension corresponds to a buffer in indicesBuffers. -/// For example, the indicesBuffers for the above X is: -/// ```text -/// indicesBuffer(X) = [ -/// [0, 1], -/// [0, 1, 1], -/// [0, 0, 1, 1], -/// [1, 2, 0, 2, 0, 0, 1, 2] -/// ]. -/// ``` -/// axisOrder stores the sequence in which dimensions were traversed to -/// produce the prefix tree. -/// For example, the axisOrder for the above X is: -/// ```text -/// axisOrder(X) = [0, 1, 2, 3]. -/// ``` +// / indicesBuffers stores values of nodes. +// / Each tensor dimension corresponds to a buffer in indicesBuffers. +// / For example, the indicesBuffers for the above X is: +// / ```text +// / indicesBuffer(X) = [ +// / [0, 1], +// / [0, 1, 1], +// / [0, 0, 1, 1], +// / [1, 2, 0, 2, 0, 0, 1, 2] +// / ]. +// / ``` +// / axisOrder stores the sequence in which dimensions were traversed to +// / produce the prefix tree. +// / For example, the axisOrder for the above X is: +// / ```text +// / axisOrder(X) = [0, 1, 2, 3]. +// / ``` func (rcv *SparseTensorIndexCSF) AxisOrder(j int) int32 { o := flatbuffers.UOffsetT(rcv._tab.Offset(12)) if o != 0 { @@ -244,12 +244,12 @@ func (rcv *SparseTensorIndexCSF) AxisOrderLength() int { return 0 } -/// axisOrder stores the sequence in which dimensions were traversed to -/// produce the prefix tree. -/// For example, the axisOrder for the above X is: -/// ```text -/// axisOrder(X) = [0, 1, 2, 3]. -/// ``` +// / axisOrder stores the sequence in which dimensions were traversed to +// / produce the prefix tree. +// / For example, the axisOrder for the above X is: +// / ```text +// / axisOrder(X) = [0, 1, 2, 3]. +// / ``` func (rcv *SparseTensorIndexCSF) MutateAxisOrder(j int, n int32) bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(12)) if o != 0 { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Struct_.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Struct_.go similarity index 88% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Struct_.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Struct_.go index 427e7060..73752a17 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Struct_.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Struct_.go @@ -22,9 +22,9 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// A Struct_ in the flatbuffer metadata is the same as an Arrow Struct -/// (according to the physical memory layout). We used Struct_ here as -/// Struct is a reserved word in Flatbuffers +// / A Struct_ in the flatbuffer metadata is the same as an Arrow Struct +// / (according to the physical memory layout). We used Struct_ here as +// / Struct is a reserved word in Flatbuffers type Struct_ struct { _tab flatbuffers.Table } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Tensor.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Tensor.go similarity index 84% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Tensor.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Tensor.go index 39d70e35..47bfe806 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Tensor.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Tensor.go @@ -54,8 +54,8 @@ func (rcv *Tensor) MutateTypeType(n Type) bool { return rcv._tab.MutateByteSlot(4, byte(n)) } -/// The type of data contained in a value cell. Currently only fixed-width -/// value types are supported, no strings or nested types +// / The type of data contained in a value cell. Currently only fixed-width +// / value types are supported, no strings or nested types func (rcv *Tensor) Type(obj *flatbuffers.Table) bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(6)) if o != 0 { @@ -65,9 +65,9 @@ func (rcv *Tensor) Type(obj *flatbuffers.Table) bool { return false } -/// The type of data contained in a value cell. Currently only fixed-width -/// value types are supported, no strings or nested types -/// The dimensions of the tensor, optionally named +// / The type of data contained in a value cell. Currently only fixed-width +// / value types are supported, no strings or nested types +// / The dimensions of the tensor, optionally named func (rcv *Tensor) Shape(obj *TensorDim, j int) bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(8)) if o != 0 { @@ -88,9 +88,9 @@ func (rcv *Tensor) ShapeLength() int { return 0 } -/// The dimensions of the tensor, optionally named -/// Non-negative byte offsets to advance one value cell along each dimension -/// If omitted, default to row-major order (C-like). +// / The dimensions of the tensor, optionally named +// / Non-negative byte offsets to advance one value cell along each dimension +// / If omitted, default to row-major order (C-like). func (rcv *Tensor) Strides(j int) int64 { o := flatbuffers.UOffsetT(rcv._tab.Offset(10)) if o != 0 { @@ -108,8 +108,8 @@ func (rcv *Tensor) StridesLength() int { return 0 } -/// Non-negative byte offsets to advance one value cell along each dimension -/// If omitted, default to row-major order (C-like). +// / Non-negative byte offsets to advance one value cell along each dimension +// / If omitted, default to row-major order (C-like). func (rcv *Tensor) MutateStrides(j int, n int64) bool { o := flatbuffers.UOffsetT(rcv._tab.Offset(10)) if o != 0 { @@ -119,7 +119,7 @@ func (rcv *Tensor) MutateStrides(j int, n int64) bool { return false } -/// The location and size of the tensor's data +// / The location and size of the tensor's data func (rcv *Tensor) Data(obj *Buffer) *Buffer { o := flatbuffers.UOffsetT(rcv._tab.Offset(12)) if o != 0 { @@ -133,7 +133,7 @@ func (rcv *Tensor) Data(obj *Buffer) *Buffer { return nil } -/// The location and size of the tensor's data +// / The location and size of the tensor's data func TensorStart(builder *flatbuffers.Builder) { builder.StartObject(5) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/TensorDim.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/TensorDim.go similarity index 88% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/TensorDim.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/TensorDim.go index 14b82120..c6413b6a 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/TensorDim.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/TensorDim.go @@ -22,9 +22,9 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// ---------------------------------------------------------------------- -/// Data structures for dense tensors -/// Shape data for a single axis in a tensor +// / ---------------------------------------------------------------------- +// / Data structures for dense tensors +// / Shape data for a single axis in a tensor type TensorDim struct { _tab flatbuffers.Table } @@ -45,7 +45,7 @@ func (rcv *TensorDim) Table() flatbuffers.Table { return rcv._tab } -/// Length of dimension +// / Length of dimension func (rcv *TensorDim) Size() int64 { o := flatbuffers.UOffsetT(rcv._tab.Offset(4)) if o != 0 { @@ -54,12 +54,12 @@ func (rcv *TensorDim) Size() int64 { return 0 } -/// Length of dimension +// / Length of dimension func (rcv *TensorDim) MutateSize(n int64) bool { return rcv._tab.MutateInt64Slot(4, n) } -/// Name of the dimension, optional +// / Name of the dimension, optional func (rcv *TensorDim) Name() []byte { o := flatbuffers.UOffsetT(rcv._tab.Offset(6)) if o != 0 { @@ -68,7 +68,7 @@ func (rcv *TensorDim) Name() []byte { return nil } -/// Name of the dimension, optional +// / Name of the dimension, optional func TensorDimStart(builder *flatbuffers.Builder) { builder.StartObject(2) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Time.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Time.go similarity index 73% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Time.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Time.go index 2fb6e4c1..13038a6e 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Time.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Time.go @@ -22,20 +22,20 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// Time is either a 32-bit or 64-bit signed integer type representing an -/// elapsed time since midnight, stored in either of four units: seconds, -/// milliseconds, microseconds or nanoseconds. -/// -/// The integer `bitWidth` depends on the `unit` and must be one of the following: -/// * SECOND and MILLISECOND: 32 bits -/// * MICROSECOND and NANOSECOND: 64 bits -/// -/// The allowed values are between 0 (inclusive) and 86400 (=24*60*60) seconds -/// (exclusive), adjusted for the time unit (for example, up to 86400000 -/// exclusive for the MILLISECOND unit). -/// This definition doesn't allow for leap seconds. Time values from -/// measurements with leap seconds will need to be corrected when ingesting -/// into Arrow (for example by replacing the value 86400 with 86399). +// / Time is either a 32-bit or 64-bit signed integer type representing an +// / elapsed time since midnight, stored in either of four units: seconds, +// / milliseconds, microseconds or nanoseconds. +// / +// / The integer `bitWidth` depends on the `unit` and must be one of the following: +// / * SECOND and MILLISECOND: 32 bits +// / * MICROSECOND and NANOSECOND: 64 bits +// / +// / The allowed values are between 0 (inclusive) and 86400 (=24*60*60) seconds +// / (exclusive), adjusted for the time unit (for example, up to 86400000 +// / exclusive for the MILLISECOND unit). +// / This definition doesn't allow for leap seconds. Time values from +// / measurements with leap seconds will need to be corrected when ingesting +// / into Arrow (for example by replacing the value 86400 with 86399). type Time struct { _tab flatbuffers.Table } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/TimeUnit.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/TimeUnit.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/TimeUnit.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/TimeUnit.go diff --git a/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Timestamp.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Timestamp.go new file mode 100644 index 00000000..ce172bac --- /dev/null +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Timestamp.go @@ -0,0 +1,201 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by the FlatBuffers compiler. DO NOT EDIT. + +package flatbuf + +import ( + flatbuffers "github.com/google/flatbuffers/go" +) + +// / Timestamp is a 64-bit signed integer representing an elapsed time since a +// / fixed epoch, stored in either of four units: seconds, milliseconds, +// / microseconds or nanoseconds, and is optionally annotated with a timezone. +// / +// / Timestamp values do not include any leap seconds (in other words, all +// / days are considered 86400 seconds long). +// / +// / Timestamps with a non-empty timezone +// / ------------------------------------ +// / +// / If a Timestamp column has a non-empty timezone value, its epoch is +// / 1970-01-01 00:00:00 (January 1st 1970, midnight) in the *UTC* timezone +// / (the Unix epoch), regardless of the Timestamp's own timezone. +// / +// / Therefore, timestamp values with a non-empty timezone correspond to +// / physical points in time together with some additional information about +// / how the data was obtained and/or how to display it (the timezone). +// / +// / For example, the timestamp value 0 with the timezone string "Europe/Paris" +// / corresponds to "January 1st 1970, 00h00" in the UTC timezone, but the +// / application may prefer to display it as "January 1st 1970, 01h00" in +// / the Europe/Paris timezone (which is the same physical point in time). +// / +// / One consequence is that timestamp values with a non-empty timezone +// / can be compared and ordered directly, since they all share the same +// / well-known point of reference (the Unix epoch). +// / +// / Timestamps with an unset / empty timezone +// / ----------------------------------------- +// / +// / If a Timestamp column has no timezone value, its epoch is +// / 1970-01-01 00:00:00 (January 1st 1970, midnight) in an *unknown* timezone. +// / +// / Therefore, timestamp values without a timezone cannot be meaningfully +// / interpreted as physical points in time, but only as calendar / clock +// / indications ("wall clock time") in an unspecified timezone. +// / +// / For example, the timestamp value 0 with an empty timezone string +// / corresponds to "January 1st 1970, 00h00" in an unknown timezone: there +// / is not enough information to interpret it as a well-defined physical +// / point in time. +// / +// / One consequence is that timestamp values without a timezone cannot +// / be reliably compared or ordered, since they may have different points of +// / reference. In particular, it is *not* possible to interpret an unset +// / or empty timezone as the same as "UTC". +// / +// / Conversion between timezones +// / ---------------------------- +// / +// / If a Timestamp column has a non-empty timezone, changing the timezone +// / to a different non-empty value is a metadata-only operation: +// / the timestamp values need not change as their point of reference remains +// / the same (the Unix epoch). +// / +// / However, if a Timestamp column has no timezone value, changing it to a +// / non-empty value requires to think about the desired semantics. +// / One possibility is to assume that the original timestamp values are +// / relative to the epoch of the timezone being set; timestamp values should +// / then adjusted to the Unix epoch (for example, changing the timezone from +// / empty to "Europe/Paris" would require converting the timestamp values +// / from "Europe/Paris" to "UTC", which seems counter-intuitive but is +// / nevertheless correct). +// / +// / Guidelines for encoding data from external libraries +// / ---------------------------------------------------- +// / +// / Date & time libraries often have multiple different data types for temporal +// / data. In order to ease interoperability between different implementations the +// / Arrow project has some recommendations for encoding these types into a Timestamp +// / column. +// / +// / An "instant" represents a physical point in time that has no relevant timezone +// / (for example, astronomical data). To encode an instant, use a Timestamp with +// / the timezone string set to "UTC", and make sure the Timestamp values +// / are relative to the UTC epoch (January 1st 1970, midnight). +// / +// / A "zoned date-time" represents a physical point in time annotated with an +// / informative timezone (for example, the timezone in which the data was +// / recorded). To encode a zoned date-time, use a Timestamp with the timezone +// / string set to the name of the timezone, and make sure the Timestamp values +// / are relative to the UTC epoch (January 1st 1970, midnight). +// / +// / (There is some ambiguity between an instant and a zoned date-time with the +// / UTC timezone. Both of these are stored the same in Arrow. Typically, +// / this distinction does not matter. If it does, then an application should +// / use custom metadata or an extension type to distinguish between the two cases.) +// / +// / An "offset date-time" represents a physical point in time combined with an +// / explicit offset from UTC. To encode an offset date-time, use a Timestamp +// / with the timezone string set to the numeric timezone offset string +// / (e.g. "+03:00"), and make sure the Timestamp values are relative to +// / the UTC epoch (January 1st 1970, midnight). +// / +// / A "naive date-time" (also called "local date-time" in some libraries) +// / represents a wall clock time combined with a calendar date, but with +// / no indication of how to map this information to a physical point in time. +// / Naive date-times must be handled with care because of this missing +// / information, and also because daylight saving time (DST) may make +// / some values ambiguous or nonexistent. A naive date-time may be +// / stored as a struct with Date and Time fields. However, it may also be +// / encoded into a Timestamp column with an empty timezone. The timestamp +// / values should be computed "as if" the timezone of the date-time values +// / was UTC; for example, the naive date-time "January 1st 1970, 00h00" would +// / be encoded as timestamp value 0. +type Timestamp struct { + _tab flatbuffers.Table +} + +func GetRootAsTimestamp(buf []byte, offset flatbuffers.UOffsetT) *Timestamp { + n := flatbuffers.GetUOffsetT(buf[offset:]) + x := &Timestamp{} + x.Init(buf, n+offset) + return x +} + +func (rcv *Timestamp) Init(buf []byte, i flatbuffers.UOffsetT) { + rcv._tab.Bytes = buf + rcv._tab.Pos = i +} + +func (rcv *Timestamp) Table() flatbuffers.Table { + return rcv._tab +} + +func (rcv *Timestamp) Unit() TimeUnit { + o := flatbuffers.UOffsetT(rcv._tab.Offset(4)) + if o != 0 { + return TimeUnit(rcv._tab.GetInt16(o + rcv._tab.Pos)) + } + return 0 +} + +func (rcv *Timestamp) MutateUnit(n TimeUnit) bool { + return rcv._tab.MutateInt16Slot(4, int16(n)) +} + +// / The timezone is an optional string indicating the name of a timezone, +// / one of: +// / +// / * As used in the Olson timezone database (the "tz database" or +// / "tzdata"), such as "America/New_York". +// / * An absolute timezone offset of the form "+XX:XX" or "-XX:XX", +// / such as "+07:30". +// / +// / Whether a timezone string is present indicates different semantics about +// / the data (see above). +func (rcv *Timestamp) Timezone() []byte { + o := flatbuffers.UOffsetT(rcv._tab.Offset(6)) + if o != 0 { + return rcv._tab.ByteVector(o + rcv._tab.Pos) + } + return nil +} + +// / The timezone is an optional string indicating the name of a timezone, +// / one of: +// / +// / * As used in the Olson timezone database (the "tz database" or +// / "tzdata"), such as "America/New_York". +// / * An absolute timezone offset of the form "+XX:XX" or "-XX:XX", +// / such as "+07:30". +// / +// / Whether a timezone string is present indicates different semantics about +// / the data (see above). +func TimestampStart(builder *flatbuffers.Builder) { + builder.StartObject(2) +} +func TimestampAddUnit(builder *flatbuffers.Builder, unit TimeUnit) { + builder.PrependInt16Slot(0, int16(unit), 0) +} +func TimestampAddTimezone(builder *flatbuffers.Builder, timezone flatbuffers.UOffsetT) { + builder.PrependUOffsetTSlot(1, flatbuffers.UOffsetT(timezone), 0) +} +func TimestampEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT { + return builder.EndObject() +} diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Type.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Type.go similarity index 94% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Type.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Type.go index ab2bce9c..df8ba865 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Type.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Type.go @@ -20,9 +20,9 @@ package flatbuf import "strconv" -/// ---------------------------------------------------------------------- -/// Top-level Type value, enabling extensible type-specific metadata. We can -/// add new logical types to Type without breaking backwards compatibility +// / ---------------------------------------------------------------------- +// / Top-level Type value, enabling extensible type-specific metadata. We can +// / add new logical types to Type without breaking backwards compatibility type Type byte const ( diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Union.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Union.go similarity index 90% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Union.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Union.go index e34121d4..0367fb3c 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Union.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Union.go @@ -22,10 +22,10 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// A union is a complex type with children in Field -/// By default ids in the type vector refer to the offsets in the children -/// optionally typeIds provides an indirection between the child offset and the type id -/// for each child `typeIds[offset]` is the id used in the type vector +// / A union is a complex type with children in Field +// / By default ids in the type vector refer to the offsets in the children +// / optionally typeIds provides an indirection between the child offset and the type id +// / for each child `typeIds[offset]` is the id used in the type vector type Union struct { _tab flatbuffers.Table } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/UnionMode.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/UnionMode.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/UnionMode.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/UnionMode.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Utf8.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Utf8.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Utf8.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Utf8.go index 4ff365a3..cab4ce77 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Utf8.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Utf8.go @@ -22,7 +22,7 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// Unicode with UTF-8 encoding +// / Unicode with UTF-8 encoding type Utf8 struct { _tab flatbuffers.Table } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Utf8View.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Utf8View.go similarity index 76% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Utf8View.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Utf8View.go index 9cf82149..f294126a 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Utf8View.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/flatbuf/Utf8View.go @@ -22,13 +22,13 @@ import ( flatbuffers "github.com/google/flatbuffers/go" ) -/// Logically the same as Utf8, but the internal representation uses a view -/// struct that contains the string length and either the string's entire data -/// inline (for small strings) or an inlined prefix, an index of another buffer, -/// and an offset pointing to a slice in that buffer (for non-small strings). -/// -/// Since it uses a variable number of data buffers, each Field with this type -/// must have a corresponding entry in `variadicBufferCounts`. +// / Logically the same as Utf8, but the internal representation uses a view +// / struct that contains the string length and either the string's entire data +// / inline (for small strings) or an inlined prefix, an index of another buffer, +// / and an offset pointing to a slice in that buffer (for non-small strings). +// / +// / Since it uses a variable number of data buffers, each Field with this type +// / must have a corresponding entry in `variadicBufferCounts`. type Utf8View struct { _tab flatbuffers.Table } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/utils.go b/vendor/github.com/apache/arrow-go/v18/arrow/internal/utils.go similarity index 80% rename from vendor/github.com/apache/arrow/go/v14/arrow/internal/utils.go rename to vendor/github.com/apache/arrow-go/v18/arrow/internal/utils.go index 265f030d..d471e62a 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/utils.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/internal/utils.go @@ -17,8 +17,8 @@ package internal import ( - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/internal/flatbuf" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/internal/flatbuf" ) const CurMetadataVersion = flatbuf.MetadataVersionV5 @@ -45,3 +45,15 @@ func HasValidityBitmap(id arrow.Type, version flatbuf.MetadataVersion) bool { } return true } + +// HasBufferSizesBuffer returns whether a given type has an extra buffer +// in the C ABI to store the sizes of other buffers. Currently this is only +// StringView and BinaryView. +func HasBufferSizesBuffer(id arrow.Type) bool { + switch id { + case arrow.STRING_VIEW, arrow.BINARY_VIEW: + return true + default: + return false + } +} diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/ipc/compression.go b/vendor/github.com/apache/arrow-go/v18/arrow/ipc/compression.go similarity index 93% rename from vendor/github.com/apache/arrow/go/v14/arrow/ipc/compression.go rename to vendor/github.com/apache/arrow-go/v18/arrow/ipc/compression.go index 73fb9165..f74510a5 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/ipc/compression.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/ipc/compression.go @@ -19,9 +19,9 @@ package ipc import ( "io" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/internal/flatbuf" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/internal/flatbuf" + "github.com/apache/arrow-go/v18/arrow/memory" "github.com/klauspost/compress/zstd" "github.com/pierrec/lz4/v4" ) @@ -104,7 +104,9 @@ type lz4Decompressor struct { *lz4.Reader } -func (z *lz4Decompressor) Close() {} +func (z *lz4Decompressor) Close() { + z.Reader.Reset(nil) +} func getDecompressor(codec flatbuf.CompressionType) decompressor { switch codec { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/ipc/endian_swap.go b/vendor/github.com/apache/arrow-go/v18/arrow/ipc/endian_swap.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/ipc/endian_swap.go rename to vendor/github.com/apache/arrow-go/v18/arrow/ipc/endian_swap.go index d98fec10..80d8b3cc 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/ipc/endian_swap.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/ipc/endian_swap.go @@ -18,11 +18,12 @@ package ipc import ( "errors" + "fmt" "math/bits" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/memory" ) // swap the endianness of the array's buffers as needed in-place to save @@ -119,7 +120,10 @@ func swapType(dt arrow.DataType, data *array.Data) (err error) { return swapType(dt.IndexType, data) case arrow.FixedWidthDataType: byteSwapBuffer(dt.BitWidth(), data.Buffers()[1]) + default: + err = fmt.Errorf("%w: swapping endianness of %s", arrow.ErrNotImplemented, dt) } + return } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/ipc/file_reader.go b/vendor/github.com/apache/arrow-go/v18/arrow/ipc/file_reader.go similarity index 90% rename from vendor/github.com/apache/arrow/go/v14/arrow/ipc/file_reader.go rename to vendor/github.com/apache/arrow-go/v18/arrow/ipc/file_reader.go index 10cb2cae..2715831e 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/ipc/file_reader.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/ipc/file_reader.go @@ -23,14 +23,14 @@ import ( "fmt" "io" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/endian" - "github.com/apache/arrow/go/v14/arrow/internal" - "github.com/apache/arrow/go/v14/arrow/internal/dictutils" - "github.com/apache/arrow/go/v14/arrow/internal/flatbuf" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/endian" + "github.com/apache/arrow-go/v18/arrow/internal" + "github.com/apache/arrow-go/v18/arrow/internal/dictutils" + "github.com/apache/arrow-go/v18/arrow/internal/flatbuf" + "github.com/apache/arrow-go/v18/arrow/memory" ) // FileReader is an Arrow file reader. @@ -351,9 +351,9 @@ func newRecord(schema *arrow.Schema, memo *dictutils.Memo, meta *memory.Buffer, } pos := dictutils.NewFieldPos() - cols := make([]arrow.Array, len(schema.Fields())) - for i, field := range schema.Fields() { - data := ctx.loadArray(field.Type) + cols := make([]arrow.Array, schema.NumFields()) + for i := 0; i < schema.NumFields(); i++ { + data := ctx.loadArray(schema.Field(i).Type) defer data.Release() if err := dictutils.ResolveFieldDict(memo, data, pos.Child(int32(i)), mem); err != nil { @@ -430,13 +430,18 @@ func (src *ipcSource) fieldMetadata(i int) *flatbuf.FieldNode { return &node } +func (src *ipcSource) variadicCount(i int) int64 { + return src.meta.VariadicBufferCounts(i) +} + type arrayLoaderContext struct { - src ipcSource - ifield int - ibuffer int - max int - memo *dictutils.Memo - version MetadataVersion + src ipcSource + ifield int + ibuffer int + ivariadic int + max int + memo *dictutils.Memo + version MetadataVersion } func (ctx *arrayLoaderContext) field() *flatbuf.FieldNode { @@ -451,6 +456,12 @@ func (ctx *arrayLoaderContext) buffer() *memory.Buffer { return buf } +func (ctx *arrayLoaderContext) variadic() int64 { + v := ctx.src.variadicCount(ctx.ivariadic) + ctx.ivariadic++ + return v +} + func (ctx *arrayLoaderContext) loadArray(dt arrow.DataType) arrow.ArrayData { switch dt := dt.(type) { case *arrow.NullType: @@ -465,7 +476,7 @@ func (ctx *arrayLoaderContext) loadArray(dt arrow.DataType) arrow.ArrayData { *arrow.Int8Type, *arrow.Int16Type, *arrow.Int32Type, *arrow.Int64Type, *arrow.Uint8Type, *arrow.Uint16Type, *arrow.Uint32Type, *arrow.Uint64Type, *arrow.Float16Type, *arrow.Float32Type, *arrow.Float64Type, - *arrow.Decimal128Type, *arrow.Decimal256Type, + arrow.DecimalType, *arrow.Time32Type, *arrow.Time64Type, *arrow.TimestampType, *arrow.Date32Type, *arrow.Date64Type, @@ -476,6 +487,9 @@ func (ctx *arrayLoaderContext) loadArray(dt arrow.DataType) arrow.ArrayData { case *arrow.BinaryType, *arrow.StringType, *arrow.LargeStringType, *arrow.LargeBinaryType: return ctx.loadBinary(dt) + case arrow.BinaryViewDataType: + return ctx.loadBinaryView(dt) + case *arrow.FixedSizeBinaryType: return ctx.loadFixedSizeBinary(dt) @@ -507,7 +521,7 @@ func (ctx *arrayLoaderContext) loadArray(dt arrow.DataType) arrow.ArrayData { case *arrow.RunEndEncodedType: field, buffers := ctx.loadCommon(dt.ID(), 1) - defer releaseBuffers(buffers) + defer memory.ReleaseBuffers(buffers) runEnds := ctx.loadChild(dt.RunEnds()) defer runEnds.Release() @@ -569,7 +583,7 @@ func (ctx *arrayLoaderContext) loadPrimitive(dt arrow.DataType) arrow.ArrayData buffers = append(buffers, ctx.buffer()) } - defer releaseBuffers(buffers) + defer memory.ReleaseBuffers(buffers) return array.NewData(dt, int(field.Length()), buffers, nil, int(field.NullCount()), 0) } @@ -577,7 +591,19 @@ func (ctx *arrayLoaderContext) loadPrimitive(dt arrow.DataType) arrow.ArrayData func (ctx *arrayLoaderContext) loadBinary(dt arrow.DataType) arrow.ArrayData { field, buffers := ctx.loadCommon(dt.ID(), 3) buffers = append(buffers, ctx.buffer(), ctx.buffer()) - defer releaseBuffers(buffers) + defer memory.ReleaseBuffers(buffers) + + return array.NewData(dt, int(field.Length()), buffers, nil, int(field.NullCount()), 0) +} + +func (ctx *arrayLoaderContext) loadBinaryView(dt arrow.DataType) arrow.ArrayData { + nVariadicBufs := ctx.variadic() + field, buffers := ctx.loadCommon(dt.ID(), 2+int(nVariadicBufs)) + buffers = append(buffers, ctx.buffer()) + for i := 0; i < int(nVariadicBufs); i++ { + buffers = append(buffers, ctx.buffer()) + } + defer memory.ReleaseBuffers(buffers) return array.NewData(dt, int(field.Length()), buffers, nil, int(field.NullCount()), 0) } @@ -585,7 +611,7 @@ func (ctx *arrayLoaderContext) loadBinary(dt arrow.DataType) arrow.ArrayData { func (ctx *arrayLoaderContext) loadFixedSizeBinary(dt *arrow.FixedSizeBinaryType) arrow.ArrayData { field, buffers := ctx.loadCommon(dt.ID(), 2) buffers = append(buffers, ctx.buffer()) - defer releaseBuffers(buffers) + defer memory.ReleaseBuffers(buffers) return array.NewData(dt, int(field.Length()), buffers, nil, int(field.NullCount()), 0) } @@ -593,7 +619,7 @@ func (ctx *arrayLoaderContext) loadFixedSizeBinary(dt *arrow.FixedSizeBinaryType func (ctx *arrayLoaderContext) loadMap(dt *arrow.MapType) arrow.ArrayData { field, buffers := ctx.loadCommon(dt.ID(), 2) buffers = append(buffers, ctx.buffer()) - defer releaseBuffers(buffers) + defer memory.ReleaseBuffers(buffers) sub := ctx.loadChild(dt.Elem()) defer sub.Release() @@ -604,7 +630,7 @@ func (ctx *arrayLoaderContext) loadMap(dt *arrow.MapType) arrow.ArrayData { func (ctx *arrayLoaderContext) loadList(dt arrow.ListLikeType) arrow.ArrayData { field, buffers := ctx.loadCommon(dt.ID(), 2) buffers = append(buffers, ctx.buffer()) - defer releaseBuffers(buffers) + defer memory.ReleaseBuffers(buffers) sub := ctx.loadChild(dt.Elem()) defer sub.Release() @@ -615,7 +641,7 @@ func (ctx *arrayLoaderContext) loadList(dt arrow.ListLikeType) arrow.ArrayData { func (ctx *arrayLoaderContext) loadListView(dt arrow.VarLenListLikeType) arrow.ArrayData { field, buffers := ctx.loadCommon(dt.ID(), 3) buffers = append(buffers, ctx.buffer(), ctx.buffer()) - defer releaseBuffers(buffers) + defer memory.ReleaseBuffers(buffers) sub := ctx.loadChild(dt.Elem()) defer sub.Release() @@ -625,7 +651,7 @@ func (ctx *arrayLoaderContext) loadListView(dt arrow.VarLenListLikeType) arrow.A func (ctx *arrayLoaderContext) loadFixedSizeList(dt *arrow.FixedSizeListType) arrow.ArrayData { field, buffers := ctx.loadCommon(dt.ID(), 1) - defer releaseBuffers(buffers) + defer memory.ReleaseBuffers(buffers) sub := ctx.loadChild(dt.Elem()) defer sub.Release() @@ -635,9 +661,9 @@ func (ctx *arrayLoaderContext) loadFixedSizeList(dt *arrow.FixedSizeListType) ar func (ctx *arrayLoaderContext) loadStruct(dt *arrow.StructType) arrow.ArrayData { field, buffers := ctx.loadCommon(dt.ID(), 1) - defer releaseBuffers(buffers) + defer memory.ReleaseBuffers(buffers) - subs := make([]arrow.ArrayData, len(dt.Fields())) + subs := make([]arrow.ArrayData, dt.NumFields()) for i, f := range dt.Fields() { subs[i] = ctx.loadChild(f.Type) } @@ -678,8 +704,8 @@ func (ctx *arrayLoaderContext) loadUnion(dt arrow.UnionType) arrow.ArrayData { } } - defer releaseBuffers(buffers) - subs := make([]arrow.ArrayData, len(dt.Fields())) + defer memory.ReleaseBuffers(buffers) + subs := make([]arrow.ArrayData, dt.NumFields()) for i, f := range dt.Fields() { subs[i] = ctx.loadChild(f.Type) } @@ -704,6 +730,7 @@ func readDictionary(memo *dictutils.Memo, meta *memory.Buffer, body ReadAtSeeker bodyCompress := data.Compression(nil) if bodyCompress != nil { codec = getDecompressor(bodyCompress.Codec()) + defer codec.Close() } id := md.Id() @@ -741,11 +768,3 @@ func readDictionary(memo *dictutils.Memo, meta *memory.Buffer, body ReadAtSeeker } return dictutils.KindReplacement, nil } - -func releaseBuffers(buffers []*memory.Buffer) { - for _, b := range buffers { - if b != nil { - b.Release() - } - } -} diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/ipc/file_writer.go b/vendor/github.com/apache/arrow-go/v18/arrow/ipc/file_writer.go similarity index 78% rename from vendor/github.com/apache/arrow/go/v14/arrow/ipc/file_writer.go rename to vendor/github.com/apache/arrow-go/v18/arrow/ipc/file_writer.go index 12384225..c6aefd59 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/ipc/file_writer.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/ipc/file_writer.go @@ -21,11 +21,11 @@ import ( "fmt" "io" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/internal/dictutils" - "github.com/apache/arrow/go/v14/arrow/internal/flatbuf" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/internal/dictutils" + "github.com/apache/arrow-go/v18/arrow/internal/flatbuf" + "github.com/apache/arrow-go/v18/arrow/memory" ) // PayloadWriter is an interface for injecting a different payloadwriter @@ -37,23 +37,17 @@ type PayloadWriter interface { Close() error } -type pwriter struct { - w io.WriteSeeker - pos int64 +type fileWriter struct { + streamWriter schema *arrow.Schema dicts []fileBlock recs []fileBlock } -func (w *pwriter) Start() error { +func (w *fileWriter) Start() error { var err error - err = w.updatePos() - if err != nil { - return fmt.Errorf("arrow/ipc: could not update position while in start: %w", err) - } - // only necessary to align to 8-byte boundary at the start of the file _, err = w.Write(Magic) if err != nil { @@ -65,10 +59,10 @@ func (w *pwriter) Start() error { return fmt.Errorf("arrow/ipc: could not align start block: %w", err) } - return err + return w.streamWriter.Start() } -func (w *pwriter) WritePayload(p Payload) error { +func (w *fileWriter) WritePayload(p Payload) error { blk := fileBlock{Offset: w.pos, Meta: 0, Body: p.size} n, err := writeIPCPayload(w, p) if err != nil { @@ -77,11 +71,6 @@ func (w *pwriter) WritePayload(p Payload) error { blk.Meta = int32(n) - err = w.updatePos() - if err != nil { - return fmt.Errorf("arrow/ipc: could not update position while in write-payload: %w", err) - } - switch flatbuf.MessageHeader(p.msg) { case flatbuf.MessageHeaderDictionaryBatch: w.dicts = append(w.dicts, blk) @@ -92,27 +81,18 @@ func (w *pwriter) WritePayload(p Payload) error { return nil } -func (w *pwriter) Close() error { +func (w *fileWriter) Close() error { var err error - // write file footer - err = w.updatePos() - if err != nil { - return fmt.Errorf("arrow/ipc: could not update position while in close: %w", err) + if err = w.streamWriter.Close(); err != nil { + return err } pos := w.pos - err = writeFileFooter(w.schema, w.dicts, w.recs, w) - if err != nil { + if err = writeFileFooter(w.schema, w.dicts, w.recs, w); err != nil { return fmt.Errorf("arrow/ipc: could not write file footer: %w", err) } - // write file footer length - err = w.updatePos() // not strictly needed as we passed w to writeFileFooter... - if err != nil { - return fmt.Errorf("arrow/ipc: could not compute file footer length: %w", err) - } - size := w.pos - pos if size <= 0 { return fmt.Errorf("arrow/ipc: invalid file footer size (size=%d)", size) @@ -133,13 +113,7 @@ func (w *pwriter) Close() error { return nil } -func (w *pwriter) updatePos() error { - var err error - w.pos, err = w.w.Seek(0, io.SeekCurrent) - return err -} - -func (w *pwriter) align(align int32) error { +func (w *fileWriter) align(align int32) error { remainder := paddedLength(w.pos, align) - w.pos if remainder == 0 { return nil @@ -149,12 +123,6 @@ func (w *pwriter) align(align int32) error { return err } -func (w *pwriter) Write(p []byte) (int, error) { - n, err := w.w.Write(p) - w.pos += int64(n) - return n, err -} - func writeIPCPayload(w io.Writer, p Payload) (int, error) { n, err := writeMessage(p.meta, kArrowIPCAlignment, w) if err != nil { @@ -259,18 +227,12 @@ func (ps payloads) Release() { // FileWriter is an Arrow file writer. type FileWriter struct { - w io.WriteSeeker + w io.Writer mem memory.Allocator - header struct { - started bool - offset int64 - } - - footer struct { - written bool - } + headerStarted bool + footerWritten bool pw PayloadWriter @@ -278,6 +240,7 @@ type FileWriter struct { mapper dictutils.Mapper codec flatbuf.CompressionType compressNP int + compressors []compressor minSpaceSavings *float64 // map of the last written dictionaries by id @@ -288,7 +251,7 @@ type FileWriter struct { } // NewFileWriter opens an Arrow file using the provided writer w. -func NewFileWriter(w io.WriteSeeker, opts ...Option) (*FileWriter, error) { +func NewFileWriter(w io.Writer, opts ...Option) (*FileWriter, error) { var ( cfg = newConfig(opts...) err error @@ -296,20 +259,15 @@ func NewFileWriter(w io.WriteSeeker, opts ...Option) (*FileWriter, error) { f := FileWriter{ w: w, - pw: &pwriter{w: w, schema: cfg.schema, pos: -1}, + pw: &fileWriter{streamWriter: streamWriter{w: w}, schema: cfg.schema}, mem: cfg.alloc, schema: cfg.schema, codec: cfg.codec, compressNP: cfg.compressNP, minSpaceSavings: cfg.minSpaceSavings, + compressors: make([]compressor, cfg.compressNP), } - pos, err := f.w.Seek(0, io.SeekCurrent) - if err != nil { - return nil, fmt.Errorf("arrow/ipc: could not seek current position: %w", err) - } - f.header.offset = pos - return &f, err } @@ -319,7 +277,7 @@ func (f *FileWriter) Close() error { return fmt.Errorf("arrow/ipc: could not write empty file: %w", err) } - if f.footer.written { + if f.footerWritten { return nil } @@ -327,7 +285,7 @@ func (f *FileWriter) Close() error { if err != nil { return fmt.Errorf("arrow/ipc: could not close payload writer: %w", err) } - f.footer.written = true + f.footerWritten = true return nil } @@ -345,7 +303,9 @@ func (f *FileWriter) Write(rec arrow.Record) error { const allow64b = true var ( data = Payload{msg: MessageRecordBatch} - enc = newRecordEncoder(f.mem, 0, kMaxNestingDepth, allow64b, f.codec, f.compressNP, f.minSpaceSavings) + enc = newRecordEncoder( + f.mem, 0, kMaxNestingDepth, allow64b, f.codec, f.compressNP, f.minSpaceSavings, f.compressors, + ) ) defer data.Release() @@ -363,14 +323,14 @@ func (f *FileWriter) Write(rec arrow.Record) error { } func (f *FileWriter) checkStarted() error { - if !f.header.started { + if !f.headerStarted { return f.start() } return nil } func (f *FileWriter) start() error { - f.header.started = true + f.headerStarted = true err := f.pw.Start() if err != nil { return err diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/ipc/ipc.go b/vendor/github.com/apache/arrow-go/v18/arrow/ipc/ipc.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/ipc/ipc.go rename to vendor/github.com/apache/arrow-go/v18/arrow/ipc/ipc.go index 6c04b6f5..c4589da6 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/ipc/ipc.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/ipc/ipc.go @@ -19,10 +19,10 @@ package ipc import ( "io" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/arrio" - "github.com/apache/arrow/go/v14/arrow/internal/flatbuf" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/arrio" + "github.com/apache/arrow-go/v18/arrow/internal/flatbuf" + "github.com/apache/arrow-go/v18/arrow/memory" ) const ( @@ -79,6 +79,7 @@ func newConfig(opts ...Option) *config { alloc: memory.NewGoAllocator(), codec: -1, // uncompressed ensureNativeEndian: true, + compressNP: 1, } for _, opt := range opts { @@ -132,9 +133,12 @@ func WithZstd() Option { // WithCompressConcurrency specifies a number of goroutines to spin up for // concurrent compression of the body buffers when writing compress IPC records. // If n <= 1 then compression will be done serially without goroutine -// parallelization. Default is 0. +// parallelization. Default is 1. func WithCompressConcurrency(n int) Option { return func(cfg *config) { + if n <= 0 { + n = 1 + } cfg.compressNP = n } } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/ipc/message.go b/vendor/github.com/apache/arrow-go/v18/arrow/ipc/message.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/ipc/message.go rename to vendor/github.com/apache/arrow-go/v18/arrow/ipc/message.go index c5d0ec68..f989cf2a 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/ipc/message.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/ipc/message.go @@ -22,20 +22,20 @@ import ( "io" "sync/atomic" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/internal/flatbuf" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/internal/flatbuf" + "github.com/apache/arrow-go/v18/arrow/memory" ) // MetadataVersion represents the Arrow metadata version. type MetadataVersion flatbuf.MetadataVersion const ( - MetadataV1 = MetadataVersion(flatbuf.MetadataVersionV1) // version for Arrow-0.1.0 - MetadataV2 = MetadataVersion(flatbuf.MetadataVersionV2) // version for Arrow-0.2.0 - MetadataV3 = MetadataVersion(flatbuf.MetadataVersionV3) // version for Arrow-0.3.0 to 0.7.1 - MetadataV4 = MetadataVersion(flatbuf.MetadataVersionV4) // version for >= Arrow-0.8.0 - MetadataV5 = MetadataVersion(flatbuf.MetadataVersionV5) // version for >= Arrow-1.0.0, backward compatible with v4 + MetadataV1 = MetadataVersion(flatbuf.MetadataVersionV1) // version for Arrow Format-0.1.0 + MetadataV2 = MetadataVersion(flatbuf.MetadataVersionV2) // version for Arrow Format-0.2.0 + MetadataV3 = MetadataVersion(flatbuf.MetadataVersionV3) // version for Arrow Format-0.3.0 to 0.7.1 + MetadataV4 = MetadataVersion(flatbuf.MetadataVersionV4) // version for >= Arrow Format-0.8.0 + MetadataV5 = MetadataVersion(flatbuf.MetadataVersionV5) // version for >= Arrow Format-1.0.0, backward compatible with v4 ) func (m MetadataVersion) String() string { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/ipc/metadata.go b/vendor/github.com/apache/arrow-go/v18/arrow/ipc/metadata.go similarity index 94% rename from vendor/github.com/apache/arrow/go/v14/arrow/ipc/metadata.go rename to vendor/github.com/apache/arrow-go/v18/arrow/ipc/metadata.go index 9bab47d6..a5bf1877 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/ipc/metadata.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/ipc/metadata.go @@ -23,11 +23,11 @@ import ( "io" "sort" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/endian" - "github.com/apache/arrow/go/v14/arrow/internal/dictutils" - "github.com/apache/arrow/go/v14/arrow/internal/flatbuf" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/endian" + "github.com/apache/arrow-go/v18/arrow/internal/dictutils" + "github.com/apache/arrow-go/v18/arrow/internal/flatbuf" + "github.com/apache/arrow-go/v18/arrow/memory" flatbuffers "github.com/google/flatbuffers/go" ) @@ -281,20 +281,12 @@ func (fv *fieldVisitor) visit(field arrow.Field) { fv.dtype = flatbuf.TypeFloatingPoint fv.offset = floatToFB(fv.b, int32(dt.BitWidth())) - case *arrow.Decimal128Type: + case arrow.DecimalType: fv.dtype = flatbuf.TypeDecimal flatbuf.DecimalStart(fv.b) - flatbuf.DecimalAddPrecision(fv.b, dt.Precision) - flatbuf.DecimalAddScale(fv.b, dt.Scale) - flatbuf.DecimalAddBitWidth(fv.b, 128) - fv.offset = flatbuf.DecimalEnd(fv.b) - - case *arrow.Decimal256Type: - fv.dtype = flatbuf.TypeDecimal - flatbuf.DecimalStart(fv.b) - flatbuf.DecimalAddPrecision(fv.b, dt.Precision) - flatbuf.DecimalAddScale(fv.b, dt.Scale) - flatbuf.DecimalAddBitWidth(fv.b, 256) + flatbuf.DecimalAddPrecision(fv.b, dt.GetPrecision()) + flatbuf.DecimalAddScale(fv.b, dt.GetScale()) + flatbuf.DecimalAddBitWidth(fv.b, int32(dt.BitWidth())) fv.offset = flatbuf.DecimalEnd(fv.b) case *arrow.FixedSizeBinaryType: @@ -323,6 +315,16 @@ func (fv *fieldVisitor) visit(field arrow.Field) { flatbuf.LargeUtf8Start(fv.b) fv.offset = flatbuf.LargeUtf8End(fv.b) + case *arrow.BinaryViewType: + fv.dtype = flatbuf.TypeBinaryView + flatbuf.BinaryViewStart(fv.b) + fv.offset = flatbuf.BinaryViewEnd(fv.b) + + case *arrow.StringViewType: + fv.dtype = flatbuf.TypeUtf8View + flatbuf.Utf8ViewStart(fv.b) + fv.offset = flatbuf.Utf8ViewEnd(fv.b) + case *arrow.Date32Type: fv.dtype = flatbuf.TypeDate flatbuf.DateStart(fv.b) @@ -363,7 +365,7 @@ func (fv *fieldVisitor) visit(field arrow.Field) { case *arrow.StructType: fv.dtype = flatbuf.TypeStruct_ - offsets := make([]flatbuffers.UOffsetT, len(dt.Fields())) + offsets := make([]flatbuffers.UOffsetT, dt.NumFields()) for i, field := range dt.Fields() { offsets[i] = fieldToFB(fv.b, fv.pos.Child(int32(i)), field, fv.memo) } @@ -462,7 +464,7 @@ func (fv *fieldVisitor) visit(field arrow.Field) { case arrow.UnionType: fv.dtype = flatbuf.TypeUnion - offsets := make([]flatbuffers.UOffsetT, len(dt.Fields())) + offsets := make([]flatbuffers.UOffsetT, dt.NumFields()) for i, field := range dt.Fields() { offsets[i] = fieldToFB(fv.b, fv.pos.Child(int32(i)), field, fv.memo) } @@ -713,6 +715,12 @@ func concreteTypeFromFB(typ flatbuf.Type, data flatbuffers.Table, children []arr case flatbuf.TypeLargeUtf8: return arrow.BinaryTypes.LargeString, nil + case flatbuf.TypeUtf8View: + return arrow.BinaryTypes.StringView, nil + + case flatbuf.TypeBinaryView: + return arrow.BinaryTypes.BinaryView, nil + case flatbuf.TypeBool: return arrow.FixedWidthTypes.Boolean, nil @@ -931,6 +939,10 @@ func floatToFB(b *flatbuffers.Builder, bw int32) flatbuffers.UOffsetT { func decimalFromFB(data flatbuf.Decimal) (arrow.DataType, error) { switch data.BitWidth() { + case 32: + return &arrow.Decimal32Type{Precision: data.Precision(), Scale: data.Scale()}, nil + case 64: + return &arrow.Decimal64Type{Precision: data.Precision(), Scale: data.Scale()}, nil case 128: return &arrow.Decimal128Type{Precision: data.Precision(), Scale: data.Scale()}, nil case 256: @@ -1084,10 +1096,10 @@ func schemaFromFB(schema *flatbuf.Schema, memo *dictutils.Memo) (*arrow.Schema, } func schemaToFB(b *flatbuffers.Builder, schema *arrow.Schema, memo *dictutils.Mapper) flatbuffers.UOffsetT { - fields := make([]flatbuffers.UOffsetT, len(schema.Fields())) + fields := make([]flatbuffers.UOffsetT, schema.NumFields()) pos := dictutils.NewFieldPos() - for i, field := range schema.Fields() { - fields[i] = fieldToFB(b, pos.Child(int32(i)), field, memo) + for i := 0; i < schema.NumFields(); i++ { + fields[i] = fieldToFB(b, pos.Child(int32(i)), schema.Field(i), memo) } flatbuf.SchemaStartFieldsVector(b, len(fields)) @@ -1168,15 +1180,15 @@ func writeFileFooter(schema *arrow.Schema, dicts, recs []fileBlock, w io.Writer) return err } -func writeRecordMessage(mem memory.Allocator, size, bodyLength int64, fields []fieldMetadata, meta []bufferMetadata, codec flatbuf.CompressionType) *memory.Buffer { +func writeRecordMessage(mem memory.Allocator, size, bodyLength int64, fields []fieldMetadata, meta []bufferMetadata, codec flatbuf.CompressionType, variadicCounts []int64) *memory.Buffer { b := flatbuffers.NewBuilder(0) - recFB := recordToFB(b, size, bodyLength, fields, meta, codec) + recFB := recordToFB(b, size, bodyLength, fields, meta, codec, variadicCounts) return writeMessageFB(b, mem, flatbuf.MessageHeaderRecordBatch, recFB, bodyLength) } -func writeDictionaryMessage(mem memory.Allocator, id int64, isDelta bool, size, bodyLength int64, fields []fieldMetadata, meta []bufferMetadata, codec flatbuf.CompressionType) *memory.Buffer { +func writeDictionaryMessage(mem memory.Allocator, id int64, isDelta bool, size, bodyLength int64, fields []fieldMetadata, meta []bufferMetadata, codec flatbuf.CompressionType, variadicCounts []int64) *memory.Buffer { b := flatbuffers.NewBuilder(0) - recFB := recordToFB(b, size, bodyLength, fields, meta, codec) + recFB := recordToFB(b, size, bodyLength, fields, meta, codec, variadicCounts) flatbuf.DictionaryBatchStart(b) flatbuf.DictionaryBatchAddId(b, id) @@ -1186,7 +1198,7 @@ func writeDictionaryMessage(mem memory.Allocator, id int64, isDelta bool, size, return writeMessageFB(b, mem, flatbuf.MessageHeaderDictionaryBatch, dictFB, bodyLength) } -func recordToFB(b *flatbuffers.Builder, size, bodyLength int64, fields []fieldMetadata, meta []bufferMetadata, codec flatbuf.CompressionType) flatbuffers.UOffsetT { +func recordToFB(b *flatbuffers.Builder, size, bodyLength int64, fields []fieldMetadata, meta []bufferMetadata, codec flatbuf.CompressionType, variadicCounts []int64) flatbuffers.UOffsetT { fieldsFB := writeFieldNodes(b, fields, flatbuf.RecordBatchStartNodesVector) metaFB := writeBuffers(b, meta, flatbuf.RecordBatchStartBuffersVector) var bodyCompressFB flatbuffers.UOffsetT @@ -1194,10 +1206,24 @@ func recordToFB(b *flatbuffers.Builder, size, bodyLength int64, fields []fieldMe bodyCompressFB = writeBodyCompression(b, codec) } + var vcFB *flatbuffers.UOffsetT + if len(variadicCounts) > 0 { + flatbuf.RecordBatchStartVariadicBufferCountsVector(b, len(variadicCounts)) + for i := len(variadicCounts) - 1; i >= 0; i-- { + b.PrependInt64(variadicCounts[i]) + } + vcFBVal := b.EndVector(len(variadicCounts)) + vcFB = &vcFBVal + } + flatbuf.RecordBatchStart(b) flatbuf.RecordBatchAddLength(b, size) flatbuf.RecordBatchAddNodes(b, fieldsFB) flatbuf.RecordBatchAddBuffers(b, metaFB) + if vcFB != nil { + flatbuf.RecordBatchAddVariadicBufferCounts(b, *vcFB) + } + if codec != -1 { flatbuf.RecordBatchAddCompression(b, bodyCompressFB) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/ipc/reader.go b/vendor/github.com/apache/arrow-go/v18/arrow/ipc/reader.go similarity index 92% rename from vendor/github.com/apache/arrow/go/v14/arrow/ipc/reader.go rename to vendor/github.com/apache/arrow-go/v18/arrow/ipc/reader.go index 1f684c1f..f74fddd3 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/ipc/reader.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/ipc/reader.go @@ -23,13 +23,14 @@ import ( "io" "sync/atomic" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/endian" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/internal/dictutils" - "github.com/apache/arrow/go/v14/arrow/internal/flatbuf" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/endian" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/internal/dictutils" + "github.com/apache/arrow-go/v18/arrow/internal/flatbuf" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/utils" ) // Reader reads records from an io.Reader. @@ -60,7 +61,7 @@ type Reader struct { func NewReaderFromMessageReader(r MessageReader, opts ...Option) (reader *Reader, err error) { defer func() { if pErr := recover(); pErr != nil { - err = fmt.Errorf("arrow/ipc: unknown error while reading: %v", pErr) + err = utils.FormatRecoveredError("arrow/ipc: unknown error while reading", pErr) } }() cfg := newConfig() @@ -213,7 +214,7 @@ func (r *Reader) getInitialDicts() bool { func (r *Reader) next() bool { defer func() { if pErr := recover(); pErr != nil { - r.err = fmt.Errorf("arrow/ipc: unknown error while reading: %v", pErr) + r.err = utils.FormatRecoveredError("arrow/ipc: unknown error while reading", pErr) } }() if r.schema == nil { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/ipc/writer.go b/vendor/github.com/apache/arrow-go/v18/arrow/ipc/writer.go similarity index 77% rename from vendor/github.com/apache/arrow/go/v14/arrow/ipc/writer.go rename to vendor/github.com/apache/arrow-go/v18/arrow/ipc/writer.go index a97f47ef..0919494a 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/ipc/writer.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/ipc/writer.go @@ -26,28 +26,29 @@ import ( "sync" "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/internal" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/internal/dictutils" - "github.com/apache/arrow/go/v14/arrow/internal/flatbuf" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/internal" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/internal/dictutils" + "github.com/apache/arrow-go/v18/arrow/internal/flatbuf" + "github.com/apache/arrow-go/v18/arrow/memory" + "github.com/apache/arrow-go/v18/internal/utils" ) -type swriter struct { +type streamWriter struct { w io.Writer pos int64 } -func (w *swriter) Start() error { return nil } -func (w *swriter) Close() error { +func (w *streamWriter) Start() error { return nil } +func (w *streamWriter) Close() error { _, err := w.Write(kEOS[:]) return err } -func (w *swriter) WritePayload(p Payload) error { +func (w *streamWriter) WritePayload(p Payload) error { _, err := writeIPCPayload(w, p) if err != nil { return err @@ -55,7 +56,7 @@ func (w *swriter) WritePayload(p Payload) error { return nil } -func (w *swriter) Write(p []byte) (int, error) { +func (w *streamWriter) Write(p []byte) (int, error) { n, err := w.w.Write(p) w.pos += int64(n) return n, err @@ -85,6 +86,7 @@ type Writer struct { mapper dictutils.Mapper codec flatbuf.CompressionType compressNP int + compressors []compressor minSpaceSavings *float64 // map of the last written dictionaries by id @@ -106,6 +108,7 @@ func NewWriterWithPayloadWriter(pw PayloadWriter, opts ...Option) *Writer { compressNP: cfg.compressNP, minSpaceSavings: cfg.minSpaceSavings, emitDictDeltas: cfg.emitDictDeltas, + compressors: make([]compressor, cfg.compressNP), } } @@ -115,10 +118,12 @@ func NewWriter(w io.Writer, opts ...Option) *Writer { return &Writer{ w: w, mem: cfg.alloc, - pw: &swriter{w: w}, + pw: &streamWriter{w: w}, schema: cfg.schema, codec: cfg.codec, emitDictDeltas: cfg.emitDictDeltas, + compressNP: cfg.compressNP, + compressors: make([]compressor, cfg.compressNP), } } @@ -150,26 +155,39 @@ func (w *Writer) Close() error { func (w *Writer) Write(rec arrow.Record) (err error) { defer func() { if pErr := recover(); pErr != nil { - err = fmt.Errorf("arrow/ipc: unknown error while writing: %v", pErr) + err = utils.FormatRecoveredError("arrow/ipc: unknown error while writing", pErr) } }() + incomingSchema := rec.Schema() + if !w.started { + if w.schema == nil { + w.schema = incomingSchema + } err := w.start() if err != nil { return err } } - schema := rec.Schema() - if schema == nil || !schema.Equal(w.schema) { + if incomingSchema == nil || !incomingSchema.Equal(w.schema) { return errInconsistentSchema } const allow64b = true var ( data = Payload{msg: MessageRecordBatch} - enc = newRecordEncoder(w.mem, 0, kMaxNestingDepth, allow64b, w.codec, w.compressNP, w.minSpaceSavings) + enc = newRecordEncoder( + w.mem, + 0, + kMaxNestingDepth, + allow64b, + w.codec, + w.compressNP, + w.minSpaceSavings, + w.compressors, + ) ) defer data.Release() @@ -277,7 +295,7 @@ type dictEncoder struct { } func (d *dictEncoder) encodeMetadata(p *Payload, isDelta bool, id, nrows int64) error { - p.meta = writeDictionaryMessage(d.mem, id, isDelta, nrows, p.size, d.fields, d.meta, d.codec) + p.meta = writeDictionaryMessage(d.mem, id, isDelta, nrows, p.size, d.fields, d.meta, d.codec, d.variadicCounts) return nil } @@ -300,18 +318,29 @@ func (d *dictEncoder) Encode(p *Payload, id int64, isDelta bool, dict arrow.Arra type recordEncoder struct { mem memory.Allocator - fields []fieldMetadata - meta []bufferMetadata + fields []fieldMetadata + meta []bufferMetadata + variadicCounts []int64 depth int64 start int64 allow64b bool codec flatbuf.CompressionType compressNP int + compressors []compressor minSpaceSavings *float64 } -func newRecordEncoder(mem memory.Allocator, startOffset, maxDepth int64, allow64b bool, codec flatbuf.CompressionType, compressNP int, minSpaceSavings *float64) *recordEncoder { +func newRecordEncoder( + mem memory.Allocator, + startOffset, + maxDepth int64, + allow64b bool, + codec flatbuf.CompressionType, + compressNP int, + minSpaceSavings *float64, + compressors []compressor, +) *recordEncoder { return &recordEncoder{ mem: mem, start: startOffset, @@ -319,6 +348,7 @@ func newRecordEncoder(mem memory.Allocator, startOffset, maxDepth int64, allow64 allow64b: allow64b, codec: codec, compressNP: compressNP, + compressors: compressors, minSpaceSavings: minSpaceSavings, } } @@ -338,6 +368,13 @@ func (w *recordEncoder) reset() { w.fields = make([]fieldMetadata, 0) } +func (w *recordEncoder) getCompressor(id int) compressor { + if w.compressors[id] == nil { + w.compressors[id] = getCompressor(w.codec) + } + return w.compressors[id] +} + func (w *recordEncoder) compressBodyBuffers(p *Payload) error { compress := func(idx int, codec compressor) error { if p.body[idx] == nil || p.body[idx].Len() == 0 { @@ -376,7 +413,7 @@ func (w *recordEncoder) compressBodyBuffers(p *Payload) error { } if w.compressNP <= 1 { - codec := getCompressor(w.codec) + codec := w.getCompressor(0) for idx := range p.body { if err := compress(idx, codec); err != nil { return err @@ -393,11 +430,11 @@ func (w *recordEncoder) compressBodyBuffers(p *Payload) error { ) defer cancel() - for i := 0; i < w.compressNP; i++ { + for workerID := 0; workerID < w.compressNP; workerID++ { wg.Add(1) - go func() { + go func(id int) { defer wg.Done() - codec := getCompressor(w.codec) + codec := w.getCompressor(id) for { select { case idx, ok := <-ch: @@ -416,7 +453,7 @@ func (w *recordEncoder) compressBodyBuffers(p *Payload) error { return } } - }() + }(workerID) } for idx := range p.body { @@ -602,6 +639,33 @@ func (w *recordEncoder) visit(p *Payload, arr arrow.Array) error { p.body = append(p.body, voffsets) p.body = append(p.body, values) + case arrow.BinaryViewDataType: + data := arr.Data() + values := data.Buffers()[1] + arrLen := int64(arr.Len()) + typeWidth := int64(arrow.ViewHeaderSizeBytes) + minLength := paddedLength(arrLen*typeWidth, kArrowAlignment) + + switch { + case needTruncate(int64(data.Offset()), values, minLength): + // non-zero offset: slice the buffer + offset := data.Offset() * int(typeWidth) + // send padding if available + len := int(minI64(bitutil.CeilByte64(arrLen*typeWidth), int64(values.Len()-offset))) + values = memory.SliceBuffer(values, offset, len) + default: + if values != nil { + values.Retain() + } + } + p.body = append(p.body, values) + + w.variadicCounts = append(w.variadicCounts, int64(len(data.Buffers())-2)) + for _, b := range data.Buffers()[2:] { + b.Retain() + p.body = append(p.body, b) + } + case *arrow.StructType: w.depth-- arr := arr.(*array.Struct) @@ -718,42 +782,22 @@ func (w *recordEncoder) visit(p *Payload, arr arrow.Array) error { w.depth++ case *arrow.ListViewType, *arrow.LargeListViewType: - data := arr.Data() arr := arr.(array.VarLenListLike) - offsetTraits := arr.DataType().(arrow.OffsetsDataType).OffsetTypeTraits() - rngOff, rngLen := array.RangeOfValuesUsed(arr) - voffsets := w.getValueOffsetsAtBaseValue(arr, rngOff) - p.body = append(p.body, voffsets) - vsizes := data.Buffers()[2] - if vsizes != nil { - if data.Offset() != 0 || vsizes.Len() > offsetTraits.BytesRequired(arr.Len()) { - beg := offsetTraits.BytesRequired(data.Offset()) - end := beg + offsetTraits.BytesRequired(data.Len()) - vsizes = memory.NewBufferBytes(vsizes.Bytes()[beg:end]) - } else { - vsizes.Retain() - } - } + voffsets, minOffset, maxEnd := w.getZeroBasedListViewOffsets(arr) + vsizes := w.getListViewSizes(arr) + + p.body = append(p.body, voffsets) p.body = append(p.body, vsizes) w.depth-- var ( - values = arr.ListValues() - mustRelease = false - values_offset = int64(rngOff) - values_end = int64(rngOff + rngLen) + values = arr.ListValues() ) - defer func() { - if mustRelease { - values.Release() - } - }() - if arr.Len() > 0 && values_end < int64(values.Len()) { - // must also slice the values - values = array.NewSlice(values, values_offset, values_end) - mustRelease = true + if minOffset != 0 || maxEnd < int64(values.Len()) { + values = array.NewSlice(values, minOffset, maxEnd) + defer values.Release() } err := w.visit(p, values) @@ -813,19 +857,35 @@ func (w *recordEncoder) getZeroBasedValueOffsets(arr arrow.Array) *memory.Buffer return nil } + dataTypeWidth := arr.DataType().Layout().Buffers[1].ByteWidth + // if we have a non-zero offset, then the value offsets do not start at // zero. we must a) create a new offsets array with shifted offsets and // b) slice the values array accordingly - // + hasNonZeroOffset := data.Offset() != 0 + // or if there are more value offsets than values (the array has been sliced) // we need to trim off the trailing offsets - needsTruncateAndShift := data.Offset() != 0 || offsetBytesNeeded < voffsets.Len() + hasMoreOffsetsThanValues := offsetBytesNeeded < voffsets.Len() + + // or if the offsets do not start from the zero index, we need to shift them + // and slice the values array + var firstOffset int64 + if dataTypeWidth == 8 { + firstOffset = arrow.Int64Traits.CastFromBytes(voffsets.Bytes())[0] + } else { + firstOffset = int64(arrow.Int32Traits.CastFromBytes(voffsets.Bytes())[0]) + } + offsetsDoNotStartFromZero := firstOffset != 0 + + // determine whether the offsets array should be shifted + needsTruncateAndShift := hasNonZeroOffset || hasMoreOffsetsThanValues || offsetsDoNotStartFromZero if needsTruncateAndShift { shiftedOffsets := memory.NewResizableBuffer(w.mem) shiftedOffsets.Resize(offsetBytesNeeded) - switch arr.DataType().Layout().Buffers[1].ByteWidth { + switch dataTypeWidth { case 8: dest := arrow.Int64Traits.CastFromBytes(shiftedOffsets.Bytes()) offsets := arrow.Int64Traits.CastFromBytes(voffsets.Bytes())[data.Offset() : data.Offset()+data.Len()+1] @@ -854,61 +914,92 @@ func (w *recordEncoder) getZeroBasedValueOffsets(arr arrow.Array) *memory.Buffer return voffsets } -// Truncates the offsets if needed and shifts the values if minOffset > 0. -// The offsets returned are corrected assuming the child values are truncated -// and now start at minOffset. -// -// This function only works on offset buffers of ListViews and LargeListViews. -// TODO(felipecrv): Unify this with getZeroBasedValueOffsets. -func (w *recordEncoder) getValueOffsetsAtBaseValue(arr arrow.Array, minOffset int) *memory.Buffer { - data := arr.Data() - voffsets := data.Buffers()[1] - offsetTraits := arr.DataType().(arrow.OffsetsDataType).OffsetTypeTraits() - offsetBytesNeeded := offsetTraits.BytesRequired(data.Len()) +func getZeroBasedListViewOffsets[OffsetT int32 | int64](mem memory.Allocator, arr array.VarLenListLike) (valueOffsets *memory.Buffer, minOffset, maxEnd OffsetT) { + requiredBytes := int(unsafe.Sizeof(minOffset)) * arr.Len() + if arr.Data().Offset() == 0 { + // slice offsets to used extent, in case we have truncated slice + minOffset, maxEnd = 0, OffsetT(arr.ListValues().Len()) + valueOffsets = arr.Data().Buffers()[1] + if valueOffsets.Len() > requiredBytes { + valueOffsets = memory.SliceBuffer(valueOffsets, 0, requiredBytes) + } else { + valueOffsets.Retain() + } + return + } - if voffsets == nil || voffsets.Len() == 0 { - return nil + // non-zero offset, it's likely that the smallest offset is not zero + // we must a) create a new offsets array with shifted offsets and + // b) slice the values array accordingly + + valueOffsets = memory.NewResizableBuffer(mem) + valueOffsets.Resize(requiredBytes) + if arr.Len() > 0 { + // max value of int32/int64 based on type + minOffset = (^OffsetT(0)) << ((8 * unsafe.Sizeof(minOffset)) - 1) + for i := 0; i < arr.Len(); i++ { + start, end := arr.ValueOffsets(i) + minOffset = utils.Min(minOffset, OffsetT(start)) + maxEnd = utils.Max(maxEnd, OffsetT(end)) + } } - needsTruncate := data.Offset() != 0 || offsetBytesNeeded < voffsets.Len() - needsShift := minOffset > 0 + offsets := arrow.GetData[OffsetT](arr.Data().Buffers()[1].Bytes())[arr.Data().Offset():] + destOffset := arrow.GetData[OffsetT](valueOffsets.Bytes()) + for i := 0; i < arr.Len(); i++ { + destOffset[i] = offsets[i] - minOffset + } + return +} - if needsTruncate || needsShift { - shiftedOffsets := memory.NewResizableBuffer(w.mem) - shiftedOffsets.Resize(offsetBytesNeeded) +func getListViewSizes[OffsetT int32 | int64](arr array.VarLenListLike) *memory.Buffer { + var z OffsetT + requiredBytes := int(unsafe.Sizeof(z)) * arr.Len() + sizes := arr.Data().Buffers()[2] - switch arr.DataType().Layout().Buffers[1].ByteWidth { - case 8: - dest := arrow.Int64Traits.CastFromBytes(shiftedOffsets.Bytes()) - offsets := arrow.Int64Traits.CastFromBytes(voffsets.Bytes())[data.Offset() : data.Offset()+data.Len()] + if arr.Data().Offset() != 0 || sizes.Len() > requiredBytes { + // slice offsets to used extent, in case we have truncated slice + offsetBytes := arr.Data().Offset() * int(unsafe.Sizeof(z)) + sizes = memory.SliceBuffer(sizes, offsetBytes, requiredBytes) + } else { + sizes.Retain() + } + return sizes +} - if minOffset > 0 { - for i, o := range offsets { - dest[i] = o - int64(minOffset) - } - } else { - copy(dest, offsets) - } - default: - debug.Assert(arr.DataType().Layout().Buffers[1].ByteWidth == 4, "invalid offset bytewidth") - dest := arrow.Int32Traits.CastFromBytes(shiftedOffsets.Bytes()) - offsets := arrow.Int32Traits.CastFromBytes(voffsets.Bytes())[data.Offset() : data.Offset()+data.Len()] +func (w *recordEncoder) getZeroBasedListViewOffsets(arr array.VarLenListLike) (*memory.Buffer, int64, int64) { + if arr.Len() == 0 { + return nil, 0, 0 + } - if minOffset > 0 { - for i, o := range offsets { - dest[i] = o - int32(minOffset) - } - } else { - copy(dest, offsets) - } - } + var ( + outOffsets *memory.Buffer + minOff, maxEnd int64 + ) - voffsets = shiftedOffsets - } else { - voffsets.Retain() + switch v := arr.(type) { + case *array.ListView: + voffsets, outOff, outEnd := getZeroBasedListViewOffsets[int32](w.mem, v) + outOffsets = voffsets + minOff, maxEnd = int64(outOff), int64(outEnd) + case *array.LargeListView: + outOffsets, minOff, maxEnd = getZeroBasedListViewOffsets[int64](w.mem, v) } + return outOffsets, minOff, maxEnd +} - return voffsets +func (w *recordEncoder) getListViewSizes(arr array.VarLenListLike) *memory.Buffer { + if arr.Len() == 0 { + return nil + } + + switch v := arr.(type) { + case *array.ListView: + return getListViewSizes[int32](v) + case *array.LargeListView: + return getListViewSizes[int64](v) + } + return nil } func (w *recordEncoder) rebaseDenseUnionValueOffsets(arr *array.DenseUnion, offsets, lengths []int32) *memory.Buffer { @@ -946,7 +1037,7 @@ func (w *recordEncoder) Encode(p *Payload, rec arrow.Record) error { } func (w *recordEncoder) encodeMetadata(p *Payload, nrows int64) error { - p.meta = writeRecordMessage(w.mem, nrows, p.size, w.fields, w.meta, w.codec) + p.meta = writeRecordMessage(w.mem, nrows, p.size, w.fields, w.meta, w.codec, w.variadicCounts) return nil } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/Makefile b/vendor/github.com/apache/arrow-go/v18/arrow/memory/Makefile similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/Makefile rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/Makefile diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/allocator.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/allocator.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/allocator.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/allocator.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/buffer.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/buffer.go similarity index 86% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/buffer.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/buffer.go index 2ddb3f82..04722225 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/memory/buffer.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/memory/buffer.go @@ -19,7 +19,7 @@ package memory import ( "sync/atomic" - "github.com/apache/arrow/go/v14/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/internal/debug" ) // Buffer is a wrapper type for a buffer of bytes. @@ -33,6 +33,18 @@ type Buffer struct { parent *Buffer } +// NewBufferWithAllocator returns a buffer with the mutable flag set +// as false. The intention here is to allow wrapping a byte slice along +// with an allocator as a buffer to track the lifetime via refcounts +// in order to call Free when the refcount goes to zero. +// +// The primary example this is used for, is currently importing data +// through the c data interface and tracking the lifetime of the +// imported buffers. +func NewBufferWithAllocator(data []byte, mem Allocator) *Buffer { + return &Buffer{refCount: 1, buf: data, length: len(data), mem: mem} +} + // NewBufferBytes creates a fixed-size buffer from the specified data. func NewBufferBytes(data []byte) *Buffer { return &Buffer{refCount: 0, buf: data, length: len(data)} diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/cgo_allocator.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/cgo_allocator.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/cgo_allocator.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/cgo_allocator.go index 85ee4452..57f3d922 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/memory/cgo_allocator.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/memory/cgo_allocator.go @@ -14,15 +14,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -// +build cgo -// +build ccalloc +//go:build cgo && ccalloc +// +build cgo,ccalloc package memory import ( "runtime" - cga "github.com/apache/arrow/go/v14/arrow/memory/internal/cgoalloc" + cga "github.com/apache/arrow-go/v18/arrow/memory/internal/cgoalloc" ) // CgoArrowAllocator is an allocator which exposes the C++ memory pool class diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/cgo_allocator_defaults.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/cgo_allocator_defaults.go similarity index 92% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/cgo_allocator_defaults.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/cgo_allocator_defaults.go index 501431a0..0a2e9a34 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/memory/cgo_allocator_defaults.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/memory/cgo_allocator_defaults.go @@ -14,9 +14,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -// +build cgo -// +build ccalloc -// +build !cclog +//go:build cgo && ccalloc && !cclog +// +build cgo,ccalloc,!cclog package memory diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/cgo_allocator_logging.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/cgo_allocator_logging.go similarity index 93% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/cgo_allocator_logging.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/cgo_allocator_logging.go index 01ad6b39..fe2e3a94 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/memory/cgo_allocator_logging.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/memory/cgo_allocator_logging.go @@ -14,9 +14,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -// +build cgo -// +build ccalloc -// +build cclog +//go:build cgo && ccalloc && cclog +// +build cgo,ccalloc,cclog package memory diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/checked_allocator.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/checked_allocator.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/checked_allocator.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/checked_allocator.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/default_allocator.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/default_allocator.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/default_allocator.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/default_allocator.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/default_mallocator.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/default_mallocator.go similarity index 94% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/default_mallocator.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/default_mallocator.go index 12ad0846..4eefc1e9 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/memory/default_mallocator.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/memory/default_mallocator.go @@ -19,7 +19,7 @@ package memory import ( - "github.com/apache/arrow/go/v14/arrow/memory/mallocator" + "github.com/apache/arrow-go/v18/arrow/memory/mallocator" ) // DefaultAllocator is a default implementation of Allocator and can be used anywhere diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/doc.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/doc.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/doc.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/doc.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/go_allocator.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/go_allocator.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/go_allocator.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/go_allocator.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/internal/cgoalloc/allocator.cc b/vendor/github.com/apache/arrow-go/v18/arrow/memory/internal/cgoalloc/allocator.cc similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/internal/cgoalloc/allocator.cc rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/internal/cgoalloc/allocator.cc diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/internal/cgoalloc/allocator.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/internal/cgoalloc/allocator.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/internal/cgoalloc/allocator.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/internal/cgoalloc/allocator.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/internal/cgoalloc/allocator.h b/vendor/github.com/apache/arrow-go/v18/arrow/memory/internal/cgoalloc/allocator.h similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/internal/cgoalloc/allocator.h rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/internal/cgoalloc/allocator.h diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/internal/cgoalloc/helpers.h b/vendor/github.com/apache/arrow-go/v18/arrow/memory/internal/cgoalloc/helpers.h similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/internal/cgoalloc/helpers.h rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/internal/cgoalloc/helpers.h diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/mallocator/doc.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/mallocator/doc.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/mallocator/doc.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/mallocator/doc.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/mallocator/mallocator.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/mallocator/mallocator.go similarity index 82% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/mallocator/mallocator.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/mallocator/mallocator.go index 18e0377c..9483bdfc 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/memory/mallocator/mallocator.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/memory/mallocator/mallocator.go @@ -30,14 +30,13 @@ package mallocator import "C" import ( - "reflect" "sync/atomic" "unsafe" ) // Mallocator is an allocator which defers to libc malloc. // -// The priamry reason to use this is when exporting data across the C Data +// The primary reason to use this is when exporting data across the C Data // Interface. CGO requires that pointers to Go memory are not stored in C // memory, which is exactly what the C Data Interface would otherwise // require. By allocating with Mallocator up front, we can safely export the @@ -61,27 +60,36 @@ func (alloc *Mallocator) Allocate(size int) []byte { } ptr, err := C.calloc(C.size_t(size), 1) if err != nil { - panic(err) + // under some circumstances and allocation patterns, we can end up in a scenario + // where for some reason calloc return ENOMEM even though there is definitely memory + // available for use. So we attempt to fallback to simply doing malloc + memset in + // this case. If malloc returns a nil pointer, then we know we're out of memory + // and will surface the error. + if ptr = C.malloc(C.size_t(size)); ptr == nil { + panic(err) + } + C.memset(ptr, 0, C.size_t(size)) } else if ptr == nil { panic("mallocator: out of memory") } + atomic.AddUint64(&alloc.allocatedBytes, uint64(size)) return unsafe.Slice((*byte)(ptr), size) } func (alloc *Mallocator) Free(b []byte) { - sh := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - C.free(unsafe.Pointer(sh.Data)) + sz := len(b) + C.free(getPtr(b)) // Subtract sh.Len via two's complement (since atomic doesn't offer subtract) - atomic.AddUint64(&alloc.allocatedBytes, ^(uint64(sh.Len) - 1)) + atomic.AddUint64(&alloc.allocatedBytes, ^(uint64(sz) - 1)) } func (alloc *Mallocator) Reallocate(size int, b []byte) []byte { if size < 0 { panic("mallocator: negative size") } - sh := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - ptr, err := C.realloc_and_initialize(unsafe.Pointer(sh.Data), C.size_t(sh.Cap), C.size_t(size)) + cp := cap(b) + ptr, err := C.realloc_and_initialize(getPtr(b), C.size_t(cp), C.size_t(size)) if err != nil { panic(err) } else if ptr == nil && size != 0 { diff --git a/vendor/github.com/apache/arrow-go/v18/arrow/memory/mallocator/mallocator_util.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/mallocator/mallocator_util.go new file mode 100644 index 00000000..0ab5f8f5 --- /dev/null +++ b/vendor/github.com/apache/arrow-go/v18/arrow/memory/mallocator/mallocator_util.go @@ -0,0 +1,26 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +//go:build go1.20 || tinygo + +package mallocator + +import "unsafe" + +func getPtr(b []byte) unsafe.Pointer { + return unsafe.Pointer(unsafe.SliceData(b)) +} diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/memory.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/memory.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/memory.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/memory.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_amd64.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_amd64.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_amd64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_amd64.go index 58356d64..895ddc07 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_amd64.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_amd64.go @@ -14,6 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:build !noasm // +build !noasm package memory diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_arm64.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_arm64.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_arm64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_arm64.go index 3db5d110..52603349 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_arm64.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_arm64.go @@ -14,6 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:build !noasm // +build !noasm package memory diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_avx2_amd64.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_avx2_amd64.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_avx2_amd64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_avx2_amd64.go index 2bd851ea..39fb3a5f 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_avx2_amd64.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_avx2_amd64.go @@ -14,6 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:build !noasm // +build !noasm package memory diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_avx2_amd64.s b/vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_avx2_amd64.s similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_avx2_amd64.s rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_avx2_amd64.s diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_js_wasm.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_js_wasm.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_js_wasm.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_js_wasm.go index 9b94d99f..5cc0c84d 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_js_wasm.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_js_wasm.go @@ -14,6 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:build wasm // +build wasm package memory diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_neon_arm64.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_neon_arm64.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_neon_arm64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_neon_arm64.go index 6cb0400c..806ca575 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_neon_arm64.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_neon_arm64.go @@ -14,6 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:build !noasm // +build !noasm package memory diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_neon_arm64.s b/vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_neon_arm64.s similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_neon_arm64.s rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_neon_arm64.s diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_noasm.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_noasm.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_noasm.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_noasm.go index bf8846fa..44f19c09 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_noasm.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_noasm.go @@ -14,6 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:build noasm // +build noasm package memory diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_sse4_amd64.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_sse4_amd64.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_sse4_amd64.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_sse4_amd64.go index 716c0d27..1711a1ee 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_sse4_amd64.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_sse4_amd64.go @@ -14,6 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:build !noasm // +build !noasm package memory diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_sse4_amd64.s b/vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_sse4_amd64.s similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/memory_sse4_amd64.s rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/memory_sse4_amd64.s diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/memory/util.go b/vendor/github.com/apache/arrow-go/v18/arrow/memory/util.go similarity index 91% rename from vendor/github.com/apache/arrow/go/v14/arrow/memory/util.go rename to vendor/github.com/apache/arrow-go/v18/arrow/memory/util.go index 3b0d3a5c..6cc7ec91 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/memory/util.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/memory/util.go @@ -35,3 +35,11 @@ func isMultipleOfPowerOf2(v int, d int) bool { func addressOf(b []byte) uintptr { return uintptr(unsafe.Pointer(&b[0])) } + +func ReleaseBuffers(buffers []*Buffer) { + for _, b := range buffers { + if b != nil { + b.Release() + } + } +} diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/numeric.schema.json b/vendor/github.com/apache/arrow-go/v18/arrow/numeric.schema.json similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/numeric.schema.json rename to vendor/github.com/apache/arrow-go/v18/arrow/numeric.schema.json diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/numeric.tmpldata b/vendor/github.com/apache/arrow-go/v18/arrow/numeric.tmpldata similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/numeric.tmpldata rename to vendor/github.com/apache/arrow-go/v18/arrow/numeric.tmpldata diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/record.go b/vendor/github.com/apache/arrow-go/v18/arrow/record.go similarity index 96% rename from vendor/github.com/apache/arrow/go/v14/arrow/record.go rename to vendor/github.com/apache/arrow-go/v18/arrow/record.go index d98c7732..4fd6b13c 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/record.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/record.go @@ -16,7 +16,7 @@ package arrow -import "github.com/apache/arrow/go/v14/internal/json" +import "github.com/apache/arrow-go/v18/internal/json" // Record is a collection of equal-length arrays matching a particular Schema. // Also known as a RecordBatch in the spec and in some implementations. diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/append.go b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/append.go similarity index 96% rename from vendor/github.com/apache/arrow/go/v14/arrow/scalar/append.go rename to vendor/github.com/apache/arrow-go/v18/arrow/scalar/append.go index 9bcfe3e2..0525bc81 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/append.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/append.go @@ -21,11 +21,11 @@ package scalar import ( "fmt" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/decimal128" - "github.com/apache/arrow/go/v14/arrow/decimal256" - "github.com/apache/arrow/go/v14/arrow/float16" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/decimal256" + "github.com/apache/arrow-go/v18/arrow/float16" "golang.org/x/exp/constraints" ) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/binary.go b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/binary.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/scalar/binary.go rename to vendor/github.com/apache/arrow-go/v18/arrow/scalar/binary.go index 3c041210..6b11eb3e 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/binary.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/binary.go @@ -21,8 +21,8 @@ import ( "fmt" "unicode/utf8" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/memory" ) type BinaryScalar interface { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/compare.go b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/compare.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/scalar/compare.go rename to vendor/github.com/apache/arrow-go/v18/arrow/scalar/compare.go index be7fa4d0..e69eb9eb 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/compare.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/compare.go @@ -16,7 +16,7 @@ package scalar -import "github.com/apache/arrow/go/v14/arrow" +import "github.com/apache/arrow-go/v18/arrow" // Equals returns true if two scalars are equal, which means they have the same // datatype, validity and value. diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/nested.go b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/nested.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/scalar/nested.go rename to vendor/github.com/apache/arrow-go/v18/arrow/scalar/nested.go index 87e84210..5bca34a0 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/nested.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/nested.go @@ -21,10 +21,10 @@ import ( "errors" "fmt" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" "golang.org/x/xerrors" ) @@ -132,7 +132,7 @@ func NewLargeListScalarData(val arrow.ArrayData) *LargeList { } func makeMapType(typ *arrow.StructType) *arrow.MapType { - debug.Assert(len(typ.Fields()) == 2, "must pass struct with only 2 fields for MapScalar") + debug.Assert(typ.NumFields() == 2, "must pass struct with only 2 fields for MapScalar") return arrow.MapOf(typ.Field(0).Type, typ.Field(1).Type) } @@ -265,7 +265,7 @@ func (s *Struct) Validate() (err error) { } st := s.Type.(*arrow.StructType) - num := len(st.Fields()) + num := st.NumFields() if len(s.Value) != num { return fmt.Errorf("non-null %s scalar should have %d child values, got %d", s.Type, num, len(s.Value)) } @@ -303,7 +303,7 @@ func (s *Struct) ValidateFull() (err error) { } st := s.Type.(*arrow.StructType) - num := len(st.Fields()) + num := st.NumFields() if len(s.Value) != num { return fmt.Errorf("non-null %s scalar should have %d child values, got %d", s.Type, num, len(s.Value)) } @@ -571,8 +571,8 @@ func (s *SparseUnion) Release() { func (s *SparseUnion) Validate() (err error) { dt := s.Type.(*arrow.SparseUnionType) - if len(dt.Fields()) != len(s.Value) { - return fmt.Errorf("sparse union scalar value had %d fields but type has %d fields", len(dt.Fields()), len(s.Value)) + if dt.NumFields() != len(s.Value) { + return fmt.Errorf("sparse union scalar value had %d fields but type has %d fields", dt.NumFields(), len(s.Value)) } if s.TypeCode < 0 || int(s.TypeCode) >= len(dt.ChildIDs()) || dt.ChildIDs()[s.TypeCode] == arrow.InvalidUnionChildID { @@ -593,8 +593,8 @@ func (s *SparseUnion) Validate() (err error) { func (s *SparseUnion) ValidateFull() (err error) { dt := s.Type.(*arrow.SparseUnionType) - if len(dt.Fields()) != len(s.Value) { - return fmt.Errorf("sparse union scalar value had %d fields but type has %d fields", len(dt.Fields()), len(s.Value)) + if dt.NumFields() != len(s.Value) { + return fmt.Errorf("sparse union scalar value had %d fields but type has %d fields", dt.NumFields(), len(s.Value)) } if s.TypeCode < 0 || int(s.TypeCode) >= len(dt.ChildIDs()) || dt.ChildIDs()[s.TypeCode] == arrow.InvalidUnionChildID { @@ -643,7 +643,7 @@ func NewSparseUnionScalar(val []Scalar, code arrow.UnionTypeCode, dt *arrow.Spar func NewSparseUnionScalarFromValue(val Scalar, idx int, dt *arrow.SparseUnionType) *SparseUnion { code := dt.TypeCodes()[idx] - values := make([]Scalar, len(dt.Fields())) + values := make([]Scalar, dt.NumFields()) for i, f := range dt.Fields() { if i == idx { values[i] = val diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/numeric.gen.go b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/numeric.gen.go similarity index 99% rename from vendor/github.com/apache/arrow/go/v14/arrow/scalar/numeric.gen.go rename to vendor/github.com/apache/arrow-go/v18/arrow/scalar/numeric.gen.go index 90ae2a70..cb8513c5 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/numeric.gen.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/numeric.gen.go @@ -24,9 +24,9 @@ import ( "reflect" "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/decimal128" - "github.com/apache/arrow/go/v14/arrow/decimal256" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/decimal256" ) type Int8 struct { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/numeric.gen.go.tmpl b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/numeric.gen.go.tmpl similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/scalar/numeric.gen.go.tmpl rename to vendor/github.com/apache/arrow-go/v18/arrow/scalar/numeric.gen.go.tmpl diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/numeric.gen.go.tmpldata b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/numeric.gen.go.tmpldata similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/scalar/numeric.gen.go.tmpldata rename to vendor/github.com/apache/arrow-go/v18/arrow/scalar/numeric.gen.go.tmpldata diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/numeric.gen_test.go.tmpl b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/numeric.gen_test.go.tmpl similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/scalar/numeric.gen_test.go.tmpl rename to vendor/github.com/apache/arrow-go/v18/arrow/scalar/numeric.gen_test.go.tmpl index c975cc9d..37f1b867 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/numeric.gen_test.go.tmpl +++ b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/numeric.gen_test.go.tmpl @@ -19,8 +19,8 @@ package scalar_test import ( "testing" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/scalar" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/scalar" "github.com/stretchr/testify/assert" ) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/parse.go b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/parse.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/scalar/parse.go rename to vendor/github.com/apache/arrow-go/v18/arrow/scalar/parse.go index fcffe1ea..3ac57738 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/parse.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/parse.go @@ -25,12 +25,12 @@ import ( "strings" "time" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/decimal128" - "github.com/apache/arrow/go/v14/arrow/decimal256" - "github.com/apache/arrow/go/v14/arrow/float16" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/decimal256" + "github.com/apache/arrow-go/v18/arrow/float16" + "github.com/apache/arrow-go/v18/arrow/memory" ) type TypeToScalar interface { @@ -329,7 +329,7 @@ func fromListScalar(s ListScalar, v reflect.Value) error { } case *array.Map: // only implementing slice of metadata for now - if v.Type().Elem() != reflect.PtrTo(reflect.TypeOf(arrow.Metadata{})) { + if v.Type().Elem() != reflect.PointerTo(reflect.TypeOf(arrow.Metadata{})) { return fmt.Errorf("unimplemented fromListScalar type %s to %s", arr.DataType(), v.Type().String()) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/scalar.go b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/scalar.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/scalar/scalar.go rename to vendor/github.com/apache/arrow-go/v18/arrow/scalar/scalar.go index 395771fa..0f8ec616 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/scalar.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/scalar.go @@ -26,16 +26,16 @@ import ( "strconv" "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/decimal128" - "github.com/apache/arrow/go/v14/arrow/decimal256" - "github.com/apache/arrow/go/v14/arrow/encoded" - "github.com/apache/arrow/go/v14/arrow/endian" - "github.com/apache/arrow/go/v14/arrow/float16" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/decimal256" + "github.com/apache/arrow-go/v18/arrow/encoded" + "github.com/apache/arrow-go/v18/arrow/endian" + "github.com/apache/arrow-go/v18/arrow/float16" + "github.com/apache/arrow-go/v18/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/memory" "golang.org/x/xerrors" ) @@ -512,7 +512,7 @@ func init() { arrow.LIST: func(dt arrow.DataType) Scalar { return &List{scalar: scalar{dt, false}} }, arrow.STRUCT: func(dt arrow.DataType) Scalar { typ := dt.(*arrow.StructType) - values := make([]Scalar, len(typ.Fields())) + values := make([]Scalar, typ.NumFields()) for i, f := range typ.Fields() { values[i] = MakeNullScalar(f.Type) } @@ -520,10 +520,10 @@ func init() { }, arrow.SPARSE_UNION: func(dt arrow.DataType) Scalar { typ := dt.(*arrow.SparseUnionType) - if len(typ.Fields()) == 0 { + if typ.NumFields() == 0 { panic("cannot make scalar of empty union type") } - values := make([]Scalar, len(typ.Fields())) + values := make([]Scalar, typ.NumFields()) for i, f := range typ.Fields() { values[i] = MakeNullScalar(f.Type) } @@ -531,7 +531,7 @@ func init() { }, arrow.DENSE_UNION: func(dt arrow.DataType) Scalar { typ := dt.(*arrow.DenseUnionType) - if len(typ.Fields()) == 0 { + if typ.NumFields() == 0 { panic("cannot make scalar of empty union type") } return NewDenseUnionScalar(MakeNullScalar(typ.Fields()[0].Type), typ.TypeCodes()[0], typ) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/temporal.go b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/temporal.go similarity index 99% rename from vendor/github.com/apache/arrow/go/v14/arrow/scalar/temporal.go rename to vendor/github.com/apache/arrow-go/v18/arrow/scalar/temporal.go index 880416f7..42a46738 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/scalar/temporal.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/scalar/temporal.go @@ -22,7 +22,7 @@ import ( "time" "unsafe" - "github.com/apache/arrow/go/v14/arrow" + "github.com/apache/arrow-go/v18/arrow" ) func temporalToString(s TemporalScalar) string { diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/schema.go b/vendor/github.com/apache/arrow-go/v18/arrow/schema.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/schema.go rename to vendor/github.com/apache/arrow-go/v18/arrow/schema.go index a7fa4341..65702e7b 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/schema.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/schema.go @@ -21,7 +21,7 @@ import ( "sort" "strings" - "github.com/apache/arrow/go/v14/arrow/endian" + "github.com/apache/arrow-go/v18/arrow/endian" ) type Metadata struct { @@ -259,8 +259,8 @@ func (s *Schema) AddField(i int, field Field) (*Schema, error) { func (s *Schema) String() string { o := new(strings.Builder) - fmt.Fprintf(o, "schema:\n fields: %d\n", len(s.Fields())) - for i, f := range s.Fields() { + fmt.Fprintf(o, "schema:\n fields: %d\n", s.NumFields()) + for i, f := range s.fields { if i > 0 { o.WriteString("\n") } @@ -282,7 +282,7 @@ func (s *Schema) Fingerprint() string { var b strings.Builder b.WriteString("S{") - for _, f := range s.Fields() { + for _, f := range s.fields { fieldFingerprint := f.Fingerprint() if fieldFingerprint == "" { return "" diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/table.go b/vendor/github.com/apache/arrow-go/v18/arrow/table.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/arrow/table.go rename to vendor/github.com/apache/arrow-go/v18/arrow/table.go index 5a68085f..6d19d9f1 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/table.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/table.go @@ -20,7 +20,7 @@ import ( "fmt" "sync/atomic" - "github.com/apache/arrow/go/v14/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/internal/debug" ) // Table represents a logical sequence of chunked arrays of equal length. It is @@ -39,6 +39,8 @@ type Table interface { Retain() Release() + + fmt.Stringer } // Column is an immutable column data structure consisting of @@ -47,7 +49,7 @@ type Table interface { // To get strongly typed data from a Column, you need to iterate the // chunks and type assert each individual Array. For example: // -// switch column.DataType().ID { +// switch column.DataType().ID() { // case arrow.INT32: // for _, c := range column.Data().Chunks() { // arr := c.(*array.Int32) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/tools.go b/vendor/github.com/apache/arrow-go/v18/arrow/tools.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/tools.go rename to vendor/github.com/apache/arrow-go/v18/arrow/tools.go diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/type_string.go b/vendor/github.com/apache/arrow-go/v18/arrow/type_string.go similarity index 93% rename from vendor/github.com/apache/arrow/go/v14/arrow/type_string.go rename to vendor/github.com/apache/arrow-go/v18/arrow/type_string.go index ee3ccb7e..6e5a943d 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/type_string.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/type_string.go @@ -51,11 +51,13 @@ func _() { _ = x[BINARY_VIEW-40] _ = x[LIST_VIEW-41] _ = x[LARGE_LIST_VIEW-42] + _ = x[DECIMAL32-43] + _ = x[DECIMAL64-44] } -const _Type_name = "NULLBOOLUINT8INT8UINT16INT16UINT32INT32UINT64INT64FLOAT16FLOAT32FLOAT64STRINGBINARYFIXED_SIZE_BINARYDATE32DATE64TIMESTAMPTIME32TIME64INTERVAL_MONTHSINTERVAL_DAY_TIMEDECIMAL128DECIMAL256LISTSTRUCTSPARSE_UNIONDENSE_UNIONDICTIONARYMAPEXTENSIONFIXED_SIZE_LISTDURATIONLARGE_STRINGLARGE_BINARYLARGE_LISTINTERVAL_MONTH_DAY_NANORUN_END_ENCODEDSTRING_VIEWBINARY_VIEWLIST_VIEWLARGE_LIST_VIEW" +const _Type_name = "NULLBOOLUINT8INT8UINT16INT16UINT32INT32UINT64INT64FLOAT16FLOAT32FLOAT64STRINGBINARYFIXED_SIZE_BINARYDATE32DATE64TIMESTAMPTIME32TIME64INTERVAL_MONTHSINTERVAL_DAY_TIMEDECIMAL128DECIMAL256LISTSTRUCTSPARSE_UNIONDENSE_UNIONDICTIONARYMAPEXTENSIONFIXED_SIZE_LISTDURATIONLARGE_STRINGLARGE_BINARYLARGE_LISTINTERVAL_MONTH_DAY_NANORUN_END_ENCODEDSTRING_VIEWBINARY_VIEWLIST_VIEWLARGE_LIST_VIEWDECIMAL32DECIMAL64" -var _Type_index = [...]uint16{0, 4, 8, 13, 17, 23, 28, 34, 39, 45, 50, 57, 64, 71, 77, 83, 100, 106, 112, 121, 127, 133, 148, 165, 175, 185, 189, 195, 207, 218, 228, 231, 240, 255, 263, 275, 287, 297, 320, 335, 346, 357, 366, 381} +var _Type_index = [...]uint16{0, 4, 8, 13, 17, 23, 28, 34, 39, 45, 50, 57, 64, 71, 77, 83, 100, 106, 112, 121, 127, 133, 148, 165, 175, 185, 189, 195, 207, 218, 228, 231, 240, 255, 263, 275, 287, 297, 320, 335, 346, 357, 366, 381, 390, 399} func (i Type) String() string { if i < 0 || i >= Type(len(_Type_index)-1) { diff --git a/vendor/github.com/apache/arrow-go/v18/arrow/type_traits.go b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits.go new file mode 100644 index 00000000..7185ef25 --- /dev/null +++ b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits.go @@ -0,0 +1,161 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package arrow + +import ( + "reflect" + "unsafe" + + "github.com/apache/arrow-go/v18/arrow/decimal" + "github.com/apache/arrow-go/v18/arrow/float16" + "golang.org/x/exp/constraints" +) + +// IntType is a type constraint for raw values represented as signed +// integer types by We aren't just using constraints.Signed +// because we don't want to include the raw `int` type here whose size +// changes based on the architecture (int32 on 32-bit architectures and +// int64 on 64-bit architectures). +// +// This will also cover types like MonthInterval or the time types +// as their underlying types are int32 and int64 which will get covered +// by using the ~ +type IntType interface { + ~int8 | ~int16 | ~int32 | ~int64 +} + +// UintType is a type constraint for raw values represented as unsigned +// integer types by We aren't just using constraints.Unsigned +// because we don't want to include the raw `uint` type here whose size +// changes based on the architecture (uint32 on 32-bit architectures and +// uint64 on 64-bit architectures). We also don't want to include uintptr +type UintType interface { + ~uint8 | ~uint16 | ~uint32 | ~uint64 +} + +// FloatType is a type constraint for raw values for representing +// floating point values in This consists of constraints.Float and +// float16.Num +type FloatType interface { + float16.Num | constraints.Float +} + +// NumericType is a type constraint for just signed/unsigned integers +// and float32/float64. +type NumericType interface { + IntType | UintType | constraints.Float +} + +// FixedWidthType is a type constraint for raw values in Arrow that +// can be represented as FixedWidth byte slices. Specifically this is for +// using Go generics to easily re-type a byte slice to a properly-typed +// slice. Booleans are excluded here since they are represented by Arrow +// as a bitmap and thus the buffer can't be just reinterpreted as a []bool +type FixedWidthType interface { + IntType | UintType | + FloatType | decimal.DecimalTypes | + DayTimeInterval | MonthDayNanoInterval +} + +type TemporalType interface { + Date32 | Date64 | Time32 | Time64 | + Timestamp | Duration | DayTimeInterval | + MonthInterval | MonthDayNanoInterval +} + +func reinterpretSlice[Out, T any](b []T) []Out { + if cap(b) == 0 { + return nil + } + out := (*Out)(unsafe.Pointer(&b[:1][0])) + + lenBytes := len(b) * int(unsafe.Sizeof(b[0])) + capBytes := cap(b) * int(unsafe.Sizeof(b[0])) + + lenOut := lenBytes / int(unsafe.Sizeof(*out)) + capOut := capBytes / int(unsafe.Sizeof(*out)) + + return unsafe.Slice(out, capOut)[:lenOut] +} + +// GetValues reinterprets the data.Buffers()[i] to a slice of T with len=data.Len(). +// +// If the buffer is nil, nil will be returned. +// +// NOTE: the buffer's length must be a multiple of Sizeof(T). +func GetValues[T FixedWidthType](data ArrayData, i int) []T { + if data.Buffers()[i] == nil || data.Buffers()[i].Len() == 0 { + return nil + } + return reinterpretSlice[T](data.Buffers()[i].Bytes())[data.Offset() : data.Offset()+data.Len()] +} + +// GetOffsets reinterprets the data.Buffers()[i] to a slice of T with len=data.Len()+1. +// +// NOTE: the buffer's length must be a multiple of Sizeof(T). +func GetOffsets[T int32 | int64](data ArrayData, i int) []T { + return reinterpretSlice[T](data.Buffers()[i].Bytes())[data.Offset() : data.Offset()+data.Len()+1] +} + +// GetBytes reinterprets a slice of T to a slice of bytes. +func GetBytes[T FixedWidthType | ViewHeader](in []T) []byte { + return reinterpretSlice[byte](in) +} + +// GetData reinterprets a slice of bytes to a slice of T. +// +// NOTE: the buffer's length must be a multiple of Sizeof(T). +func GetData[T FixedWidthType | ViewHeader](in []byte) []T { + return reinterpretSlice[T](in) +} + +var typMap = map[reflect.Type]DataType{ + reflect.TypeOf(false): FixedWidthTypes.Boolean, + reflect.TypeOf(int8(0)): PrimitiveTypes.Int8, + reflect.TypeOf(int16(0)): PrimitiveTypes.Int16, + reflect.TypeOf(int32(0)): PrimitiveTypes.Int32, + reflect.TypeOf(int64(0)): PrimitiveTypes.Int64, + reflect.TypeOf(uint8(0)): PrimitiveTypes.Uint8, + reflect.TypeOf(uint16(0)): PrimitiveTypes.Uint16, + reflect.TypeOf(uint32(0)): PrimitiveTypes.Uint32, + reflect.TypeOf(uint64(0)): PrimitiveTypes.Uint64, + reflect.TypeOf(float32(0)): PrimitiveTypes.Float32, + reflect.TypeOf(float64(0)): PrimitiveTypes.Float64, + reflect.TypeOf(string("")): BinaryTypes.String, + reflect.TypeOf(Date32(0)): FixedWidthTypes.Date32, + reflect.TypeOf(Date64(0)): FixedWidthTypes.Date64, + reflect.TypeOf(true): FixedWidthTypes.Boolean, + reflect.TypeOf(float16.Num{}): FixedWidthTypes.Float16, + reflect.TypeOf([]byte{}): BinaryTypes.Binary, +} + +// GetDataType returns the appropriate DataType for the given type T +// only for non-parametric types. This uses a map and reflection internally +// so don't call this in a tight loop, instead call this once and then use +// a closure with the result. +func GetDataType[T NumericType | bool | string | []byte | float16.Num]() DataType { + var z T + return typMap[reflect.TypeOf(z)] +} + +// GetType returns the appropriate Type type T, only for non-parametric +// types. This uses a map and reflection internally so don't call this in +// a tight loop, instead call it once and then use a closure with the result. +func GetType[T NumericType | bool | string]() Type { + var z T + return typMap[reflect.TypeOf(z)].ID() +} diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/type_traits_boolean.go b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_boolean.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/arrow/type_traits_boolean.go rename to vendor/github.com/apache/arrow-go/v18/arrow/type_traits_boolean.go index 6a46bdec..98d27330 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/type_traits_boolean.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_boolean.go @@ -17,7 +17,7 @@ package arrow import ( - "github.com/apache/arrow/go/v14/arrow/bitutil" + "github.com/apache/arrow-go/v18/arrow/bitutil" ) type booleanTraits struct{} diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/type_traits_decimal128.go b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_decimal128.go similarity index 66% rename from vendor/github.com/apache/arrow/go/v14/arrow/type_traits_decimal128.go rename to vendor/github.com/apache/arrow-go/v18/arrow/type_traits_decimal128.go index d2d3aae3..6e416cd6 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/type_traits_decimal128.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_decimal128.go @@ -17,11 +17,10 @@ package arrow import ( - "reflect" "unsafe" - "github.com/apache/arrow/go/v14/arrow/decimal128" - "github.com/apache/arrow/go/v14/arrow/endian" + "github.com/apache/arrow-go/v18/arrow/decimal" + "github.com/apache/arrow-go/v18/arrow/endian" ) // Decimal128 traits @@ -29,7 +28,7 @@ var Decimal128Traits decimal128Traits const ( // Decimal128SizeBytes specifies the number of bytes required to store a single decimal128 in memory - Decimal128SizeBytes = int(unsafe.Sizeof(decimal128.Num{})) + Decimal128SizeBytes = int(unsafe.Sizeof(decimal.Decimal128{})) ) type decimal128Traits struct{} @@ -38,7 +37,7 @@ type decimal128Traits struct{} func (decimal128Traits) BytesRequired(n int) int { return Decimal128SizeBytes * n } // PutValue -func (decimal128Traits) PutValue(b []byte, v decimal128.Num) { +func (decimal128Traits) PutValue(b []byte, v decimal.Decimal128) { endian.Native.PutUint64(b[:8], uint64(v.LowBits())) endian.Native.PutUint64(b[8:], uint64(v.HighBits())) } @@ -46,18 +45,14 @@ func (decimal128Traits) PutValue(b []byte, v decimal128.Num) { // CastFromBytes reinterprets the slice b to a slice of type uint16. // // NOTE: len(b) must be a multiple of Uint16SizeBytes. -func (decimal128Traits) CastFromBytes(b []byte) []decimal128.Num { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*decimal128.Num)(unsafe.Pointer(h.Data)), cap(b)/Decimal128SizeBytes)[:len(b)/Decimal128SizeBytes] +func (decimal128Traits) CastFromBytes(b []byte) []decimal.Decimal128 { + return GetData[decimal.Decimal128](b) } // CastToBytes reinterprets the slice b to a slice of bytes. -func (decimal128Traits) CastToBytes(b []decimal128.Num) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*Decimal128SizeBytes)[:len(b)*Decimal128SizeBytes] +func (decimal128Traits) CastToBytes(b []decimal.Decimal128) []byte { + return GetBytes(b) } // Copy copies src to dst. -func (decimal128Traits) Copy(dst, src []decimal128.Num) { copy(dst, src) } +func (decimal128Traits) Copy(dst, src []decimal.Decimal128) { copy(dst, src) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/type_traits_decimal256.go b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_decimal256.go similarity index 60% rename from vendor/github.com/apache/arrow/go/v14/arrow/type_traits_decimal256.go rename to vendor/github.com/apache/arrow-go/v18/arrow/type_traits_decimal256.go index 256ed68f..b196c2e7 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/type_traits_decimal256.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_decimal256.go @@ -17,25 +17,24 @@ package arrow import ( - "reflect" "unsafe" - "github.com/apache/arrow/go/v14/arrow/decimal256" - "github.com/apache/arrow/go/v14/arrow/endian" + "github.com/apache/arrow-go/v18/arrow/decimal" + "github.com/apache/arrow-go/v18/arrow/endian" ) // Decimal256 traits var Decimal256Traits decimal256Traits const ( - Decimal256SizeBytes = int(unsafe.Sizeof(decimal256.Num{})) + Decimal256SizeBytes = int(unsafe.Sizeof(decimal.Decimal256{})) ) type decimal256Traits struct{} func (decimal256Traits) BytesRequired(n int) int { return Decimal256SizeBytes * n } -func (decimal256Traits) PutValue(b []byte, v decimal256.Num) { +func (decimal256Traits) PutValue(b []byte, v decimal.Decimal256) { for i, a := range v.Array() { start := i * 8 endian.Native.PutUint64(b[start:], a) @@ -43,16 +42,12 @@ func (decimal256Traits) PutValue(b []byte, v decimal256.Num) { } // CastFromBytes reinterprets the slice b to a slice of decimal256 -func (decimal256Traits) CastFromBytes(b []byte) []decimal256.Num { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*decimal256.Num)(unsafe.Pointer(h.Data)), cap(b)/Decimal256SizeBytes)[:len(b)/Decimal256SizeBytes] +func (decimal256Traits) CastFromBytes(b []byte) []decimal.Decimal256 { + return GetData[decimal.Decimal256](b) } -func (decimal256Traits) CastToBytes(b []decimal256.Num) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*Decimal256SizeBytes)[:len(b)*Decimal256SizeBytes] +func (decimal256Traits) CastToBytes(b []decimal.Decimal256) []byte { + return GetBytes(b) } -func (decimal256Traits) Copy(dst, src []decimal256.Num) { copy(dst, src) } +func (decimal256Traits) Copy(dst, src []decimal.Decimal256) { copy(dst, src) } diff --git a/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_decimal32.go b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_decimal32.go new file mode 100644 index 00000000..ebca65f6 --- /dev/null +++ b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_decimal32.go @@ -0,0 +1,57 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package arrow + +import ( + "unsafe" + + "github.com/apache/arrow-go/v18/arrow/decimal" + "github.com/apache/arrow-go/v18/arrow/endian" +) + +// Decimal32 traits +var Decimal32Traits decimal32Traits + +const ( + // Decimal32SizeBytes specifies the number of bytes required to store a single decimal32 in memory + Decimal32SizeBytes = int(unsafe.Sizeof(decimal.Decimal32(0))) +) + +type decimal32Traits struct{} + +// BytesRequired returns the number of bytes required to store n elements in memory. +func (decimal32Traits) BytesRequired(n int) int { return Decimal32SizeBytes * n } + +// PutValue +func (decimal32Traits) PutValue(b []byte, v decimal.Decimal32) { + endian.Native.PutUint32(b[:4], uint32(v)) +} + +// CastFromBytes reinterprets the slice b to a slice of type uint16. +// +// NOTE: len(b) must be a multiple of Uint16SizeBytes. +func (decimal32Traits) CastFromBytes(b []byte) []decimal.Decimal32 { + return GetData[decimal.Decimal32](b) +} + +// CastToBytes reinterprets the slice b to a slice of bytes. +func (decimal32Traits) CastToBytes(b []decimal.Decimal32) []byte { + return GetBytes(b) +} + +// Copy copies src to dst. +func (decimal32Traits) Copy(dst, src []decimal.Decimal32) { copy(dst, src) } diff --git a/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_decimal64.go b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_decimal64.go new file mode 100644 index 00000000..bd07883a --- /dev/null +++ b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_decimal64.go @@ -0,0 +1,57 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package arrow + +import ( + "unsafe" + + "github.com/apache/arrow-go/v18/arrow/decimal" + "github.com/apache/arrow-go/v18/arrow/endian" +) + +// Decimal64 traits +var Decimal64Traits decimal64Traits + +const ( + // Decimal64SizeBytes specifies the number of bytes required to store a single decimal64 in memory + Decimal64SizeBytes = int(unsafe.Sizeof(decimal.Decimal64(0))) +) + +type decimal64Traits struct{} + +// BytesRequired returns the number of bytes required to store n elements in memory. +func (decimal64Traits) BytesRequired(n int) int { return Decimal64SizeBytes * n } + +// PutValue +func (decimal64Traits) PutValue(b []byte, v decimal.Decimal64) { + endian.Native.PutUint64(b[:8], uint64(v)) +} + +// CastFromBytes reinterprets the slice b to a slice of type uint16. +// +// NOTE: len(b) must be a multiple of Uint16SizeBytes. +func (decimal64Traits) CastFromBytes(b []byte) []decimal.Decimal64 { + return GetData[decimal.Decimal64](b) +} + +// CastToBytes reinterprets the slice b to a slice of bytes. +func (decimal64Traits) CastToBytes(b []decimal.Decimal64) []byte { + return GetBytes(b) +} + +// Copy copies src to dst. +func (decimal64Traits) Copy(dst, src []decimal.Decimal64) { copy(dst, src) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/type_traits_float16.go b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_float16.go similarity index 80% rename from vendor/github.com/apache/arrow/go/v14/arrow/type_traits_float16.go rename to vendor/github.com/apache/arrow-go/v18/arrow/type_traits_float16.go index c40363d3..aaba28ad 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/type_traits_float16.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_float16.go @@ -17,11 +17,10 @@ package arrow import ( - "reflect" "unsafe" - "github.com/apache/arrow/go/v14/arrow/endian" - "github.com/apache/arrow/go/v14/arrow/float16" + "github.com/apache/arrow-go/v18/arrow/endian" + "github.com/apache/arrow-go/v18/arrow/float16" ) // Float16 traits @@ -46,16 +45,12 @@ func (float16Traits) PutValue(b []byte, v float16.Num) { // // NOTE: len(b) must be a multiple of Uint16SizeBytes. func (float16Traits) CastFromBytes(b []byte) []float16.Num { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*float16.Num)(unsafe.Pointer(h.Data)), cap(b)/Float16SizeBytes)[:len(b)/Float16SizeBytes] + return GetData[float16.Num](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (float16Traits) CastToBytes(b []float16.Num) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*Float16SizeBytes)[:len(b)*Float16SizeBytes] + return GetBytes(b) } // Copy copies src to dst. diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/type_traits_interval.go b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_interval.go similarity index 78% rename from vendor/github.com/apache/arrow/go/v14/arrow/type_traits_interval.go rename to vendor/github.com/apache/arrow-go/v18/arrow/type_traits_interval.go index 35e60570..149683c8 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/type_traits_interval.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_interval.go @@ -17,11 +17,10 @@ package arrow import ( - "reflect" "unsafe" - "github.com/apache/arrow/go/v14/arrow/endian" - "github.com/apache/arrow/go/v14/arrow/internal/debug" + "github.com/apache/arrow-go/v18/arrow/endian" + "github.com/apache/arrow-go/v18/arrow/internal/debug" ) var ( @@ -57,16 +56,12 @@ func (monthTraits) PutValue(b []byte, v MonthInterval) { // // NOTE: len(b) must be a multiple of MonthIntervalSizeBytes. func (monthTraits) CastFromBytes(b []byte) []MonthInterval { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*MonthInterval)(unsafe.Pointer(h.Data)), cap(b)/MonthIntervalSizeBytes)[:len(b)/MonthIntervalSizeBytes] + return GetData[MonthInterval](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (monthTraits) CastToBytes(b []MonthInterval) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*MonthIntervalSizeBytes)[:len(b)*MonthIntervalSizeBytes] + return GetBytes(b) } // Copy copies src to dst. @@ -94,16 +89,12 @@ func (daytimeTraits) PutValue(b []byte, v DayTimeInterval) { // // NOTE: len(b) must be a multiple of DayTimeIntervalSizeBytes. func (daytimeTraits) CastFromBytes(b []byte) []DayTimeInterval { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*DayTimeInterval)(unsafe.Pointer(h.Data)), cap(b)/DayTimeIntervalSizeBytes)[:len(b)/DayTimeIntervalSizeBytes] + return GetData[DayTimeInterval](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (daytimeTraits) CastToBytes(b []DayTimeInterval) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*DayTimeIntervalSizeBytes)[:len(b)*DayTimeIntervalSizeBytes] + return GetBytes(b) } // Copy copies src to dst. @@ -132,16 +123,12 @@ func (monthDayNanoTraits) PutValue(b []byte, v MonthDayNanoInterval) { // // NOTE: len(b) must be a multiple of MonthDayNanoIntervalSizeBytes. func (monthDayNanoTraits) CastFromBytes(b []byte) []MonthDayNanoInterval { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*MonthDayNanoInterval)(unsafe.Pointer(h.Data)), cap(b)/MonthDayNanoIntervalSizeBytes)[:len(b)/MonthDayNanoIntervalSizeBytes] + return GetData[MonthDayNanoInterval](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (monthDayNanoTraits) CastToBytes(b []MonthDayNanoInterval) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*MonthDayNanoIntervalSizeBytes)[:len(b)*MonthDayNanoIntervalSizeBytes] + return GetBytes(b) } // Copy copies src to dst. diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/type_traits_numeric.gen.go b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_numeric.gen.go similarity index 75% rename from vendor/github.com/apache/arrow/go/v14/arrow/type_traits_numeric.gen.go rename to vendor/github.com/apache/arrow-go/v18/arrow/type_traits_numeric.gen.go index 6edd7529..e88b61bf 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/type_traits_numeric.gen.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_numeric.gen.go @@ -20,10 +20,9 @@ package arrow import ( "math" - "reflect" "unsafe" - "github.com/apache/arrow/go/v14/arrow/endian" + "github.com/apache/arrow-go/v18/arrow/endian" ) var ( @@ -65,16 +64,12 @@ func (int64Traits) PutValue(b []byte, v int64) { // // NOTE: len(b) must be a multiple of Int64SizeBytes. func (int64Traits) CastFromBytes(b []byte) []int64 { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*int64)(unsafe.Pointer(h.Data)), cap(b)/Int64SizeBytes)[:len(b)/Int64SizeBytes] + return GetData[int64](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (int64Traits) CastToBytes(b []int64) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*Int64SizeBytes)[:len(b)*Int64SizeBytes] + return GetBytes(b) } // Copy copies src to dst. @@ -101,16 +96,12 @@ func (uint64Traits) PutValue(b []byte, v uint64) { // // NOTE: len(b) must be a multiple of Uint64SizeBytes. func (uint64Traits) CastFromBytes(b []byte) []uint64 { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*uint64)(unsafe.Pointer(h.Data)), cap(b)/Uint64SizeBytes)[:len(b)/Uint64SizeBytes] + return GetData[uint64](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (uint64Traits) CastToBytes(b []uint64) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*Uint64SizeBytes)[:len(b)*Uint64SizeBytes] + return GetBytes(b) } // Copy copies src to dst. @@ -137,16 +128,12 @@ func (float64Traits) PutValue(b []byte, v float64) { // // NOTE: len(b) must be a multiple of Float64SizeBytes. func (float64Traits) CastFromBytes(b []byte) []float64 { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*float64)(unsafe.Pointer(h.Data)), cap(b)/Float64SizeBytes)[:len(b)/Float64SizeBytes] + return GetData[float64](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (float64Traits) CastToBytes(b []float64) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*Float64SizeBytes)[:len(b)*Float64SizeBytes] + return GetBytes(b) } // Copy copies src to dst. @@ -173,16 +160,12 @@ func (int32Traits) PutValue(b []byte, v int32) { // // NOTE: len(b) must be a multiple of Int32SizeBytes. func (int32Traits) CastFromBytes(b []byte) []int32 { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*int32)(unsafe.Pointer(h.Data)), cap(b)/Int32SizeBytes)[:len(b)/Int32SizeBytes] + return GetData[int32](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (int32Traits) CastToBytes(b []int32) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*Int32SizeBytes)[:len(b)*Int32SizeBytes] + return GetBytes(b) } // Copy copies src to dst. @@ -209,16 +192,12 @@ func (uint32Traits) PutValue(b []byte, v uint32) { // // NOTE: len(b) must be a multiple of Uint32SizeBytes. func (uint32Traits) CastFromBytes(b []byte) []uint32 { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*uint32)(unsafe.Pointer(h.Data)), cap(b)/Uint32SizeBytes)[:len(b)/Uint32SizeBytes] + return GetData[uint32](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (uint32Traits) CastToBytes(b []uint32) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*Uint32SizeBytes)[:len(b)*Uint32SizeBytes] + return GetBytes(b) } // Copy copies src to dst. @@ -245,16 +224,12 @@ func (float32Traits) PutValue(b []byte, v float32) { // // NOTE: len(b) must be a multiple of Float32SizeBytes. func (float32Traits) CastFromBytes(b []byte) []float32 { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*float32)(unsafe.Pointer(h.Data)), cap(b)/Float32SizeBytes)[:len(b)/Float32SizeBytes] + return GetData[float32](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (float32Traits) CastToBytes(b []float32) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*Float32SizeBytes)[:len(b)*Float32SizeBytes] + return GetBytes(b) } // Copy copies src to dst. @@ -281,16 +256,12 @@ func (int16Traits) PutValue(b []byte, v int16) { // // NOTE: len(b) must be a multiple of Int16SizeBytes. func (int16Traits) CastFromBytes(b []byte) []int16 { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*int16)(unsafe.Pointer(h.Data)), cap(b)/Int16SizeBytes)[:len(b)/Int16SizeBytes] + return GetData[int16](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (int16Traits) CastToBytes(b []int16) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*Int16SizeBytes)[:len(b)*Int16SizeBytes] + return GetBytes(b) } // Copy copies src to dst. @@ -317,16 +288,12 @@ func (uint16Traits) PutValue(b []byte, v uint16) { // // NOTE: len(b) must be a multiple of Uint16SizeBytes. func (uint16Traits) CastFromBytes(b []byte) []uint16 { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*uint16)(unsafe.Pointer(h.Data)), cap(b)/Uint16SizeBytes)[:len(b)/Uint16SizeBytes] + return GetData[uint16](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (uint16Traits) CastToBytes(b []uint16) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*Uint16SizeBytes)[:len(b)*Uint16SizeBytes] + return GetBytes(b) } // Copy copies src to dst. @@ -353,16 +320,12 @@ func (int8Traits) PutValue(b []byte, v int8) { // // NOTE: len(b) must be a multiple of Int8SizeBytes. func (int8Traits) CastFromBytes(b []byte) []int8 { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*int8)(unsafe.Pointer(h.Data)), cap(b)/Int8SizeBytes)[:len(b)/Int8SizeBytes] + return GetData[int8](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (int8Traits) CastToBytes(b []int8) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*Int8SizeBytes)[:len(b)*Int8SizeBytes] + return GetBytes(b) } // Copy copies src to dst. @@ -389,16 +352,12 @@ func (uint8Traits) PutValue(b []byte, v uint8) { // // NOTE: len(b) must be a multiple of Uint8SizeBytes. func (uint8Traits) CastFromBytes(b []byte) []uint8 { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*uint8)(unsafe.Pointer(h.Data)), cap(b)/Uint8SizeBytes)[:len(b)/Uint8SizeBytes] + return GetData[uint8](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (uint8Traits) CastToBytes(b []uint8) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*Uint8SizeBytes)[:len(b)*Uint8SizeBytes] + return GetBytes(b) } // Copy copies src to dst. @@ -425,16 +384,12 @@ func (time32Traits) PutValue(b []byte, v Time32) { // // NOTE: len(b) must be a multiple of Time32SizeBytes. func (time32Traits) CastFromBytes(b []byte) []Time32 { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*Time32)(unsafe.Pointer(h.Data)), cap(b)/Time32SizeBytes)[:len(b)/Time32SizeBytes] + return GetData[Time32](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (time32Traits) CastToBytes(b []Time32) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*Time32SizeBytes)[:len(b)*Time32SizeBytes] + return GetBytes(b) } // Copy copies src to dst. @@ -461,16 +416,12 @@ func (time64Traits) PutValue(b []byte, v Time64) { // // NOTE: len(b) must be a multiple of Time64SizeBytes. func (time64Traits) CastFromBytes(b []byte) []Time64 { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*Time64)(unsafe.Pointer(h.Data)), cap(b)/Time64SizeBytes)[:len(b)/Time64SizeBytes] + return GetData[Time64](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (time64Traits) CastToBytes(b []Time64) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*Time64SizeBytes)[:len(b)*Time64SizeBytes] + return GetBytes(b) } // Copy copies src to dst. @@ -497,16 +448,12 @@ func (date32Traits) PutValue(b []byte, v Date32) { // // NOTE: len(b) must be a multiple of Date32SizeBytes. func (date32Traits) CastFromBytes(b []byte) []Date32 { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*Date32)(unsafe.Pointer(h.Data)), cap(b)/Date32SizeBytes)[:len(b)/Date32SizeBytes] + return GetData[Date32](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (date32Traits) CastToBytes(b []Date32) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*Date32SizeBytes)[:len(b)*Date32SizeBytes] + return GetBytes(b) } // Copy copies src to dst. @@ -533,16 +480,12 @@ func (date64Traits) PutValue(b []byte, v Date64) { // // NOTE: len(b) must be a multiple of Date64SizeBytes. func (date64Traits) CastFromBytes(b []byte) []Date64 { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*Date64)(unsafe.Pointer(h.Data)), cap(b)/Date64SizeBytes)[:len(b)/Date64SizeBytes] + return GetData[Date64](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (date64Traits) CastToBytes(b []Date64) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*Date64SizeBytes)[:len(b)*Date64SizeBytes] + return GetBytes(b) } // Copy copies src to dst. @@ -569,16 +512,12 @@ func (durationTraits) PutValue(b []byte, v Duration) { // // NOTE: len(b) must be a multiple of DurationSizeBytes. func (durationTraits) CastFromBytes(b []byte) []Duration { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*Duration)(unsafe.Pointer(h.Data)), cap(b)/DurationSizeBytes)[:len(b)/DurationSizeBytes] + return GetData[Duration](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (durationTraits) CastToBytes(b []Duration) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*DurationSizeBytes)[:len(b)*DurationSizeBytes] + return GetBytes(b) } // Copy copies src to dst. diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/type_traits_numeric.gen.go.tmpl b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_numeric.gen.go.tmpl similarity index 85% rename from vendor/github.com/apache/arrow/go/v14/arrow/type_traits_numeric.gen.go.tmpl rename to vendor/github.com/apache/arrow-go/v18/arrow/type_traits_numeric.gen.go.tmpl index ffae975c..dd72a5b4 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/type_traits_numeric.gen.go.tmpl +++ b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_numeric.gen.go.tmpl @@ -18,10 +18,9 @@ package arrow import ( "math" - "reflect" "unsafe" - "github.com/apache/arrow/go/v14/arrow/endian" + "github.com/apache/arrow-go/v18/arrow/endian" ) var ( @@ -66,16 +65,12 @@ func ({{.name}}Traits) PutValue(b []byte, v {{.Type}}) { // // NOTE: len(b) must be a multiple of {{.Name}}SizeBytes. func ({{.name}}Traits) CastFromBytes(b []byte) []{{.Type}} { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*{{.Type}})(unsafe.Pointer(h.Data)), cap(b)/{{.Name}}SizeBytes)[:len(b)/{{.Name}}SizeBytes] + return GetData[{{.Type}}](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func ({{.name}}Traits) CastToBytes(b []{{.Type}}) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*{{.Name}}SizeBytes)[:len(b)*{{.Name}}SizeBytes] + return GetBytes(b) } // Copy copies src to dst. diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/type_traits_numeric.gen_test.go.tmpl b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_numeric.gen_test.go.tmpl similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/arrow/type_traits_numeric.gen_test.go.tmpl rename to vendor/github.com/apache/arrow-go/v18/arrow/type_traits_numeric.gen_test.go.tmpl index 96685f31..b3796915 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/type_traits_numeric.gen_test.go.tmpl +++ b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_numeric.gen_test.go.tmpl @@ -20,7 +20,7 @@ import ( "reflect" "testing" - "github.com/apache/arrow/go/v14/arrow" + "github.com/apache/arrow-go/v18/arrow" ) {{- range .In}} diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/type_traits_timestamp.go b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_timestamp.go similarity index 82% rename from vendor/github.com/apache/arrow/go/v14/arrow/type_traits_timestamp.go rename to vendor/github.com/apache/arrow-go/v18/arrow/type_traits_timestamp.go index 7c393b35..d8149c86 100644 --- a/vendor/github.com/apache/arrow/go/v14/arrow/type_traits_timestamp.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_timestamp.go @@ -17,10 +17,9 @@ package arrow import ( - "reflect" "unsafe" - "github.com/apache/arrow/go/v14/arrow/endian" + "github.com/apache/arrow-go/v18/arrow/endian" ) var TimestampTraits timestampTraits @@ -43,16 +42,12 @@ func (timestampTraits) PutValue(b []byte, v Timestamp) { // // NOTE: len(b) must be a multiple of TimestampSizeBytes. func (timestampTraits) CastFromBytes(b []byte) []Timestamp { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*Timestamp)(unsafe.Pointer(h.Data)), cap(b)/TimestampSizeBytes)[:len(b)/TimestampSizeBytes] + return GetData[Timestamp](b) } // CastToBytes reinterprets the slice b to a slice of bytes. func (timestampTraits) CastToBytes(b []Timestamp) []byte { - h := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - - return unsafe.Slice((*byte)(unsafe.Pointer(h.Data)), cap(b)*TimestampSizeBytes)[:len(b)*TimestampSizeBytes] + return GetBytes(b) } // Copy copies src to dst. diff --git a/vendor/github.com/apache/arrow/go/v14/internal/hashing/hash_string_go1.19.go b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_view.go similarity index 54% rename from vendor/github.com/apache/arrow/go/v14/internal/hashing/hash_string_go1.19.go rename to vendor/github.com/apache/arrow-go/v18/arrow/type_traits_view.go index f38eb5c5..7603a323 100644 --- a/vendor/github.com/apache/arrow/go/v14/internal/hashing/hash_string_go1.19.go +++ b/vendor/github.com/apache/arrow-go/v18/arrow/type_traits_view.go @@ -14,24 +14,35 @@ // See the License for the specific language governing permissions and // limitations under the License. -//go:build !go1.20 && !tinygo - -package hashing +package arrow import ( - "reflect" "unsafe" + + "github.com/apache/arrow-go/v18/arrow/endian" +) + +var ViewHeaderTraits viewHeaderTraits + +const ( + ViewHeaderSizeBytes = int(unsafe.Sizeof(ViewHeader{})) ) -func hashString(val string, alg uint64) uint64 { - if val == "" { - return Hash([]byte{}, alg) - } - // highly efficient way to get byte slice without copy before - // the introduction of unsafe.StringData in go1.20 - // (https://stackoverflow.com/questions/59209493/how-to-use-unsafe-get-a-byte-slice-from-a-string-without-memory-copy) - const MaxInt32 = 1<<31 - 1 - buf := (*[MaxInt32]byte)(unsafe.Pointer((*reflect.StringHeader)( - unsafe.Pointer(&val)).Data))[: len(val)&MaxInt32 : len(val)&MaxInt32] - return Hash(buf, alg) +type viewHeaderTraits struct{} + +func (viewHeaderTraits) BytesRequired(n int) int { return ViewHeaderSizeBytes * n } + +func (viewHeaderTraits) PutValue(b []byte, v ViewHeader) { + endian.Native.PutUint32(b, uint32(v.size)) + copy(b[4:], v.data[:]) +} + +func (viewHeaderTraits) CastFromBytes(b []byte) (res []ViewHeader) { + return GetData[ViewHeader](b) } + +func (viewHeaderTraits) CastToBytes(b []ViewHeader) (res []byte) { + return GetBytes(b) +} + +func (viewHeaderTraits) Copy(dst, src []ViewHeader) { copy(dst, src) } diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/unionmode_string.go b/vendor/github.com/apache/arrow-go/v18/arrow/unionmode_string.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/arrow/unionmode_string.go rename to vendor/github.com/apache/arrow-go/v18/arrow/unionmode_string.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/bitutils/bit_block_counter.go b/vendor/github.com/apache/arrow-go/v18/internal/bitutils/bit_block_counter.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/internal/bitutils/bit_block_counter.go rename to vendor/github.com/apache/arrow-go/v18/internal/bitutils/bit_block_counter.go index 86818bfd..43b2fbb2 100644 --- a/vendor/github.com/apache/arrow/go/v14/internal/bitutils/bit_block_counter.go +++ b/vendor/github.com/apache/arrow-go/v18/internal/bitutils/bit_block_counter.go @@ -21,8 +21,8 @@ import ( "math/bits" "unsafe" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/internal/utils" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/internal/utils" ) func loadWord(byt []byte) uint64 { @@ -165,7 +165,7 @@ func (b *BitBlockCounter) NextWord() BitBlockCount { } // OptionalBitBlockCounter is a useful counter to iterate through a possibly -// non-existent validity bitmap to allow us to write one code path for both +// nonexistent validity bitmap to allow us to write one code path for both // the with-nulls and no-nulls cases without giving up a lot of performance. type OptionalBitBlockCounter struct { hasBitmap bool diff --git a/vendor/github.com/apache/arrow/go/v14/internal/bitutils/bit_run_reader.go b/vendor/github.com/apache/arrow-go/v18/internal/bitutils/bit_run_reader.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/internal/bitutils/bit_run_reader.go rename to vendor/github.com/apache/arrow-go/v18/internal/bitutils/bit_run_reader.go index a1686a49..0d83f8fb 100644 --- a/vendor/github.com/apache/arrow/go/v14/internal/bitutils/bit_run_reader.go +++ b/vendor/github.com/apache/arrow-go/v18/internal/bitutils/bit_run_reader.go @@ -22,9 +22,9 @@ import ( "math/bits" "unsafe" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/internal/utils" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/internal/utils" ) // BitRun represents a run of bits with the same value of length Len diff --git a/vendor/github.com/apache/arrow/go/v14/internal/bitutils/bit_set_run_reader.go b/vendor/github.com/apache/arrow-go/v18/internal/bitutils/bit_set_run_reader.go similarity index 96% rename from vendor/github.com/apache/arrow/go/v14/internal/bitutils/bit_set_run_reader.go rename to vendor/github.com/apache/arrow-go/v18/internal/bitutils/bit_set_run_reader.go index a2269ffe..d32dec9c 100644 --- a/vendor/github.com/apache/arrow/go/v14/internal/bitutils/bit_set_run_reader.go +++ b/vendor/github.com/apache/arrow-go/v18/internal/bitutils/bit_set_run_reader.go @@ -20,8 +20,8 @@ import ( "encoding/binary" "math/bits" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/internal/utils" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/internal/utils" ) // IsMultipleOf64 returns whether v is a multiple of 64. @@ -113,7 +113,7 @@ func (br *baseSetBitRunReader) Reset(bitmap []byte, startOffset, length int64) { bitOffset := int8(startOffset % 8) if length > 0 && bitOffset != 0 { - br.curNumBits = int32(utils.MinInt(int(length), int(8-bitOffset))) + br.curNumBits = int32(utils.Min(int(length), int(8-bitOffset))) br.curWord = br.loadPartial(bitOffset, int64(br.curNumBits)) } return @@ -124,7 +124,7 @@ func (br *baseSetBitRunReader) Reset(bitmap []byte, startOffset, length int64) { endBitOffset := int8((startOffset + length) % 8) if length > 0 && endBitOffset != 0 { br.pos++ - br.curNumBits = int32(utils.MinInt(int(length), int(endBitOffset))) + br.curNumBits = int32(utils.Min(int(length), int(endBitOffset))) br.curWord = br.loadPartial(8-endBitOffset, int64(br.curNumBits)) } } @@ -219,7 +219,7 @@ func (br *baseSetBitRunReader) skipNextZeros() { if br.remaining > 0 { br.curWord = br.loadPartial(0, br.remaining) br.curNumBits = int32(br.remaining) - nzeros := int32(utils.MinInt(int(br.curNumBits), int(br.countFirstZeros(br.curWord)))) + nzeros := int32(utils.Min(int(br.curNumBits), int(br.countFirstZeros(br.curWord)))) br.curWord = br.consumeBits(br.curWord, nzeros) br.curNumBits -= nzeros br.remaining -= int64(nzeros) diff --git a/vendor/github.com/apache/arrow/go/v14/internal/bitutils/bitmap_generate.go b/vendor/github.com/apache/arrow-go/v18/internal/bitutils/bitmap_generate.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/internal/bitutils/bitmap_generate.go rename to vendor/github.com/apache/arrow-go/v18/internal/bitutils/bitmap_generate.go index 78219d81..178751d7 100644 --- a/vendor/github.com/apache/arrow/go/v14/internal/bitutils/bitmap_generate.go +++ b/vendor/github.com/apache/arrow-go/v18/internal/bitutils/bitmap_generate.go @@ -16,7 +16,7 @@ package bitutils -import "github.com/apache/arrow/go/v14/arrow/bitutil" +import "github.com/apache/arrow-go/v18/arrow/bitutil" // GenerateBits writes sequential bits to a bitmap. Bits preceding the // initial start offset are preserved, bits following the bitmap may diff --git a/vendor/github.com/apache/arrow/go/v14/internal/hashing/hash_funcs.go b/vendor/github.com/apache/arrow-go/v18/internal/hashing/hash_funcs.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/hashing/hash_funcs.go rename to vendor/github.com/apache/arrow-go/v18/internal/hashing/hash_funcs.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/hashing/hash_string.go b/vendor/github.com/apache/arrow-go/v18/internal/hashing/hash_string.go similarity index 91% rename from vendor/github.com/apache/arrow/go/v14/internal/hashing/hash_string.go rename to vendor/github.com/apache/arrow-go/v18/internal/hashing/hash_string.go index b772c7d7..c8579c1e 100644 --- a/vendor/github.com/apache/arrow/go/v14/internal/hashing/hash_string.go +++ b/vendor/github.com/apache/arrow-go/v18/internal/hashing/hash_string.go @@ -24,3 +24,7 @@ func hashString(val string, alg uint64) uint64 { buf := unsafe.Slice(unsafe.StringData(val), len(val)) return Hash(buf, alg) } + +func strToBytes(v string) []byte { + return unsafe.Slice(unsafe.StringData(v), len(v)) +} diff --git a/vendor/github.com/apache/arrow/go/v14/internal/hashing/types.tmpldata b/vendor/github.com/apache/arrow-go/v18/internal/hashing/types.tmpldata similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/hashing/types.tmpldata rename to vendor/github.com/apache/arrow-go/v18/internal/hashing/types.tmpldata diff --git a/vendor/github.com/apache/arrow/go/v14/internal/hashing/xxh3_memo_table.gen.go b/vendor/github.com/apache/arrow-go/v18/internal/hashing/xxh3_memo_table.gen.go similarity index 99% rename from vendor/github.com/apache/arrow/go/v14/internal/hashing/xxh3_memo_table.gen.go rename to vendor/github.com/apache/arrow-go/v18/internal/hashing/xxh3_memo_table.gen.go index cc996552..e99a4f8f 100644 --- a/vendor/github.com/apache/arrow/go/v14/internal/hashing/xxh3_memo_table.gen.go +++ b/vendor/github.com/apache/arrow-go/v18/internal/hashing/xxh3_memo_table.gen.go @@ -21,9 +21,9 @@ package hashing import ( "math" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/internal/utils" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/internal/utils" ) type payloadInt8 struct { diff --git a/vendor/github.com/apache/arrow/go/v14/internal/hashing/xxh3_memo_table.gen.go.tmpl b/vendor/github.com/apache/arrow-go/v18/internal/hashing/xxh3_memo_table.gen.go.tmpl similarity index 99% rename from vendor/github.com/apache/arrow/go/v14/internal/hashing/xxh3_memo_table.gen.go.tmpl rename to vendor/github.com/apache/arrow-go/v18/internal/hashing/xxh3_memo_table.gen.go.tmpl index 25164341..9ba35c72 100644 --- a/vendor/github.com/apache/arrow/go/v14/internal/hashing/xxh3_memo_table.gen.go.tmpl +++ b/vendor/github.com/apache/arrow-go/v18/internal/hashing/xxh3_memo_table.gen.go.tmpl @@ -17,8 +17,8 @@ package hashing import ( - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/internal/utils" + "github.com/apache/arrow-go/v18/arrow/bitutil" + "github.com/apache/arrow-go/v18/internal/utils" ) {{range .In}} diff --git a/vendor/github.com/apache/arrow/go/v14/internal/hashing/xxh3_memo_table.go b/vendor/github.com/apache/arrow-go/v18/internal/hashing/xxh3_memo_table.go similarity index 97% rename from vendor/github.com/apache/arrow/go/v14/internal/hashing/xxh3_memo_table.go rename to vendor/github.com/apache/arrow-go/v18/internal/hashing/xxh3_memo_table.go index 81994f0a..fbb8b335 100644 --- a/vendor/github.com/apache/arrow/go/v14/internal/hashing/xxh3_memo_table.go +++ b/vendor/github.com/apache/arrow-go/v18/internal/hashing/xxh3_memo_table.go @@ -22,7 +22,6 @@ package hashing import ( "bytes" "math" - "reflect" "unsafe" ) @@ -57,7 +56,7 @@ type MemoTable interface { // and a boolean indicating whether or not the value was found in // the table (if false, the value was inserted). An error is returned // if val is not the appropriate type for the table. This function is intended to be used by - // the BinaryMemoTable to prevent uncessary allocations of the data when converting from a []byte to interface{}. + // the BinaryMemoTable to prevent unnecessary allocations of the data when converting from a []byte to interface{}. GetOrInsertBytes(val []byte) (idx int, existed bool, err error) // GetOrInsertNull returns the index of the null value in the table, // inserting one if it hasn't already been inserted. It returns a boolean @@ -67,7 +66,7 @@ type MemoTable interface { // insert one if it doesn't already exist. Will return -1 if it doesn't exist // indicated by a false value for the boolean. GetNull() (idx int, exists bool) - // WriteOut copys the unique values of the memotable out to the byte slice + // WriteOut copies the unique values of the memotable out to the byte slice // provided. Must have allocated enough bytes for all the values. WriteOut(out []byte) // WriteOutSubset is like WriteOut, but only writes a subset of values @@ -183,13 +182,7 @@ func (BinaryMemoTable) valAsByteSlice(val interface{}) []byte { case ByteSlice: return v.Bytes() case string: - var out []byte - h := (*reflect.StringHeader)(unsafe.Pointer(&v)) - s := (*reflect.SliceHeader)(unsafe.Pointer(&out)) - s.Data = h.Data - s.Len = h.Len - s.Cap = h.Len - return out + return strToBytes(v) default: panic("invalid type for binarymemotable") } diff --git a/vendor/github.com/apache/arrow/go/v14/internal/json/json.go b/vendor/github.com/apache/arrow-go/v18/internal/json/json.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/json/json.go rename to vendor/github.com/apache/arrow-go/v18/internal/json/json.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/json/json_tinygo.go b/vendor/github.com/apache/arrow-go/v18/internal/json/json_tinygo.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/json/json_tinygo.go rename to vendor/github.com/apache/arrow-go/v18/internal/json/json_tinygo.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/Makefile b/vendor/github.com/apache/arrow-go/v18/internal/utils/Makefile similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/Makefile rename to vendor/github.com/apache/arrow-go/v18/internal/utils/Makefile diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/buf_reader.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/buf_reader.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/buf_reader.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/buf_reader.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/endians_default.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/endians_default.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/endians_default.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/endians_default.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/endians_s390x.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/endians_s390x.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/endians_s390x.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/endians_s390x.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/math.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/math.go similarity index 70% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/math.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/math.go index 62cf96ce..c8311750 100644 --- a/vendor/github.com/apache/arrow/go/v14/internal/utils/math.go +++ b/vendor/github.com/apache/arrow-go/v18/internal/utils/math.go @@ -16,32 +16,16 @@ package utils -// Min is a convenience Min function for int64 -func Min(a, b int64) int64 { - if a < b { - return a - } - return b -} +import "golang.org/x/exp/constraints" -// MinInt is a convenience Min function for int -func MinInt(a, b int) int { +func Min[T constraints.Ordered](a, b T) T { if a < b { return a } return b } -// Max is a convenience Max function for int64 -func Max(a, b int64) int64 { - if a > b { - return a - } - return b -} - -// MaxInt is a convenience Max function for int -func MaxInt(a, b int) int { +func Max[T constraints.Ordered](a, b T) T { if a > b { return a } diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/min_max.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/min_max.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/min_max.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/min_max.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_amd64.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_amd64.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_amd64.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_amd64.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_arm64.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_arm64.go similarity index 98% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_arm64.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_arm64.go index 7404e95d..d0284966 100644 --- a/vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_arm64.go +++ b/vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_arm64.go @@ -21,8 +21,9 @@ package utils import ( "os" "strings" + + "golang.org/x/sys/cpu" ) -import "golang.org/x/sys/cpu" func init() { // Added ability to enable extension via environment: diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_avx2_amd64.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_avx2_amd64.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_avx2_amd64.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_avx2_amd64.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_avx2_amd64.s b/vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_avx2_amd64.s similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_avx2_amd64.s rename to vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_avx2_amd64.s diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_neon_arm64.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_neon_arm64.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_neon_arm64.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_neon_arm64.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_neon_arm64.s b/vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_neon_arm64.s similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_neon_arm64.s rename to vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_neon_arm64.s diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_noasm.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_noasm.go similarity index 95% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_noasm.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_noasm.go index 19c24b59..625f0ea3 100644 --- a/vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_noasm.go +++ b/vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_noasm.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -//go:build noasm +//go:build noasm || (!amd64 && !arm64 && !s390x && !ppc64le) package utils diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_ppc64le.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_ppc64le.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_ppc64le.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_ppc64le.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_s390x.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_s390x.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_s390x.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_s390x.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_sse4_amd64.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_sse4_amd64.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_sse4_amd64.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_sse4_amd64.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_sse4_amd64.s b/vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_sse4_amd64.s similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/min_max_sse4_amd64.s rename to vendor/github.com/apache/arrow-go/v18/internal/utils/min_max_sse4_amd64.s diff --git a/vendor/github.com/apache/arrow-go/v18/internal/utils/recovery.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/recovery.go new file mode 100644 index 00000000..58aede47 --- /dev/null +++ b/vendor/github.com/apache/arrow-go/v18/internal/utils/recovery.go @@ -0,0 +1,31 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package utils + +import "fmt" + +// FormatRecoveredError is used in cases where a panic/recover receives an +// object which is potentially an error that could be wrapped, instead of +// formatted, so that callers can see it. This may be useful, for example, +// with custom Allocators which panic to signal failure; these panics will be +// recovered as wrapped errors, letting the client distinguish them. +func FormatRecoveredError(msg string, recovered any) error { + if err, ok := recovered.(error); ok { + return fmt.Errorf("%s: %w", msg, err) + } + return fmt.Errorf("%s: %v", msg, recovered) +} diff --git a/vendor/github.com/apache/arrow-go/v18/internal/utils/ref_count.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/ref_count.go new file mode 100644 index 00000000..9b85f75b --- /dev/null +++ b/vendor/github.com/apache/arrow-go/v18/internal/utils/ref_count.go @@ -0,0 +1,26 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package utils + +import "sync/atomic" + +// NewRefCount creates a new atomic counter set to the specified initial value. +func NewRefCount(initial int64) *atomic.Int64 { + var val atomic.Int64 + val.Store(initial) + return &val +} diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints.go.tmpl b/vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints.go.tmpl similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints.go.tmpl rename to vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints.go.tmpl diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints.tmpldata b/vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints.tmpldata similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints.tmpldata rename to vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints.tmpldata diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_amd64.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_amd64.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_amd64.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_amd64.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_amd64.go.tmpl b/vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_amd64.go.tmpl similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_amd64.go.tmpl rename to vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_amd64.go.tmpl diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_arm64.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_arm64.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_arm64.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_arm64.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_avx2_amd64.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_avx2_amd64.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_avx2_amd64.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_avx2_amd64.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_avx2_amd64.s b/vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_avx2_amd64.s similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_avx2_amd64.s rename to vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_avx2_amd64.s diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_def.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_def.go similarity index 99% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_def.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_def.go index cc3b0abb..05a9e5b6 100644 --- a/vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_def.go +++ b/vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_def.go @@ -19,7 +19,7 @@ package utils import ( "errors" - "github.com/apache/arrow/go/v14/arrow" + "github.com/apache/arrow-go/v18/arrow" ) //go:generate go run ../../arrow/_tools/tmpl -i -data=transpose_ints.tmpldata -d arch=avx2 transpose_ints_simd.go.tmpl=transpose_ints_avx2_amd64.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_noasm.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_noasm.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_noasm.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_noasm.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_noasm.go.tmpl b/vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_noasm.go.tmpl similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_noasm.go.tmpl rename to vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_noasm.go.tmpl diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_ppc64le.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_ppc64le.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_ppc64le.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_ppc64le.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_s390x.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_s390x.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_s390x.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_s390x.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_s390x.go.tmpl b/vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_s390x.go.tmpl similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_s390x.go.tmpl rename to vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_s390x.go.tmpl diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_simd.go.tmpl b/vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_simd.go.tmpl similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_simd.go.tmpl rename to vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_simd.go.tmpl diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_sse4_amd64.go b/vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_sse4_amd64.go similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_sse4_amd64.go rename to vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_sse4_amd64.go diff --git a/vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_sse4_amd64.s b/vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_sse4_amd64.s similarity index 100% rename from vendor/github.com/apache/arrow/go/v14/internal/utils/transpose_ints_sse4_amd64.s rename to vendor/github.com/apache/arrow-go/v18/internal/utils/transpose_ints_sse4_amd64.s diff --git a/vendor/github.com/apache/arrow/go/v14/LICENSE.txt b/vendor/github.com/apache/arrow/go/v14/LICENSE.txt deleted file mode 100644 index 57310329..00000000 --- a/vendor/github.com/apache/arrow/go/v14/LICENSE.txt +++ /dev/null @@ -1,1791 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - --------------------------------------------------------------------------------- - -src/arrow/util (some portions): Apache 2.0, and 3-clause BSD - -Some portions of this module are derived from code in the Chromium project, -copyright (c) Google inc and (c) The Chromium Authors and licensed under the -Apache 2.0 License or the under the 3-clause BSD license: - - Copyright (c) 2013 The Chromium Authors. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- - -This project includes code from Daniel Lemire's FrameOfReference project. - -https://github.com/lemire/FrameOfReference/blob/6ccaf9e97160f9a3b299e23a8ef739e711ef0c71/src/bpacking.cpp - -Copyright: 2013 Daniel Lemire -Home page: http://lemire.me/en/ -Project page: https://github.com/lemire/FrameOfReference -License: Apache License Version 2.0 http://www.apache.org/licenses/LICENSE-2.0 - --------------------------------------------------------------------------------- - -This project includes code from the TensorFlow project - -Copyright 2015 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - --------------------------------------------------------------------------------- - -This project includes code from the NumPy project. - -https://github.com/numpy/numpy/blob/e1f191c46f2eebd6cb892a4bfe14d9dd43a06c4e/numpy/core/src/multiarray/multiarraymodule.c#L2910 - -https://github.com/numpy/numpy/blob/68fd82271b9ea5a9e50d4e761061dfcca851382a/numpy/core/src/multiarray/datetime.c - -Copyright (c) 2005-2017, NumPy Developers. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - * Neither the name of the NumPy Developers nor the names of any - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- - -This project includes code from the Boost project - -Boost Software License - Version 1.0 - August 17th, 2003 - -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - --------------------------------------------------------------------------------- - -This project includes code from the FlatBuffers project - -Copyright 2014 Google Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - --------------------------------------------------------------------------------- - -This project includes code from the tslib project - -Copyright 2015 Microsoft Corporation. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - --------------------------------------------------------------------------------- - -This project includes code from the jemalloc project - -https://github.com/jemalloc/jemalloc - -Copyright (C) 2002-2017 Jason Evans . -All rights reserved. -Copyright (C) 2007-2012 Mozilla Foundation. All rights reserved. -Copyright (C) 2009-2017 Facebook, Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice(s), - this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice(s), - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- - -This project includes code from the Go project, BSD 3-clause license + PATENTS -weak patent termination clause -(https://github.com/golang/go/blob/master/PATENTS). - -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- - -This project includes code from the hs2client - -https://github.com/cloudera/hs2client - -Copyright 2016 Cloudera Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - --------------------------------------------------------------------------------- - -The script ci/scripts/util_wait_for_it.sh has the following license - -Copyright (c) 2016 Giles Hall - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - --------------------------------------------------------------------------------- - -The script r/configure has the following license (MIT) - -Copyright (c) 2017, Jeroen Ooms and Jim Hester - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - --------------------------------------------------------------------------------- - -cpp/src/arrow/util/logging.cc, cpp/src/arrow/util/logging.h and -cpp/src/arrow/util/logging-test.cc are adapted from -Ray Project (https://github.com/ray-project/ray) (Apache 2.0). - -Copyright (c) 2016 Ray Project (https://github.com/ray-project/ray) - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - --------------------------------------------------------------------------------- -The files cpp/src/arrow/vendored/datetime/date.h, cpp/src/arrow/vendored/datetime/tz.h, -cpp/src/arrow/vendored/datetime/tz_private.h, cpp/src/arrow/vendored/datetime/ios.h, -cpp/src/arrow/vendored/datetime/ios.mm, -cpp/src/arrow/vendored/datetime/tz.cpp are adapted from -Howard Hinnant's date library (https://github.com/HowardHinnant/date) -It is licensed under MIT license. - -The MIT License (MIT) -Copyright (c) 2015, 2016, 2017 Howard Hinnant -Copyright (c) 2016 Adrian Colomitchi -Copyright (c) 2017 Florian Dang -Copyright (c) 2017 Paul Thompson -Copyright (c) 2018 Tomasz Kamiński - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - --------------------------------------------------------------------------------- - -The file cpp/src/arrow/util/utf8.h includes code adapted from the page - https://bjoern.hoehrmann.de/utf-8/decoder/dfa/ -with the following license (MIT) - -Copyright (c) 2008-2009 Bjoern Hoehrmann - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - --------------------------------------------------------------------------------- - -The file cpp/src/arrow/vendored/string_view.hpp has the following license - -Boost Software License - Version 1.0 - August 17th, 2003 - -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - --------------------------------------------------------------------------------- - -The files in cpp/src/arrow/vendored/xxhash/ have the following license -(BSD 2-Clause License) - -xxHash Library -Copyright (c) 2012-2014, Yann Collet -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -You can contact the author at : -- xxHash homepage: http://www.xxhash.com -- xxHash source repository : https://github.com/Cyan4973/xxHash - --------------------------------------------------------------------------------- - -The files in cpp/src/arrow/vendored/double-conversion/ have the following license -(BSD 3-Clause License) - -Copyright 2006-2011, the V8 project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- - -The files in cpp/src/arrow/vendored/uriparser/ have the following license -(BSD 3-Clause License) - -uriparser - RFC 3986 URI parsing library - -Copyright (C) 2007, Weijia Song -Copyright (C) 2007, Sebastian Pipping -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - * Redistributions of source code must retain the above - copyright notice, this list of conditions and the following - disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - * Neither the name of the nor the names of its - contributors may be used to endorse or promote products - derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- - -The files under dev/tasks/conda-recipes have the following license - -BSD 3-clause license -Copyright (c) 2015-2018, conda-forge -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR -TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- - -The files in cpp/src/arrow/vendored/utf8cpp/ have the following license - -Copyright 2006 Nemanja Trifunovic - -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - --------------------------------------------------------------------------------- - -This project includes code from Apache Kudu. - - * cpp/cmake_modules/CompilerInfo.cmake is based on Kudu's cmake_modules/CompilerInfo.cmake - -Copyright: 2016 The Apache Software Foundation. -Home page: https://kudu.apache.org/ -License: http://www.apache.org/licenses/LICENSE-2.0 - --------------------------------------------------------------------------------- - -This project includes code from Apache Impala (incubating), formerly -Impala. The Impala code and rights were donated to the ASF as part of the -Incubator process after the initial code imports into Apache Parquet. - -Copyright: 2012 Cloudera, Inc. -Copyright: 2016 The Apache Software Foundation. -Home page: http://impala.apache.org/ -License: http://www.apache.org/licenses/LICENSE-2.0 - --------------------------------------------------------------------------------- - -This project includes code from Apache Aurora. - -* dev/release/{release,changelog,release-candidate} are based on the scripts from - Apache Aurora - -Copyright: 2016 The Apache Software Foundation. -Home page: https://aurora.apache.org/ -License: http://www.apache.org/licenses/LICENSE-2.0 - --------------------------------------------------------------------------------- - -This project includes code from the Google styleguide. - -* cpp/build-support/cpplint.py is based on the scripts from the Google styleguide. - -Copyright: 2009 Google Inc. All rights reserved. -Homepage: https://github.com/google/styleguide -License: 3-clause BSD - --------------------------------------------------------------------------------- - -This project includes code from Snappy. - -* cpp/cmake_modules/{SnappyCMakeLists.txt,SnappyConfig.h} are based on code - from Google's Snappy project. - -Copyright: 2009 Google Inc. All rights reserved. -Homepage: https://github.com/google/snappy -License: 3-clause BSD - --------------------------------------------------------------------------------- - -This project includes code from the manylinux project. - -* python/manylinux1/scripts/{build_python.sh,python-tag-abi-tag.py, - requirements.txt} are based on code from the manylinux project. - -Copyright: 2016 manylinux -Homepage: https://github.com/pypa/manylinux -License: The MIT License (MIT) - --------------------------------------------------------------------------------- - -This project includes code from the cymove project: - -* python/pyarrow/includes/common.pxd includes code from the cymove project - -The MIT License (MIT) -Copyright (c) 2019 Omer Ozarslan - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE -OR OTHER DEALINGS IN THE SOFTWARE. - --------------------------------------------------------------------------------- - -The projects includes code from the Ursabot project under the dev/archery -directory. - -License: BSD 2-Clause - -Copyright 2019 RStudio, Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- - -This project include code from CMake. - -* cpp/cmake_modules/FindGTest.cmake is based on code from CMake. - -Copyright: Copyright 2000-2019 Kitware, Inc. and Contributors -Homepage: https://gitlab.kitware.com/cmake/cmake -License: 3-clause BSD - --------------------------------------------------------------------------------- - -This project include code from mingw-w64. - -* cpp/src/arrow/util/cpu-info.cc has a polyfill for mingw-w64 < 5 - -Copyright (c) 2009 - 2013 by the mingw-w64 project -Homepage: https://mingw-w64.org -License: Zope Public License (ZPL) Version 2.1. - ---------------------------------------------------------------------------------- - -This project include code from Google's Asylo project. - -* cpp/src/arrow/result.h is based on status_or.h - -Copyright (c) Copyright 2017 Asylo authors -Homepage: https://asylo.dev/ -License: Apache 2.0 - --------------------------------------------------------------------------------- - -This project includes code from Google's protobuf project - -* cpp/src/arrow/result.h ARROW_ASSIGN_OR_RAISE is based off ASSIGN_OR_RETURN - -Copyright 2008 Google Inc. All rights reserved. -Homepage: https://developers.google.com/protocol-buffers/ -License: - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Code generated by the Protocol Buffer compiler is owned by the owner -of the input file used when generating it. This code is not -standalone and requires a support library to be linked with it. This -support library is itself covered by the above license. - --------------------------------------------------------------------------------- - -3rdparty dependency LLVM is statically linked in certain binary distributions. -Additionally some sections of source code have been derived from sources in LLVM -and have been clearly labeled as such. LLVM has the following license: - -============================================================================== -LLVM Release License -============================================================================== -University of Illinois/NCSA -Open Source License - -Copyright (c) 2003-2018 University of Illinois at Urbana-Champaign. -All rights reserved. - -Developed by: - - LLVM Team - - University of Illinois at Urbana-Champaign - - http://llvm.org - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal with -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimers. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimers in the - documentation and/or other materials provided with the distribution. - - * Neither the names of the LLVM Team, University of Illinois at - Urbana-Champaign, nor the names of its contributors may be used to - endorse or promote products derived from this Software without specific - prior written permission. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE -SOFTWARE. - -============================================================================== -Copyrights and Licenses for Third Party Software Distributed with LLVM: -============================================================================== -The LLVM software contains code written by third parties. Such software will -have its own individual LICENSE.TXT file in the directory in which it appears. -This file will describe the copyrights, license, and restrictions which apply -to that code. - -The disclaimer of warranty in the University of Illinois Open Source License -applies to all code in the LLVM Distribution, and nothing in any of the -other licenses gives permission to use the names of the LLVM Team or the -University of Illinois to endorse or promote products derived from this -Software. - -The following pieces of software have additional or alternate copyrights, -licenses, and/or restrictions: - -Program Directory -------- --------- -Google Test llvm/utils/unittest/googletest -OpenBSD regex llvm/lib/Support/{reg*, COPYRIGHT.regex} -pyyaml tests llvm/test/YAMLParser/{*.data, LICENSE.TXT} -ARM contributions llvm/lib/Target/ARM/LICENSE.TXT -md5 contributions llvm/lib/Support/MD5.cpp llvm/include/llvm/Support/MD5.h - --------------------------------------------------------------------------------- - -3rdparty dependency gRPC is statically linked in certain binary -distributions, like the python wheels. gRPC has the following license: - -Copyright 2014 gRPC authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - --------------------------------------------------------------------------------- - -3rdparty dependency Apache Thrift is statically linked in certain binary -distributions, like the python wheels. Apache Thrift has the following license: - -Apache Thrift -Copyright (C) 2006 - 2019, The Apache Software Foundation - -This product includes software developed at -The Apache Software Foundation (http://www.apache.org/). - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - --------------------------------------------------------------------------------- - -3rdparty dependency Apache ORC is statically linked in certain binary -distributions, like the python wheels. Apache ORC has the following license: - -Apache ORC -Copyright 2013-2019 The Apache Software Foundation - -This product includes software developed by The Apache Software -Foundation (http://www.apache.org/). - -This product includes software developed by Hewlett-Packard: -(c) Copyright [2014-2015] Hewlett-Packard Development Company, L.P - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - --------------------------------------------------------------------------------- - -3rdparty dependency zstd is statically linked in certain binary -distributions, like the python wheels. ZSTD has the following license: - -BSD License - -For Zstandard software - -Copyright (c) 2016-present, Facebook, Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name Facebook nor the names of its contributors may be used to - endorse or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- - -3rdparty dependency lz4 is statically linked in certain binary -distributions, like the python wheels. lz4 has the following license: - -LZ4 Library -Copyright (c) 2011-2016, Yann Collet -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- - -3rdparty dependency Brotli is statically linked in certain binary -distributions, like the python wheels. Brotli has the following license: - -Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - --------------------------------------------------------------------------------- - -3rdparty dependency snappy is statically linked in certain binary -distributions, like the python wheels. snappy has the following license: - -Copyright 2011, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=== - -Some of the benchmark data in testdata/ is licensed differently: - - - fireworks.jpeg is Copyright 2013 Steinar H. Gunderson, and - is licensed under the Creative Commons Attribution 3.0 license - (CC-BY-3.0). See https://creativecommons.org/licenses/by/3.0/ - for more information. - - - kppkn.gtb is taken from the Gaviota chess tablebase set, and - is licensed under the MIT License. See - https://sites.google.com/site/gaviotachessengine/Home/endgame-tablebases-1 - for more information. - - - paper-100k.pdf is an excerpt (bytes 92160 to 194560) from the paper - “Combinatorial Modeling of Chromatin Features Quantitatively Predicts DNA - Replication Timing in _Drosophila_” by Federico Comoglio and Renato Paro, - which is licensed under the CC-BY license. See - http://www.ploscompbiol.org/static/license for more ifnormation. - - - alice29.txt, asyoulik.txt, plrabn12.txt and lcet10.txt are from Project - Gutenberg. The first three have expired copyrights and are in the public - domain; the latter does not have expired copyright, but is still in the - public domain according to the license information - (http://www.gutenberg.org/ebooks/53). - --------------------------------------------------------------------------------- - -3rdparty dependency gflags is statically linked in certain binary -distributions, like the python wheels. gflags has the following license: - -Copyright (c) 2006, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- - -3rdparty dependency glog is statically linked in certain binary -distributions, like the python wheels. glog has the following license: - -Copyright (c) 2008, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -A function gettimeofday in utilities.cc is based on - -http://www.google.com/codesearch/p?hl=en#dR3YEbitojA/COPYING&q=GetSystemTimeAsFileTime%20license:bsd - -The license of this code is: - -Copyright (c) 2003-2008, Jouni Malinen and contributors -All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -3. Neither the name(s) of the above-listed copyright holder(s) nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- - -3rdparty dependency re2 is statically linked in certain binary -distributions, like the python wheels. re2 has the following license: - -Copyright (c) 2009 The RE2 Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its contributors - may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- - -3rdparty dependency c-ares is statically linked in certain binary -distributions, like the python wheels. c-ares has the following license: - -# c-ares license - -Copyright (c) 2007 - 2018, Daniel Stenberg with many contributors, see AUTHORS -file. - -Copyright 1998 by the Massachusetts Institute of Technology. - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, provided that -the above copyright notice appear in all copies and that both that copyright -notice and this permission notice appear in supporting documentation, and that -the name of M.I.T. not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -M.I.T. makes no representations about the suitability of this software for any -purpose. It is provided "as is" without express or implied warranty. - --------------------------------------------------------------------------------- - -3rdparty dependency zlib is redistributed as a dynamically linked shared -library in certain binary distributions, like the python wheels. In the future -this will likely change to static linkage. zlib has the following license: - -zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.11, January 15th, 2017 - - Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu - --------------------------------------------------------------------------------- - -3rdparty dependency openssl is redistributed as a dynamically linked shared -library in certain binary distributions, like the python wheels. openssl -preceding version 3 has the following license: - - LICENSE ISSUES - ============== - - The OpenSSL toolkit stays under a double license, i.e. both the conditions of - the OpenSSL License and the original SSLeay license apply to the toolkit. - See below for the actual license texts. - - OpenSSL License - --------------- - -/* ==================================================================== - * Copyright (c) 1998-2019 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - - Original SSLeay License - ----------------------- - -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - --------------------------------------------------------------------------------- - -This project includes code from the rtools-backports project. - -* ci/scripts/PKGBUILD and ci/scripts/r_windows_build.sh are based on code - from the rtools-backports project. - -Copyright: Copyright (c) 2013 - 2019, Алексей and Jeroen Ooms. -All rights reserved. -Homepage: https://github.com/r-windows/rtools-backports -License: 3-clause BSD - --------------------------------------------------------------------------------- - -Some code from pandas has been adapted for the pyarrow codebase. pandas is -available under the 3-clause BSD license, which follows: - -pandas license -============== - -Copyright (c) 2011-2012, Lambda Foundry, Inc. and PyData Development Team -All rights reserved. - -Copyright (c) 2008-2011 AQR Capital Management, LLC -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - * Neither the name of the copyright holder nor the names of any - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- - -Some bits from DyND, in particular aspects of the build system, have been -adapted from libdynd and dynd-python under the terms of the BSD 2-clause -license - -The BSD 2-Clause License - - Copyright (C) 2011-12, Dynamic NDArray Developers - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Dynamic NDArray Developers list: - - * Mark Wiebe - * Continuum Analytics - --------------------------------------------------------------------------------- - -Some source code from Ibis (https://github.com/cloudera/ibis) has been adapted -for PyArrow. Ibis is released under the Apache License, Version 2.0. - --------------------------------------------------------------------------------- - -dev/tasks/homebrew-formulae/apache-arrow.rb has the following license: - -BSD 2-Clause License - -Copyright (c) 2009-present, Homebrew contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ----------------------------------------------------------------------- - -cpp/src/arrow/vendored/base64.cpp has the following license - -ZLIB License - -Copyright (C) 2004-2017 René Nyffenegger - -This source code is provided 'as-is', without any express or implied -warranty. In no event will the author be held liable for any damages arising -from the use of this software. - -Permission is granted to anyone to use this software for any purpose, including -commercial applications, and to alter it and redistribute it freely, subject to -the following restrictions: - -1. The origin of this source code must not be misrepresented; you must not - claim that you wrote the original source code. If you use this source code - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original source code. - -3. This notice may not be removed or altered from any source distribution. - -René Nyffenegger rene.nyffenegger@adp-gmbh.ch - --------------------------------------------------------------------------------- - -The file cpp/src/arrow/vendored/optional.hpp has the following license - -Boost Software License - Version 1.0 - August 17th, 2003 - -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - --------------------------------------------------------------------------------- - -The file cpp/src/arrow/vendored/musl/strptime.c has the following license - -Copyright © 2005-2020 Rich Felker, et al. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/decimal128.go b/vendor/github.com/apache/arrow/go/v14/arrow/array/decimal128.go deleted file mode 100644 index 33175316..00000000 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/decimal128.go +++ /dev/null @@ -1,365 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package array - -import ( - "bytes" - "fmt" - "math" - "math/big" - "reflect" - "strings" - "sync/atomic" - - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/decimal128" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" -) - -// A type which represents an immutable sequence of 128-bit decimal values. -type Decimal128 struct { - array - - values []decimal128.Num -} - -func NewDecimal128Data(data arrow.ArrayData) *Decimal128 { - a := &Decimal128{} - a.refCount = 1 - a.setData(data.(*Data)) - return a -} - -func (a *Decimal128) Value(i int) decimal128.Num { return a.values[i] } - -func (a *Decimal128) ValueStr(i int) string { - if a.IsNull(i) { - return NullValueStr - } - return a.GetOneForMarshal(i).(string) -} - -func (a *Decimal128) Values() []decimal128.Num { return a.values } - -func (a *Decimal128) String() string { - o := new(strings.Builder) - o.WriteString("[") - for i := 0; i < a.Len(); i++ { - if i > 0 { - fmt.Fprintf(o, " ") - } - switch { - case a.IsNull(i): - o.WriteString(NullValueStr) - default: - fmt.Fprintf(o, "%v", a.Value(i)) - } - } - o.WriteString("]") - return o.String() -} - -func (a *Decimal128) setData(data *Data) { - a.array.setData(data) - vals := data.buffers[1] - if vals != nil { - a.values = arrow.Decimal128Traits.CastFromBytes(vals.Bytes()) - beg := a.array.data.offset - end := beg + a.array.data.length - a.values = a.values[beg:end] - } -} - -func (a *Decimal128) GetOneForMarshal(i int) interface{} { - if a.IsNull(i) { - return nil - } - - typ := a.DataType().(*arrow.Decimal128Type) - f := (&big.Float{}).SetInt(a.Value(i).BigInt()) - f.Quo(f, big.NewFloat(math.Pow10(int(typ.Scale)))) - return f.Text('g', int(typ.Precision)) -} - -// ["1.23", ] -func (a *Decimal128) MarshalJSON() ([]byte, error) { - vals := make([]interface{}, a.Len()) - for i := 0; i < a.Len(); i++ { - vals[i] = a.GetOneForMarshal(i) - } - return json.Marshal(vals) -} - -func arrayEqualDecimal128(left, right *Decimal128) bool { - for i := 0; i < left.Len(); i++ { - if left.IsNull(i) { - continue - } - if left.Value(i) != right.Value(i) { - return false - } - } - return true -} - -type Decimal128Builder struct { - builder - - dtype *arrow.Decimal128Type - data *memory.Buffer - rawData []decimal128.Num -} - -func NewDecimal128Builder(mem memory.Allocator, dtype *arrow.Decimal128Type) *Decimal128Builder { - return &Decimal128Builder{ - builder: builder{refCount: 1, mem: mem}, - dtype: dtype, - } -} - -func (b *Decimal128Builder) Type() arrow.DataType { return b.dtype } - -// Release decreases the reference count by 1. -// When the reference count goes to zero, the memory is freed. -func (b *Decimal128Builder) Release() { - debug.Assert(atomic.LoadInt64(&b.refCount) > 0, "too many releases") - - if atomic.AddInt64(&b.refCount, -1) == 0 { - if b.nullBitmap != nil { - b.nullBitmap.Release() - b.nullBitmap = nil - } - if b.data != nil { - b.data.Release() - b.data = nil - b.rawData = nil - } - } -} - -func (b *Decimal128Builder) Append(v decimal128.Num) { - b.Reserve(1) - b.UnsafeAppend(v) -} - -func (b *Decimal128Builder) UnsafeAppend(v decimal128.Num) { - bitutil.SetBit(b.nullBitmap.Bytes(), b.length) - b.rawData[b.length] = v - b.length++ -} - -func (b *Decimal128Builder) AppendNull() { - b.Reserve(1) - b.UnsafeAppendBoolToBitmap(false) -} - -func (b *Decimal128Builder) AppendNulls(n int) { - for i := 0; i < n; i++ { - b.AppendNull() - } -} - -func (b *Decimal128Builder) AppendEmptyValue() { - b.Append(decimal128.Num{}) -} - -func (b *Decimal128Builder) AppendEmptyValues(n int) { - for i := 0; i < n; i++ { - b.AppendEmptyValue() - } -} - -func (b *Decimal128Builder) UnsafeAppendBoolToBitmap(isValid bool) { - if isValid { - bitutil.SetBit(b.nullBitmap.Bytes(), b.length) - } else { - b.nulls++ - } - b.length++ -} - -// AppendValues will append the values in the v slice. The valid slice determines which values -// in v are valid (not null). The valid slice must either be empty or be equal in length to v. If empty, -// all values in v are appended and considered valid. -func (b *Decimal128Builder) AppendValues(v []decimal128.Num, valid []bool) { - if len(v) != len(valid) && len(valid) != 0 { - panic("len(v) != len(valid) && len(valid) != 0") - } - - if len(v) == 0 { - return - } - - b.Reserve(len(v)) - if len(v) > 0 { - arrow.Decimal128Traits.Copy(b.rawData[b.length:], v) - } - b.builder.unsafeAppendBoolsToBitmap(valid, len(v)) -} - -func (b *Decimal128Builder) init(capacity int) { - b.builder.init(capacity) - - b.data = memory.NewResizableBuffer(b.mem) - bytesN := arrow.Decimal128Traits.BytesRequired(capacity) - b.data.Resize(bytesN) - b.rawData = arrow.Decimal128Traits.CastFromBytes(b.data.Bytes()) -} - -// Reserve ensures there is enough space for appending n elements -// by checking the capacity and calling Resize if necessary. -func (b *Decimal128Builder) Reserve(n int) { - b.builder.reserve(n, b.Resize) -} - -// Resize adjusts the space allocated by b to n elements. If n is greater than b.Cap(), -// additional memory will be allocated. If n is smaller, the allocated memory may reduced. -func (b *Decimal128Builder) Resize(n int) { - nBuilder := n - if n < minBuilderCapacity { - n = minBuilderCapacity - } - - if b.capacity == 0 { - b.init(n) - } else { - b.builder.resize(nBuilder, b.init) - b.data.Resize(arrow.Decimal128Traits.BytesRequired(n)) - b.rawData = arrow.Decimal128Traits.CastFromBytes(b.data.Bytes()) - } -} - -// NewArray creates a Decimal128 array from the memory buffers used by the builder and resets the Decimal128Builder -// so it can be used to build a new array. -func (b *Decimal128Builder) NewArray() arrow.Array { - return b.NewDecimal128Array() -} - -// NewDecimal128Array creates a Decimal128 array from the memory buffers used by the builder and resets the Decimal128Builder -// so it can be used to build a new array. -func (b *Decimal128Builder) NewDecimal128Array() (a *Decimal128) { - data := b.newData() - a = NewDecimal128Data(data) - data.Release() - return -} - -func (b *Decimal128Builder) newData() (data *Data) { - bytesRequired := arrow.Decimal128Traits.BytesRequired(b.length) - if bytesRequired > 0 && bytesRequired < b.data.Len() { - // trim buffers - b.data.Resize(bytesRequired) - } - data = NewData(b.dtype, b.length, []*memory.Buffer{b.nullBitmap, b.data}, nil, b.nulls, 0) - b.reset() - - if b.data != nil { - b.data.Release() - b.data = nil - b.rawData = nil - } - - return -} - -func (b *Decimal128Builder) AppendValueFromString(s string) error { - if s == NullValueStr { - b.AppendNull() - return nil - } - val, err := decimal128.FromString(s, b.dtype.Precision, b.dtype.Scale) - if err != nil { - b.AppendNull() - return err - } - b.Append(val) - return nil -} - -func (b *Decimal128Builder) UnmarshalOne(dec *json.Decoder) error { - t, err := dec.Token() - if err != nil { - return err - } - - switch v := t.(type) { - case float64: - val, err := decimal128.FromFloat64(v, b.dtype.Precision, b.dtype.Scale) - if err != nil { - return err - } - b.Append(val) - case string: - val, err := decimal128.FromString(v, b.dtype.Precision, b.dtype.Scale) - if err != nil { - return err - } - b.Append(val) - case json.Number: - val, err := decimal128.FromString(v.String(), b.dtype.Precision, b.dtype.Scale) - if err != nil { - return err - } - b.Append(val) - case nil: - b.AppendNull() - return nil - default: - return &json.UnmarshalTypeError{ - Value: fmt.Sprint(t), - Type: reflect.TypeOf(decimal128.Num{}), - Offset: dec.InputOffset(), - } - } - - return nil -} - -func (b *Decimal128Builder) Unmarshal(dec *json.Decoder) error { - for dec.More() { - if err := b.UnmarshalOne(dec); err != nil { - return err - } - } - return nil -} - -// UnmarshalJSON will add the unmarshalled values to this builder. -// -// If the values are strings, they will get parsed with big.ParseFloat using -// a rounding mode of big.ToNearestAway currently. -func (b *Decimal128Builder) UnmarshalJSON(data []byte) error { - dec := json.NewDecoder(bytes.NewReader(data)) - t, err := dec.Token() - if err != nil { - return err - } - - if delim, ok := t.(json.Delim); !ok || delim != '[' { - return fmt.Errorf("decimal128 builder must unpack from json array, found %s", delim) - } - - return b.Unmarshal(dec) -} - -var ( - _ arrow.Array = (*Decimal128)(nil) - _ Builder = (*Decimal128Builder)(nil) -) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/array/decimal256.go b/vendor/github.com/apache/arrow/go/v14/arrow/array/decimal256.go deleted file mode 100644 index d63544f7..00000000 --- a/vendor/github.com/apache/arrow/go/v14/arrow/array/decimal256.go +++ /dev/null @@ -1,364 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package array - -import ( - "bytes" - "fmt" - "math" - "math/big" - "reflect" - "strings" - "sync/atomic" - - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/bitutil" - "github.com/apache/arrow/go/v14/arrow/decimal256" - "github.com/apache/arrow/go/v14/arrow/internal/debug" - "github.com/apache/arrow/go/v14/arrow/memory" - "github.com/apache/arrow/go/v14/internal/json" -) - -// Decimal256 is a type that represents an immutable sequence of 256-bit decimal values. -type Decimal256 struct { - array - - values []decimal256.Num -} - -func NewDecimal256Data(data arrow.ArrayData) *Decimal256 { - a := &Decimal256{} - a.refCount = 1 - a.setData(data.(*Data)) - return a -} - -func (a *Decimal256) Value(i int) decimal256.Num { return a.values[i] } - -func (a *Decimal256) ValueStr(i int) string { - if a.IsNull(i) { - return NullValueStr - } - return a.GetOneForMarshal(i).(string) -} - -func (a *Decimal256) Values() []decimal256.Num { return a.values } - -func (a *Decimal256) String() string { - o := new(strings.Builder) - o.WriteString("[") - for i := 0; i < a.Len(); i++ { - if i > 0 { - fmt.Fprintf(o, " ") - } - switch { - case a.IsNull(i): - o.WriteString(NullValueStr) - default: - fmt.Fprintf(o, "%v", a.Value(i)) - } - } - o.WriteString("]") - return o.String() -} - -func (a *Decimal256) setData(data *Data) { - a.array.setData(data) - vals := data.buffers[1] - if vals != nil { - a.values = arrow.Decimal256Traits.CastFromBytes(vals.Bytes()) - beg := a.array.data.offset - end := beg + a.array.data.length - a.values = a.values[beg:end] - } -} - -func (a *Decimal256) GetOneForMarshal(i int) interface{} { - if a.IsNull(i) { - return nil - } - - typ := a.DataType().(*arrow.Decimal256Type) - f := (&big.Float{}).SetInt(a.Value(i).BigInt()) - f.Quo(f, big.NewFloat(math.Pow10(int(typ.Scale)))) - return f.Text('g', int(typ.Precision)) -} - -func (a *Decimal256) MarshalJSON() ([]byte, error) { - vals := make([]interface{}, a.Len()) - for i := 0; i < a.Len(); i++ { - vals[i] = a.GetOneForMarshal(i) - } - return json.Marshal(vals) -} - -func arrayEqualDecimal256(left, right *Decimal256) bool { - for i := 0; i < left.Len(); i++ { - if left.IsNull(i) { - continue - } - if left.Value(i) != right.Value(i) { - return false - } - } - return true -} - -type Decimal256Builder struct { - builder - - dtype *arrow.Decimal256Type - data *memory.Buffer - rawData []decimal256.Num -} - -func NewDecimal256Builder(mem memory.Allocator, dtype *arrow.Decimal256Type) *Decimal256Builder { - return &Decimal256Builder{ - builder: builder{refCount: 1, mem: mem}, - dtype: dtype, - } -} - -// Release decreases the reference count by 1. -// When the reference count goes to zero, the memory is freed. -func (b *Decimal256Builder) Release() { - debug.Assert(atomic.LoadInt64(&b.refCount) > 0, "too many releases") - - if atomic.AddInt64(&b.refCount, -1) == 0 { - if b.nullBitmap != nil { - b.nullBitmap.Release() - b.nullBitmap = nil - } - if b.data != nil { - b.data.Release() - b.data = nil - b.rawData = nil - } - } -} - -func (b *Decimal256Builder) Append(v decimal256.Num) { - b.Reserve(1) - b.UnsafeAppend(v) -} - -func (b *Decimal256Builder) UnsafeAppend(v decimal256.Num) { - bitutil.SetBit(b.nullBitmap.Bytes(), b.length) - b.rawData[b.length] = v - b.length++ -} - -func (b *Decimal256Builder) AppendNull() { - b.Reserve(1) - b.UnsafeAppendBoolToBitmap(false) -} - -func (b *Decimal256Builder) AppendNulls(n int) { - for i := 0; i < n; i++ { - b.AppendNull() - } -} - -func (b *Decimal256Builder) AppendEmptyValue() { - b.Append(decimal256.Num{}) -} - -func (b *Decimal256Builder) AppendEmptyValues(n int) { - for i := 0; i < n; i++ { - b.AppendEmptyValue() - } -} - -func (b *Decimal256Builder) Type() arrow.DataType { return b.dtype } - -func (b *Decimal256Builder) UnsafeAppendBoolToBitmap(isValid bool) { - if isValid { - bitutil.SetBit(b.nullBitmap.Bytes(), b.length) - } else { - b.nulls++ - } - b.length++ -} - -// AppendValues will append the values in the v slice. The valid slice determines which values -// in v are valid (not null). The valid slice must either be empty or be equal in length to v. If empty, -// all values in v are appended and considered valid. -func (b *Decimal256Builder) AppendValues(v []decimal256.Num, valid []bool) { - if len(v) != len(valid) && len(valid) != 0 { - panic("arrow/array: len(v) != len(valid) && len(valid) != 0") - } - - if len(v) == 0 { - return - } - - b.Reserve(len(v)) - if len(v) > 0 { - arrow.Decimal256Traits.Copy(b.rawData[b.length:], v) - } - b.builder.unsafeAppendBoolsToBitmap(valid, len(v)) -} - -func (b *Decimal256Builder) init(capacity int) { - b.builder.init(capacity) - - b.data = memory.NewResizableBuffer(b.mem) - bytesN := arrow.Decimal256Traits.BytesRequired(capacity) - b.data.Resize(bytesN) - b.rawData = arrow.Decimal256Traits.CastFromBytes(b.data.Bytes()) -} - -// Reserve ensures there is enough space for appending n elements -// by checking the capacity and calling Resize if necessary. -func (b *Decimal256Builder) Reserve(n int) { - b.builder.reserve(n, b.Resize) -} - -// Resize adjusts the space allocated by b to n elements. If n is greater than b.Cap(), -// additional memory will be allocated. If n is smaller, the allocated memory may reduced. -func (b *Decimal256Builder) Resize(n int) { - nBuilder := n - if n < minBuilderCapacity { - n = minBuilderCapacity - } - - if b.capacity == 0 { - b.init(n) - } else { - b.builder.resize(nBuilder, b.init) - b.data.Resize(arrow.Decimal256Traits.BytesRequired(n)) - b.rawData = arrow.Decimal256Traits.CastFromBytes(b.data.Bytes()) - } -} - -// NewArray creates a Decimal256 array from the memory buffers used by the builder and resets the Decimal256Builder -// so it can be used to build a new array. -func (b *Decimal256Builder) NewArray() arrow.Array { - return b.NewDecimal256Array() -} - -// NewDecimal256Array creates a Decimal256 array from the memory buffers used by the builder and resets the Decimal256Builder -// so it can be used to build a new array. -func (b *Decimal256Builder) NewDecimal256Array() (a *Decimal256) { - data := b.newData() - a = NewDecimal256Data(data) - data.Release() - return -} - -func (b *Decimal256Builder) newData() (data *Data) { - bytesRequired := arrow.Decimal256Traits.BytesRequired(b.length) - if bytesRequired > 0 && bytesRequired < b.data.Len() { - // trim buffers - b.data.Resize(bytesRequired) - } - data = NewData(b.dtype, b.length, []*memory.Buffer{b.nullBitmap, b.data}, nil, b.nulls, 0) - b.reset() - - if b.data != nil { - b.data.Release() - b.data = nil - b.rawData = nil - } - - return -} - -func (b *Decimal256Builder) AppendValueFromString(s string) error { - if s == NullValueStr { - b.AppendNull() - return nil - } - val, err := decimal256.FromString(s, b.dtype.Precision, b.dtype.Scale) - if err != nil { - b.AppendNull() - return err - } - b.Append(val) - return nil -} - -func (b *Decimal256Builder) UnmarshalOne(dec *json.Decoder) error { - t, err := dec.Token() - if err != nil { - return err - } - - switch v := t.(type) { - case float64: - val, err := decimal256.FromFloat64(v, b.dtype.Precision, b.dtype.Scale) - if err != nil { - return err - } - b.Append(val) - case string: - out, err := decimal256.FromString(v, b.dtype.Precision, b.dtype.Scale) - if err != nil { - return err - } - b.Append(out) - case json.Number: - out, err := decimal256.FromString(v.String(), b.dtype.Precision, b.dtype.Scale) - if err != nil { - return err - } - b.Append(out) - case nil: - b.AppendNull() - return nil - default: - return &json.UnmarshalTypeError{ - Value: fmt.Sprint(t), - Type: reflect.TypeOf(decimal256.Num{}), - Offset: dec.InputOffset(), - } - } - - return nil -} - -func (b *Decimal256Builder) Unmarshal(dec *json.Decoder) error { - for dec.More() { - if err := b.UnmarshalOne(dec); err != nil { - return err - } - } - return nil -} - -// UnmarshalJSON will add the unmarshalled values to this builder. -// -// If the values are strings, they will get parsed with big.ParseFloat using -// a rounding mode of big.ToNearestAway currently. -func (b *Decimal256Builder) UnmarshalJSON(data []byte) error { - dec := json.NewDecoder(bytes.NewReader(data)) - t, err := dec.Token() - if err != nil { - return err - } - - if delim, ok := t.(json.Delim); !ok || delim != '[' { - return fmt.Errorf("arrow/array: decimal256 builder must unpack from json array, found %s", delim) - } - - return b.Unmarshal(dec) -} - -var ( - _ arrow.Array = (*Decimal256)(nil) - _ Builder = (*Decimal256Builder)(nil) -) diff --git a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Timestamp.go b/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Timestamp.go deleted file mode 100644 index f5321145..00000000 --- a/vendor/github.com/apache/arrow/go/v14/arrow/internal/flatbuf/Timestamp.go +++ /dev/null @@ -1,201 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Code generated by the FlatBuffers compiler. DO NOT EDIT. - -package flatbuf - -import ( - flatbuffers "github.com/google/flatbuffers/go" -) - -/// Timestamp is a 64-bit signed integer representing an elapsed time since a -/// fixed epoch, stored in either of four units: seconds, milliseconds, -/// microseconds or nanoseconds, and is optionally annotated with a timezone. -/// -/// Timestamp values do not include any leap seconds (in other words, all -/// days are considered 86400 seconds long). -/// -/// Timestamps with a non-empty timezone -/// ------------------------------------ -/// -/// If a Timestamp column has a non-empty timezone value, its epoch is -/// 1970-01-01 00:00:00 (January 1st 1970, midnight) in the *UTC* timezone -/// (the Unix epoch), regardless of the Timestamp's own timezone. -/// -/// Therefore, timestamp values with a non-empty timezone correspond to -/// physical points in time together with some additional information about -/// how the data was obtained and/or how to display it (the timezone). -/// -/// For example, the timestamp value 0 with the timezone string "Europe/Paris" -/// corresponds to "January 1st 1970, 00h00" in the UTC timezone, but the -/// application may prefer to display it as "January 1st 1970, 01h00" in -/// the Europe/Paris timezone (which is the same physical point in time). -/// -/// One consequence is that timestamp values with a non-empty timezone -/// can be compared and ordered directly, since they all share the same -/// well-known point of reference (the Unix epoch). -/// -/// Timestamps with an unset / empty timezone -/// ----------------------------------------- -/// -/// If a Timestamp column has no timezone value, its epoch is -/// 1970-01-01 00:00:00 (January 1st 1970, midnight) in an *unknown* timezone. -/// -/// Therefore, timestamp values without a timezone cannot be meaningfully -/// interpreted as physical points in time, but only as calendar / clock -/// indications ("wall clock time") in an unspecified timezone. -/// -/// For example, the timestamp value 0 with an empty timezone string -/// corresponds to "January 1st 1970, 00h00" in an unknown timezone: there -/// is not enough information to interpret it as a well-defined physical -/// point in time. -/// -/// One consequence is that timestamp values without a timezone cannot -/// be reliably compared or ordered, since they may have different points of -/// reference. In particular, it is *not* possible to interpret an unset -/// or empty timezone as the same as "UTC". -/// -/// Conversion between timezones -/// ---------------------------- -/// -/// If a Timestamp column has a non-empty timezone, changing the timezone -/// to a different non-empty value is a metadata-only operation: -/// the timestamp values need not change as their point of reference remains -/// the same (the Unix epoch). -/// -/// However, if a Timestamp column has no timezone value, changing it to a -/// non-empty value requires to think about the desired semantics. -/// One possibility is to assume that the original timestamp values are -/// relative to the epoch of the timezone being set; timestamp values should -/// then adjusted to the Unix epoch (for example, changing the timezone from -/// empty to "Europe/Paris" would require converting the timestamp values -/// from "Europe/Paris" to "UTC", which seems counter-intuitive but is -/// nevertheless correct). -/// -/// Guidelines for encoding data from external libraries -/// ---------------------------------------------------- -/// -/// Date & time libraries often have multiple different data types for temporal -/// data. In order to ease interoperability between different implementations the -/// Arrow project has some recommendations for encoding these types into a Timestamp -/// column. -/// -/// An "instant" represents a physical point in time that has no relevant timezone -/// (for example, astronomical data). To encode an instant, use a Timestamp with -/// the timezone string set to "UTC", and make sure the Timestamp values -/// are relative to the UTC epoch (January 1st 1970, midnight). -/// -/// A "zoned date-time" represents a physical point in time annotated with an -/// informative timezone (for example, the timezone in which the data was -/// recorded). To encode a zoned date-time, use a Timestamp with the timezone -/// string set to the name of the timezone, and make sure the Timestamp values -/// are relative to the UTC epoch (January 1st 1970, midnight). -/// -/// (There is some ambiguity between an instant and a zoned date-time with the -/// UTC timezone. Both of these are stored the same in Arrow. Typically, -/// this distinction does not matter. If it does, then an application should -/// use custom metadata or an extension type to distinguish between the two cases.) -/// -/// An "offset date-time" represents a physical point in time combined with an -/// explicit offset from UTC. To encode an offset date-time, use a Timestamp -/// with the timezone string set to the numeric timezone offset string -/// (e.g. "+03:00"), and make sure the Timestamp values are relative to -/// the UTC epoch (January 1st 1970, midnight). -/// -/// A "naive date-time" (also called "local date-time" in some libraries) -/// represents a wall clock time combined with a calendar date, but with -/// no indication of how to map this information to a physical point in time. -/// Naive date-times must be handled with care because of this missing -/// information, and also because daylight saving time (DST) may make -/// some values ambiguous or non-existent. A naive date-time may be -/// stored as a struct with Date and Time fields. However, it may also be -/// encoded into a Timestamp column with an empty timezone. The timestamp -/// values should be computed "as if" the timezone of the date-time values -/// was UTC; for example, the naive date-time "January 1st 1970, 00h00" would -/// be encoded as timestamp value 0. -type Timestamp struct { - _tab flatbuffers.Table -} - -func GetRootAsTimestamp(buf []byte, offset flatbuffers.UOffsetT) *Timestamp { - n := flatbuffers.GetUOffsetT(buf[offset:]) - x := &Timestamp{} - x.Init(buf, n+offset) - return x -} - -func (rcv *Timestamp) Init(buf []byte, i flatbuffers.UOffsetT) { - rcv._tab.Bytes = buf - rcv._tab.Pos = i -} - -func (rcv *Timestamp) Table() flatbuffers.Table { - return rcv._tab -} - -func (rcv *Timestamp) Unit() TimeUnit { - o := flatbuffers.UOffsetT(rcv._tab.Offset(4)) - if o != 0 { - return TimeUnit(rcv._tab.GetInt16(o + rcv._tab.Pos)) - } - return 0 -} - -func (rcv *Timestamp) MutateUnit(n TimeUnit) bool { - return rcv._tab.MutateInt16Slot(4, int16(n)) -} - -/// The timezone is an optional string indicating the name of a timezone, -/// one of: -/// -/// * As used in the Olson timezone database (the "tz database" or -/// "tzdata"), such as "America/New_York". -/// * An absolute timezone offset of the form "+XX:XX" or "-XX:XX", -/// such as "+07:30". -/// -/// Whether a timezone string is present indicates different semantics about -/// the data (see above). -func (rcv *Timestamp) Timezone() []byte { - o := flatbuffers.UOffsetT(rcv._tab.Offset(6)) - if o != 0 { - return rcv._tab.ByteVector(o + rcv._tab.Pos) - } - return nil -} - -/// The timezone is an optional string indicating the name of a timezone, -/// one of: -/// -/// * As used in the Olson timezone database (the "tz database" or -/// "tzdata"), such as "America/New_York". -/// * An absolute timezone offset of the form "+XX:XX" or "-XX:XX", -/// such as "+07:30". -/// -/// Whether a timezone string is present indicates different semantics about -/// the data (see above). -func TimestampStart(builder *flatbuffers.Builder) { - builder.StartObject(2) -} -func TimestampAddUnit(builder *flatbuffers.Builder, unit TimeUnit) { - builder.PrependInt16Slot(0, int16(unit), 0) -} -func TimestampAddTimezone(builder *flatbuffers.Builder, timezone flatbuffers.UOffsetT) { - builder.PrependUOffsetTSlot(1, flatbuffers.UOffsetT(timezone), 0) -} -func TimestampEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT { - return builder.EndObject() -} diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/go_module_metadata.go index 66d09630..639ba763 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/go_module_metadata.go @@ -3,4 +3,4 @@ package aws // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.24.1" +const goModuleVersion = "1.26.1" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/middleware.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/middleware.go index 9bd0dfb1..6d5f0079 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/middleware.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/middleware.go @@ -139,16 +139,16 @@ func AddRecordResponseTiming(stack *middleware.Stack) error { // raw response within the response metadata. type rawResponseKey struct{} -// addRawResponse middleware adds raw response on to the metadata -type addRawResponse struct{} +// AddRawResponse middleware adds raw response on to the metadata +type AddRawResponse struct{} // ID the identifier for the ClientRequestID -func (m *addRawResponse) ID() string { +func (m *AddRawResponse) ID() string { return "AddRawResponseToMetadata" } // HandleDeserialize adds raw response on the middleware metadata -func (m addRawResponse) HandleDeserialize(ctx context.Context, in middleware.DeserializeInput, next middleware.DeserializeHandler) ( +func (m AddRawResponse) HandleDeserialize(ctx context.Context, in middleware.DeserializeInput, next middleware.DeserializeHandler) ( out middleware.DeserializeOutput, metadata middleware.Metadata, err error, ) { out, metadata, err = next.HandleDeserialize(ctx, in) @@ -159,7 +159,7 @@ func (m addRawResponse) HandleDeserialize(ctx context.Context, in middleware.Des // AddRawResponseToMetadata adds middleware to the middleware stack that // store raw response on to the metadata. func AddRawResponseToMetadata(stack *middleware.Stack) error { - return stack.Deserialize.Add(&addRawResponse{}, middleware.Before) + return stack.Deserialize.Add(&AddRawResponse{}, middleware.Before) } // GetRawResponse returns raw response set on metadata diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id_retriever.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id_retriever.go index 7ce48c61..e7d268c3 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id_retriever.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id_retriever.go @@ -11,18 +11,22 @@ import ( func AddRequestIDRetrieverMiddleware(stack *middleware.Stack) error { // add error wrapper middleware before operation deserializers so that it can wrap the error response // returned by operation deserializers - return stack.Deserialize.Insert(&requestIDRetriever{}, "OperationDeserializer", middleware.Before) + return stack.Deserialize.Insert(&RequestIDRetriever{}, "OperationDeserializer", middleware.Before) } -type requestIDRetriever struct { +// RequestIDRetriever middleware captures the AWS service request ID from the +// raw response. +type RequestIDRetriever struct { } // ID returns the middleware identifier -func (m *requestIDRetriever) ID() string { +func (m *RequestIDRetriever) ID() string { return "RequestIDRetriever" } -func (m *requestIDRetriever) HandleDeserialize(ctx context.Context, in middleware.DeserializeInput, next middleware.DeserializeHandler) ( +// HandleDeserialize pulls the AWS request ID from the response, storing it in +// operation metadata. +func (m *RequestIDRetriever) HandleDeserialize(ctx context.Context, in middleware.DeserializeInput, next middleware.DeserializeHandler) ( out middleware.DeserializeOutput, metadata middleware.Metadata, err error, ) { out, metadata, err = next.HandleDeserialize(ctx, in) diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/user_agent.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/user_agent.go index af3447dd..db7cda42 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/user_agent.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/user_agent.go @@ -64,12 +64,12 @@ var validChars = map[rune]bool{ '-': true, '.': true, '^': true, '_': true, '`': true, '|': true, '~': true, } -// requestUserAgent is a build middleware that set the User-Agent for the request. -type requestUserAgent struct { +// RequestUserAgent is a build middleware that set the User-Agent for the request. +type RequestUserAgent struct { sdkAgent, userAgent *smithyhttp.UserAgentBuilder } -// newRequestUserAgent returns a new requestUserAgent which will set the User-Agent and X-Amz-User-Agent for the +// NewRequestUserAgent returns a new requestUserAgent which will set the User-Agent and X-Amz-User-Agent for the // request. // // User-Agent example: @@ -79,12 +79,12 @@ type requestUserAgent struct { // X-Amz-User-Agent example: // // aws-sdk-go-v2/1.2.3 md/GOOS/linux md/GOARCH/amd64 lang/go/1.15 -func newRequestUserAgent() *requestUserAgent { +func NewRequestUserAgent() *RequestUserAgent { userAgent, sdkAgent := smithyhttp.NewUserAgentBuilder(), smithyhttp.NewUserAgentBuilder() addProductName(userAgent) addProductName(sdkAgent) - r := &requestUserAgent{ + r := &RequestUserAgent{ sdkAgent: sdkAgent, userAgent: userAgent, } @@ -94,7 +94,7 @@ func newRequestUserAgent() *requestUserAgent { return r } -func addSDKMetadata(r *requestUserAgent) { +func addSDKMetadata(r *RequestUserAgent) { r.AddSDKAgentKey(OperatingSystemMetadata, getNormalizedOSName()) r.AddSDKAgentKeyValue(LanguageMetadata, "go", languageVersion) r.AddSDKAgentKeyValue(AdditionalMetadata, "GOOS", runtime.GOOS) @@ -162,18 +162,18 @@ func AddRequestUserAgentMiddleware(stack *middleware.Stack) error { return err } -func getOrAddRequestUserAgent(stack *middleware.Stack) (*requestUserAgent, error) { - id := (*requestUserAgent)(nil).ID() +func getOrAddRequestUserAgent(stack *middleware.Stack) (*RequestUserAgent, error) { + id := (*RequestUserAgent)(nil).ID() bm, ok := stack.Build.Get(id) if !ok { - bm = newRequestUserAgent() + bm = NewRequestUserAgent() err := stack.Build.Add(bm, middleware.After) if err != nil { return nil, err } } - requestUserAgent, ok := bm.(*requestUserAgent) + requestUserAgent, ok := bm.(*RequestUserAgent) if !ok { return nil, fmt.Errorf("%T for %s middleware did not match expected type", bm, id) } @@ -182,34 +182,34 @@ func getOrAddRequestUserAgent(stack *middleware.Stack) (*requestUserAgent, error } // AddUserAgentKey adds the component identified by name to the User-Agent string. -func (u *requestUserAgent) AddUserAgentKey(key string) { +func (u *RequestUserAgent) AddUserAgentKey(key string) { u.userAgent.AddKey(strings.Map(rules, key)) } // AddUserAgentKeyValue adds the key identified by the given name and value to the User-Agent string. -func (u *requestUserAgent) AddUserAgentKeyValue(key, value string) { +func (u *RequestUserAgent) AddUserAgentKeyValue(key, value string) { u.userAgent.AddKeyValue(strings.Map(rules, key), strings.Map(rules, value)) } -// AddUserAgentKey adds the component identified by name to the User-Agent string. -func (u *requestUserAgent) AddSDKAgentKey(keyType SDKAgentKeyType, key string) { +// AddSDKAgentKey adds the component identified by name to the User-Agent string. +func (u *RequestUserAgent) AddSDKAgentKey(keyType SDKAgentKeyType, key string) { // TODO: should target sdkAgent u.userAgent.AddKey(keyType.string() + "/" + strings.Map(rules, key)) } -// AddUserAgentKeyValue adds the key identified by the given name and value to the User-Agent string. -func (u *requestUserAgent) AddSDKAgentKeyValue(keyType SDKAgentKeyType, key, value string) { +// AddSDKAgentKeyValue adds the key identified by the given name and value to the User-Agent string. +func (u *RequestUserAgent) AddSDKAgentKeyValue(keyType SDKAgentKeyType, key, value string) { // TODO: should target sdkAgent u.userAgent.AddKeyValue(keyType.string(), strings.Map(rules, key)+"#"+strings.Map(rules, value)) } // ID the name of the middleware. -func (u *requestUserAgent) ID() string { +func (u *RequestUserAgent) ID() string { return "UserAgent" } // HandleBuild adds or appends the constructed user agent to the request. -func (u *requestUserAgent) HandleBuild(ctx context.Context, in middleware.BuildInput, next middleware.BuildHandler) ( +func (u *RequestUserAgent) HandleBuild(ctx context.Context, in middleware.BuildInput, next middleware.BuildHandler) ( out middleware.BuildOutput, metadata middleware.Metadata, err error, ) { switch req := in.Request.(type) { @@ -224,12 +224,12 @@ func (u *requestUserAgent) HandleBuild(ctx context.Context, in middleware.BuildI return next.HandleBuild(ctx, in) } -func (u *requestUserAgent) addHTTPUserAgent(request *smithyhttp.Request) { +func (u *RequestUserAgent) addHTTPUserAgent(request *smithyhttp.Request) { const userAgent = "User-Agent" updateHTTPHeader(request, userAgent, u.userAgent.Build()) } -func (u *requestUserAgent) addHTTPSDKAgent(request *smithyhttp.Request) { +func (u *RequestUserAgent) addHTTPSDKAgent(request *smithyhttp.Request) { const sdkAgent = "X-Amz-User-Agent" updateHTTPHeader(request, sdkAgent, u.sdkAgent.Build()) } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/CHANGELOG.md index 1e1da56b..186c4889 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/CHANGELOG.md @@ -1,3 +1,15 @@ +# v1.6.2 (2024-03-29) + +* No change notes available for this release. + +# v1.6.1 (2024-02-21) + +* No change notes available for this release. + +# v1.6.0 (2024-02-13) + +* **Feature**: Bump minimum Go version to 1.20 per our language support policy. + # v1.5.4 (2023-12-07) * No change notes available for this release. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/go_module_metadata.go index 6759e90e..a0479b9b 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/go_module_metadata.go @@ -3,4 +3,4 @@ package eventstream // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.5.4" +const goModuleVersion = "1.6.2" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/none.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/none.go new file mode 100644 index 00000000..8c783641 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/none.go @@ -0,0 +1,20 @@ +package ratelimit + +import "context" + +// None implements a no-op rate limiter which effectively disables client-side +// rate limiting (also known as "retry quotas"). +// +// GetToken does nothing and always returns a nil error. The returned +// token-release function does nothing, and always returns a nil error. +// +// AddTokens does nothing and always returns a nil error. +var None = &none{} + +type none struct{} + +func (*none) GetToken(ctx context.Context, cost uint) (func() error, error) { + return func() error { return nil }, nil +} + +func (*none) AddTokens(v uint) error { return nil } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/standard.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/standard.go index 25abffc8..d5ea9322 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/standard.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/standard.go @@ -123,6 +123,17 @@ type StandardOptions struct { // Provides the rate limiting strategy for rate limiting attempt retries // across all attempts the retryer is being used with. + // + // A RateLimiter operates as a token bucket with a set capacity, where + // attempt failures events consume tokens. A retry attempt that attempts to + // consume more tokens than what's available results in operation failure. + // The default implementation is parameterized as follows: + // - a capacity of 500 (DefaultRetryRateTokens) + // - a retry caused by a timeout costs 10 tokens (DefaultRetryCost) + // - a retry caused by other errors costs 5 tokens (DefaultRetryTimeoutCost) + // - an operation that succeeds on the 1st attempt adds 1 token (DefaultNoRetryIncrement) + // + // You can disable rate limiting by setting this field to ratelimit.None. RateLimiter RateLimiter // The cost to deduct from the RateLimiter's token bucket per retry. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/middleware.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/middleware.go index f39a369a..febeb048 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/middleware.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/middleware.go @@ -85,12 +85,12 @@ func (m *dynamicPayloadSigningMiddleware) HandleFinalize( } if req.IsHTTPS() { - return (&unsignedPayload{}).HandleFinalize(ctx, in, next) + return (&UnsignedPayload{}).HandleFinalize(ctx, in, next) } - return (&computePayloadSHA256{}).HandleFinalize(ctx, in, next) + return (&ComputePayloadSHA256{}).HandleFinalize(ctx, in, next) } -// unsignedPayload sets the SigV4 request payload hash to unsigned. +// UnsignedPayload sets the SigV4 request payload hash to unsigned. // // Will not set the Unsigned Payload magic SHA value, if a SHA has already been // stored in the context. (e.g. application pre-computed SHA256 before making @@ -98,21 +98,21 @@ func (m *dynamicPayloadSigningMiddleware) HandleFinalize( // // This middleware does not check the X-Amz-Content-Sha256 header, if that // header is serialized a middleware must translate it into the context. -type unsignedPayload struct{} +type UnsignedPayload struct{} // AddUnsignedPayloadMiddleware adds unsignedPayload to the operation // middleware stack func AddUnsignedPayloadMiddleware(stack *middleware.Stack) error { - return stack.Finalize.Insert(&unsignedPayload{}, "ResolveEndpointV2", middleware.After) + return stack.Finalize.Insert(&UnsignedPayload{}, "ResolveEndpointV2", middleware.After) } // ID returns the unsignedPayload identifier -func (m *unsignedPayload) ID() string { +func (m *UnsignedPayload) ID() string { return computePayloadHashMiddlewareID } // HandleFinalize sets the payload hash magic value to the unsigned sentinel. -func (m *unsignedPayload) HandleFinalize( +func (m *UnsignedPayload) HandleFinalize( ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler, ) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, @@ -123,7 +123,7 @@ func (m *unsignedPayload) HandleFinalize( return next.HandleFinalize(ctx, in) } -// computePayloadSHA256 computes SHA256 payload hash to sign. +// ComputePayloadSHA256 computes SHA256 payload hash to sign. // // Will not set the Unsigned Payload magic SHA value, if a SHA has already been // stored in the context. (e.g. application pre-computed SHA256 before making @@ -131,12 +131,12 @@ func (m *unsignedPayload) HandleFinalize( // // This middleware does not check the X-Amz-Content-Sha256 header, if that // header is serialized a middleware must translate it into the context. -type computePayloadSHA256 struct{} +type ComputePayloadSHA256 struct{} // AddComputePayloadSHA256Middleware adds computePayloadSHA256 to the // operation middleware stack func AddComputePayloadSHA256Middleware(stack *middleware.Stack) error { - return stack.Finalize.Insert(&computePayloadSHA256{}, "ResolveEndpointV2", middleware.After) + return stack.Finalize.Insert(&ComputePayloadSHA256{}, "ResolveEndpointV2", middleware.After) } // RemoveComputePayloadSHA256Middleware removes computePayloadSHA256 from the @@ -147,13 +147,13 @@ func RemoveComputePayloadSHA256Middleware(stack *middleware.Stack) error { } // ID is the middleware name -func (m *computePayloadSHA256) ID() string { +func (m *ComputePayloadSHA256) ID() string { return computePayloadHashMiddlewareID } // HandleFinalize computes the payload hash for the request, storing it to the // context. This is a no-op if a caller has previously set that value. -func (m *computePayloadSHA256) HandleFinalize( +func (m *ComputePayloadSHA256) HandleFinalize( ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler, ) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, @@ -196,35 +196,35 @@ func (m *computePayloadSHA256) HandleFinalize( // Use this to disable computing the Payload SHA256 checksum and instead use // UNSIGNED-PAYLOAD for the SHA256 value. func SwapComputePayloadSHA256ForUnsignedPayloadMiddleware(stack *middleware.Stack) error { - _, err := stack.Finalize.Swap(computePayloadHashMiddlewareID, &unsignedPayload{}) + _, err := stack.Finalize.Swap(computePayloadHashMiddlewareID, &UnsignedPayload{}) return err } -// contentSHA256Header sets the X-Amz-Content-Sha256 header value to +// ContentSHA256Header sets the X-Amz-Content-Sha256 header value to // the Payload hash stored in the context. -type contentSHA256Header struct{} +type ContentSHA256Header struct{} // AddContentSHA256HeaderMiddleware adds ContentSHA256Header to the // operation middleware stack func AddContentSHA256HeaderMiddleware(stack *middleware.Stack) error { - return stack.Finalize.Insert(&contentSHA256Header{}, computePayloadHashMiddlewareID, middleware.After) + return stack.Finalize.Insert(&ContentSHA256Header{}, computePayloadHashMiddlewareID, middleware.After) } // RemoveContentSHA256HeaderMiddleware removes contentSHA256Header middleware // from the operation middleware stack func RemoveContentSHA256HeaderMiddleware(stack *middleware.Stack) error { - _, err := stack.Finalize.Remove((*contentSHA256Header)(nil).ID()) + _, err := stack.Finalize.Remove((*ContentSHA256Header)(nil).ID()) return err } // ID returns the ContentSHA256HeaderMiddleware identifier -func (m *contentSHA256Header) ID() string { +func (m *ContentSHA256Header) ID() string { return "SigV4ContentSHA256Header" } // HandleFinalize sets the X-Amz-Content-Sha256 header value to the Payload hash // stored in the context. -func (m *contentSHA256Header) HandleFinalize( +func (m *ContentSHA256Header) HandleFinalize( ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler, ) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, @@ -360,18 +360,21 @@ func (s *SignHTTPRequestMiddleware) HandleFinalize(ctx context.Context, in middl return next.HandleFinalize(ctx, in) } -type streamingEventsPayload struct{} +// StreamingEventsPayload signs input event stream messages. +type StreamingEventsPayload struct{} // AddStreamingEventsPayload adds the streamingEventsPayload middleware to the stack. func AddStreamingEventsPayload(stack *middleware.Stack) error { - return stack.Finalize.Add(&streamingEventsPayload{}, middleware.Before) + return stack.Finalize.Add(&StreamingEventsPayload{}, middleware.Before) } -func (s *streamingEventsPayload) ID() string { +// ID identifies the middleware. +func (s *StreamingEventsPayload) ID() string { return computePayloadHashMiddlewareID } -func (s *streamingEventsPayload) HandleFinalize( +// HandleFinalize marks the input stream to be signed with SigV4. +func (s *StreamingEventsPayload) HandleFinalize( ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler, ) ( out middleware.FinalizeOutput, metadata middleware.Metadata, err error, diff --git a/vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/response_error_middleware.go b/vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/response_error_middleware.go index 8fd14cec..a1ad20fe 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/response_error_middleware.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/response_error_middleware.go @@ -12,18 +12,20 @@ import ( func AddResponseErrorMiddleware(stack *middleware.Stack) error { // add error wrapper middleware before request id retriever middleware so that it can wrap the error response // returned by operation deserializers - return stack.Deserialize.Insert(&responseErrorWrapper{}, "RequestIDRetriever", middleware.Before) + return stack.Deserialize.Insert(&ResponseErrorWrapper{}, "RequestIDRetriever", middleware.Before) } -type responseErrorWrapper struct { +// ResponseErrorWrapper wraps operation errors with ResponseError. +type ResponseErrorWrapper struct { } // ID returns the middleware identifier -func (m *responseErrorWrapper) ID() string { +func (m *ResponseErrorWrapper) ID() string { return "ResponseErrorWrapper" } -func (m *responseErrorWrapper) HandleDeserialize(ctx context.Context, in middleware.DeserializeInput, next middleware.DeserializeHandler) ( +// HandleDeserialize wraps the stack error with smithyhttp.ResponseError. +func (m *ResponseErrorWrapper) HandleDeserialize(ctx context.Context, in middleware.DeserializeInput, next middleware.DeserializeHandler) ( out middleware.DeserializeOutput, metadata middleware.Metadata, err error, ) { out, metadata, err = next.HandleDeserialize(ctx, in) diff --git a/vendor/github.com/aws/aws-sdk-go-v2/credentials/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/credentials/CHANGELOG.md index 989c4ea3..3b0bad42 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/credentials/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/credentials/CHANGELOG.md @@ -1,3 +1,53 @@ +# v1.17.11 (2024-04-05) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.10 (2024-03-29) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.9 (2024-03-21) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.8 (2024-03-18) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.7 (2024-03-07) + +* **Bug Fix**: Remove dependency on go-cmp. +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.6 (2024-03-05) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.5 (2024-03-04) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.4 (2024-02-23) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.3 (2024-02-22) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.2 (2024-02-21) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.1 (2024-02-20) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.0 (2024-02-13) + +* **Feature**: Bump minimum Go version to 1.20 per our language support policy. +* **Dependency Update**: Updated to the latest SDK module versions + # v1.16.16 (2024-01-18) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/credentials/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/credentials/go_module_metadata.go index fe92184d..4cb3e303 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/credentials/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/credentials/go_module_metadata.go @@ -3,4 +3,4 @@ package credentials // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.16.16" +const goModuleVersion = "1.17.11" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/CHANGELOG.md index fe53e9a5..842adc1b 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/CHANGELOG.md @@ -1,3 +1,69 @@ +# v1.16.15 (2024-04-05) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.16.14 (2024-03-29) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.16.13 (2024-03-21) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.16.12 (2024-03-18) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.16.11 (2024-03-15) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.16.10 (2024-03-13) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.16.9 (2024-03-07) + +* **Bug Fix**: Remove dependency on go-cmp. +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.16.8 (2024-03-05) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.16.7 (2024-03-04) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.16.6 (2024-02-23) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.16.5 (2024-02-22) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.16.4 (2024-02-21) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.16.3 (2024-02-20) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.16.2 (2024-02-19) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.16.1 (2024-02-16) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.16.0 (2024-02-13) + +* **Feature**: Bump minimum Go version to 1.20 per our language support policy. +* **Dependency Update**: Updated to the latest SDK module versions + # v1.15.15 (2024-01-24) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/go_module_metadata.go index 6fe1aa68..a5143320 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/feature/s3/manager/go_module_metadata.go @@ -3,4 +3,4 @@ package manager // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.15.15" +const goModuleVersion = "1.16.15" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/CHANGELOG.md index dc87ec41..72e196dd 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/CHANGELOG.md @@ -1,3 +1,28 @@ +# v1.3.5 (2024-03-29) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.4 (2024-03-18) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.3 (2024-03-07) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.2 (2024-02-23) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.1 (2024-02-21) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.0 (2024-02-13) + +* **Feature**: Bump minimum Go version to 1.20 per our language support policy. +* **Dependency Update**: Updated to the latest SDK module versions + # v1.2.10 (2024-01-04) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/go_module_metadata.go index 41ee0bfb..faf71cac 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/go_module_metadata.go @@ -3,4 +3,4 @@ package configsources // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.2.10" +const goModuleVersion = "1.3.5" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/CHANGELOG.md index e0265474..6f6dafa8 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/CHANGELOG.md @@ -1,3 +1,29 @@ +# v2.6.5 (2024-03-29) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v2.6.4 (2024-03-18) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v2.6.3 (2024-03-07) + +* **Bug Fix**: Remove dependency on go-cmp. +* **Dependency Update**: Updated to the latest SDK module versions + +# v2.6.2 (2024-02-23) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v2.6.1 (2024-02-21) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v2.6.0 (2024-02-13) + +* **Feature**: Bump minimum Go version to 1.20 per our language support policy. +* **Dependency Update**: Updated to the latest SDK module versions + # v2.5.10 (2024-01-04) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/go_module_metadata.go index bec2c6a1..27981631 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/go_module_metadata.go @@ -3,4 +3,4 @@ package endpoints // goModuleVersion is the tagged release for this module -const goModuleVersion = "2.5.10" +const goModuleVersion = "2.6.5" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/CHANGELOG.md index 8aa94972..0f10e022 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/CHANGELOG.md @@ -1,3 +1,29 @@ +# v1.3.5 (2024-03-29) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.4 (2024-03-18) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.3 (2024-03-07) + +* **Bug Fix**: Remove dependency on go-cmp. +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.2 (2024-02-23) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.1 (2024-02-21) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.0 (2024-02-13) + +* **Feature**: Bump minimum Go version to 1.20 per our language support policy. +* **Dependency Update**: Updated to the latest SDK module versions + # v1.2.10 (2024-01-04) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/go_module_metadata.go index 2a5888c1..51aa32cf 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/go_module_metadata.go @@ -3,4 +3,4 @@ package v4a // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.2.10" +const goModuleVersion = "1.3.5" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/CHANGELOG.md index c3525fd2..9cf6cf22 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/CHANGELOG.md @@ -1,3 +1,15 @@ +# v1.11.2 (2024-03-29) + +* No change notes available for this release. + +# v1.11.1 (2024-02-21) + +* No change notes available for this release. + +# v1.11.0 (2024-02-13) + +* **Feature**: Bump minimum Go version to 1.20 per our language support policy. + # v1.10.4 (2023-12-07) * No change notes available for this release. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/go_module_metadata.go index cc638400..6339b541 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/go_module_metadata.go @@ -3,4 +3,4 @@ package acceptencoding // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.10.4" +const goModuleVersion = "1.11.2" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/CHANGELOG.md index 8f974036..2246bd62 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/CHANGELOG.md @@ -1,3 +1,37 @@ +# v1.3.7 (2024-03-29) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.6 (2024-03-18) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.5 (2024-03-07) + +* **Bug Fix**: Remove dependency on go-cmp. +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.4 (2024-03-05) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.3 (2024-03-04) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.2 (2024-02-23) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.1 (2024-02-21) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.3.0 (2024-02-13) + +* **Feature**: Bump minimum Go version to 1.20 per our language support policy. +* **Dependency Update**: Updated to the latest SDK module versions + # v1.2.10 (2024-01-04) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/go_module_metadata.go index a88534d2..6785174d 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/checksum/go_module_metadata.go @@ -3,4 +3,4 @@ package checksum // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.2.10" +const goModuleVersion = "1.3.7" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/CHANGELOG.md index a65890b5..35c7050d 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/CHANGELOG.md @@ -1,3 +1,37 @@ +# v1.11.7 (2024-03-29) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.11.6 (2024-03-18) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.11.5 (2024-03-07) + +* **Bug Fix**: Remove dependency on go-cmp. +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.11.4 (2024-03-05) + +* **Bug Fix**: Restore typo'd API `AddAsIsInternalPresigingMiddleware` as an alias for backwards compatibility. + +# v1.11.3 (2024-03-04) + +* **Bug Fix**: Correct a typo in internal AddAsIsPresigningMiddleware API. + +# v1.11.2 (2024-02-23) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.11.1 (2024-02-21) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.11.0 (2024-02-13) + +* **Feature**: Bump minimum Go version to 1.20 per our language support policy. +* **Dependency Update**: Updated to the latest SDK module versions + # v1.10.10 (2024-01-04) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/context.go b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/context.go index cc919701..5d5286f9 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/context.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/context.go @@ -27,13 +27,21 @@ func GetIsPresigning(ctx context.Context) bool { type isPresigningKey struct{} -// AddAsIsPresigingMiddleware adds a middleware to the head of the stack that +// AddAsIsPresigningMiddleware adds a middleware to the head of the stack that // will update the stack's context to be flagged as being invoked for the // purpose of presigning. -func AddAsIsPresigingMiddleware(stack *middleware.Stack) error { +func AddAsIsPresigningMiddleware(stack *middleware.Stack) error { return stack.Initialize.Add(asIsPresigningMiddleware{}, middleware.Before) } +// AddAsIsPresigingMiddleware is an alias for backwards compatibility. +// +// Deprecated: This API was released with a typo. Use +// [AddAsIsPresigningMiddleware] instead. +func AddAsIsPresigingMiddleware(stack *middleware.Stack) error { + return AddAsIsPresigningMiddleware(stack) +} + type asIsPresigningMiddleware struct{} func (asIsPresigningMiddleware) ID() string { return "AsIsPresigningMiddleware" } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/go_module_metadata.go index 073e8866..daf77b5c 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/go_module_metadata.go @@ -3,4 +3,4 @@ package presignedurl // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.10.10" +const goModuleVersion = "1.11.7" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/CHANGELOG.md index c4df2176..150e26f4 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/CHANGELOG.md @@ -1,3 +1,28 @@ +# v1.17.5 (2024-03-29) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.4 (2024-03-18) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.3 (2024-03-07) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.2 (2024-02-23) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.1 (2024-02-21) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.17.0 (2024-02-13) + +* **Feature**: Bump minimum Go version to 1.20 per our language support policy. +* **Dependency Update**: Updated to the latest SDK module versions + # v1.16.10 (2024-01-04) * **Dependency Update**: Updated to the latest SDK module versions diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/go_module_metadata.go index 986affe1..a1f30ee0 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/internal/s3shared/go_module_metadata.go @@ -3,4 +3,4 @@ package s3shared // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.16.10" +const goModuleVersion = "1.17.5" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/CHANGELOG.md b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/CHANGELOG.md index 89a5a0d5..ed520468 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/CHANGELOG.md +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/CHANGELOG.md @@ -1,3 +1,64 @@ +# v1.53.1 (2024-03-29) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.53.0 (2024-03-18) + +* **Feature**: Fix two issues with response root node names. +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.52.1 (2024-03-15) + +* **Documentation**: Documentation updates for Amazon S3. + +# v1.52.0 (2024-03-13) + +* **Feature**: This release makes the default option for S3 on Outposts request signing to use the SigV4A algorithm when using AWS Common Runtime (CRT). + +# v1.51.4 (2024-03-07) + +* **Bug Fix**: Remove dependency on go-cmp. +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.51.3 (2024-03-05) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.51.2 (2024-03-04) + +* **Bug Fix**: Update internal/presigned-url dependency for corrected API name. +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.51.1 (2024-02-23) + +* **Bug Fix**: Move all common, SDK-side middleware stack ops into the service client module to prevent cross-module compatibility issues in the future. +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.51.0 (2024-02-22) + +* **Feature**: Add middleware stack snapshot tests. + +# v1.50.3 (2024-02-21) + +* **Dependency Update**: Updated to the latest SDK module versions + +# v1.50.2 (2024-02-20) + +* **Bug Fix**: When sourcing values for a service's `EndpointParameters`, the lack of a configured region (i.e. `options.Region == ""`) will now translate to a `nil` value for `EndpointParameters.Region` instead of a pointer to the empty string `""`. This will result in a much more explicit error when calling an operation instead of an obscure hostname lookup failure. + +# v1.50.1 (2024-02-19) + +* **Bug Fix**: Prevent potential panic caused by invalid comparison of credentials. + +# v1.50.0 (2024-02-16) + +* **Feature**: Add new ClientOptions field to waiter config which allows you to extend the config for operation calls made by waiters. + +# v1.49.0 (2024-02-13) + +* **Feature**: Bump minimum Go version to 1.20 per our language support policy. +* **Dependency Update**: Updated to the latest SDK module versions + # v1.48.1 (2024-01-24) * No change notes available for this release. diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_client.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_client.go index db35814d..a31c2e0a 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_client.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_client.go @@ -394,17 +394,37 @@ func resolveAWSEndpointResolver(cfg aws.Config, o *Options) { } func addClientUserAgent(stack *middleware.Stack, options Options) error { - if err := awsmiddleware.AddSDKAgentKeyValue(awsmiddleware.APIMetadata, "s3", goModuleVersion)(stack); err != nil { + ua, err := getOrAddRequestUserAgent(stack) + if err != nil { return err } + ua.AddSDKAgentKeyValue(awsmiddleware.APIMetadata, "s3", goModuleVersion) if len(options.AppID) > 0 { - return awsmiddleware.AddSDKAgentKey(awsmiddleware.ApplicationIdentifier, options.AppID)(stack) + ua.AddSDKAgentKey(awsmiddleware.ApplicationIdentifier, options.AppID) } return nil } +func getOrAddRequestUserAgent(stack *middleware.Stack) (*awsmiddleware.RequestUserAgent, error) { + id := (*awsmiddleware.RequestUserAgent)(nil).ID() + mw, ok := stack.Build.Get(id) + if !ok { + mw = awsmiddleware.NewRequestUserAgent() + if err := stack.Build.Add(mw, middleware.After); err != nil { + return nil, err + } + } + + ua, ok := mw.(*awsmiddleware.RequestUserAgent) + if !ok { + return nil, fmt.Errorf("%T for %s middleware did not match expected type", mw, id) + } + + return ua, nil +} + type HTTPSignerV4 interface { SignHTTP(ctx context.Context, credentials aws.Credentials, r *http.Request, payloadHash string, service string, region string, signingTime time.Time, optFns ...func(*v4.SignerOptions)) error } @@ -424,12 +444,48 @@ func newDefaultV4Signer(o Options) *v4.Signer { }) } -func addRetryMiddlewares(stack *middleware.Stack, o Options) error { - mo := retry.AddRetryMiddlewaresOptions{ - Retryer: o.Retryer, - LogRetryAttempts: o.ClientLogMode.IsRetries(), +func addClientRequestID(stack *middleware.Stack) error { + return stack.Build.Add(&awsmiddleware.ClientRequestID{}, middleware.After) +} + +func addComputeContentLength(stack *middleware.Stack) error { + return stack.Build.Add(&smithyhttp.ComputeContentLength{}, middleware.After) +} + +func addRawResponseToMetadata(stack *middleware.Stack) error { + return stack.Deserialize.Add(&awsmiddleware.AddRawResponse{}, middleware.Before) +} + +func addRecordResponseTiming(stack *middleware.Stack) error { + return stack.Deserialize.Add(&awsmiddleware.RecordResponseTiming{}, middleware.After) +} +func addStreamingEventsPayload(stack *middleware.Stack) error { + return stack.Finalize.Add(&v4.StreamingEventsPayload{}, middleware.Before) +} + +func addUnsignedPayload(stack *middleware.Stack) error { + return stack.Finalize.Insert(&v4.UnsignedPayload{}, "ResolveEndpointV2", middleware.After) +} + +func addComputePayloadSHA256(stack *middleware.Stack) error { + return stack.Finalize.Insert(&v4.ComputePayloadSHA256{}, "ResolveEndpointV2", middleware.After) +} + +func addContentSHA256Header(stack *middleware.Stack) error { + return stack.Finalize.Insert(&v4.ContentSHA256Header{}, (*v4.ComputePayloadSHA256)(nil).ID(), middleware.After) +} + +func addRetry(stack *middleware.Stack, o Options) error { + attempt := retry.NewAttemptMiddleware(o.Retryer, smithyhttp.RequestCloner, func(m *retry.Attempt) { + m.LogAttempts = o.ClientLogMode.IsRetries() + }) + if err := stack.Finalize.Insert(attempt, "Signing", middleware.Before); err != nil { + return err + } + if err := stack.Finalize.Insert(&retry.MetricsHeader{}, attempt.ID(), middleware.After); err != nil { + return err } - return retry.AddRetryMiddlewares(stack, mo) + return nil } // resolves UseARNRegion S3 configuration @@ -520,6 +576,10 @@ func add100Continue(stack *middleware.Stack, options Options) error { return s3shared.Add100Continue(stack, options.ContinueHeaderThresholdBytes) } +func addRecursionDetection(stack *middleware.Stack) error { + return stack.Build.Add(&awsmiddleware.RecursionDetection{}, middleware.After) +} + // ComputedInputChecksumsMetadata provides information about the algorithms used // to compute the checksum(s) of the input payload. type ComputedInputChecksumsMetadata struct { @@ -792,7 +852,7 @@ func (c presignConverter) convertToPresignMiddleware(stack *middleware.Stack, op if err != nil { return err } - err = presignedurlcust.AddAsIsPresigingMiddleware(stack) + err = presignedurlcust.AddAsIsPresigningMiddleware(stack) if err != nil { return err } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_AbortMultipartUpload.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_AbortMultipartUpload.go index d1e7dcea..c71060e0 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_AbortMultipartUpload.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_AbortMultipartUpload.go @@ -75,7 +75,7 @@ type AbortMultipartUploadInput struct { // Bucket_name.s3express-az_id.region.amazonaws.com . Path-style requests are not // supported. Directory bucket names must be unique in the chosen Availability // Zone. Bucket names must follow the format bucket_base_name--az-id--x-s3 (for - // example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 ). For information about bucket + // example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 ). For information about bucket // naming restrictions, see Directory bucket naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide. Access points - When you use this action with an // access point, you must provide the alias of the access point in place of the @@ -166,25 +166,25 @@ func (c *Client) addOperationAbortMultipartUploadMiddlewares(stack *middleware.S if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -211,7 +211,7 @@ func (c *Client) addOperationAbortMultipartUploadMiddlewares(stack *middleware.S if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addAbortMultipartUploadUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CompleteMultipartUpload.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CompleteMultipartUpload.go index b9f094f1..8f89d780 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CompleteMultipartUpload.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CompleteMultipartUpload.go @@ -38,8 +38,8 @@ import ( // the request as appropriate). If the condition persists, the SDKs throw an // exception (or, for the SDKs that don't use exceptions, they return an error). // Note that if CompleteMultipartUpload fails, applications should be prepared to -// retry the failed requests. For more information, see Amazon S3 Error Best -// Practices (https://docs.aws.amazon.com/AmazonS3/latest/dev/ErrorBestPractices.html) +// retry any failed requests (including 500 error responses). For more information, +// see Amazon S3 Error Best Practices (https://docs.aws.amazon.com/AmazonS3/latest/dev/ErrorBestPractices.html) // . You can't use Content-Type: application/x-www-form-urlencoded for the // CompleteMultipartUpload requests. Also, if you don't provide a Content-Type // header, CompleteMultipartUpload can still return a 200 OK response. For more @@ -118,7 +118,7 @@ type CompleteMultipartUploadInput struct { // Bucket_name.s3express-az_id.region.amazonaws.com . Path-style requests are not // supported. Directory bucket names must be unique in the chosen Availability // Zone. Bucket names must follow the format bucket_base_name--az-id--x-s3 (for - // example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 ). For information about bucket + // example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 ). For information about bucket // naming restrictions, see Directory bucket naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide. Access points - When you use this action with an // access point, you must provide the alias of the access point in place of the @@ -343,25 +343,25 @@ func (c *Client) addOperationCompleteMultipartUploadMiddlewares(stack *middlewar if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -388,7 +388,7 @@ func (c *Client) addOperationCompleteMultipartUploadMiddlewares(stack *middlewar if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addCompleteMultipartUploadUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CopyObject.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CopyObject.go index deb21cee..c7990bab 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CopyObject.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CopyObject.go @@ -31,9 +31,12 @@ import ( // endpoints (https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html) // in the Amazon S3 User Guide. Both the Region that you want to copy the object // from and the Region that you want to copy the object to must be enabled for your -// account. Amazon S3 transfer acceleration does not support cross-Region copies. -// If you request a cross-Region copy using a transfer acceleration endpoint, you -// get a 400 Bad Request error. For more information, see Transfer Acceleration (https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html) +// account. For more information about how to enable a Region for your account, see +// Enable or disable a Region for standalone accounts (https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-regions.html#manage-acct-regions-enable-standalone) +// in the Amazon Web Services Account Management Guide. Amazon S3 transfer +// acceleration does not support cross-Region copies. If you request a cross-Region +// copy using a transfer acceleration endpoint, you get a 400 Bad Request error. +// For more information, see Transfer Acceleration (https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html) // . Authentication and authorization All CopyObject requests must be // authenticated and signed by using IAM credentials (access key ID and secret // access key for the IAM identities). All headers with the x-amz- prefix, @@ -51,7 +54,7 @@ import ( // - If the source object is in a general purpose bucket, you must have // s3:GetObject permission to read the source object that is being copied. // - If the destination bucket is a general purpose bucket, you must have -// s3:PubObject permission to write the object copy to the destination bucket. +// s3:PutObject permission to write the object copy to the destination bucket. // - Directory bucket permissions - You must have permissions in a bucket policy // or an IAM identity-based policy based on the source and destination bucket types // in a CopyObject operation. @@ -84,24 +87,26 @@ import ( // - If the error occurs during the copy operation, the error response is // embedded in the 200 OK response. For example, in a cross-region copy, you may // encounter throttling and receive a 200 OK response. For more information, see -// Resolve the Error 200 response when copying objects to Amazon S3 . The 200 OK -// status code means the copy was accepted, but it doesn't mean the copy is -// complete. Another example is when you disconnect from Amazon S3 before the copy -// is complete, Amazon S3 might cancel the copy and you may receive a 200 OK -// response. You must stay connected to Amazon S3 until the entire response is -// successfully received and processed. If you call this API operation directly, -// make sure to design your application to parse the content of the response and -// handle it appropriately. If you use Amazon Web Services SDKs, SDKs handle this -// condition. The SDKs detect the embedded error and apply error handling per your -// configuration settings (including automatically retrying the request as -// appropriate). If the condition persists, the SDKs throw an exception (or, for -// the SDKs that don't use exceptions, they return an error). +// Resolve the Error 200 response when copying objects to Amazon S3 (https://repost.aws/knowledge-center/s3-resolve-200-internalerror) +// . The 200 OK status code means the copy was accepted, but it doesn't mean the +// copy is complete. Another example is when you disconnect from Amazon S3 before +// the copy is complete, Amazon S3 might cancel the copy and you may receive a +// 200 OK response. You must stay connected to Amazon S3 until the entire +// response is successfully received and processed. If you call this API operation +// directly, make sure to design your application to parse the content of the +// response and handle it appropriately. If you use Amazon Web Services SDKs, SDKs +// handle this condition. The SDKs detect the embedded error and apply error +// handling per your configuration settings (including automatically retrying the +// request as appropriate). If the condition persists, the SDKs throw an exception +// (or, for the SDKs that don't use exceptions, they return an error). // // Charge The copy request charge is based on the storage class and Region that // you specify for the destination object. The request can also result in a data // retrieval charge for the source if the source storage class bills for data -// retrieval. For pricing information, see Amazon S3 pricing (http://aws.amazon.com/s3/pricing/) -// . HTTP Host header syntax Directory buckets - The HTTP Host header syntax is +// retrieval. If the copy source is in a different region, the data transfer is +// billed to the copy source account. For pricing information, see Amazon S3 +// pricing (http://aws.amazon.com/s3/pricing/) . HTTP Host header syntax Directory +// buckets - The HTTP Host header syntax is // Bucket_name.s3express-az_id.region.amazonaws.com . The following operations are // related to CopyObject : // - PutObject (https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) @@ -128,7 +133,7 @@ type CopyObjectInput struct { // the format Bucket_name.s3express-az_id.region.amazonaws.com . Path-style // requests are not supported. Directory bucket names must be unique in the chosen // Availability Zone. Bucket names must follow the format - // bucket_base_name--az-id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 + // bucket_base_name--az-id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 // ). For information about bucket naming restrictions, see Directory bucket // naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide. Access points - When you use this action with an @@ -657,25 +662,25 @@ func (c *Client) addOperationCopyObjectMiddlewares(stack *middleware.Stack, opti if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -702,7 +707,7 @@ func (c *Client) addOperationCopyObjectMiddlewares(stack *middleware.Stack, opti if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addCopyObjectUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateBucket.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateBucket.go index 6357444b..b39244bc 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateBucket.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateBucket.go @@ -55,11 +55,18 @@ import ( // required. // - S3 Object Ownership - If your CreateBucket request includes the // x-amz-object-ownership header, then the s3:PutBucketOwnershipControls -// permission is required. If your CreateBucket request sets BucketOwnerEnforced -// for Amazon S3 Object Ownership and specifies a bucket ACL that provides access -// to an external Amazon Web Services account, your request fails with a 400 -// error and returns the InvalidBucketAcLWithObjectOwnership error code. For more -// information, see Setting Object Ownership on an existing bucket (https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-ownership-existing-bucket.html) +// permission is required. To set an ACL on a bucket as part of a CreateBucket +// request, you must explicitly set S3 Object Ownership for the bucket to a +// different value than the default, BucketOwnerEnforced . Additionally, if your +// desired bucket ACL grants public access, you must first create the bucket +// (without the bucket ACL) and then explicitly disable Block Public Access on the +// bucket before using PutBucketAcl to set the ACL. If you try to create a bucket +// with a public ACL, the request will fail. For the majority of modern use cases +// in S3, we recommend that you keep all Block Public Access settings enabled and +// keep ACLs disabled. If you would like to share data with users outside of your +// account, you can use bucket policies as needed. For more information, see +// Controlling ownership of objects and disabling ACLs for your bucket (https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html) +// and Blocking public access to your Amazon S3 storage (https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html) // in the Amazon S3 User Guide. // - S3 Block Public Access - If your specific use case requires granting public // access to your S3 resources, you can disable Block Public Access. Specifically, @@ -115,7 +122,7 @@ type CreateBucketInput struct { // https://s3express-control.region_code.amazonaws.com/bucket-name . // Virtual-hosted-style requests aren't supported. Directory bucket names must be // unique in the chosen Availability Zone. Bucket names must also follow the format - // bucket_base_name--az_id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 + // bucket_base_name--az_id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 // ). For information about bucket naming restrictions, see Directory bucket // naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide @@ -217,25 +224,25 @@ func (c *Client) addOperationCreateBucketMiddlewares(stack *middleware.Stack, op if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -262,7 +269,7 @@ func (c *Client) addOperationCreateBucketMiddlewares(stack *middleware.Stack, op if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addCreateBucketUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateMultipartUpload.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateMultipartUpload.go index 4f24e11c..c083c32d 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateMultipartUpload.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateMultipartUpload.go @@ -169,7 +169,7 @@ type CreateMultipartUploadInput struct { // Bucket_name.s3express-az_id.region.amazonaws.com . Path-style requests are not // supported. Directory bucket names must be unique in the chosen Availability // Zone. Bucket names must follow the format bucket_base_name--az-id--x-s3 (for - // example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 ). For information about bucket + // example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 ). For information about bucket // naming restrictions, see Directory bucket naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide. Access points - When you use this action with an // access point, you must provide the alias of the access point in place of the @@ -561,25 +561,25 @@ func (c *Client) addOperationCreateMultipartUploadMiddlewares(stack *middleware. if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -606,7 +606,7 @@ func (c *Client) addOperationCreateMultipartUploadMiddlewares(stack *middleware. if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addCreateMultipartUploadUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateSession.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateSession.go index 1cb1f151..e2d5a007 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateSession.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_CreateSession.go @@ -146,25 +146,25 @@ func (c *Client) addOperationCreateSessionMiddlewares(stack *middleware.Stack, o if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -191,7 +191,7 @@ func (c *Client) addOperationCreateSessionMiddlewares(stack *middleware.Stack, o if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addCreateSessionUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucket.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucket.go index 34645bb9..30e1381b 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucket.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucket.go @@ -64,7 +64,7 @@ type DeleteBucketInput struct { // format https://s3express-control.region_code.amazonaws.com/bucket-name . // Virtual-hosted-style requests aren't supported. Directory bucket names must be // unique in the chosen Availability Zone. Bucket names must also follow the format - // bucket_base_name--az_id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 + // bucket_base_name--az_id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 // ). For information about bucket naming restrictions, see Directory bucket // naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide @@ -116,25 +116,25 @@ func (c *Client) addOperationDeleteBucketMiddlewares(stack *middleware.Stack, op if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -161,7 +161,7 @@ func (c *Client) addOperationDeleteBucketMiddlewares(stack *middleware.Stack, op if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addDeleteBucketUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketAnalyticsConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketAnalyticsConfiguration.go index 55d8fc1c..0033825a 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketAnalyticsConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketAnalyticsConfiguration.go @@ -96,25 +96,25 @@ func (c *Client) addOperationDeleteBucketAnalyticsConfigurationMiddlewares(stack if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -141,7 +141,7 @@ func (c *Client) addOperationDeleteBucketAnalyticsConfigurationMiddlewares(stack if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addDeleteBucketAnalyticsConfigurationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketCors.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketCors.go index 9a544922..d465826f 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketCors.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketCors.go @@ -85,25 +85,25 @@ func (c *Client) addOperationDeleteBucketCorsMiddlewares(stack *middleware.Stack if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -130,7 +130,7 @@ func (c *Client) addOperationDeleteBucketCorsMiddlewares(stack *middleware.Stack if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addDeleteBucketCorsUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketEncryption.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketEncryption.go index 0ef6f93e..7be8c475 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketEncryption.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketEncryption.go @@ -92,25 +92,25 @@ func (c *Client) addOperationDeleteBucketEncryptionMiddlewares(stack *middleware if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -137,7 +137,7 @@ func (c *Client) addOperationDeleteBucketEncryptionMiddlewares(stack *middleware if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addDeleteBucketEncryptionUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketIntelligentTieringConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketIntelligentTieringConfiguration.go index eeaefc5f..734d23b0 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketIntelligentTieringConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketIntelligentTieringConfiguration.go @@ -97,25 +97,25 @@ func (c *Client) addOperationDeleteBucketIntelligentTieringConfigurationMiddlewa if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -142,7 +142,7 @@ func (c *Client) addOperationDeleteBucketIntelligentTieringConfigurationMiddlewa if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addDeleteBucketIntelligentTieringConfigurationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketInventoryConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketInventoryConfiguration.go index 28a93e0d..3b8d81a4 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketInventoryConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketInventoryConfiguration.go @@ -94,25 +94,25 @@ func (c *Client) addOperationDeleteBucketInventoryConfigurationMiddlewares(stack if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -139,7 +139,7 @@ func (c *Client) addOperationDeleteBucketInventoryConfigurationMiddlewares(stack if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addDeleteBucketInventoryConfigurationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketLifecycle.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketLifecycle.go index d7b8eb58..88928b28 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketLifecycle.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketLifecycle.go @@ -91,25 +91,25 @@ func (c *Client) addOperationDeleteBucketLifecycleMiddlewares(stack *middleware. if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -136,7 +136,7 @@ func (c *Client) addOperationDeleteBucketLifecycleMiddlewares(stack *middleware. if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addDeleteBucketLifecycleUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketMetricsConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketMetricsConfiguration.go index a6675a88..21384351 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketMetricsConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketMetricsConfiguration.go @@ -99,25 +99,25 @@ func (c *Client) addOperationDeleteBucketMetricsConfigurationMiddlewares(stack * if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -144,7 +144,7 @@ func (c *Client) addOperationDeleteBucketMetricsConfigurationMiddlewares(stack * if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addDeleteBucketMetricsConfigurationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketOwnershipControls.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketOwnershipControls.go index 1b53e08e..4beac6b0 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketOwnershipControls.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketOwnershipControls.go @@ -85,25 +85,25 @@ func (c *Client) addOperationDeleteBucketOwnershipControlsMiddlewares(stack *mid if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -130,7 +130,7 @@ func (c *Client) addOperationDeleteBucketOwnershipControlsMiddlewares(stack *mid if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addDeleteBucketOwnershipControlsUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketPolicy.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketPolicy.go index 0d8e77ff..b8e1f56a 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketPolicy.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketPolicy.go @@ -73,7 +73,7 @@ type DeleteBucketPolicyInput struct { // https://s3express-control.region_code.amazonaws.com/bucket-name . // Virtual-hosted-style requests aren't supported. Directory bucket names must be // unique in the chosen Availability Zone. Bucket names must also follow the format - // bucket_base_name--az_id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 + // bucket_base_name--az_id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 // ). For information about bucket naming restrictions, see Directory bucket // naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide @@ -125,25 +125,25 @@ func (c *Client) addOperationDeleteBucketPolicyMiddlewares(stack *middleware.Sta if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -170,7 +170,7 @@ func (c *Client) addOperationDeleteBucketPolicyMiddlewares(stack *middleware.Sta if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addDeleteBucketPolicyUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketReplication.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketReplication.go index 7ac11a7b..9fdc6bcf 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketReplication.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketReplication.go @@ -89,25 +89,25 @@ func (c *Client) addOperationDeleteBucketReplicationMiddlewares(stack *middlewar if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -134,7 +134,7 @@ func (c *Client) addOperationDeleteBucketReplicationMiddlewares(stack *middlewar if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addDeleteBucketReplicationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketTagging.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketTagging.go index 5a75a1f4..ae737d40 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketTagging.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketTagging.go @@ -84,25 +84,25 @@ func (c *Client) addOperationDeleteBucketTaggingMiddlewares(stack *middleware.St if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -129,7 +129,7 @@ func (c *Client) addOperationDeleteBucketTaggingMiddlewares(stack *middleware.St if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addDeleteBucketTaggingUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketWebsite.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketWebsite.go index dbe84fbb..425936df 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketWebsite.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteBucketWebsite.go @@ -91,25 +91,25 @@ func (c *Client) addOperationDeleteBucketWebsiteMiddlewares(stack *middleware.St if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -136,7 +136,7 @@ func (c *Client) addOperationDeleteBucketWebsiteMiddlewares(stack *middleware.St if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addDeleteBucketWebsiteUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObject.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObject.go index cd00e599..c1e5ff73 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObject.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObject.go @@ -16,13 +16,25 @@ import ( // Removes an object from a bucket. The behavior depends on the bucket's // versioning state: // -// - If versioning is enabled, the operation removes the null version (if there -// is one) of an object and inserts a delete marker, which becomes the latest -// version of the object. If there isn't a null version, Amazon S3 does not remove -// any objects but will still respond that the command was successful. +// - If bucket versioning is not enabled, the operation permanently deletes the +// object. // -// - If versioning is suspended or not enabled, the operation permanently -// deletes the object. +// - If bucket versioning is enabled, the operation inserts a delete marker, +// which becomes the current version of the object. To permanently delete an object +// in a versioned bucket, you must include the object’s versionId in the request. +// For more information about versioning-enabled buckets, see Deleting object +// versions from a versioning-enabled bucket (https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeletingObjectVersions.html) +// . +// +// - If bucket versioning is suspended, the operation removes the object that +// has a null versionId , if there is one, and inserts a delete marker that +// becomes the current version of the object. If there isn't an object with a null +// versionId , and all versions of the object have a versionId , Amazon S3 does +// not remove the object and only inserts a delete marker. To permanently delete an +// object that has a versionId , you must include the object’s versionId in the +// request. For more information about versioning-suspended buckets, see +// Deleting objects from versioning-suspended buckets (https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeletingObjectsfromVersioningSuspendedBuckets.html) +// . // // - Directory buckets - S3 Versioning isn't enabled and supported for directory // buckets. For this API operation, only the null value of the version ID is @@ -59,7 +71,8 @@ import ( // - s3:DeleteObject - To delete an object from a bucket, you must always have // the s3:DeleteObject permission. // - s3:DeleteObjectVersion - To delete a specific version of an object from a -// versiong-enabled bucket, you must have the s3:DeleteObjectVersion permission. +// versioning-enabled bucket, you must have the s3:DeleteObjectVersion +// permission. // - Directory bucket permissions - To grant access to this API operation on a // directory bucket, we recommend that you use the CreateSession (https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html) // API operation for session-based authorization. Specifically, you grant the @@ -100,7 +113,7 @@ type DeleteObjectInput struct { // Bucket_name.s3express-az_id.region.amazonaws.com . Path-style requests are not // supported. Directory bucket names must be unique in the chosen Availability // Zone. Bucket names must follow the format bucket_base_name--az-id--x-s3 (for - // example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 ). For information about bucket + // example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 ). For information about bucket // naming restrictions, see Directory bucket naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide. Access points - When you use this action with an // access point, you must provide the alias of the access point in place of the @@ -214,25 +227,25 @@ func (c *Client) addOperationDeleteObjectMiddlewares(stack *middleware.Stack, op if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -259,7 +272,7 @@ func (c *Client) addOperationDeleteObjectMiddlewares(stack *middleware.Stack, op if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addDeleteObjectUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObjectTagging.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObjectTagging.go index 961b9459..c5f31dec 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObjectTagging.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObjectTagging.go @@ -114,25 +114,25 @@ func (c *Client) addOperationDeleteObjectTaggingMiddlewares(stack *middleware.St if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -159,7 +159,7 @@ func (c *Client) addOperationDeleteObjectTaggingMiddlewares(stack *middleware.St if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addDeleteObjectTaggingUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObjects.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObjects.go index 1d1fa432..05f82cf7 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObjects.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeleteObjects.go @@ -107,7 +107,7 @@ type DeleteObjectsInput struct { // requests in the format Bucket_name.s3express-az_id.region.amazonaws.com . // Path-style requests are not supported. Directory bucket names must be unique in // the chosen Availability Zone. Bucket names must follow the format - // bucket_base_name--az-id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 + // bucket_base_name--az-id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 // ). For information about bucket naming restrictions, see Directory bucket // naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide. Access points - When you use this action with an @@ -241,25 +241,25 @@ func (c *Client) addOperationDeleteObjectsMiddlewares(stack *middleware.Stack, o if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -286,7 +286,7 @@ func (c *Client) addOperationDeleteObjectsMiddlewares(stack *middleware.Stack, o if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addDeleteObjectsInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeletePublicAccessBlock.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeletePublicAccessBlock.go index 488d2a79..43969e2b 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeletePublicAccessBlock.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_DeletePublicAccessBlock.go @@ -88,25 +88,25 @@ func (c *Client) addOperationDeletePublicAccessBlockMiddlewares(stack *middlewar if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -133,7 +133,7 @@ func (c *Client) addOperationDeletePublicAccessBlockMiddlewares(stack *middlewar if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addDeletePublicAccessBlockUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAccelerateConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAccelerateConfiguration.go index 9a90a88a..4bb1ff71 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAccelerateConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAccelerateConfiguration.go @@ -116,25 +116,25 @@ func (c *Client) addOperationGetBucketAccelerateConfigurationMiddlewares(stack * if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -161,7 +161,7 @@ func (c *Client) addOperationGetBucketAccelerateConfigurationMiddlewares(stack * if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketAccelerateConfigurationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAcl.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAcl.go index 36747fc9..bc7c4ea1 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAcl.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAcl.go @@ -112,25 +112,25 @@ func (c *Client) addOperationGetBucketAclMiddlewares(stack *middleware.Stack, op if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -157,7 +157,7 @@ func (c *Client) addOperationGetBucketAclMiddlewares(stack *middleware.Stack, op if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketAclUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAnalyticsConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAnalyticsConfiguration.go index 0f7922ae..64e41d40 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAnalyticsConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketAnalyticsConfiguration.go @@ -102,25 +102,25 @@ func (c *Client) addOperationGetBucketAnalyticsConfigurationMiddlewares(stack *m if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -147,7 +147,7 @@ func (c *Client) addOperationGetBucketAnalyticsConfigurationMiddlewares(stack *m if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketAnalyticsConfigurationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketCors.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketCors.go index 33c25aa1..0997225e 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketCors.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketCors.go @@ -105,25 +105,25 @@ func (c *Client) addOperationGetBucketCorsMiddlewares(stack *middleware.Stack, o if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -150,7 +150,7 @@ func (c *Client) addOperationGetBucketCorsMiddlewares(stack *middleware.Stack, o if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketCorsUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketEncryption.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketEncryption.go index c8be5dd0..22c1f9bb 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketEncryption.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketEncryption.go @@ -97,25 +97,25 @@ func (c *Client) addOperationGetBucketEncryptionMiddlewares(stack *middleware.St if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -142,7 +142,7 @@ func (c *Client) addOperationGetBucketEncryptionMiddlewares(stack *middleware.St if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketEncryptionUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketIntelligentTieringConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketIntelligentTieringConfiguration.go index a3531f98..f3ae88a9 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketIntelligentTieringConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketIntelligentTieringConfiguration.go @@ -102,25 +102,25 @@ func (c *Client) addOperationGetBucketIntelligentTieringConfigurationMiddlewares if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -147,7 +147,7 @@ func (c *Client) addOperationGetBucketIntelligentTieringConfigurationMiddlewares if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketIntelligentTieringConfigurationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketInventoryConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketInventoryConfiguration.go index 3fe6f986..123218e9 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketInventoryConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketInventoryConfiguration.go @@ -99,25 +99,25 @@ func (c *Client) addOperationGetBucketInventoryConfigurationMiddlewares(stack *m if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -144,7 +144,7 @@ func (c *Client) addOperationGetBucketInventoryConfigurationMiddlewares(stack *m if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketInventoryConfigurationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLifecycleConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLifecycleConfiguration.go index 4cc9eff8..ddcbbe09 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLifecycleConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLifecycleConfiguration.go @@ -16,13 +16,17 @@ import ( // This operation is not supported by directory buckets. Bucket lifecycle // configuration now supports specifying a lifecycle rule using an object key name -// prefix, one or more object tags, or a combination of both. Accordingly, this -// section describes the latest API. The response describes the new filter element -// that you can use to specify a filter to select a subset of objects to which the -// rule applies. If you are using a previous version of the lifecycle -// configuration, it still works. For the earlier action, see GetBucketLifecycle (https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycle.html) -// . Returns the lifecycle configuration information set on the bucket. For -// information about lifecycle configuration, see Object Lifecycle Management (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html) +// prefix, one or more object tags, object size, or any combination of these. +// Accordingly, this section describes the latest API. The previous version of the +// API supported filtering based only on an object key name prefix, which is +// supported for backward compatibility. For the related API description, see +// GetBucketLifecycle (https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycle.html) +// . Accordingly, this section describes the latest API. The response describes the +// new filter element that you can use to specify a filter to select a subset of +// objects to which the rule applies. If you are using a previous version of the +// lifecycle configuration, it still works. For the earlier action, Returns the +// lifecycle configuration information set on the bucket. For information about +// lifecycle configuration, see Object Lifecycle Management (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html) // . To use this operation, you must have permission to perform the // s3:GetLifecycleConfiguration action. The bucket owner has this permission, by // default. The bucket owner can grant this permission to others. For more @@ -107,25 +111,25 @@ func (c *Client) addOperationGetBucketLifecycleConfigurationMiddlewares(stack *m if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -152,7 +156,7 @@ func (c *Client) addOperationGetBucketLifecycleConfigurationMiddlewares(stack *m if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketLifecycleConfigurationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLocation.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLocation.go index e94875fe..aff5f3cd 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLocation.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLocation.go @@ -114,25 +114,25 @@ func (c *Client) addOperationGetBucketLocationMiddlewares(stack *middleware.Stac if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -162,7 +162,7 @@ func (c *Client) addOperationGetBucketLocationMiddlewares(stack *middleware.Stac if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketLocationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLogging.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLogging.go index 5bbca7e4..d1c4f8fb 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLogging.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketLogging.go @@ -89,25 +89,25 @@ func (c *Client) addOperationGetBucketLoggingMiddlewares(stack *middleware.Stack if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -134,7 +134,7 @@ func (c *Client) addOperationGetBucketLoggingMiddlewares(stack *middleware.Stack if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketLoggingUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketMetricsConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketMetricsConfiguration.go index 913b9a04..d7499c68 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketMetricsConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketMetricsConfiguration.go @@ -103,25 +103,25 @@ func (c *Client) addOperationGetBucketMetricsConfigurationMiddlewares(stack *mid if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -148,7 +148,7 @@ func (c *Client) addOperationGetBucketMetricsConfigurationMiddlewares(stack *mid if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketMetricsConfigurationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketNotificationConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketNotificationConfiguration.go index 67a35d97..73155110 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketNotificationConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketNotificationConfiguration.go @@ -122,25 +122,25 @@ func (c *Client) addOperationGetBucketNotificationConfigurationMiddlewares(stack if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -167,7 +167,7 @@ func (c *Client) addOperationGetBucketNotificationConfigurationMiddlewares(stack if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketNotificationConfigurationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketOwnershipControls.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketOwnershipControls.go index dca55854..cea15142 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketOwnershipControls.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketOwnershipControls.go @@ -91,25 +91,25 @@ func (c *Client) addOperationGetBucketOwnershipControlsMiddlewares(stack *middle if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -136,7 +136,7 @@ func (c *Client) addOperationGetBucketOwnershipControlsMiddlewares(stack *middle if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketOwnershipControlsUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketPolicy.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketPolicy.go index ff42b705..c2f98f93 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketPolicy.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketPolicy.go @@ -76,7 +76,7 @@ type GetBucketPolicyInput struct { // format https://s3express-control.region_code.amazonaws.com/bucket-name . // Virtual-hosted-style requests aren't supported. Directory bucket names must be // unique in the chosen Availability Zone. Bucket names must also follow the format - // bucket_base_name--az_id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 + // bucket_base_name--az_id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 // ). For information about bucket naming restrictions, see Directory bucket // naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide Access points - When you use this API operation with @@ -141,25 +141,25 @@ func (c *Client) addOperationGetBucketPolicyMiddlewares(stack *middleware.Stack, if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -186,7 +186,7 @@ func (c *Client) addOperationGetBucketPolicyMiddlewares(stack *middleware.Stack, if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketPolicyUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketPolicyStatus.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketPolicyStatus.go index 6acf706f..cb36ac50 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketPolicyStatus.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketPolicyStatus.go @@ -94,25 +94,25 @@ func (c *Client) addOperationGetBucketPolicyStatusMiddlewares(stack *middleware. if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -139,7 +139,7 @@ func (c *Client) addOperationGetBucketPolicyStatusMiddlewares(stack *middleware. if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketPolicyStatusUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketReplication.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketReplication.go index 8db927c1..7e44d38e 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketReplication.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketReplication.go @@ -98,25 +98,25 @@ func (c *Client) addOperationGetBucketReplicationMiddlewares(stack *middleware.S if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -143,7 +143,7 @@ func (c *Client) addOperationGetBucketReplicationMiddlewares(stack *middleware.S if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketReplicationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketRequestPayment.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketRequestPayment.go index 37c96450..16cc5282 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketRequestPayment.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketRequestPayment.go @@ -87,25 +87,25 @@ func (c *Client) addOperationGetBucketRequestPaymentMiddlewares(stack *middlewar if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -132,7 +132,7 @@ func (c *Client) addOperationGetBucketRequestPaymentMiddlewares(stack *middlewar if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketRequestPaymentUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketTagging.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketTagging.go index 4c2761be..69a6e490 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketTagging.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketTagging.go @@ -95,25 +95,25 @@ func (c *Client) addOperationGetBucketTaggingMiddlewares(stack *middleware.Stack if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -140,7 +140,7 @@ func (c *Client) addOperationGetBucketTaggingMiddlewares(stack *middleware.Stack if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketTaggingUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketVersioning.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketVersioning.go index 55cad629..10540b13 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketVersioning.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketVersioning.go @@ -96,25 +96,25 @@ func (c *Client) addOperationGetBucketVersioningMiddlewares(stack *middleware.St if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -141,7 +141,7 @@ func (c *Client) addOperationGetBucketVersioningMiddlewares(stack *middleware.St if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketVersioningUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketWebsite.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketWebsite.go index f0ebf2b0..c87f6ff1 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketWebsite.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetBucketWebsite.go @@ -103,25 +103,25 @@ func (c *Client) addOperationGetBucketWebsiteMiddlewares(stack *middleware.Stack if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -148,7 +148,7 @@ func (c *Client) addOperationGetBucketWebsiteMiddlewares(stack *middleware.Stack if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetBucketWebsiteUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObject.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObject.go index d2dc15c7..a64f5964 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObject.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObject.go @@ -132,7 +132,7 @@ type GetObjectInput struct { // the format Bucket_name.s3express-az_id.region.amazonaws.com . Path-style // requests are not supported. Directory bucket names must be unique in the chosen // Availability Zone. Bucket names must follow the format - // bucket_base_name--az-id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 + // bucket_base_name--az-id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 // ). For information about bucket naming restrictions, see Directory bucket // naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide. Access points - When you use this action with an @@ -523,25 +523,25 @@ func (c *Client) addOperationGetObjectMiddlewares(stack *middleware.Stack, optio if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -565,7 +565,7 @@ func (c *Client) addOperationGetObjectMiddlewares(stack *middleware.Stack, optio if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetObjectOutputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectAcl.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectAcl.go index 3b2a1687..fc903cb3 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectAcl.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectAcl.go @@ -135,25 +135,25 @@ func (c *Client) addOperationGetObjectAclMiddlewares(stack *middleware.Stack, op if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -180,7 +180,7 @@ func (c *Client) addOperationGetObjectAclMiddlewares(stack *middleware.Stack, op if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetObjectAclUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectAttributes.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectAttributes.go index ed53ae7b..dd1b9257 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectAttributes.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectAttributes.go @@ -126,7 +126,7 @@ type GetObjectAttributesInput struct { // requests in the format Bucket_name.s3express-az_id.region.amazonaws.com . // Path-style requests are not supported. Directory bucket names must be unique in // the chosen Availability Zone. Bucket names must follow the format - // bucket_base_name--az-id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 + // bucket_base_name--az-id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 // ). For information about bucket naming restrictions, see Directory bucket // naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide. Access points - When you use this action with an @@ -282,25 +282,25 @@ func (c *Client) addOperationGetObjectAttributesMiddlewares(stack *middleware.St if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -327,7 +327,7 @@ func (c *Client) addOperationGetObjectAttributesMiddlewares(stack *middleware.St if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetObjectAttributesUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectLegalHold.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectLegalHold.go index 3f7af220..548f5e1c 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectLegalHold.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectLegalHold.go @@ -113,25 +113,25 @@ func (c *Client) addOperationGetObjectLegalHoldMiddlewares(stack *middleware.Sta if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -158,7 +158,7 @@ func (c *Client) addOperationGetObjectLegalHoldMiddlewares(stack *middleware.Sta if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetObjectLegalHoldUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectLockConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectLockConfiguration.go index 1ba436d5..e8e2fbd9 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectLockConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectLockConfiguration.go @@ -96,25 +96,25 @@ func (c *Client) addOperationGetObjectLockConfigurationMiddlewares(stack *middle if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -141,7 +141,7 @@ func (c *Client) addOperationGetObjectLockConfigurationMiddlewares(stack *middle if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetObjectLockConfigurationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectRetention.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectRetention.go index 1dea7d8a..b4daabf1 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectRetention.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectRetention.go @@ -113,25 +113,25 @@ func (c *Client) addOperationGetObjectRetentionMiddlewares(stack *middleware.Sta if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -158,7 +158,7 @@ func (c *Client) addOperationGetObjectRetentionMiddlewares(stack *middleware.Sta if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetObjectRetentionUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectTagging.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectTagging.go index c020e9bd..dc15914a 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectTagging.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectTagging.go @@ -134,25 +134,25 @@ func (c *Client) addOperationGetObjectTaggingMiddlewares(stack *middleware.Stack if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -179,7 +179,7 @@ func (c *Client) addOperationGetObjectTaggingMiddlewares(stack *middleware.Stack if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetObjectTaggingUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectTorrent.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectTorrent.go index 6689ef97..9fc83178 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectTorrent.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetObjectTorrent.go @@ -109,25 +109,25 @@ func (c *Client) addOperationGetObjectTorrentMiddlewares(stack *middleware.Stack if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -151,7 +151,7 @@ func (c *Client) addOperationGetObjectTorrentMiddlewares(stack *middleware.Stack if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetObjectTorrentUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetPublicAccessBlock.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetPublicAccessBlock.go index 0ae12e39..3689a4e1 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetPublicAccessBlock.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_GetPublicAccessBlock.go @@ -100,25 +100,25 @@ func (c *Client) addOperationGetPublicAccessBlockMiddlewares(stack *middleware.S if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -145,7 +145,7 @@ func (c *Client) addOperationGetPublicAccessBlockMiddlewares(stack *middleware.S if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addGetPublicAccessBlockUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadBucket.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadBucket.go index 8a18ff85..5f595891 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadBucket.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadBucket.go @@ -22,9 +22,9 @@ import ( // you have permission to access it. If the bucket does not exist or you do not // have permission to access it, the HEAD request returns a generic 400 Bad Request // , 403 Forbidden or 404 Not Found code. A message body is not included, so you -// cannot determine the exception beyond these error codes. Directory buckets - You -// must make requests for this API operation to the Zonal endpoint. These endpoints -// support virtual-hosted-style requests in the format +// cannot determine the exception beyond these HTTP response codes. Directory +// buckets - You must make requests for this API operation to the Zonal endpoint. +// These endpoints support virtual-hosted-style requests in the format // https://bucket_name.s3express-az_id.region.amazonaws.com . Path-style requests // are not supported. For more information, see Regional and Zonal endpoints (https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html) // in the Amazon S3 User Guide. Authentication and authorization All HeadBucket @@ -77,7 +77,7 @@ type HeadBucketInput struct { // Bucket_name.s3express-az_id.region.amazonaws.com . Path-style requests are not // supported. Directory bucket names must be unique in the chosen Availability // Zone. Bucket names must follow the format bucket_base_name--az-id--x-s3 (for - // example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 ). For information about bucket + // example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 ). For information about bucket // naming restrictions, see Directory bucket naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide. Access points - When you use this action with an // access point, you must provide the alias of the access point in place of the @@ -127,7 +127,7 @@ type HeadBucketOutput struct { // The name of the location where the bucket will be created. For directory // buckets, the AZ ID of the Availability Zone where the bucket is created. An - // example AZ ID value is usw2-az2 . This functionality is only supported by + // example AZ ID value is usw2-az1 . This functionality is only supported by // directory buckets. BucketLocationName *string @@ -167,25 +167,25 @@ func (c *Client) addOperationHeadBucketMiddlewares(stack *middleware.Stack, opti if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -212,7 +212,7 @@ func (c *Client) addOperationHeadBucketMiddlewares(stack *middleware.Stack, opti if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addHeadBucketUpdateEndpoint(stack, options); err != nil { @@ -259,8 +259,17 @@ type BucketExistsWaiterOptions struct { // Set of options to modify how an operation is invoked. These apply to all // operations invoked for this client. Use functional options on operation call to // modify this list for per operation behavior. + // + // Passing options here is functionally equivalent to passing values to this + // config's ClientOptions field that extend the inner client's APIOptions directly. APIOptions []func(*middleware.Stack) error + // Functional options to be passed to all operations invoked by this client. + // + // Function values that modify the inner APIOptions are applied after the waiter + // config's own APIOptions modifiers. + ClientOptions []func(*Options) + // MinDelay is the minimum amount of time to delay between retries. If unset, // BucketExistsWaiter will use default minimum delay of 5 seconds. Note that // MinDelay must resolve to a value lesser than or equal to the MaxDelay. @@ -358,6 +367,9 @@ func (w *BucketExistsWaiter) WaitForOutput(ctx context.Context, params *HeadBuck out, err := w.client.HeadBucket(ctx, params, func(o *Options) { o.APIOptions = append(o.APIOptions, apiOptions...) + for _, opt := range options.ClientOptions { + opt(o) + } }) retryable, err := options.Retryable(ctx, params, out, err) @@ -412,8 +424,17 @@ type BucketNotExistsWaiterOptions struct { // Set of options to modify how an operation is invoked. These apply to all // operations invoked for this client. Use functional options on operation call to // modify this list for per operation behavior. + // + // Passing options here is functionally equivalent to passing values to this + // config's ClientOptions field that extend the inner client's APIOptions directly. APIOptions []func(*middleware.Stack) error + // Functional options to be passed to all operations invoked by this client. + // + // Function values that modify the inner APIOptions are applied after the waiter + // config's own APIOptions modifiers. + ClientOptions []func(*Options) + // MinDelay is the minimum amount of time to delay between retries. If unset, // BucketNotExistsWaiter will use default minimum delay of 5 seconds. Note that // MinDelay must resolve to a value lesser than or equal to the MaxDelay. @@ -512,6 +533,9 @@ func (w *BucketNotExistsWaiter) WaitForOutput(ctx context.Context, params *HeadB out, err := w.client.HeadBucket(ctx, params, func(o *Options) { o.APIOptions = append(o.APIOptions, apiOptions...) + for _, opt := range options.ClientOptions { + opt(o) + } }) retryable, err := options.Retryable(ctx, params, out, err) diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadObject.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadObject.go index 5f7b55e5..5b7e9b6c 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadObject.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_HeadObject.go @@ -122,7 +122,7 @@ type HeadObjectInput struct { // requests in the format Bucket_name.s3express-az_id.region.amazonaws.com . // Path-style requests are not supported. Directory bucket names must be unique in // the chosen Availability Zone. Bucket names must follow the format - // bucket_base_name--az-id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 + // bucket_base_name--az-id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 // ). For information about bucket naming restrictions, see Directory bucket // naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide. Access points - When you use this action with an @@ -492,25 +492,25 @@ func (c *Client) addOperationHeadObjectMiddlewares(stack *middleware.Stack, opti if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -537,7 +537,7 @@ func (c *Client) addOperationHeadObjectMiddlewares(stack *middleware.Stack, opti if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addHeadObjectUpdateEndpoint(stack, options); err != nil { @@ -584,8 +584,17 @@ type ObjectExistsWaiterOptions struct { // Set of options to modify how an operation is invoked. These apply to all // operations invoked for this client. Use functional options on operation call to // modify this list for per operation behavior. + // + // Passing options here is functionally equivalent to passing values to this + // config's ClientOptions field that extend the inner client's APIOptions directly. APIOptions []func(*middleware.Stack) error + // Functional options to be passed to all operations invoked by this client. + // + // Function values that modify the inner APIOptions are applied after the waiter + // config's own APIOptions modifiers. + ClientOptions []func(*Options) + // MinDelay is the minimum amount of time to delay between retries. If unset, // ObjectExistsWaiter will use default minimum delay of 5 seconds. Note that // MinDelay must resolve to a value lesser than or equal to the MaxDelay. @@ -683,6 +692,9 @@ func (w *ObjectExistsWaiter) WaitForOutput(ctx context.Context, params *HeadObje out, err := w.client.HeadObject(ctx, params, func(o *Options) { o.APIOptions = append(o.APIOptions, apiOptions...) + for _, opt := range options.ClientOptions { + opt(o) + } }) retryable, err := options.Retryable(ctx, params, out, err) @@ -737,8 +749,17 @@ type ObjectNotExistsWaiterOptions struct { // Set of options to modify how an operation is invoked. These apply to all // operations invoked for this client. Use functional options on operation call to // modify this list for per operation behavior. + // + // Passing options here is functionally equivalent to passing values to this + // config's ClientOptions field that extend the inner client's APIOptions directly. APIOptions []func(*middleware.Stack) error + // Functional options to be passed to all operations invoked by this client. + // + // Function values that modify the inner APIOptions are applied after the waiter + // config's own APIOptions modifiers. + ClientOptions []func(*Options) + // MinDelay is the minimum amount of time to delay between retries. If unset, // ObjectNotExistsWaiter will use default minimum delay of 5 seconds. Note that // MinDelay must resolve to a value lesser than or equal to the MaxDelay. @@ -837,6 +858,9 @@ func (w *ObjectNotExistsWaiter) WaitForOutput(ctx context.Context, params *HeadO out, err := w.client.HeadObject(ctx, params, func(o *Options) { o.APIOptions = append(o.APIOptions, apiOptions...) + for _, opt := range options.ClientOptions { + opt(o) + } }) retryable, err := options.Retryable(ctx, params, out, err) diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketAnalyticsConfigurations.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketAnalyticsConfigurations.go index 6ecf8458..67b7571c 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketAnalyticsConfigurations.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketAnalyticsConfigurations.go @@ -121,25 +121,25 @@ func (c *Client) addOperationListBucketAnalyticsConfigurationsMiddlewares(stack if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -166,7 +166,7 @@ func (c *Client) addOperationListBucketAnalyticsConfigurationsMiddlewares(stack if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addListBucketAnalyticsConfigurationsUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketIntelligentTieringConfigurations.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketIntelligentTieringConfigurations.go index de4a2079..729f8785 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketIntelligentTieringConfigurations.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketIntelligentTieringConfigurations.go @@ -115,25 +115,25 @@ func (c *Client) addOperationListBucketIntelligentTieringConfigurationsMiddlewar if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -160,7 +160,7 @@ func (c *Client) addOperationListBucketIntelligentTieringConfigurationsMiddlewar if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addListBucketIntelligentTieringConfigurationsUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketInventoryConfigurations.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketInventoryConfigurations.go index 881f7d92..6c879048 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketInventoryConfigurations.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketInventoryConfigurations.go @@ -122,25 +122,25 @@ func (c *Client) addOperationListBucketInventoryConfigurationsMiddlewares(stack if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -167,7 +167,7 @@ func (c *Client) addOperationListBucketInventoryConfigurationsMiddlewares(stack if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addListBucketInventoryConfigurationsUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketMetricsConfigurations.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketMetricsConfigurations.go index fc2cf728..0b6ca947 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketMetricsConfigurations.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBucketMetricsConfigurations.go @@ -124,25 +124,25 @@ func (c *Client) addOperationListBucketMetricsConfigurationsMiddlewares(stack *m if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -169,7 +169,7 @@ func (c *Client) addOperationListBucketMetricsConfigurationsMiddlewares(stack *m if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addListBucketMetricsConfigurationsUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBuckets.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBuckets.go index a6189288..086d9d29 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBuckets.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListBuckets.go @@ -73,25 +73,25 @@ func (c *Client) addOperationListBucketsMiddlewares(stack *middleware.Stack, opt if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -115,7 +115,7 @@ func (c *Client) addOperationListBucketsMiddlewares(stack *middleware.Stack, opt if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addListBucketsUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListDirectoryBuckets.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListDirectoryBuckets.go index 373531ab..3ebf78af 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListDirectoryBuckets.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListDirectoryBuckets.go @@ -104,25 +104,25 @@ func (c *Client) addOperationListDirectoryBucketsMiddlewares(stack *middleware.S if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -146,7 +146,7 @@ func (c *Client) addOperationListDirectoryBucketsMiddlewares(stack *middleware.S if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addListDirectoryBucketsUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListMultipartUploads.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListMultipartUploads.go index 3e6853e6..18377365 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListMultipartUploads.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListMultipartUploads.go @@ -101,7 +101,7 @@ type ListMultipartUploadsInput struct { // Bucket_name.s3express-az_id.region.amazonaws.com . Path-style requests are not // supported. Directory bucket names must be unique in the chosen Availability // Zone. Bucket names must follow the format bucket_base_name--az-id--x-s3 (for - // example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 ). For information about bucket + // example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 ). For information about bucket // naming restrictions, see Directory bucket naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide. Access points - When you use this action with an // access point, you must provide the alias of the access point in place of the @@ -258,8 +258,12 @@ type ListMultipartUploadsOutput struct { // request. This functionality is not supported for directory buckets. RequestCharged types.RequestCharged - // Upload ID after which listing began. This functionality is not supported for - // directory buckets. + // Together with key-marker, specifies the multipart upload after which listing + // should begin. If key-marker is not specified, the upload-id-marker parameter is + // ignored. Otherwise, any multipart uploads for a key equal to the key-marker + // might be included in the list only if they have an upload ID lexicographically + // greater than the specified upload-id-marker . This functionality is not + // supported for directory buckets. UploadIdMarker *string // Container for elements related to a particular multipart upload. A response can @@ -294,25 +298,25 @@ func (c *Client) addOperationListMultipartUploadsMiddlewares(stack *middleware.S if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -339,7 +343,7 @@ func (c *Client) addOperationListMultipartUploadsMiddlewares(stack *middleware.S if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addListMultipartUploadsUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectVersions.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectVersions.go index 2a0cd10f..bcb90eb2 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectVersions.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectVersions.go @@ -201,25 +201,25 @@ func (c *Client) addOperationListObjectVersionsMiddlewares(stack *middleware.Sta if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -246,7 +246,7 @@ func (c *Client) addOperationListObjectVersionsMiddlewares(stack *middleware.Sta if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addListObjectVersionsUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjects.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjects.go index f0732edc..9a3bf3e0 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjects.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjects.go @@ -48,7 +48,7 @@ type ListObjectsInput struct { // requests in the format Bucket_name.s3express-az_id.region.amazonaws.com . // Path-style requests are not supported. Directory bucket names must be unique in // the chosen Availability Zone. Bucket names must follow the format - // bucket_base_name--az-id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 + // bucket_base_name--az-id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 // ). For information about bucket naming restrictions, see Directory bucket // naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide. Access points - When you use this action with an @@ -141,7 +141,9 @@ type ListObjectsOutput struct { // MaxKeys value. Delimiter *string - // Encoding type used by Amazon S3 to encode object keys in the response. + // Encoding type used by Amazon S3 to encode object keys in the response. If using + // url , non-ASCII characters used in an object's key name will be URL encoded. For + // example, the object test_file(3).png will appear as test_file%283%29.png. EncodingType types.EncodingType // A flag that indicates whether Amazon S3 returned all of the results that @@ -203,25 +205,25 @@ func (c *Client) addOperationListObjectsMiddlewares(stack *middleware.Stack, opt if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -248,7 +250,7 @@ func (c *Client) addOperationListObjectsMiddlewares(stack *middleware.Stack, opt if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addListObjectsUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectsV2.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectsV2.go index b2f182df..ee09d3cb 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectsV2.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListObjectsV2.go @@ -84,7 +84,7 @@ type ListObjectsV2Input struct { // Bucket_name.s3express-az_id.region.amazonaws.com . Path-style requests are not // supported. Directory bucket names must be unique in the chosen Availability // Zone. Bucket names must follow the format bucket_base_name--az-id--x-s3 (for - // example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 ). For information about bucket + // example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 ). For information about bucket // naming restrictions, see Directory bucket naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide. Access points - When you use this action with an // access point, you must provide the alias of the access point in place of the @@ -122,7 +122,9 @@ type ListObjectsV2Input struct { // in the Amazon S3 User Guide. Delimiter *string - // Encoding type used by Amazon S3 to encode object keys in the response. + // Encoding type used by Amazon S3 to encode object keys in the response. If using + // url , non-ASCII characters used in an object's key name will be URL encoded. For + // example, the object test_file(3).png will appear as test_file%283%29.png. EncodingType types.EncodingType // The account ID of the expected bucket owner. If the account ID that you provide @@ -277,25 +279,25 @@ func (c *Client) addOperationListObjectsV2Middlewares(stack *middleware.Stack, o if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -322,7 +324,7 @@ func (c *Client) addOperationListObjectsV2Middlewares(stack *middleware.Stack, o if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addListObjectsV2UpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListParts.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListParts.go index 11b0d59b..3f3946d9 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListParts.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_ListParts.go @@ -86,7 +86,7 @@ type ListPartsInput struct { // Bucket_name.s3express-az_id.region.amazonaws.com . Path-style requests are not // supported. Directory bucket names must be unique in the chosen Availability // Zone. Bucket names must follow the format bucket_base_name--az-id--x-s3 (for - // example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 ). For information about bucket + // example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 ). For information about bucket // naming restrictions, see Directory bucket naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide. Access points - When you use this action with an // access point, you must provide the alias of the access point in place of the @@ -225,9 +225,8 @@ type ListPartsOutput struct { // returned as the object owner for all the parts. Owner *types.Owner - // When a list is truncated, this element specifies the last part in the list, as - // well as the value to use for the part-number-marker request parameter in a - // subsequent request. + // Specifies the part after which listing should begin. Only parts with higher + // part numbers will be listed. PartNumberMarker *string // Container for elements related to a particular part. A response can contain @@ -274,25 +273,25 @@ func (c *Client) addOperationListPartsMiddlewares(stack *middleware.Stack, optio if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -319,7 +318,7 @@ func (c *Client) addOperationListPartsMiddlewares(stack *middleware.Stack, optio if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addListPartsUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAccelerateConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAccelerateConfiguration.go index 80344efb..c15d55f1 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAccelerateConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAccelerateConfiguration.go @@ -118,25 +118,25 @@ func (c *Client) addOperationPutBucketAccelerateConfigurationMiddlewares(stack * if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -163,7 +163,7 @@ func (c *Client) addOperationPutBucketAccelerateConfigurationMiddlewares(stack * if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutBucketAccelerateConfigurationInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAcl.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAcl.go index 6382d276..f88bb4af 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAcl.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAcl.go @@ -203,25 +203,25 @@ func (c *Client) addOperationPutBucketAclMiddlewares(stack *middleware.Stack, op if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -248,7 +248,7 @@ func (c *Client) addOperationPutBucketAclMiddlewares(stack *middleware.Stack, op if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutBucketAclInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAnalyticsConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAnalyticsConfiguration.go index 9b1009f6..0604fb93 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAnalyticsConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketAnalyticsConfiguration.go @@ -127,25 +127,25 @@ func (c *Client) addOperationPutBucketAnalyticsConfigurationMiddlewares(stack *m if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -172,7 +172,7 @@ func (c *Client) addOperationPutBucketAnalyticsConfigurationMiddlewares(stack *m if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutBucketAnalyticsConfigurationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketCors.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketCors.go index 394a2bad..3e6604ef 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketCors.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketCors.go @@ -132,25 +132,25 @@ func (c *Client) addOperationPutBucketCorsMiddlewares(stack *middleware.Stack, o if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -177,7 +177,7 @@ func (c *Client) addOperationPutBucketCorsMiddlewares(stack *middleware.Stack, o if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutBucketCorsInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketEncryption.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketEncryption.go index 615e98a3..dfc71dc5 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketEncryption.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketEncryption.go @@ -131,25 +131,25 @@ func (c *Client) addOperationPutBucketEncryptionMiddlewares(stack *middleware.St if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -176,7 +176,7 @@ func (c *Client) addOperationPutBucketEncryptionMiddlewares(stack *middleware.St if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutBucketEncryptionInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketIntelligentTieringConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketIntelligentTieringConfiguration.go index a5f8fc7a..61d73da5 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketIntelligentTieringConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketIntelligentTieringConfiguration.go @@ -115,25 +115,25 @@ func (c *Client) addOperationPutBucketIntelligentTieringConfigurationMiddlewares if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -160,7 +160,7 @@ func (c *Client) addOperationPutBucketIntelligentTieringConfigurationMiddlewares if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutBucketIntelligentTieringConfigurationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketInventoryConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketInventoryConfiguration.go index e2d06796..03d79a0d 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketInventoryConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketInventoryConfiguration.go @@ -130,25 +130,25 @@ func (c *Client) addOperationPutBucketInventoryConfigurationMiddlewares(stack *m if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -175,7 +175,7 @@ func (c *Client) addOperationPutBucketInventoryConfigurationMiddlewares(stack *m if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutBucketInventoryConfigurationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketLifecycleConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketLifecycleConfiguration.go index ac2b63eb..88096fdd 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketLifecycleConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketLifecycleConfiguration.go @@ -22,21 +22,19 @@ import ( // lifecycle configuration. For information about lifecycle configuration, see // Managing your storage lifecycle (https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) // . Bucket lifecycle configuration now supports specifying a lifecycle rule using -// an object key name prefix, one or more object tags, or a combination of both. -// Accordingly, this section describes the latest API. The previous version of the -// API supported filtering based only on an object key name prefix, which is -// supported for backward compatibility. For the related API description, see -// PutBucketLifecycle (https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html) +// an object key name prefix, one or more object tags, object size, or any +// combination of these. Accordingly, this section describes the latest API. The +// previous version of the API supported filtering based only on an object key name +// prefix, which is supported for backward compatibility. For the related API +// description, see PutBucketLifecycle (https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html) // . Rules You specify the lifecycle configuration in your request body. The // lifecycle configuration is specified as XML consisting of one or more rules. An // Amazon S3 Lifecycle configuration can have up to 1,000 rules. This limit is not // adjustable. Each rule consists of the following: -// // - A filter identifying a subset of objects to which the rule applies. The -// filter can be based on a key name prefix, object tags, or a combination of both. -// +// filter can be based on a key name prefix, object tags, object size, or any +// combination of these. // - A status indicating whether the rule is in effect. -// // - One or more lifecycle transition and expiration actions that you want // Amazon S3 to perform on the objects identified by the filter. If the state of // your bucket is versioning-enabled or versioning-suspended, you can have many @@ -143,25 +141,25 @@ func (c *Client) addOperationPutBucketLifecycleConfigurationMiddlewares(stack *m if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -188,7 +186,7 @@ func (c *Client) addOperationPutBucketLifecycleConfigurationMiddlewares(stack *m if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutBucketLifecycleConfigurationInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketLogging.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketLogging.go index e69fa24c..fb80d2ee 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketLogging.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketLogging.go @@ -132,25 +132,25 @@ func (c *Client) addOperationPutBucketLoggingMiddlewares(stack *middleware.Stack if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -177,7 +177,7 @@ func (c *Client) addOperationPutBucketLoggingMiddlewares(stack *middleware.Stack if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutBucketLoggingInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketMetricsConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketMetricsConfiguration.go index 099736c1..bff1452b 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketMetricsConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketMetricsConfiguration.go @@ -112,25 +112,25 @@ func (c *Client) addOperationPutBucketMetricsConfigurationMiddlewares(stack *mid if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -157,7 +157,7 @@ func (c *Client) addOperationPutBucketMetricsConfigurationMiddlewares(stack *mid if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutBucketMetricsConfigurationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketNotificationConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketNotificationConfiguration.go index 7139f6ea..e937b5c5 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketNotificationConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketNotificationConfiguration.go @@ -123,25 +123,25 @@ func (c *Client) addOperationPutBucketNotificationConfigurationMiddlewares(stack if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -168,7 +168,7 @@ func (c *Client) addOperationPutBucketNotificationConfigurationMiddlewares(stack if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutBucketNotificationConfigurationUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketOwnershipControls.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketOwnershipControls.go index f89f86d6..94875b75 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketOwnershipControls.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketOwnershipControls.go @@ -98,25 +98,25 @@ func (c *Client) addOperationPutBucketOwnershipControlsMiddlewares(stack *middle if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -143,7 +143,7 @@ func (c *Client) addOperationPutBucketOwnershipControlsMiddlewares(stack *middle if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutBucketOwnershipControlsInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketPolicy.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketPolicy.go index b3da186a..88e3f263 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketPolicy.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketPolicy.go @@ -79,7 +79,7 @@ type PutBucketPolicyInput struct { // https://s3express-control.region_code.amazonaws.com/bucket-name . // Virtual-hosted-style requests aren't supported. Directory bucket names must be // unique in the chosen Availability Zone. Bucket names must also follow the format - // bucket_base_name--az_id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 + // bucket_base_name--az_id--x-s3 (for example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 // ). For information about bucket naming restrictions, see Directory bucket // naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide @@ -169,25 +169,25 @@ func (c *Client) addOperationPutBucketPolicyMiddlewares(stack *middleware.Stack, if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -214,7 +214,7 @@ func (c *Client) addOperationPutBucketPolicyMiddlewares(stack *middleware.Stack, if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutBucketPolicyInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketReplication.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketReplication.go index ddf58ad8..bf59164c 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketReplication.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketReplication.go @@ -146,25 +146,25 @@ func (c *Client) addOperationPutBucketReplicationMiddlewares(stack *middleware.S if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -191,7 +191,7 @@ func (c *Client) addOperationPutBucketReplicationMiddlewares(stack *middleware.S if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutBucketReplicationInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketRequestPayment.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketRequestPayment.go index d1dc5a76..07e0f163 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketRequestPayment.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketRequestPayment.go @@ -109,25 +109,25 @@ func (c *Client) addOperationPutBucketRequestPaymentMiddlewares(stack *middlewar if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -154,7 +154,7 @@ func (c *Client) addOperationPutBucketRequestPaymentMiddlewares(stack *middlewar if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutBucketRequestPaymentInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketTagging.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketTagging.go index 725facc1..0f0a6fd4 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketTagging.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketTagging.go @@ -134,25 +134,25 @@ func (c *Client) addOperationPutBucketTaggingMiddlewares(stack *middleware.Stack if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -179,7 +179,7 @@ func (c *Client) addOperationPutBucketTaggingMiddlewares(stack *middleware.Stack if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutBucketTaggingInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketVersioning.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketVersioning.go index c2b751ab..495725ce 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketVersioning.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketVersioning.go @@ -127,25 +127,25 @@ func (c *Client) addOperationPutBucketVersioningMiddlewares(stack *middleware.St if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -172,7 +172,7 @@ func (c *Client) addOperationPutBucketVersioningMiddlewares(stack *middleware.St if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutBucketVersioningInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketWebsite.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketWebsite.go index 27555453..08c8a582 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketWebsite.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutBucketWebsite.go @@ -144,25 +144,25 @@ func (c *Client) addOperationPutBucketWebsiteMiddlewares(stack *middleware.Stack if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -189,7 +189,7 @@ func (c *Client) addOperationPutBucketWebsiteMiddlewares(stack *middleware.Stack if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutBucketWebsiteInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObject.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObject.go index 1bade82e..d57e0026 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObject.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObject.go @@ -111,7 +111,7 @@ type PutObjectInput struct { // Bucket_name.s3express-az_id.region.amazonaws.com . Path-style requests are not // supported. Directory bucket names must be unique in the chosen Availability // Zone. Bucket names must follow the format bucket_base_name--az-id--x-s3 (for - // example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 ). For information about bucket + // example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 ). For information about bucket // naming restrictions, see Directory bucket naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide. Access points - When you use this action with an // access point, you must provide the alias of the access point in place of the @@ -550,25 +550,25 @@ func (c *Client) addOperationPutObjectMiddlewares(stack *middleware.Stack, optio if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -598,7 +598,7 @@ func (c *Client) addOperationPutObjectMiddlewares(stack *middleware.Stack, optio if err = add100Continue(stack, options); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutObjectInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectAcl.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectAcl.go index 5716f550..08fea12c 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectAcl.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectAcl.go @@ -245,25 +245,25 @@ func (c *Client) addOperationPutObjectAclMiddlewares(stack *middleware.Stack, op if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -290,7 +290,7 @@ func (c *Client) addOperationPutObjectAclMiddlewares(stack *middleware.Stack, op if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutObjectAclInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectLegalHold.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectLegalHold.go index 3fa38af3..cc23509f 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectLegalHold.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectLegalHold.go @@ -132,25 +132,25 @@ func (c *Client) addOperationPutObjectLegalHoldMiddlewares(stack *middleware.Sta if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -177,7 +177,7 @@ func (c *Client) addOperationPutObjectLegalHoldMiddlewares(stack *middleware.Sta if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutObjectLegalHoldInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectLockConfiguration.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectLockConfiguration.go index 49425c8f..358ececc 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectLockConfiguration.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectLockConfiguration.go @@ -125,25 +125,25 @@ func (c *Client) addOperationPutObjectLockConfigurationMiddlewares(stack *middle if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -170,7 +170,7 @@ func (c *Client) addOperationPutObjectLockConfigurationMiddlewares(stack *middle if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutObjectLockConfigurationInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectRetention.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectRetention.go index 5dfb98f3..eb787de4 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectRetention.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectRetention.go @@ -139,25 +139,25 @@ func (c *Client) addOperationPutObjectRetentionMiddlewares(stack *middleware.Sta if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -184,7 +184,7 @@ func (c *Client) addOperationPutObjectRetentionMiddlewares(stack *middleware.Sta if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutObjectRetentionInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectTagging.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectTagging.go index 8b42d43d..2768db50 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectTagging.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutObjectTagging.go @@ -165,25 +165,25 @@ func (c *Client) addOperationPutObjectTaggingMiddlewares(stack *middleware.Stack if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -210,7 +210,7 @@ func (c *Client) addOperationPutObjectTaggingMiddlewares(stack *middleware.Stack if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutObjectTaggingInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutPublicAccessBlock.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutPublicAccessBlock.go index ab0b5405..7e6d0788 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutPublicAccessBlock.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_PutPublicAccessBlock.go @@ -120,25 +120,25 @@ func (c *Client) addOperationPutPublicAccessBlockMiddlewares(stack *middleware.S if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -165,7 +165,7 @@ func (c *Client) addOperationPutPublicAccessBlockMiddlewares(stack *middleware.S if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addPutPublicAccessBlockInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_RestoreObject.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_RestoreObject.go index a84b5326..3b6aad85 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_RestoreObject.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_RestoreObject.go @@ -17,7 +17,6 @@ import ( // This operation is not supported by directory buckets. Restores an archived copy // of an object back into Amazon S3 This functionality is not supported for Amazon // S3 on Outposts. This action performs the following types of requests: -// - select - Perform a select query on an archived object // - restore an archive - Restore an archived object // // For more information about the S3 structure in the request body, see the @@ -28,36 +27,6 @@ import ( // - Protecting Data Using Server-Side Encryption (https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html) // in the Amazon S3 User Guide // -// Define the SQL expression for the SELECT type of restoration for your query in -// the request body's SelectParameters structure. You can use expressions like the -// following examples. -// - The following expression returns all records from the specified object. -// SELECT * FROM Object -// - Assuming that you are not using any headers for data stored in the object, -// you can specify columns with positional headers. SELECT s._1, s._2 FROM -// Object s WHERE s._3 > 100 -// - If you have headers and you set the fileHeaderInfo in the CSV structure in -// the request body to USE , you can specify headers in the query. (If you set -// the fileHeaderInfo field to IGNORE , the first row is skipped for the query.) -// You cannot mix ordinal positions with header column names. SELECT s.Id, -// s.FirstName, s.SSN FROM S3Object s -// -// When making a select request, you can also do the following: -// - To expedite your queries, specify the Expedited tier. For more information -// about tiers, see "Restoring Archives," later in this topic. -// - Specify details about the data serialization format of both the input -// object that is being queried and the serialization of the CSV-encoded query -// results. -// -// The following are additional important facts about the select feature: -// - The output results are new Amazon S3 objects. Unlike archive retrievals, -// they are stored until explicitly deleted-manually or through a lifecycle -// configuration. -// - You can issue more than one select request on the same Amazon S3 object. -// Amazon S3 doesn't duplicate requests, so avoid issuing duplicate requests. -// - Amazon S3 accepts a select request even if the object has already been -// restored. A select request doesn’t return error response 409 . -// // Permissions To use this operation, you must have permissions to perform the // s3:RestoreObject action. The bucket owner has this permission by default and can // grant this permission to others. For more information about permissions, see @@ -141,8 +110,7 @@ import ( // // - Code: RestoreAlreadyInProgress // -// - Cause: Object restore is already in progress. (This error does not apply to -// SELECT type requests.) +// - Cause: Object restore is already in progress. // // - HTTP Status Code: 409 Conflict // @@ -282,25 +250,25 @@ func (c *Client) addOperationRestoreObjectMiddlewares(stack *middleware.Stack, o if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -327,7 +295,7 @@ func (c *Client) addOperationRestoreObjectMiddlewares(stack *middleware.Stack, o if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addRestoreObjectInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_SelectObjectContent.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_SelectObjectContent.go index 888ec9c2..f69db696 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_SelectObjectContent.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_SelectObjectContent.go @@ -11,7 +11,6 @@ import ( "github.com/aws/aws-sdk-go-v2/service/s3/types" "github.com/aws/smithy-go/middleware" smithysync "github.com/aws/smithy-go/sync" - smithyhttp "github.com/aws/smithy-go/transport/http" "sync" ) @@ -215,25 +214,25 @@ func (c *Client) addOperationSelectObjectContentMiddlewares(stack *middleware.St if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -254,7 +253,7 @@ func (c *Client) addOperationSelectObjectContentMiddlewares(stack *middleware.St if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addSelectObjectContentUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPart.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPart.go index 53507fba..ff731979 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPart.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPart.go @@ -132,7 +132,7 @@ type UploadPartInput struct { // Bucket_name.s3express-az_id.region.amazonaws.com . Path-style requests are not // supported. Directory bucket names must be unique in the chosen Availability // Zone. Bucket names must follow the format bucket_base_name--az-id--x-s3 (for - // example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 ). For information about bucket + // example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 ). For information about bucket // naming restrictions, see Directory bucket naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide. Access points - When you use this action with an // access point, you must provide the alias of the access point in place of the @@ -367,25 +367,25 @@ func (c *Client) addOperationUploadPartMiddlewares(stack *middleware.Stack, opti if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -415,7 +415,7 @@ func (c *Client) addOperationUploadPartMiddlewares(stack *middleware.Stack, opti if err = add100Continue(stack, options); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addUploadPartInputChecksumMiddlewares(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPartCopy.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPartCopy.go index 1d48a7be..d42dc60c 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPartCopy.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_UploadPartCopy.go @@ -53,7 +53,7 @@ import ( // - If the source object is in a general purpose bucket, you must have the // s3:GetObject permission to read the source object that is being copied. // - If the destination bucket is a general purpose bucket, you must have the -// s3:PubObject permission to write the object copy to the destination bucket. +// s3:PutObject permission to write the object copy to the destination bucket. // For information about permissions required to use the multipart upload API, see // Multipart Upload and Permissions (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html) // in the Amazon S3 User Guide. @@ -124,7 +124,7 @@ type UploadPartCopyInput struct { // Bucket_name.s3express-az_id.region.amazonaws.com . Path-style requests are not // supported. Directory bucket names must be unique in the chosen Availability // Zone. Bucket names must follow the format bucket_base_name--az-id--x-s3 (for - // example, DOC-EXAMPLE-BUCKET--usw2-az2--x-s3 ). For information about bucket + // example, DOC-EXAMPLE-BUCKET--usw2-az1--x-s3 ). For information about bucket // naming restrictions, see Directory bucket naming rules (https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html) // in the Amazon S3 User Guide. Access points - When you use this action with an // access point, you must provide the alias of the access point in place of the @@ -377,25 +377,25 @@ func (c *Client) addOperationUploadPartCopyMiddlewares(stack *middleware.Stack, if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { + if err = addComputePayloadSHA256(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -422,7 +422,7 @@ func (c *Client) addOperationUploadPartCopyMiddlewares(stack *middleware.Stack, if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addUploadPartCopyUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_WriteGetObjectResponse.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_WriteGetObjectResponse.go index ac90ff70..e181ab71 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_WriteGetObjectResponse.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/api_op_WriteGetObjectResponse.go @@ -314,28 +314,28 @@ func (c *Client) addOperationWriteGetObjectResponseMiddlewares(stack *middleware if err = addSetLoggerMiddleware(stack, options); err != nil { return err } - if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { + if err = addClientRequestID(stack); err != nil { return err } - if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { + if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } - if err = v4.AddUnsignedPayloadMiddleware(stack); err != nil { + if err = addUnsignedPayload(stack); err != nil { return err } - if err = v4.AddContentSHA256HeaderMiddleware(stack); err != nil { + if err = addContentSHA256Header(stack); err != nil { return err } - if err = addRetryMiddlewares(stack, options); err != nil { + if err = addRetry(stack, options); err != nil { return err } - if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { + if err = addRawResponseToMetadata(stack); err != nil { return err } - if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { + if err = addRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { @@ -365,7 +365,7 @@ func (c *Client) addOperationWriteGetObjectResponseMiddlewares(stack *middleware if err = addMetadataRetrieverMiddleware(stack); err != nil { return err } - if err = awsmiddleware.AddRecursionDetection(stack); err != nil { + if err = addRecursionDetection(stack); err != nil { return err } if err = addWriteGetObjectResponseUpdateEndpoint(stack, options); err != nil { diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/endpoint_auth_resolver.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/endpoint_auth_resolver.go index 91af48fc..bb5f4cf4 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/endpoint_auth_resolver.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/endpoint_auth_resolver.go @@ -4,6 +4,7 @@ import ( "context" "fmt" + "github.com/aws/aws-sdk-go-v2/aws" smithyauth "github.com/aws/smithy-go/auth" ) @@ -18,6 +19,16 @@ func (r *endpointAuthResolver) ResolveAuthSchemes( ) ( []*smithyauth.Option, error, ) { + if params.endpointParams.Region == nil { + // #2502: We're correcting the endpoint binding behavior to treat empty + // Region as "unset" (nil), but auth resolution technically doesn't + // care and someone could be using V1 or non-default V2 endpoint + // resolution, both of which would bypass the required-region check. + // They shouldn't be broken because the region is technically required + // by this service's endpoint-based auth resolver, so we stub it here. + params.endpointParams.Region = aws.String("") + } + opts, err := r.resolveAuthSchemes(ctx, params) if err != nil { return nil, err diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/endpoints.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/endpoints.go index a1f2e36d..e6ae2e87 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/endpoints.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/endpoints.go @@ -228,6 +228,13 @@ func resolveBaseEndpoint(cfg aws.Config, o *Options) { } } +func bindRegion(region string) *string { + if region == "" { + return nil + } + return aws.String(endpoints.MapFIPSRegion(region)) +} + // EndpointParameters provides the parameters that influence how endpoints are // resolved. type EndpointParameters struct { @@ -1345,6 +1352,19 @@ func (r *resolver) ResolveEndpoint( Properties: func() smithy.Properties { var out smithy.Properties smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ + { + SchemeID: "aws.auth#sigv4a", + SignerProperties: func() smithy.Properties { + var sp smithy.Properties + smithyhttp.SetDisableDoubleEncoding(&sp, true) + + smithyhttp.SetSigV4SigningName(&sp, "s3-outposts") + smithyhttp.SetSigV4ASigningName(&sp, "s3-outposts") + + smithyhttp.SetSigV4ASigningRegions(&sp, []string{"*"}) + return sp + }(), + }, { SchemeID: "aws.auth#sigv4", SignerProperties: func() smithy.Properties { @@ -1388,6 +1408,19 @@ func (r *resolver) ResolveEndpoint( Properties: func() smithy.Properties { var out smithy.Properties smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ + { + SchemeID: "aws.auth#sigv4a", + SignerProperties: func() smithy.Properties { + var sp smithy.Properties + smithyhttp.SetDisableDoubleEncoding(&sp, true) + + smithyhttp.SetSigV4SigningName(&sp, "s3-outposts") + smithyhttp.SetSigV4ASigningName(&sp, "s3-outposts") + + smithyhttp.SetSigV4ASigningRegions(&sp, []string{"*"}) + return sp + }(), + }, { SchemeID: "aws.auth#sigv4", SignerProperties: func() smithy.Properties { @@ -1439,6 +1472,19 @@ func (r *resolver) ResolveEndpoint( Properties: func() smithy.Properties { var out smithy.Properties smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ + { + SchemeID: "aws.auth#sigv4a", + SignerProperties: func() smithy.Properties { + var sp smithy.Properties + smithyhttp.SetDisableDoubleEncoding(&sp, true) + + smithyhttp.SetSigV4SigningName(&sp, "s3-outposts") + smithyhttp.SetSigV4ASigningName(&sp, "s3-outposts") + + smithyhttp.SetSigV4ASigningRegions(&sp, []string{"*"}) + return sp + }(), + }, { SchemeID: "aws.auth#sigv4", SignerProperties: func() smithy.Properties { @@ -1484,6 +1530,19 @@ func (r *resolver) ResolveEndpoint( Properties: func() smithy.Properties { var out smithy.Properties smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ + { + SchemeID: "aws.auth#sigv4a", + SignerProperties: func() smithy.Properties { + var sp smithy.Properties + smithyhttp.SetDisableDoubleEncoding(&sp, true) + + smithyhttp.SetSigV4SigningName(&sp, "s3-outposts") + smithyhttp.SetSigV4ASigningName(&sp, "s3-outposts") + + smithyhttp.SetSigV4ASigningRegions(&sp, []string{"*"}) + return sp + }(), + }, { SchemeID: "aws.auth#sigv4", SignerProperties: func() smithy.Properties { @@ -3748,6 +3807,19 @@ func (r *resolver) ResolveEndpoint( Properties: func() smithy.Properties { var out smithy.Properties smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ + { + SchemeID: "aws.auth#sigv4a", + SignerProperties: func() smithy.Properties { + var sp smithy.Properties + smithyhttp.SetDisableDoubleEncoding(&sp, true) + + smithyhttp.SetSigV4SigningName(&sp, "s3-outposts") + smithyhttp.SetSigV4ASigningName(&sp, "s3-outposts") + + smithyhttp.SetSigV4ASigningRegions(&sp, []string{"*"}) + return sp + }(), + }, { SchemeID: "aws.auth#sigv4", SignerProperties: func() smithy.Properties { @@ -3793,6 +3865,19 @@ func (r *resolver) ResolveEndpoint( Properties: func() smithy.Properties { var out smithy.Properties smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ + { + SchemeID: "aws.auth#sigv4a", + SignerProperties: func() smithy.Properties { + var sp smithy.Properties + smithyhttp.SetDisableDoubleEncoding(&sp, true) + + smithyhttp.SetSigV4SigningName(&sp, "s3-outposts") + smithyhttp.SetSigV4ASigningName(&sp, "s3-outposts") + + smithyhttp.SetSigV4ASigningRegions(&sp, []string{"*"}) + return sp + }(), + }, { SchemeID: "aws.auth#sigv4", SignerProperties: func() smithy.Properties { @@ -5668,7 +5753,7 @@ type endpointParamsBinder interface { func bindEndpointParams(input interface{}, options Options) *EndpointParameters { params := &EndpointParameters{} - params.Region = aws.String(endpoints.MapFIPSRegion(options.Region)) + params.Region = bindRegion(options.Region) params.UseFIPS = aws.Bool(options.EndpointOptions.UseFIPSEndpoint == aws.FIPSEndpointStateEnabled) params.UseDualStack = aws.Bool(options.EndpointOptions.UseDualStackEndpoint == aws.DualStackEndpointStateEnabled) params.Endpoint = options.BaseEndpoint diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/express_resolve.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/express_resolve.go index 18d6c06a..7c7a7b42 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/express_resolve.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/express_resolve.go @@ -24,14 +24,9 @@ func finalizeExpressCredentials(o *Options, c *Client) { } // Operation config finalizer: update the sigv4 credentials on the default -// express provider if it changed to ensure different cache keys +// express provider in case it changed to ensure different cache keys func finalizeOperationExpressCredentials(o *Options, c Client) { - p, ok := o.ExpressCredentials.(*defaultS3ExpressCredentialsProvider) - if !ok { - return - } - - if c.options.Credentials != o.Credentials { + if p, ok := o.ExpressCredentials.(*defaultS3ExpressCredentialsProvider); ok { o.ExpressCredentials = p.CloneWithBaseCredentials(o.Credentials) } } diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/generated.json b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/generated.json index 4e666764..6e392285 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/generated.json +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/generated.json @@ -9,8 +9,7 @@ "github.com/aws/aws-sdk-go-v2/service/internal/checksum": "v0.0.0-00010101000000-000000000000", "github.com/aws/aws-sdk-go-v2/service/internal/presigned-url": "v1.0.7", "github.com/aws/aws-sdk-go-v2/service/internal/s3shared": "v1.2.3", - "github.com/aws/smithy-go": "v1.4.0", - "github.com/google/go-cmp": "v0.5.4" + "github.com/aws/smithy-go": "v1.4.0" }, "files": [ "api_client.go", @@ -123,6 +122,7 @@ "options.go", "protocol_test.go", "serializers.go", + "snapshot_test.go", "types/enums.go", "types/errors.go", "types/types.go", diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/go_module_metadata.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/go_module_metadata.go index bff6ac9a..04c6fdbb 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/go_module_metadata.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/go_module_metadata.go @@ -3,4 +3,4 @@ package s3 // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.48.1" +const goModuleVersion = "1.53.1" diff --git a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/types/types.go b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/types/types.go index d3f7593f..4299b57c 100644 --- a/vendor/github.com/aws/aws-sdk-go-v2/service/s3/types/types.go +++ b/vendor/github.com/aws/aws-sdk-go-v2/service/s3/types/types.go @@ -1280,8 +1280,15 @@ type ExistingObjectReplication struct { noSmithyDocumentSerde } -// Specifies the Amazon S3 object key name to filter on and whether to filter on -// the suffix or prefix of the key name. +// Specifies the Amazon S3 object key name to filter on. An object key name is the +// name assigned to an object in your Amazon S3 bucket. You specify whether to +// filter on the suffix or prefix of the object key name. A prefix is a specific +// string of characters at the beginning of an object key name, which you can use +// to organize objects. For example, you can start the key names of related objects +// with a prefix, such as 2023- or engineering/ . Then, you can use FilterRule to +// find objects in a bucket with key names that have the same prefix. A suffix is +// similar to a prefix, but it is at the end of the object key name instead of at +// the beginning. type FilterRule struct { // The object key name prefix or suffix identifying one or more objects to which @@ -1783,7 +1790,9 @@ type LifecycleRuleAndOperator struct { } // The Filter is used to identify objects that a Lifecycle Rule applies to. A -// Filter must have exactly one of Prefix , Tag , or And specified. +// Filter can have exactly one of Prefix , Tag , ObjectSizeGreaterThan , +// ObjectSizeLessThan , or And specified. If the Filter element is left empty, the +// Lifecycle Rule applies to all objects in the bucket. // // The following types satisfy this interface: // @@ -1855,8 +1864,8 @@ func (*LifecycleRuleFilterMemberTag) isLifecycleRuleFilter() {} type LocationInfo struct { // The name of the location where the bucket will be created. For directory - // buckets, the AZ ID of the Availability Zone where the bucket will be created. An - // example AZ ID value is usw2-az2 . + // buckets, the name of the location is the AZ ID of the Availability Zone where + // the bucket will be created. An example AZ ID value is usw2-az1 . Name *string // The type of location where the bucket will be created. @@ -3137,8 +3146,8 @@ type ServerSideEncryptionByDefault struct { // Amazon Web Services Key Management Service (KMS) customer Amazon Web Services // KMS key ID to use for the default encryption. This parameter is allowed if and - // only if SSEAlgorithm is set to aws:kms . You can specify the key ID, key alias, - // or the Amazon Resource Name (ARN) of the KMS key. + // only if SSEAlgorithm is set to aws:kms or aws:kms:dsse . You can specify the key + // ID, key alias, or the Amazon Resource Name (ARN) of the KMS key. // - Key ID: 1234abcd-12ab-34cd-56ef-1234567890ab // - Key ARN: // arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab diff --git a/vendor/github.com/aws/smithy-go/.gitignore b/vendor/github.com/aws/smithy-go/.gitignore index c92d6105..2518b349 100644 --- a/vendor/github.com/aws/smithy-go/.gitignore +++ b/vendor/github.com/aws/smithy-go/.gitignore @@ -24,3 +24,6 @@ build/ # VS Code bin/ .vscode/ + +# make +c.out diff --git a/vendor/github.com/aws/smithy-go/CHANGELOG.md b/vendor/github.com/aws/smithy-go/CHANGELOG.md index 46b11508..39ffae99 100644 --- a/vendor/github.com/aws/smithy-go/CHANGELOG.md +++ b/vendor/github.com/aws/smithy-go/CHANGELOG.md @@ -1,3 +1,20 @@ +# Release (2024-03-29) + +* No change notes available for this release. + +# Release (2024-02-21) + +## Module Highlights +* `github.com/aws/smithy-go`: v1.20.1 + * **Bug Fix**: Remove runtime dependency on go-cmp. + +# Release (2024-02-13) + +## Module Highlights +* `github.com/aws/smithy-go`: v1.20.0 + * **Feature**: Add codegen definition for sigv4a trait. + * **Feature**: Bump minimum Go version to 1.20 per our language support policy. + # Release (2023-12-07) ## Module Highlights diff --git a/vendor/github.com/aws/smithy-go/Makefile b/vendor/github.com/aws/smithy-go/Makefile index 4b3c2093..e66fa8ca 100644 --- a/vendor/github.com/aws/smithy-go/Makefile +++ b/vendor/github.com/aws/smithy-go/Makefile @@ -33,13 +33,18 @@ smithy-clean: ################## # Linting/Verify # ################## -.PHONY: verify vet +.PHONY: verify vet cover verify: vet vet: go vet ${BUILD_TAGS} --all ./... +cover: + go test ${BUILD_TAGS} -coverprofile c.out ./... + @cover=`go tool cover -func c.out | grep '^total:' | awk '{ print $$3+0 }'`; \ + echo "total (statements): $$cover%"; + ################ # Unit Testing # ################ diff --git a/vendor/github.com/aws/smithy-go/go_module_metadata.go b/vendor/github.com/aws/smithy-go/go_module_metadata.go index cd6f7fa4..a6b22f35 100644 --- a/vendor/github.com/aws/smithy-go/go_module_metadata.go +++ b/vendor/github.com/aws/smithy-go/go_module_metadata.go @@ -3,4 +3,4 @@ package smithy // goModuleVersion is the tagged release for this module -const goModuleVersion = "1.19.0" +const goModuleVersion = "1.20.2" diff --git a/vendor/github.com/aws/smithy-go/modman.toml b/vendor/github.com/aws/smithy-go/modman.toml index 20295cdd..9d94b7cb 100644 --- a/vendor/github.com/aws/smithy-go/modman.toml +++ b/vendor/github.com/aws/smithy-go/modman.toml @@ -1,5 +1,4 @@ [dependencies] - "github.com/google/go-cmp" = "v0.5.8" "github.com/jmespath/go-jmespath" = "v0.4.0" [modules] diff --git a/vendor/github.com/danieljoos/wincred/sys_unsupported.go b/vendor/github.com/danieljoos/wincred/sys_unsupported.go index b47bccf8..746639ad 100644 --- a/vendor/github.com/danieljoos/wincred/sys_unsupported.go +++ b/vendor/github.com/danieljoos/wincred/sys_unsupported.go @@ -1,3 +1,4 @@ +//go:build !windows // +build !windows package wincred @@ -17,6 +18,7 @@ const ( sysERROR_NOT_FOUND = syscall.Errno(1) sysERROR_INVALID_PARAMETER = syscall.Errno(1) + sysERROR_BAD_USERNAME = syscall.Errno(1) ) func sysCredRead(...interface{}) (*Credential, error) { diff --git a/vendor/github.com/form3tech-oss/jwt-go/.travis.yml b/vendor/github.com/form3tech-oss/jwt-go/.travis.yml deleted file mode 100644 index 3c7fb7e1..00000000 --- a/vendor/github.com/form3tech-oss/jwt-go/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ -language: go - -script: - - go vet ./... - - go test -v ./... - -go: - - 1.12 - - 1.13 - - 1.14 - - 1.15 - - tip diff --git a/vendor/github.com/form3tech-oss/jwt-go/MIGRATION_GUIDE.md b/vendor/github.com/form3tech-oss/jwt-go/MIGRATION_GUIDE.md deleted file mode 100644 index 7fc1f793..00000000 --- a/vendor/github.com/form3tech-oss/jwt-go/MIGRATION_GUIDE.md +++ /dev/null @@ -1,97 +0,0 @@ -## Migration Guide from v2 -> v3 - -Version 3 adds several new, frequently requested features. To do so, it introduces a few breaking changes. We've worked to keep these as minimal as possible. This guide explains the breaking changes and how you can quickly update your code. - -### `Token.Claims` is now an interface type - -The most requested feature from the 2.0 verison of this library was the ability to provide a custom type to the JSON parser for claims. This was implemented by introducing a new interface, `Claims`, to replace `map[string]interface{}`. We also included two concrete implementations of `Claims`: `MapClaims` and `StandardClaims`. - -`MapClaims` is an alias for `map[string]interface{}` with built in validation behavior. It is the default claims type when using `Parse`. The usage is unchanged except you must type cast the claims property. - -The old example for parsing a token looked like this.. - -```go - if token, err := jwt.Parse(tokenString, keyLookupFunc); err == nil { - fmt.Printf("Token for user %v expires %v", token.Claims["user"], token.Claims["exp"]) - } -``` - -is now directly mapped to... - -```go - if token, err := jwt.Parse(tokenString, keyLookupFunc); err == nil { - claims := token.Claims.(jwt.MapClaims) - fmt.Printf("Token for user %v expires %v", claims["user"], claims["exp"]) - } -``` - -`StandardClaims` is designed to be embedded in your custom type. You can supply a custom claims type with the new `ParseWithClaims` function. Here's an example of using a custom claims type. - -```go - type MyCustomClaims struct { - User string - *StandardClaims - } - - if token, err := jwt.ParseWithClaims(tokenString, &MyCustomClaims{}, keyLookupFunc); err == nil { - claims := token.Claims.(*MyCustomClaims) - fmt.Printf("Token for user %v expires %v", claims.User, claims.StandardClaims.ExpiresAt) - } -``` - -### `ParseFromRequest` has been moved - -To keep this library focused on the tokens without becoming overburdened with complex request processing logic, `ParseFromRequest` and its new companion `ParseFromRequestWithClaims` have been moved to a subpackage, `request`. The method signatues have also been augmented to receive a new argument: `Extractor`. - -`Extractors` do the work of picking the token string out of a request. The interface is simple and composable. - -This simple parsing example: - -```go - if token, err := jwt.ParseFromRequest(tokenString, req, keyLookupFunc); err == nil { - fmt.Printf("Token for user %v expires %v", token.Claims["user"], token.Claims["exp"]) - } -``` - -is directly mapped to: - -```go - if token, err := request.ParseFromRequest(req, request.OAuth2Extractor, keyLookupFunc); err == nil { - claims := token.Claims.(jwt.MapClaims) - fmt.Printf("Token for user %v expires %v", claims["user"], claims["exp"]) - } -``` - -There are several concrete `Extractor` types provided for your convenience: - -* `HeaderExtractor` will search a list of headers until one contains content. -* `ArgumentExtractor` will search a list of keys in request query and form arguments until one contains content. -* `MultiExtractor` will try a list of `Extractors` in order until one returns content. -* `AuthorizationHeaderExtractor` will look in the `Authorization` header for a `Bearer` token. -* `OAuth2Extractor` searches the places an OAuth2 token would be specified (per the spec): `Authorization` header and `access_token` argument -* `PostExtractionFilter` wraps an `Extractor`, allowing you to process the content before it's parsed. A simple example is stripping the `Bearer ` text from a header - - -### RSA signing methods no longer accept `[]byte` keys - -Due to a [critical vulnerability](https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/), we've decided the convenience of accepting `[]byte` instead of `rsa.PublicKey` or `rsa.PrivateKey` isn't worth the risk of misuse. - -To replace this behavior, we've added two helper methods: `ParseRSAPrivateKeyFromPEM(key []byte) (*rsa.PrivateKey, error)` and `ParseRSAPublicKeyFromPEM(key []byte) (*rsa.PublicKey, error)`. These are just simple helpers for unpacking PEM encoded PKCS1 and PKCS8 keys. If your keys are encoded any other way, all you need to do is convert them to the `crypto/rsa` package's types. - -```go - func keyLookupFunc(*Token) (interface{}, error) { - // Don't forget to validate the alg is what you expect: - if _, ok := token.Method.(*jwt.SigningMethodRSA); !ok { - return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) - } - - // Look up key - key, err := lookupPublicKey(token.Header["kid"]) - if err != nil { - return nil, err - } - - // Unpack key from PEM encoded PKCS8 - return jwt.ParseRSAPublicKeyFromPEM(key) - } -``` diff --git a/vendor/github.com/form3tech-oss/jwt-go/README.md b/vendor/github.com/form3tech-oss/jwt-go/README.md deleted file mode 100644 index d7749077..00000000 --- a/vendor/github.com/form3tech-oss/jwt-go/README.md +++ /dev/null @@ -1,104 +0,0 @@ -# jwt-go - -[![Build Status](https://travis-ci.org/dgrijalva/jwt-go.svg?branch=master)](https://travis-ci.org/dgrijalva/jwt-go) -[![GoDoc](https://godoc.org/github.com/dgrijalva/jwt-go?status.svg)](https://godoc.org/github.com/dgrijalva/jwt-go) - -A [go](http://www.golang.org) (or 'golang' for search engine friendliness) implementation of [JSON Web Tokens](http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html) - -**NEW VERSION COMING:** There have been a lot of improvements suggested since the version 3.0.0 released in 2016. I'm working now on cutting two different releases: 3.2.0 will contain any non-breaking changes or enhancements. 4.0.0 will follow shortly which will include breaking changes. See the 4.0.0 milestone to get an idea of what's coming. If you have other ideas, or would like to participate in 4.0.0, now's the time. If you depend on this library and don't want to be interrupted, I recommend you use your dependency mangement tool to pin to version 3. - -**SECURITY NOTICE:** Some older versions of Go have a security issue in the cryotp/elliptic. Recommendation is to upgrade to at least 1.8.3. See issue #216 for more detail. - -**SECURITY NOTICE:** It's important that you [validate the `alg` presented is what you expect](https://auth0.com/blog/critical-vulnerabilities-in-json-web-token-libraries/). This library attempts to make it easy to do the right thing by requiring key types match the expected alg, but you should take the extra step to verify it in your usage. See the examples provided. - -## What the heck is a JWT? - -JWT.io has [a great introduction](https://jwt.io/introduction) to JSON Web Tokens. - -In short, it's a signed JSON object that does something useful (for example, authentication). It's commonly used for `Bearer` tokens in Oauth 2. A token is made of three parts, separated by `.`'s. The first two parts are JSON objects, that have been [base64url](http://tools.ietf.org/html/rfc4648) encoded. The last part is the signature, encoded the same way. - -The first part is called the header. It contains the necessary information for verifying the last part, the signature. For example, which encryption method was used for signing and what key was used. - -The part in the middle is the interesting bit. It's called the Claims and contains the actual stuff you care about. Refer to [the RFC](http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html) for information about reserved keys and the proper way to add your own. - -## What's in the box? - -This library supports the parsing and verification as well as the generation and signing of JWTs. Current supported signing algorithms are HMAC SHA, RSA, RSA-PSS, and ECDSA, though hooks are present for adding your own. - -## Examples - -See [the project documentation](https://godoc.org/github.com/dgrijalva/jwt-go) for examples of usage: - -* [Simple example of parsing and validating a token](https://godoc.org/github.com/dgrijalva/jwt-go#example-Parse--Hmac) -* [Simple example of building and signing a token](https://godoc.org/github.com/dgrijalva/jwt-go#example-New--Hmac) -* [Directory of Examples](https://godoc.org/github.com/dgrijalva/jwt-go#pkg-examples) - -## Extensions - -This library publishes all the necessary components for adding your own signing methods. Simply implement the `SigningMethod` interface and register a factory method using `RegisterSigningMethod`. - -Here's an example of an extension that integrates with multiple Google Cloud Platform signing tools (AppEngine, IAM API, Cloud KMS): https://github.com/someone1/gcp-jwt-go - -## Compliance - -This library was last reviewed to comply with [RTF 7519](http://www.rfc-editor.org/info/rfc7519) dated May 2015 with a few notable differences: - -* In order to protect against accidental use of [Unsecured JWTs](http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#UnsecuredJWT), tokens using `alg=none` will only be accepted if the constant `jwt.UnsafeAllowNoneSignatureType` is provided as the key. - -## Project Status & Versioning - -This library is considered production ready. Feedback and feature requests are appreciated. The API should be considered stable. There should be very few backwards-incompatible changes outside of major version updates (and only with good reason). - -This project uses [Semantic Versioning 2.0.0](http://semver.org). Accepted pull requests will land on `master`. Periodically, versions will be tagged from `master`. You can find all the releases on [the project releases page](https://github.com/dgrijalva/jwt-go/releases). - -While we try to make it obvious when we make breaking changes, there isn't a great mechanism for pushing announcements out to users. You may want to use this alternative package include: `gopkg.in/dgrijalva/jwt-go.v3`. It will do the right thing WRT semantic versioning. - -**BREAKING CHANGES:*** -* Version 3.0.0 includes _a lot_ of changes from the 2.x line, including a few that break the API. We've tried to break as few things as possible, so there should just be a few type signature changes. A full list of breaking changes is available in `VERSION_HISTORY.md`. See `MIGRATION_GUIDE.md` for more information on updating your code. - -## Usage Tips - -### Signing vs Encryption - -A token is simply a JSON object that is signed by its author. this tells you exactly two things about the data: - -* The author of the token was in the possession of the signing secret -* The data has not been modified since it was signed - -It's important to know that JWT does not provide encryption, which means anyone who has access to the token can read its contents. If you need to protect (encrypt) the data, there is a companion spec, `JWE`, that provides this functionality. JWE is currently outside the scope of this library. - -### Choosing a Signing Method - -There are several signing methods available, and you should probably take the time to learn about the various options before choosing one. The principal design decision is most likely going to be symmetric vs asymmetric. - -Symmetric signing methods, such as HSA, use only a single secret. This is probably the simplest signing method to use since any `[]byte` can be used as a valid secret. They are also slightly computationally faster to use, though this rarely is enough to matter. Symmetric signing methods work the best when both producers and consumers of tokens are trusted, or even the same system. Since the same secret is used to both sign and validate tokens, you can't easily distribute the key for validation. - -Asymmetric signing methods, such as RSA, use different keys for signing and verifying tokens. This makes it possible to produce tokens with a private key, and allow any consumer to access the public key for verification. - -### Signing Methods and Key Types - -Each signing method expects a different object type for its signing keys. See the package documentation for details. Here are the most common ones: - -* The [HMAC signing method](https://godoc.org/github.com/dgrijalva/jwt-go#SigningMethodHMAC) (`HS256`,`HS384`,`HS512`) expect `[]byte` values for signing and validation -* The [RSA signing method](https://godoc.org/github.com/dgrijalva/jwt-go#SigningMethodRSA) (`RS256`,`RS384`,`RS512`) expect `*rsa.PrivateKey` for signing and `*rsa.PublicKey` for validation -* The [ECDSA signing method](https://godoc.org/github.com/dgrijalva/jwt-go#SigningMethodECDSA) (`ES256`,`ES384`,`ES512`) expect `*ecdsa.PrivateKey` for signing and `*ecdsa.PublicKey` for validation - -### JWT and OAuth - -It's worth mentioning that OAuth and JWT are not the same thing. A JWT token is simply a signed JSON object. It can be used anywhere such a thing is useful. There is some confusion, though, as JWT is the most common type of bearer token used in OAuth2 authentication. - -Without going too far down the rabbit hole, here's a description of the interaction of these technologies: - -* OAuth is a protocol for allowing an identity provider to be separate from the service a user is logging in to. For example, whenever you use Facebook to log into a different service (Yelp, Spotify, etc), you are using OAuth. -* OAuth defines several options for passing around authentication data. One popular method is called a "bearer token". A bearer token is simply a string that _should_ only be held by an authenticated user. Thus, simply presenting this token proves your identity. You can probably derive from here why a JWT might make a good bearer token. -* Because bearer tokens are used for authentication, it's important they're kept secret. This is why transactions that use bearer tokens typically happen over SSL. - -### Troubleshooting - -This library uses descriptive error messages whenever possible. If you are not getting the expected result, have a look at the errors. The most common place people get stuck is providing the correct type of key to the parser. See the above section on signing methods and key types. - -## More - -Documentation can be found [on godoc.org](http://godoc.org/github.com/dgrijalva/jwt-go). - -The command line utility included in this project (cmd/jwt) provides a straightforward example of token creation and parsing as well as a useful tool for debugging your own integration. You'll also find several implementation examples in the documentation. diff --git a/vendor/github.com/form3tech-oss/jwt-go/claims.go b/vendor/github.com/form3tech-oss/jwt-go/claims.go deleted file mode 100644 index 62489066..00000000 --- a/vendor/github.com/form3tech-oss/jwt-go/claims.go +++ /dev/null @@ -1,136 +0,0 @@ -package jwt - -import ( - "crypto/subtle" - "fmt" - "time" -) - -// For a type to be a Claims object, it must just have a Valid method that determines -// if the token is invalid for any supported reason -type Claims interface { - Valid() error -} - -// Structured version of Claims Section, as referenced at -// https://tools.ietf.org/html/rfc7519#section-4.1 -// See examples for how to use this with your own claim types -type StandardClaims struct { - Audience []string `json:"aud,omitempty"` - ExpiresAt int64 `json:"exp,omitempty"` - Id string `json:"jti,omitempty"` - IssuedAt int64 `json:"iat,omitempty"` - Issuer string `json:"iss,omitempty"` - NotBefore int64 `json:"nbf,omitempty"` - Subject string `json:"sub,omitempty"` -} - -// Validates time based claims "exp, iat, nbf". -// There is no accounting for clock skew. -// As well, if any of the above claims are not in the token, it will still -// be considered a valid claim. -func (c StandardClaims) Valid() error { - vErr := new(ValidationError) - now := TimeFunc().Unix() - - // The claims below are optional, by default, so if they are set to the - // default value in Go, let's not fail the verification for them. - if c.VerifyExpiresAt(now, false) == false { - delta := time.Unix(now, 0).Sub(time.Unix(c.ExpiresAt, 0)) - vErr.Inner = fmt.Errorf("token is expired by %v", delta) - vErr.Errors |= ValidationErrorExpired - } - - if c.VerifyIssuedAt(now, false) == false { - vErr.Inner = fmt.Errorf("Token used before issued") - vErr.Errors |= ValidationErrorIssuedAt - } - - if c.VerifyNotBefore(now, false) == false { - vErr.Inner = fmt.Errorf("token is not valid yet") - vErr.Errors |= ValidationErrorNotValidYet - } - - if vErr.valid() { - return nil - } - - return vErr -} - -// Compares the aud claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (c *StandardClaims) VerifyAudience(cmp string, req bool) bool { - return verifyAud(c.Audience, cmp, req) -} - -// Compares the exp claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (c *StandardClaims) VerifyExpiresAt(cmp int64, req bool) bool { - return verifyExp(c.ExpiresAt, cmp, req) -} - -// Compares the iat claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (c *StandardClaims) VerifyIssuedAt(cmp int64, req bool) bool { - return verifyIat(c.IssuedAt, cmp, req) -} - -// Compares the iss claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (c *StandardClaims) VerifyIssuer(cmp string, req bool) bool { - return verifyIss(c.Issuer, cmp, req) -} - -// Compares the nbf claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (c *StandardClaims) VerifyNotBefore(cmp int64, req bool) bool { - return verifyNbf(c.NotBefore, cmp, req) -} - -// ----- helpers - -func verifyAud(aud []string, cmp string, required bool) bool { - if len(aud) == 0 { - return !required - } - - for _, a := range aud { - if subtle.ConstantTimeCompare([]byte(a), []byte(cmp)) != 0 { - return true - } - } - return false -} - -func verifyExp(exp int64, now int64, required bool) bool { - if exp == 0 { - return !required - } - return now <= exp -} - -func verifyIat(iat int64, now int64, required bool) bool { - if iat == 0 { - return !required - } - return now >= iat -} - -func verifyIss(iss string, cmp string, required bool) bool { - if iss == "" { - return !required - } - if subtle.ConstantTimeCompare([]byte(iss), []byte(cmp)) != 0 { - return true - } else { - return false - } -} - -func verifyNbf(nbf int64, now int64, required bool) bool { - if nbf == 0 { - return !required - } - return now >= nbf -} diff --git a/vendor/github.com/form3tech-oss/jwt-go/errors.go b/vendor/github.com/form3tech-oss/jwt-go/errors.go deleted file mode 100644 index 1c93024a..00000000 --- a/vendor/github.com/form3tech-oss/jwt-go/errors.go +++ /dev/null @@ -1,59 +0,0 @@ -package jwt - -import ( - "errors" -) - -// Error constants -var ( - ErrInvalidKey = errors.New("key is invalid") - ErrInvalidKeyType = errors.New("key is of invalid type") - ErrHashUnavailable = errors.New("the requested hash function is unavailable") -) - -// The errors that might occur when parsing and validating a token -const ( - ValidationErrorMalformed uint32 = 1 << iota // Token is malformed - ValidationErrorUnverifiable // Token could not be verified because of signing problems - ValidationErrorSignatureInvalid // Signature validation failed - - // Standard Claim validation errors - ValidationErrorAudience // AUD validation failed - ValidationErrorExpired // EXP validation failed - ValidationErrorIssuedAt // IAT validation failed - ValidationErrorIssuer // ISS validation failed - ValidationErrorNotValidYet // NBF validation failed - ValidationErrorId // JTI validation failed - ValidationErrorClaimsInvalid // Generic claims validation error -) - -// Helper for constructing a ValidationError with a string error message -func NewValidationError(errorText string, errorFlags uint32) *ValidationError { - return &ValidationError{ - text: errorText, - Errors: errorFlags, - } -} - -// The error from Parse if token is not valid -type ValidationError struct { - Inner error // stores the error returned by external dependencies, i.e.: KeyFunc - Errors uint32 // bitfield. see ValidationError... constants - text string // errors that do not have a valid error just have text -} - -// Validation error is an error type -func (e ValidationError) Error() string { - if e.Inner != nil { - return e.Inner.Error() - } else if e.text != "" { - return e.text - } else { - return "token is invalid" - } -} - -// No errors -func (e *ValidationError) valid() bool { - return e.Errors == 0 -} diff --git a/vendor/github.com/form3tech-oss/jwt-go/map_claims.go b/vendor/github.com/form3tech-oss/jwt-go/map_claims.go deleted file mode 100644 index 14b434ce..00000000 --- a/vendor/github.com/form3tech-oss/jwt-go/map_claims.go +++ /dev/null @@ -1,122 +0,0 @@ -package jwt - -import ( - "encoding/json" - "errors" - // "fmt" -) - -// Claims type that uses the map[string]interface{} for JSON decoding -// This is the default claims type if you don't supply one -type MapClaims map[string]interface{} - -// Compares the aud claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (m MapClaims) VerifyAudience(cmp string, req bool) bool { - var aud []string - switch v := m["aud"].(type) { - case []string: - aud = v - case []interface{}: - for _, a := range v { - vs, ok := a.(string) - if !ok { - return false - } - aud = append(aud, vs) - } - case string: - aud = append(aud, v) - default: - return false - } - return verifyAud(aud, cmp, req) -} - -// Compares the exp claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (m MapClaims) VerifyExpiresAt(cmp int64, req bool) bool { - exp, ok := m["exp"] - if !ok { - return !req - } - switch expType := exp.(type) { - case float64: - return verifyExp(int64(expType), cmp, req) - case json.Number: - v, _ := expType.Int64() - return verifyExp(v, cmp, req) - } - return false -} - -// Compares the iat claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (m MapClaims) VerifyIssuedAt(cmp int64, req bool) bool { - iat, ok := m["iat"] - if !ok { - return !req - } - switch iatType := iat.(type) { - case float64: - return verifyIat(int64(iatType), cmp, req) - case json.Number: - v, _ := iatType.Int64() - return verifyIat(v, cmp, req) - } - return false -} - -// Compares the iss claim against cmp.`` -// If required is false, this method will return true if the value matches or is unset -func (m MapClaims) VerifyIssuer(cmp string, req bool) bool { - iss, _ := m["iss"].(string) - return verifyIss(iss, cmp, req) -} - -// Compares the nbf claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (m MapClaims) VerifyNotBefore(cmp int64, req bool) bool { - nbf, ok := m["nbf"] - if !ok { - return !req - } - switch nbfType := nbf.(type) { - case float64: - return verifyNbf(int64(nbfType), cmp, req) - case json.Number: - v, _ := nbfType.Int64() - return verifyNbf(v, cmp, req) - } - return false -} - -// Validates time based claims "exp, iat, nbf". -// There is no accounting for clock skew. -// As well, if any of the above claims are not in the token, it will still -// be considered a valid claim. -func (m MapClaims) Valid() error { - vErr := new(ValidationError) - now := TimeFunc().Unix() - - if !m.VerifyExpiresAt(now, false) { - vErr.Inner = errors.New("Token is expired") - vErr.Errors |= ValidationErrorExpired - } - - if !m.VerifyIssuedAt(now, false) { - vErr.Inner = errors.New("Token used before issued") - vErr.Errors |= ValidationErrorIssuedAt - } - - if !m.VerifyNotBefore(now, false) { - vErr.Inner = errors.New("Token is not valid yet") - vErr.Errors |= ValidationErrorNotValidYet - } - - if vErr.valid() { - return nil - } - - return vErr -} diff --git a/vendor/github.com/form3tech-oss/jwt-go/parser.go b/vendor/github.com/form3tech-oss/jwt-go/parser.go deleted file mode 100644 index d6901d9a..00000000 --- a/vendor/github.com/form3tech-oss/jwt-go/parser.go +++ /dev/null @@ -1,148 +0,0 @@ -package jwt - -import ( - "bytes" - "encoding/json" - "fmt" - "strings" -) - -type Parser struct { - ValidMethods []string // If populated, only these methods will be considered valid - UseJSONNumber bool // Use JSON Number format in JSON decoder - SkipClaimsValidation bool // Skip claims validation during token parsing -} - -// Parse, validate, and return a token. -// keyFunc will receive the parsed token and should return the key for validating. -// If everything is kosher, err will be nil -func (p *Parser) Parse(tokenString string, keyFunc Keyfunc) (*Token, error) { - return p.ParseWithClaims(tokenString, MapClaims{}, keyFunc) -} - -func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) { - token, parts, err := p.ParseUnverified(tokenString, claims) - if err != nil { - return token, err - } - - // Verify signing method is in the required set - if p.ValidMethods != nil { - var signingMethodValid = false - var alg = token.Method.Alg() - for _, m := range p.ValidMethods { - if m == alg { - signingMethodValid = true - break - } - } - if !signingMethodValid { - // signing method is not in the listed set - return token, NewValidationError(fmt.Sprintf("signing method %v is invalid", alg), ValidationErrorSignatureInvalid) - } - } - - // Lookup key - var key interface{} - if keyFunc == nil { - // keyFunc was not provided. short circuiting validation - return token, NewValidationError("no Keyfunc was provided.", ValidationErrorUnverifiable) - } - if key, err = keyFunc(token); err != nil { - // keyFunc returned an error - if ve, ok := err.(*ValidationError); ok { - return token, ve - } - return token, &ValidationError{Inner: err, Errors: ValidationErrorUnverifiable} - } - - vErr := &ValidationError{} - - // Validate Claims - if !p.SkipClaimsValidation { - if err := token.Claims.Valid(); err != nil { - - // If the Claims Valid returned an error, check if it is a validation error, - // If it was another error type, create a ValidationError with a generic ClaimsInvalid flag set - if e, ok := err.(*ValidationError); !ok { - vErr = &ValidationError{Inner: err, Errors: ValidationErrorClaimsInvalid} - } else { - vErr = e - } - } - } - - // Perform validation - token.Signature = parts[2] - if err = token.Method.Verify(strings.Join(parts[0:2], "."), token.Signature, key); err != nil { - vErr.Inner = err - vErr.Errors |= ValidationErrorSignatureInvalid - } - - if vErr.valid() { - token.Valid = true - return token, nil - } - - return token, vErr -} - -// WARNING: Don't use this method unless you know what you're doing -// -// This method parses the token but doesn't validate the signature. It's only -// ever useful in cases where you know the signature is valid (because it has -// been checked previously in the stack) and you want to extract values from -// it. -func (p *Parser) ParseUnverified(tokenString string, claims Claims) (token *Token, parts []string, err error) { - parts = strings.Split(tokenString, ".") - if len(parts) != 3 { - return nil, parts, NewValidationError("token contains an invalid number of segments", ValidationErrorMalformed) - } - - token = &Token{Raw: tokenString} - - // parse Header - var headerBytes []byte - if headerBytes, err = DecodeSegment(parts[0]); err != nil { - if strings.HasPrefix(strings.ToLower(tokenString), "bearer ") { - return token, parts, NewValidationError("tokenstring should not contain 'bearer '", ValidationErrorMalformed) - } - return token, parts, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} - } - if err = json.Unmarshal(headerBytes, &token.Header); err != nil { - return token, parts, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} - } - - // parse Claims - var claimBytes []byte - token.Claims = claims - - if claimBytes, err = DecodeSegment(parts[1]); err != nil { - return token, parts, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} - } - dec := json.NewDecoder(bytes.NewBuffer(claimBytes)) - if p.UseJSONNumber { - dec.UseNumber() - } - // JSON Decode. Special case for map type to avoid weird pointer behavior - if c, ok := token.Claims.(MapClaims); ok { - err = dec.Decode(&c) - } else { - err = dec.Decode(&claims) - } - // Handle decode error - if err != nil { - return token, parts, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} - } - - // Lookup signature method - if method, ok := token.Header["alg"].(string); ok { - if token.Method = GetSigningMethod(method); token.Method == nil { - return token, parts, NewValidationError("signing method (alg) is unavailable.", ValidationErrorUnverifiable) - } - } else { - return token, parts, NewValidationError("signing method (alg) is unspecified.", ValidationErrorUnverifiable) - } - - return token, parts, nil -} diff --git a/vendor/github.com/form3tech-oss/jwt-go/signing_method.go b/vendor/github.com/form3tech-oss/jwt-go/signing_method.go deleted file mode 100644 index ed1f212b..00000000 --- a/vendor/github.com/form3tech-oss/jwt-go/signing_method.go +++ /dev/null @@ -1,35 +0,0 @@ -package jwt - -import ( - "sync" -) - -var signingMethods = map[string]func() SigningMethod{} -var signingMethodLock = new(sync.RWMutex) - -// Implement SigningMethod to add new methods for signing or verifying tokens. -type SigningMethod interface { - Verify(signingString, signature string, key interface{}) error // Returns nil if signature is valid - Sign(signingString string, key interface{}) (string, error) // Returns encoded signature or error - Alg() string // returns the alg identifier for this method (example: 'HS256') -} - -// Register the "alg" name and a factory function for signing method. -// This is typically done during init() in the method's implementation -func RegisterSigningMethod(alg string, f func() SigningMethod) { - signingMethodLock.Lock() - defer signingMethodLock.Unlock() - - signingMethods[alg] = f -} - -// Get a signing method from an "alg" string -func GetSigningMethod(alg string) (method SigningMethod) { - signingMethodLock.RLock() - defer signingMethodLock.RUnlock() - - if methodF, ok := signingMethods[alg]; ok { - method = methodF() - } - return -} diff --git a/vendor/github.com/form3tech-oss/jwt-go/token.go b/vendor/github.com/form3tech-oss/jwt-go/token.go deleted file mode 100644 index d637e086..00000000 --- a/vendor/github.com/form3tech-oss/jwt-go/token.go +++ /dev/null @@ -1,108 +0,0 @@ -package jwt - -import ( - "encoding/base64" - "encoding/json" - "strings" - "time" -) - -// TimeFunc provides the current time when parsing token to validate "exp" claim (expiration time). -// You can override it to use another time value. This is useful for testing or if your -// server uses a different time zone than your tokens. -var TimeFunc = time.Now - -// Parse methods use this callback function to supply -// the key for verification. The function receives the parsed, -// but unverified Token. This allows you to use properties in the -// Header of the token (such as `kid`) to identify which key to use. -type Keyfunc func(*Token) (interface{}, error) - -// A JWT Token. Different fields will be used depending on whether you're -// creating or parsing/verifying a token. -type Token struct { - Raw string // The raw token. Populated when you Parse a token - Method SigningMethod // The signing method used or to be used - Header map[string]interface{} // The first segment of the token - Claims Claims // The second segment of the token - Signature string // The third segment of the token. Populated when you Parse a token - Valid bool // Is the token valid? Populated when you Parse/Verify a token -} - -// Create a new Token. Takes a signing method -func New(method SigningMethod) *Token { - return NewWithClaims(method, MapClaims{}) -} - -func NewWithClaims(method SigningMethod, claims Claims) *Token { - return &Token{ - Header: map[string]interface{}{ - "typ": "JWT", - "alg": method.Alg(), - }, - Claims: claims, - Method: method, - } -} - -// Get the complete, signed token -func (t *Token) SignedString(key interface{}) (string, error) { - var sig, sstr string - var err error - if sstr, err = t.SigningString(); err != nil { - return "", err - } - if sig, err = t.Method.Sign(sstr, key); err != nil { - return "", err - } - return strings.Join([]string{sstr, sig}, "."), nil -} - -// Generate the signing string. This is the -// most expensive part of the whole deal. Unless you -// need this for something special, just go straight for -// the SignedString. -func (t *Token) SigningString() (string, error) { - var err error - parts := make([]string, 2) - for i, _ := range parts { - var jsonValue []byte - if i == 0 { - if jsonValue, err = json.Marshal(t.Header); err != nil { - return "", err - } - } else { - if jsonValue, err = json.Marshal(t.Claims); err != nil { - return "", err - } - } - - parts[i] = EncodeSegment(jsonValue) - } - return strings.Join(parts, "."), nil -} - -// Parse, validate, and return a token. -// keyFunc will receive the parsed token and should return the key for validating. -// If everything is kosher, err will be nil -func Parse(tokenString string, keyFunc Keyfunc) (*Token, error) { - return new(Parser).Parse(tokenString, keyFunc) -} - -func ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) { - return new(Parser).ParseWithClaims(tokenString, claims, keyFunc) -} - -// Encode JWT specific base64url encoding with padding stripped -func EncodeSegment(seg []byte) string { - return strings.TrimRight(base64.URLEncoding.EncodeToString(seg), "=") -} - -// Decode JWT specific base64url encoding with padding stripped -func DecodeSegment(seg string) ([]byte, error) { - if l := len(seg) % 4; l > 0 { - seg += strings.Repeat("=", 4-l) - } - - return base64.URLEncoding.DecodeString(seg) -} diff --git a/vendor/github.com/gabriel-vasile/mimetype/LICENSE b/vendor/github.com/gabriel-vasile/mimetype/LICENSE index 6aac070c..13b61daa 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/LICENSE +++ b/vendor/github.com/gabriel-vasile/mimetype/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2018-2020 Gabriel Vasile +Copyright (c) 2018 Gabriel Vasile Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/github.com/gabriel-vasile/mimetype/README.md b/vendor/github.com/gabriel-vasile/mimetype/README.md index 231b2919..aa88b4bd 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/README.md +++ b/vendor/github.com/gabriel-vasile/mimetype/README.md @@ -16,9 +16,6 @@ Go report card - - Code coverage - License @@ -84,7 +81,7 @@ To prevent loading entire files into memory, when detecting from a or from a [file](https://pkg.go.dev/github.com/gabriel-vasile/mimetype#DetectFile) **mimetype** limits itself to reading only the header of the input.
- structure + how project is structured
## Performance diff --git a/vendor/github.com/gabriel-vasile/mimetype/internal/json/json.go b/vendor/github.com/gabriel-vasile/mimetype/internal/json/json.go index ee39349a..5b2ecee4 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/internal/json/json.go +++ b/vendor/github.com/gabriel-vasile/mimetype/internal/json/json.go @@ -34,6 +34,7 @@ package json import ( "fmt" + "sync" ) type ( @@ -73,10 +74,31 @@ type ( } ) +var scannerPool = sync.Pool{ + New: func() any { + return &scanner{} + }, +} + +func newScanner() *scanner { + s := scannerPool.Get().(*scanner) + s.reset() + return s +} + +func freeScanner(s *scanner) { + // Avoid hanging on to too much memory in extreme cases. + if len(s.parseState) > 1024 { + s.parseState = nil + } + scannerPool.Put(s) +} + // Scan returns the number of bytes scanned and if there was any error // in trying to reach the end of data. func Scan(data []byte) (int, error) { - s := &scanner{} + s := newScanner() + defer freeScanner(s) _ = checkValid(data, s) return s.index, s.err } @@ -84,7 +106,6 @@ func Scan(data []byte) (int, error) { // checkValid verifies that data is valid JSON-encoded data. // scan is passed in for use by checkValid to avoid an allocation. func checkValid(data []byte, scan *scanner) error { - scan.reset() for _, c := range data { scan.index++ if scan.step(scan, c) == scanError { @@ -105,6 +126,8 @@ func (s *scanner) reset() { s.step = stateBeginValue s.parseState = s.parseState[0:0] s.err = nil + s.endTop = false + s.index = 0 } // eof tells the scanner that the end of input has been reached. diff --git a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/archive.go b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/archive.go index fec11f08..b59042c6 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/archive.go +++ b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/archive.go @@ -74,51 +74,85 @@ func CRX(raw []byte, limit uint32) bool { } // Tar matches a (t)ape (ar)chive file. +// Tar files are divided into 512 bytes records. First record contains a 257 +// bytes header padded with NUL. func Tar(raw []byte, _ uint32) bool { - // The "magic" header field for files in in UStar (POSIX IEEE P1003.1) archives - // has the prefix "ustar". The values of the remaining bytes in this field vary - // by archiver implementation. - if len(raw) >= 512 && bytes.HasPrefix(raw[257:], []byte{0x75, 0x73, 0x74, 0x61, 0x72}) { - return true + const sizeRecord = 512 + + // The structure of a tar header: + // type TarHeader struct { + // Name [100]byte + // Mode [8]byte + // Uid [8]byte + // Gid [8]byte + // Size [12]byte + // Mtime [12]byte + // Chksum [8]byte + // Linkflag byte + // Linkname [100]byte + // Magic [8]byte + // Uname [32]byte + // Gname [32]byte + // Devmajor [8]byte + // Devminor [8]byte + // } + + if len(raw) < sizeRecord { + return false } + raw = raw[:sizeRecord] - if len(raw) < 256 { + // First 100 bytes of the header represent the file name. + // Check if file looks like Gentoo GLEP binary package. + if bytes.Contains(raw[:100], []byte("/gpkg-1\x00")) { return false } - // The older v7 format has no "magic" field, and therefore must be identified - // with heuristics based on legal ranges of values for other header fields: - // https://www.nationalarchives.gov.uk/PRONOM/Format/proFormatSearch.aspx?status=detailReport&id=385&strPageToDisplay=signatures - rules := []struct { - min, max uint8 - i int - }{ - {0x21, 0xEF, 0}, - {0x30, 0x37, 105}, - {0x20, 0x37, 106}, - {0x00, 0x00, 107}, - {0x30, 0x37, 113}, - {0x20, 0x37, 114}, - {0x00, 0x00, 115}, - {0x30, 0x37, 121}, - {0x20, 0x37, 122}, - {0x00, 0x00, 123}, - {0x30, 0x37, 134}, - {0x30, 0x37, 146}, - {0x30, 0x37, 153}, - {0x00, 0x37, 154}, + // Get the checksum recorded into the file. + recsum := tarParseOctal(raw[148:156]) + if recsum == -1 { + return false } - for _, r := range rules { - if raw[r.i] < r.min || raw[r.i] > r.max { - return false + sum1, sum2 := tarChksum(raw) + return recsum == sum1 || recsum == sum2 +} + +// tarParseOctal converts octal string to decimal int. +func tarParseOctal(b []byte) int64 { + // Because unused fields are filled with NULs, we need to skip leading NULs. + // Fields may also be padded with spaces or NULs. + // So we remove leading and trailing NULs and spaces to be sure. + b = bytes.Trim(b, " \x00") + + if len(b) == 0 { + return -1 + } + ret := int64(0) + for _, b := range b { + if b == 0 { + break + } + if !(b >= '0' && b <= '7') { + return -1 } + ret = (ret << 3) | int64(b-'0') } + return ret +} - for _, i := range []uint8{135, 147, 155} { - if raw[i] != 0x00 && raw[i] != 0x20 { - return false +// tarChksum computes the checksum for the header block b. +// The actual checksum is written to same b block after it has been calculated. +// Before calculation the bytes from b reserved for checksum have placeholder +// value of ASCII space 0x20. +// POSIX specifies a sum of the unsigned byte values, but the Sun tar used +// signed byte values. We compute and return both. +func tarChksum(b []byte) (unsigned, signed int64) { + for i, c := range b { + if 148 <= i && i < 156 { + c = ' ' // Treat the checksum field itself as all spaces. } + unsigned += int64(c) + signed += int64(int8(c)) } - - return true + return unsigned, signed } diff --git a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/binary.go b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/binary.go index f1e94498..76973201 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/binary.go +++ b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/binary.go @@ -21,6 +21,10 @@ var ( SWF = prefix([]byte("CWS"), []byte("FWS"), []byte("ZWS")) // Torrent has bencoded text in the beginning. Torrent = prefix([]byte("d8:announce")) + // PAR1 matches a parquet file. + Par1 = prefix([]byte{0x50, 0x41, 0x52, 0x31}) + // CBOR matches a Concise Binary Object Representation https://cbor.io/ + CBOR = prefix([]byte{0xD9, 0xD9, 0xF7}) ) // Java bytecode and Mach-O binaries share the same magic number. @@ -32,7 +36,7 @@ func classOrMachOFat(in []byte) bool { return false } - return bytes.HasPrefix(in, []byte{0xCA, 0xFE, 0xBA, 0xBE}) + return binary.BigEndian.Uint32(in) == macho.MagicFat } // Class matches a java class file. @@ -42,7 +46,7 @@ func Class(raw []byte, limit uint32) bool { // MachO matches Mach-O binaries format. func MachO(raw []byte, limit uint32) bool { - if classOrMachOFat(raw) && raw[7] < 20 { + if classOrMachOFat(raw) && raw[7] < 0x14 { return true } @@ -154,11 +158,11 @@ func Marc(raw []byte, limit uint32) bool { // the GL transmission Format (glTF). // GLB uses little endian and its header structure is as follows: // -// <-- 12-byte header --> -// | magic | version | length | -// | (uint32) | (uint32) | (uint32) | -// | \x67\x6C\x54\x46 | \x01\x00\x00\x00 | ... | -// | g l T F | 1 | ... | +// <-- 12-byte header --> +// | magic | version | length | +// | (uint32) | (uint32) | (uint32) | +// | \x67\x6C\x54\x46 | \x01\x00\x00\x00 | ... | +// | g l T F | 1 | ... | // // Visit [glTF specification] and [IANA glTF entry] for more details. // @@ -170,14 +174,15 @@ var Glb = prefix([]byte("\x67\x6C\x54\x46\x02\x00\x00\x00"), // TzIf matches a Time Zone Information Format (TZif) file. // See more: https://tools.ietf.org/id/draft-murchison-tzdist-tzif-00.html#rfc.section.3 // Its header structure is shown below: -// +---------------+---+ -// | magic (4) | <-+-- version (1) -// +---------------+---+---------------------------------------+ -// | [unused - reserved for future use] (15) | -// +---------------+---------------+---------------+-----------+ -// | isutccnt (4) | isstdcnt (4) | leapcnt (4) | -// +---------------+---------------+---------------+ -// | timecnt (4) | typecnt (4) | charcnt (4) | +// +// +---------------+---+ +// | magic (4) | <-+-- version (1) +// +---------------+---+---------------------------------------+ +// | [unused - reserved for future use] (15) | +// +---------------+---------------+---------------+-----------+ +// | isutccnt (4) | isstdcnt (4) | leapcnt (4) | +// +---------------+---------------+---------------+ +// | timecnt (4) | typecnt (4) | charcnt (4) | func TzIf(raw []byte, limit uint32) bool { // File is at least 44 bytes (header size). if len(raw) < 44 { diff --git a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/ftyp.go b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/ftyp.go index 6575b4ae..ac727139 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/ftyp.go +++ b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/ftyp.go @@ -1,22 +1,14 @@ package magic -import "bytes" +import ( + "bytes" +) var ( // AVIF matches an AV1 Image File Format still or animated. // Wikipedia page seems outdated listing image/avif-sequence for animations. // https://github.com/AOMediaCodec/av1-avif/issues/59 AVIF = ftyp([]byte("avif"), []byte("avis")) - // Mp4 matches an MP4 file. - Mp4 = ftyp( - []byte("avc1"), []byte("dash"), []byte("iso2"), []byte("iso3"), - []byte("iso4"), []byte("iso5"), []byte("iso6"), []byte("isom"), - []byte("mmp4"), []byte("mp41"), []byte("mp42"), []byte("mp4v"), - []byte("mp71"), []byte("MSNV"), []byte("NDAS"), []byte("NDSC"), - []byte("NSDC"), []byte("NSDH"), []byte("NDSM"), []byte("NDSP"), - []byte("NDSS"), []byte("NDXC"), []byte("NDXH"), []byte("NDXM"), - []byte("NDXP"), []byte("NDXS"), []byte("F4V "), []byte("F4P "), - ) // ThreeGP matches a 3GPP file. ThreeGP = ftyp( []byte("3gp1"), []byte("3gp2"), []byte("3gp3"), []byte("3gp4"), @@ -53,6 +45,17 @@ var ( Heif = ftyp([]byte("mif1"), []byte("heim"), []byte("heis"), []byte("avic")) // HeifSequence matches a High Efficiency Image File Format (HEIF) file sequence. HeifSequence = ftyp([]byte("msf1"), []byte("hevm"), []byte("hevs"), []byte("avcs")) + // Mj2 matches a Motion JPEG 2000 file: https://en.wikipedia.org/wiki/Motion_JPEG_2000. + Mj2 = ftyp([]byte("mj2s"), []byte("mjp2"), []byte("MFSM"), []byte("MGSV")) + // Dvb matches a Digital Video Broadcasting file: https://dvb.org. + // https://cconcolato.github.io/mp4ra/filetype.html + // https://github.com/file/file/blob/512840337ead1076519332d24fefcaa8fac36e06/magic/Magdir/animation#L135-L154 + Dvb = ftyp( + []byte("dby1"), []byte("dsms"), []byte("dts1"), []byte("dts2"), + []byte("dts3"), []byte("dxo "), []byte("dmb1"), []byte("dmpf"), + []byte("drc1"), []byte("dv1a"), []byte("dv1b"), []byte("dv2a"), + []byte("dv2b"), []byte("dv3a"), []byte("dv3b"), []byte("dvr1"), + []byte("dvt1"), []byte("emsg")) // TODO: add support for remaining video formats at ftyps.com. ) @@ -86,3 +89,21 @@ func QuickTime(raw []byte, _ uint32) bool { } return bytes.Equal(raw[:8], []byte("\x00\x00\x00\x08wide")) } + +// Mp4 detects an .mp4 file. Mp4 detections only does a basic ftyp check. +// Mp4 has many registered and unregistered code points so it's hard to keep track +// of all. Detection will default on video/mp4 for all ftyp files. +// ISO_IEC_14496-12 is the specification for the iso container. +func Mp4(raw []byte, _ uint32) bool { + if len(raw) < 12 { + return false + } + // ftyps are made out of boxes. The first 4 bytes of the box represent + // its size in big-endian uint32. First box is the ftyp box and it is small + // in size. Check most significant byte is 0 to filter out false positive + // text files that happen to contain the string "ftyp" at index 4. + if raw[0] != 0 { + return false + } + return bytes.Equal(raw[4:8], []byte("ftyp")) +} diff --git a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/magic.go b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/magic.go index 34b84f40..a34c6098 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/magic.go +++ b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/magic.go @@ -154,7 +154,7 @@ func ftyp(sigs ...[]byte) Detector { return false } for _, s := range sigs { - if bytes.Equal(raw[4:12], append([]byte("ftyp"), s...)) { + if bytes.Equal(raw[8:12], s) { return true } } @@ -239,3 +239,13 @@ func min(a, b int) int { } return b } + +type readBuf []byte + +func (b *readBuf) advance(n int) bool { + if n < 0 || len(*b) < n { + return false + } + *b = (*b)[n:] + return true +} diff --git a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/ms_office.go b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/ms_office.go index 5964ce59..7d60e22e 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/ms_office.go +++ b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/ms_office.go @@ -5,58 +5,19 @@ import ( "encoding/binary" ) -var ( - xlsxSigFiles = []string{ - "xl/worksheets/", - "xl/drawings/", - "xl/theme/", - "xl/_rels/", - "xl/styles.xml", - "xl/workbook.xml", - "xl/sharedStrings.xml", - } - docxSigFiles = []string{ - "word/media/", - "word/_rels/document.xml.rels", - "word/document.xml", - "word/styles.xml", - "word/fontTable.xml", - "word/settings.xml", - "word/numbering.xml", - "word/header", - "word/footer", - } - pptxSigFiles = []string{ - "ppt/slides/", - "ppt/media/", - "ppt/slideLayouts/", - "ppt/theme/", - "ppt/slideMasters/", - "ppt/tags/", - "ppt/notesMasters/", - "ppt/_rels/", - "ppt/handoutMasters/", - "ppt/notesSlides/", - "ppt/presentation.xml", - "ppt/tableStyles.xml", - "ppt/presProps.xml", - "ppt/viewProps.xml", - } -) - // Xlsx matches a Microsoft Excel 2007 file. func Xlsx(raw []byte, limit uint32) bool { - return zipContains(raw, xlsxSigFiles...) + return zipContains(raw, []byte("xl/"), true) } // Docx matches a Microsoft Word 2007 file. func Docx(raw []byte, limit uint32) bool { - return zipContains(raw, docxSigFiles...) + return zipContains(raw, []byte("word/"), true) } // Pptx matches a Microsoft PowerPoint 2007 file. func Pptx(raw []byte, limit uint32) bool { - return zipContains(raw, pptxSigFiles...) + return zipContains(raw, []byte("ppt/"), true) } // Ole matches an Open Linking and Embedding file. diff --git a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/text.go b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/text.go index e2a03caf..cf644639 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/text.go +++ b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/text.go @@ -1,7 +1,6 @@ package magic import ( - "bufio" "bytes" "strings" "time" @@ -121,7 +120,7 @@ var ( []byte("/usr/bin/env wish"), ) // Rtf matches a Rich Text Format file. - Rtf = prefix([]byte("{\\rtf1")) + Rtf = prefix([]byte("{\\rtf")) ) // Text matches a plain text file. @@ -234,9 +233,10 @@ func GeoJSON(raw []byte, limit uint32) bool { // types. func NdJSON(raw []byte, limit uint32) bool { lCount, hasObjOrArr := 0, false - sc := bufio.NewScanner(dropLastLine(raw, limit)) - for sc.Scan() { - l := sc.Bytes() + raw = dropLastLine(raw, limit) + var l []byte + for len(raw) != 0 { + l, raw = scanLine(raw) // Empty lines are allowed in NDJSON. if l = trimRWS(trimLWS(l)); len(l) == 0 { continue @@ -301,20 +301,15 @@ func Svg(raw []byte, limit uint32) bool { } // Srt matches a SubRip file. -func Srt(in []byte, _ uint32) bool { - s := bufio.NewScanner(bytes.NewReader(in)) - if !s.Scan() { - return false - } - // First line must be 1. - if s.Text() != "1" { - return false - } +func Srt(raw []byte, _ uint32) bool { + line, raw := scanLine(raw) - if !s.Scan() { + // First line must be 1. + if string(line) != "1" { return false } - secondLine := s.Text() + line, raw = scanLine(raw) + secondLine := string(line) // Timestamp format (e.g: 00:02:16,612 --> 00:02:19,376) limits secondLine // length to exactly 29 characters. if len(secondLine) != 29 { @@ -325,14 +320,12 @@ func Srt(in []byte, _ uint32) bool { if strings.Contains(secondLine, ".") { return false } - // For Go <1.17, comma is not recognised as a decimal separator by `time.Parse`. - secondLine = strings.ReplaceAll(secondLine, ",", ".") // Second line must be a time range. ts := strings.Split(secondLine, " --> ") if len(ts) != 2 { return false } - const layout = "15:04:05.000" + const layout = "15:04:05,000" t0, err := time.Parse(layout, ts[0]) if err != nil { return false @@ -345,8 +338,9 @@ func Srt(in []byte, _ uint32) bool { return false } + line, _ = scanLine(raw) // A third line must exist and not be empty. This is the actual subtitle text. - return s.Scan() && len(s.Bytes()) != 0 + return len(line) != 0 } // Vtt matches a Web Video Text Tracks (WebVTT) file. See @@ -373,3 +367,15 @@ func Vtt(raw []byte, limit uint32) bool { return bytes.Equal(raw, []byte{0xEF, 0xBB, 0xBF, 0x57, 0x45, 0x42, 0x56, 0x54, 0x54}) || // UTF-8 BOM and "WEBVTT" bytes.Equal(raw, []byte{0x57, 0x45, 0x42, 0x56, 0x54, 0x54}) // "WEBVTT" } + +// dropCR drops a terminal \r from the data. +func dropCR(data []byte) []byte { + if len(data) > 0 && data[len(data)-1] == '\r' { + return data[0 : len(data)-1] + } + return data +} +func scanLine(b []byte) (line, remainder []byte) { + line, remainder, _ = bytes.Cut(b, []byte("\n")) + return dropCR(line), remainder +} diff --git a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/text_csv.go b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/text_csv.go index 84ed6492..6083ba8c 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/text_csv.go +++ b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/text_csv.go @@ -1,12 +1,28 @@ package magic import ( + "bufio" "bytes" "encoding/csv" "errors" "io" + "sync" ) +// A bufio.Reader pool to alleviate problems with memory allocations. +var readerPool = sync.Pool{ + New: func() any { + // Initiate with empty source reader. + return bufio.NewReader(nil) + }, +} + +func newReader(r io.Reader) *bufio.Reader { + br := readerPool.Get().(*bufio.Reader) + br.Reset(r) + return br +} + // Csv matches a comma-separated values file. func Csv(raw []byte, limit uint32) bool { return sv(raw, ',', limit) @@ -18,7 +34,11 @@ func Tsv(raw []byte, limit uint32) bool { } func sv(in []byte, comma rune, limit uint32) bool { - r := csv.NewReader(dropLastLine(in, limit)) + in = dropLastLine(in, limit) + + br := newReader(bytes.NewReader(in)) + defer readerPool.Put(br) + r := csv.NewReader(br) r.Comma = comma r.ReuseRecord = true r.LazyQuotes = true @@ -44,20 +64,14 @@ func sv(in []byte, comma rune, limit uint32) bool { // mimetype limits itself to ReadLimit bytes when performing a detection. // This means, for file formats like CSV for NDJSON, the last line of the input // can be an incomplete line. -func dropLastLine(b []byte, cutAt uint32) io.Reader { - if cutAt == 0 { - return bytes.NewReader(b) +func dropLastLine(b []byte, readLimit uint32) []byte { + if readLimit == 0 || uint32(len(b)) < readLimit { + return b } - if uint32(len(b)) >= cutAt { - for i := cutAt - 1; i > 0; i-- { - if b[i] == '\n' { - return bytes.NewReader(b[:i]) - } + for i := len(b) - 1; i > 0; i-- { + if b[i] == '\n' { + return b[:i] } - - // No newline was found between the 0 index and cutAt. - return bytes.NewReader(b[:cutAt]) } - - return bytes.NewReader(b) + return b } diff --git a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/zip.go b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/zip.go index dabee947..f866113f 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/zip.go +++ b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/zip.go @@ -3,7 +3,6 @@ package magic import ( "bytes" "encoding/binary" - "strings" ) var ( @@ -43,50 +42,71 @@ func Zip(raw []byte, limit uint32) bool { // Jar matches a Java archive file. func Jar(raw []byte, limit uint32) bool { - return zipContains(raw, "META-INF/MANIFEST.MF") + return zipContains(raw, []byte("META-INF/MANIFEST.MF"), false) } -// zipTokenizer holds the source zip file and scanned index. -type zipTokenizer struct { - in []byte - i int // current index -} +func zipContains(raw, sig []byte, msoCheck bool) bool { + b := readBuf(raw) + pk := []byte("PK\003\004") + if len(b) < 0x1E { + return false + } -// next returns the next file name from the zip headers. -// https://web.archive.org/web/20191129114319/https://users.cs.jmu.edu/buchhofp/forensics/formats/pkzip.html -func (t *zipTokenizer) next() (fileName string) { - if t.i > len(t.in) { - return + if !b.advance(0x1E) { + return false } - in := t.in[t.i:] - // pkSig is the signature of the zip local file header. - pkSig := []byte("PK\003\004") - pkIndex := bytes.Index(in, pkSig) - // 30 is the offset of the file name in the header. - fNameOffset := pkIndex + 30 - // end if signature not found or file name offset outside of file. - if pkIndex == -1 || fNameOffset > len(in) { - return + if bytes.HasPrefix(b, sig) { + return true } - fNameLen := int(binary.LittleEndian.Uint16(in[pkIndex+26 : pkIndex+28])) - if fNameLen <= 0 || fNameOffset+fNameLen > len(in) { - return - } - t.i += fNameOffset + fNameLen - return string(in[fNameOffset : fNameOffset+fNameLen]) -} + if msoCheck { + skipFiles := [][]byte{ + []byte("[Content_Types].xml"), + []byte("_rels/.rels"), + []byte("docProps"), + []byte("customXml"), + []byte("[trash]"), + } -// zipContains returns true if the zip file headers from in contain any of the paths. -func zipContains(in []byte, paths ...string) bool { - t := zipTokenizer{in: in} - for i, tok := 0, t.next(); tok != ""; i, tok = i+1, t.next() { - for p := range paths { - if strings.HasPrefix(tok, paths[p]) { - return true + hasSkipFile := false + for _, sf := range skipFiles { + if bytes.HasPrefix(b, sf) { + hasSkipFile = true + break } } + if !hasSkipFile { + return false + } + } + + searchOffset := binary.LittleEndian.Uint32(raw[18:]) + 49 + if !b.advance(int(searchOffset)) { + return false } + nextHeader := bytes.Index(raw[searchOffset:], pk) + if !b.advance(nextHeader) { + return false + } + if bytes.HasPrefix(b, sig) { + return true + } + + for i := 0; i < 4; i++ { + if !b.advance(0x1A) { + return false + } + nextHeader = bytes.Index(b, pk) + if nextHeader == -1 { + return false + } + if !b.advance(nextHeader + 0x1E) { + return false + } + if bytes.HasPrefix(b, sig) { + return true + } + } return false } diff --git a/vendor/github.com/gabriel-vasile/mimetype/mimetype.gif b/vendor/github.com/gabriel-vasile/mimetype/mimetype.gif deleted file mode 100644 index c3e80876..00000000 Binary files a/vendor/github.com/gabriel-vasile/mimetype/mimetype.gif and /dev/null differ diff --git a/vendor/github.com/gabriel-vasile/mimetype/mimetype.go b/vendor/github.com/gabriel-vasile/mimetype/mimetype.go index 1b5909b7..d8d512b8 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/mimetype.go +++ b/vendor/github.com/gabriel-vasile/mimetype/mimetype.go @@ -7,14 +7,15 @@ package mimetype import ( "io" - "io/ioutil" "mime" "os" "sync/atomic" ) +var defaultLimit uint32 = 3072 + // readLimit is the maximum number of bytes from the input used when detecting. -var readLimit uint32 = 3072 +var readLimit uint32 = defaultLimit // Detect returns the MIME type found from the provided byte slice. // @@ -48,7 +49,7 @@ func DetectReader(r io.Reader) (*MIME, error) { // Using atomic because readLimit can be written at the same time in other goroutine. l := atomic.LoadUint32(&readLimit) if l == 0 { - in, err = ioutil.ReadAll(r) + in, err = io.ReadAll(r) if err != nil { return errMIME, err } @@ -103,6 +104,7 @@ func EqualsAny(s string, mimes ...string) bool { // SetLimit sets the maximum number of bytes read from input when detecting the MIME type. // Increasing the limit provides better detection for file formats which store // their magical numbers towards the end of the file: docx, pptx, xlsx, etc. +// During detection data is read in a single block of size limit, i.e. it is not buffered. // A limit of 0 means the whole input file will be used. func SetLimit(limit uint32) { // Using atomic because readLimit can be read at the same time in other goroutine. diff --git a/vendor/github.com/gabriel-vasile/mimetype/supported_mimes.md b/vendor/github.com/gabriel-vasile/mimetype/supported_mimes.md index 5ec6f6b6..a45a3021 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/supported_mimes.md +++ b/vendor/github.com/gabriel-vasile/mimetype/supported_mimes.md @@ -1,4 +1,4 @@ -## 173 Supported MIME types +## 177 Supported MIME types This file is automatically generated when running tests. Do not edit manually. Extension | MIME type | Aliases @@ -75,21 +75,28 @@ Extension | MIME type | Aliases **.au** | audio/basic | - **.mpeg** | video/mpeg | - **.mov** | video/quicktime | - -**.mqv** | video/quicktime | - **.mp4** | video/mp4 | - -**.webm** | video/webm | audio/webm +**.avif** | image/avif | - **.3gp** | video/3gpp | video/3gp, audio/3gpp **.3g2** | video/3gpp2 | video/3g2, audio/3gpp2 +**.mp4** | audio/mp4 | audio/x-mp4a +**.mqv** | video/quicktime | - +**.m4a** | audio/x-m4a | - +**.m4v** | video/x-m4v | - +**.heic** | image/heic | - +**.heic** | image/heic-sequence | - +**.heif** | image/heif | - +**.heif** | image/heif-sequence | - +**.mj2** | video/mj2 | - +**.dvb** | video/vnd.dvb.file | - +**.webm** | video/webm | audio/webm **.avi** | video/x-msvideo | video/avi, video/msvideo **.flv** | video/x-flv | - **.mkv** | video/x-matroska | - **.asf** | video/x-ms-asf | video/asf, video/x-ms-wmv **.aac** | audio/aac | - **.voc** | audio/x-unknown | - -**.mp4** | audio/mp4 | audio/x-m4a, audio/x-mp4a -**.m4a** | audio/x-m4a | - **.m3u** | application/vnd.apple.mpegurl | audio/mpegurl -**.m4v** | video/x-m4v | - **.rmvb** | application/vnd.rn-realmedia-vbr | - **.gz** | application/gzip | application/x-gzip, application/x-gunzip, application/gzipped, application/gzip-compressed, application/x-gzip-compressed, gzip/document **.class** | application/x-java-applet | - @@ -111,6 +118,7 @@ Extension | MIME type | Aliases **.mobi** | application/x-mobipocket-ebook | - **.lit** | application/x-ms-reader | - **.bpg** | image/bpg | - +**.cbor** | application/cbor | - **.sqlite** | application/vnd.sqlite3 | application/x-sqlite3 **.dwg** | image/vnd.dwg | image/x-dwg, application/acad, application/x-acad, application/autocad_dwg, application/dwg, application/x-dwg, application/x-autocad, drawing/dwg **.nes** | application/vnd.nintendo.snes.rom | - @@ -118,10 +126,6 @@ Extension | MIME type | Aliases **.macho** | application/x-mach-binary | - **.qcp** | audio/qcelp | - **.icns** | image/x-icns | - -**.heic** | image/heic | - -**.heic** | image/heic-sequence | - -**.heif** | image/heif | - -**.heif** | image/heif-sequence | - **.hdr** | image/vnd.radiance | - **.mrc** | application/marc | - **.mdb** | application/x-msaccess | - @@ -138,13 +142,13 @@ Extension | MIME type | Aliases **.pat** | image/x-gimp-pat | - **.gbr** | image/x-gimp-gbr | - **.glb** | model/gltf-binary | - -**.avif** | image/avif | - **.cab** | application/x-installshield | - **.jxr** | image/jxr | image/vnd.ms-photo +**.parquet** | application/vnd.apache.parquet | application/x-parquet **.txt** | text/plain | - **.html** | text/html | - **.svg** | image/svg+xml | - -**.xml** | text/xml | - +**.xml** | text/xml | application/xml **.rss** | application/rss+xml | text/rss **.atom** | application/atom+xml | - **.x3d** | model/x3d+xml | - @@ -159,7 +163,7 @@ Extension | MIME type | Aliases **.xfdf** | application/vnd.adobe.xfdf | - **.owl** | application/owl+xml | - **.php** | text/x-php | - -**.js** | application/javascript | application/x-javascript, text/javascript +**.js** | text/javascript | application/x-javascript, application/javascript **.lua** | text/x-lua | - **.pl** | text/x-perl | - **.py** | text/x-python | text/x-script.python, application/x-python @@ -167,7 +171,7 @@ Extension | MIME type | Aliases **.geojson** | application/geo+json | - **.har** | application/json | - **.ndjson** | application/x-ndjson | - -**.rtf** | text/rtf | - +**.rtf** | text/rtf | application/rtf **.srt** | application/x-subrip | application/x-srt, text/x-srt **.tcl** | text/x-tcl | application/x-tcl **.csv** | text/csv | - diff --git a/vendor/github.com/gabriel-vasile/mimetype/tree.go b/vendor/github.com/gabriel-vasile/mimetype/tree.go index 253bd006..771e302b 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/tree.go +++ b/vendor/github.com/gabriel-vasile/mimetype/tree.go @@ -18,14 +18,13 @@ import ( var root = newMIME("application/octet-stream", "", func([]byte, uint32) bool { return true }, xpm, sevenZ, zip, pdf, fdf, ole, ps, psd, p7s, ogg, png, jpg, jxl, jp2, jpx, - jpm, jxs, gif, webp, exe, elf, ar, tar, xar, bz2, fits, tiff, bmp, ico, mp3, flac, - midi, ape, musePack, amr, wav, aiff, au, mpeg, quickTime, mqv, mp4, webM, - threeGP, threeG2, avi, flv, mkv, asf, aac, voc, aMp4, m4a, m3u, m4v, rmvb, - gzip, class, swf, crx, ttf, woff, woff2, otf, ttc, eot, wasm, shx, dbf, dcm, rar, - djvu, mobi, lit, bpg, sqlite3, dwg, nes, lnk, macho, qcp, icns, heic, - heicSeq, heif, heifSeq, hdr, mrc, mdb, accdb, zstd, cab, rpm, xz, lzip, - torrent, cpio, tzif, xcf, pat, gbr, glb, avif, cabIS, jxr, - // Keep text last because it is the slowest check + jpm, jxs, gif, webp, exe, elf, ar, tar, xar, bz2, fits, tiff, bmp, ico, mp3, + flac, midi, ape, musePack, amr, wav, aiff, au, mpeg, quickTime, mp4, webM, + avi, flv, mkv, asf, aac, voc, m3u, rmvb, gzip, class, swf, crx, ttf, woff, + woff2, otf, ttc, eot, wasm, shx, dbf, dcm, rar, djvu, mobi, lit, bpg, cbor, + sqlite3, dwg, nes, lnk, macho, qcp, icns, hdr, mrc, mdb, accdb, zstd, cab, + rpm, xz, lzip, torrent, cpio, tzif, xcf, pat, gbr, glb, cabIS, jxr, parquet, + // Keep text last because it is the slowest check. text, ) @@ -77,18 +76,19 @@ var ( oggAudio = newMIME("audio/ogg", ".oga", magic.OggAudio) oggVideo = newMIME("video/ogg", ".ogv", magic.OggVideo) text = newMIME("text/plain", ".txt", magic.Text, html, svg, xml, php, js, lua, perl, python, json, ndJSON, rtf, srt, tcl, csv, tsv, vCard, iCalendar, warc, vtt) - xml = newMIME("text/xml", ".xml", magic.XML, rss, atom, x3d, kml, xliff, collada, gml, gpx, tcx, amf, threemf, xfdf, owl2) - json = newMIME("application/json", ".json", magic.JSON, geoJSON, har) - har = newMIME("application/json", ".har", magic.HAR) - csv = newMIME("text/csv", ".csv", magic.Csv) - tsv = newMIME("text/tab-separated-values", ".tsv", magic.Tsv) - geoJSON = newMIME("application/geo+json", ".geojson", magic.GeoJSON) - ndJSON = newMIME("application/x-ndjson", ".ndjson", magic.NdJSON) - html = newMIME("text/html", ".html", magic.HTML) - php = newMIME("text/x-php", ".php", magic.Php) - rtf = newMIME("text/rtf", ".rtf", magic.Rtf) - js = newMIME("application/javascript", ".js", magic.Js). - alias("application/x-javascript", "text/javascript") + xml = newMIME("text/xml", ".xml", magic.XML, rss, atom, x3d, kml, xliff, collada, gml, gpx, tcx, amf, threemf, xfdf, owl2). + alias("application/xml") + json = newMIME("application/json", ".json", magic.JSON, geoJSON, har) + har = newMIME("application/json", ".har", magic.HAR) + csv = newMIME("text/csv", ".csv", magic.Csv) + tsv = newMIME("text/tab-separated-values", ".tsv", magic.Tsv) + geoJSON = newMIME("application/geo+json", ".geojson", magic.GeoJSON) + ndJSON = newMIME("application/x-ndjson", ".ndjson", magic.NdJSON) + html = newMIME("text/html", ".html", magic.HTML) + php = newMIME("text/x-php", ".php", magic.Php) + rtf = newMIME("text/rtf", ".rtf", magic.Rtf).alias("application/rtf") + js = newMIME("text/javascript", ".js", magic.Js). + alias("application/x-javascript", "application/javascript") srt = newMIME("application/x-subrip", ".srt", magic.Srt). alias("application/x-srt", "text/x-srt") vtt = newMIME("text/vtt", ".vtt", magic.Vtt) @@ -156,12 +156,14 @@ var ( aac = newMIME("audio/aac", ".aac", magic.AAC) voc = newMIME("audio/x-unknown", ".voc", magic.Voc) aMp4 = newMIME("audio/mp4", ".mp4", magic.AMp4). - alias("audio/x-m4a", "audio/x-mp4a") + alias("audio/x-mp4a") m4a = newMIME("audio/x-m4a", ".m4a", magic.M4a) m3u = newMIME("application/vnd.apple.mpegurl", ".m3u", magic.M3u). alias("audio/mpegurl") m4v = newMIME("video/x-m4v", ".m4v", magic.M4v) - mp4 = newMIME("video/mp4", ".mp4", magic.Mp4) + mj2 = newMIME("video/mj2", ".mj2", magic.Mj2) + dvb = newMIME("video/vnd.dvb.file", ".dvb", magic.Dvb) + mp4 = newMIME("video/mp4", ".mp4", magic.Mp4, avif, threeGP, threeG2, aMp4, mqv, m4a, m4v, heic, heicSeq, heif, heifSeq, mj2, dvb) webM = newMIME("video/webm", ".webm", magic.WebM). alias("audio/webm") mpeg = newMIME("video/mpeg", ".mpeg", magic.Mpeg) @@ -257,4 +259,7 @@ var ( xfdf = newMIME("application/vnd.adobe.xfdf", ".xfdf", magic.Xfdf) glb = newMIME("model/gltf-binary", ".glb", magic.Glb) jxr = newMIME("image/jxr", ".jxr", magic.Jxr).alias("image/vnd.ms-photo") + parquet = newMIME("application/vnd.apache.parquet", ".parquet", magic.Par1). + alias("application/x-parquet") + cbor = newMIME("application/cbor", ".cbor", magic.CBOR) ) diff --git a/vendor/github.com/go-faster/city/_testdata/ch128.csv b/vendor/github.com/go-faster/city/_testdata/ch128.csv deleted file mode 100644 index 3592b5bb..00000000 --- a/vendor/github.com/go-faster/city/_testdata/ch128.csv +++ /dev/null @@ -1,1000 +0,0 @@ -PN2qmWqBlQ9wQj99nsQzldVI5ZuGXbEWRK5RhRXdCdG5nG5azdNMK66MuCV6GXi5xr84P2R391UXaLHbavJvFZGfO47XWS2qVOw5lxuBEBNue7b9PZS0hoI6pgabi9UOuSpM2Tlh01vOzwvSikHFswuzleht6xGbotuQQgmO6GkdAqwedXNRRadbLMZROaAfZDAWhxgqRqcM1fdhRxRZYw3GFhPr6BInZITSBQOgwxhHxrhytFUloiivhOmebpblnTipx7wXZAqJZR5Y4M9k8AIyGE9CpuXkn1XvnFttynI1MguokYDeWl5noesnB4mh19PM6Dph2Nh722AggBfUKJEdmm09Z1uFII2PNfTdMjJFB59lvpzORCPO4yy5dZ4yR2nIGRwH4cYCroORc958dBikjYDvOcFEzUEcMGNuUgtShrdNIwenrKHe3wXIoqLf5wyihrXUKPqBV6CnbV3qbB580J4Frwx5ufHb1WO8AK6OoG9srCTR2TPgNtjKi6dr2pLqJrfl5g8wfQJLpdUysdbsItlPgtJdFWAT0TZ8CS6LSudyKLegw2lpp0wnUeHkbOkq49TiNXwEkRtFwXosRt1ppttVm7hh1yBOrKj4wdwQfPWJYBjHJC4tiABnProph7hr28r0r3br9a5Faq0jWkt6JVcJZhmnvkMetnUTTTKwXLWVIgLxA7VSuh4aMiLlABuNbP2eJ2iVhtZBNao7LlKeBJje5Ul0fVQ9Uy7yswksDRtj0DS51lu6AcNnLIwJmDzYC5OpkOMawQSo9ZHPHpXN6AZXvJMHdbQy9ekd,fbfb933e3e1e572b,67715470bb29988b -XorDIofsU6kEqmWwhLoXHK49iRJt7rtRMwDyKeh2WG4QnhYakXELplAzACK0vfcydE54ZUcRV55ktDtEzrpWXRwslVYACxUPGhAkSlBMlQVdA6S4Af4Re76Rw2Go6EHKPSFLEj6u5IYXtPVKbzFdcEsqrwmJ1sFQLN4lgLnhbzcKd7uucE9jrWsRw3y5L05DIIWDsCMUU5LZeKHNbYXy6FQacon9yrSOjc0426A0ETHn7pu7Hw4yud2WLqldBMkvhlilT6fCgW8ESjZiwjnc7wCmHC816mZmDX1w0qhjZC90e6s83M9mx1urN3GjSranp1VPNwEsQLfi6jyYwsVaGQhWSBWPa3EgY2cqBOI9aB3YH5VqvfBbrIIUycgHlGtPSuxREndEsBEvBHpkWTiHE5VK3ufzBTxhYf7WbnkmjOG3DU7SNggeujYfyjLNlekIRjM8124C3lxUmI90FyiHZC2aRnkHsnCA1fkE49pDdaZGtFLF0AIB9fUO8icEzhp593RvAQLhUfM9kvehSraUFdayHgyLxVOOUsTGJAhTsI6S6lvG8T1EIVYLDINDDvt8k2k9eLtOkz8uRAmyUv6jrUacHfxAZitw2E6hBDuhCJxnax6RRq1vKRpHo8YTnUIFxDfX,5cf6f209a66e0730,7473903e51a4f -TSDGQtM27SmjL0naFMqcQ3ETsYKbDbrBeIj,5a568f460b784901,8194e9a0cefb22fd -9LAn077EyiXFQ36AvkRy0oZhRgJ0kHh8Ml7kZGxHVlISfRa209zmSlTPcSRWPwpOlrYyYi7Dc9CZMb8GvB5ehih7cGHQ829hPV6r76B118U14fhZDoOIWwdpRGgQZ4pHUMVeNZnIbjRo5BYp6mHhX4TFe6A1xa7m8rQBOy4mmO6ThTBYUcJjbsKfy99zXwtjdXrZRLqAWL3w4VCUdlxt1X0NgsCWD5Pz3ZxOEOQtLZK3xBEN0kwx4Ayfve8f5BVBwuI7FmlHPhX4xodzjLWqi5iWxhFzddVewBeg3LaL68CBt3MMiataikWBMkUFPGcyeyBgeIV7gv1plRJlpomPudsAK8F5YzQCSkqG7Z6NDdg9qYTNOQKqmJlTjTzUuNbidum4qDTppbK4OH1xDmy6UElG85clUSo1L7cKgfOX8BeywJ4k2LvWuvrN,8e9671c6e9d39ba6,8c9a5b6eef5c37d0 -84CRSqvk5zXuR9FvrRkSlnJ9n3vJcw5vorqvhmcmPKQppGZanHc3SGuTXf1rUUORpRGMJL1SNQ0wUkYn6cnB8iBLqKFmXjtjbEfBQcN81qV4lSLJBC4lkmUdb2SkP,2bf935b2f4c4ba91,e309e9e8f60de6e5 -dSuVrKcDPbNrYbVLAAMtu6pnxJwswDsnMxnTuLtB00QANVT1DigXui1OtNHuT143YFLyohKWvHSONRHkzWnq2iqKPgod8Ld7O1CK0jYql8r8hKZnCCT9LV27K2ovfA7gtUcLZdcowuoPRhMNYc2ThhTmg8vrtQUg9Z4dn9oirYbXyiO0bwkCPq2Hs2oMF4IKlKmNcMm009Nn6BMYymAJREv63Ihy1fjXx3QXItn95ZbIWr4dLx2dim7UPHOxTQoZnn3H7y3SuSAQoDFxFLoRY4tzZjhaBnng14pBryp686qg31oRI8AFVMwvnKHynBJYINKHV27tNP20PZtqUnGAaDVksSOXrcqVahybF38Wh2QP6mUnfEwpd8KSnbX1a5UfoibCy71lwyuRX91XhUORvCOGCptoTH0Kn7X5lrtpphrgncJVX82LZiItmEeRMGquS8GuRb5TrZUfJRTuot2RuZ2kLiJRaOJRGckHTZN2JZSXH7fgfHQKpJxuVuXesV91JQtLZ3RlpMluJbhn0YU3Kei4hTiK62eDURphpTc2F8LrfJ3rjsE2AHlX42pMwfcZXLrLevXLNTR5woBtFtd25auwaEnne9Q1moRAzGv47zE4804sr21C2ixaRoPVyy4BrJQPXyPDPrM5QwXltecTGNLjZya70ODap7tnwVXALEVHS4iGNNkuWuP86CDNwzbKidBhViixmjBEdB1pHr0EQEIihAoj993HG8GaNw6w1ib4myEsbxtW2hO1Z4ZNAUR6yFhcx1kd,3e44ce73326da543,5ea69e53269d237e -jEnk9QgQGoRl1gvbQvcJfBgm7ChdM1uHia61deNSLOYPtOun3i9GVvL2kEWViVft9eMq4puRkCf3CGqRmnjACX6wJ3LNfqFQY1zN1lBYHortCvELUz1xZa3w5nAkN7EBt5KqWZyWDoHH9URO8lUITx5yAJlyg24S5VOANXnyHTXnxUFCUxpqlKate2wABGEMRHia95umOLV8Cu0G1JuvMJqw0tOHPAwmLiIGjRgs2Rp5t0cRLGBXREbu87Kn8nfOjhSxpYPaXQRLZu7w3KUDP9bxgHPicIJ3SA6ekInJl5HdIHnsxwggUp5mGL,9721f5ef1703d2ff,269a728cf88407a3 -uLhm6orsUiYmSX8dHTB9iSNGpQUcb9d5uAAPav13VD7SNtimxa9nws1PKfLZJy2N1HqY5OivofVJcraX0j52RuELbPczwFLcxFu4y62hKq3W0X6Q9be9n6kPSZrTojIDuJp2HeVCGxOAEbUS6fB0JKhCw5AE4fBTvsqe4gwgJ3F3ckydiYYo1Lcmi1sAtdBVOCo08Q5zBBgQsNKONFHBMG21UmhHB2qfhdtDBM8MTxx5pu7SAmMamSKK0k32yFKW2hLVLDk10OmYxmOuEwDhFwqIBMum8HDU3jAONgh36QTGWcygHjnJ5rCUMDcDeIoVwEpsfTWRtAfdhEWnSYHouyxL8LfWc2C4GdosiSH1TbnVZvNZvLdOZmsTi5663nhgTcmWrLLTLjYV6LnjTEhUqYS8ddxtYo0l0Dq0N9hKkg81xwpuJzK1PgueVbfEdJD1RBgQNZ82Bo0Qk1RWrdgnOMpErvFzbrOxzixPi3TZY1kSQwwvNc8c1etRz35HqBLdwi1r0TgdvjyD7lIS8gUFmGOo9E9pRMhHN1dFCoFGFW57N9cnBSAhiLMAPNXEy0jRxaLWYCmUUSlY7suFCfrgErkCLmgizszBwnWp6M8THD1JXm6NtuNuRPfzx93hkCu0UpHlvbsLXPn0HHtFZ5YdJdf58QojJxaWCpszpoAuaCH2z4HWvxVp2Y1lzuEtWVuJU8YwITDtpJwAtPgh9uFloor9o0NIStgT6m5NwaQGsqXDv0aZUOvm0uyu1ZoyBPt7FbK2waAWzJrC7bHV1sOF,43ec223c131a611a,e616eba0ea808270 -eMejf196Zv1TiWH90RX8KMEWZWiwaq8J5CTXaRla1Syj9Cq9KV8d6lssZGkT4Li9C2WM3WOC7sTTCIU62vgfthbJxksfTqKJ1zrS06dwjOOR5DHHGGJ8NRCbbgOltEUvfPSG8idsNYfNI9MfIkfBgQHML6ARTR51FttUujc4VfFYzeVy5fETwp5zgPxlIxemhD2YYv21gM8SVALjLcsRM8BVLxbYyaBnx59J42aDU21cLlG4sTjBBX3li4RJ7rmZ9mvzUdgxJSdjY83TK8m2w1MOo5lkiWl4v02yAahWXXrQsqBpQqnyvEvSTDg17Bm9SVFRVpKiZXGBNHQweswFnJqonaK5bogoYZm53OHLUzpQjdLx5SGkNMsJx634vcLQOBkhHr6rhm0WUxHYYT0M7XHZjZul2NmlX2Ax,5f7656af275b0206,a4ad21fed066a394 -mQ3VevA84wjHkvcfRb7NPJN3x5UXMH3rPwfCDBFqKCRin8IEe3rgMyBgLXQB3jcvWsMOvlK2jbS2puIaeVY9oIoQCOZVOZu7TYpS93ehMxEvJge9M8xVkp5KMpPToxVjHr1MLFjwQWfwoE1b9ZZiGU98AB5qwaUmMaQHZz0Z0hjHNfx1d9Frk8jjXuAVHQ37xlIZMGJYIIJqXLpEWOmakSawkP0cWO4TDm37jOMCVAvoSYFiOpXvlK66oxmTSOjKy81sw8LXHfX75xv3t4DWSpzqbZXxrkZAiXpMDVNCTGoDyExlQD7bcF22d0nXZVALzgjD5q5bOscDhY0q8qPTe9UI3EkH8MLexuWwkiQyH7EYfUkUs1eZJGDWOe11xDYIOylCwLHJ6Wc4WI8lK5aXOoz4FYfYy51Qwbo3rmDEpNGrnBATmmSxjOvPHKH3PcgemNq3XvlJ80pYeQpkh33HylFZfk1i874QtUxviqk4T9nDZEgEoHLdX0419KBdlImLThVrhp32dhb4J6SXfJz6mYIJtgVfAeuagwV5adG8QT5TNvTKwQBzeUhztxyGTTJePFIXxgL7Y8GJePOtL7u8DpBsSCmsCO0WDulS77wU94bGcYQvqaxtSDMVDZpRELxzsUJvDjaa4jP1AvyUF8K2J8s0Zo2pxvfDSxjvWAW7ZF7KTK1W95lxEOWJHODt4A5hFklfXOROny8c9WIjqnj1dIHD9iqrZuFr58KdUkp9DygYJHulm4KHajmiJE,d36e3f277c76e286,869fba4051f29977 -nzfV70Xjdoxvw29sA0bGR3ZKzEsTFnCqTYODHJW5sTHCMCgMs0ppWKRQQzoOhANolqZeueAwUdOdfa551VGjKQyrSzrAhgXQ78urAI8YF0V3e1wRuh67HQRv4TVFgMkdJywZG8mIXHVmYjaLFBsHnKu8N031gt9zBccAAZKoyxArJICx5qi7n7PHUSCiRlr7NNsApOljUI2syr9SxneCS6ixNQ496Igot2ADmlCDyeI64AEDDUuj4GbOmfaeC190N2gRJbKKwJIUsXPTlLuIu83TrmRtBCycrNvtpwGK,d1a6ff2eb1ee6e5f,1ca81f18d7f66412 -O0XSJeqbLzMSSUOA96wrpVfy7FPUM40hmkaRVF3JYd1RVVTtZUX8vr0PfcRKVDtTX9gmXEVTXlo59QWsPRxtQfSN1SkGPJvwEIndrWt3yIF,8df30cba53a75ac6,620e1abc75cb4f77 -AeWrRDVCFP9Blv8UHkykiS1Nqt8FCcT1nCOywcCC7POPhFi8K4RmCwJZsQcCE81jzj6FlQWvbUpWM0dfG2Vz0mGKDpuqUQNC5p40Kep1XroNe543f53d5FRXbfnzKspiASdZpERgMMoMgFZs3pDoWqMIB6M66RT9Lo7MIjhRxGhn0rwnenDeAM7BuZseQFfL2kUqTwA5HsVapgiQ1zy6aIbvFkbEk2wlCE1DY7TRtNHJLImz1CLN0Pd7LWO8XwrPgOcVhBhTKeE5SFZQRkOVWtYeIf3Gf2zrdMCKUi4hgGQVCSNMYEXjVygq9SaQudFZYEMI5944K5TYmj9tuTw0YiXybh9aZGFFVAzxHrY0haIFUijsFs8Jky8wgSgkvYES2K6goMzNW6I5vgTn9lzt7haMWtj9IA9TZTiUch1Vn3uHIwtM6pyUGzdNShVlQGxyLJag2qERUljdJvZ2qsJHhykmPL1zYkGNNz5XX2JXcGMdm7oZZ8S8MQVSSRzvyhBwCjpHy9A2W4R1S4orgIKBnAze9hjNoTBnBU3nNTuVSyWW2Y6HQXrsPaniMXZQSrNqIJwMGab3yOjmNNfPYMXzWjjcKu2tC9hiYJIAuUJLTs5JKg2Y2F8Jr7u1F6lfSWqbxummkHTIiJ7z1xYMjU2XQdhAvQwP3fi5,ac054cf6b95256cf,95f7add11577d356 -4FPZGujDmHQQF9z7TlCmJdmgK3GAVVobEDoRX2ndFntHsMfAT4eqtaFU7BPdwPyFqP5nrASCTompWuKrIU5Y5wByqgR8OE3RFjeHMZQLLFkbSoHWjoSWR04FuRsqlreZI75LvNheU8ekL2s3FIDJMh5uOk5xsnFGc2rH4bYhNOFiv6pxhu6gwWQB5TMJrMVWgbiStZ4941wOevgATTLQTOPIpTPyyzL6GJ2Kf6AcwQWpJ2NrlymLkATGb76vB4SwDJug2FZI098chQXwRCmDHAcHIOomQGCXv7VnAmKlRjhIq1lM1D4tt39rruSQG1SV61D3TfQsTM8TUcfpnDH9FUQM0YiNovL77gtEGgg8lgXngTVySyRgnYFT2hlqNbKx976ea8QhHjjBLbVhnSRqcouZ2oHTuK4TKx3Cjd0PbYeXepMU0Jbuor2PGr9yaPX8G5rapxXIJvRS4pdGcywvyUC4HRolrEwPDKmG5uHdY9swndujBJmBv2HPWBDfJjSreqhQoXc5TzJljRwW6wd2hP9rTds6dkfKIfypFVsuNOhHMUGR4RRP5wEUt9TihyxpQYIaGL9rKh7dEC22mwwQS2UchzdMq0xXsJ6ONDbOWZnsmBK5pI6rmRdmqlvOzpHwSEl4wyWKojByBqyL05f3EKHTmVRjLmtQ6IKptP6eLMP4bN3JD0jVqrBZgnfLoqxz8YvS6PUjEoDZzu2UZnrWEn9rI0xtVshW88gO8Rn81YWOy9ppu1P4LqBW99NUjKQywJx611ZU2rcZBFXO6CgLgsf9Rx6sDxS0BQKL9biwBRD37byCK2zA9SrIDheWPwqljNrfS7zfOzL9rRrJUDV7DQ8EHjIp2NEGblAsuF7CUyj540JTMRgMCYDdvzYHw3xdXR,93088cd782bfb998,1592c8f4c407623f -AEcDwyPpyiKGoi3YcGHg786nZ6opArqDNBznAjzIijEh1T95BrUSJR9JKfcaIxzRpYC1jBTgUJalZRg01X09YWz6B2nD2KU6tj24xTnqLxO0lX8NeZSaPSXfQZrezJI8FRsqwUHq3GHkjQnjrSBhZBlNWGl2WBC89mbg2sSSHCk2Le10Dt16XbYmFXOKcpcjEMDJW9aJn9NndbfhCRrEWW1nitmVosbNyaHz2Yms7X86pe4s88QQe5KvxozCQ0qBygTtiVkA5IFavPLS1KrMg4I5i8iNnH86EwcLymGpT3L7XfpWIXRwR4AHi8XWPrWGyIq9Tuknt5qTcE8MgmIkATISIvAXedq0Qez5nGQbhjUtmrWJl8ZRqEeecVuy0cn6cmAUUxRmZ9Z79XzEQo0ritOkEwrXDbsdCf2ByKm8m3kOpDIUB2uFTYAZZQlgHElXK82Od7kHTjGeYQYI0GqcRSQgrzOBxCoOcuhOKkplygqr8QYzg9x2DKghIylesjNc3p5fRSXD1rcKQ5DlFTDdras1r9lxQQ3DZw1iBzkaFvq2lUPCYsKvbjVkWL,2dbec9170436ed8e,ba68853150bb8632 -hJMf2LCSwkeeJygRv43gqidteLAVJxNhankikMp0vaqAtYkGVz0n80r0YywjJLpnndphKh0h1W06Xys6BZVQsnh2vK8HDd7sV6mY5kjYQmN4xiaiZ41PbYESZY8un6Qr4FOdCOKaFiPI2NSC2guy3uBaUMiZqyZEbFGhW2kzKlYmlsboQr06dwD0KQ8Hlv8EW4q35kVXov3S4msj1EcQf9NUFIudc5Svwx3dDfDWlecJtiQr0w4fpfVqU8uRbvECo2C1RXKUeoitSWe1QRwXNZ3nr0csCIVJcrOAVLpfppu3FyJujH5HS3WabcJ42uKnfYtVJOOnfln2xYSy7lpO9XbmMK97hGrYMHpMYcimFDaHRww6VQwzR3OeQe7PbhSOi9MjkTI8rFPcvUNc0YyES4556PI0PBbJcpenJM3VVhgIG8uZG9H0dA70npmduL7VyP9zcSsHkj1OambdnHRr7nVdXbGIv5hVmQiafHlJV0YovvMty9TezycOosdEBLFpZKlreGpCz89XTPIZxH3GhorUxfNy36XivggYU1we1W0SZBk1dXYMpeubyZoyDHeoXQ3BM755Qx8GpsH0aAWg3nN60LBOz7ALNKfDzXHp5R2Qp1zfZBFuY3i1ZvOKm3QuEYnJZEboynKmQp1acLHVxcAaQYVFV32BkkkJx3QgbxTwYJtVACpuLJ4JNYTukhWepDpXrWB7Za8TamR70UDanjCupAUNYD4iaddbXeeo8vwsHupNxt1RLw3vMGQThDuAERqmZTqpDj4uhbJ4l6vltHU9168oEiJnCKEHDdBaDT20DW6d9SyXmojXq9G9f13WbfF33tM2x727QYLo63pytebzhFW5OAJHPVW7AUCnXaWaAlGscDSaFMm9Z9oTBOQWZdDDtvOdysOMmDtYyNpnEBcDW4zj9bgv9gS5BFyKQwrGNMcQSCytjh2mmeTfADOi1SFSF12I5e0CD2NdkKqpDMOypx,d4f2e16fee9cb90a,62f8e3084056e318 -oKTYL4SNSUU8GKrt7fCVmXpb8vVtrtLn7jce9nGlpM8Q8rW6XabHdid6L8y02zMyWcE0lFhY95uYr6Acbi8zzZ3dRAMPN9dmelrtYodxvde5wrLycqSqHSQOwp8Kkv0Qi6eY6L9VRbUpGaTCHr2KdRLPIm2fmsj8WZESqiIifJ36976Gt41xpNjTBETRkWD0mADeJbmQZxPfJgmuwowvkeWxnctd3zIgFDQomdar1kVld4NB9K8DpeAPK6KmpQ7viVUc1czEP3OmVxOXqdBdjr04fBDoybw3i6ainuJCDY8hA7NFFDaQYztHohq0YgE8OY8FqZP9wnWMBQmQmhC3QboHZ2rBhxdH7tefn6h3vGoSVIGm5p4pqXKSN4nNTuawC0dP1UOfpWqk7Bd9JshLfvXQIId35yqtkCIXQP5po0VPWMWqveg3aXJW8Mg3ydBBLJPWJm8tOhcHkVeBETST0boGeJlAdgJYe1cqdnXQs5NK0rKyMpMIQ3m64cLONDD9FgTUDijwKHhrTrKSPJS7KDFOfn0Mr0VQYKiPV9qrmkrc1nfFnJrUPFvI7gWCDhUc7IGhEngiiCE5FYuOMkYHOKKmEHVXxtwcPpDeJtrKQxQwQD4SUD0HRWOijw3yCMorUBrRKZMdqo7cdu9iEck7NB5IvtW3boMHouV6TgBUzWmHA0KWkbdD1unUHbDxXu2u2nv8gCr2FaggYw4dBX0IG1YCxYfiwKBKHeTuVldlOjWgPucRcOWkTujEuOri4afOMBAqHyvcghFfhgHvQ3o8CRDtt4du0riCYstmf05UWl5cKdwOOOxE1G6I20tjzVhMnPyhKJqbzwv0vNnXsSn9WXn71odb6fSt3o1nKeDoPpiGvKEANjzGpQtSb1Pl1uotjHZcqpU67CJNWwrGeaMIz8GoDzJJcQDvPUx3xDeKPYKLMKZIznr1BXu4hnEeclEGginmR5B5ZVJE2MkEbN,9c30a32290a1cc1e,2347b022637c2b8d -3Nv7DSqKym,a15c18688f33289,a992a0eb969152cc -3WSBfhcl4UIxKts8AdZ0mOphyQJaCDdivd5PnObHGsuZ6vDkclQrjJ2VDRZ2W4iO1q5pDC8GqIRlbvZB0htKrPEnDCScE6Yih4LpPF5W5B4pO7mGqSlNyVUxWAPFGJUJT8wXvA1EYE3FUiNvIhAS0PZzoAqnmWsfzKSIRLge0V8gUI9mYA18KwdAg5P8HKEmx40P55LKc2l8QBvC0H9MRDDqnUQ5HKch7RmztXsaGq4sIltXuAl94Iv1uceF0bJw47XDk1olWVuXbFr7BfwOkdUotYx7rTEq5lSFdVdPmnbjsjo1gwgUOufGXnXytwqga50mjCuXKvrjGaRjxmNF9ZgD0NfMhdNRSa5rna7kT6eA0ZzFkFd4HqXDqUg8F2kvx00Mnqz9ky4eZdMih1lTgk6whavTjPNQ4jWYAwx4DfGlnYhJUoyO4qieikRhszbSi4AsSFGVgFj41Bq5tDfnILvWHeNrdmHb8S29H3ZZ6Rak7HtLYbjRLESvoYWYHpE4Tux5haWsOAX3oEg0qsxfKowbg5TgLiF5aB3uJIMlNeEXo9V32rMyluQLUFE4VAylsMy74RV2XZDYfKeyUhiTNThBrkN6Oxh1Z7tCz8evvC1bPs564I28hjbx42sl4Eu1hoiVREamQSzgts0BXw7Fcv68FLeVwRkNQcylNmM197WeooACGyBV8Jto2JCooHKJIbsJRyfxTPjPDhH2ciYHunFuGTuqPH1oMOLRv95cew68FtXTiYAoiqIzMcCkiTuZ9uIltnl8XlxDIjYBg9mtlWsva0SU6ShVk1Dlpvl6TWB4y,a88e6406227b18fb,1752dcff3a9ed011 -y2JxfVmFTDCc5E8j6SyJ,55dbda31fd73db4f,e93b771a2f3821ea -C1jqUKztl2qZBs1SuGLPCIZlFafCOVUS82I0NqcDt3jkAdeGukEdleFFkaJbqbWSBFfFvzkK53fxnlFL51iKtbtlX5C1s4yhRm8itsYgDBF8HUxOTspOuNdm90rI8H2yU9E7vnBUfFSRHZI3yReF9KasHGnMtcC64qAmzs9IJ2mDvmlBPN3Bt8DCRt43bc9xVCoWgqrw6m1YcZHmr9XDIOEe7iKQePq1CRh3o9OSo3dXTcwMEfmHDn0AtAKtWkyU9PeF2lahMK2nyj6mJHgIAmWMFhMPyncmnYS5o6OpKtNIoSuynusUMUVebKeJyA5yaClPuYemU43QnVN7kzFrCwvLWKJkn5qkeupl8lifEdurSuw1e47NwDHNfIP5F8vy7JLxY4T1ZuDHORFwYe31crGrcyoKHSHNhzQX8ujjDMKbqX3hszMdly72Y60xOvFKrKjzJOYTvtza5a6DAP18BLi2xx5SzOPTeoYAlkgJ1tfLVZXY5PnyRl7LewFxUMSfp48OEUhn5RT3aFufPr6S0KBI3tHfpED8N7PwrVwh8rdYac7lLITNE88xyVRspJi1WmOCdQPjRgllyKBJibwXMO8YRJwrfpcYtp2bi1eni0VaRpfdhdLA552rtVE5vYUVQXfFfjfBTcYWuCFc2Qtu7TiVTkGlsv5pG6I6QU85AgkD9QoGfqp2rHAVyfhc1SdU,24c7045a66c8f290,9b6b9b602de3e77c -I44Ds58prfpxsteODYvMtWO87Dd7dTE9LomUQWRl94fye48YczZsgIucA4wsT9qkKgLogz3dZqMhM7XKriHpcOiX7PITnDp9euW6m8y36HWxLRx0lyBh3STyqHP0P8D5JYLuaEa7h6RxJ2cl2v8TM4EWx9yNn9cS14KOcjb50Oq6Tn69Jm49AiMAX7j04LkSoNuBMqKUi0q0m4ccskR2Nzkjf96PwIhBFnbUw7sFx0PD3xSiBNNL1NKBDcOfuDO1mXgOJXxJbAskMfch7PWD1r9GeFYB2VfEAsLDhw35f2ctxhrfHePdxxgg4kPdzHsjftEf2U4dIUzpiCdRRXuLtYXCeP2URuuOF7iKPrJXYCIO8k4Vmwq5h8CIKHRf9TZIaWDsaMFOKmSuZoFgag5pc4X2yzMnKm19qCTkstcRXdJTSJ6XbErcXnNfV6eRXyV1NcKNDbFgxTcJmT2t1kcgglsTSAqWKQxhUf0WVBlVRamRGl1lB7vvFz1tZdkOk5YcjIDiLuRPO,d73a8ac4ea513a04,509189bd0ffb9be0 -WBGZrSyBfxUWG3PvZZTeMMauloKm59Yaf1VdrZMSxHUJU1NsdtMMUEIK0SC6cqQ9tQxqG2KvqXgRCpfQjwXwoV9rkRYkaNxIfPZ4yimK1wOuG6vhcIGeG2bQ9pQBBzYJ0hx0gsVu5UntmI5nq7H1wwVgy8XRCCbBZAxqfnLGMDZi5wThb5hcLcLa9fp22bS7y8nQI3dGdJQSXbTVc9HtBexVVYRBiA2DThbfWwXx2fAmODAzQmljHUBMBLEU4WRFwV8Ug31LMq3L5P6fQI5PAaAoAgJ9qNPzl9PIslNiBDIQBjQwIuDvGU3hzuniFEHNb1CLkwuyDakDNnNfTZLNngCMuRuC1E2pEzwW8O41lgMV3Zr87k,ccfcdeea6f0623ae,3a85cb0e5abe445 -VhMg4jESCsk6Bp74QBlV2aYiA4bZvBha6fcOOO2pMYdJeWjIbbMuJLVYpa2CKbmJgHdSLnhPEkAI7wKZWHelavKImg0fZwjyq1K8d3z0pCOikGamcfu84g27b1FdROHIYF1bd5faFIkpin0ez0LzjJC0L0KNB1GG9JnUMpLa7SZx1n4nbhcnOWt4fJTxeTuN5onR820x6LfVGlfOZHNosXUVFNyP,8b4a0125a9a3dd48,6eb6fffd0d60f07 -SIIuCEPeTrDqKEpC8iuVrIGdc1Rrk7Rnm3YOUTRtkMV7ptJwEXtdtawB0RklchzqSgUxxEa9tD4rOe16Gq5JBrz20Oumo1B2twLMMSsKZITwKMfysRccGWzrmtXOvqNPU2fYvJG1SLwycK6NIQGSaYWZ3Vr86jelRxKoSswPy8V52lO4QlYPhw9R4FsOSdBivG7P9xKD9AWCB8iPB2LWkIlQOoTnG8atv8CjiPAYe6ooWulYqoz8l0HP0YRy0cbmqo3w5C0K2zURn8lclVNg34yV8QuVjeuL2XKBOdHmZoASrG2yI9EpDnUkFVlnClhPExIV1HvrFf2SZFbB2auOn8Sol8VKbfYgpSHZs0RPNFNqvLPpI3uBNT4RLqcnAsB6KkVbwGh1Hn9hZEvSsRGRFO6efQYC5x8wmy5T21Q62oar7Hg5ICfRBEgUlj1ffHbZroB7jK2kivM74FI34FpbDCAafmrGVSm3l5hbXPV3xHvhiXbQPLvCusJcunuVDwJFULLt6nuZ78JEhiOzghkPBipozcFO7QcUDjkXrfL8VmcYvCnCrFkrOpv1rfXts6UC9zxK6poXnwknnIDun1hz6HtVBWfoimxiL0yrZoWUIrt9hWCCH9XJ41TNdHSpaWVS9oFGgd9TJlM4p5QDx0yVKrQirWxD0bf6HZZchwcRE4kETlFtoBIht9jSBSVXfMmyARxANXsNWwD6VwtUaZ6RnqS3mtvfjXhhn8ns9cucojmyEdxm,c708e488b29a3e00,ca7639eb58878052 -uqZZRrgu7jyrhUrFQRWdtrZ86YM9NN8fCxbhrcqD5YE3YWsuffiE6ojG0agbTTKdoIXolGoEDoAwNcuNAWxDiGd7tZZLncEJr8k1VgPH2QQ2pUJCdDbYAbtupfQUonvTuOratJzC7f8yk1An84mR5QWqJTcpyfaZJUqJzwGrwxt2s1Eb7MEMLZtr9qxyohUIkZY8sXbjnil120t4HzHtdEiwFyZkoTe9RMlnisuYuVO3A4SSzQ3yXMl8bMwNCwGYZwDnQPl7dB2FQwpotf60QK34vqHXYcUvk90F7S5oTu8tbnqdWimUu60v5q8RcxbWvnY5XIZp2E4DKUB5krkaAARnrH34bbJU094ACQoNSIl4qXYpkhVwBuvHadw6lmPM87q6j01HpLbA2KHIBmkc6Z0CSBmZgRbe8MGSJHfxrdzhQ98DOT1NZkJPe4GAPJUKz5b0rNC0NjLnppor35kMyom9sH1H809Wl49natYqCZqHRftHYC1WHxyy4yNmosDIB2HZvlQUyNibhIUO4s6bpKPrMGfpKmhbHYEQ4okY00qCYtTDZ5A7KTsJOMKMhbuHBIKFq6Wa5KV3l17Dc1VyKI1R5msuTjH1hp3U41YDx3IbV2Rr71pTwr7cJDPqcTIUdUX41laD6jrtsbb8BvNDsFKsWqKZvyYXYArI2PIMOsMiMDI9Uh94nl3pgUCIy5,dc95a55694a07f82,ebddd04784c7bb3c -XzxAlpy8gNH9SMWYHk4KYe6Vjy3ZDqa2mCa1Tkb0IQFqJM7mlXrL1lteumnauo3xyROF5oAM6SnE8oTCJizjQT0DDyDTh6RNDFgTTlUWf28oc17Zaiiy342ghXJ2cCVH2Zg0R5OWRWezLZuTgIXKJ0hxDpRFhnGpdY5OOGBbAmdc8ehudnhfAkq4dON52tQ1oyeMblAAKAJocS5D2ua0keioXNmX5ThezRCfCk7LoBLpy3eEKMEKDEs3twSwXOrYabke8ZLbjBtF3VRJ8WUOrngyboBmlfOsiZzzfct2KECVpQpf7llwaPFQyoh7c6SO6vTxBKhi0oQHHgOkysX8H5mcQXYth0qxJT6qpEBplvUXXjV0j9Zr3XoLG3iKNOtpFQr1j8DWKN0HjiuGLsHf3QibwaPdJdfTJ0YISHsI1rv9wUnd,e8833fe49c9095d3,a0e4d79a9d94046f -oL1LzbAcoLw1KhiUlAedOD6g0pseDMBSzjrHhJnteDrEyozuGOwHt8SZQ7eLGLDz1hjDQmJyxSBpb7AMadKDsl4M6KKwd1pciNCg3hZ3Rf1y0r2t5vSzAh5l62wcmY13rK1dwtO23WgViUxuhiAiUm4xVHi7OuXrSBFgX0ps42rlLYopxbxVM1hZGx0PuIhvdxEQeJW9Lb9H7HPQEGHsKFOFaKenqIWflNuJonPMj8gZSCjJyH6mDAaX4lwKDvRPIRjToXFBOQk7Nqcb82ra8sksEHRGgTsXp4RkcMIxghc9NsL9JaH2YAIhyYN8eMVGqKW9PQIWfOyrO0e5OXvSpZbgbgySCBIHSINF9ZvcBP2lsYXfG0uqe9Nfvk5ole6AfYBQDtbD5OBuEvhD2ZOV0MbqWPPQlOswWtY6dURDZuSIMCniNYp6rIy2LmM1WD2IrOz49w9SUsWWnTZBnGahmK83GBBXXueLjFbm6sp5os7gJ4R68WC0ymon1hoGV31FbUywu52R3xII5U5sdbb1nTOFS82C6hyirT5RBUilslCU4dSdBIzW1uWRTOpQguhT2EFR5WnAWmgCaIJL5Z6qv6TiY6C7HSCOzYzJE0IJNm0KhQ6zPHL290AQLw4EP6RPFSwCGxncETwbn9zqXT7ACjImSC0NRcO5MAVHSzTDd0QVw0ddwRr5OeANKSxinj5RfsrPkjCJklYyLMsOI9BwvU5JDlAjkSypzwA,1df1290eeec37fb7,312a9f374ccbfbd4 -B8jJ7OlcuxrvSbY8ES5Nqs79zDs0Xr6TK0RbGLWL5FhsIC1kb14vgouZygWNRGsjHn905vBiZ9WPj2NF0yw9e4ZFQFxZUPSRGdGYlmM09M87TFk6N49MhkXGhdnco3ekBF4IhP5P0xsyj9OgHdkYJfj1CCVJIwlxUobBx76EncZgWElPtp6eIV48zFukZNd2UPRGG89tTXLBFdTM0ZJR0aWFdJUnWV1cUBvtqyHqN7EiuFId56YS2dCcqc1kNsUrebrj0yiye5hM4QA9aYsseG1FXGYLfQ90ZOSu7GG4mUx35Ti6bNhlSjEeLudt49hjOLOtsLOLNFYqDRyRj67MUXhYZ4nly3bRY6ZDyQ1Rz9mW5zgPeeKnreKGhI0GuBpHEWbVBX2XN5jzomV4puZ0rxZr4KowdLxPl82dxdfbPvF7EtXcMOW0jHaDjmT1bbhiyyChMDhCYuZo2KhxAfaQfjNZDDlNUaVedE5o6u5q30jJ6d8Wa5cjRrmxZJb0gRUXX9tK2i9nhAYn0N2fJ4FnegdVPduGLY54O5O4RohM5YgO34QUunR6mKIFJffetF3NePDOrCKeaWVnUrRojPqmqBUvVUewTtX694b6Nu2X0oBVxlKrsKBUNZx8TMkjy2y4QEt3RU5vWrwib560a6iEeSERoSE901vQcwj3SA0jc5xWIiX5kkCoJhYH2UqvabignUl2LoRMMN2geXbahgo5mIKhpVp7AC9fKSMTdGdZfx8fqz1bvMJgeLwJZaT8WFO41Oo6rvwrmEV2dMaoxnR44jIoTDt7ujo3HrY5mITBDj4CIjw2JYfGhJKfX4ndiGWvJ4sZTT2dJS2qK1tWMqp1uIOiSDfxwqixXee6iXAfVXpC0tPaAkwF5oJmiWyOOJXIDFATiJz8muEl1Xe6E5CKiy9rJ3XjOJRKHiGeWI7IDiuFfH1nYelMxJUMpMkt3vPHdK40zFdqs0TIgz,1f28e451cd2a76b0,336b79df4de059f -z91LOexvoJ4BzqdxRxJrUVscG1RPo3JLYMz00gWZn9rX1xS4xilRgwxItKfcZUrgxpPs6e6Zzc62vE02z3Jt1oHHWo5KuspuwWlHOkwtjeiBorL4aJeZc1g99NKF7u87t5CtDSVQcwEWziLZGACjjCBH6YFUw9Hn72C93bNhgXjNHI17KdlJZmbKuODc50VHRADpoAPcogSNA9ibFB79bfrM9Mo5lTA5nIn7H3KlqjHsIyTsLV4wrfbPeEbzCvciNrL3rDRamKsCTOMJ71yO6HbOLV3AcUziCWVJJVfkgT0tCtGXyYrNMDXxPcwsbA3Ukc9gZm7mGBD7X1vhjIzo2NyDi48kzLSMtvZYeZSbJWNUe6Puk97aGrrOrGakqcamZQEvWS6IQid97H1nxn7cB75s8qb6UQKm4nqllmCQ2a0I3JPjfy37z0LgzecNGn7J1emhOab21ikREt06pI3GE5es0LgVKXiqKRJXH9gDbrQ8NZJiSJANDV1YMeNBB9fgClVwxJpAVZL5Pgq7uWvHovZCZaTz78Dd0cEyrIrbLOHly1zJvp8LMbdfYj80zOkQp15d6mMXwFI3bbSBYI7fZxBa5Pxq679J0nJQeCMwLymxsRjHBbBzsFzxzB6QKVa8pCsWn1qLTF8KDRk276Xr2JLSB04IVK7aAmMKdO4U8BovPuNMfM8GPunAhDVh6hnsIgZ5hwSSZM7qJBTPbCF5ilms5,db49a9575bc5f22,5d620f758ebdfb1b -7mTTT6bIjc4YCHR7CzaCEMPVLW8X45VXIP0mLKMa3o02oxzvRbhhsxA5g2F2h3j2HIWOU5KuCdTpa9jHMAcR6ycgqjGp5orJ3oSiUkbWIKD7sFf4b0FOjxyhZC1l9OxVCvhLEmwYOIUnk96W1rUDymnRWjBENk6qZcgvqFP7QW3lZ2d3uAj9UfG4imrboQOI6YOZ1FfI0idyGSBPPDauI1YmJ00NQeKgvlJKfGqhkMfx7GpctTYDbdzIwpZcC5yv4LTU9ZCQ6dikAdAs1MWExAmz1XIYFpM5pVe51gNAZe5iGUZhYrUdREgvFfoQji4knyppUOsEtoIQyumuyztxDhk,fbeba60cf3e6d2d1,3f7538ecb45bc0a0 -U1CrDtwcstTB5M3V1nb0rpMlrPClHHkaXaJaHJqrjeSFBS2lwTEt1AR5YNVuoHG2pdQX9owJE3qw4U9nxpauNdhJ5rP5YIdlQEGyfTAPbu8rKu8LySqm0iiTlBCISm4GYr02WhglbtX85WYkxZG62kKH4pcOPdRlcI9pzXqDbJjWAyIWNJ6jo8CBC7EjikfpIrvMmmGpk4aBctyvIstduU2C5fO38M3qP2U6r0f3rz5YaPrZtnsmdFW0Huus6uy8XvLJUvWNvd7NS4nsMioSxTg2thFLeud1KBaQh3N7NcWywYlLz9yPe7sJgw5KfIV4yXbtck7lSnruhzT,778670ae6955ccb8,e8863fe5e03f7528 -xhlfDBIpUVWscEiysyuQjOr5k1Bui9fKnrLf7PlOnyFvygZ3RvErlwGG9Lk0RCfVxGYLsrdIRQQrYnHv0TkB8rB0ifJ8c99VK9vwLAMeVl2P4iE0QdoUYPMbF5IpmZ7AUE86nEThRlQPnjFA42wntpDqjdS9JXBESX4lrJF8aBTnorP19X1eQeaqP4L,d66465ace73ca33b,b2f69f428822c00 -f3PTbyzmDIlsXhTmNIxE6I7B8x7UJ7MSmWkSkWLhTGdIhvcYAFVtyg76T7eWbkuu0o3ez9VFmHDdI6k8WGS9GkXaX1xQ28EWQruxrIEyI3L8CnsxUQudXjw4oqN3JJkE3h1P5JhiW1cdne4mRk4q3ps3SK,7f50346fbdf984c8,adeeed6907ad90d7 -6JPYn41IS5kg2Zs1CyYUpMDLGhUBg3UXIOc67wGJqe3zn2taigNq8C2aEjFng27lX6rXxGnWlOgwSqBzBMIcIlfR6TRBnCjz0b0pJdM1gHh6DyAUXVcjzqtkPte0C9VO0a2VPNp1jjZYEhVTr7u04Vll3z3opQI3TrrXv4ZmwwBPLSrSkRg4Z9XXIDhUextBulG5nSPuboTjf5a1SZXxzMVP6sWV5l3YW3SLu70Qp9nU7GmM6OF9iIAihpYK43aR3OI1wmE869KD0oFvJ3X268Ik5wFQEIpfWoPkoCOAF9kfhcGAgCAlA643pZGjo7JXUJMu8cf7tiYrnSTycvDIlKuuH4R6s0izqeHYhV0nFBZeyJk3MkLBVf5LnFC8srBGhEZOvOpGjrMtxhV8XF2EVunNlRx0fgEuHl9AOt0au3XvzcKXq5PtzZpnl0VO252vYQ8Z1jvPjl9tuAhS9XH3hQw6IGls4xnGkVnOX6bNWzCOF4yEdMVz8VejFCVPfJ1pC0eK2LM6Dh3bMVrpcmQ1Y601CXJkEQ59R71eNjydvJ8BsZIBSbgDZalBm3sZURu4C5xUwxs4G1hqSG0kOzkPGjzehUHf06UDkEg47FRpvxCnUe3NW1aoLocKcreRmUBi7hAplPIHb8rF4CzbfdGHsc19fQhIfT5eHWIq24hRe2uHW0HlC3TOJee1RmzONUF44iMIuTHPENlKEHk939qoH88Gm6in0rtGOyRc1uw2G4APKwAYPC8YtvzQxIaiV2UY2C4LUPMngEkBYhkFkzdKTs6gkmIGKj7ttHG9iBBv6BvIqpZ4q2TKBlt5tN8cvGccLLBNG8mfASFMR6nZccMdk9iIOVzDLPPZncmkS1BivzKLaZYlshW8JMQKXwniedUaaQhmP8Okg0R0GqxDItbP,b1348f3a35078677,2805dc3d804648e2 -xuL6FbTV0K06AmpHsatYhKPfJBnkow0CxLMHObDYlJ009dMPofuIgu17xHvof1Tdx5PwVegm6eVYUoTjPzMFvkn6H0QJCJTRgcGHto1OLQgMyHEiyA3HDYtdkhoMsdz6RRA6D02RSzkHly8MiBmXZxpBTKV9x0ChnTCZGQEGmPSbNYi4pIqGtDJCZv73YhDGqLsZP6qS2CziGAi8bSv6bcB20i0h8nfFiRrogSYTRuus4a43Ckv83FXx9ZYrEvGJGFsqv5otw7YWuEtLfQETcw8RWJpwVT6LLuz50wJnCUuqEsHOhTV5gw2x2lu773eyjmvuQvw5UHBzBozhNbz228E5TL37Kb3yyyi41YhhY9y4Xn7xI9HoUAGBqABKRm88WBgYL69kQFlkb69G02OUdd7FsGFmVJoDjN2PTcHMku5XI915qJOibVmktA2OgbDuiphZ8Lx3BTA88WfFoFCpwWoLk1YVw1A2BsqgeX78vCpmTM2urS3DAESsCDY1iuBoBAauQIBqnbGSqBKp9ZLsyuUljcKKHlbnug5BCpBLQ5DP6pPjhd5qf87KgwNK44uWpH4ibfKrN3Sao43MMTjfcV7mnKTdyteXoBLqZTrpCoo4chlXR2GoOZPQ11sI7oHa57b9hjnytj9j1vsdUetk08wePNoSFZsC2CNnkb9VsdkZtlG,6f326229a497ded4,6a36ffc67a7389 -te0jhRcTfuigAOoaFsjwSruJiY8zVBME0RusmX2vv4olJrxgIYJ3Dow9hh2om52dqcfVrcKzt4mj5SRtV20ERtmx7M2HacLsp6loonymphr6ECSFvuvk1jyFxUtUEzWGKuOLJ5ETye6ZrGTrKj6O1D3mmyZaKwU5cOkM9ZNM8Qek8QtsGz4wUZHDiDmbvvRRoQKBJXXiWdRChAAtJFRISlyH4G63k1dvX5mwgVrJjCHuHY3qru2KVG1kgrfmXnxDuXDDXkjQt4E9IOMHVpwDKPWHffcEugYD6yEcWUYlnkuaGGqDrXa1SqhiBKMhoujWuBoBCo2g1MOjrZ5zPJVrbct8fu4fas1nRCsEPgLbUqYWZhc1ZwHXdifytJdSRBTOpDIwfQmHRTkebQFEfRhc3l9FJigrvKEhRUVfH5SgY05JDmrZXKuXPinzxzTLi59ejzuLJReq2bPwJso9MtFyO7hWG86FlIIa1PG1c7uQTQvc8ezczpFDsndNGreDqc8ZxCnjNHrRlwbXn4eyn9yagxQSVfL4eSAibylqi9HlSnIZxa4QlbP1Vllo7gnRawbvEZhN330gFAWgH8tsW9l65xPHq9FuJLO4JsVb4L8nwATUXNLd57xMtEBYvawgt0DsdtCYwU4lI1yHzMEZ2arPYp7LfyIE9SXK4AC0,d78d069d55123ef4,9c25eeca9ac0e274 -BhqCElxbJCp7owRPQyQUA5CLS6vC72xA8UiiqiwpKYbiNJcwCoyZrN6PXz6WZFcsjI772zr97BwgC5LS6h5V1fOxXAN1nO14AWfMC7EVZE90qF5t3ldiS8oGUE8nQhMWivZvEhyNw8YoC0nWIGbv5NbHixAEhnxzZK8YwmHVqCSIvO7fcTM0E6h2plAvq4j8a6Gq93XzYaiRpeScikHkwamQ1FR2wOJrwWf4qjegt4CEjIPGLxOUtnvTPpPXTwaiRiYBDqmoVPI7eo6exsoN7hugR1ZvGJSDyWBB672MlH2w1xbzi2lhhhyKsKsPrUY8kIvrg3kaimRg54B00LplNh0HuwKpoMJe1cCi3JtfEpy4lvRZKChpyn1GRIrIIuaXbWLmh3mxgK5DSbXl8Y4g9ftOiuiBa1SDkWW,128c54a23ac00e7a,dafbf6aeb1a98596 -KGyJxwkhajyTJTvvDv1wF4Jsw1RwUVzdvC0FOkwQfm0LHMMBYC6unFduOuNMGPWHLTVVNqXGkkboxJZvc36dKJzs8AYzeitNQ7FtMo2yeYObfzGQ6eg9dM7rBkN8ToxcntYfZErCrWKXLeOgwigxLQbf8tbB8nffcKQjHWtuy330bvZLrvBSduhspW5GZyc07vUaD5AAXuaWGZN4f1XtfngZ2ABpDXTg5q0hJzSR0e2zYJ06GcTcD5Jk80Mm7lLepbfhHUuhCUTVzZ5LDgF0tMlz6CTxy35XbqdZInYqGZ2gHcJ1sM6WajGakhiwpnEpUXqvCL4NTmNG4lAVilMXPWYSpefohOYIYUrbXcjVCaJYeNR9LGB3iNzlThjdWwvwbQDB8TXkYjYGH5i4xIzhW21EflA6WEZIzB8ESebVLLnUTXM3yivYaOiGdwlFhmshHXuB8PXGiIhzfiYocWyYkDM2vX3KqcQ4RWL5ZhJdp8tzRCop5Afibr6lhHP1c88MktQn61f9uksLwuUiyDzwUwYAtCIgRp9RlUmlLFbaiJwrz4zMd3ESW6EFovqIHOyLl7f1PBeBXEFpjpwWwUtdZYrzXCh3doqPYfVAR80uKJ2yxPwEq4WSUDYGOPjP2caUx5Fy0vJ0G1GJcOxuHTKyCp3gyLCkcE4oeIlyDn8tTwrfNhlS8K8svAWMAjDpcRBfpguvGtLD25mUjufg0NFkbgeILfi1NX1csIpyLWRieJnJyrW6938pyorGuBr0FZTYdChPXNvJ0h3lRmahgxKnpYG3jeV5r1ezm1NOe1JRMJq5V1oyjyT5UNbBxPzVlaMN7zG4NL0ZzTgX6vRdEBSeGeGb6zZuNcu444CFvt5AJniilQgiP1Ql1F8LtRbSyPhqb2Q8hrRUbCLa4sbQLSHhAjI4e6qkAonZEX8lmEE5xdZ5F,9a56225cd8e7b5b2,6036f03dae95b96 -I,3a4a285c94f1936e,18115b183f326829 -1GDZFNupXwtgvSiXtIqtd2xgL2uDz3m81k96q4K8UOdScFtubeWH6jv3QjI3eS7DOdzg4Y3mwgZKRP7hvoQySdK6YpcRsTyavHZgYj5vbnQNXMuHJA3kGAfXFGFGxNMo12BIdTyw6sFftf5pAjQ0UXAlz1PgRx3BA8cp1DIWhbvormCnD2H5Nb6QzEQLjj08uRk47vbwH6XbvjnbNeUMhRvSCpPYWmI5iGlkahB9x8QVq1K8WJz96v8PAm1xKhMRCVdFNncxUuogxEgnrRd6I6Z9vZ7Qj2f3wfny10PYochxTxpqAAXtARbQ60Lqr57MvBEJmlQtej51y34ctbH1GuyBIN56YZVpnaO2gsymaf79rUKdjo0R8QruFmPxYfY8ydQm7D7Lnl,84442a0baa9b9139,5cd90baf918cdbab -WU9LBFgS0c2eTOSHYhoyW2RfnQWcH93AvqUv9VRRzJWFNyBzsPKhc7Ys5ft8TjH9HCA9z4Zs6gXFp5Op2mt4po1Zt8xFlRkzSpjFNR6ou60rapy0WVBjbx460OrdXSXSFr8wFpzbvRimunrgNsZ82guMcNsHxTDgxUGVtZEsJJoGefqahZXFJLOXN6hC5aWnKjnj03EjmCUP05YPc5OxvyoEYvq215T1JTKpsCrgUaQKZTZjJLWm6VpdIhKooswdvjOcoQWATgzIZFCVi6LcVJPzfqhLz1nrzfeOpR19ScQErrRbdcRCMLg6SQb5qI27FtiabstjHtWg0P7GiG7zNqlmp4TTMFKZhnb1Bns0jpdoXPQXXKfymh20gqz90AroU9dnFpPKU15oPzUKwaig9m3RYa4vAe1m4fVp5zkmp9MjxhGcvbRjayJyyGPkRRfB53SJKvXExvqcyWlfMIZd3xDfAMlMAGRyPJGbKwTurYMKY5SwMQV2EWT7u8V80qViaEZYMBrEZdKykX5Df4x2J4P2m68ymssLSF0pO8jaYjo0yYPVK5iIQ5xVcSDIfCh79rHCtk,8c15302a86ea3090,3c3164c9ab6c1b4 -texTyqgyv9jW5PK0BF7vC0OBk0agXr04sR4nZcO4HzklK6Q631MWnu2sXkDGKcQZo9wtxRfMsxvqhmuWjd0AVbWY1PFMNv8NkUH3VnkLiIzuq7h4J4prCngDN0SlPLlw9z2jxeqBZOgnHFGBjn3BLbSg3A7lwMhlqPTotwWWQ1qNSwHXI3eZt1FeSGuaYSDFKaBa0qktVnZ92ZzroqM4YCCPTvxBAd3Yvaacgxf989OwJDVCipDLYcDj5oNhfZyPRnf2atJ89NhwEbFADFxYxnjxnlXVfvXiP48aLf6FvaiV2qbYmQtlBmC8GUreWOIZarekCwmUD0RIBFnXobBxxlgM1BQwV75r2OcH4xNkeSckP2LsbLHzG07uUrgROPscCeTz0wrqMegWkHaBfqvbOBdDBvWzdHxgz3qrtaITKnny3rhOfxEtEA5FGaM0amABC7bXTu,8f6fb52f1f493976,8035ae5d0fa7b9dc -5jjxMxwWuQl7NfvS0ijJ1gNbEE2lqGvl650NZSoufpfDPFEsEppboI,a3337f702af1524e,46de3ae14ad10eed -UzOMu6dCWR2J59f7jhI9xCn2grPCwOZCGz0OJD8odevrrvE3XsdO06WoXPKxSRmGLtDCkgQKiVV8IPtLGrPVWesX5T505AZ3S8ZhXulIRiRzqwihAqHShjN3IHCIkip2fkJsmTV383PXjbFaa1ba3xIXyfOsEFMgBaFTIpR7L6akcGuxhmmdDNk0rS7WTLH01VmBQAv6RrdespnXHF1GpCNBS3N4KSxMR6XvLTh220cuxqrFObNVpgX1LN2Tg4ri4B3uerzCLudx3QYRdRYsq42CcLse2BnHAl20bqPfg3PMr,2ff66ce5f3a1e66b,e0c2135455da69c1 -d07UlAliXZoRq2taRYNCLD9mxHYkaCga66A8RqwYW5H4MDkvoBCVDrhdh7Gw6akmWBTRKethk0C0PhMSpjBnCcTpwLFLtmrGIIk87J4Li0hcMBJPUu9FMltrET6pq2Ao79sKZmfQrTNTwE6QDuajvo8JCrVKxy9ht9ql09r2lxjOnSVha5MlxE2CtkCNioKX185ZwrPhfrvHxNLsBuwxP66cOtRVfIsf8kYhnzZvAE3C4CplTEHxQ4bud8ZwsIiWGTyeGYupZS0cae6A76cDlChCsXDmgS9JpgH6rDgSwWijjahBYpCNFEI09XbsBhyr0WXsTM4Kg2Cu6cHoCuodbk8uu336bY9yqBmSgK4dnZetnh7rHNQYOpNMp04p0WFjFrAZyKXWVNhaeQ7QVnJ3oBhkyPPAhAMwCIqazEXQJpkIzwR8ApPYdeL6d84YXcKzfXZznsWUVaGqr0iR9bAyvwbKZnSSNT8cR7A4VUlcyWkGhw09OMQtK4CVOb3ogo1VEKr2H6gBHAkHf6XSw7bSVrT43TF8gLD0MGbndRkJvyBYIllE681wUHyFYutdwB6z3wudBRZykF5Pnc68apKX4bmesG29ReHjCucyq8z8rorAnRK2GMhp7qzz7mJ9CkazeeVK7czVu2Xb9VPgHx2Uj4BMgm6PVregT1uCGbCkxPvNTWmuxN9p0Qwm3kUUxzJ1ZEvWeQju5hnTb6sLI96kTlvqJXPXpQ0pris4XRj8Wyg7BNbd7V8WXMw0tIQxVzBfNPVt4XaPQufabvoK1xYaA8dTtMXz4zHa5Fy2ltRXkFC8ih,bf02277dbcd84c7e,9b50a571b3f5bc44 -NXRi4mS8Zyw3tX2reAOMYMHhSY84j3Pa8l,291c83b1c3400d91,e8ede9ea34accade -8rw4afvlEtQcW8hC80EZXWXRd7hZvym4GqJLGh1O1LLI0PEbYbHbQzcHBGQARkKCuKlX1xYagYZl7kY4w4xnMZvUOTnZkfCY81KmCERBizVfIT2yY1Mv46PKMxcLnUApUUep3rxFSFMzk5X9T30UX2qR32c58iaFxNEsEWIj9gbFtK4DVoIt22AAy54thFxDvEUzycAHJs7w9xGAbE8d6Zn25FJ7nIDJMnWFcD08DsNRVMMUameVTa6NRfSgpIpxXaru4JjgxkTvB1Yd39r4,302e76f2f3af537c,338eccafe68786ce -TRui1uYvYrT7XUIOkO4U9P2nJo1In88pKBDrFhg6xZ,c23658ca1a24ae36,7ed5932036c5d38d -9HayKslIsI2Bd4xx0Rd7k43ERiKw6QtkcozSO2FxVeD4lA1Ghz7Svcl6Seq570diAq7SA6JakSdjG3bBI9s0Wr5AcZMIXr5kG4429FyZXjnzdc5BtULaiKqFRl8qobrisXp66xYFkYx7cb4X6BoTy7WYYwuLxUPPeBtgsNOCfSwPN910gmxVECIIZy5dboUnnwmi3Ox0u4GfilcNjLD0I48gGKHf5pRpEHLCKhx8e2nbXOnzTjEp8upHGg9ibiYV8CnrSMcARyKO8aCXGEns3ywLzWbNUJGIDJAGLBENlcjan7AFJ71IzGjKqQP5TQpa8CyZbwVHkSasXqZ7I1GW2mXSZxiCjlQDnqu5Av9KSmCZtXBWh16o5dAl9XbFcxYz4YZTWNovyHTVg7sRHArR9k8UXRBCu1MjN8ojLKuvifjNkMdL3zaHPrk4r5zu3EZy51R2fuZRHe7hRNfMF5RM1Ax62rZEvNKBsnYlJpI6VKbAbJawICziCZG6sg211dh1YNOrpsDvRirQvCAsuJS3ZODhio74oETFiq2shpezkfVPGjF4qkKfiM2Vhh62v7opw5kTp0KywdQBiwOJUaPBj2putgiCJ8HIlxBI3x0NjYrmev4Atguj8agPfGJLTCi9UfFCaKog935xbZIf6zoDZ6ZPPcYTb03ggn5ydUFdlxt86PlNOPMffAtmVlhUC0SHTdZJP4vmH0lxCt3C68IfbX73z9kZBMUdGFT4UtAZIuIGWQqibcnXiKBa20w67IoEFl4bIINQj4lEBrhQFCQa34D5p6SPnv64hXUwHwKpyKoZ3fv1zXpFznJ0MN9yLRWMbYc8oggbhvSR8eoKAXV6Djv8LcvX5TsaaLdqyghb1gwqRgoMo3Cx2n3r2kzr1O24AKckJJLpLgKxGYoYMa3MZu18PBnyWe2wWF,6a256ced418cf2e3,df6901e464a078 -dOuLJZssKnNos22gJGMB9TFXATQs7nvzNNuBVHiWKpSqgloeA2BazAqcFHMBcCZzBkNCb7EEbYNhKlojO3Fl90NOPzSLDDOKohyjOZeN06EiZEXp4UR0nD5MtcWOnqLwzKPyei2lgl6tgtlBhvU4C1dp0GVo8Z8Yd4PRDQSaWII8hQ9zB9dqe8EWBkpImdiI6f2TDnHWvpiRpYIYgoYvnO2XHwDuY5VpHGAzVrxotgf4M0mEonbs7g7uLAC4xtFQNjYS2iAp4HNA72LwPOatIyb7vZGhgRjkZkg3hdYFI4OjrrTNa8RfTxpH0Sd54LDbqc8b1hlAYJrpQjw4z48nAv5qcJca95qXcmjCcY7oiA6Xwz97JMdrGWNaudBGbTpE2hUfsB04MC90KwTFnJt1W8LWD9XjyGwIihEyqJ7pIyCxycLpOLIIuFDOjLhBJ1HMOJx1dSdsABZbAMI4BIMtE5fwfAJCWswdrYY5OqqCzkIgXzPVCnC1HVrdFoFFkQ7AoB0PJAUFa6b1Qux1IEdF7v6fHtuIBACnxAs2vEqplyWqemGg32KuGNLJVoJb6Yyp,cadaf5f269c003bb,6bf6b9a0df5f18f2 -ptxtAITXfDymQ1ik1YicxEtRv2ShlvHk6o5lxCEnxtD6G5vS553QsdhrHbOBm8xwTOdkSfdjwvarQRlJTLiP7xoWFZAF8qNsSfEczJEcS6CfDpCU2fvuZk9bRowApTaE9ESlsLfqKfMStmd1jNtIAGh8rR2cDzmmTyAo4x3Lh3NdLmI9FZdQ8Bojpuxb0Gsn1KnzNgdFfkKE7IkxjAGngVoJYlfeRL43r3nACbe8RG7zZqvt1gFvuHKkC2gxbFM3CalBO9HFz4dcKoGm12obPLuu4kkkvAPDIf8pJ7ONWl4aRayZxqwO4rNVp3xPGzs4Xq0txDl36bU1TVC8aJHkhOh2X3gvhTm8UzN63YhXYDsKFd9zmv6gc8ICsGNUr2eQlt5gJBno3UnPoR4TaEHuQ1tNuPA7BkwyBEiBhTHfOIfqLq8LPpHhDfbno37NCTHGblvHeMujGB3IfrRf6yVZ8HbyyxItjMoua74wfC95Ai07yShc4uGjJRqC6ipqaicpNqOs96hF8DQtKQw64AeAdIe69jU65TCtnckAKvXMGLHBYBHloDkZJxSTfZDJmOx6Zt1py7aKZadBMvUEYgYEdUWklsMfXXbi8FKXSv85n8HuKffgcju7wOp48jsx50C9nFT2lwJ9F,379ee208c6ff0116,d7668c8fbbc6352f -htjFlmVPq57DsqK2XkQgVxnwnjPVhgzBUTDZ2sU6JWiSiMwDsicyQhSZ59wwFIwkrZojouEZfMEAWtUhQPhJNvkniw2m70g8UgJ8tqnxNfbtLMOGJOxNlUbpWq8uguBSfMpUv699vyzLILK6m8BV8aAAzsBZXlQVd7WULJ0D82i83asWr8yOtjJVKpsK2ohMgJ7ktHkK1ikdhK2Tor6tA5t9avkdVgbuZup9sg3KiCeqFxA5LhLmVnzK8O0CtxQa0dbHtVXKBSpsFPgCwtWvqn3Y289t63EsuIT784vwDpdH5Xn07Ehy8CjeXn69DWkxKZo2QwNicVjJkZozD8nYbxsORthjbSntyqX90kk96N4Ivytyr8Q3CBe1OhlymlwXl75G3Cq4aO88TBQnqmzj04fVSkiRyPAvoS3kIt62YD4vBJ0UBSNEBApJzi9K2seUbTeblRJAML6J4rDJ0I7zjohhPgDhAyvmE7PwIdAh6iS1h7afQV63JINfFTo4zktAmTVdeG3qa5kmJBNTlCVgx7vbv2sfi15sTbdvSQ1EvifzheZ16orXYkqlQI4ck5XjI6RLooTZmGwh0tQpDVnrHh3OjO2269DLDGKDc44B0cnPQsfpZPHQskEc66L2cZeTrNq2H7y1amz6V9pwckMjYdn2t87d2Kx9kErHwFkLITa5wOLNtTmcIFVSth8VoBgBQbuELN2huqeNAUUgtcMqsWmbzNNnrg7QCjiw0Y8pbAOIQ8sQyN98SE5kqxIdtNbr4N9wnmePRzcTRWWi04MG2g0wcL5pTKSgpc2kDFhdUcbzeY2CTiuTBTu4ckFLRq,4b6ffae51132d989,4803da1024f9e2a2 -c8wAaVmsx28gqfj35VDtNXueV4cz0fuqntni8wGdkqTbjb8zgDstPlZr04at0aYbRYFxVKB6PkiRpmyoqLgCAjMKd5IvtgVUjiFufLtw9O6Cg8iUEQvMVm8mt6NplPNBpTvw742D6y86TlEzr0S2lDhQGaF7G30rq5r3O2T5FQZVVKTR2dfK9LCdh2DBH25rQNl5NYdzfAhoaN8aEi8tFUuVJDAdh8bF4SAjNigwV08i9cgBxZCqWDxbmxfyT718lJ5RjURwdZWx21MaDECXcxupWXrefzeHh9K2T3LMtyiCTOxVd2xrTSt0SaPvjVKKgYQy5IQIrx1vI,51593f1d0eda3cec,3a6a0ee70cdf47fa -siNTMuhu2fGPbAS4sOKcAL0iYusEaLoHyrEBaNoe01gnEN45MFPz9aVLOeyJdMxsMluCnUdOIWUvF4XGmrSStB70eAD5b4oWWMY9c3LTqZs3vPe55Qwynwxu2UPgtaKAUoBqwgt5xlQWIEZyxXHr0A6Zdfr6029bvj2JmM8V5NKZvPzZlo5wVUI73qbiwN8NmJmiRUv1y1zwroG7hJ4IalTA8R1R7dcpEFfLRr85QN19kYeBqpxdmLZh9pzOgXFGGemxJhtSu7UMsx7nRDRia8eDeJZUijdKzOAK72NTVYHf0GU55asjsVYcdnRtDr1jGESS7eQUzialf2aVdtlvRukM7ueGiKmGb23heUaRQLYhJNlEF0eHYedvaAX4Twz0klyZTtGgz2Uj8KKJdrJfsY7VyiQty2TealhFLSqyxgOmzkMabMASYhkUCGSVqfjc6lDn7eBiwgMlcR4soKryOa8ZFbfqErZck6sQ5YnBXlPtoW6jQQ7YJO9YSe2UOgl9HFZroAcFHbejnLxlXNVYRPpHLOMtKARG5a2oRC6mA4hiMp6zRTVF8lqSBthrOiC78Pyd0kUx1Y0T7,45c2b1f509ab9308,54affc580893810a -sDGOJDHlrLWfmMc121Ck4zhHrUP9spx9KP9IMSWrn5kLBGOsuS5xWVudgFHS8U9G3wkj4PWsriCilgCrB2P6ah1EJutq1HyWVF7kkmqUC6V0Ds68ahX6zLPzH7K3akl6frYG8YB29jwS7fh5lLNd2YEHSwFQoZwNHZJI1lSJU936pdYISCnFNXhBWLTYOO22D0usO,acc73b45c1d05743,b89e056954b8a4b6 -sdSdkF8N32WmEaNRBLbfvsCk8Q0l2MScTdeP9Q6WO5LuItI6GoyWlm6e973AxpAQleVYqjDt2LtuyWdvOLOJntTsUNoSTN0tW31zTIMdHwwANTDhIFgUnx5B0NeJPjOmfgmEzCqEByVI8qOtsgeS0O3D1uQkxaCvUVSJDjYrCCm6V9DyNFLNVSwjnUK8sp18nQBbfnvTBLLHt3wuiZ8NaVpxV3aK6pLXn43lGA2RJQcFkZZmAEsHtCsPv9qRFiwbFGkuacFIIRiPwtW7tJp7OBhRAIFwIalSTyld2vH0PnAxybPAbfPgwdTPPsYldp7lVCuwYzb1yWh3W78FQl3Natr7HJqahMfGsevv9lFXxMs4Y3hIxsWbrn2shBo7yOzMTH6rIssovY2A9p9bPYgil21g42gzd515Gg3wAY3pEd8aFVNHnoTtSdMUzZ7O51kHArU9kBI2Q1PYBYJ8c8IWAAS2rFeh0cCHwlbv8a81d2VorVv83uxpQkAQ1jPlEY6l8f0jCOtbxLTtRrq9lUpRx1erFvvYlOMqpAmikI6v3StEXUR8ZJoZs5oF6kzeI5kIyeJghAA8uMV2Kv3pZNiW7noQL1kEdyXjzJBwc8dhEV4GuxkjGpK4FZdPNGkGwVua9NVSjGZ0Mr2CMvM1D6Sf8kd1W6k4AfSRQ1LspIVLyKJTWBczB9G6I70rWpjV0i1MERwDMIPj08uaD4zVXfR2bFnYDRVpB8FfvWImKu1yfxMAIrGmyNcVJVtQppF1f5CT8Af2Obx3sZHLsaE8DbfMFPAJscbv5GTeTc5I9vIETrqbmTmaDhubrVYe9W81rMi63VaJOwY96QF3ZwCw0tSwuLFTksGVdZYELz9lLIvkzMRzOL5MFizdA6jhEgSIBhFa43FY4NbM6OJJu4HCnWVUpjgSGgNvwUZjrE5rUWK8RuQaG,6456691cf39d2ad8,a60de5c64b0ca77 -YIQevIQQikyCfgGY6tDeWwLBOUbG8fkj1kIbVr6TGrSxPbcC5LFqLPn6EALEWxan90aNrjKxiyZSE2UDzloUlhSOa28cF6o3PT79hpq9P72zUr3rBmoQwWAnZwhGuKm2zgdZmPlOjfzTaPvMgkOog0FGQXOpw6,8c90603ffc9c2da5,468c8b815e7b1472 -lJqD5zsgOp57IlIakLUKTPpRHS6C7R6B2F0BVq005aiuGkiXCMd8tT6KrtYaszFGf298bq5s5RUicLor3jrV3aiVV2d2zIWFJiG8220SL2iEKEhgrQDJVudaAo7y2qUl9n4dQasLIx9MWxDkE0kqtxh1OCr5eY28kuQzBjShmD175xJe4C3pmgymwY2e3HofpVrzoSUVLd2lJfd8FmrjKI0cjR6aHv3K,d86100387c01769a,d99c468f0095df6a -Y9GuviPvANqFcOgNAfZuzBVjBe9yEgIOGrXYNhnVi3RnK395TRkldFdNwSZ1XmT5fEAYz5IU4AQxS47yVmHlMUN5H2pckHjvdD6ffLzrOBKOp2ftDXGJsy4UbFCGN3AwjtlYMfX9LBpGcpIJDvpcYNTBBxdoT4eVnTALXkHTL1bXKxbccVy71s1uqZ0rrwcgO5Q6cUo84tqtr7nxBnDUXpt408gRQVvnDLJBhbRVnlNG5pT3we3UUGZGgWhIe8ab3KTR8nCBwKYguBSAiQV2XoZtrOQp9KQoU2yjphZqntqARCc5UQofFBTbwHbvvNz4T8VDa3C8J4uTFt8qImP3dI6Xn8pQ6GtcrREv1Lc2deCfzKa4qTzLfjlmx8flnV7MouFClapIxPgTIDIOV7ytT44VqZTpmwGfEw55Y5zyR86ZyMR98ZXWX7I1G3b2tThfV0RAERnPVONnC8dHdZ65Om,731af062de534178,b5265c1df42f78c -iQCx90dRqkrct5LYR7hTEvFsyDDBcN17oGkJEMoyLJ6SISwv9RARw19a4P2A1PeXCP9KgcckJUlYSyepTjVEhDjJzZj1Ot9H22R2c0z6PHnwopHtE7kTM8aw,ee6a0a75def23283,c1b704bd7b1e968c -Qb3DHjDdNyJuAKZfeob0wcAdtDmPd4W6kETohOFroefvSeOXpPCq1W3483VkOU6lVxkDn1FGJ7N6q1VJNHLY00lyYs0yoD6n4d1c1SdODUdP4kLpWQxdyJGbfFeCqmMDMadU9fMtnawmQ1VknzNhFAeA7BzZAQsAVXU86TzoDnHHIBOtCN3XzXHxiNkkyDd5GLFNrUwMEO3KHDdL3YyNzhM4ZsFNgvDlAFz1lg7ZdnwWa99F0HDzOjV7b5pCD6ttu5Jf96oV29M8DTatbNILoKP3BqK0DVg0PkUMI9IL4fbN0hgU3InkbCXysT019FJSXT9gXMBmBValyphr2c,277c37cd1361133f,c8dd311324e7290 -j64j6fbe7cz1uDGM8hKxxOEJYkCPY8euGLNllqh8fkL9xzPKuA3zGDJIECd7HGKfLECepxidASFhh55EMQKv5InM2An1CpVG4nWoRL3O5zAHaEDifMp73GazUrrc0zPyXdDiTTuLWQlZZUSIRcgqMfHCCS3yvjn5afgYxuZnhmkFS9kcUqt8wNVOofGQM6Fjs2FJEupcaVUDMWVkyZj17ORDLYG88QT8Gwm2otaxFd0YH0DxrHEnSD1QllLeKSmfxoay9CZtaoYrpH9ciMWxHHvsQiuzYindBNUBdst322eHuMnwUgxsMroiMyZF37Ln18z8xVH1nrvUYDrf1RNw3zT8zH3vaj8BpMj7o6GKfNMRTIRSqWyyyHj5ab5afesKl2mhPMRINcZdqU1lZ3XLnSTw813tUTYjAenym8mPxQYSTtGUAGeEBOATr0Rzxb6wgzOVYoB6u3xQKlRh4kcN3KNqS09i9kGQ0hwTA5fXnhh6a7b13VqkExLvFoifHWLdkFLiLtOT8Gjzzwbflu8d138B4JMtTKyNPoaEq9pOoRgXewSsiBI6PiU206kdGWVLmZbGNy8O0,b36036bf27e2c619,87d3121c8281db4e -oKIkSDx4SQX4XXsE0s6yPN2wqwsY5d4PGfhrzJ2U7jLrCrcaVXgrxBHuLVkKbWXD5kNgK7K85zZvSPE6sHSpfuAXsUBQwRsOMNxdQcPwfxskUcCFbXvVzdzdQTAKjdfsnqT1jxruOnAr6zrGXk2R3UnUvsgY9Tx7IhyLsqGUtRTe7Qxeka8gZraHutyQ99VCPDIEdvNGtlpObS1RHwgjvxYTYmZmd1jiXd63pIg2izmReNoC8nba8f0WOAbxPcHHGHH3AWGS2tlMBMpQuEvz7S3TJoVP876LFvm4P2mIw38Ae3fiYV1yl3DCD7p9I3BzmrKSExJCnJOiSs7h7ZAI8xqmHtq95HSSBGgtnSsIvvzZmhLSFgk3Mz7mQGySL49fzCI1HqY0xqe9EqWxD25C1yw1EQqx1IOCsV4bWoaijqcclkcxxYn09ciDKxIlFh8IHkBRh5rMkllb2paE3KRDV2QZJOAN7kXGTCeLkhxgKg1acZN2OlafBXflEYSbdYnQ1Rcs4Q2ziUhvTwQqRAmG7EcerAMTE06RH2Q2bp5mrQEL8Q5uTM6iirHi8syEzrh0cxs1coIc4DhuxYB9o1y3cZz874JHTEJt2FjpNAs7dDlYJu,2bf59a0ec5713180,6dfb81207fdc28ef -H2JgbtjB1ZOhJuBn6Tl1gWUxKvlVoCB7rphXMKubHL09b8hUJoa26VW57QqYd9YToba7li2EOLA5JhhlSZyZXuKXopetrPVcgtchT1gURtScfXMdFRpUMp2Oo1erIBpLnvjRaJNvF5uZrNqcnXOcM9k9FyM43j2JNNPYnbQgBTkV8CLQ5gZRqQQ69pXYs3zLO55rYrLDl5asfB1JdurDSORzG0N11LdMQ04PsZYAuAE3Jzb17HLhLyxelfhKOqSq83EbL6HkkS0ulO4MLTefp7dCWXfpdhmTVR5waDuixFZHGYpw4l9DcLqop6BgaEOzC,512104f122ca7fcc,eeb5408e11dcef9d -m0nF3pZ4UJC,d877b187ad4b19d5,c11eca27072916b7 -2GqsuC8WhFOxwsev6Qq3XHi8ObtFEp9i2eRw6aWaeUD4vEzMyAw53fvCD6OQX8QrE42QWTdVtPupLlr625DPyUknoiiX5L0H34cwyIskgpaRzORGQkaWxort4bQCDfQq4jvI7k97UyMtURSiIraPPf3pPBCslcGt22Xql2MXuhRxR74XBEHlqm4BoFB5XOSmHpGLlhVHjuzBXOXs6raq71F28MCLbgAKqvwvCkq1llTnoOUtbASxPyo0UEJrfZSxH2A7jybFEZ9FAO96O0CopCuZY2SkDNoLD2wVnUSLt9UUHyVuh7cYuLII1ynVjr2uV6cicVVJQyOuvNRg1HxLBpdMg8UB717UBOYmufpd31MaBtazi,258c500cbd8ca7f2,bacd8fd530a36c2d -SLQYSJA969BryJffAXk5MOLVXZa4bhBlRtL1uZsX6bZRYNvLCCyRJhgU3dFuDuTxHQ0my0Za7U3Oq1r2Dl5B2FpaTwEUUTIKXMYD5Nfd9G6vvBgfL4pVCY1qVWYeeh7UzBLEmgzYbzuwomIyYdBJpFNu2OqjDhyxzsZYQz1lsFJiHGINW8ajVKasqo4g3DKfbbEtClfM4KwkVbS52ti3uaJbChZIMYwBoYL0KQzskJrZrfGEkrIVqC2ndDUDZh9ZNsv5yAO0AiTpcZonD1FC3yiS8fgMY7BXNh8ld2JP0BdTbP5cngPADpQFkaPEXDRQlZQc735Wa9rUgvIRdSYsDQgK1hkxNQHfPgYQiPqcVDyluB0V4yxwOu0VNZyaFz2zkq5PufaD6jSycoychrUSe28Zj3UJtb89gHZ02G3PsLxnAsoagX38dmbLMBZjjOTAkKSW0rmlFA8XgQfvIoyXCQmiQGSC18CV7fm6fOqmLzSUQ03RF7UqXVs6jjls4KBuTeNJPMzsBPUdSsrmMKn4HGfMCgy9Om1W1sBFVOpKkqMkW1MygobnssljyRzn16jxYe6QHuaZizcwUzVU502pPZTzxcQkBACoYggn9nc8MjaMbjZou5utEIEDLsdGyiKK2xxG0s21XJrJc1pvpsWbZZm40mDKmWpkEomv6u7tWvkcf9f8LIU7OCJxkl7Oh83cNMtNOf7y8gwFg26QTEvf71DJQKwMANMWzzpibFDRPgoh3ELR2KPMk4x8qQhUZtr0MMDBvdLzS1CGf9jmAHL7ygGxIbxfcoERRRjTsEZMzJTnn6dBGDsClHw6PQHnUAqSmhc188u3uiAr24WXe6KmpU,9b210cd40748acdb,6a2722e468810047 -U74tVrh78mfE0HiVSmhIbyCkBwXfwXxCIe8mZKP5Bx,e1d9f8b4bb87c129,c5f2cb320f84c133 -OFDPuy6oSJzkuCfCxfG224mfjPPcftMKUmjMK3vImfLcFMCOGDuFYX3qVGjIqwtd3qgnFnLGq2LyKBrF3NCBlEzvnDZaaKG1vOsHYXf0f96gNAGZg98aKNz8Si9MC7iSbMz7yymrIJnxWerwcX3zoMUlAQpv3EKOZKfn76PPXisJ59RBSERyBVpQWHtBN1WbMdkH57DLNogLLz91qshO1nS5LIYYWwljcQMfq2T8F4QUMV0UUkvxw14x8k3az7vwm7dNDvjrvfImwoA,a938b7d226fc23e0,4f8f40cfa378d96e -IGRS8dd8NPg1iSUIQr1QI9nJh07hK9YFxl088OTBPLtquz3Xdv6GzkezEYvenXAVW5zqoviiHrGpPeg1s7GN1bs37cW8vm1whiW39hR61jiUZpvnQXI4UfZXry0ukFZToMTVVNgim8gtgf12WBZowMBgXQhCAWc5G2kWOVrepCQQkOE39clE2D9p4fU9Jzb7htHlZuD35yRNP3iRNFNnJkKwJZm62YTxanBhAj5LrgTrsHy3IWVyXmLaVYZf2tmmEguDFk8ePWSUfzjHuAOrp27M59wSbsBtsZtMrh2aMo6VFURM559pqSBSyccjTFIUBFNPqMbp49fueTyYaxdZSBh31E6ygNYNhswPHjOlInAcSDOwWGfv8JY5j82zGqQb8SBZc8EjivzrfHn7vvPnCN5I35Wg71q6eGtkHWVDV1HArDGfsa8O7e8gKxR5zUsFLa2rz2tAoiFbpTi1Jh2pqqDXfmMPZLiMChR2g2pKSOvLo1w7mWz79fxWsGq5qUK6KQG37clGmOWFYiY4lsXe4ruLIxCo1OtGAlWZ59mKGjMKDRfJd2dWIIHycSI1dc0qknJDkPOEY94xMFePpLDtPkYo0P0pzN7VAqowOjhPCW24kwDY4ZSE79oDAfUcmJ4XMQZN6HpkUVnsGyBlr1JtFzrjMbi4wg44Lwym8ov1b3bweRZfVCGs8UH0FykfD5aEbXasYim0DDbK0ui5CJQBhxHVfuOI8ThuqYAWTp6PdqTap42hE70Y8QFydprInr1qcG46qHK6fQQQuH0T7k8oxMbqHrZCCKY6j50RDzZLRcHc9LdVtUSLdzhO2TluctTchxqIPfmQHMhi3hcALtwZPauJpmh8LV,504e5e66e164bed6,ed3b3921e01e58ef -v5SmNvmCWsMM6qb0lCCZtjDoLKjg5FzhWTlXEarcu4c8rAAdfjeHJybJnnbcJtqM8KlvgtRL42z1uGd3SOH3Kw4n9Iw8gyswFM73q5sqmBgpw4zzf1GmklKJUXoJ2wUY8VwwRNNp9zsg0B3GFBzWSwnanG0D5mm1JcQcNUwZYlt0MwsmiTTxqHMmRD2hLpfTlzL3ibfs0AbUj14FVU5HFOdqWbC7esTqm9GkysDuqeoh6rgESN6ATTy5rDxbxXZL8cWh76sbStJFPE9Oy7kJAWsU1IZKLCIDteiJKq7heh0bYBXzAQPDvVAog02p4Bsb07SrDvEfgf,f92176898e9eef9a,3e7b656aed75e3d0 -WNDuBBAd81ApePof6G36rOO27dkfSoD7EJF0cuGTFLSx9SFoAMfVEU2dLjGNmzYewh7IGaw0TO4aU504Hoq67K4gmKNQay0XQ9CC6dLQPcSbe2DyyfFeHT0AG3d3F6VA7omGAN9VZYoLwLdURZ0oojWo5qCWVdO7y5LOqXnGMknKMnAs8qjp0X3bne8tUWZSOcfCJYzAjU0JD0wszUgrNe6paqcpiK3xAVMystVPV6VdSnTAdoY4ubIG1pWBFRzeGxtqkA1JMvHrcvrDK3UItfhMSiZV02q5maZ5QDpxAeMwJiIGH13O6y6DDP4FQnCMN31SzXQkWTIRlOsOPE27grIxvHwG6LwqRZw8cnGS2QT3aIt54hxpY8M4YH4jCWkpWMBUNTJknMZSXvrwIEgTGo4kk5cPwTKFTkTzqmUpQcKSgBLG0Rf69dMLmyuLCEixfRpyVFhZ8Cz05JNxjaqfTbPmnjxPUEeOr0sIJ1YX8RSfR3Jcnuj473j69VpWFqCPclFvf7OmUjFdtDjdiRA,18acf6dbd1a9a25c,4b669a2e2a08ac57 -sqok8SkK3BYUDnOSIEdpR7UImPWqo7fL8lAlEEyStUNh3dQz6YLQEHeJpil7UQCeij7PeHeOYjAqsrz2IPwJVYc2vXFDVmMIcNjunor2UpyJEspW2aOK78Uo878hTvjzAyC8GDNTepZrkNfs0gHBXCuq62y5PtZiyNQKx7zoJspvUmkpl7Sn7SUgJQh2sSADQQ8LTSXhIg9PTY6EuE4m0SHJ2xLVL0gf3I2Z7McxjGFsFHTWdzo9qN2KTsiOPz5YoWVX8E35gBxwDFYS8mDzzP3ls6QV6sMeWIQiVy8tNAFdfVhXdvBFxwk0zcv6Am5m94czV9m6YokXrbJwZffYjKwUh1tVxnPwqHFetxyw3KNUXH622CEnJ7ImRvJu2whcyBsfHWw6V62wxnG7AOmm3ukK5P6ORH9bfcJk4XGpeTAKHZtk7e5EP72YlOFI7FIMkP3aTnzADXHDbtfCE15dR2frTzNYxIwNMYV2rAZVNaypcg3VeA3Oy611VSTAjWFpmjocnEgEVovpCKGasi8aOCr2ayFUdPaNBGDdIuUkLXhDBB3mjbwbu7M4kSS1ibACRnpHh5nH1PlVBGiBc7GJqgGl4xOrlNjW8GtABKLdHErB2y5cZeFFd10KNcvIkRiuowzPfUYPNqyG4pRI,dfd612a4d003d114,44c596b9c9cf0809 -W0Q8Y5oMqB4rqFNbT6zOd1DqQtNMcgZND8kJtWMFKgZgKXdXTHwBJgyIWOexi0n121n4MQPwyn4Mc7xFZGYOgdr4I2mQ7gxTdHK2Q3RRNpD0v2W66PCKaKstukVOtefOFUeltyJu4YbDBKH8RyaYPtUw5ZzSNsLO26WmhdmBrC9AaoEGWEXk6PPrqEBaglvrb7qhFoPGgDU0LBiC3JQBbY73GGThO9DuR7JFjHTLp6jsGT68Y9GeVAXypJ3efkPeHnzjtBIG2bbO5SvtMxqCnkAdtDLV9FJFbURflhB6UYSuwEX0uqNisKFD917Tv7qotzb,e2327793ff944a76,582c69416c8999da -I4RmO0oZ8ND5AGPof6LqDryFQLVSGzNMWtKmuEMqWDisQXPQ4LfXP3Tvk37ErrGyVHrXTpadEPdTt0lgY9uUvq2NN5XC6CYGkQLtyRwFUZiUMy8ihNliHrfAcA60NXAB9QGYmJhI1vAyUMQaCZaC6wFLNsWuM3sSVxlE7991mQoGhgQU809OTyQf6WlECGTWnWoR7AdsxlW2jlhkLVonVTrk85gV57M0zc4q28VWHfMKIxDuM8x20wzBqtyM0xNJA1f3aN8jEIt7adszAvtZqg3e54HtUbbG99seM6Z53gnVXLpEGHt6zsGS0eMYH55VPOvDFB7keKdm8NWkESYWxZgm8zU1SIIBIBzYZm1C41gVpzF2CXTs7FlEUU83aOyYbf1ZnhLfFm5sWHYJlkR04JM5Ft5qPUeDDgnj8fFiYHhwFSZzIc4pMf8kcfE3eZTDxDpQ0AootA1RhXgupUfVgS,3adbe2d8d9d116a4,e6258dae2e917390 -TRaFdYesazUjKtgFG2DU1B5lEkMxBhuVDA6btR5rUu2v6ASdtXrhf8rkhFKSLntzv3NuNbH2FGUarNBHEXHG6TmjUbukC7BFx9ldVYqsgJ2tNVBwwkR2CPXTUB7ujjShfmvKtNVghkJEg0VIkMK5OCw3cTbYJouL07U7w4EMxuaFyYyGShpOr1kEt1JaxVrzWEkOm7PBADxtv8fumegokFYfRqv71JhgcBtjSCvnw8bga1JWlnyaO80XVz0oshnCjBSouvZ0riNyJFaaZugNTc,bb2565db61ba05a3,c4a05ffd3ded928 -t6P3sKcctem8OlUd7nKWXJPGvaeZIqb7AYLUNbek1zjuEdwBII9Qp0MDbB6AKDgfDsdx9A5xYHpwYRftjiRzRnlnaA4JGYs5KAVjogApKBZSBJ0G9FHHQQB3iulqVxCZ9ubet5CMvoogAL1j23SvCZYAliAXVzlDpLxQEnjk2c0H0BWdqYCyyPFLZAjtEgPr9LJuRtsT8Vz6slU1rmDOQKLQNKQf0pwamBspPQytqsabIFEkDI8K8sAOkxh53CO6JHaOpriQ3BcejWujCLGr8n5c2JkYOkp5QmUAkYttQBreryyt2ejbK8D6XA8seFV2fKy1nAHZF00AWrHruPyeAJwHmDdSoWvQNjRBwTx9C0JZIJ0p2OADhaXLDQFBkcHKCWIBEkcatOcBzNkxIrcclU3UVlpcXjiE5B2XaheYh3azt2Zljn1lO6Y47GGAYUzPbFjZkib4vcRaR6jC7NtWJLv7picYLgviaSwSaymPiQYgR6a5XEEd6FR5Cl9RTJj0FiRhOM2zYWUoHWSqHMF6tZuI,263e85074f3aba5a,2b99c89fb97f8933 -C6VV3qFgI7QDVOv4zcnATi4VLiv5xF97ye4i9ZrbgatICvKZW1Rn0d9Tr1OyOusuwFLk1ZP6RAbpcecmYbYDfdi8i3EkWLuz3K2QmkA9UbkhUY9XfLpuBhNCl6ICsnc0vyhOWqNor8AkdVdy5Lk7TCfT6Sago898gEm7HA6ynivLLAufYHMaj0cqLdfeb3ZrL7IPHu2CiCyGw8wYIHsTvWnnc3p9jcyPO4bOM9WdyKgvT3MQQbrcHxyEnxROEscmT3Ji2WwIG2sQj05LiZJqEkTwvG0RMKODWy86IY4cy2jiZ4TxOoWFRv3QIkS2PC2hhYLgg5rYETJYDY9xZBZLYlubIppEjob9rfnld6rz32RTxLvozIhYgLfwp4QaogkbUio5MB0QCjOSPVm43TDRCYAkvkP6co3gy9vMSWIsZjHAON73LuzChIIXzd464u0Vf1799Q3XTDg14AESZSJ1kA28gQHYDwupkLzsD1nyrQ2XSqkrxvFqHSAwojAiEspTb7uaGB6X0Yx1gQPSld2SrMSvtkaNO8lKRuf9WPx7PNGIz7geZKpTUZxm1c4GBftwlR4BHSJvbG55Dd1NSpHdPXD1J6TOX32bz3Tmb1CRcXrzF1zUkBGlpyUCgNv4Qq4g57vGNZgI1sFy,cd79e8a7584e2a4e,91f582399e626c0b -osfVEmxtNO5dSCdpKptlpeexMoHTDXSDN9hz474y6aSNOJ8RJ7uiVL7QnXcbR6jjbW00oMj9jZosHrhmKHTIk3sNMRgTVKQxZaJHBYaD35q7YFmOqGkWfgmHvffdEk9p5SZTJ3vw7PwAcMuppt6aQPN4B4nF2YFOScUbg2IQBnNCQY2AuqhtXH9luCgaDQyIjAWf2vQiLGkYhK4ncVZlvpe3uizEGUixho76Bvk7oyltb4oIq0nR8emYKTKsRXoF4rSPCV1AFWlIxGNRGe3YHgQl7NPtAgfEzPP0NrHUlNegrJ3iS8wgK8kFaRAmIv9MgpZcv9ABDbEFVJsuWXL2KIP9P2qI20klmp5YsyZjqAIFu3lXbIhLR4cGW1q1P3Y415DhAxWGh2XMPyg9JY2iKPO4EciQ4WdBbu3AoX5RpdMSEFfCVKAiN1Do9dTwFgysZO6TwD6WxXioTADt3rd8dISbhGbIr5Uip8rYAJzeNWa4lKpyRscKG9Ig8sa7rFnljgd4VNvwRoIWlc0toq59U4hh3mcSFP1cD6nHusabT6OmMnSbwSjLtASb7vDylH2cPtVN2jNYQn7HzjNIEz7aqrVZLOINt3s7jCGhzu0tJ7soCcWLCOuaB5vg3hO0Y8gX14a1GUjLEDcbm6iXyVrxpCnD7CbJAeoxMN6hNqmYenBJdUMchKxTKM8mOEv7h2jB1od6KoBBKMDCcWlwHRr0X28d2xGQHoiNXvJg0JoLPdxZnOSf8eGt2dm9wQjbR1QOlVmveTKl2Hm5CoCyiD5vZgQZ08b43iVxhJDxXUMC0ZmlUJeHuAG8KwOWMIeKs8psVXESaSS9HI9J0Up95E5LjcDwPQnc9VpZ2SmsCM6XOMDXQl,884f38be68500e05,aad6b071fc11da38 -GxUk0s77dKquKi5Fv3mUhv8gAPB384oYHYrYoQmWOUCxQE7PgsRxYcbGuSmYCAU42DUpOEXCiqIfPXWVLcc94F04muN84RQ2w05EHQBa9EhbS0wIwqGOnzq6tKatDo80VJP2rPpzm6Ib611JS1J3VB0FrqdWt9L48UTP4DNTvwO6Bi1qBKvvOUH1UTsjeurYGwSwqQYfagldnSYFneVVX0oS7mtVZY24XafJXuOf58QuipKouRAYlkZJ61urNdx7f7,63602f6373d46f44,dae7bd5a3acbfbdb -cbkAIoSCvvp67NyDl1JpYz7J9wzGZ0rgb9F4MoNnn6jALz8YcXVk5sETydjbLxnwvqecC3THwFV1HW1auxehgYzSnL6YtMt572sTdKDDNbsTIdOkCqWiZfhMXU58bGd2GpnvnMoevY7RTjiCLrvThrJ9VVtCHlr3qBeNt5mjvLCn01VxJPZkXaPIENfpqp59feNXCmy2a6WQzdQhep2mPZsx5wrJM7LiDtWtEJPizZyART21cY4eIHGDLDaMTjynJFpm1JvqBnKy7g03KDo1LXnyMIfHYC9IJqalKTZfCeeVz4pDXdwiq9l9Kl5TwrhWjdI9OTArNEo55OQAD89TOXpLlvUtLF96qRGCGVqINN154XrHcKiyTVCvQ1hYNTuJ6SNIEHgcHZ83CoOkOnq5OewmDr9f795M2toYmd8GEoraM1NxS7jdL3MkhG7RLoCaP9jbnbHpPy1yJ9QFw9fIFYolz2GiWu4banBMsSg853v2bIseAcFaEreXeXXWrSH2qOpxkndJPlGiBSD2qkgRGoZ2VFd2gaf3oPKKIITGvyb6CXUZ8PMSgQMf9Y6ebgT3UXOSBRYhE7i7X2SH6L7WpzjBgEnmD5yPtSpPHCuSfhp93NtnI9MtpP0RIilTu6sDuSqgCqppnrMg1Psyx3m3C2RitvKZx2JLEH6ZBfngh6DwNGIfoYhmBlaxDJjmexLeuG32HCUfkKjtVVPwNSVl52lL2NlnGjkRCG1t6b7girGdIwCOWTbL2dbfX89bAJbdxSrtiO,5f93fb7fef1da357,ae36ade9824806d9 -hp9aTIvz8cShfHvl2mo2K2kLqw3C2bOjT9qu3,838762b858defe85,76237b7fba7bc2cd -NAdNwdz1QXDFEOhD7U4uSpLnk70CrhkCv61kfbwxmbxmijdyfRZwlMg3RVaWbdFrmsXEUBhGT654TQbLgw6I3WLnoq6SQLpIk26l8mLUjSW4GojMuC0f74odwHXFqZX86ruTz27obf6W0DfZDpncdnD4JcFBoYudrC4Vlh4CVzhMu15drmrr8JmjFAT4JA3lhDSQtrIOc4nS8ZeIJqnNpm5Tno3zqVvrX87P1xvZ3ihTbFjKNOLJ7EhUAGi2xH3S14kQzZgpzG7JO9VXXgppfWjh59q1gBb7CLvRFEioxMlgqXjQu8IW0aaXR2ccNZRyM8fTxSwMu7kfAqs72jn602DnoyMx61Tt1IGTc4ALNgE5v1hNgN7fLvXDr3vQTDWC9u4ZCVlSnBKal1a5eFGVIf6bGQTpRISD6zEIfKvkyNRUKVZf7QZVFVQHte9UlB7UlNOlV9AzbyOYGxLg9z0dcoCFO61dLDt7ZhYwO8QqZJrIAXhxN2FE3jw9zd1kJkvBPp10HkaJfhpftdmpQrdzBPKI6hBb11Vw5D335tGltyr8j1psgavTy5CzdTR35rPsWKPORB1xIk7nQ6XIcoQRtaBzNMTDnFYuRS1svWzmJOAQfx4euNxROz8Q3WibGBP6GPEvKcRZ9JLfHGxUtlE0S4ptGPPEHnAYLEMqzP5pNtnJJeCJkEUaQe8SlSfgBuA8et8YQ1nutHG7NZc1miSCrQEZ1VLosQAHVCJT3unTSwGKIlbMT08FsbSieOdVdH78SGtKqhAxQnhcssBUzD55xwOtOxds536Aqaevb5Obtvmmi2VFMWmshhwoqgc5BjVWQC1KhYW54IXTjjnNdOzGyqnE3d3SgswXFI5BmzUZNgfd0QJXmpEjbRrHTSpqNQPkPzIrpiOlGqoMZVXoqZaaTBXXhJ68LA2doJ2sMGzqMGGlhZNrxwju49iofr8ljnc8Du1jFLoeibtpsqOz6yolKahd3QPcEp,e4b2517618854884,2075b7de650a9de8 -YCM0T2ikYEHyi5wYsiqXQoSOmIi3t5fPOU3xHFZUAhk6LPpyU4S46IGnyQIj52oEV3fbYrxayr6uegS8oKxNohqhtPdXLLIvJjMGLv7AXH1aPUnlryM4d5lxoexJnOXoDMas907BF9Mti0wb3nws3GmeCIkOxTL06ZWIT9e7mKoFZre7BWnQBsLsUZvurqmqGTLeGKmXG8NHsuxpcLf9eVXnfWBOPAOUzVOxC574vFE4gMyiOgAb9mfBAmsORsoflcZLPamIBIjj7o9Wb35bY6Z2mzz1T6uRuzLWWMff9ioj5B1AJXDZG2FaBJ7dHPDSWtNAn40brVLORqcQ9FYqRwzB3AdAGue8IF9UOsdBIY3fzR7XBF0JRYcCU8Yg9tGv4lU2vaNdyRurX4ns46Tn0QphAoQhHgyZwkCddiOOr4TreF8y62iPsf1jXfMpWNyLbYqz1o7xqLev8CaAJRTiCrejaUQlLVIrkUE3zRXfWALFaleXTd1RZ5avUa9KwuWJypxPNx9EFBoiB9HAmDuSYNclzTqPGcagszgyyswXct7NGVnQEz5gFY1AUnKgjtSzOy7f7YT9aWfZYgWzByiPMF2MHRonHs1b61EzLNGEtgwqoLthsT0tHNtzhtNCk89zLOpCj1BA2f37ckLCfvtWFNEdcAKBFdAHJmlJxNPGAxzJle3QuoFGM2nqFF5yM8xHctMbUMjQ2Ym0qkUKF3YAQtN0ZzPad8uRM9Wb6ZzeeKD1sg,9667e1362261f2d9,435cc01721a4d951 -BdguVWwwqvkBaK2qRNNhPioXV7r8VAj1s84HdTo4nlvbxYSa4ybVPw4nDBU0YViqujN8s2zct8GFtHQHcB50FIIbHf5K6YhZPUzYLxgCj0p17ZbMq6jaB6tC5pjfEkNt7SfOyeJiLDheiPvMWJQGkMDLF41XChY4Tx2ZpL1CbCEhNHyuU6pRFrTMVwBqSwkOSt3Sp4kx6FvtO5l0hbDHLSG1HF6HyHtbFdGDQVHExkYYpthbL8oEVLQXY8Mxsw2w5Mw5HyTmvItd96JpsVJg69hJLk1LlbZ1xCrE9waTVtDx9z8YZXABTYUb9Dkeb4nyTYPWSGxCJv1ss2K66iItUZ6Q7uSN8qkuSHzoTj4N1vtpgqbT41woct8zOWPrDobEQZKAJc5LO1das7ug8hZyqF6vRhOhkaZW091YzAVLr36SknzyiHL8aMDJp5fG58Pup7Rez9Vynq9qGHraBvExeafWjtMZNo4evDm1xReqJP3Nj7OOKe7fH0WYxMMH7fuW1SkyYoWG8OfhUuiUlOzWORogRNwyCunTycGG2e2YYomPj2Zb04KQFNvxG3ATqUN6Cw4TrtjDoZbqXG277LF0we86O5IIJXkGhx4SBTXj91Cc7OZBisAE3NpyOw85gSydVyAECL8gk4B6hj,d08db3c492bd211b,7ddd1a6fe3269c9f -DPudYsVYtZSLcLpsYJU6Vf24rdW0xeov5Y92oJCP26S5rOzme59ODecta3fmummBKcBAaR1Fax80AbIXChAD2ee39J9sy5ii6cr8bhsS3jf7mSy61HJCvsdkMiVC8NqDx3KYjMKkkUecMuP5K57QjIDMZy9Hul7EXzWiqHKTRWPscfkuJrhJmIIZT7xEkTaI9c2vtyaa9PyVMfiSflKX4hJjYWU4YbQsHSwv0QjYNSUWGciUjx36Dn0Rf0k0Z0h1uAts7sY5sq6HV9bE8kpmfLgBIrfZWTmtVTX6vmbYjvoz1dUaxFStc41fwW0W2YVsbehBkQnehW47eOcKPHyzsYhMqkxKioLmOvG7ElhDRLMxuYahuBiDjZw91BpwrlQPGZOP7xbEu3fXINBGOG6MYxk7wuws9nr1wxqjs0iGuiMw7zwFakiNCuijbKplrO5Lkuxw9r75W3RXoAl8aGcrGR9ZfGhMsWFsHu8xROcuhO9ZVhmUPCTopI3hDpA3SittTRLdCs45U,2b912675db3459ea,6845f46b272bbe12 -dLnkEI3YFtu2YeLXU8YY5eK4xo6So4zPpFwK1vmzgekioT9rQQK6i9L66J1KFe5hN7EeOaNut5r7wrlh49a5Ty4COAXw6zZo1o82BRiVdewL19nt5BQ9iFz40iEB06kU5ybjIFhraYxNrFJfh6OCn56fRhZmzSfxZGckTR8D8UhtiALZo2w1KBXbeAxmaiFHTpFbrrgppnB2bqEpGYUVKpGmv609GbMPpE,668ab4930e9eabeb,de2dd891fa0050c -tQtc9BnjqoqNSeBnGXEMUcEPQHHi8GKcgbkhEILp3wVtD843NvCLWDhdbupB4DYtcZuc8Ou1sfH4eExxwThvqhYg88cTG9m5VjE0YjmcWmCe3sFljFi8l5MXNUR29niMNabpOFpFsGosf0rtpEtt49dxWx1aA90JZzXRaX5iXVR5LDCvuEwIJ7j5Jxr6nzxJNAI78K7x82wb1NYwzk5vdPJFv7gahc1OAu5Pbfbs1GjF4eOpHRyPQNQkbc2argkGHRVyUE08FzE3JIgZyUggZvJDBudaKI8QVpg43NTI57JBqEaMgfMcIXMoCF49uFBlN7JAeLmNcnvO4V4q7JQPKCSlw6S9bTV9qvZDdyy881IUpioImRT1E93UqPJXPuzVrcrXFvHCLNJCh8fkL6E4KgDKbkxJeNaYAe0MyoBEySNfMvIEtHwSekWhfZPe7Vv0rkIocfFr8yRj73Nn65y7Ml8ZbTHP4wIFWIYc2qryWuk9U8IriedPYOUapPwXsyqC9vPviEsD8zylqq9wtfRmIbP2KGOPxPMD1ZGqbraaE3W5LfXiGc8Ikd1AF3A3SQUBaBKXb2hMKYR5AJzJaqhaFpJhCs01yaj74t5OIx5CZp9oaLpmj0GOk7yEY7wRSFsMyUoq0H3jzbdGxeQ945h8wPsDxeCKu4VqDvQ1Jvyq5drAC6x7LDo8nYRW4fzrkXYIj7dspkqphvHYrSWD5AaVBwqe7NMBu2gsgT2SY4MVwJLx8DnCfGO4oJQhlhRyjZUOeH6C1Y8yKJVCaZq998lMMVMyZ2xedZghvyFFrQ2NgKza3BB84Sh9lFWZcOMDnxZspAJjqVWP5p8evwTCmfPnR2jheprWppiAQopgeU08M17POoiyj78WPyhgHnNh0j8OUh5tlgxYfwtpJWM7CFwkDz7TS1IezIvZag4TPO3Vi10mHptXboAG,3571574fe9ad6838,ebc39402a650cea3 -RYm9nF1QlxzP8JwxugP0R1odEGXrwdQhQRcvU3OD7CdrVfUueO4UQ2NSFrsdW2yUhPrJc75t1uzso71RA5vFA9ReqOoaauqEDymA5Kh01pjQRRfNc2qRIUMjALunt8Z3sTWZmKlUjZ2a5yIpEgaWlr3VbvNmSG78trDM2RZyF4qIyFxRV1wsupdWwZDPwI9Bc1wftcv1lqxLdbIrJDbpe7xsggtaCmBgSLJZzZ2mvHI5qSJ8cHnqlCp3ZzR1wH6qh9X8v6LONwkPmjEMs8JReKjaMYjsFU6t8qvI8RrXX5EuekUYjGDvyphoMiWielzj1U4DTf4Us8EMMwFbNTrTo2UZhQMhhUPdn3tcsN8zI1DIsMPFLIw5NoXtSY5wq9dY8qsZK06SrHYuZma6UhtVhBCzbgWbHJEPwwVl74ROsS3L1Mgto7KzkSzyaO5W3pHuWSFvcpcGUo8xgU1lw7NWdq3pdkqa09g5pvYByaNLmYfNqLWMiUe9pmnCRqj2f86QUBIFiV8XAnYXIZtPQy5wZ8FvZXd6E2KaVh,507e46f30bd20e76,f1b188ef2563bedc -d1aAyErodJW3Qk63heGi0vkEEVNlo9AxoSrayui341FWmIHZiYNWKpvOfBR9FnDS4CwcIDWGuRn8edKARyQaChoIdRTCScrRen0H4kHTIifajViwT6xo64WX1s3WZH1U63w0IkcXwGcICSQlbVn2cGG3UBwuhtiZnYgU5iozNpnZv2Fqme0d98bP67KNnBY4OqV0Ljlv5h2LJputZpe0LIxA3gda9QMMGK2PNEeqZQWNKrzglA0ehjRpK2sMUl8H8WciD76ggCMvRobrWwqMVZ5Q6J3GTCHx7xo5OnmC7uyj8YnmdphTAQhZ0bJxHi9sOcASo1fSFPGXI1GlyAaT5qajWDClEFkOnjYh5W3kDdPQilgVPEsMV1zWBg7SRG9jsThul0rAtTUFIsVVY3sye6k1tavXRH7zHs9qRK8x7I6cWBJpLRJ5lAw9AntYalz2UNqipQzzaGKzS6agoEw3UTZJLc9tiYN9XQFWtVxEc5pmdP6w3l3w4NikQiDUaBhQSPGMPx7vNLJdWnlsjhJsMygrfIJFkFTO4402Sk8tEdOm4OF15cq2WooarUJQaIqcGKuaqyFrAjFflA8tfuSwcS7Imgm69Q07rXgnw7a9vBn9WucbOX9vdw9Umnds2vlxs0gEONRIX27MlXKvxEGaqRFpzLPJvMggMnP9AwvfbH116pRzgUGIw3F9dodOntgforIiXLbhOXAAm1AI41DIRt0cMtLBxvv6P2KY5mlvKaQgP6LdqwORhU6mTLiestMsCRO6vTPlIj65vYXcsvhEZkDulz0cujKyyUWPAeW0kRFNYN0PzeL6MvpEl2Ch25t0yvzdiOwv3vtDakvMSjQtIkoGwKr5hVaUTS0CwbpXvkyAYSwrQ5XaWD5sFBu0Epy3cKcIACbuV6cYeBlcRSGOL6UfkYVVxAUZQi1pYwMIXYyyHb0qNLNgULek1SMKVY7gi7g9Oa9ze,df0c94672869cf0c,e05e419c99e2a5fe -b8OxTVRRL9qunHnDfcPBq2aE94l4nwNQnAXwqLIGEGt24Y1eKoZGMfVPm9PIic0bd1EG7kheCoff2RagMqjAUAhwXtwfHcDAcspyut6ZpaCEJVFtQOId9xcTTfqIrebf5bAfTc1OU0GV2vfs5piEfJ0ZaI7gfaA4R1oBGPZLXi57pmRr4iqgSqPBMJLI7aLZQd7Jo33nF71ISCKP8gUXmvZqYHm0jvKxJHfmsxfJkuyBMT7P2LMldZ6slvokU7TO9hgUyh2USBs1kE4YVIRaoZK2LalEyNZozw3UDvl1LBLKReVtLJfrpGznRIpwrPb6Y6knGgzmREGs9HcbDtfIU6YmkObl7OdRCNaxgGOtjoWJ04p4vnpYP37a7zWiwBSgHKsFLDHRuvLYuhluiydyFh,bf43ebc548578f78,ef3c3db60ee861e5 -VAgVyJ6wluCr7PNVx0Ozd0puhM0SWUrFaKZDgQMHhhAYF1yOHDCImgo6CkCDoXxwTd9Qe7pSNgQLVSLNXj7gHj8caOg0BKNjw2Mrq9wEsBj3LUkngRmsKhr3Sch1YjXVdlNsDt3RapuMZCyufaZOOglKKPrggSlgyOtEXkOFvel619hyVlyy0BVFVCg4oqrPy6E6B70z06A2K2eCRNJeRQZDlfMaPNAECtUgZ7CSV5IbmYM9xPADO1YdQtP1Ay89MCFARX0dqbiXwOPYJv7ukcoCPGP8xP81konJlsD1wY5iDqQ9IiIdUkr7StRUPthPxvQsCLs,3c8d44a5bcc53621,b8dc2d61e0d97448 -6VPN0vFx9zMZkgBHDpFHKapf9KlborPbmA5rncJqmtBjZKhFr46Mmwz0HILQyLXbsLgpmqEX5yXz2a8db8GBnmpVcLqLfaaDs6pnMFE9ZZrjBtA45eF5NKGHA7snFxRQtY86tq9lieRmyYQ62v6PmkwKvMmpJmAfN2d32RJomdxj2N22xl72uhbX9RkSFB354TBJVzNg0sjtkPPW6snEuRlKU8tSks3IdKBUrCsLY0Z1V9YiOiFkfgFYjVgcTwV76NfyAO9eShsMyF9XyUfy8XZQiMaCst92ikcdCucZhyuE7PXIxGjLS3g8r7VRZdoHpjgo5XVPYjLuKPEUMFFYpTzHUWPmRZpq8zeRe7DkGuf1eZpa2T8CMTeOOiNcVANcMNnlZhiGzV0lLqKn4waDsIBjxP1cVTBSjoOSo2X7tMs5PeXkKQoD8Lm2EaMURDYnAbd5cDz1yiV18MFNPJkXTjpeaPlSI69MvqG74LCP78w0MzRBO3wH9FmokBNeBgGHGSESek9swA6n9IVwXWRk0eaZWSpc6unkpt65mJ3nq4IAQJiqF48njxNoShjDj74InvsYcPmbwCkcXFvutnVebv1d5Wr8Shp5fXFvx58KwIdm6bi6FsLjxdEjkKtr5ONSHhYNCcdFOv3ZwoxdBr4QBxkarieKLg1UP3ANQUoQ9NL47k1uHKkKBRKvNrI6XDI7V2ps0LTpLabxqwVTvDkksYH75RmhwJ8JhakPRsZjj3IJH5NsBIkwaohrQFsCA1QsZXyA59QB9IXCEa0UlQnqL0UJqVfVliYLHyZspjjEkvvnVzJ6oV1bzMD8pC0fNDqPmIcczwjhHDfahud26kjt77zQVsR4doXwNAeQQ14EBu8qqRlr0SQFm3fRS4fJCTFeiAi8FtkHcj9VDrJsNcJ5ZfblDVgf2ZOzaZ8kkghOtmXBjv8ym4hcToeCIaLQQk3sBCo6T,2822d892b0667762,4f7d1c7d49711582 -7kgC2rUaHjGfT2V0d1VMEpzgK5z7qFjprNZC8by248o4jzxg9mhrpaxJf2EKj5rp1bPcKG77nMTkHhSpKSBGAwcvkZGhaZ8YW8uAl6mfhrX2jb2BpCtSKM7FXk9rmSO8rxcG3C9tjBFL2rs4SYDS4oVlM6AcPnaoSTvOhMPDgn6n86qUUWgYk4gjhJapffIs1mjTgFsVxueUVohOYF2E2pWTGK3vpqPH8eZdeiRnxboN9iddIijRPHNOfVRA2PEtNrRqkJdwmsuba7UE0et3D9DMN387S1dqEldsaPPtITGVV9EFskTRVz09mTj9UBlTccKVDi3SnhXFHsYmN6eliJaeM7ivQiMsl8HU8rR5K7xUGKn02hQZNYst50gpAcLc4Qw0hYwseVEcxzfqR2tL4QrmV2g,683cd40016de3151,2eec1c2b0c6cfc75 -BUeokJxlhHqUqbng8cP13Byx3fsUlG5011cejeOk5wZa73RL8n2H0Ai6B0PbQGJ7GEy5xGI1PCHcOeEDrUQh0LbbLwxwJQXt8pWTyMiSDWfNTnbp9O2uOzq1OUCnRYn1zcHuWchHM3qtAfKnPpoFtHQa09mA0WECyygIlPKFJO2Z0ijn9bhxVibaYHCFTMr3qMjRgRJSxhIny6j18j2fXm8WPRcuOKIVDy5XaaWFEQux1zF1Y5NZt3mU3UEVsxZXMFy0pSwx4mpyfbengJ4MbJf70u7J4MKdwYjqpg3PVSV2jTIfDXtGACHwuIio98WAQniKeYeXW9GlZIorNEnpNduwUr9xq3dWjZuPVBYXs4C4y6sTi2YihufRSNqw9CA9M1wlmwDbT9PKHc9014SE0cgIPECbNzfVbHtxuRPaWayc7aUJHgvYkLskPVZfNaXfrpMqzRhsJeOJA4EfqTJp7nvcCQOqG2BrhDy2KRymbz15NW7Ylemo3xtRQSFaLiBpOh1A7QzFCjCwDW1RV5YCCtzGls7v8EbbTgRMY35WSZ125YD1WK31sR8gewelAk6ckS1jNBCXnpHfELIBfL5G9ORM6qO5,7be0c015b63021b,7bbb4cbe873e6df6 -RJnwDTm3583mXeDoa9PesWWjF0DErhPNYdA0XYyxugqk8MlPTBZnbawtx624t7SfEgpmBbfxNKOnEjw3I7rs6e6CnnSFd5pz36K5ZbX96fTEDgFzpxOiIHf7UYv3ohdzwvUgrjbpT1CDPFAes3bG6ByNA8qx5XNiWoXwJjgWasKRenDxLRtm5aSV2ERVgM73LVN4SicdRg9tDCx9SdMj9aWyg8VfzAYBMZggouaCJ5zjqbwAxvJGSm6ViakjahZxJB5FQrttVINpV0GHfjB7WgN5RV7m0mWwc6Iz2j8dnHRVFKJ7DtURw50qvAgJQH4vzMINMhb2Hc7Dmx5qos6CdpZ0iD7luBy8IdzKggZhHMYhLc59E4tun2RJxMcKgCUTJiAudSkARPYxZ6NLv6aP89uUsE2hZkhXyCxrzjEk3Lp4qdwGJMLF5rzWyE8gdjJlwMc1zV7Lfc5f,8214d54d06acf8de,c428dc59613792b -8oyP9vrtCKWIZUyZAn0UhxRmyFYPyz8oxpUYVdLWTeQyO36K40GWS9NSGQc3PvMK1yN7VdYq8yQs2,cc05135fcee2c2a7,c807e676522132fc -Inc6cVXDsvvGPpPOXZfjEaIrBJ3vy599ofTJZ4ZanDttV2QxgBpsUhOfUcF0cQ4ziElT5fl0Dy4c5YQi4i8SJ33WxrWYhn2wKkRaz4kpHH0vDbtczJooK70ost338tRomWwP7QQVUhS7wcmwKnNGU5ku81YmWY7maSTY2B9FhcUHlTOhiqCSYUsLQ0WIE5hEJCXHcx4qmkO1EtnOvjWtdsT6e8OQUJn9a63BGwcOUjRzGrhKByvIYAPHXd5rxMaXgKMheKQBdhFAXMv9KXAUtq7BS32FJVz88cF9roekqoWYFzpJEN4MpysvPiqvo8fGbd4BxL519hplcd1GOsrB4NM271ssH620msTcfuhhUniEheV3N70eLgiKo2nErjKqe6sI2Uq56KULOvmPflDqgrnKoZ3AZuuFt57GuEgN85RBbWjVswKe1l0Lmp80WxkKrzAbPQj1yCNFYZnmwSzS0EqqPy8kzwGUuwCRUFM7oAdXywgvMFhGllIwgjJmdMb8JNASUhxLcuKYu8ULALGZyAs0XgRUcv8RQDbOsn6aXMNCwXTYjRNsCRwM8xPcTTXTDb9tt3eTaB6E2yRE8yNUXRzHGGfG9iVk6xA9JCxiquSWZp9qc8p0tJQRzZgxs2xdtc5S8cfa6mz0K4Jb9dESpqvfkhpo15sI67hAWIdV8G3XPUBm6RdDwxC5WZ5bktTkLwC2Q10KxOtpiNWovTwgTJzq3RdL8KZbWaffGvhG2s5zr3Y0Y50feJxUX,79a24f91459993ce,f82f0fd90e865d93 -YOoxxz3mgucM3uOQocKQG37z0ygoGhlnc9XJpCej1R6AvBdRV7mEgG9fV4WXA8Yoall0RQqwfRwqMcMZlKwr4tv8TVbYBfZWA0WSIIsQ27lLfHHDt1fDNe6q5LfGnJCxKo4tRPJpG2MQgZvrT3vFvYxlWalcbftkrgyyfKDUhNyGXxGPd9ID9W2xrsMrZfr774066gFwiVY5LLHUe8IGWB9gtmKRfT1pbZ4xpwAdanN1bz93Oe2dMVNHZ9TcUejKCQUbSBlHBnXELoDshNKggnLo6xzPfXeCAoaxpybnuJ6vhg2GY7gtidT0jeuWp2KVsi0AvCKknDEPGNA8R6s7EMgevjcXptqKcLIvNJQZMx5eisHAo3PC4E9YRl1jTMYZkUvJPxF07bXrMS8Vwr1BRPfZQzVYftnkbFqV0QpzPtX5TaSHLOa6Q0yNgZrPWfVvVmp1GT47XGWBOjZ38GFLMkR5Y9IM9stuvnQ5RIcgk7wHGJgzhCCnPPzgu0Zg6f32nuNv8w8lTL9WUa7fRW2wWgURkv1FLWm5Fchim8oDWPAOZR3Aqnyr8nywhHxQEw5q24miZ8mFBuEzQQihxfYgF5p637ksNmTirQTgtsPIco63shBK1ETekiF5s5Hj8DUECqfybmGs2LOahDxZ1fvrzd8gLDl8nxgwwiNt85v8IXQpx0wmHGWtEBoXpXWmGrUvw2SFVwSw5idFMtvtXjQKEgVgF5T7Wx3ByMb8ZBEOa68WJv1zMvrDdrQyj94Uyjte6Xv9tnCRhdq2daRFgh6eFUaojAPoxvt5oOEjPT5D6HqEPNubVWURsCHcYFa28pVYbzrW1llIpDIQSJXz1QOCUh55oPfPVqy9t2HRPh9XOBmMpNyzxEGfd83lHLXFpF8mDPZeHlh2a62M8DclKgwBPgI,354ff59ddb57006c,fb74db89e0364d50 -4GtQhhor4u6zVcOGTxDVp1P5YtPdpyJB5HeS5RBLsVIHp1RUJvEh9OL8yZoLceDMjVhQQQkYkK6Q698a3Pa2dLIp9O1FoHCSszs0PRT0JuFO0YolOibW39042msdE6n5Y8AkkpeJhjXQPgSioCDnTV4hIq4Kn50Bmb8XhrxHftNYjhL93dlvFTZnJyOWu6215fCj7hMP35UWT4CBAs1QM3NtScaJpy3cuM2ZtpXsHtBIrM4DQomPzEMlvabUnBan4K9LYtxxP7PjwwG6CDigUEo8NR4WXpuU9PwNYTZCkZtk2Mgpe3LrraUImkmSU5gO4W2BNJMRETSG7qJCeNNslYkRiwzoerHM5mF15MpwN5NTQeasq5zDGUtjJAvLpUJbLHTFRRPAPW6ANWEjWTY6A0p9GHeMnIcCjxNp4bjdW4xYCN2Xr9aEDLBf5Olp6w1T09tZQvhp251yirqLyUTQT2N6e29B92mUF0oyTlGq1dI2hqk6ZGDwFg7OpryzMnv03QfRs4dgtBP7fa6QNC3EvzKWDT74djmOlwf3Q9bYE28bVQvZ8LGmw,bf0d70381d2bc1eb,7222e1bc35e810d6 -MFFgPN9mwFYj0Jz6lSwSsggrIwsf6HyDbp576aVhguXknOjVYo3DGZ73Pp1VNHxGakSi8IYe1AlTh6uE2ywaLAuzJzXRqUIB60bvPrktY6KPF78fOJIdoimtDMYRqm6ZcigoGiSeAytgaI9J5nykwZfhr6OUTRiX9BHCAdFUfPNaUsO2GaGVGkCqDW6AOQaJp7O2QbdmUOYIMQLpyGfxeV4XZz9r0vHD1Yt7kNUFY5YEPxkV64hNJXCSTmSkEDjAI6WNxXDDTvbxJMK3TVbMxgxRmnpvrr1NnLJ5PuNGa4xQ2nCJYwSzoMH75VItV6sIxUsIG5giTJNtY7r4MO0Ka2FTNNBqkBsmgFllnE5tW54NgHl9WYkwknBs2RwcIoYkVXixAr9TDetFcbSAWU7MNdf84IUaIP60H4NYozvN7xyWhN2RG1OoACGJ9Mrvn0TghwYqiXXxD8B45q8Gb6189n89H69Vvgmh0OypS4v6oAuuM3g1DTVGefaqiOycKJV96t9SXRkgP7eYg05I5Pj65hy7UH2GcxtlAY0WsvZQA5dCWIppoksufK5OwpWcSUzEAXAiSp0o7nqcacMIiIpBGp1X3Q6VzZMFSH1Lf9v39wlhHKmetyWRfzPi7CTaX4HtJ6nHNoqfxgCL7LFjDPS1bx5h73QRz3WuXerYGAA01GrHTU7YcsRyCXEuvKjaip3deheGXYX9kjPCCtHaUG14pOQaX93HVl3NMZqedbIeZ6wyU0C8AcgBIUfGf9BsquYznMVBLf8YDk3Gf49yLOVpVYcfXuW4vrU2Es4VVYeFcHFLwnhl1xRqeOmL8QJqw0Hxhkfyx4Dx9gVpZbM6FzUHr97ASEsYK8fXNSceTNNO5ZDW8Aup3JHDZGmx1gMRA9xNhM3daxOEjcdIK48fefQO,13062e4569581a57,ddb97253d8c7533b -rIiCq2m4pn2S6QDRqTaxjx1JUFlTGQEIU2IpqbHmtk3zvbkFrR90fHH0P1tqz7eZJ26v9JfVL046lw4T0ysYVyTEEtB4dChzyx7sA1qiMOzD1SgSmx9yWlMI3pzlmbEkdMTjGv7BEVCSK3hs6ejU6bPKi0GlftUwBB0h2tfOoKnldZaZuhgbAWihwyiLy794NatMqDy4PjewUVDpy5ag0LGQ7F0xFrXeF76Gsoy5dIm1bRLQYR5HvxJIasOk1p0dggrnNDILnBzdIKDjCAK0ACKA97q2Pnf2PG2L9iGvXvbrQZJRZcSDf1KXWaIEWCzVOdk42S0MOBSWMP4mIn5C8am3o3YJiE3i7LEU8CARZhjYASxwxoYv9JbWaEYNADf1euVWLEtyTTn9eMEdnfxk0IRjuTJNY2OHcakl5xsTKl5sssDgfJqzUtxFb7lSBHDcJd5yZwETLro,fc6f38763c022982,b966c40ffd156846 -7PDyeWLqxtIXwgzpcGvPoEa9qWDcbFozG4h9ZT3q8Qi9BLfRtWF2Sqs9rbOkDdBTYdI5CO5rUZuvWUDlsSs6arrdoDz985IYskws7AK8I3UMOxnVirORNyP6d1yo9agZwnCFzPMSNLzPOEqU6ToRABAF7NMAkwYjQRAaVqKhyKLwcDaUpaBbSBPy1GsPna1JMmvSsdgf4oKU5efNnVc1JH7o89E9BqaKTm4HLeCyT1OAl8PSSUg0qVIlP79KbxhtXIfkGVta8Oi74BH3jgqC5cXaVNJgiwazYF2u5I2LdwqULprTrTOpZdlNGAsnH72nZklovrRpsa82vTU5MWNU7ZlIlHXIOiiVQdDaNHQ94sIxMyvXki6vs19tFq5jU5xBmhGdPItd0spxjV23pnv2m6rKirUUwfrgG7jqZbUyHdMWekX0ir0Yh82A0VZqobaJuSyLBJNFjAc5ZFlTZfhDSo7MeQfnbYS6aQW0RuUHKQSq8D64IuwkZDXJ3c0vEGbZzO1YKh8Bp3ryPEqhQ0vnQsLeJzNxqfQ8STNhDFDOMunNx3BZg4WigP2nhQW84XmPoY9ev1jnA7HBbUWLBtYJhmKnfMGQDmz3LxLZd4x9Ni5kf1IV9XC8TziMqoOkwavabvMvjxMaCe4FnvCAye4M7MzgDcqMF370Tml60zcXph7K7XWOw5bY8QjnQ46XAPT87oUjUdxePzy9jBykCbOHz6dhw5PlzPc6am99FcWW8nlZqblAHwvNstx2fetKJpfNzDNAi3kVsngQwqEytCNdne5Celhsg0ErQ1nIaOY7SNulxDbFXCmFaq0viepLy4FVxEIY,91edcd515f38d266,bf22c5302bae54a4 -ExIqSOZdWe4tyNPXlLHSsb1WfNJvL41m2ZNBM0n9kcb488ratw8DD1vIl7lI4U73wUxOVffS6bPyGt83aPwwLZZvnLCuyPDTArS3M2LvvOSzetqhTTqdpQakxwbIaAflJ3ibTgpJnhVBKgnOozkRNx8A3ElXZB5u8qksHr9E7PS1X61q61RUVqfoVHrJD0KxIbKjS6130xeIv6TfvI5tnl9mUbv6smpTAbKjcXDUAkW,c517a4138fc6e4b8,96554e39848dd617 -NflsJ2nh3KrqmSrYO5Rc2jcBIfxNickP,caa121c0f5ae65dc,f4482d14c988e8f6 -FJ1EalHsUeE8iV1Fpibw3VwA4QMlMzl6oWFlYwwTP2N5K1kqsuRQ6yAU5PeLIYlhBod8E9QVAXsYeNQ2FCioEZaImYXY5p0W9zG1SJi1w2wYPd6jFF5v5pCUkGVmo9MNbHAotOnYjCQcUJI0dUln5Yioxi4pNCZy7KrrcyoLbhmdVENYF6UqGQstbbkRLiedsBjBLeoBnFPDjXpxvDItqOKQ4iDS06m26qNZ99uBiqyDn6wxrULRrwUkT4JQKnY6awRl71ObCXfdGUhLcgLBgqPZHq3LlAdkSWHsMlnnRsu3AYdEBh30DcCsS25Csw8l1jmXMBjH6eFF2mKHHHwiRrWE2F4aay9r1e7bdie6QBUIaDKbngs6HFdxsSAh95ZA4hwQGrH7uCtFNFfP0k478GeCh4SaYbVYf6H02AmLzac4qGYenL13PAXGcSyePc9GVOVhH32fGq8bdl81ASnc5MxmFd6ZxC8r3U5QfWGLRDeqK3I3o2EMkAK29Nzx6z3WvXQYCAnQiQ6kSGXjWX1LlYMkk7sdDXewQQfnWQLWNsZrHN8J74jIEqMMDsbjYj0mzfA7BbYA7LkFirCsKOjGXAuVPgqaC06mm0RBgfrDNYiY4gzrU8uKYExPF2OzM9LZq73y72UWGl3lX1G13xu54QzLGOP4Gl0iXVtRaJrahJmPMAAkA8MwUOxURl3dvAGncfU,4963ea273372b589,fc3ccd0e2052aac9 -iB5rdOAs9hOqT1SVpvdjGTvnZpPfGgqloTu37nPlzQOJPjTrfcCNJu970a0xCKj7gevZRnkxIoXVrqaYZ2NXHxNd9mN16J0IWnMF7CazWITCO3ouA4OcYerqyRrIR1aOsvJhzADW8TxUtvkGPsAnLmKoo9KkL4u6IlcL0RSE6hAMoC63InmDFTkTTrQBcPhMirpKWckufetzYkAs6J8HwRoQae47W1pXsYfMCNuI1mqklI3rLymY9VZmJ3QAQB1PMeChb7kijnCg69hoMOi8kgbH8rqTlEo319qA7B5JgRjAFv4DI2AbThLqwuOm6aPXbAMrNND2aHCf881RqJ4GBQhbfQOmnZ31h3qpf2aJDtsAgjACaGVqxuPbgCkemGEWyuz5fjNf7fcxKnYP3rXytrcpO6M5YGsa0TapeZRN8rDcxPOz8v6dQtlJ4FWDXIdYx0C7LAPmthu4g7HAdF528UxZufbTA1xfNeHnjrwPhN7EtkWQ083VGO0hNwRveK9Ppd5Wd5KA2f24XqSsgCsJyKQaslPWn9FjGLRmtBkQwHXdEYk2AXBqkzYnYo9AqNyhkGhOoJwQxibrr6jFQI9AcFsmI5Faun06llFbqTpvBUEJ8WwKWMqjyKfZNWE,a4b3f90e304c95b9,efdd93973a66d64e -z6T5D5Jm8FrIHuVLdonzFpJTjOWWg54os699ppR5FZ2bT8xntZUmZnUWE38Psm4wxfi0OqT3nZjkQD92t5V1ti4ayRgu5S6ewiwUMNyx0YiPOqEqX7tinXhrFzy4fpyGPjeDtI7Mfn3QLi31SfuV6KmXXDKOqBO8QfyNXg03l5zb378URQUmrqRKyZM7TH1UklgUDm1h7f1lwCVuNfzc0vh8yK1gaRXBX4DWrzayP9osP8Ui1Osi0icIJaqE8bgo9SnsLAgOex,998c116bac8a665c,16a60cd917cff592 -XVWHFEawlFQdfW5rIxtEINIMrrtGFqq2m3hYgvQBWekExobklTaQ1VEM9DhPmFHoKLuiYpNBeUdeV0iwzNhyfkRAq7ygmDxD04fvYoaQmew01EwYRiMXHfYDA3RcOV6NVxnOfUVX6RZXNTzKnbfykNiCuDCKzmPdDj4KVN2Zi28T77DZMS4TpBbC3SH3joCQRYQajqyWQOvogecrElGShBvxeoXmod6LrPOH7xp1LaU1XNYLBxQxOhmrPnO9dRsHdguzogknHxrhKaXMDwE371nkcqctpyCCF3gvlcIQQIFqcTHwoLbGEfYXKzCJkAd5WjHcEIt58GkN4k1Ck1MVpzsJjP1eqefgu0oEdl33I8doqaCm5mhMBfxvkRSnmodVkK11enHAhQ4PHYwONmrhWdrI73xNqu4SCmvYxH2xN5Ub9y1UM8JmsdTqpO8pKMW9Q0JzQUSgB9w1JDUYhUFZC6yDMk8wszpQM07WaqDddoHlNOC6LKePH4kqSWmcfsQHmRoLuW1ajEBMzBwIEperbwqWH4EUm83DazJAoh5R86gYRK2q1MML3Sa4LHOZfROxyPB3PBdnitCWz4QFGlY8ne13vtjnrAdsmlLPTyPnMtIFQlau8OcSEuiy3hUzAQX2rME6rthWAIIoHdGMuXzbW4WfyTXqPng9Oi9EIz52Br2dbOEbw25pdGd402U3hVBIrs,2224eb9056845bc2,2a94f046434094f1 -m1KBv1x5HvZi7S24PAp4IiBAcqyoDp8M2KEtrqxmfjWxKaNiJNp5vyxyckpGaeVZ2LwWuGrpfbdTJBKCygVmqRjsEA7Mv2rrig8EYgxC3IG7qMFNqKDxiqvhQoyzktElwXexYPFDU0NFsA2n0cjMBvWEsgyazR4kLlETbmkUAMQFcTO0n30j4LcbtKaMIyhNqSyyfKyaMHuPdRFDoP9J6tgBIDw0r2LZ3RQ0yRHxsqdvjbWdEaSveJqD3GLwOufEaTeveCBIGNlSrJXZjuzgq9Cqs403dvnxsVIz0siCyJDlo119ustJjqJQndP3yJ3M4QIqEI656nGvXnRPg0EhzjMqUsi5EYJAxE27ZG8mtTZIAUlvG4ep2ni0YYxNyl7yiYxZWwBQNeQhLRkCkLA5cT6PWqgCFtsjuVwQzU6oTPVGaKwdGWIBVkMM6Wko28g0,f38085f552223f68,2cb2381c809207b2 -6ddmMM8eh6pc3jSCHhpehngWXQkkVLFJk2pzn3MKRx2k0w06wKGU27kYHPj1jgndGjBXjnoZ24eGHakcK9guLIHmfkhG3LJOmbZaTXpbmAmN9giSntxrDcCvy7UbFYkqNKx02D0jJT2JuoEVBFHP0IwMW5Uh7tejJ55BcFZdtGoObg68RsKLVH8geReERB,b9b8b4e8bdc8c066,fbf644b3a3a6a96f -9wcPK2DFm1KD77HroU9SpS9trTLAkVcxG7h70U3hhnCu6EIm84zu7UHpo4w7eYtkXclRnSJvLa8oBKDjHY2omxu2FNoGN3BFfGUKl02LhvZpRwzbl0CUQNO5HwhMjeYPpmezdxTLWQQLJdwOrzIK1rSxOCIqKXr86avwoRfKZz2rTaMCMCMQLye0dcZMt5QdJ6zV7AkVx2WtAu9whmaOg6b4hB25v6vRklulOOaakIXwc3C5XfvqDA1RB6CyXYhqGMptrvnrJurgbry4A1TzIVQXQ7j0vKzvVkVSXBvtqowIwVpSKWeJ3KqR1C6rb0YbYvtA3nljj7ZB61DrGA6fCBDudgSrkJjFfgPyHsMwsgArbYesAqhQCGD9IzcLycQwfK4Z8PUPmarSyRRqAbaTLjM4Nkaa7WyNfZPxu7sQFpgqDNYm1CLtHVfmFA0NTTNkPUwSUzrpiRr3Ee1kPeT65CoYT35oxIKGowThtKdNB0fqICfXXT3UgkaW5m5agPLdcevzc5zBHDUCZ9nGfKSEEyCAUD8QeN6jG9tVjVXhn9xJ69UH1KfMMGoGbLUBYy7p0YTzPS9JOsWtQSHkgsNNtjY9SSJ5EpgdSDA1mRtJJC9UhwqIDoy9uxIfAtcdqwpGThWXs2yICFCjLTTTplPAv7mPMQxryUPXx8zJz0Uq8UWeydZQLeGo35fj5wivAKz2weA5MCAUGolbJNuaB5NG1jl5fGwrDbXG,2eeb67dbc51e53c,671bb2ff40d6e95b -goxuQ0o9HApw9Q3WkTOdS1vmXGpcWS4aClis12kbrwFHN7rdt2xJvI0unNoldmekHLOryTLjci77EOtS5fifpxZyLVISDCxiAssfDixDrVhQGAiQejQ4IFS6NILzbqrzqx95VUgUlqJA77qrEpadY8SuCrSoJNfz8HjbFp82Pa81Bmu7tDI8yC6AlyQJxlzjz3k2nFsz0eDfcDWPkXtc9V0aOjIYAz5D48ST69JwVoQkPZGZheXpfTOQ,791961eaf6a4609a,80bf13e68af3e0d5 -eZMW9e7cTvRra6iwCguFHrPrqUMKtjm9JA3i4DAtLy4MSR7V5iihtcqZmU7hMl7rKBmi6Pk8COmSoWQW1gYS5HZa9yBaSvkLd1CgU6lXBDxuikGOhELklZc5GmJ0Iru3hEPdP4MDGKZgMcxCEufRcCgnwoiB6lPFK0Ks92c8rnBrTTbEExeJ3gqlEEKaBoXMF1UofQPWq7hs4FnDpK296TPcjb44Wzx3w1RYonQLaKJucTEQl1rkMgXWli3wtB3TzdDbKI3p995Qvd5dbo3GXpTHd69w1RxLfD0EK2Af6suajy5HFU74TeN4XX9d5W75RCl7AWF0zTdUgFvf1NhWqcFvlQBCTzhttjNeCzuqcXgyr3Vgnpn8VVN1bhIsETDYSW0maLMlHEFrXwEEcEjt1htj0OD,366421bbb3b923ac,3977c5aaadb506af -5K3uevCZM2Dn1HwNps9EU0FnNe8oGrHoI81fIHwwtEwY77hOPKV55K9vsHzpmKhHd3znaDYamiEa2qLayS2ZzurciIWpfYy2XnyoH0Xwi6Qr1laU5m65yYcGmRjVZOA18RNO50EvqVvHPJEBnov7l3aMkjfZKjhsMCC7U1qfdTNvF4Gdu1NfZlOWBly2FOFhtii9KnROfR6rzp4KFqZAGFpoDOOq6l7Xlj9T8gZMai3JGmmRxJY9p8wARuxikF2On4aVi1uqUupyZoNKGxdyZdiNbmrAutVYQiB2OCZP1iapvVsNzpv5NU4v09rApJzNgBQ9jVDXdqwg32mJBblCX4z2bZfNYyyMPwmZMYNLUqpGWxAiiDTHrwTga6rwlOtbAghQWRczJ4cvDEyW9keS4mQrcbKVf,a8eee0953ecf7954,b065e1e0ca16952c -9yiHiWlkRShXTgiB7YadqhCjrTdqDEI6PzG0VO0V2YbXbD5ox9ibs76oRC4HEyMmV6QHOoydtcJjjPerkkEHCtFwUoB7VbAjBgxPhY3rN3jf5gpTYp9lkTA5mEUKAwUwsiA9WS5qHML7pifIomibuiHsVEandgDLZbrXDkGaYbRsrLUSKujklnz,58839518dfc7de31,cbe97c3c30f86e7b -TCEkPRkbQRHmIrpv0c366i91N62FsTpCCK4cmE4oBAxD1skWCP7ZvkL6i370VgQSA2a9MD8P0dOWihSVdcVX1u8mo8JDv3AemdyKqkEJzgrR3BSGUt3jsHXe5Qz9VGN9U81QvZTTIEragYLh7ZEQtS,c49b6ac9bbdb166a,1d50274f78045940 -ozUunEgH2QDLhF7sOpOrHA0OJDMz9MNZ0SZRLalBGNVsySYeEUjtQG7zlWYpLtTX9PhW0MKVK4TcAvPkJsBGx4Dv20wOUUoj7MkWal5EbsnvAcpdX9xKG7BNNQZrj9QS60RaudsWFmibKQGHx1JvQsykxUdWvzRUIaqp0wQqjbkPf15MVjtl9vgghCULSma9uFfBU1zwMHRtH3m9vBKD7Ni21UoARV2VMIpLppSC8dATaQP9uyVtajcQuUvjIfBupFLV6Uo9kv6rMogKmZe7PTJ,14151e6b8246e406,9275a2bd9c12064 -rd0Cmk9Kp8RLS9OwT3ZBlAxvEb0rm5Ud3VSFCj7BzG0qsOF1CmTTT9Gqcpqb358HdlbRRLYRujn2LKBgqCnaoDY27Uk1cfzeI6N6cvKs3XXganDNCagqQMAIF8iZdED8LnZZQPADXdtRiDTtlbP5213WwKlAA5j3zS5Ib7Xc5EsmliLNRTZRk1k3jWCMmJmmeSzXYnVVaQ4ZsKl2j1rTEWLllwg3GkLqZBrtFHdkoDLvlvLBumK46excpSl3lolWf4P1fAD6hVcgomE27f9lgrA0swTmolwQBpWdTDqNk7a2STd9e2ARfzkQr2bi9C9dgBJRJ4EDOHOIomej5vqYAkZFZJiJ0AQK7wxzRIjomEIBZCrRJICoQkWkyqrIQkyQhjjb3Yg9GgMiHPHUCy49OHweSlBUbOqhJmDf3vZqsyjmVXbvFcZQVpFilYuZeLdcXsF3uqDK7sSHGUJPvykYBdYEWld1UK7mBXLZiIUYvzoZFigNnJ6QGoHdgWK4L93w,8ed367a5d8a4e3ad,fb141e4f121015db -uzDv9RP6kEzgG0h4peGh4nPyeyI06D4XrJ5Rp0D1PA7xupB0zX7BuTOjE2tVqMjGdDJi1kQWp3BckPxXg1b4UqZD1lF8BF9LoX5MQIKbZa203vMPN9DgzcaqDdx9MCti80vupDctHcOjhRZV1IEL8zwpvoESjLyfXcoI7sHLvzWCLvqmZqO3OuOt2zbNL5FlTgkX2MjCW3a4EcBHwynN80I5inOjxkBXEnTVjIr9Q2VWVQKg2CDwPqEU3keeIq4rgVOGaPJCQRVxvTgqVxUvJx9sVPb3lVD1bAmsZRhR7tddm57BEmToHchcp8pgR84WbMb0LWTf04cBII5UoFrMgwZ3YEMAUQU0u5O3MtnZp1NNwWt9ryF6iolhlHI2PMno68JAQIEHCLjAXMXyNYtRAot8LwoMBahneR9yjleRxMZx09AlriZy8qHOBVSQ5AS5GSvUIePXSyG9OvVzPmwJeoeLCS0mU6gRuEfZI4Vv5UotcwX0Fuh983WmIwGEVur1Z83WprovzeBfD5EOlB3gyHwNeMSaqSzLsHgXr38xvqn1g3UEbi4lkTAulCqYYiWz38IUK5yXZRJyh7Ci4Gf2Y0UjRP8ZTAVmWNHdfT1cLi5MoT94hdJUPsFEvRD1Yrky2Vdqs7RJkKcChkXnm0xN8Jr6qtWMU3DZOtfSLDX0iNh9zqXCUyqrgg0rk5HCDC3hZGyx1bpjxTegBw4NPAq9VVeFAsSunW9ueJBGOjVnUUX7PcosWOFbBgagluFpQVL2pXUlYRoNWzOGBPWqeRu9ZbA6n7ENjrRKzVnOeeVTKPNSj4DUH6RP3dgQbYYZg7DeiYSA1UCXKSBnaN4Dq24BVDLAB0YsRLvh65u1SbaAefCalhoIV7qjZYz01B3dQs6Cj0QZxImZblpwtdFfl9YZ3TIa1aBDJuWmJ3M7YmhH8Uxbhigyt04IQyVzSxv1KkVx3amULRCNKeluz5mNi59ZjCAsvq,61febda50d7b827c,d3091b9a1c6777f3 -wybKAkKrdGu5dh7eP7vDliWETiBHfamrbaxWatMTAGqnJhS52bX4C6IAKxY5PqDDk0Fl99t2iRvefSbFZXW9Jvclrui2MLan4tv1KNTSxF6iQyz4gs5PGynKrE4qI61uEsHZh6xDjlux3ehJ0cGm1b7zyHSdrj1N0SHQ29esjyVITtgxi4m3iyJ7TcABp77Sh6CeaAsOkRFsXuUw3mVHpvSiqLQsjtX1y87An0U71W3Cpkb93sRacY2J1gEcVegoRtbhLVXi2wvB7O4lcjZyL8WZP5KXcsKEHwqtdXiD9M8hipD3MwX65e10zg7SKY9zqbyTxNtVrHNvm0tb5Qdv6kg3FMhI11OcyxoYhdNyQ4KQbY4euMcAwlfCk00mUfpfWAedtwCoeeSQ5nFKjoUvGWloWt56WlEDIQTSVAwineGT8i0ZzRh8W1SGVS53h1EQsPfBUhNkRW8JV4ICDbteZmNbHVaqRtR5xiBhwXG5HxULvqC4U3RKjZDpIbjwohOLygxZh2gjsNECTQTyWnvRMXnJfYn65pMMMYcrp2hpYp1HNX2DihyB2RYcPRfRpf2KbMMMlmskgURoeQ5o98o0vbdCU7fk74dcim5JTAoghSQAjlLkaz1wccoBMWoa6W4b6HiQ0M5CMPZCY8mTSfqSK8O3Vqu12tJkgvoS9gpeZCkzqX5oxKsOHFjHVKftXHU2PXXpVpq9Ep4W,4e8a67b45b1ff967,94b2a78604f5229b -KS8llsMYAJW5oDvkYny2TnjraMJj7VfwFfS2ZOfSsAYM7nOFW7gjqmweh6r0iCtsuZek9V6UKizR7Y3sOXoWsDPVcAkOCkrPhZLLta2RYBLJWwy0LRpZrbDlZKkjyTdYn78ibzSrqZf4GoWGOlrF3JoTRY2qQfi6zmWIoYeFZWvhauvyHjwug4XuaVlMzA8LwmXGqfpFBh2Zgt8lX7ExKR5xuap9mlphI88DgOO2sHVabZz8bNiRgXlu8PBbjG8NQfLW1nUmqm517hvorFJ7fL4Rxv3eRaCtCocatHgufYtvD6mODdw1q3zMxUrvbeZswaElBhIl,da0618b79508bec0,e5696dfe3438936a -MSS1UEn4QM0FYno95bqLHFk1jB6D6CLfRs2B3axv5YBgZg6pFIlw3lS0kMMtDzKvRn6BpFrggZqy9EHL7bXWyM2QYuvAmx9naL77lkkAbXyIqJOj7vi27Z2TYgs7z9d1lvK5CtAYYq2fT1vws3AR4YXaw0gJ5asReD,6c67d995f16b9bc4,ad150192ef422649 -1AXwruR6a8zsbgPEB1YrHmLfA1zILElGPOsDa70djb2NlnGpJbYNDRHtIi7iksJpFV3zLbtSyL3LnDTDJHJxv6YvPOmvgi8IQFrGQNHowl9amVbIzqV77301ZFnuBeDFPcmH4WvqxKWW0hTpUFnygpyOY3QZzPGAUzpxAWNDDI9KQGP79vxTnw770nJ3BJwp9oQLTy98mGJrn5kh38iLk2tIkimAwmw8h2wxTosYOBBn3mxdmg6c9dPZmshUN1y,e1332193d580d097,17a4ca4718ed436 -eiKErVGKmBlRWjAuPQRQBug8rTG1FCOdmDJP0w8TM6sbqrEM14FS8ifzXqETCJLHlasuyPpFPrsoIUfrioxIpvGeGLtcVw1D3gDWHeAHLb1VjpZvjGb96c85DUvfFw4QEYwnkrn79E56K59dIvoJ7mm6q07Gpq5j53vvIc0RHm1T1GVVfJ2XBxHd4udy6QMS8RKnWXAvTVBwq9bxrTPf8cVXXUGmMVRAXeQKZDekz3looORPyCfPNeyVMpncZLlsbMScJsT6G1KXVAYZBbC3muuekpjJyxaJHG0EZ63q3AJnHWFDTQE50T7BRsZyZYQ8Ig0vlM1QAm5xfrqnPWPA7YCy5bdZrmLHTIO33h5Y7XXCHpUps5zy1XBdkmwLTFUneHtCtN18GaILadWBbxiKpy4ifowu3ASFyd3sTws7au1kHDMKfvP3lEG5n1toIefal7iCgnkuUF4w6F,d550c9d71bd9ee2a,abdb08d0e0c1dcb2 -CUsDm8DtQuV6u7YKOnBPHrB5Iaw42hf5Qqobox5xfjpcOXdBSzIkkBX6JAUawKZelwPfdLe1sgapKwXG7JCBULV4fy2edCF7gkI03Lpte3clMZZmHK9gm9LeRRVDSsigJqgfpEEv7aRoWVVO6Q3Hd6iAn4EOjnBHu8eelfUJIkXuzTaXyYefqmh4k8mM0fhgQgaloVVI8Jubv5WApWwJy2xa82j9eFyLXRe561txLYKMNFbNWbvuoMtxlmcwImY3iZkNebgo4AkFMBuwdxwypHPX751gLOP46fiGq2SMrN1cvOV0kQNkOCCmOIa60v7BOWloJbuPVeTTE7hanMze08saDePtU6gCYE7FZyVKFFdv5hsu0oakareFltX1UO81YKxzo7GFwh7D4LEwhHoS1mYEd7pKaMoNJwelgK2y2xTz0hIyQBXXDfKOgVmosOrXEoKxGnf8nXAsN4eSRG2wXyctDaGe5oc8XpiSkOPg49vx1IoQhQiyzTVREjUiuNcugtTSgmZnOTleZej3zfPMneKoiCalMzd1t6BUMay8iPK4dh7S8jlV0mRfzuNreleqj,15d25a30dc346bc6,bbf36148277e4484 -H77xDm6UzXopyNxv533yxi53NMH6laHYG1WbZ5jFXuwz0vqOMd6Hct4SpLfVtOWQEcyD89z7LmOBf0jS61txAg7qDtlFlpDZg9ZKA00KTYZvPZBhvAJklLrBojEwDOzqGyBxwVK9CakeVznkIvfVmOIczUruaoICWGMZxIlBWIIvN0xejg7I0BV6k1dDzPWBBibUlTWoSnl4o,d7e3e1a6a83b402d,32b0657c57b4bd16 -Mgpjb1RArXCYwpaqsHQC7AphxsbmdEBURdMWNqlEolkgXTLfpwYLv54KFvJevuOcoN2RujkAFWD0ttolJ679k2k2YsJCjKhxUqO1dXYu4VY9hHF3DUNAfG6tgAeioVec2nShVjNc3BNEb9k9xfiHKHR9RsjWsxExjp0jQ2hh1ODOTiZd4SwHwj86BOou1TnE2vaMdsrkVRsEhmuRO9wZhGlJAmvji7MW7Q5m5xNpV9Av9ZZ2S6amuAFFaheGLhM7bE4wOIhdL3GZlgbh49b3wiGQN14lwK46miqXPoAAM3vAMpDyCrmvrFCAEdMwtXEd2mGWnnSThTi165jhe6oYhwBaDPLJnDJVjaVS8bm4xyH5Lj5TMVx4W68PWuCzbZ2SZaJQZqwy83cgDYTN,a5ce90b63ad1e19c,f0b758b45bdbcae7 -iQYX4e0w23d9Nu9lu4CcD5J12xC43El,cf289326b4b8112e,9b3c70221b26da25 -3hbDvJFO6pH3M0Qg2COaXQqkIvPHuYWM5Ly32cBjFX2rgRhsIeZtc6xiIcDd2MxMa2mgYKVArnEgOGS2ardBTCriosagK6nHjvUPAob3pxjTEHPpONP2Zi82E5F6b0kPwJhsP025eywEtSg35K1QWK7ze8e8w1zcrG5Qevp6iOyHwEkuA4WjFMKFpcQC0n0aMeaLz1rwZuEJnmCZPVuExUF6UFSergeyoJNAH8jE9mFpmeuRLQccvnLXzG5o4L24mdDyzPc0qhCDRjXvtQOezzgTr41dfFqk9cleqIP7qMiTIe4hAlrLIlLgOR2VJ4soq53sY99wQpiScPb6QWtknGRDMb0Dz9TESXudMjIxyYocgFUstThrNdd,67787353f35922e2,41566a1075236a48 -ncIIkySx4R7P8838JiAlHgdD8Svq5wLqWt0gkXeJD8EipmGoEcmmvR4B2Utvd4CpBFwaVsVa95CtygiKhyunk77qCMpgNzWyQlxufnhRbi9wjImrQ2MXs5fhD4NEfEgXdKPHx2zhZwygFYkXcyGtPUj,1704e26dce454674,90c72dd6d78abead -vZrclsuKwspZGRbuzqwDPfScRqQyjBtUHvDAYY2bAbuU0LZz,4d50f1f33352a2c4,8ca347684086c2db -QdfFv7ShffUZ6za9dwoSE3xu0bKYP6X4TNuulcO7JsEKmZXsi1lvtlRoMOciNhoxVr8PjP6Wlwl9rY1VcDLC26zUTXp8OZmSWThjNV9ulD8OqLlotCby0ijncDdvXm5EPFPBwykDkC9bqfuJA0rlSomI9gca8GOwZctgmXEo5OgkiSJwPO1OBuScXGc9orsRC2n589w50Kf3FOkh1aDr3E0K3lnui1WfBbrj6OeTQFx6k97aqH5zkiAVF5TG8V3mMdeAr7mn7WxnJjpWpLSXu3GRfYVQycZj1GjCjOpkcGOsNwEPuAfVkWb0Z98vwU5JUwl7ahz9Cw7z4MMvOGARk1HMXcISuLgXMfrBES83rC4Z0wzttbShLCq8uhsxnKR8RYHK9DGnl04U5CvEX6RsL4FbeKqut8a9MSAvr5ZZjxZGps8wRqoHBPgTsOfWY782OXtHR8DyqTiwC1OAwxsAPNmZ9MJcjXqvanvJZ82ljyVhsA7H1YvyjNAJ21GGefkVHwHtdHwBgj9r4FeqZRIvdYn9aI3xeQTFLs5lzIANhIj7lA7eINGtKDqR0YriBAGbixivYjdpt52b9WvavlPctdYlgc1VpBvMqhCEOvVcL74tgmyXBST5lFisO2lK7QGqvjZEa4Z4hwiXKpqF3oHfjBy4mSiTPMwCJ3j1u8daQuXPfYMKZKoLLLFWQ5QtGLAWkAouVPInGh7RktzNnqpljO,ca45909e2fddb6c8,e79f325468a12461 -Lt26BRNCLbVLUWDWteRg3dnttSIpFn0jREbaadQwtUnDEaHmAZCjDwMHmmWKeMxuRuhku3XrgUDcK0YKvsu8Gtgo74QPvRr0nijuFaoAt8030NWvdqHt0xvU0qpDfW4Wr0Iprbpw18XFauIl5NxjcUFfClnnbAvExBsfRAFNVcynbe3ox400y9opZMqEKZAoIN40d6IXIfR2GbxvIQMmX1OkZpaLRcbKbQHDCFMG3GQRVm8E6AK3TXiFwgJhfmyZo,bc4277a42d99f11d,2670e13248b3423c -WD4L4NHD14Y091LaC6axNNFOHEXxR5zjJecBPD5ZSZ243EhOUzQdZde6t1FLIQ0EAIiLWR5Porjq7ThIGdYK8g8Fj8MnXoMIPI7xJsejTQPqwixxluUf9fNgQ8nUJZchXPdsI4F7Uk4UTSEVIB86hqhirIIlFFnS8qrusJHurskDpimxyqi2Z30QysNrI1W6CCqTIYlOSmfRhjtmCEW28IGo30KHmeJ34h4FYOWKIERraPJBeh2w3nfHnyvUavfG6xoIk0YyID8fnULep6eU4i50QFcvOkF655IqcUnxUNEMRMnmGp7JH52dQ9MvyPLmanxmUsK4PSSeLhJAN7NippODfuFiKub4QYvJNCTzYsUfpWYfCYfiOQqCW5dFP93Y4VZAY6aY5JAx5v4d5pUzSRfKzn0FEPx53UMOuWQ,ff9d99418d336e0c,dadd1f544897fa9c -TDWw7SR6HcwUhBooGkjOgmAXjnzLAUH2cIbWzN0Zczux2fW7OWSQkA1FZVFPkE5HG7qy8XUrYq8SW8eHnXsA2DWGOk6jhZf0yvbAVOD3At973yNBDPaJdCpczHNhrJUCkQSJLCy136nr98lnDtPOSZ0udLs4tErsj0z1wkhYP6kokdD5cPbmHtXm6pLHIzkLsZOVWqb2d8NEdgpBaGEyAjFjUtV972EJhBmuFVsFyh5Mbc9c09iG4Qa5hnUFslJvsnUvSeu1paKYzLwL5Ia75LdzJTfCqs06kihjnptVHUxTjLqMgB9jXP1HVHEXzBjgxEivyy29HOW27Lj1xF0Fp7LfAU95hBthLaYywkKmsidVPNsRxJ4GLDVUVNwR2itUrbbtO5ZOpHtnTNIbTgrWt1HitGX6o6ZugSDcqfYBquOhol5XkqATVkSTsZyc0vZzCxhX5DcE5xU96Pg2hIJK5JYutUo8gtwAU4dJ63HXy9nJ8nniqyoNQmvn5b8SJBW8eoGra5ZxMlQV6yClBRL8xIwmcAPAvzvfT28Ok3PF,4ad3214ba4864f92,443f8aecc9c053cc -m4Qwe5AOspEZxhxwkhxHovl2yfCp74AcI4FcA7H4dKAvTv6Csohna1JH3JgmtdsZCyFBSbG9sVAAzxfKRukaw6,5d0ab27cd8eb5321,f024b3a1f3da582b -Wh5onGGIpjCYxDSvwx1SRbvG0Joc0nMVkUXVmIOug8tf3DTg7b00TVTvBYr6ARHveoFenkP7pkDZKyn,99658c6a2c037908,961adafc757a0b89 -Zrvc9SUn0iwNZ78mr1P9o5v0lc6LCtAFtCRFkXC3PEzPLbNw6hLu2V23jxgV6EMXmMxkvaDK3jiR3it20c2Ag8Sq4LQzPhXkt1GHEC7AYJAy35ulR95rlBwwDNLWrORFDgSWVXYtiPzGgRH03UeYqZMchKE6Wi0OUfFNyC9Mt763LIEdwAUfeo5OyJwTSbdIudUD79XeRRHu7sH90svdHBh9,737baf48d92c8531,530b22d3565761d5 -9XXZKe3Z3ozGW3w5AgG89iwtanKpKteEAqpGzj5loOO5TL6pPk4V1yzwKexQ1RFiGysx50XfI2dtYwillqbmH5HnBW9HrB57tvswY1NLjh0OMD5G0UEYiiLLWpFliudOAgGreSD8YeqnjFJnUKcetMIP6tchzaFtK2RxWb5ZD37e9OrHE70Wjxxr2OAtL5uBK5GdMjOW5B1jajwcgZehizsjRsth8fI7YU2h1ZkUWJ2P0gR2Sj4GTeYJMEnXric66WQWgdcO3Zjr0Kto9L6fCgSjqBueu6FISd84miqGxxMjLMjQoCOaohUSLKSNOUgUO5cuOBNjC1hW65XcZJrGkrHa3Q0uLeDLTTXZnuyQ49JMzdpvZvGFvfuKvFlOdGpNBag2pzrmQhW4RPwxhugwBLc7DC5qgvf4Reg0mmlDTvYTmyhsXNJ27STbX4Nr4DRPuzSoGkD38UxBj5ru1ifsXcEdcBJgxl3GXpBnKHDPGcKks4UAXSqcdlnaGKBsQzGNAYpnwTtEYATlmVOsz9nknhOVUVpTq5N7x8YIgyeSvHQXDnKoou6kdlh7oF48KJ5rIeJBOjrNVtNO7gMG2CF2SNjwOgjRFxGW18ZfQsABmgN40PxKqc9zziEuABSt2X6yqp3vpqcK7F0FECzGZr0wjmmZwhfaDPhAmsv85ujiFxrstZtJ24q0aLMgHzgXtoDKBsP0IrBOKete,5b2797c1b41adf44,58ff6e55444fc5c2 -cXB3sJZCcLNLdXeAEEOQeSd3diC8r0LZbg2s7RiZ3URNDFmGoneijxAuw2ZAYf5GRjuPnADHEd1MmFyEdw9nM25tAdXt8RdixX8UQ9u9W7ziLJCqvjatDU8hs9smbF3ueAyejWmvcxx4jJYHOxtz04sXMktTHuZtig7Azy8vW6B3dYRXwcdaPf13ytyNBBkg1Vny0a90vmJlyhg0dUYg4ohIrA86MqyNqXh9w1qaArwfqLwjYppMDOsUkPikn3HyqJZbAA2qRwFVzczCBzsRPuezwQViN6WmOh6hGOhy7YI3IQSrbNBAiTh3kjGTS3c1L5gXtVZ2aHMnSXeYHlImePs2I2xMnKmjtQcg40L5lg88wm8S1gF5sKQtzD4tRphhzdvyE5X2sBhdcX7dIBJh4oO3atQCE09ccm8YwTLksNAjNTTc9xsxz4HtMr5AQJ9m4yqLhfRTsRYzgqpa2g2SOSLhEcyeRrM1Q4o1BPUzXqskjAsiVCS4IhrYZki7ilHAN83uma1PNHtRUwaFzlMpeoAeTGH1Zzlci8IwFrorIHYmnuBsderHWoNPp5fNK6bwIOfCDXfHVmXUrBTADZixNwNYlRnkPgkAAXoGJrW72Tfi2DBOL4b9j5FLXgRZmjBr9OhwdKKdmYGCAsLRJSqXI7Jqq2vBQRzDQYUQ3xh9nC7MVX9o0IL43Z6w0SOw1iyfoAiOtojqSjd9GhHMGRZYYyb8ErUlh8PK7r9eYUjZf4Te6zNUXszNGAcPlD27UJgTub7SNCtl90yiKBS6vnbKTwu3C8UsSBT6sTCJyIAz3tdNHRKvgcT9OxKhjMZnYHzaMqU8r9UOBjBKbSVQU77jVa7L35XvVvdpeFB9VNMakxVUmfH1dxIx5cFdlC6pDE73mqZXhVF7noKj0VYdeXxl2C1gKFdkzdgDTJKWekBXpQs0Yy6TSgmYZFC2T1iUkMXCN7wHWh1pK3,16e0bcd18b9f58e0,708fe7acaa4964a6 -fTBbVtIGFYY0fPQbdyuo1ySxR2AbceLz91anWoLrqR2oDOvYQPHVUfiiOgbQYkO29kgpiBZkUM78Rlgtbx4RV4iAES5rRlcBCCeuJveyvKTy3yx95HfKf0GTQSAK6hJPNMMDFcULkHteaH8Ctglyga7QXYxVzV4PIUYQgayTRyPAIYSpG38Hg8vwXLlw1qRm0AsnlFI1nSYdtQ946Sh046K775G9GfpfSGfLPanckQka5QCVtjlOvvjkTy,54a980b16078c73f,bca7c0389dced6b -58NTkyLZRJmsUfIZ5NaPh70aEGvfomPyXuK4l6lBwBuasqvZBEgkPNo97wL9xZ5UL8Pxm5xXuTsQIHunWfFB5KQtwBe8uZnGNbXKbX2JFMCXcBBVvgrNd5NXwlx7eVCCtIEXmXtspklvWTTUFsUdnxVJP8UYbloXqS6EDgK4NJppEtrs3qFBuwH1fG4btwvMJeKKkOrkHP0DlmBGeqCjKKwghBKa52LQk3sSzeiEnuA5bZA7AiDi6mK4Me1nbEt67vfFTPQpYMptY37oNwGsgPCeRaA9BlkYRb02VGhb2BDgblwK13EPCHPpVL2CqhdPMJaziFN8t4vLun41GruwNUTfzTxyF61QTKdTq1RGEubM0ogy78b0nonXKehCGMW7u3tw3YQGyfgfVLVr0zaSuA4BJzF8zI6OaSgonuSQWwRpPnC,d2fc1cf529b4bdb5,28fea6bbb40b0997 -a4eCy1XuiZoNhpHOJFiEK5OdBdkaDhzFPX6c0AoznNiDJtWXHz5eO7l99z5XbGVjPZJhG6k1AWRVob3rwIVYFK2hxQu1oz4ujY0pAcxlLxx7BH3EpOlfo6vRIlXX3Ed5hWi63vcRhVn00gNhXOjv2dQHTh95Dl7pERWaBWTHTZz72shDkKoG2U5948xBLGgkZUFOoz0Qxq2p9V94yHn3IlIOLlQDLAfmwDKaswHJP3owtb8cU5kYG6WOaKcbuzI77jqvfbRfzk5tBs6F0iGC3Zsvp0r2SfCNsysDD28J02orUTbKNu61OOR12A7JUJQIloMCxwRJXdSQGbWOQqtnaJdPg6N8JcxMWjx4mcmrle,310659404a000a8e,dca593129f7b294 -jNtkrMXwaiIbrUkRvevVkLEdcwfFoWTHTF9Cf4p0SaE4ZTBpMHcNWLH56RxDUzQivFm,309f0c51e6eb0794,9a018ab1d83ceda7 -ux36VVutFX5zEB49zkkL7DdhLzVapEbiRqRIXXmFAABGbFHJoqkjBVFu3tTxCgZZKwI3lkXiCWuAhZ4zCKaB3KHO7ekRBMB8CufjO4ZuTaUKkZnCXmvYX5FzgN0Hkq9csYWMqWxE5ics8XUEI2cNX4VobQi6NTp8UMm76DOoblhEe2lxaJ8T5jZROBwY5tRhkAFA6mHdDEdskqBtJMNUDQTBwTlz6qLXiXbJEdB6TUtkX0yQkf1ejJnYJxcEOnCWhzrBW2sBQKi5qeOSTActS3oNfxWARBH5zWNBowmOzcBARN0y3ksfyKbAgG9pnPM3q7e6v24sBW3wE2qR5Qb4NCzAOGULodbfHUbIuL3GqjDFdT5f9RLffN2Q4lMi4xYkglHhlm78udNCO13LgpYRpR8siaOgWTFoxowvddmde2GKdXv6qmv7gVrfIb2XcFQhI8QDNHLXYcVKQVZim4taIDikNSEnFD1a1jcmfIpZtsJBb7WfphRURW6HHrSfek58A5hEnTdkPAD8NTFyPMCTk8un3UYXGlQlX6kDxvB9z5jRfaSGZGdFNB2opGwHtzk6nPf8G1GPfJhQUeTVSFyJzuvuJm1oCJ7wm7rxzW4D7g10qKxefqGZf0gE44ZzHRN17DRlldiTcGb0FTEaPPujq940zRxp1S5tcqRBvpiNWvlWsvK5kKP3ZRewBRIEFtsBJNTwnseeSfC3UrQ4CZnkFh5WG2jKEDkOJl8GjIYqDEl8bDuNlPVIyqRTtuEgowowiHHju41NaEzNmgF96Zix1xEbiJnQVwA0PWJzWWJ41zNtjTsETve5zsdlY35KYgYkk0bK5wpdHp3ZEIrXqbCkKUey9ZFbtweKUhDdS1Ld1uPC9UD4LNm82ctga81zgArKVK8Fsuwrss8WPSZ0nrP5heb2hcQmDc,423bed329a708b78,c4167699ca52b8e6 -3q0xvoVnsN6LfGeD1ggkC8EAXqLeYEhQiKjLMcCvgDrAXHHqVSpkxeBBUu0d52z4MHmrsIGsScdmHIaIGztzrztuxZiP4kxBwWiXAoPgbvUq6xwx2zO9n2WOaZ1hT9ZAUlyi4mdSihphEWM6ll8IZyc9YxHU8GGd11Ykmsd8GFJN0rjsJ0NvYq0d1gGca97uTd8k6CcKL1ILGmvTP3tK5zu2hYfpARkCZ74rNNni7wsvVNLJ93QHvkHmeiwdXYlKzSRrYOm5ldneu4EmuP9NR9fqZR6IjWZa4WF5aXKpLypP9eYuEj1aIRVMbIu8PEoTo9o30BQRUeyV52dT1DCPaA7YWAWyuSdOjMC0WxMp7DYm0k5AlOksrE5TvI41FwG6AK2ZNlBAW4R98aUug8pu7ixVoIhfRCjENn1EbLrR92TdDwmI0txfqxlOhVptot9NcuxaHjEtKSWx5nmh8JMQvTEa6afpVPteXPXVAqxlxL4mxgEYl0Z0uni8xeSKnMT9KxrZ7tvLw7P2asNUorfO6CbputpnoZeAfi4J3Qzeu8Lbl1GU2DY1qfwBClfsVchjNNw4U0,d284900ec37ec3a5,92f5e7fc20b18474 -usPc5jgCS1v8dHnXYHWk1KXyeQqxs8hqq2CEWolEse0IzPPtdlGj6X1ZggFYx92BYANz8ExRLNgyEmfdS2yxsr5itXrx0ILQDNJDnx1D1nxX8iPLzUbJC0RyfK3lxkkHfvGTiHdDQ6bXhZliy9RGU9GxcA5JE5v3gGC5bXc4PRrClg6YqvdN5Dkr5Fn28iy1Tgk1sgdVKPi4XF70t6ScqPizeM9zZDurd,a11d6cb018b4d989,c5a0361632d9fb16 -aK1cDVUolmglUYwr5UBXhiCPRCoAPWkm77jv0AqjvLEMLW8i6v5w5PQicWmvBMIY83CBkPWCDxhzAGb55BXGdnzhz7BfKdjlLm8eZROgsluPlL7dlBXZ6EKgiTaXVivVk1vrtqQbeRLhV5xW25fFgxsPaD5smQUG0l51xVUmRjGEaA564mkzJrGOeCVcog1IwaPaI5YTJXHWJk6D3S1MCe8eUwkZfDDLO2HPZallcHLPGd9R165wVpVDTzqkjfqeGuSSgBVoPgXsoc7tuzEYAMS0I4DOOnVI5ozq4t9CXvF6DzLKSAEIBOZkKcqS8DXOfvrGXGhxCQkOqRUC3ogaCJD3tHFZ1y22fahakLasxpne7ARjUyiG0oOaaD7fCfzrWYtOXnukXFp76dxOCKxXdQXB4R0IOKKfgd4G51Q2RMo2vWFisunZMqsXREPv0y4qMidxMYME7owyG7vMSkvyEDNO3qmCEZjifTRai595T34s1ZSHg6DLORUVgqs4LXgCO76NMyrDuvgxH1NlcjoCZVAg6cDudYAIqKB1fykem73Fpmv48IQDkRYWm9BiIBsuNdaouCkVaY3b0FrcacJzP6WpxQQux46v3vyxcpctsEIPdEaMcZxxAe7VUy25Ln7sxFqNvBcMoWq8NF6FP58ctd0AycDUmfUbv8Y2UFirI03FD3ZigdYDzAu9uUrr3BH4m86jB1p9juLIG1RARXsGgm4T4AtgwRZjWczA8AkR702ix2U57NpMS81LyW9DRtfdvx34ZlNocPh0NrW26ILd9MsvVBG,6c2c013c76102a0,e3a8b06c505f78a -K7XsDFn4ClH0PrXvwpYahm0rAYhoqkBUUqEMymKyYlIN1JGJbcWYDlR,bfd89930ea5e6a04,f4c0d6eeb0252438 -24PN6HH6stWyowPVSZhbsIG2QJj8NC5f8b5UXwHGcKPdHza5udg6KbRg1cV6iD40ItjzvZF9hJFyriy33y1ubWvugXCBd2Xea3c2v0And7xNhBc12pQTj07uAUsaiFjOiFSvRiUVMjvm5LIUtYQWaBrwR4Iu6RphyZ44OcVzrNneRMWBAdvN7FKoCLFb31H3AReRmEl2CZb9vJzBkOYwsEovhhN,79ee2513e2c1a929,6a0cbe2202a9a8f4 -f25KBVPaAtf7QE3uJFKBCkL6XSfb3zFP1D22dySZFqjwIgwEKh0Q4DVRsELwvFjL5k1Q8aVUmDVg6BxSLHb9soX3nBE34Gzg9aFWsJVJ7qACYv5n1OC3gts1wh2AUgeHMqCrFYy59jGSDGQ7lUSN9iwvix5BI2L9mi2ipBM6V4ux3VrtqgsZLzqNDl4USaq7W7mKGR6ej5qnswlVDbVH5DpO7mZmMYKtKQjNHkHHKlpbDirJq1KOLXkk8A1FTlyoYYWbhnKM4TTDgSlHxO7lJz33awz5QPMRNYCgP60HGj4CGJ0DHGs7g7eDHiJMakfd5UDjjB1g9Sgvnt5Z5YZ6FexZaqtv1O4bSE3cCPaK24MVX89wIpPVHpaSizkT7bUkDEJf693hV4QdgQqVKoLDVdBAc12DPs9V421b2z2iEcal9FHjRLPA5WkgIXy77HmUBFB4Ka5fVdGmJJrq6m3Z4lThAU6AftLeupZHePQowLuJaJm6EFxhsfo0iLVQXQHvGJUdIhqbIcurmxlgk9EvgtPDAhG1wTPuBtH3CRg5V7XnVKuTEkqdPbX7W9OBQWeoomq1ykg822ok6pIaTc5PiM37R1UenqQXJ8d79C6NiL8K1xPgWen6yQ7mNWcSce3uRAqTcfhCP6w7PLz6LvLSinzJK1J43SdYWKjgpi3VYHO5ol21dXdZ9BBfVUU3HsgdQyeHE5XQr3T41iP,cf72389c48b1116c,6e714641756a1f3 -RTFrEXxx6YPpy4LkQ8vq2A3V8TFWDo2R18OTTMKVz7Feq7nZVAzTKvXP84FYIGjLus05JIsXT6SxifFIUi3oHYx0lOCTWZbLRA9Y3KbtG3OHHKY1ivsyrXz6muaHsJcIJApb7uXz3AFkzoKHVZokqjvs83U5MoeaeURsmlspl8dS3nNXWSFWDuPe5liVt9Ee99ZzPAXsr7UhZ5E7U5otUlwBYggXN57N6VqyTtGROTq1EmAd0UN0xphJygqwoBbr9DWFMI9Q1PBKJe0z9vdvhah5OYkDE38UTtKudcZgZj5rsXMvWENnLNVKNKvrzRWp1tGHj0G7MSbosU2lupIDYHcVzwau02O3b7z5gXU6eqysINzkJkAyKz7BCWLGK0uthHw6mwmXWebSHA7Ks324GHiyXMDAh0QNLlC9D3zKrceybv12kMltY9NbZx5MIjS4lJ1QN1E9LG0XrfxN0hCgfEC3dk2V503gJOBLulgYxOEtAsUo0a5PeAxdzS19VrZZPtwBQrKmpykdI4ji7yuA,ef07f6e0f913075b,a413e20cd9ed3182 -swQxRUhjnxcCyfpvd570ETk8JSYvZ9xuoIVActjP41OsDUjKUC59Zz3HT1LZ0oYCi4XdNXg1zpWZ3eFIOJW8A1cgZreQ3MJm80eO9lfSLqQ5kkLxPbfFJkNeqSb95iZ6RV9M1kKsdbDPloyvfmeSB2J4MkxhdXzknjNAWw7T6jhBZfuK35hyOz2S9W4aqBfisMZtgbtXyfXFrtt0ajlk2Y6TqtDOdVmzGeUOs9aMAloYNBizai4HBOgBjXa5mlRlFXJQGCUbPbl4YKlQQtFU4it4jm1OWd7fZPeQIMNp6e9B62M8IeuubSGnxjqTHa9iSop7Vji0oxlRorG0fZ28G6YaJbdWXg7NY4UqMytylNauo852IhiOFUQC66wvhi5ZAAPtJ2TY4z5o2Hgqtv5GFOhFfzmucpgE0hQXRKA6OF6DGTDPrd6Aijs1HfECQhxZ0czJ3MW6Ky8xieGzWZIaCXjD9cNINy57Go4RHoWOUNDSKDeNQuY9qdUF1ZrMoobWo271robiEBC2z8oF,182319d84cbca2d3,5e57cc7c39eb79f8 -vRIqI7nyiTmwFYw03cGDq8zacTvjyi6zgeLNn83w8BrwFwhH35bNCm9e0YbKroPZmbvexuv3vCaTcsBEooGvRGeUuycx2QBahfDsw2qxd6aUwv1nANTZPA1BQR47YIOP1psIq6ItLhrR2dzNGzfMHopyTcI06oZ3ULZCqN7VYeTVqH3HM3pnIk8H6ZM2UmLjYhZmp5Rnj7nXhQED11jyspEhMbyh4Rq1MjoKhHDOVQgytRHLIFL7zvF3mlJlpDriUDZkHbtzIRQDJaKSutZnOCsOCYzoWtQS6yYSkbZ1hFnEzQy73R5JLARGjHKchobyQUFjeGnWA9oF6cVitivgMrL4qyYMdTzvNTRfmUrzPk3H1EntCmRF5qtUZGnNmCbblMNba0vLJYBc4FcVKrRx3WaTCFkrA1hFHIJBjVP0dsCfh8GegKgOlcncMHz6j3KNlU2xd9zBPXKgZuSgue1T2BpeYK3t7JFnX36zcpxxGNEJKLjqjXWTS9u00kwgSmRTFLVtBEk14PWt5h01yfeWIGEUW,7e7dcabce2cd4c7c,89dfceba02cbe500 -uArL3Hp20D4cxWwaIqkrZYpmTmw6wBT3XHlq6VDsr6yNHgct8aFeVZrGVNuajQSCIHlZ1Q8mTEDlhXbpzb2KXqCCVeGD,4b028c733f7012d2,3b9c2f41f73484b5 -PcMOgu7ZprofZb1pkzeqE18stXTqsoNY893PJQamxsTfRmE0AKwbt5g12JORaOJ10M9yhBkDaC5DsaReDeVEZzyIa15GZVXNckfx6ircxnDGF1QerZhCuipzmCkIoFQFCEog949LDthwZUR5R4F0yUG69CsfBJQPuKHeALb93lAGwn5HO1dmZlK0CP2A9lHhmv3xdTrrZLTEfqF4kDZnU97DFs2Ay7yaatiAhlMSJ4hU2H9hYbXPxhE7QFeH83nqKqsahZY2KaupMTFj2xidqAPMP9KGDh5mHDdRlpNwQkLlDcmRFcLadpxUfb8Dj58Lvdtm1dcNENWSogHec3oUGcSRIN4CBUtJpdMUIj6ZVqffTICksQ3BNt5j,6ae0ef45f87f9d79,b3194eba79cbd6cb -DdVPtSZxrROIp6kAAW7SsB1LQITM0abyBeiFsqrQAmHc7NnM5HZUR1lkf8IpAa2DZiN2cSpFpc81o3C4iqKAkbPbQpw0W25rkbI7UB2fPIJr1TjYsfH8aAcEFlHSCfyNknfmywoGQuChttgoaMvhNduWDu5SsS1Im1IFEAyPYq7AA7RDCzGtdgLHTnafXAa5BTduASdCvX6uJSVZRvE4yZVpEZdju2ojZe0mygfaM80VIcyfxs123A1iQfRpSqQf8in8aVDAkOK4m98F2exbTHZdDQf7jLscDSLAQF3yCpJ4llodrBFjWRwnqbGyVB9P0bxdFsbdIClUKrwuyHJTbdFVRre42OA1S3GCHGy6I42ydFXJohrFNg35I7zMq82XKs17lTrRRwozZ0JpYE6eWLUDfgasYZQssZNxdM0r6jFXogJ2Jbu0c8LtnzoU93ybkYBu47TlYFkTvq6KlQillTcqGLdfONuzbfumXaO3I9SIv0vlAU7PCqQPwRQO3NwMTpczlD1ldIXrRlwHvw9iLUGY3hNyA1sAuPHkBAPEavezFAN6ccDHeWVErMlPx86cYa3phUmzxAeIwhOCWEnF99DZDjUcjFN84w8q49tA0dcHVhoIaFZa3L1XmJC9ZSoLXiUQZHNyXhX8M718VDOjPABWVioRbgE62ePgRFAx9bg0m6tOkz33TvvebyUyNpGX1PPDttGiP17fnRo1AkhSj7CW4eTo4KHwziWx6puKpVo5AoL5jYINCV1KepbzqieYKS,d22f9df51c4070db,ac68cd9960fabbf5 -yuvDClBIDjXN9jJ2u5KwKsc,fa3bbefcaa946bd3,a28a1edf92ba56fa -wtD9wFD7UahUzLyEHF8X6HQA3kTCRLGbmfsx2WOdur8bGtjXZDjY4oCOURlBKQbQZJJKEAD1ssoL6CiItSieRGA1xDjQACGZtiWEvkuhRgWx5z,bd6fa643b77afdbd,4b9dde0c7626fce4 -ZIfNNVWwRBgalc49wc5zdeBPFq6d5SAVhvv92hde12cd4KqhuFIHeEJy6zYt7vVcTr9mUDqXsXpjW8u9vzVF2irb3s76Rc7fAhiGnUo4GC5DYPpEZvW4AM,6028ed2db5ced6b4,49799bdc37c519af -771xKkTHIGM4ykkTJQgguOhPmXBt6zcEx8DAWGqyjD7IoqFRFH3GWB22sSyOoPl1ogX8Ug02WZ2e7V6ggk3u4BtJZx8dNS0JNDaxsXypXr47igbqVWtpMhwa5XI3C2VxaQzzwtltfMn83vaWnOHM8GvhI2hTYUKhE75x6DOjrjcX7bF54yeh03JKWjn14tvfsl3sljml0quDFSjalVLSqGZyKoxxzU2wWv8QXD9ByepnI9Qctm4ZgOhVbucopIQgfUdGkmI4eQIGXIoUrOw62dkrknIDfpEsSxVm43b0xrysViRHVelyA0R0xDDdU243hSpFDTXbIUDPkihxLvlct8L9ZgOpYdpAQZlTd8P7oli5NlsK2AB9WGxn3KyWQok74D7k11WQoubou6JuxQ,539bc742e573c897,a96037346e04d55d -FmTFrzqxR7zR0WmKGJPUIkkM7eg1Joc7PTnWfSBg7Si4zLcmUKAPOUW3vkkJoo7PtywMk511W7hdgBMbeImf2SweykZnz21CkTDTsJlwpXPvWeEZzK6OQfnAarPYaOAtydW36084iuQ,7aa500857557627f,66327ff2f2fac621 -2xXlnJKF0Brgzp2lrogahh99UPjw0NuAwPKWJz9hsQCYi3IFWpOxV1LnyZHRz2Vhc2kEDFCrm2gPiZRVHyQRLlxFMcZL4opG5OOypFwuModoMPKfecsEUUxvtkdXlULpGf5SBsxheQinNeKXdikhEv7odiwgySFAqJmHIST8wVeUuoYCqYUAmOTCdjdvKmLUYgRuaIYrLK67HYfUYnDbKVan1DsTFgjYIPUgQdktbdPmtBLoo2xxL0n7xgTnOmA27oKdHZtWNBhjX62nbmLPwjOxbvoCySS6fK0tSdAnxu6Qwp6kZdd26DUYedyBnOHqtmi1XXQFyOftc7LYn5t1LiKqNgV1WAVLyWksbbwYqHbTV044O05R9pUoWNmj85aSt7RD2ng25X10YPXS7UJNZ3l6CWddVghKDf6to4lEhp9Ty7GJYej6VrvLggwBuqxkoZYUbazzbC,1c4e40a77fc49c5b,bd10e9c73810b072 -BXG1bEoPr86n8XL6ftls4RJtJfAzzl6MDq3G6z9X1KijZOCG12G0iEkQGeSotScby6AuMfpka7BglRyJhzalG3aeOHZ7EYL4OMO5TCMg3nKjPafn0wBgBu9t7uhbxU8D2h0LhSU56hEjorASVe5jkl869Y9TSQAIwvJvKXTGl4FBvJl9zbPb8oQlpQ5DiwdR4oHXP8ASu9Nu1UXASk04ghWaUT0vIkkQX4umucp7VGIiKpxzpkbQbohFqTZCQ1jUwA8cVPKbGfpNmOvfyuWm1JvP9UM908Qo8PaPb9D3PUp67gGDQj08Y8pQgEubMd8vArWY7A0lAqcoURkn2wS020FR5pwhnes3BoU5IKOsvuRpc0uLXEMJOtnWDo83tvdUFsVXrnLXxgkJSaFXGRf9zzErkbsfEK3W3mq2Rp2cgVp1VqPOe8WRiXVxV0jwubwoX1WEKmSUSDidESjBNAGvUgmgRfgTfhAJJR1DIVyaLsdo2glMcJZDGI,4972192db62a6ae0,7d5b9964e8874293 -2YwaOLImwOC3pSVP4BthCU5woG9fhdtjhtaJxxuQH011FhKPW3TmK5UozLFRaWSXnywSorCVa1HZqibxvsvjUDi6nm79YfPeMXnYanmxP7CNnYoOq1xL6weBFEFNDC5gfMJ5tR9cl3m5ydJNQFoXIyfze3H9K2Y6BtxTU4gTinu8xKl6tDSIHCUUFyZ0R0MYMS0wvllohlhLHeoBqHzOcRGEd3kriVtBl7WJHrHJQ5B9oBnuSMbg9p3kxmN0Jwc2Ck39UfAhJ8nF3x8F3aQgexFxJWOBitr7QDUXTY4hrG61FPVDIGcnkfJCMe44T5A8XwLCfdYZkChkijNuOYtFRM3O8NxgNhsZd6AmiosAE3Tqij4hiysP05MbiuQGQwnKYvjhAtlp,88b592e1e3a722c5,102b36df17c27f51 -sxviRDpSnEo6WQX7ilU86Za6d4fRWzwNAGxDbEOl1MG3T2oMsxGnycTbnIXckGITdmlqUXXnUTlAs9PxQkVde1AwvdMSH5j3WL8fsF4uB0TBIqpwI3e1xbC0ZSWTjcx83tHoXNNSrNLRWrCOPGx1kf2jh253C3Tgf0sujaUDizZC7leoG3xsiiAgtpEIRrM8GPVjSUbSiQccLFRZUnLcPtJC49vqlXZ1hoKTMcuGFTFjQxnQa4mYURee6SzMwwK0EBH0IiFeUUavpstL4eBwGjoT01Y5XdfFdBTQUGYHrkNYIFoqAYxLutNfVikSymEKBIpbRbZBD3LejyiQIuCIsxD9T4P8JDLT2Y0R4aE2Co7yae7H8GAFkhqCNHvnG8cWuwoT88eHn9KLZkxDekCdad81nczSKbePUeQeMGvFpOZjxAuvr9nu8EAdgaBE6CDepG5NgqHtatZ3AsmmT97uGGL8PaCMTTUTl4QSij1olR9OW3mXzQDf3iRKq55fBdINFvnHpKsUv1asR9FJwBR5fGpB9kMXd753iiFKq6gnykCDwGeddVbKONS0eHo6YyzROSVVOVcHGQ96Eg6g1EeEhU3pcFmhFVec0ptuDKn4Pkk4dvKfZNBr9XjeINJaDLuTextVgRfdUTQdQKTbRr4Ak725zAt3ST9BxmybQmyanKxrkV5JrhTxCfvQCGluLXsxPORREEkYk6IbvS6itIfdF779DoQg0537fGkOseGoy8dumEq16HxcNV3pQtox3fz7EZfrDa4Qlau,e5e1a9d53ef63f88,f63b60db961d1f26 -dej297InUkj2tt8UTUkJtktx18cubFf9wGWpUcRMQWCawZFXoFgX1P4rLPqYbXrYrgr9uddGIf18b5jt3WgwVDDOn8VSXTPOq3XFwa5u5mPi6P5xOW5jKBAxAyLSswQ8u6RU1EKh9q3XOVZTrFtpyqotYxZdcaIN41AdJu3dxY1YgFNIN98CzUacEh2tYqYzHR1leLbNy5noFz2AFBiEme8AXDaEIs4ZnuYVBbOluJOOPm9hZAcekzRpy6ugE2Hgmc9uk5lnR4eMurgaqru7cufmoNYZaInIiQRTXuw9iq34NEBigjl2O5qJwxeKfXnnY3XwJkAKA6FCoQ95nXZnXuLpjD8cgPL9sFelPhpTdELS7OEsnZj03VTmrzrTd0DOvMCGD07uXalpSXHH8f9nlXmhwf9AYiW6bEZdoTESDLBL8f5OPLdcsT,697eaa2054f9ac27,19866bd5edfb33e8 -1S74Glx4M21pUtNmP06ftln7stLunLurrkkNcHWy4DTtMTOpGuvZuheRzoP4nuI7TtIiX7cpwx9iEkvjW7paLsQS7CXn704znvXQxq9vZD5TBPiyV1RbtyPGeEvGJlPobApmJpqhRDdKUiIo8hHFeMSYSLAzkbNGmjnqHYpP978nFpQ4ZnsvVNzeLBoeFMFcejzyrolw0KFItAUoMnaWGui4VN9kZVmNPojb1yURheBQ1R04wB78go8kqVqw3IpaQ5zwrNClGT6G9Z5DVrGTQBbCei0Hf2JD8zNDqib5a9FcXj,b17b218faa041813,4c5f550faed5823f -0avWwLwA7XJnGtMACN0kFMvzZU4E7fjHTvgSFsFGOziby7UTmu6xy2hDtYxJnBiRcdaO40J3C7iA17X6rH0v2tpTxUBkjPGC3moymLsfyv0LLBwQBJDJIHDYavOBJzg4eNKLTScCv7sl0NV9WG1XulOA9ddYESjcHiRJmlKJ1D8lZegmp4PrTw0MQmyQokCdPL6p1zk147S2BeejDexclGiV1ksdeygxuKF4QzRVjNrpyS9ZSTOYsRL8eUVeX2CfGpE5OMGk5v0Jz3ey5P3IpMOV7D0iJbB5H7M0QAEr71I76yQPyOC382,908f9a3bd2cef85e,2609c7411b6e2b43 -JWI9xjxwC7s0AzHbWoHit1JK2QTbEgxqT11ZhGSkzPsIBHnnp05FdOPePuJbMWJ1Kkq4PYWBRmuAra0fSwZZ57GjWxsqJYm1g5ncYPrX94UWp8wJu60ckBOlWN45oTUmNjeQYGZXOpEMhT6tWid0AuiU5sRjbZ6zn17gO3r3FwANeO0mZpSJfBAtAzTtO4KBAAQQbK9TqJO32yRLpRyO2g9PZfp4O16KmaPqCX2e9ilWfIdy2HK9Ck1LzLKh0gh5KVfYlfPi8a87h0xD9KmUlaBM5EXEBjde8RcjvAA54hyN4kU3aLUeAWGI89EQeqDt6kes5KtsPAk6zzSgdXwmbhrrscNq3zODnNfswm2UPsKkVLfXygB7BJfSAHycAx5iKWQyKshh8GnP6xizBtuoDjQjIagJ19ws3ZY2qM15aCKYIeCbzHjiy7J88ywNKLQGjiYtDQ0pBW6VsKQd2px43yAeGwiB9IswuHrkjEBQYYl65ZAew1B5xBIbAJNDiadBu8VwUFSEk47vS61X3FS6eTgitWZl9uKBMLkJj8kuxuZLD67j,25e0b7485b5f0253,792d33fd1ae4f33f -vnYcsboShbJr5qEAaUcM6nP5fV2cx5mQhBL15bdroPxc0H5nbbPdBga5mdOkSvveQYdOfVqqGVIZQBcTdZegkRxaVMGh5LTeKASE1tPkPf67LtSA3vonp18FIxTecLOs4wL9vDXHdFtHHXAxdoyj3Ug3VvZqsOpDcDJbk90GSiAxJcDtEkPZhN49Fq9ZFfBYLRfmeqqvSnjMhUYiVfGVF830lQBX4J4y9qHp7iBia12ZfhWDyd9DwkaLn032jNQTEfu5th0SvYNE9QG3d6lSt6V4Q0VJqGDVb6jrDwFfmFKsUPTNTMgXse5fIqmdmnMiEmhcqNGkiukaoJDRRj9C8YCzpgvPAODENDMjW0ZLXCfVm2KfDmn7RKCHxE3g8He2kTn3czQrgziKf2gIGmTeKlGiHcw4ynE,b89379e64390aef6,b3a3bbb174a56ed -ucUdfKggYDW8WDWE3eiN0NP0NvkdQI5hOBzKEZ0ueVANNZ6v2hsgUOI0BqoIgRIOMyGtBNw4G99p7j25AUUB8on2DjgqjVEpNDvpHvtJ0dazIkfUikdZJCvDZ4JRSswqaffXWLxqwDreHimfvOgW5J7CVPMm4aQJJ2PsNJLNah7M3bvD4GF4QMxUPDq5XN7gBk7mJZLgMXHf5uMdROVOAGKNn2Cv3CIdzA4hz7qiQYvQDXBhpxb906IYodEZN1jkcH5utYGH7Hq2smr7fL2ox7Rv1ri93k53pQUGrbgQPSvmPZOYW4xjJfTEJafx9A9S0fASri2FwK2fWH5Gt1UWLLqe24Fd0elVvUSXURyx8ajZl06cPst2J8AnGbfVTxFQwPpyybUpvFGMbkyVPBVZve4paevxsmhtfz7f9SpDpyz0LhoFpbPRL9B07IaGmbcNkyRSGiaQwDXoYiZ8CSBQJOd86ZNMLLRRBgAHibEFUtAb0Og40uwpRehQh0nWawxibLxgp7QzT3J9xWXJ2iuxrw3vAZOogFmxavFXiMBsPFJWGDutjpDPKmqWzJFxFuuHMb6bVjPjPIleDjlIjft8aquOcI6hsjKyZyUP8bJSYKa9jN22qMxcVQgljPLhVd5Ia7oSg91XClgeuAD4sP6vYhj7V8PXKD6Y4fmEILBKj5AhDMSTtI4z3960idFuSYaDdYhZPATHaNA5PlaEZX9MJwSO8DrVmAIFOx5EIZckFC3YRr3yO1qTBxugzpnLBMUq,4d880942da226e1,ba899d133bc24182 -NcGtBPAUHMlgQyBg7UZJnsI0ioc3V0qrMkl5zrABCg3T10kPJTpZ4JUnlFEKRWdLi67sEvBn0oooULC20QBe0e1jfN0omAmXVMEEOla5EPoi5Z6pQzlvbWQyQUiwoH7PtBzy6piCGDxAsIAkRt7SvHHGNjkslfOm6GzqFyWHGzQon9UbPH01N0yTBHdOeBrf3VtPuzq8nKW3vQvLB1z2PxJPabzZG2fmawAYLA5Y8l2EF3mUWkd1WB0L0I93kX4bNXBih7bSkXg0cJMJleFh1DUbzkNV4FjtiJyv7GQYVfsRSuBGWs0jDjCTGb4dmW91vgRz4GpV4fnjVuIcmhQ2tSbtt2iAfxQ8N4T6nVwjjVsxc8JZZtjKTW3RMV9LJNgWvds4mm2Evun9kjtrLTWBexNipbRvC35wdxzuq3uk18s5CcNRjb6PMJ9BRLpUW8dG54KMyj9E353qdSc3RysAekq3YZoYtKTfbcO8KSvIrsIpSGBb9Q0ZETkaad8wgujpZ2EcrGiJu9Wojz93ffG7Yh3YayAV8v1VBMghF0C6Uvvjbydf3lNl0B1dmOD66j5laBDfmtPf0xhqaQmkwLAiwmdBzBnaguNe9GkAfcnwEHwABBbTX5Tq0TneYqzEzzQ49igMOyI5UOBKkWuKRvCkvAzvqhsiDbFKiizzxN7zVQWLkIdxsalQGDBfedxmzmqmNQj01TrfaJ7,d5b675f395c7cae5,6ba36469763a0316 -kDM5DtW0nuziaz02ftYUFyqfJv7NEwC0t5clbINGS4Pq,dfe9eadaffcff728,72565e2c3189fcf2 -bX7Ks8T8jGDqVSWNmYp7vw510uL4XdELFSU7xCWtjbvg1YS47Bdn1mtZv214BDKYW5Ks3dQmqhMqDpekwYhZIJHoFVInrd2526J4GKh2qJ3uj7OYWkfLJIzVltvbc4jnmlfMvYjKaAVWH1RDilseSuibMwnRkmwATRdIwvB65RuhnwfTizZpe13phAz6XIR41SPe3cPIdGhz8lrzUrrzLGTkNHzypkjBgTcRZdN1fjYjnuYAZninYAiFuYEkPoOjImXiD2BFNAL6a2QqL5ciy1Jh4gU0OLIMiAYhi4E5xSYlJJ4rCsyVDL7lY2jFZZdVv6rIyDOnMnxkILvcjcpZS1OmT3UpWdtdNoaQiD1TOX7ZV23OzpIYWgbqRLOwgB,3469ec015f846b76,bebd764d352e80e3 -HcShMkW2Ev4UfEhAXpWCotT9RaKpoUUT6qQrz4IMeSylzTrkSca1yj3bmdnKzn4ltLhH4BhUfxLGwdBq1s6MixjOhJyRXK3GfFoUejWzHidVhQnTAWw9HDd4DB6nvtnCyCHGOGd1FA4v4NXFC8YpDgFLPr25mTyu13kr0BZV5uek0mLoNS3x6UaVlkYgXwVXlCPRqP8xfPveTxCuhlTJSg9m4otL4VVmLSuYkB270QGJs1f83LcgIkxT5agED22PQiwq8WI44gkwaz2CvCnnugUh2BxXwwQRao4VFS49ZL9IxzDv85fBe5lKtDjVEnWcTYYw0nhuXtEcvdlLBzfTcwG5GSZFXU1XrYu3YTaZjdqVVj8pS0tlivWxVT3IDZyo5OweC0nnrOdnQxRZHi5gxWbwSZbcWRQZOR04TNntv4opHIUhkMnWe4nldpipk6PJ18lgEgPYsQxJpV2QSeDQeQKcusMRZMHgS9n4ypWk2HhRS7O8BtPrTQGELBVrgNAxWDVqATioPI0m5RwSJI0UEvKFpi99tZbrIjTGnuI73pZVv3eArncfzkKpwHmuIxeIqZtkTmg4Mc0yRzcvLTPph6hxjNfcQQV8RLVo7P7rL5201BuBGn8qn1ZSHpbzWOqsIYlSJBzCCTFNnXOd9BLiATx9gYc5bgKkeYonnphdeFci6vAXe,b189a9be87fa786a,2f78bfe7c6595689 -Fe5ITVRDCpPTBtWmVzDPdve6OEkolYTO07aJqqJfij0zeYZJKGEI0L0ANyf5NEfxQazMDvxvoUUIF5UgfcFj00xpJ5Tqs5asx88eyWPYCz6Ad7oFsuKhzT5xmlxto9jS79klOy5USgbUCQzUSSJ2PHiMak8SdrECFeW9oK75ncYcYkyQAsPtpUW2v0gVtJ02VVV1U9UdATTVxEd5klLkT49oRKCDYVI7jhPQtsYgq50eqJzlbF3SWmuI2TlnY6beQr2OruMoBu3HV4DYjKjmDLN1mysL7iHrciJvkYdxp7cqvwWFxGWIkl1IVGc6wfEQZpdKZAT1BqiReUBN0nquIyTKUT0K2qa3TumX56VBaMovl9OSsTf3WSoxpMLKMgNX7Dx,69c77b398dafc59f,5fc46407affe8ce2 -PKgxWDzIEJ3ZUkGvm5KbNw56ywPtlfGazI6oPH8DpTMxC2T9O5mff0DWA1kgRwFUGcXCB0Lk3VAckpJXGA6iNys4wuwdxxS89WZt2aCyUbwz0Nojc1cEkRFeeVHiKHqKLtfqe7vYoxOrt43Nq0rlZEtrIg5tqZkoBQudfMCuh2OIGvjFsTi41Qgzs6d7IgBaZQpqcvFoSo8AIi6qAwr3Z9o4mao4WgzJHsmZal46YRQijGEAdvYvhSt3ygxOHKYSXW11mj8KrqVmeepaIFHigjHby5bVOPTt9GaXRwi6n4V7bXoaCOUUjTw6GA4d8gAWaedNHLSyjnlRH70Li76Id0uj3aHrGZ5tO0uOOaNApHJhR1bkjgYjLMB8Oa61SP6pjdisOh2C5dYpgt08Q58Kw3k1tZJKh,d5448f2035b00647,8e030d557cb26f3b -uj1cuQUYmjMfbVlnGlgy2blTHkwfrQxfaMehChY2K7K4sUqKKf8z8XF39O9BZYwkcbhlMf1KTmNc6y2QAjPSNNl1stLUh35Eap8Eoz42Ck3kWW7SMLgLAc8PuTm6hxgQuVTlvdUzPSBO4jFWUnKd1BYfkKqrTJRycUfqUqRKzOZV7TmqACCyu4grk59CRumfVCoR0hSPVJ6TAFZakTB2QM3r4ocbzEUmKn6yEYHFd4O88Fq55iodZvnp2KzxZQyrWTrNC7zTPr6KlJf4Ug4qSJYHOS6HwkYJN5ENQNbk7E6iRhzWfs4wxKCpEQf2SCxKJt0nKQRy4vUnznbByB2lDpzk22o5bZ2No3vrvOe93DUov0KwQhPRxnlce075o4RMeRPNQwDewMNHrgqAt8oK07kjR4iDORt1b6KPnMT1w6YjsnjRqYgfVA1ZuyPwrhk60xD1pgQFiJcMXVfTfImmDaAQahvObfip8JMqvFhhExFiFxXqvDU0DCdrvG5bOhm39LJzNbEOLQnKdZnuGUtf3FIPgJuDXXkPeaTfW8nvCJw9,9f90a2a4dac86629,b90170c9ca4d8a8e -RMan424nhhbxC93AXhLqFm277TLfgAsyC9bD4YPNDIsFH9A9MeGVOUwZztH4idumqXKIGZoIKk5FWdpJ1p2id8Gj8fxEsE4V5uTASPUz9nF7HS1EyCDD6678FuYTmM1lMMDEorq8XHGfbQXKzqCerSvjwRsTEggEEGlfmtJeDlIeVqKHSdyebkhKa1rLCXKhgVg5tNYpvmh0Y4ZFgpZJLobwXGmIT5No3JF0BhaqgQkBdMHQEJH090gbgA79ATVyQgirTTZYVFxww7ummH98TKsEBBvRgnKiblngt3QAQsExzgqLGYJuEnsTvM9jtgqN1Z5pYkrwMBGcXfLkym6JOxyKMGwObAVdFkCePMFe9c1PuKWtiBdmiMtvBab6M0db1nbIcAU0ne9LSWM6QoPc7H2khoaLaISzSkQnADn7PACgzOnA678tFaJlKnAeUQ61Ft0R8iFTbvPxbR9wuugn4RWCTPXHBSyHQLVIDgMKuKbboZBYyjNcyI5nOw4xI39AO3YdV6RdNuBMc9y1Y8sFjDoAdem60hIbvPduL46stoT7zNcY30L39GyfRMXbmF6lIeQCbBWptStDMsFon8TvdnHBbkJsSHOKcDObNNcn1qcksGUa2hXXVsLfOTR9XcJIs1tDLdUNBx0NIf2QdG9OFm9HthqfY8P5QDS3I9FpDD4MI4WcFnMisPI0xAYc4UTKsM3P7hcJK6BZF8yoMrU7qAFMbOWeR5nvcfZQ8qdIdwTFx5Tm5MidW24Yyahgjiw2Ixh98emfLM6Q0jbGieMdghXM6qyKiGVj3wCJseIbXacmgorT2m8arI2vJkf12dhTi8Wq38l9NnmE07Fzzf1JJ0a5Kd0zTgRCnEnRj4vi7j03LKmy9ZpDOSkgLs9FKeId4,cfd952b56957afe6,d04c3bd5ffab5701 -xd8ojKSd0FlWWroj273yCR1jRUuaA8JR6eOYwo3VaPsAHAh2T35LnpzmMy6n5Ik05R2zc3bbDA5Od8WJR4xE5k4uATiAzqQSgDVncjlEfxzCNpD6EPdUa7i9shYGt1oB50LX7UFhbfG9WEm98o55DVI96asDvFvGNVXUSPLI3oXcvb4Y5nvBlAB6haYUGvyacufOYMSmx3KBnGDR6i6un7BzpSBZRFCo0atlOezaiH6uzDrVW9qsxcX4zd0wxZDF3FLLUs8PaQoeFYgx0FDup5f3vJea6gNGE0h7OrKOqsxkaHxZSuydj7P4xBFSoKrLP4ly8s5l1gaxuoV7JAeS41W49Ev6gmExtGcEI2BXRcamNUXRvvEAHG8TTrhgWejt6xkYhCcvI1d8IxMLFKVcqWsJveQa3tRcIm,9944c313574f9129,fa36d435a2b5a8d3 -qvUuqvEZaC1QOmNooX1swmRztFIGlJJdUXhleNDatuRuYZpymetVnEH4eLJ939NytyrBHmQScFgA7kxDZEiJITpOue8pKOCiCLt30HoDC4pFtM6bX9RXayzrBAsr1s2Mwo92ZN2uI37qi1fzL07zMRdzlzQLuwRMGEvovXoTpplXTeO8XREDFtjsW7KQFT7TibNsTbgNSYpdphU8NDZ96S06ZltO23vkEv61sNnLFX15YPrYA4xSddRrKbd2GyTBHn4gNxohCzW0aHjeBulFplA6r6VrRIrD4uZ3MkShNnw6zwBWT,e719110a9b58ec4e,9e236fe9b813bf6d -QVGSXhjLEplnhw7vhkjkH2ZIGw0zdBZ3p84C8NTfzljMQEUdbVCXOhblfcuXC1eOLK4042OMiN78RKTk9WsCnXEqbPsBAsX31Jk2bif4FILuosUMCwtv7R8UjpYtEtvC7BeaSPapzEvOZDqzvPOGzB88YTVPuR8itshgHFMZSFOpgEriKjNTK0cyGZj1FbQKgd0UtnG9JtH46Cgb53HPsbA0xXgeIrczejoIWH3HenjqcUVpfulRljw0EOkATMLqm13UXVNgi12u2XYH9R7D9TTaN3yoWRmtWyaDd46gO44nK1nWUgVhda9Bsj1pUgJyP0VoTgTQQdKMSZZah6sso6K7LoKK7yRZGbZApTW0e99yQLJ5wuuS5XukRp6IxP1rjCFEkU8PcYarm4N5r85DCnCmHp0VG6kRelNBzUdnLO4q424FA30yJalINYRPdPremJhA9Evo,22072446fee04b9b,2cf21ef5ae9fc5ed -yqX41B8xRyXK7HRLVa9EATVrS80nc6kYNw6STY17ChIQ4CFgL206Gi2v2cUrnukEpSsbfbSOoJIUyapV9f6DOyz1aysVfZ3SRUCb8vDm5usjvxi2HkscakzhHUasdaO8XfS8UyokRUmbvxhngM3PIHW9vPAdALGcVmAV2aIm82OiJBkkc2E53IAOkjpMn7fJ7Hk1vEuTzMKlkluou7kHCTPZkaJURGujq7hOFvNqqTQhDL6JHFUEZ1YkYv0C0ZabDxMB7DQxqYghWjFW8QK86VhZb9llOlXZhmg10IennZAnORa77x5xDOFe6bwcik3ro827pyUNsPEmByLMrto6kqwL59u3EAFeY435NmPh2Ts1abxIMQhM7mzXzm7mzEp1ie5BhZHbFIAXb5Et6T9Q,ecc4cd6db524da27,b0b4047430ffb41c -Ax02aCNtsUFXpb4jheovdzgIIL63jMmB0KATu824P1W4VBKscfMbZLlqKVHoUchPh4HfbqC3QJ7xURyS0gvHf12EHMy8Q3EiDGkNusGGZhuSCLQInjdHw48glzDJgxwfWKpqEKyt2aQzOzSgRIaZpav8pkD32VwIjLRwU57YNaaUZlPOzvHhpNPkFkNS3sByfxDNaYaBWuvYlDnIwFlyZ3gbeI8F5Zj8jWxXuAfRvEpMRU8hQBfoHArfVcKKVyLdd7QHTTJgg6TLnw8o64JBYjkP6OzEWI73CLauULYbEomYF9ldzyAgzCQslJHWGM3Nril8spGQQB6YI8fLhBf8aRrOc4JD3icID86oz76M7VuvYMfNxRDaG4OneaAQgAIZ2FrXi2BkeHHQMtHYObDa9bEjvqVmh2ZdtG1n311VQTFGs7y84MkmgKbeWltzuTu6h3kn08J2F17VymKDtHXpdNUxrM4RZ9ErbcdC6DnG0JWvpBAaaHq0CAMMwRFghkbjuEGSOzPVt9PiYaf,a5fc8655112895d2,5b4105cac1db4402 -trupx08ewCQY3NXEfwaJTzGtzFQWIJV0mqzjuE8a3D0DGyTxSwB5GRxkoLpslf8Q7rh9KXnNWIWnsOfF6zZ8xXKX4XboLqSTTAL2asNBqbg0FZ4bR2IaA768ReVL9H2cJt4ARDZqXHbhwn71iKszTJtdPmRW86SLbLjfdfHKgwxxsIRxzCVk48STGoy3ySruPn9bjTv8odRnpX2fUrxObpgnx1r1c3YKjjvdGP9g8xEVtGmiRgJ9aWHdiEktiytsLtyEDJF4DvSKPioDRUnUSmEkMu1hnebk5eoqfvg6I1Be26ofC82Q7RH6OHzWpMymJ0dxDJAs3w0KPCiXddI4fxWL1Gp4XD7yFOZq56whJ3i88YhtTWekmtOEpf11zyGIOzvLYr7UXF4RaenoisYIhBAyiR0j8r8sKEbWhDpwyWfj61ykx4qmgVL4xpn8fV64uSCk6xTlLhKMtpLCTEVi7fNnWJ8GlSMnwCKxeIGH65a243DOHwxa23ho4XW0vhyVcnis3SEymjcQbnyPSrPRRLvUt80q82bTfUeRBq0hiECgcTRCtWbOFBl96UGL8SpJLp43GwshHxDRvLaA305863SgMbLxuPRxQ0OkDdf5UcL9g1xohVNXQe7bId2KAi4wNCTsAMIVReXMNZUJZprYKHfvJ4WJAfa4kS8kMBfkBN735MVzwuFalmUYnWEOyu73WGkm6UvA8zIHMPUOilOyv24B3r64WMlnbEsefQ4qxltleT8z0A1TLHM61xIBUGQzLvZveQsfBNeGzRjN3GIVxMJ9w,9887b20292f75e8a,c1ee5bd07b0709eb -YlVNKrsYwkLUY07VuKgNu94ZActB6xvu8dExTiGUl5pJ7YOTwd5XzmIWgynN8O25UK9x8OlF6PdwfpW8ooUFTsaGtfecOG3ATFLvzkoriIPeWMxjzu2oaBqwt0kgyHLxbM2Bzk22tc214vePlnfurieZvNmdUpWY1dB1cYO6gMhnVx2XGUQFIt41nQ5umImCJfjtb8vRCfmu706hkam90FMI5dPphkhnPGu6szfg406WN3Y602TmjK16xhzns9XGepZo3AfIVXvIxFJaTTa5cHpZ29PtjFue7PfcXHMrs7DrJ9t1Jv2ZzCRgW3lqkV9IF7LYP1SZE5eYHLwm3GNOOteVsB5E7iItj2rY9OHl1mES4EnldR1MEOP60xN81YxM2Cn64HPz5D8V,a3ceed0864d97f8a,158615e8e13fe7ce -YppF6ld9fTAr8IBWYMPIfFQLtFAbQbWFxzVhRytjMo3aC727NuWbvL9Is3Mk5GUza8t9UH2nTSfN4wfr70E8LCugNfnbmyXHLYahyWYH83YnpyROeYJvZOdCx4J3WaRGaD4sXNq6V9I7JlB5E25gk1CQmX76jINnDAsYCMjNEQut4M0bqaCEEdvZxYB9SKvEkn7S48coNR5uLpTOODNpx0m0m571xF4qatYsMxiu8188RNs7LOv0ovvo9TGIaWm9vNMFa4x4n5ItpUFulIVgnwh2P046E8GGeF4FJcKNpOaGYafxfa7VYSdCLiZOcf1o2lsplOudb0ikPqXfECUmy2TwpVnor5Q7OMd6dwB8FgzRkFfKHOfo68IuqatF56E1QTMYmn720XmJREk2UH9MnvtRxMr1s3E79Saf2NGv9zNSdNpTaNdFRI33TBTaPhuPO9FNtrJwFHZn8KULkBjDJeWw11n1tC8rqhXbD8k7EHFW4Lpqvzid2ePOg7yMg2aVCOr0ZP8fkSWqad9zV0cBGfsB91AA23KmSp40ObabQKtOAse11curaaPktlAJxoT6hfksmsUj71SUlnjofnSggSSb6Q11IMqcmgWvfpzZr65M7Ak3qEMaHzvegnJlrHy21qca76mZfOgc5qoNEx82DEtDckJ9nQ5oYIInGQLHrORAzUmnN5yqJzuFlep86WFTRaORGDblmd5RpgqHNLHR1bKWPH9Wq5lgCbRhknSxaDZ9vjeqyuQivRL62JbWwMjb5LFjiyGqmRQPgmaeBUY6J8mzD2KapeRUb1ER5b8YkKYIVmQV4apXAMUwzj2j3gmQNUyyaSGcztolNdfCwIhNHHP7dB4IQcOsusX5h2U53RkFlqAIqylUuEImWVh15,98a3d70dabdb96a7,2bab32fec787f04b -fwd5DRIPfRfvCdHrvpLw5ougBJI1KGqzqqZa2hdhPyqYAG6VrepSjUYD1Y41BVq84HngvZQSCSQxdBnzNWdWbSYKGQGiWH4S5CKK8ZgObmLuIAilostgNKJrnHyhfE6YRZJjbm0wO2CVbzEtBbEPHihCG3wZhXLvudKsDP02s9OntrKxOrdltsudH2BX4hvky2bHCCH9Sh8MxiQTEnbjdvDvSm3EgIK5CBSsE1RQ2RVmtbJOMQjp6MG6WZxh4WVZOImBKyBKVPoEHMUDLlpPfRLdpduNCHeDjHnGV5PWFKhgvUP3uTN3MnawINfNoyh1YEgOg62CwwKLCEes4bN03lYeQWgsPxCrDVtXtVKHBN5OYuLml7hH5r1GiaL9jgWjOHGt5ISBRdH6FO4ILDDgJmOoxCFQROT4mLvxcbkgxVfVj3HgUQKtZI2EBWxdxpksWuuUCYgvThNkoVBfNVCWFs6OdU7uZecfMuqaE6n8IRR314CWoLGoL8QhVCPiEjDv7DdDBNr2wVLPzG4yOD0T0fpJPYOygErYfsbkoulyyWSpDoZzW7MuTRYzan2JxSQnTPL5Qe6kOuO4k9KZVpVuMiYPYSIn5WlyM40J1HGM1SkKLGS7BEKu9NmfKIOQLvXJ5qrRqkUr96hXKHoE5UtC8HvBXYYFYgfFJDdQikyzGEvcjucjbZWLw4gAaQaZWA97qzppwBkQjikkrZNBftAgskQrRooGSGvPReERYB9i9AYDrpUsxNZ3oWnsuRXQb9RLnaQT1mwXDoHBxShp0vVAFRecSQx900vSzMQCCvciisvgYlLsb4JphhFCwq31XZe4QZCGP4bSzf5BSfHzZvE6QAdGdJUNy4ovrZHkvcxY6LM3Blxi0j9P3hzuqjovAPWQx02Wn5CDuYtuHCRwvfqX7VC02AxBcUlDiSFnlHROrHZ2KTTtcfU8dbpHhPoijkWMTwqhK50hozaqgU,23345bc667868f83,bec0c371c2a49171 -uCFz4iZ1WtcelHMrDTn4dOLDPUDeqidREhgZpEV1zGYnINewk0O0IeidBb3qqPJbFbTskCR9AR9kK9cjQrA23pcXJjUZ1a9MJVd4GiY8UMdneptaxs5B5oRADrN8fXf3FS9dTXt8yh57ISkdVZnyBmMSUamjEBxMoZRpkYxQQMf0jLOyQ1CIzD9fnJvnEOL4OwBummuH9zod53J0BoPWkiScZcJmglgR6VyDaNPTndmmJS9ZfQjGhtI1t8RtXCsaY8BiyHsg4mDkwtscGz6WVgYZiGAdrPbYicLFzoYyI1pjNxoha4zXbnMwCvFg5oStLN4PRdMDf1uozXltqTdIWq4pmBgxXQKLBbcoxXcZnY4P3H1H4174hnFWIPPuoA5jZp9nBzMjipaRkkyXJ99LOGVQ24Qeoy54XjUMpueXwWNEzhbmfErla5lStlIqXQGjZMJpof0Q98wIKG9PcJcFcm70Rf2Rn6YNlnLQqYLHVe6X44wSgN1fD337ZfxmWCf3FS5gu7Kj5s0zN58nHn3rGrHLWLRz6ubuh05ZVbwEZoAEjc4iryumGLYnurBlKXqxkF,a7082690145a47ce,2e078ce8ccf7d364 -6qOng0QlOLdl2mGTy6Zr2xhJLb8K23IhIKRScCgadQUmJHFEGgcqGgc0tnjhKXPuXfUwWGE7YHSOWcE0b7KRbtqPm7RJVcajlWZbo7Irc43LbdbE4Tx9KwjqTx4sxsIinGUuSmWlteb3wmYLpbg8kWJzhedTe6nKx0LDfNIhYSdWHlHhKXwjWm97Lv5gF5VyyXnxsuVlejJXbkGLppDhe5y9XhdOa9eWvDO18byw5jZQrAdIDt9EPiskp1NvxV9ZAn9BISgiHaV3DqXkrqLYshwfSQnavXk6E4Tz4o49UPRNFhhxkvtGtIBpNil6Z9fbgqtoJfwlwNFu2mAZ0NDry0CU9coYk15qm5ykjwaNqOgn5brrc7Wca9tAoZFyMKIEdNkspzQ4YisJBGFb6NZiUpG8jGTnRkUV59rRGtlvVneSgLutqv5PikblJ22xUNBic9c4a95i3qQeO2YtYHQY6SGkxSrQZjPtJy28pDU1qIa3OjQtU50wmcBRXMK5cuN0Es8g0xOb4Gqiyc4rn6RESWt4stTNP80dZCMRKMWqXmbzuw3DhF80XPLom8ODSb9Tw3vPNMggULRBKA9iEuADz8rJ78I0CaKXqQPkmrlXHqa2fGJhetawXa1ISFe72hblmuaANK8xmOGRb9AJOhrenfouSbPKbFdK15RxFUOligTfh0ShouKaMjZQMeBQRlGScR52ILJRNmRSp0KVmIQA2XsZnifF4NMC7tEFTknHtgBRu1QuS9SRZIHtBHNVH0asDpKQSqzL5BO4oVUDtyQkBMZHD2zlXHRET81evLQpqZ3NX1dJqKzs6htjUasuW6lAs4g9TKhPh5u,c9f8c8795d0ade1f,afeb48bacf8fbbaa -40UmhhtsPzs5eAA3gDpjsJL8imoHiO8dlLsqNEL64BufXXfeXpPKG35vPzUJ58jpPMdWRGKf9D61qp3Y4nLnVVyeTKkfOqxs0zeRkRoO146xSbl6iXnRT7bemeikHELp1aYXDsZCh98IWS94Gx0hxfJ7sDBUmhP3hikrUFjD2KqEglJd74t6OCMvUTpGLDv8Uy1lBatrnfnv6lWM7COol5txbi6HIJuoO9M4rvOgz0tTRKdITEnZGVpBAvZoXk54Hf5ErVUFHbu6Axt1ruBHuBCa4dggjKvkj0h7c9JtXuWJDw3pQ1KElQkgeHQ32TLAC77FTyqOjzOt8k8CULkc3bdgZwuny6XyyxHzk79O8ZgeCnPMVhwPMNtGbwFE0k9nrtD5yEwMd5zPCvpyhSr3MIV6nLdK4u5wFg0Mu7TmBeOldV2RJLTzLDPZdE8r3SziLlmlEDaMdu0d5CSY9gD6beo9kxqioEh3PlNNtk473o6RpSZpVjmq2WgYWcNfYfc1SHYH0sfrdVR91C0kSictAOZyRsc30xlUmfijZ6nTeZlnkvzardbauU0hicJKnc16JSLIOyFzVSFpHV86iDQBylW2qLM2cAgqVFmEOGWAwrf8yEENAeORHra8nk6blHeEzvoviVzJn2Dxh4lmx0w0c7lnXibSw0ZwqqmuRZHinC,a4cb8fa48785b996,9d253c65a09dd434 -igPhkx1kIuVcqg20HgtSQuQSmd0RGGF3zYM6S4V5P24qlKR2uAZghr8eEi1Z9WnZynsMA45tQFp54zy03XtzTGszbfrx1L2FTpjcbfiMXWRy4N7LcCtG3Vzi9U6JkgQePHEX4TJG2MbnJQSlMaeP8s9UaVLKxXnYjfLlOkUEshcWDx85QmGtzATZ3AAF4L8zfiOLHXhkmrqhi7Efu8yfcgyv5HsiN01QKlo4gWpJzq7dJeAU2k6TKgxzE0lnO3qeiVLgyG25GmqhAKExaxtEewNbgOpcUWFfVoCEZgnBs57I6HH,5b182ab2c9eadb7d,6f765152305bab80 -azJ6rGXPgJB504AE5EgJ5RDOAkIOJNKOz20Tf71FlIzKmWsaSFFynu4FHqgYh85uZBV4F3Uv6to8y3Ivkh05mW3HrP,c1d3ef0ec2ce3c0c,9c4cb17747c78938 -UK14gQiKsdiEvCiOi5vzuqnP2xROtI8owmSlOSJDUVMKla3Ut6CBziy5WGDQDxsvUWG2w1t60GWjtzk6khEzQnvVpURB5nuRkP4YfDGbwaa2XS4h9QmPdyPm6OFBGawRNxN1oL6YoqnTYdVQ9lZ2QARB7zW0Jt9I2tlC3AM9aqTuEt0XQfoM37NXikeVLEK0bmNOVFUkRdPHzKBhE1fIBWH9wBcjQnOmqsMvFvjwtfqiPhiK70mhfOnql1sxNg9EEkG8ZSLoPaYMoOXKqC1ZMLPhgEJuhWvn39KS4WOrbhJ3OGAkHVZLkS2fth3tt3LfwHkBxDu3me45wKsIaEjL3SasM7eQgBBw1HD8ZtAxUxR5JrVwggzu2mEddF0T4BQUlfvRKvBWI19who8Ky4nR8kQvfe21PLZ05XPpD6nQ2QpetP5l4wwC4FdXnbIvuojybsFAJdGjRxkLgBTZlRSN3fwcX2fYkGixrOiaIpjh9QEoyLnCzfPrxmUP6irktCtYrcLaoxNTS5fq,702fc08aa277a02b,9a9217c331319063 -ntW9UNsrDWB4cEapNU03KZv7tcBuz1g8XKBXtRbqo8Z5HU86BfHlBcRe8u7d1xkC2HMWigSwkeiRbTqYVtKM4KbJOieEiCbVP4T00mCr8VBrQh5j5or6jkk6W2U60pFG6PJqkOeR3NJjGk1xridLE3nFQtcHROZD9iF9ZEi6rvpcn2TZM72aad8M8LeCYbI6FFoKv9W3DsI8K3Xwz,1bc506dc2807d890,c614e8df140483ef -hgshOXeh,3d827f87ef026cde,db3ea59195083762 -NRGocIl2TEK5y9NkyFBhjO3wQq2SNkgu2TajPtyh4rAUh3XxRxL5l4fEZr5L0gTN0CwlOAIsT14AjI5WxXJf9ntk5K4ZfYwq8roIaIzuiwFEnk6etc3rplCpPXSvqu3SNEYS437G5pXddiMc11Ids315pHGGyhAJCqUIUxeBqWxhrpjM9frrG5CXG6urZKt9BXShtV1jswql32TMj1RfInmlkIo5ybhAAwlw2J3uuUR8urkVdBzhxnqm5nTpxvJN2i9GnlAiBZr0aUh6N7KDcMkV4Eg789Mo0HsrOUwXaIvntbAt2KebYxO1lVNBBKmbtgrRo8xP2h1icAlSpmajZarmDlkTa4bho591tuOFgDhdbCl5rATiYLliSRv39BP9QYMdwYX2KCn6wEZFrfaEUG1XVFM97ZQ02L5OSiUwdTvpAizIX2qnIbb957pAOY33xaz5kmOXRfR3J4NslSCBrMThMTUXOUFRSJsTaDlhsCzuHJtxQvUTgC0itfQPtTN1cJjD0O3iXSAi3lz2Ni0yuPrynbRuqqHA1FFfRNP8SpheodZ43KrQeCZDwHpR1uP7ZngpQMWqFwjwHAmuEoT25nl1x6RALwdv4EdsLxSaOq3Pg7UYAWZpfUlKMcLIDmHyMvMEN8OJuMtqvuBfGGkf3TWvPLq1NW5XGvJ5ybB2rnU6qMpfuvpq1FCyFuUirSOcrAgkpSBEC8Ieu3FWVE702xkfLdgTkgzK94bewmFjQ3WrmiVrEU75WRcPJCKkF1Ir7NNjE0fvGp7iS5t9lLsskYK8EqifMlHNlE5uHEiU7qzlKgzjycco2JaVCCsbQdBEdl67uGSMGEPDAmx07cbAH2fLIIdVaV0z9sl05w4JFzaOjMviUdXt796XtL8FtmGVFqz59SkbcSvpJ,aba5ebc498e32d54,ad0ea8cb4b0ab88a -6wy8gh7kJNZzXsthHUsJnuGzCZWLhtTMdBwy2XniaoNQFD3UoBfwJbYHnnXbYmj1qtgLcmsu7Px4fLyQmeAHKGQQmJbxBghS1IO37x0w16Nv0UqqC0OLD4oTvWzaNhhp85wWSsHnyf1zv80W6q5fcQ3ivwnmKpu8oZ9IqdFsn5gGBnuX4GKVBWoUPrM0lXUg6rxp3M09ydvslfAmPtne1zHb6sqVtsHP3rB3nn72ZBAS0T1jkMWti0P4KhjWMbR7w915cyKI18FSFJf5uQ8ulquTXhj1doc7gc6I1Tu5,9159dbc8083b392,ef6cd9a20830f7af -pG8SgJOWmNQGUDJEFFozfribfJJED5hiEWEyusSeuBgw45kOt1u3WaSvWOTupHHGz2AltJ4YMh8R47SwmoJ0SzXTiMG6qzyAoOuHJ1rzpAUUwsjJw37VZ282zDkcDIn0fVSyE6huYAjfTijUAIXChlLUl6CM4iM3mAKyTULqEnxMqb1Ea5rMyGhVAafOH4de33ZlueHPhJyLnKDYOyVtAAhgJAwdW0vFwuGCok1TCrJ2GrIFm0bSANPlGT87QyUvDDiRp7xf3tOt7fHw04DwDRckTQDHf7aupPzxMgEO11iQ6EYiKW5TSqpvwXxZWrjKCkqCfW0jMt7QPek4S5zbPs5Aog7duQ0OWKVgIzuZlRRb97YudU,862e80cf664eee9f,4f93a62efcf4d45b -HMGx9z5Kn2D5qq856VBvZZsWtTAMtiQROAbrFiBmNVTOoDDxs2IhBgvqGENAMgRi3WC85AQ4ZAJ75DO3Vst4M5OggCxyeF6OVE3qcLowsWKH5DumSpPR0BWLjE2NAkPSMevdGkaV1F5BYhMsRGwR1Z8Ayc9Cg2ZvL8vAwi2MlH0P0BPJEFjvkh8YKKkNi0d0DwI2VVObseBANI3djHdb9AVDJO4Ip5Lbvm3SPWypRAKmKl3JONWrmL92VdjUBeF173qD5X72LGvqWosI6np2PTo3jf301AijwCv1KhuU1r0bGrDuICQI9mrvOpRYLRuTKJyU968JNrvpDf4Zzgvt9O89O1e6GWv6lgVOklei3Ok2o9yz5sry8sbPittl2H5UMVKGLkvhg5FvYYqunKRqiS3fLdXnmw2TRzCndrm15l7HXXnu3zOryL71gzPD7ers4Zk41Js9Z4g1Q1nq9XwuGST86MlCrEwTMzXbMKUmg9b2y3fowHK2cfopXqlCAtSbwTguEV2g90D7IqkFnr0USJYmb2nR3oxcYxBcYiyJKismnDyqd6tZynspxaVxElv5w0o2hAQWhVLR9ZrkbY5Ye7zV9KjdlxuM3WAqjyVbiv1xSVEkQ6zek41ASoFMw3HwXuQ8I5NUmXUgynGYGo0LwXXsqrS7UXJVVobiK2Ih84EgGjJWqSe3Txbc3Chj8irQOzRlSbrAXAxAobViJkYS9l1KGFam4BkX,ded0f2fcd2eb7ec3,16f34b7c9ede826a -MXo0htohvJR5jl4CO6BMpTpKhmezAuND7bm0ocoeew32jE3DoqU6TdxnFxmAfLDtUKX6jlLSG0lTgGF7UO06pSVHUvNYbMa7vAlwfwfC3DZkz5XDQFg2ANuI0JQ07KBY8lUxxjZMuMd1TzCumePFoO0P3B4Dv0z7V0i4H15Ah4oKsYikkrLfcmvx6lueTGU7PwisZvtsZKUODoGwIplW9ghEP96T0gufMAZUZ6R2xtxZRr4N95RqtqcGoyucjdEjHoWHR0Q2GAuBckgunKRzMXI6VvjHF1FOfe7L8SD5tSJdyPxxuH8RC6nvUSJ9CN3iqFUFxB6XAQK7HnydyYfbt8oHr8aoVe4luUUTKfnSh4mReG6p17aSL05DUf1b9ZyZoNhzxPVLrt2BUjn4LR45hanNvWrHISILBqmoVLb5llpl9tyqhvKKhzdFMrFowKjJoRdNgr9yBDHRZxqp6TqMuQTOpRz1FWrpmMvX9emDHe5ufvwrA32jXxqLVdZIbc5Rm4sMtQtRVWZ,8aa6d4053749e9f5,9603c118534b948f -2c53ou51Qd5AWVAAghLst7UXjUgp,40e958d0910b4bd7,9712c0e9c3546738 -K6VhB65SMkaqI4l8EW5fBMAAfUMjAzrGJn1m5487ka5PtvzlUkzYuqVmL9rX8oS8vv5t7GS7CCRtYWpHyKfLCxe1eWehn8Ush9GSUmUvrzb0UEeL3JScSz2NnRUiLosB9izX5KOHoyqNrY7HYvca66ouNBkj9dKDh1eNcOCZfwzfc7mXTD13N8NSACFkPvE4zVnnLVMp62xB9tPREejuRgo6GQWnfCc2zj8kbv6GJkVnXTfAcbo8hMlxHN5D8x9Yu9u9P0Z0Ovzi0pNc4HZUt5ZiLlhMawEQB2r9aCORDbXeqi1NEDpVWnL7O3w1AL12dnq7maCob0CQlj7NPfLgqH5qYuNJe6MH9vHFyhnuKkBkEhaGvJTXHP71dPAgQMGHfkMF8pVcAKL9QZTUjftmzoBquUkPznv9x4x6vvMveEC92M4tkIjXl8VvsZCzi7uN8zOknwx3GSzxmpCTH5pJPx0m2I4xHykUMkCXIc7V5Kws6ms05OXs2s9iLLPzlmvDoNIs8cpmLQoCsa9GjPalCdCSacQubx9DD6XhNRu1R9ef9tHQoEZ55c4HrrHGOe9d2IiHlzbWKLObohaDZ4PmUgY5spZDTzea8R2401lWkUvNlFqyJlJ0njI0tZjw1mo78XyhHnZbRqVHztKLHIdUmJcPd9wf707WaExdQL2,79d5dd221c3bb7fc,e3d20458b75288bb -X2moDxnrDbPpqHkKdKf,41fcfe9f5e5f4e6d,ac9e787952a583f4 -dtF0svqH9jtcg5gIGdfFWtU2pXkKRrDKy2ZwT1GWE37gfYrqJocTYvX2zBQqk4vMf0TscORjtOXqATkpKlevx5avBJXrrldPmvZxZLcw7KfzWS1LQy0Iz116yGtmF80A51OoqpdcoHutkG8ErPmxTppUmAISbl9HyrEa0KiAUjn5TyB6n8r9rjICW9VBIdq72JWhcjpBysITNgcs4hNmBLYmZ8w2RFkuwPBZQvPotc6SdRjTtEhIL6VmwjX7WmN6Hmw7KbI2hxQyF7t3dyNvvslf5XjvBQXdHcBAjPFW4nWZW5YTZCppZiebABf1Hayg9ezNJk93wicMnXy3iJ62XbN83WuniDCKx0DLKbsOwGhkB7nDh6zeN7qLAOnYJZfue9z1uDkfXsYGPPKS0VYVoORNqJ5enKWb4Aa7hlhBWxoAXXmSGAYDVpbiS0tkN0YUW09usCxr9q1GaKwGrzt9hb1zkvZwGIPAQhTjbdvyw3Nz5dA5WAHZiub2pt1I29hAhzwwe0UuM8p4OXfc0rAzINmB4,da3d1c8cd6025ec3,e3c460a21fe907c2 -PwbRZW3IcgmlMOTpURYqJ6nqeeZuiviuh3sgFnNp1YQ5Bb1QpV0hUlpRsqaJ89Oxq2d8WdKOEOxOfwofiFAV3SbTOHtjLEwTYPOf0SOy0SCJrH687UE2FD8a73SoPiCeokm1A4CwwP1pv4aYJP2t6rwylDPy2aTOa4bhao96x5sFxhddoR9GVBFt1M6rx7hgt8bpuGnsWdW0nLn8Yir2dhzkYjwN2SuOQpmQYPK9rs1tr4fjmdfXXX2KxTnFAdu3z42lglYepFDSzUP40IHhADnT50U94X2FIGmfxRM8KQ2ONass7aIZDxuqSB2VZTUYQmCf5NvyU3vetcFcNsfp5aRINsOmbniMPIBnM5QWYI8xaOPz1mjxoACrEOCJCqytuWsuJkR0HwiANISCsvS3y9XyVybySW31F0jrTaLBXnoS4179XRUvvpnFhvHnQUu6DgbidA8oJrg4QHdIV3KDoxDu0Zjrpc1qSbem1dOjklH2KlkRs0c5HgtHpJ6eIPy9onB5CObpAPulDUZL2EnbnGCFxQzeGgtpoMVLUrCiZbeJ5O0jN8wFADoPlAQkavORUeJsAYqpVBFYHs3GZpZHO4IhLRIYNvVBZXzbp9FAQhDkMEPonrojue8glqOk4bYuN8LoByW2pKWAtLL3kI31BosMLOFCCvdCMkqOcbUKCIepgnLw00BynNA1ljUfjRbnhIfzoYDq3DcVTpu2IHhoHhqiAD6uOkecGvpVtk7MR8Sms1c3nbJWuuuNNw0m9qERjM7SXD2VODOiwR0uuMuHACesKIXuQd5VfKgS5MnvKJ8Temj3lpULToXKVsULwibrSmMVGvdbVITigVqOkztQRAVKpdwhR0KJwbNm5CZ8FjVAh0U3UAjlgy4mAJr6GHDulXZwTrBGjJKEwLXeMQEaMGdUiMGgodb1stYYVZ80xkf81ovWxzPJNh9lNpwilUxWTZBGtQ5e2VUZy6Hx7g0O57uAZtBkKr,6df99a6df1798ac6,2b8597212bd13204 -7HHjXArEvvZ8y3YZCJBTE4Cjwh1PWvWXW2WkSDJxhhPGZGzvaFIzukuGb2B4HeAwLzVYYT04xhr99tvPfiJ0rrFK2tZnIBoXGAaUUgE7XPX7kMRzld0ScDBTdzc0P4XQrxBBDD2WgaWzBF9Zh7t2BW20CYdmnBb7vSB8L0xnksEZeyJ2XgYHiGTiwZOiCfSVJ9KgPO1jfYMEaGn3P8KId1GRiP8KFq4g9SXO9ad6m5KsKt71AvXweXH78SwYEPBr1WD7R4XMyCHsA82lHMUiYQ1mFd6QNc6u0ZMJJhM6AtHekFdIIDrY0R9KZsjkfAj4dEZMnh33Re9CQuKwh2o6Vjz2RFcFQYm1mqTvTqMo8nEaxzyMs91emwgt6ShXrE4IefaxOcQF6M7K90g7ZlfY3Ts4ovsHQfKbVZNuBrO0FjHafqRLG2l2cMOzN8GCLksgHxxu,52beca0d1890b95c,dc538f54529ec46f -B0yb6Nex5Di06Rva4HYBt0o3t9JMFMwRbKp8zALetPDiYI5YJEvX4bseYVC1u1KdRyXMehrYYSesS3nUGF2f077CwqQnj8G7uUBeoo9gmr3Ob6Q4DhfMmbnRpyKOgTLUhjRLiwqwZ3wPbuFuWP7ySyMsOR7aorMDw2OKU2VfBucXNUIZlaTHF2oSQ9WRoD7lntCvxyOZgR45hqvGPIRamD2zF55nU9zDfE10bko9jFV4e9zElf0EH0hbGRiopX70VadktAUgijo2u717TmaFrdxEgeH7mld143twC9QbVVz8zcJ16AVyY0D9TEts0CuNzTksvSfz6MBSGTJVAneWD9tO7bHO9TNVJ4e8rZ3IZKhdPLbjBrJgj8QxZ421RZTs7MR3p9MFA5nSxTec6AeTPzJYRs92TAML5dFfEPm1JrVqf5xpuupbpQu2gSrI7J2j4qtkX4V3N1dhGaNx,117aa5e611b2a11a,5803abff01d2a768 -usSDyyPbNjgSuGwkMOofn39Iyf47UiYBMSzwTWfemyqMs1aOPLPgtliFm7NZopEKSryM8KlBGbmNBHTB1AoT393STDCc300SNHQN6tNacUfHqU1fola4UMYpjcDF2fRGXjJOyfoNGqInDGEP0xJtl6btsTs8rOWdphjFvDaFeXeUk3Z28BsBkFQzl3d2gnT5vjorITzBrLVSImCekhRdhG1JTD3OaKVizKq0Ol46gtAhkRIwK67SfVaJnbGbSX97UdCTbBPRYQgp4W97OgbEGVvdbVujhuz59ZKKjZXLtt6Hh3FLay98CDj8TGJgUHVmnnGzleA3OFMDZhog37pOq4owU5z89rO6X8BOZ4oMMDtJiAjZknG19oyqBkXqCqJZCmZ5jIh3zDONqV48SSyBjtFs7w9HQCfuE1yaxmYWKomrcPJsLDZHOwC3DvcBtPZx7qYaN7JvZlF5g8pnuqYHJdAsLz5dSx7A7Nh2PtoUHohP993wDNNtjIZE,6deb3eb71ba81902,262047d82273c7a9 -6SVtw0CSGD65Fa1fs3JnKrmqZJYoZyH0JqcnJmfzj5hUtKUf1LaY6krMBE5hal9bbrD3p3yOSPcQ4NpGIGnxXoGDRsxdlCTJpxZfaTi1Sjq53XGyKt0JLCXigjhS8cVEmH15jLeXL9ZTTz9gUGJHh30EQJmo4hdmXyTXjapZ7pO3IZ8H8qSxbOeMXDoqP5jmk269u8nOFynirkRZDrI7fTzezxmYfX57dvwXBxR1WxhHmWPaxM4b1aPx7vli5i98FbACyfDhpEb5CXh1T0uHx3JieAZwMSIIhtezvcBrNbFURXkRdgFXGVg9GqJBFUfD9PhSwdNcBPnxGSJVdkCFJy23qeQtMOYWBYLqcjdixU1g2JFzd0KSphzldE2lZIwmEF2t0xJsj98Ahas5erkXyIspSud4BnJdXi6hZqJxmHIg1hAXhAivNOzh168DBgXYY1d3ogf1v6OtBPNoq0W7RzJYUXpnDtUYW13b0L6J1AMxHfvFJx2MOgUsLBUhGIHt6Q4mgDwWUiOzZ7rEgG5f22VEsn9CCVA4keIurKtQIcRGwWdz6YjrjNJX0u3xiI5uJPUW3uIALmQ2HlicAD8lKK25xSnAETrUhOupxQ4OHjdPZs1MDixPiTYEiInnbdlToOVPs3wEds1HgDztJHraeFlD3RiOegM9OCezkwJx7z7XtAvEDDWSF9KOuMev6qw8PGWN9g617eIWI99OZsVK6cP7eNK9vGbrPt0l79APsrS1asQS8MTrtQtIePL1QjJ5nMHr0PaYty46xrLP7TD6OEtj5kYWUf4t7GIY7EKMKu0LHL1OIvVkeGPK56NzlYmJM1gOnKGeg1zQSm0ptu4gjpzaSs9TFSf9Wxb38DEZcPru2Jb6ck6DvxbfwjVFjOc4OPZBA,aa750bc63ac1d99c,101f6be8b0dccaf7 -bZYPLbN0Byxrj8IGeZB38reBa9y0Kia8XEqivrfWOJbBpVPHM8TLVTQCwRldANDgY6Yswt94piAKGO0ZNo8rwzCgNe30BXQCeSm04JK7EVpQRrsfKBdzmwBEwFrz9l3IRPQZT4MLpFyDDsJQiaXtYlxr1tabk6VJL0WSs1Gpve6pHbxjPU2Ev1ILPOTp44gbeMjngSr70f7I7eQuFnlhnsNEYCn1GNxKyjp5Z5dwlZGrdbzykrOKYYxzHSeeYZUPhmPd0HPGY3orwhQjx53CrXRXLm41u1ae2oNgjLkhbZlXyAJqYtGRG5ziNX4S6NoHZlzx3lxgMw61QJZdbJGD7RmsM85exhnLs2GzK6Eabp7F7prac2DgXafAWIJmSHBfGq1mlEGpxYQ4Wk5ph3KN6NBeLzujy3bsiW6ZWytWEAWvN0JpGVbKtL2GUkPvLNq1HYrQT7qR9Nmwa5DuwCpIylQf8qx3GtmQshu3NoYnkRNgdnzLxcYGSMJrYx7JPikze938D50SRTiBqsDI9b6rgKmSh57EnbS1XgimUQTmLZvLhge4wgAbQcEE3vs9k89FcbrOviuVVxROhRK1UAYE35oKP437FT6iXuxfmHElNJuhDkB6RPxPfBE4dqjXrtvDkjD61tWSkyMhJpjbrTfwV9qdsMtIWSrCZN0YrMw5bQtaGxh4RjMtFbDy0sxgP9U0C2xSyOq1SisN7GSUI4gcq4ihP1Xf1Gqaak2BAN5ZNIMgl90h8t13jVLmpr06ID4yXi73vM23Xc6JCmz5YO86eOw1SAy8lDeSYwD5McCgmM4ymPYnt9ihEURAMtFnmajvDqsXmRzpNsv0oZHtwOt3MJUznz,87b9942d6527e30a,59d859388aabb6c5 -ffvfk6uFJ88lBrhtH5XfNWd3gBjtFxMd7tfg1vCwhh3RtiwL4WafdPBxvs8I5vl0yRB8uDXBs19KrQy52JEmkPslezAVKUuzi29Xd7bh3RpeDA8nZKJNK8CJYmluuN2ogZkXbldWRSgUbLVvSDhFcr2j1Gf6VK8s609kFgaWr1dFfXA8iRUE7tTs0b3kv0fHUWCidZpGHYY7xexkiZthNPCiXex0VkFFpSsfFA3HwIZd8M30t8RmKJLPoU0Vnm2fX9fidgHtND0BlYt9x2wOVjkJ6flGz3OxGf2VvNIjkh9J9u99YUmfZ,57ef6dd19c759b8d,7472208cdd000114 -8XbJVS4fASfXR18klmpL8ZJaq5fSLnEB8M46VjCQBF5AihbzvXKkTZkxL0ONE5Ylyer5hBJKcMFfvqLU1lmUzHT2V6y6SzVIiQwX8t6lsH9tgAeDT9Xkkzv0iFDkbjAcvpof2PZipIhzsmEsFIm0hu9Yxz7k5RgDADoeY5ZqkrBCSJcxNLUzmXKipEIXkz2D6vKETdLDIOy8zL295mzXiEgoD6wGmpGJtJd3msDhHjKyn8K9SJjWw5jxbm2sImMVL1J17c1NNcrG5WRHsGvSsI2YmMk2U7Xjz7Zi36FPR6QNHdDDigrqkkhbFCpx2KM8mW1Sm7lVyig18HjfCdRpxJrNPbCO4yAIleZMCDvv6apYYsuCojfN6mATpj8ePdswisEWbz4fTDYGsti1Hd5yC8Wfv2IcfrfZcbJZgCMTGG3S9oue48VBMGeDGnDkDEmGAEXw,e0d9cfa5abece35,707317a47a204bef -tnYfmGfga6bVtHRyIeATly9zOPtXUyoedSnJjBKovN8hJ27G0zKNL5qApk2xAbjrpqyCkI8C3qXPoZaJyRe3xVDnznMkhMsOQD4O36IJfVDLPxIxfVgSuHoGBRpXsVtNq7FlvGKvWtsBEDtp2c8OyUBOZLsKrRxgS4trhU5lcFDXcEL4SaQPZvLs2WEy9ivdhA51FjK9H5XWMwH58yBUFENVcbPafCJcSIOOQKktrV,6ce18a2e9f24d5d3,fb6e32d71045999 -vj5h0WxNyXyS5nHy44M8a9WywZnJSs9IeA6qS2wjXiyNvj4dxaK6v8QFGDR550V1ggGSFf5DQOzKjwa4hHcpJb7vUlQUQHeUozVilYnGV8UHfEgrS5UgOg4lRLIqCc5HDDmsYBVoFOXvvD2JXn96nz1cHrvIrnyLOfNHOB9wup4mplVsUdJ0CW2T2H1mm6fqTurQDhTplC0uB8ckA8S93nSMqlgXpRH58qFmqVgbxA1cAk9PSTbdEo8iqgIYwP,3e95b08ee85f20d8,a2139b08533ce4f0 -fjmkztsx5O8zF0ZVmlr9brqwroUqSy7mQdekDVGCKObQEonoEupsiGdVBG8Kb4ep0TEsoMbdqkSvuvkzVqyEILYyfs76vjdHnDIDEocuimLf814IcuO7JMUqSGAtrDW9wY3ODLzeclYVgIp6DDXv5tKOwm1D2zvjU45i1Y75KZAkPTRN1LAy7qwL3qygWPqJ4shLcDaaLBKwDj5IRWbN3Ekx5s6UVajnWnumslJvuVv4IsEufPbnOCVPn8UsO2IIge6yWj3LMOnH9NXxImjII5ray42IO4bxlV03jzaHvgaeIQJRmgb23voJKl9lc63WZ5d0Uky3XlBnnTfcgtjWw4sW5r6vOPfgEBoOIHZyvxOX1RwtLkT6XSKspNILtndIGdRiecbysDZAuZJBJ8Gs1IqhHVOet8Y8Mtew1Tpa41xidvEv0wBcBZ0Olhho2kOd16IWnYwQc5Nys6Yx6R8IzDKGNdjHSQeVr09hwXBaoZ8pcZoiHSqee5tM0lJjitQnGmCgV444H4L7AHWGWRT91yskzafvHfP7FrY1FAelYE0zZHa6pW9lcG7HlxKQP0jjq3Op7nvc47KPV9nD9i1zXJ4JEg0DzbrTkpox8S,6aa222fed316dab,9121cde5cab3890a -m5zynMoFMVYhXUEaTXP3onxN3ltDs4Rde2bzV7mmyC4oCSbsNFtfHdR0PICbJOaZM12OxkwZYgcp5SXGZVvVU45GCfkcBa8y456gdkvF9NAIRc4cjs87N41RUjUWnPpjbcWPEyOWaXgafPSLXPfXiTC8iVI7QiRj3dk132cH0FD5ASWCIpBrc7b8O0yAtEjh1hTYbivIkQzW0Ir1lwsfezOQw9vFE13tkMMHO8VWYiJqW1beGJE0glieG8fnTmbYt8UQj8u2RooH5A9roxlN711CHMv8VjOyvfSeZUTksYsrvtZ59MPB73svYDD4RAu8yBvdN5cAo0lHkF1DcbhBuKrLf7GpZ47mHnM9ASuXFq9oLOm1TinsAwxVgvagkOiKksFVWoyWbGkUF3Z7YoAvvUEYKObpbMnyhAeturESLofMimN8GceoUHFf6BJfpZoMey7R4g7bq6jyXNfwKIg99tXdek9z6yi5Yxw8WkExUYjgACxRRdSl2xaqhKaaWE36eX1lpDGYhci67lUDzdIr372YGlPRI5PDDVjSHx3uO7bHwZVL8ExWsXNWLKdVYnfOLzU8ERAmOSMVMG3DTVjZbxtDtnsRUnFQmfBHtmOGO3ad7IFeyCPV1afxrmR2hSYMZlnjeeZ,66b267084ffe9226,cb7b33cfe3c146c9 -VoXom2fA3vAMyc9D96JmejKnC2UPPCgMVmyhjBnOQsh2viax5MdJRjRTqa3VLb1ddjUQQLEa4zXr4BmlYYKTS2C9Bxul2V1KFOTexaPbwPjXfuFjWuKgb0JUtuPlcJVVGPwMKJdlKHNrgLyeLdhuBKxuVU1zdEBkz7ZGlthRfMIxvFSMwwfy5OpiyfAZ6qZprCfTKOtudjaAyhYzIKClYx4EYrzhnBnGwxFJvf2NWIAMcoXA4yz5vniFpG0ErGqOD6XVbtnYRTagmMJ4U00vAIpDKa1NUkZqgjLAQproSMVeESsBZ3QIuHzr8MLjBYXbKDQTePvGEmtjfKCGUUKPTNmIly6RbI3m3Dy2nYvsGfyJpA0le25Mc8FspQHxQb7a1RrzonnW7Ic38u9RjpVyGduqZUbJvjyQxyCqvTFl6sE56vUVgaMwY7S5tE8dxmlCbp6bUZqH5X71E3WGVYY0bBCHoclAf32zl8qJub0mhWImOaY6uJkgminvEHIGa1aS5uuMaJBAxXNymmkPa4exPdtKgd3i1Xv9LK5nEyJ6YrkSKmVzjoZ0GFsbkDegkDc49xQfEH7dbsU3bA0xiVxYOWWkSSu4lRHQfoU2Cifl5FiDZK8Xx5Q3F1r99KNgzdHqssUO,fcb6311ef41a054c,c99c407244888afb -01mX3h3axxYSL5rXS0MiP58dOZda6zQc5EWi1ab9SGBJkAhIFkDrL9JP2aK6W8OaXMFSref8sRgmroBTwhsfkYcAbq1kLBnv2adT1FxZ99A6ktB4P5toL7kkB2MB5t7NCCc43G3eV8yf1kN5qKZrOqEMoAhPm0v9Rq2a9hEFhlkFO5T1W9GsjSttGed8jITicd8wRQKUJdLSs8nBxRM4h6dAySTFfN3du0bxJsnZMkCJzbesOm1jp3adRgjttJo3T8a6rGV6pQgoi68QqkEQEe3TWShoiGD2aCvIgKbjWvr9DUjSx7tdL7X6vsOwUz5hcV29IbimE5mWsI5UpSxgTT7dIwMHJtnW0XBU9X4I8o3HHCM8rDdSiG5Ai4DvXrUw8rs5BD7DMYWytfmAfpyn4QrWgQZw2qO69zmQ5ClpvCY8U7OCSbo0YYyKX5SZob3ZfTj803NDSrKOyWOlmXBzqAeGIbiBeUH0O,493dab3fc7b79c72,882aa5d69dcfdaa6 -HuCIPsRJpVCAloemVlqFMiTemUUjQbDxnKrHaK9SNiMDowggdrLcR4eP8whKlFe5tm7VfvhN9GhjLKXMgfs7zDghP2Le2k60YLwH41VtK6KqevpDJpKu8RyrKTRshXqSSQk6h7kbKVjRSi0YwcfESfTgWpry4AaOn53riorP5u4PD46sgUuSDwbYu8z0tnYeGpjOLhbQ1Dmm0KE08OnwNzs83fREyg4Cneyicq9dI2cz6GIbKPvHbPwsjVfAYK9oE8MsFWE9l85x7bwc828ENXPcRYZUyk1VDlwlnZASFR0Sr44tDnAN6T3aMRq8DiyoNvDwvWHZCjswT7IPq1EqiX3UIEB63O2jpOtYZ3a3X6z21yr4UBxIcYlyFUqDofqpwpt54IR8emA6AfEeWg1yWUbAAky1enxiA3ZNMv6a2XSCkqhZydmRrUNAzyFrmq7sBUEsPMeZHbMIZ2IXOt9XPgoTHdtmxhM5E1TEFTDIMiq95x27aqxEvxseZRXAGy9Ttsu0kHqMAH1naZFUNyQq8jUjiyXvPIuQIrSxNXfBjKLGHCGo6ucPadI3cIMeT4CJhKgcxf99cN6zAzQnuFcYrGunJ5DwYOiec1DPyTL7RAEsUXESkVlAIui1BbULNmagz4SG26CDkcptonmRmhrMkUZDbcosZB2m6HuaqlPS60OfpE9cDtodn2e1qncbFI7BszEYXRyeLd1FHlTEQNbYp2WZWuWUgjc4GNkrFuUgrAACdNoCZ0j2arFDvfvbRpxY9MOE3R8AFsf2DUtf0hisTDT0swU6ljXD3JzKZlP49xfvg0vidnDx2Qutc678NVH3pn1rrn4b8wIhBsSJQAHEThe8OCoQrJNEQH9DJKBANwq3MyuFT9D4lOiywR5ctdedmPypohbtFayFssGQ9jkPrztCQCaCbnIstcynqJYU0LQY1HoJ1P,a7de37959c5e86f1,f933cf1ab76009dc -zh5kJlAWAahqhA231UgZuaFx3tKz9iHK5dhqs4Ow4TD3uDqT1hi3hWdtRu1YF3N6HUZj9mMEpcUqvaKe8WB7WSVJTVIM7wEJPar7KHNGXb6hn6ZLqHSgm9DLC3KU0ucno55TeoDnjxN2CdSe3AUVwPO8SQMOv18dqqbf4buupqAEuxjpRvD0OOVhdWKZ3,34f5ca1f10c6b3a,3b2021fb7c082cbd -rsyOSLslhK0k2OvCkWSmakRTjMozMC6Zrb1SHfVIbU9gmb8D6Tatk9cSqMSQuzACqLl5NNTXjQZIa5pB25l1xhUNlQ9uMR8z6hxMb830hkKt18vQ3EvwhhzJPOxhB9WKh1KLZ877v7Bju2jsbvDebEVPOpGuFG0wq2oGwc7rl2k6Q62VDL06wFRh6PuRZaNkJrFwACzaxx9NJ9oOCbn6HDi0xW5hsF6QM03GzSmkGepyjr8QYThnepCOixUcktU2cBY5irPeUy8lBJCTnMOHdajDQtKVkC4kUZsBMigJdWkUkoP3JDIHwoeISRjUAgdCeg1KPwkqd97YOG8ti3uMzd5GJgE184GOrvwhMRMSdsWjJUTZFcc19q7Emdjl8KCv4ZqQCOQnZwOSyfwZbY7XTHftebrGx3evfevsbgsHb9QNOg6Y1FTZA2Jonj5shWSzv0RZofhAp3kACbIeyw,1f5b0891a22db093,249e1753e7293c4c -yHiURf2K3wYLmKfj0PAujOR9srz1PjpC2wfBYusoHNmpLGGT2BB6Cdti4vFEmFk3sVdCPnJQK0dwXsgcucJvfCCYnCqqWGzhihMSca7WMOvmWUo94WdYnABzG5WW5ejhUVVJUZ8A4N7d9WtoqmVFQ3JpJnW2NXYjtXT0si1IvmykwabahEoMY9UURt6KCUtzvB19DTT3UD5asCyxsTOEMprjy6ws0Gr0xir0GYK5kHKRRc5WXEq9FcEGMjEPDe78yfCCJrSZ86xMjhAXpPjze9jQI4YFd9OmnAxRbsy6CSNXbaQ0Pztjz9eqD3QRYtS8wCGv5jkhHETsChhNb6SddXYFWTzYY3SZZZaBEmD9NpgAWMbbKhQwsT4MU8ftia2L5azMFKYH5IW28uhMMJq9GYCXMQmuaDj3Ex8wIbNUiF9SfNv8Jm9KCO6SRSLJLKrWJLwVIXnLIslksvCEyiq8pMYiCCNapQV2HYQXUwM99u1kW7ZbbA2CwD1yQOwPAjIvleXEr63ZgVIqMN6v2N7h9vngHUijkDXhxJSdHy915F1embqpRZOZf6rYgidqXsb3xQpJlhJvQoEuW4ym760K3xxYJ1XsssFIYBEkHCMiZlfCbAZ,60fd509f32d39e0,b79277eefeac4f59 -fFArwNH5YPSg8tXUpb3mue0TGwljxSQbPhOC1OMlfzlG,e45a2b825e4a8ce4,4134c57e6ae9d0ea -FZUxsNzZDpP2goeUAJBVnEX9eKX3vkDKKKW0aMNl7QWDttRGBKbxgxfSWLORBoB70Iw9PPEQ4YVuwWV9fqdK9DQa5b1Kc5DnrwUEDFd05WskdO0Or8nKwmamW7ddjspFxgd1DST6nq9frahFW2OIYXLHaJ9rV9psKwTIJMAPqYOjdGC77xIS3iC44ZbAb0YT6qOM3xxQnjI3vnK8CT3IWG0b8fpT3IK4NPNRZErkkLPSNovU8AygHymVd75B539MkBRKPW86CITF3ZWsv1VAMa75d6uwkdXZYmAnkTiteVsWXOjREs7ysJy8Xtan8ANtT0fhWmIpXpRHCtPxWauxhCXe2i1DsJKPXXCwHab15SD0wZosi8S9RyND5mE0CYtgHC2mrxLx4gMGIQ7sEed5HYGcMQXFLqqWVBOoVi8z1KONkH7oXSPt1ity4ZRtDcP8tcTGF8Lrk917aC70m1FCO75cUdJOAZVZdxw7T9TeDA1k9o0EdhA38acCgf8g9jZsqjOiE8lwjzuTJT7iSVh796hUeEd9CQGQrbrJLSSwjCER5RzpdyhwT9VodMbu9hFHOXHn4pND38hMSsgAhQCwalizR4WesphaQb2d9Ukn6FYcpemF9qXky4tRJNpAdkCULK4MPQ3JG6sGHxiHaJhZ0qNgHQ36xnXXdQWqK3zKgTNSDR2tYqQ19KaJq6lZl8Hr2a7ip8kar1D8M5JdtkZKc1xemp63nAOsB0LQLpYSWOZcGTS2THhftGQltHJ23hJM5AdChTCygm3COIsytbS7MNWuaTZnMaBn89jKcfnxK81JuHguRWfIC9XFVmcGm2rzSnjtFLi54yxL8pmkTBIKr4Hjk7loxBCnKerW8xZgoGrUt09c755OEJlLWYkt2uEBYa7n5A4ETgtRjCFwBG7GyKgzYl4QK8hOtK9XqktITJG6X5YxtCUxjkaUsIIzy3pg4cWhu16NmivTvqIs59FgI62q,d2de92c0caecf0a3,19d3162e834f78ec -NUEzLwBBVhz6uDr4Ndre8PFKxyd0CktiLyO0wX24CD29G0w7TxaoSmlqFx16jECNi7f1AM9QQqN6vFWo9PDTrHbJ3fZkOWFTE6hQNENgVhkgH7KhvaQlZQm7b5QVpALbm40kxKOKbHdBAxSh3KtcbV3mAHYVJU5JBdon3QcxefcCzbeZ2T2ppOI57w6EzO5mobBwBJxpZonNe6JDPo6gsSvK8rn,a7f948bcbfc7a52c,1b1b81956cb9ec5 -9SBW4ZIPfwv9bmI3BagiyFwaBeDRFbd6Wf1CuErvWpW9z0PDis8gPKHMnCQFNOH15qFkc9uqHKbBi0ncbZaflhVg9hKFzMciCYtxzsyqE8AvRrN3uwC63oBXiPZUn08PVygIZtt1J9wpV6xTqVmNJbfUPE7E1Knm6LLnWGXhfc3KLBScYj67CrgzW5V0EFWEqQpazvR9cFn8zzPlkXSBvqHn8mQutlZVMcaPbdA0x9a8ep3AnqqKawVfw2ZTGVWYHR1A1vjUfJFEWqoW2XtEjbJnwyQMloI7wpiknNvriCruP5BT2m4Mzkzf6MCuC6fo22wc91otoA4n06ZQ9WAsbZE6r8hLJUjHgpzZ8Ts41bxohuwHrp11AiznflSkJOT6Yy7LZ0XOnsczLSIQbqGNLMhoV9jW3FlwDUZUuTYjPFXHku0Gc85eH0OTWFA6x5ukqSm8jNEXw6ZLd5M5Icx21bci6djeyAwIj7H4OaxDWbOk0grljCMCxkAbUPE0EBG8IYGAazfDsOkVwWFKCQlnW6AElF5sxSoG9C3JCysUM2bWXtt6T1kcJmGi0TSiAjmEe62lIRxK99vILvVfZYxEkhCRhMlapTGq9rMrfhaCMPVYdrVbBIiGJ4KAp9QCIjgRCVwkW16SVgz8pZHJdIaXNMNs5urFItRvlVLNzzYHboJ4JnuwRhgf6O1IsW0mK3KvP6jJd7bS5qeMy5iLWZuggkgIthLMWCthOvo7uRyVOGpVZDuXP1urWcudfXwoyPSRPqOaSf9L4Lo4mkj2BtF0RLpMV1KCNjNdWk8ibX8rFFMzxRkPC3oA16GcLkh8ZOJdzMMV7Sbix,165322cd114420bb,6d7d78817b80d6cb -5XOwcstBXw3WuYqg7ZHQDm9tbWqw6h6H5eganh331CFLFRGKo9CayvtcRKjVmP4q89bhIYTUICvjyRz0cjOx7o70su96msIF6UsczfTWaYuOG2kgg9ojY17E0VYHOxOp3JenNK0k7zGUHX4IQJ3aPtLvt2bq3DM78zHCRPd1gsrQUef1Q7252EyXDTcEcCvDO4OEqOobappxYLvG7i58rfUJpxtCrEIXZ35Jr5IPJQAaYFQkN2MtYRIXQ6u7N46oV3v69JXlObfnHpXeRNULmNyiLYFA8vtEXkAJoFIlS0lvkdn1HeF1PgJnNO0MDmeR8b1e0jDqNyp1S0gemub9J9et6JMsDawTw6xU7KIsN3DkEM4zfe7tG3anyR7OTswlnRoQirNKXxp3EC2vFZVgao0gjsl2QZqEuwGPEwIg3mrRAirv78mGVIdk820twpNaxtvpeixXjoXWEzQrdNfAsrLlBaiqa4aSpS19xduZ63vRJvHId3J8liAQI6F25inD2JukVyTFhyvuwn6dEHavovWfs0YbXOjvR8iS79CsQBz31ONBxR9djsxeUwcF17Js1Tm8qO7nRTEdDAdcwcwdeEMvjxC7CmTI4kG6LnFxIEo0S4cMBxB57HYj9Li0i11Xst9Vw1B4Si08UzZXPuDlTB9DMY8O58dZ41VJSOK6BN9FmurrVEt46CwLRiaXd2BlhVn1jrF3Bv7iC5EsEMMKuVIAejtAGMUqx21AZwxxXGBq6TNVs9qaDdcp3k97AxQU1ndCaJZLX7WkSXg8o4TqXB,b137c73a7cbdc144,44b75c1cc43a3dad -0itHoXIQtSovYhm4U2d7nzuvolxy5xikYNeQmAEEymyNLZGsoXkhJfQey1EMP06KDPuO5k9nVKJ0TmDCp4FNDrwlZuYKEqX8w4SvR9Lz0JWP7UleWcgXAKwfdp0D9QWKGl01zYR4LhYQ7HmhhdA6IVdt5etaH7soVgtQKSe3ncnDNZIhYH6rPR8uXeV8ClM0BRit7MFwz4bblEpn5MDFFwfkEJ9KtRW5aGhKNGIN40PDXKGGgUlAw0H63WmuG1q3dpXKzoxpdakTWFu9CDJH4hqcRknCVEJXI8xwGHIVdJl9OPjlfjysPWfcwk283DeC8mvJJT6cs43SLiel2i3v8UOwMy14dk6U7R7xEfTp2h4xhw6jtMr0gNeW2gIrOhVsZoMKB2psPhUBSVuCJ6yfa2nyHVJz1U9FZcf5evqsNLYhahSGIhDy4GKIrpLbLZy2g6at6St9ocVI6EzG3GmojgdB6c5FZoK2HLIIaP8bupkNliHC2k3XvoDItlwmfC6KhxD3KTGl6dbVVHwyAP7wa41zG5IOcroKWNt1iFwW2GryyweIWPOG31KK2F3Dam8wMfb6TJXCAPrqmnHHJ9xgTmd5eyu8gaAELUAVQ5xs0zMIt1NoL4kZn90QXc9pbFMQKX6sNr52wt2QBoZZeIk0DO797qQUYMeKkYNVOg9X6cyJQjriwWEER7vdZNHNPxmKlJb93nbRf2WvQIvNxf11ZwEZz6Bdrvlh87xu6gMITURa4AflWysXDpWShXjYOm73fkW1ZlpH24APoHnrtEm8uJlpRbod0XLXupX8FqJuQs53BHwCuoYr3Wcsac3NRmsUu71VIWLcL8OCqqiYEA7EbDhaO61jiYKD1IcEhVxyCS5j0SotHZWFReiOmJFWer8oDbvTYXX9cH6AsOJnAEMRkNxnmOBz6SCbpvXm,ee22c8964fa6c54,cba4f235a7e035f4 -ED7ttIgr1gJZ4UIlAnwDiOSHQxlDjelEyHfUbmBpelYoCrb4jltNiqqm0UXj851U4N5vHcV764WpkavWFTOdmmjXYjPTQOjiVxOXJFdgyRz96enKwQknrW0HPeZ8bbq4cpGPS5cR1B4UdUGveV1iHxb9EHq8XyoOkSfZXiCVjLNJY4fErXSmn17ssMYxTwMoUE7cjWLIv0UzvXWPoHdwlj5F9R9UMA9vQPMcrkiWEWsCOXBCsYfYwWhAD4AMEqmKkbDFoVWS7UJp91nUHeltpsEHTMJyQjyctBKuF5tseLGlgOBkJJpdm675AnuSloDq2BQlAr3lc6vmJ1VVQYqJWVhDzjNSthaFvDTA1t4cs4aXPMbFXsnoxCHcUSHKAiOdq2508SWGTElXNJYHJdfZworK0w11fcLw9e12hqzW7eFToy9vzWHMRIgLccX2RII0qgJyY6MDFI2vT0PMdR6eCt8HIHdkAtzZz8olztJRi9O61TudhB2tLvJM1STrL9yfj9Bky3SDOs2R3siaYFArOJoLdj5HD3bqiPYATGAdfnBpMArG8W0jEnhiSGWwXAmKFfWxqdoZewdqS6mSkV0njgsyeQXH5EDgbPu798mR9LSyImzxA0dlpMYeRc7lYXvAAbBsaZtrsC1QqpWBBdpPiqKPaQe6IekdNgtKZf3VSrIOnDcdaba23NGcWwN47p2djKrvZDOydlkWLO9zbKMGgVS9tda7bmeozJhpZIVFkXrl1lg78X8mFWpyZBjmD1wehXIBNH64rFqv6JNBjyZFQUJ3xXg2peaRNHgLFEnECCndAPwG10YwXRtxnixZwGV7d8cHjOx0J8WXONXcMXsQqPEtSK0CVxzqoGO72qgQtnyAZkJBsePwMQUWcvv0pSRClv9DqjwwIX0hGEiWdCultR7us5f8ATHqEIRSgFdkKdC8GmZ5d3Nr94qFjKiq0cx2e6AgyEcMJ9hJtq4hgUtMvfZHx0xbVHwO4,97ab8fbea148c8fb,8caa5638fcdc864d -UX7wAz8apmTbrryVs7JV1AWhICZ1HO0HuH,c0a44c01c83cf9a0,7c2e59552b925962 -E63rstvDRnmGsSC4Pbsmnbnk6naljEVXcmeP3DbVHVlqTqsJP1EU1lJDcW8DXwwy7tyEdTWgDfxDLLv1aDKCLs41zliAadTdGekpu8FVC8BetQuKdZ8HWQSf43RMQL5UfDrIvwPNgMqDPXJprzummryIcNXJailShW76qswUJ7ecKeGRnKyaQt9UikSRLn6mQVdrx1tW2pX9hAnodIC8VdJ2j3Wmbk1qxX1a4ayDaI4AJTzAbgRq9hcUgPHLW9JNTqGhNEIe5DsKvobqfxJ8KlBmw8U4ZIhiwIdwcWf5tWXXvFcxlQ7,ef81a066a3cd9375,b47ce2ae36617a3f -ST6G7KjoWwWzEcfQIVMuvi01CodyvCMsOtZDTQ5SWbfelyTys2jt3ji4K2EB6c26O09DA0rjTlR64jcJzjsNItxfTgS1MGmZGYVyEt5tRMziVxJSJJDXdjgGH2HfswPZ3ZkAyErOKhjJiZsmMXhEyyFigue03LEO8PaHbXDroAfKEDsmA4zUpUSwmy8CIZoIdfxXThANpVzfh9it7jEGqOCcQnovDmIbcCLB2CaeBcp0rwC9oDgEZfO1D7TPC2UK8yhy5d8tjU7HURoqB98oCylPyAuKkELWXzybCcs5ppgdmiOpPJ1G2pJ0LrSdPFwTqDxkAZ1sJJrkdPPDg7GY1BZ17WW6DNjYSEMekLJ1uQgCegOJB80thF8VO0Fea7YslabTs76yfTsyMz6eYpVwSM8lxXI5lZzq1ZUOmXnCRIaAYvb7IRypuu8uYnopOoLz5Xzm73bQBtKkWVxqR1QAU1Y6iwY5xh9CGKVH4RMo2kBhGHVXzdCXVeWOvZrJbkFU8PxgdJiwhOy8oPGQAz9t0gBnCfzLvieKayL7mxx6dRTF7kn2RlQo6ZLFtavMp6t9yXLixy0CqWUULnbo9k7CIkqwoqRCrJVniBmGznQGWDRKIM4f9x539d,c71b7beb4718c155,2d57f65f6c421add -B6przfY04IDJvl3oM7v4NTAt3aH5Z5GezW3Z4n1RI8ELu14p2d0FpFszNGkAyqq3YQpIUpa6SNxOs0vJK3M26HeJbFtOHEHFxKFQL26Sto3dZwZSwwSv2lpPV9ggkv5fO1XtV3Sdv4I0H12ALfQOXtjGpwB7m3jTFUi88ZiOMHoFhoUVHaLUbhWWjVBggL8Nib0D2AD6fe2EX3F9bLQibn3G1y3KE7C7uWYaTKDzPYRDTrLkIgWJeXX9vG3Ue0bEPCra03w0dwAxJKzah8wJCLkjKh1LfokK98gbvMxEXS7TEtMZ0jYSoSSfctAXONEkOjS2wDKbj6VfiBqsAx46O2iIGyeK6bA4BHCMMuzgVd89lR7do13ckduJlHghjnNf37cgwHKvR,242a9c983273d91f,c2d6a6e0ff20ddce -yJD7YtzG63iElvPC1O41wXsY0kSITH2a0hWKE8SetRQrVUTHTScPN4hCkuaugwYT2OifJDtN8tkJlkLr2kQDvbpHf9J0fO1ytkLR1paBABvLkQPj2ej2ZRRc1fakxG10xMULPRVpGoXNWYWanztAo7oeOCeHnJu9NF5b1Yo8ZK72c7dBiQDISLrVv0lghavHpkEUpZfAKirWp0ZgSl0IorYgSJRGeJbyB8pq5e56854oNWfNVNOukBCV2JeAbRXBEpCBrF9WiRgBsr2q3lBa5TfD0d6gN31hYEBsbFecMXEzsP59ETyq9uETBN2AMai3s02FKgQNuc8AJFHJurdVj3Qg4YGrQAl5WnbGnVXrVKCJRA3r2jnOwqPaMh7AmqctdS3jjFtYFqTuuInDRaHAznR5KgpjQD02ngZ7bTKnNzJLXwHjqjJXHNpponSq2zJJSrTy6dzLhEvUviV4eFkcK61PBz,286f8900e3df7ecf,a5cf239cfe153b13 -NWmSMvUw4EGt7BEWxguJQ3CHLCE7puZtPz79F5hkIkVjVYjafGewoz7zOx9VCZvXYzoDVv7FdBHsyNhI9wXtcbEax7AwGmMUWJdRgSr0TQjjS2yTd7SNnrsifWjWt9IcKWz4MQyzuz8fnXdTEa5GBni6WjUC3N6wdKetqqCbbhXj4AmK7CEJlunDPkxvBiZtJP1jAFWTOwyxCrbC6O4xElTjrjezyohhwyJDmg3t2TQ53t37TIhBe3rcJ5lNDJHvxqCqn2ZGW59qvi1FiUNTJQH5os1oXh4Q9RppWaTsYWun1a2KdCX8fwNya0P1RvMlLh4j10HP9pmDeG8k9dYR7nWnewQsTAU49VzHETpajFpUDxgzHiJNCcw8onO9hOrlkIptbZFiHpF2Fa26dMtd1N9gc,5c9c888632acb0a7,ede3decb023b38c1 -QnaNV6NcaQ7czFye1eo81b41dVmrFcIYiRKdTaLfohDrRxqjgtzlJP4HiVMKCmhdSBQ6Zdn5TI1olNRDnrsNnbA4lPJ04YR3xll5dO6eaHeaWsref1G4xNMinZLx7BAsNFAh00PLaU9WHi9A6pkaNAFeLdQyN7AMmkoJp5B8pKJ9Z9UZV6Syd9ccjmBKDUxFKlrb6MjB5h74LpXKpkpP30unoHAnpEqgCry76Lhv4iZrbbQefoAmOr8eFms0LBbxUp7TFvyE6YDmUAfyCLBGpOZBIjILlNFgriFkaURKgWyn3WCp3d8Z7D1ZUJGPTiwGqqX27GD53znZ77FYEJPhlDP58XMTikoc6fA9zLJPPFXgx6DjG3TuOb4aMFtoypLMzF0VIwdgMrKQr9wHEwBt9AGGp9Q8Lbqqp1BmWN31DPT4ujyujiXYqgNUHKOaaKgQp4QU6SgDUbcz93DZnfguR3mOn2gj227jVK3U81pewaeqsbmHWD8nLbDmIB10eT2NP01cILv3QmvhSGALEYmrzvSk1R1wo3wd7Yi9csf44l0JEymxSmRYYFCWMxDsSg9Km5ocxajW8Sag9EQnGpxIuuN9QnOZu2xyv0cepGDoQshOTc3hK2ECJRBHXiUxYnybxBjZtFBhpBXGeTqGoTYQQ7KpgejgxTe2qNACvtzHswCYav0mM5AaxF16tLbk2fh3qae11k8sdr9Uc18jzFwxvttCAgh1CIoSPDurrMS2I0cwN9YcwgraM7i7yvMDGN9U15mpyWV0ZEli3ybGiZjDhJm7WeMpIHnuGn37abZNU4KmkLegUwAgpdEUioLwhA7FmhArjLkxcX58m0Lr3N97aVw5gSHq6zZBF4SUtV,f04492325dc6158d,f05910e1b1f34b75 -SZSOamk94zDcgEDPkQ8ZfWFhIG2h1reQbdYD6WoV6kaXMeoPepb8GhySP8dUEtmSHvQkFyQGppBTQNOgKKiIIMt5SnEdhlPz9PGGQI6AnrKA0w21uqaXgzrPUU77sM9OGVrtZ4EOb7D0s7Q5vEg1FZ0h0elMr9xV1NPpqmAJCwepspp2OBgSCpbzENVE3yUrlfEKheVzA0d3J9INTsUpdxUC1TBy31aWN0a9VWc5t62l4yImG1D51BJI001lqz9VbQk4lEJZtpXxqhplL00VyIUmCGzgcP1IBlOL1hB7Y1v3FAVcc3Cbz8r9A7grHtnZCzT50OjHUh4bzg8QJvSo82hoLTgja7Udq00WmfhR4HYjmnWmTM3ZzBTxNEZg0HrrCACSiOyKVAlqkH7WC4PhLRjWnDBM9XRjdaHvoNEgk7rHDvgPmNi0hhqdhk0DQdizUSvXa9JL1DKFfI7TZAlfL5cpPJIDihdoUlUC5FWe7p5x0jFGX6cXbRrS6isscD47E1J9No3Rns2YjsXcieDVuE6zizZ3EGz6WPPHj4ZXJLgr1TwxWBWZlwynIDqbE3p92E3GxAa7pH2mYLpsIK6Ov58ztknWyCHTIE9PkJMj6YZ5jPCbPe4Hoz18sWavntVV03RNJLthN1Pzk6K6rEKytnBm1D5mCqa8jUoz9nOko3NrJoAe3ui1PWVohxiLIhGKG9q4Ue2ShzvdUYwZ5B1JyxSn6bKdaMSgdAtRCfOnHdd3dzPkQUp6dlhc9KRWBpEYEAfHki7zxGzYX0fJTqVLmHrNKdO1SaUwtUUchNmE9QGdpB6,e301d2d06eaa8477,bf36401d9130de8f -99JDaFpewPNJUdQXBmxhTTnZq32H7ZwdR7KLwoVm4yVy4VAZRtxprkZXUiNyGzJBrfZkC19jcMYkhtoUtMDhkhoB0N8kefElzfw652iPUFXkqgAHdd0e6t2xbYxlXhTJ4nBr6l6DV7vRv68A8mYdPaXreAUXUPjFDiI1h7JHMRxzkbc1hhGlgdhh2LDWixWQ8eweF6QOzk7R4x,7fbb0dc7d157255d,f7e62435059c5059 -QRtijUzVipv0IKyXrFVepudLutGXrsWLZ5N9fOXAujs4cyuQw8hE1z88N6reLJVleNgkhkKrU1Y51dwLkSoRDzTJ960J2yDSt9B5Q4Ps4QG6s94FbTVDNScPsuJrX8EPg59DYSKHZ8F6NKFuZQA3DPzhxasQP1MuhA4olKTDgW2Yp2AMRq5sMqYNdSqgntB5Q1bM463bD5XJyly2x5Y1tefgLGdEyA4ngRebKZtHApxUcnU9Ff2dMjVYIg0M4FRh4H3okf2ev9Ek4qnjDiyTnAVvDMxwI9zOp8GQD24hkUYhDOrqmQeNlAo8ItsvOEo5aIyHThEDnfGoE085P6NJgnGJ6jO2KUXOA93CYYDPiY2Hsdg4FpltRJKI5PQC5wc4cidNEhzi0Zui1sIcV30JqtB4jF1SBvDc5fU42BZLGnsGEXvvasUNiqdIewOFgPrvBO51esuJryDtYx8TOEGtjLV2xnO2XOMAtF4E5WQb3B6w1PtFLgNBTCglWVxKLCpnKB3WDpL3j7yIkGaQ5lRNp0RDjJUqkFrrL34dIeQRmOnixb0FPiHUUOy3NvChfKRLFMAmkrd299zH4GbmhgrlYM3AK4lLf2jNfSbtYsIIPv9OwAtmebDiEvFSVo382GcGL9bgEOWckrUFaTOv3xC0dsqpa0F2nWrvExtmisF9ShGE0jLMXbXfllvJbGz6,623525af489cc1f6,d1050e92f5714b35 -eJMTsDwo3QFBS618VgfBdjUb1DJsyVx9LbdVSB1lze7osQGoow9ccUDIOkLziiV3cmCwfJvR7FcVxLSGCXKvHHd9uITo9JlUfjNSmiFT8rxsnG3feQBYCdKCy1vD01peIDIITYi8jeK6xbKlQGONU1iFFQP21h8Od7snRSIlrK6sth8Gs9dyZzuHUtPIbWYVksfswlxmt3Sz6zGDnqujlAr4VmywR150adiZAhTjdXunUbHgRQOH61XJ9EsZYva3BGGKUKgGrHIOfPcDJYz8tiNiQpsw1511cuuDPOs15BfOe0DnFINSY8auMjVFUzEkkiDS9tqMa75wO3Qby7xXiLDZv2ilV4Pgz7nvlqIz1YdhM58vnLhLA76BLeKthBjy67GjJSJHqZ7QzLsApt2mp3DqgbvpOtcHdeFYTs1T92juEuXySWC7AOnng8yE9BCarrVL1QBvdRkZv5jXVpdAffVxyvCPFedI8BiVAks1qXqc1oP4Qybb3argsCVQ8OZUBXrns19X8u767tNwtk4Pw53PbAAa0OHLwSNW81TL5XIpGuKWpCWi2VLDa5pBBaXCw7tBdLkADte0BoFmmYpwyAM6D4hMz8DKnWZHraXaOI0g6IrQpKu7dFmZNiIEgqcqKypPNB4QMi3gZnSDqBvqZTp5ji2CIRQ7WmTRSJkktWbpRIFdd,12fe151ee6972548,44c277ed1df2c1be -bM29Sx288zVqJdPohz8DgrGSyVE4IMv9FzK56y0aXahaYHuoJ2zCBSeDTWeqmz7QrWe6EHieaqbBWf7cF30qvxiR3O41WZdKiO6r2idaI0xT1atbKooQhE73Y0Az2qlfIPZ,a846ca6d84ad2f42,b8b46c0e88acb09d -ZKSinJEpYU2SIYRtq9RegtjPDq0DUw7BX8MWo4pANOeKYH23ipHjRwAMX8nBFOoViZQgIKiy1kaE2IMa0UEQlwieYmP2IASRrMin9dkJ95ztqxwP4H7Ni2QZIgS2fnNKJl5sjzcuj1alu9V6qdDWv,8d3f4548a781c324,180492701a1fc72c -NAcupY4D7JcxNScnCCUqYXbySC2miz2CNMsKSZkfYU08C7MIZEjDEntQSnznJI3TmtvyhTRbNw69cMG3L8FSCwS36b4KBawW59sn9E91FR4Z8iphkUr7HzkanGUO411cmuGXgoEzZ1TxiKJLNZ22LWwNvnuiJ1APs21l83JtzaxMXkqhfU1WYKh1ATRRAhXpeHra8waLBFd7q83VrJL7zZa5ckHXEWyuLQxn9VkRsJbbOY5hPy2mL4VxGXmXqxL9PS5Ubg1PP4sEJZ9iaOJKOCNhTrCE55NMUkGENyXvbD7a1IIIYOfEIYnUMf5ebWhMfseVYimJKzan46TznCTZqCteOlmEMNh70fChShGZtRyACghERCuCHG3M2kYHlIOjzjrzxguAIgXfycabGguDpEwLx3ginAItGEA6a09ZIOqIoJzFeghkrEoTI0l5Kj4jHkAwQjd56I61U0qHTRONsgCoCOtDPNiMR4ClEqCZMGLdAqRjKMkL2gG3QRE6OXkvpoP5Wdw9utXz31PVQJxosQg3t85kSHwDhmRoBvTvRx2nQAbbeRmU4k0aiNx9SUPBLIqo49FaIcx067VIRhFLbQ6dhzeIPjYtumHFUUyiOB53mpk9Xjdjf3CMd93fpeq1QKOaimul8fK0XgM02CKBY52vW34TZgtpI75riAK8BToyBQvccIH1N3fH3ehRpjIAMyC4K3CnmczviC9OwO8V45s6s63b7FQ7le35CiAQJ0wWHnwORlPLTbfJkTafPdemiiX9d5Z7H4SIo2C24zyyzkAit6CJ1g3mpOL,805e99cda1b8b877,21a73ca7d1a33b8f -cuJ6mpuDwPcuHPmsuBH9SmO2vKexanZfL2JZozflyxILWjJcacBnvJ4rFqc7gg9AQn2J44M1rk2EJul6Rg2Df2NEumBnsjJj1qlOEJlM4CoR0UmCgyQ8aUgP9XGeV3YIa8BBJhUQDsavJJsYOntjUzTuSc0IWdyop5hzlZBzlo8yZW0Ef1fSLE94ADUfLi94xn8JJP2aBSStxQFAkzmRkuDW8IGM7fFVWEsOYJK5SVaWu7ZghOI38nTPzAsfnS4RmwZwxvAIfXPZycQN0Rd7m60B6hhSh3v89BCPDGzvHgRjXBcadbSBGNokeWUcpJeLChqP4Lga1tS3sO8aIhn5brP29UFV1luUNi17d691hWUcdEdGkEl5ZhvvrJIsCNgr0JR5W8WvvdbpvOLsCcII3Nyf0O1pXr7gHDowxiZPc1pR2zlszd8W7VNTdYsxmjx2WaWI2YpmiSORn1yo0y9aKOwDx7QuxoZa8E1fZ0OqpuxPeRxjowf3KWSlS0i4fPiNmTDhgMi2agOxpQtgfbS786OvTSSl8ifDKzgvTcsLJPIoOArQl439U1NHgRVbiyPOcan0YcVwLfn0M1r73fDPYj9lNmNTs1upwvS5U6y1sucOf0JN2siYA5zIpiiT7nzyQ8DxgMEwTr20XMk2BHbTOQ81dvu09EbXT6T6H8K1Z0MpMDScE,bedb2866c4487a26,885aa3baaa0c238e -cprvwxLXJYoSFhMF9lbg7oFuQwIXZAeriBoAeTwlkoPFVOt38hpNrk7Haj29BKzQrg25l0CdjbeKmP22Wt8aOAQ2v6e3A9rBGhbQkBfAL5c5jGkZkch2nsAhZn4WeueQ88VFiBlFG8r8yXAmnfX3Tf1MOdBKdMdGtgYWNTda8nwXnHIH5F4Pj64y9js7HHwAtj8QE9VCRpzuhcxNrZ8QmVprs8z4lsVpKCGD6FlSGlS2nmrEq9wU8YSaktobdFPu6RC5Q7ub7JJihQTF46Yrf5ggnJndJCXKo08e29lUu7EiFtSkOddaV1Hes38mvrL5xyjfds9QinnfHC4uJTYKL4ZoM6Eie7AG5NO50mdcxyVfAopP34L1rihOqmHn5JwsPtC9grDubnaGxQSKrhlGXL6pypBUAYQ6LgJdTO67YXGhAtOASXQUZYeExBqcdg0NhayMzYMURwHWoCMQtcMC4t8aDW7HymDhxsar3Va7PABfGZOuvATVXpvc7V2T1UVkSXBN55qXqHPv8wMjva4yX2P6IzT1RHzaoKfSVQhYI1dzplKQEO9G7DOkpCpe95cAJJccocJSnNB4H5eZWMarsrdEZ4SITzjurldnGaVM6Jd2MlJPjwoGA4S4Yjw0oyeJb5bjK9YQGV0J1or7GE2W4zGnQMewNOFkicpHuPlkTT3ucemgvkUmKluKUkm49RoPLcvjpJYvkoMwVOOjw3xxeA9f2dnYYWDrjRJikrgFgmqFtGG3lyIEZ5TDFOhAc7NaUbXzuo0TiUMy0Zv1SZmckDA4NebxHFR,fb308897d90cf548,dd9d122f8d51a3da -l1SUkUt16OAWkSO3OH4Oq4CZWLAgzmhzT42PoZdR0xlRIxGiYw6BlK6ypsRLP2877n0l1xdVjg10OS1xCPmxqzmeOlo52O8C5jGCUvP2se58VBOOgGRM5giksmV9oo1hmDRA8HbZH2iHtHD3douCAFyj2zccZ8nuzJZI75tcA9giOWJye7CTY1SgLC16DRavJSxhiVIbsg62P9rkWfHnbrdWBd3Fi9caZ7UruOPc1AaUjHCirI9jif8IPy5p0HXRbJYlYLJfzuVufYFDVyvyKhJiKmp0fpf0xMDISwHlt4dCFapm3WTv7gKpAwuA,b128b027ba10d6,e8b080dc3b4f3c22 -wlNaws56OJbISS1jKMplr10p6rN8Iy97aisv6PclDHdasyQIvSUqISjwKObdgtSetU4gifBx9UDddgfEqicKormyN5kDigXErwVLV1MOvd7CSOzYry9rUz8dpUDGryT88IavNqOvdvqMjRvAUDyM0sKcv2b1cYgWQxruFGhMGx25UB9kF9hnx8zfSGfjPa69AhZD1dK5yg1VIiVRWZQ8ZaF1UsGXCYhZ20qembPVauQ3dndPjSAMwkv17Lw845FKYLHA0PMZ2MtdTZ2hP1Vn769mJ71QpVptPPXfBd8mSWYvNNAjPliVgY3K62RNHYQv2i6ieJ3tyxNcVEZr4SvrdASeg0XLqs32WFyzBjaFGp9Nh54OTj8fAF6c3szOWsNS37pbSRf2K7gwQHWM7QrSXfcCAPvdjVRi9A9gH9NGmFpv1ugYSlmyXoCdtH4VmvL93j4v79956MSqXPFq6unDgjQDvfaApT3OC7uORGscMOwdHolK1GTYhTdo1ooWrKvXaW6fbrYISD0OPDJNnvcnp79GNkp95L,aa940f58eca31553,b356d3ce8fda78d4 -mLvl6U04EM0pOU549uLM9mVJyExjDHOG7QVk4uUdfEOcAH7iisfSCSMxrYHpl49ZsYCOV7hSmZ4uhaP0vHiEL1jJCf7NFAO1tPQvvaLanHNzHvG6GgOWX3JwwfEoBpwYS12pS9dt8MUEFDqpeX2CsGYqGqkSHmqnNR4TPyojPaKRRykgsaxa2llj7GYyoVSjf10DJAtqjCFMWQvmsBP3ueauCsjuax2mWfMDlAhyHRuHPZmvPDHLbwuXzStgDMnuoIbOMUYLgCRRnNTJdqawlZs0DsUVXxUWgFH9bWvTMbS7bQj0XFIScrzBcgenX7M0G0MRhiCC4PCTn7muZJrPJgp2bTi3olUXb2om4ttCDsEOs,36503f2b9bd76ed5,62019872b4adb4b5 -EcpTewHrUsUQvzRZhsWTDeGSkNnVVGgDBdo4XSDSwcZIKwMsU0ajsT4G51ZgVbFCCikBx6hn1lR22fUjh9QHDsgoeIwTrUpmk1rRCxkkuyYKv4AnaDqaReEPjoqi9NDdnO5v7EVttOMT18X5Gi5rbY6SBEHwFB4v5HmjIEm4SVFQ05sdVMEUkN0ZF2Mt3MeaJplJmd9qd2kUPmx8L8rG2dasjdWEmJTzHyhL8QWrqvspe9sOfz6LRt2SXaQ8AjB4kUyrBXQg0PnvAFdd4s35Nxx7sDg9hL1CBZ2uytdr35ElJ9ADmlrekw3baLOKOYLvslctpfvbI3jXMsyXK36WEveM56MW4OUNIpniu2c2MofkdIaP5HQh1BPy8CNgGuiEBDgZqTnTRl4sPRnfRVJRJSRyOqdLLRixePXO8LcRhGkdUiwENKjIynDmEuOuPSFUkBE2UPoLTfeQRnhENYTRNqU8rK8e3PsJfclaiWftU4OAayw7WhbbRE5rhGzEK29GuDLBd1GZA1pGy9wyhTZP8Vk1E2E2f6qiC5AoEtsz4JXiJkn1zyZOa5MacrB2WEf7CO6fr8oVRUzNU2PTxwN9tOw58vdfa8nIpcLabfORhqanRYHtaspMEgbZy4WKW3G3rJDotbw55oUo7w6yEziZbC35yJgoXS9665r0eH7W4guOIsuES3alubp89rbFvpbH7XXZk59eyf52d4prvY52AHqAPW0d4tLovWXNVN87eyiVtysdXh7tbMFWhK68ZZLcBsRHiJYmDn0UXuuiNIJ1eUl9nqRvtQ,a23700b40ad721a8,649bcf9477342606 -9QoxiG6xxjlnStTKb9uSZB7Lj4IUYKUIvDDwLROdGmSkhEe3hpQRYKARLOgulg7l4C0wtjoNLeRrSxMIx0yJfYBpjb5SJphUZlBru07kBMFVYEJ6zPhvjwy1kbf8yVr3pO7ZV9QwaFSMx5GoMXpnt8sypcfvX37nSeIlkg5SQQiZwM5ITYgxwS6cEc6yGAvPRwCFxbyybGuo4pbNGhb1loUdf7xFbb7aOWNkoaZ0PLrAs5ZmRn7mZlngF0seGpzJWCEGBgKpuGSMAIm7Zp0iSynBmfZTSdwpqOy7BcKchxqoIRvGB66HaqaVr6Rz0I9aLqUWODyR5RbTsG8DUebPrmLZmmti4XM60f49rF4O2SRfJnzRx7AlKBS3MYhrQFMPTy6YKYIVzItD0i5Bl2jLMZZkDLF47oTYCm5HYIYtGszw2zMUKxVYzYRK0bLRZbYvmkakrEVPkVHN3PLNMtcWS0ZNtERFOycMMPDVG4f63dx9r0BfV8HfKvbob4AC0KkAzSmtjqOxwIzEqIXxEUhuqLJTAsMLvnIsohd2cpNhJ2LC79l7YZ84DAj2SZhiAtI21hJhy15Vyc3fdWZUWlEv1pzONH3WtFoeWBhR9HyTqlcvGYvULQZPfR2A07rxTFyBSmNOaOQ8K7AFiCs3ihmMJfxZnFYfA4PDi5DzhCyF0FKSSkTRJxEafMLbSsCgAfwSpzR2i9YzgGzVsvh13UAEa6SXwccQaBPyHlg4flJDjppqiFRXZwBfAaJduzhjggGAtJrL9ZUUORHvfEKKx1SS0Q28,874e82f04bd56c3a,d6a81017322d4b92 -kALQHzPm,a45e765002a1a2f,14658b4e3c6b390a -QnqkadxfyVUnUjvneBIX93SPKzrsLPjIBlr3CMBnG981Q1hKbrSe1qK2iECigbdsydMt7Of03qY2gnq31Rsj8acugpmKgUkHuU9JbGFernEEpg9NGf6KYElpLCngN5QMZJv4ReJ5DKW7fxOv78uiPk4tkIIGveAgMyrVXvSOrOldj69hBMkmRGsforfPj6pGICMiNQWenuQFhKuktRECWzwM1LtSAP4vXYfaatd7jltyyjtDqg3ZrKA0NUvl13cJtk102vDHN5I090bkiuGpIWtDx0OmDD1apQLiJtujOV3SRlctLK1XKbmbLdFK3dOejDq3rxytmuCmhwHT5kiIoARZI2OYGmCgnDuUhd17WfBiI7f4eakbEo82tWIUUechlIhpYr3rxYtBqRJsCUWbQkS4E06j7ZzvtKz8wdRE781sYiZg923YoHjNDi9t4WdtdHq44Uom8hlBoMpdgPUeffXPwLZfKP8XzvQPlWTX9izTJtasWdk6x0ASgExOZzpuJQcaiQmKsvpCooFOpBADMyfIDdkgHavJBCPwSnIjhNQZp79qtwwNlKsWUaAQj2Nm7tMikMu3F248zIgu9Lgai86MllPJ4ItvuhUiyFs3C139vBnZ,32c6377bd350f57c,d9b2e232e45dcbed -PvoaeFxQMZaccPULensK21SKtkIJAR4yvHbEOe55vEc1ka1jiwq9osy3xNtxowA77j4k1QCFpUlqheemBySxIFRHw3tWT42WQgSHMNwmiWRgtczUGkZf3rc0z26fKjrtgZ7JYFJ2pmjtqzQUXSsQo7mryr4alwbLt5bW6UBK5H02UCmhDuLOlJ6iRMXKixi1lnkReSFHTvYV1Qg2oDzmrhR09ZFrPPfScESyeoouuM0qKi6cg42gKqqzq1llPabRj9zld8sEiUxQA2td1XvSY2iMt62IpNboyOD0IKddEGuhsa7F741kL6ZM89bbikL504UtzTdEuugbfZhbwq1d0FOs4MjQMXqln9tg8ijMjsnGgYGsaAcxxClVWCqvu3VwFMyae3xpqpJ6daQtDRKsvwsK1MaBAL6QI7Q1VcXZ8lw1pwL4seOlAPw7GHJxyWUkQgZ4hunkgbMXXt869LoQVmcF9qs3eCpyrX3pqIePHyYJzyZC2k70Wo3BwiGg9aE2RzyImP0TUW4sREQlDIz82QLYQllc73vju5AAOetWqqvsSPRyywYtHNpH2F2pG4cMs18NoZgoErhjPRVMpF4iiSVo94J8VJsio7yJxDQQmJP32Es7pf2eNDMMUWwveuFbzDJK339QEjL1QywVoYoeU7ge26wAqcZHc6sfAWV3D0enGxSKHHUmvKGI1nkPCPG6YNJMqHOqCF0AiTa2rSl6ml3w4Y2XuuwPq3jTy4Qvjly9fNwp0IBiN4KL8pAvF7BYMYUDSnecGGfkzz3rSMUZBC8EePiVm7aytC6KY1zxTsOtco8d8IbsgHuce16Ln1ZKCljVGe1KlRpZFoqT483OFtIdLlBXHZHfmibcYGOhogFGj9RTrrnmkatPYA7945,ff3a16b322ddc844,1f0d0906fe77c15b -PFBe90G0Ul9dmbEnG6rhgB9fDyJr8sHsa99FR3NLq1ngW4dTrx3qClG6ViGygwRyXZ12fNuLhjbUQtmRGYjETH9tbMl9XlnLvrq2GpSFEIlnZBaVnX86lrzSRJVJjtUCCoAGn3b1SnViTiYEE2UtE3ddfDn3pfBLSIe1DU5Ajckfj0jccHCXGg8S1Gs2ZHqbNFJnCmLHYG8idChe6tc5FFrwTWVx4JY10L637U9CXXEeqYjDEXTFqXY9G9KtYFoXOpvTHalJm8jsaUx1fHwcCSWHt764Ak8oe,a6d9615ff666d738,e7cd44141576794f -p7Bcv36Cy8ZtJoEpoZoHbetGgv2LLq4ndF60KrMj0HcF4SEMeEeiC7i7Ekpq4XEG8UhhT5tH8OawIzYMGBzimQd9Ip97cTukVjPFXecq8aPMPvleVeAbc8d5DhqQxOZTaReo2bvdmkahhOyzBpKs6jkM77bz9sy86g5qLXW8kjWJmQham64HKByDZfhJw7eZBUk0SdxWqbSa00qHIE5ivHhbcc7GbXDMhSs1fdPd7LtRf7IPgTn0xjvNYAIHv3TshlaTGxbjclmxuCN16PxxZKyCmNpRWCMfSrJpbmHfeIsJx9m9IhTp37lO4chmXM1z9lhVSPO08xZAzbKQOtAuESSkPlJU3mFRQl26F8zDG7ooYAogw76RE4VM7HvFyECf6flusbq4DTWExYARZMoHwd5vrBGiki3e0OONJxOoP9DPQ6HnymsYdBlo8pQIo2G0VX0QnEd98yoF9M4kql2P81UTpuTCJaCeL1KpVOTLzL3qRdoxKkNIP4YjqXdyYndYRfBsa6IFcb2FwSzZ5LqMjtXATYiTVeGSUNM51a8POJpHfMkMVq4ONZf2ZDVIT8ZEcE4nUWAclXIdCXZ1XFPL,d2e34be281f6c209,ae88256cba72c802 -ikMYpqGCRNf8lu,5c28ef61e44ca61c,3cf4e536bb86eb23 -bmQxoi9ZZBZyvWBi6oZQgpkbeZEiDOLcY7Ck6mqf89hevboSyLO5keotaTgN6Sbo7OHHpK6X1I846Rm36o4fuSBxwEiMZQtTe3vhbYGes00FLuR3OdNyZWPwPYuSDIzR4wt6T3hprLlspgfGHdDDpwjRcVtpvxpgekWXuvlpGgWfw5L0f4WzNaP5NRtvI0zWjwJBUgf8z0Nfs9Kq85GAFdvXeDwMkBDSsRMQdIu4MIelbQS6WrZ47txcgoPeVE3kVcyR5UmWx5Ocs7HdI7fjjddSE2DzttStCtQ9KM8hQ48afYchPWZHV9TAZIAqwvVIyjGJnrLGycSG9V9xw5Q0sFPJLesDrvdZryVaxcX0ZOBX1KrMlVANOZNASvfY2ekROS4L6QfiH1f4dFXQhRLNQEpQRR4t7lsZ4gXtaP0p8fgP9P2w5N2uxqj7eB01Ko8fXIidHhvba3V8LGi9EbuILwbeby19g9Bdk3V6gWtUc9j8xvNpsaz2TebYFX2GJn4jhifnmcSZZx,429ccb6a632256bd,76c47a92f0dbabb -jq4yNr2sh,2f6dc419deac4528,2ac6994229cb757c -EHfCfVulCXhhRDcFVSzW4vw0LNqAbx0xQcXlAAKmEK6RYaktZWJNfWktVyXTN90q5KS6K2cjf8nVkM04A3kxuFFUBYYC8dxw7GTGprUfAOvpchmm8o54i1Fi0cjClwDLo0j4gTUVp26w5MhN4qGgHPwfLLdNfCtShkTDCulM21vzUAPWqrkINyOdGpAX5llnK7TmqonRge6fc6cd6vnPHFHskyBTj3BkDqbSQZ3ploXzG8gRKb8aCD8hW0s6MppmOcBHGUFC6MdxyaaiKG0tBSUNV9L6AsSsxZSv1uYIrvPdewWiqLFB5SDyGfvrHpimnrnJwSHarQluwoJQqCus8WRHqDZJZkGwEt1ZURWIfTjvDUnoehlqBVnzwWWPAPOcCq7NwKpd0ojh348HS1rLGXCuMNNXGofAz0CIcXTCnprFHUVx1fo96lOiln7E3KiVA7XbsjAO96PPuWa8VywFunzNDRshnyqE4SRxp4l2pDIKr3FjfRjGticHQ2yzGqT82VBUqMW5nz3q7NA46MEo40oAavB0ygUiCswMqe8K5TYMTtIbhYNi0AcHIcMXpdKPugyfxfYKHJdq13erPmjb6ZO2O6TmOFfBvAmjQjOVoWrwOGm85ZRQfKibnuXVsLUWGvzBmBY6IY58JrmPLOY4fv7ehTfoP4y5nm76SPfsGLTzvfeeWXETQ61ZrrAkcRvyQXgBpOAGGVXBrPrKHF5cJjnr3KYvM8q8Q9BL0R7gC6biZXqS3PDf9L2hb8tH8lltoKmbmqcKFEzT8hiAmxXOEott80B4o8BeXX13Z2NRyfqQ1A2kzDVxwOXiwkwyAncWXCEKDcqIt5kXYQDuapfnz1,cd90981ae68f81ad,f56f4e69424215f4 -8puRXyzrhWdBYjGzaPLHv8IbQ9WcFW85wsAwhYnzp1MaGR1fnkeMwdZXsaA4umZ,77ba10ea0f4bd602,399df10bb9154a42 -syPS1pQkEzB8eKoiH7Co1BsEx7DsnXj4ptuGr0XzKxjDdNP4SdkNpFDp0O8R3Sulu9k2l6G1QQmpoMBSXpkkKk5sxS0J8nVvmRRxxJm57y2271fm7ubU7rwfDFH4WCSmSgEgOMshL9N7qtkiRMDPVB1TfJoOFkcc7uiU7oYcKKcjeBmSyJYOTK9grBcAikcarvi1b6sa7kCydOBYvrbsRV5Um78cBvkx7Yq5hUWnLglxlmV5xU5ZasM22bcq,d3d1ee38a719193e,2fb610f96c833198 -oDweWChvlZeAc9VmrKYSFY5Hs9J2aOlQD6Q6oIyDOYaNDTSQYERkLy2tGwhUkag9TvQHRGt7HLsYTnvEM6LoH2OfAg6AUIXve1RsMN2pbjv7s51wfuGgnnEiOywiQxI6MT1HmT1eYVYpiRvA22rOZXamLiQmYLaM4wWSjaNXnvu8CvggmDaRNR9gDUbCXi8qaEbCVSxlNn3RE9t1474E38OgNEMbK7du1c4DkZlq2s2mTEMiCzg3DPQ8zmXe3URuSo22kuc3upeBThtFc8cf1jHHDADbJeyPummE3r9fkZjelYkfKYtUpYeJkus97DoM5AEjOtJkgYkvZKHOnnMXonPj7gpYh1Q0BUZ97ZJ5wQcByUouSFJHm4K25CsLYF0Qmjv3UFn9t34BbRSaas2vudLRlx5ftaKJUtEwOqeWOzlYcevidiHbgJOFhQJIDm0Qvxa7UNSU6V6bGMiGIQQI9YDba4c982z2nW1zWDwydF5PVa2ewduAXOElKPByRkn1lgPhZybqYXP9oPh3Primx3Dpw9zSWE5S1ToQRcLaLDqO7F0IywrWrUdGyep9Q6sG6UWlkUHh5haZIooQc8IhatZKB7rriJXubi1apT7j0L1CGb0tRNxCrMPMQIrVA9Rs3ISncJddAOdpX3wO6g7Ba7N6Lmjz9TzgGVqHOlknoSSg0XA2FVb15gX1PDWQeHisjL1wslNZXClt65wIH4KvgknnyncYnPG1NLTZGM1cKGqx0nJ,d1fb0cf6ebcc4d4d,59fcfb62c6b83931 -3CpBhsYLvraqIUDfl2mKFi2WBCeU8jYJgy84guuo6EctDxaRqiLkX8UCv8Nr1gGY4RUHCxkZYBsVvdD2tOEumkOYxnKbhZEIv1WvBiIb5utjy0dZcuHLhmNbQjkb2qs7h97x8hAfjF4GanMLIfBLaceaqSD8KGvdwcnHZ0sZwjZiCjcObjxHEvhhLAk,478fadaa68c6a895,3e78468fa0545069 -M0oNJXmVYGbUBWn2Vw0JEpyi4vKbdzjcUMs5IyWFK8QR0sC5hHgiDhhMkOY5kPlCM3AGD5rI89n3X520tWzsBQseSAOBdAQzUPGS9v5WAYiZd2Efi97qGXSdHqRLO5ACsrZBsIoAu3KucqvSilpZJkopeexCUj1b8CdeVMwIP3xfTh8mqzcMWD6hE79vOp3OcEvLSXbRhk990Q5L1amaWRzDxu8mLTJZ1F3xZds33x3JTXkG2pz1caGjlHBB8mEPc9lG4b4wIeqKIyj5XWWLgbwSjaLajBTGJUKgHyDWNIoiTUxbvWfDxs90YSIo1DRnhjta8ZvK9yKQliRfrOyE1ru7PPHHjE,976a33496df0cad3,b4089ce9f20e88dc -Wu7GHKzRXzGTJS8qEvQItE45GRGTKGKtglHs4cjTV8lziIcj7ajDo2veY8JTMFsxKSdAgvEmZ2oeE5sfWos2a8NYdOjcjoGVZe52BBICaSWzyHo5h6F2BcHQgnd1oUyuR9euVNkZ2p87PVgmBCN83lra4pVbZtvmL1EPv3ZtstAmvVToPiIeY0EZGI9on5oOttZaUq0MZ1K9CN99BTyA7WBfLIecUK9jmerSYeNuZGyXlF8CcTKqhlAQ7YDIpQgcwX2wr4ARr857CE8envyy2vfOnQ1wBMU2rKzk580hksq4vrPStZXTt2of0BaoQrAuWgFFJjv2MXTvTfNgzXHnrwXzj3Jx3U3cnxiQh26TXYla4ofnNg7OK8COUo7HnlQKI6WgE5o2zNC6Cdf5SCZc49itN2UFzFtiGskLsOMnOroahmKTWBlK7qeRynZTag9TE28MDWQAmPY3FDi9HV3SSv7jCMy0a2D5CNEjAo3hu5GtQsvF58gfZSSBfNbpf1f7oBK77l0UhQBAESln9hmn5awK31CGCsbR7RkXLxHtKUiEwf9YpjcsES2kidSUeX1a4OxTx7cm8wHFpc0oKFj5zHWNTDSqnh0MyHp0j73wBrDPEPO6XrzHITQr65n5JNBUVn8O0Ue5bBTChnUDZjM2kHys50yErvibhtosguqvJQHGG0Sgewzyk7PK6820WkBu7jwwDNQaUyDG91t6zvaAXxp4Nq6Afjns4H6sd6Qwz4RfykxbaNAq7d8Bkwba1wG9RNMwxoge7lFoLVHUlZjiWdYGvc6Cm8SzUVluT8DnS2ulUUwKNJ7078lgjecZ108OBhqwGx83BRhgh1mZZAMIWWVyY2Nspb4yeB90bdSDjLNYDYlP6VssQFoUm7ZwOpQNabWSio33N6zbTxU4qoVmVy9N0Pv6pH4t2jwtCg3ssDAZfJzBH0feOzl2XrVBN0zP3w7XdZsRwcM4pc9bJ50sxG6DATf5har,92b30e4f6f19aff4,5679a426270b536c -WNJFjwRHtX4wChmBHpmtjz3KJHCLdJvsSkQpBUGZDJktOEwraqjcbi7koLNmurbU6z1GcrrnJtwkbT1lDkLSvBzvM07Xs679EzerKYh12fP0h1fPmjKtxpZtZRgjVcHCDeOdXNavUu1wyYoGvqSZBnRNpBxuNx25CkEJcRsm91hgQz19etW7C5w1y26huSpKc9a1apPVUvFiz25cwy3LEBhbPt64JZVhVEdcsSgqx4OBqOhmoBNt0D63U4aLZDkzK0YM1qsQwndNwFkwiXttxECOjolEKHFPashvLwPvaW4dQBQWTsqsaAvvXvrP4cYRgGnMY50MmzfKfbyN9lxvs73vh6AQ8QEd3ugq69DcWGti9bT1IsGyKhaP2a9eJ7L6BF8ftr79TOJpkUxqH20EkIUqMN8tPz42XI1SF2xFXE9lSSPOaO2Kz4VV8MJIjiOgvaphIHNVy5NZT5iS5D4Gs2q9OF1bN7QBj8bc9XogxcagqUYgJssdVWO5zBvpw3avyay7Flr4oRxKTjncXLly5vvX0cwSBCtz5tCgxItuQDKgiYd29FxofNEAsGunFQuwZlWg4Qztroe2sgprOD0QmFKAzDaA78H83wrGYVGIUpLPnViseqUsOUp3z0EqX9xCz1SFt3nFiq3iSrMjTbTruaFgzDZFVeuQkJXv9osW2j5uauQGyDplBvhtbheRX49DsJRRSHi9Sj8GVNq1VIxZG5ShSKKmOVJWmlRRGTZUrm8ikQZlZuVKr2xX20MUgW6ysmpPq7j4chyokbpsEe6QROb1ByoFOYuAjYSgyruz7KacFhomrz3vfqvo5IsOVAvCKANaVZIvNFk1EhjGCORdfnVWKxdrPUw49RKa3fYbTY3Dlt2Ujv5qlO0n5dYoaWn4nk6u99brqFymeebM47gBKr3NL6GJGZQ7sIbWyES6WHpfjeRStuzjKogtFtL3aEL8cJlnO3AWz4bTy9EIDS0DuIaPMZS8mMNe,9c55fcb44fe0caf2,4cf50a224956d8de -WkGcRNTdQYPHzBlxyiwGb9MsroYZbcdpqBPSluE2TtHTYKeTPdyuNId7oM378dxXc6agoZbrM5CzjdKuhW2pIQdV1hXtqM7BTdDZCIlL6MMc3bgeDYO80UPjH1mUTe53KV1La6UFa9K6nz5QxAewvgia8Svlqyckr6Hgwe8Q10wUzIeolRcg1MDk2wdrOG4C4DxYUpVAhPiHfa2fRjm1spDTCw3rx6UkutWrjmfb395U0GMmDfSMNX13E5siARvsDcs9ZxMU1EuZO0wkQGXcPTpHt9nW4JsZjNbjbbzWG4LsBc2CAFCs0CMKYgmrYQGkojTm84pwZh0AfTyrarL8MMJFP56bUsTv5CbSP1q3QPuDz9iUMrgklj8zf7u5X5Lex47O9A78KG26mCy9imRDtgE3fxwW4AFwjufADL5kPDU2P0IU9H3t9lzZ3hG0Y,9361c2a1f8144931,1eb3ec2e13ed4470 -UQYs3oxDDcIiodhEPRvxre7WYfBRS5lpFDZRdv9flwt4DhTQOd0jisojzXsCtFvKj3xEZIs9Tubka4pr3VxF1b0Cg8203bXqF2FtQKDjnhpFxu8lQBLS5WxlZTQTpYO3VUQBT2O3o281RgAFYfCFNTJP9WwXWnoICMl8Z5dqSe,7f3feaaa8df4bcf1,c633ec3d5bd6360 -MQPO9rqx4jaQ1hr8j1HM4SxSufH1dyzRHnTb9QH436bPsjBhU3uZRQUYRFoKApsovMhhEZcUABZWiix2DJPIB4lGgiNQxZE5Q3kRY15j0BTJazaGbJDrYS1cI7QAkd4ngzAqDq1vrJiP4AKV03i89l0kdkwjULwByDiTPreIRiXaf04eIed1I6ZIUCUZEsBlk6SPRxC0tXLWdHfaqfqPf0FW5OpewTiOxKtWPy9ezpXIt5ZNFwulcJyh08fneQlrQSNJLCm4oy7mJQ4LapSdd8xcalQhn37sMxihvj7HGZiq5dpryykweVL6U1urmbHLF8quvIBuOIv2FyAy7MekiJc2Js2BgmuTugvx6GSVddPOv6teWKUXBNTQcYmbMZ6rUcAQhUNjlbU5UZerQIYFdcu9MoLO1tUjN2FVwB1dzaAPXpaBMzMwk6WgvPTiUFLZ1fZjfxmZD16sdKPgiS4pla4NR9dNo7pe8YEfikeWgeEe3Y9VQVZ54mzdICdh6J5F258V3ce4DGwSwFpHhr1dspbERAkrqI1Qhqa6mBmaQJAWJEzO0VtVJzVP0bKSX305PYbVGxCpQWpngoCUzFP5eRGPZFmEwXRULJ0dPIJRpyWLaUKiIGYWlSoRI7hzaCZ8CGNyiOy1AfbcfQdXEfAJkuXUvcVzUBoAASIIzPfsvMcmNxyhbcb7QCzF6kv1vTYyfrjVoUPaizdOGbnkqo9At099csnoI7EjdS4GDj1URKqDfsSobMZSecYYm4aJXVBOQnTJsuQ,3a354e852d9f52e9,8bc12fa4d0dbe979 -amskKvSAzcFSmwnnu8tV6ZSzr5Atbe5WAtr6rm2VJm7Yj7nGTUwJSByOmUNc0ngOD4loCmoCPdttVzN5knV8q0iGix2yuiRkXdU3ynTq9SmXycENoya3sB9mjRsxUxQRj9rN9Bf70fvcxXyxY7WynKh4CQsnvyCK3dVpX4A2s3q1NPt82,d1e4a5b9f867f8d2,b3046029bea1013f -hTaLZ3ft8KCgC1BmULIGsTJkkkc8w2w4lfhoiIa06UcC6C3VM4Se2Cm10XM93YelPtnqp4dtsa3xRYtG5KqWDvzdSk1M43v61oDdI18Z5ShMCyifnDCuQtLk8VYBuUxehhk5lZse8e4tCwVByjm0eBF9CbP3fYVzgZu4hXxQbY2YwNKU2p5NZgTzNewV0hAAez8OVP6qacEcdhSLgNcOBHmIAyrU8nNnB8TfKd5NmDP6IN4y1bnnfHVV6yXVwEQwYmK7dHJqERG28NH6ShT12sns7nH2cCmISh84p3PQIeST3J5OLf8feED6OHUC6TKPZF2N9idAxXFoeBjMf6HntS6CTlbBSZJnonnN3SPumrMG0WZntRMPi0QtZ2rSIqrbg9UT7Xp7bshL0o8Txaa16SzhaTR7QXI2clQp3gNu0uhD8OagUmAqrSKPYJtsSlTXMjWftz0WVsoT8XqVmwNiddzfHF4g0E2Cl56eGnXUZUqy3dAfZIX6XL6o5WJ4cMDhC80J0PoDsIuMDTQalNxj03DelMw5frwZKe5Xyb4LMU9SlzNTfxkMJn4Fupu4Cfn1ggGsh60aPx3o8ug5iHb4oUG099hJrHHc6hjkHKl8l3cDh0WECUdvv6B5dmdpaUz4Hr19B8K59n3e1JKiN0wwG7CJIqqLzgZjGZwgOk9IyU5zKSbPHQYZKQxx2VD5ZVbHF8RrmdttTIc859ENdzVd3NCv1tLcfT7ZpaIuYxseU0ThGTIVnahvCs6nzOA0jEVoLP4CbGQVrDXjxkpxhVk8wMxvGSBiGPLy9ZbkBGn0f5GS0tPjcjRlP1GAhHddPMBtfSQgdReXYUakOIRtxdoO6OYD36uXRwQefWbgby4DbmK06DTMP7wH3AAxoZ4,8cbe65a4dcaeaee7,a5cc7fb12ddc1cc9 -V5SgEEQ1bJpCFagiwYp9mWAHvDxhIQIJ9S8EUQntoeMWDCsAhfffUfw5fPWt7oWAO51Xrf3YwGjQwtob6BWgWaFlm28DRCGGUjj23MOOem89yCFKiz0K8gtlbQdbzNwuCnXkpRfEfPizSFPt6t84GBFbnWc2NVohiNM7R9kU55hVFtzUSv5fBTIfCd2NyROEi7OXqqkKVzRppg62aqH8FNLaemRD5WibbI3pTXdd2FwJBAIS4gHpLRwbh5Z5KkI4xvhQjxXdAtuWeT2ODRypLEt0Mwjx3m03VciPY6ZRxWVbLG0wiGjBUvj9BHcOfiWjbSTxv7ER8ppf56miOmqKlLBTWwMNhhmI5vLkWfZIKPHoq35EijBRN7uY2LzfFQbRM8euEi0bVyt3Jhssx37YD58UclgVpBnrMH2E7ovcxKsR7y6t2LXYTvTO29ADyFKd3ac0it1b4fJCxmzWrgQKZPIVotu6lGGRG1uA16xVTB4iHRrro7vx1MCyDy2nyB8sylgSzi80MUtqAgUkXXGPD2TToAyRRTCKg5Ph310GTZYXm4pML1Foouhv0Ud9RXy7ttVZcWkKVSlAuktsHKQRDf2YXrxgkTIfEabBFqymMY2io3AotHzFzQoWkLh3v0f5jeZRo7kf9DqbWukggqoQNmOTGuCfuRZflEBpXrCEf2cngFMlhMO894tHAx8eipNZ4zNIuVdLGfbjmD1mVKQkzJ7259xlpY398FwwCMxYyN7cuZz76gT6eJyKLu68e1GT44X4svs2gOMCFp2EN9lvDYYN3T,5e32e7123861d7d8,33592a3808150277 -tn9OsBMLE16R1SMilOYDTfSHEa8rsDtDKB3mSKw75cNkOjiSlbr9xPCBELPDAx91f1xpu6WGFkyk9eAoI5Nxj6nepP4FphJN0JH7uEcoMDV0IP6SDB2knG0QcLW7ZojBlDTJZu9PJzl055SJUCcXtPfBAHA5NaWQ9hYmziy2N5PFOrXTwPcLSBnzwUXL4Ft0sE7E9GQMc6nakKpJaWxHccaJuOcK5wNFU7kgIbGtHow763mPkZpoc1PZcFOVU44HbOSN6BXMIX9Sd90uoEcKBEAAXEjcRPL2gy0rBmyRthjIfMW0TBoRIwe63r88QoV9HfK6fCRHiDYjCV3Hcg7eDql5dIFo3c5y71V2wTyubbU012Ezc546Jq9evLyduf0s1i4Y4WGkpNK6yyE4zvMXFc4kUgK9HMK2GGUZptAQjgK5w5niuTNgPOp1PG0hjp5z48PMgyPsMC6fHGmj1ctzUUmAPKJIKfWH39gOrvkMt03k09i3a4Z0OrJWtNhWRMguszn8LvNr8EpdIEynngA5kJbcxsQuA6pmjtWIKFMr3yHaSuVxnMdX5xIaYOJxxNubcjkCkpKWDe8vD8ZNBswErTi6WYTiigEMxpbmTarTbjnVy0Ij13VLqruSCOcJ6EUDeus4FwWRwvmyBxiJPj18hWlCkb8LOpigCiIlKGWcOT1zHPVCwX3Y3YQ7w3bnsUGdX0IQlyBSVm5tO1HMus34EAmSHBCGZPbINlee60DfvQVk5iG4dl3zEakIX858kh2TZMnhU97oQFl51lGTZTJaP5EtRCQOog1D2lCT8tiuwJ8VtPaPYoVvLnGRSVZgtVcWmqaflJD1wtxjMSuzTtjuDnfdA3izU0SBg40PodtsC9Gdp3rGzBiFhObeLyeLt6Y9Wrby4jRTZxgy9uj0spX,5f9be948b32db8ee,79c4df0126252897 -HTkoqpT6nkls0sm4xqWXV6A7nON5TpS7qaoF55GWtdt07xNGQmm8bxVKwAes7y312HZiErjs7WJ8tmrLrxLQNLy8u3qy8mLX62mazH3POF1CRNKg6cknpoyOSxuUvtJgMkdzouWa2OQV7lJIjtMgmmLjUvBKcF2U3erM5hAz6zjxgPz3B7XIzXoa4ToXtFWJtnDmUY7o8SXuK3mVUtg6VyG3NcyF5p42ecAgxFVNR4pCkGNHC2GrGZ0Z00P6dKYC31npBKf6FjyJsdc6CLDbgXArlKdpKodhoRWoLNXqgGrkj2cHuQhn0Ai2MUhJowUpAPzS2qEvDcohmqeltDh9K25ysqsR5uSNT4Mzf4zBJSSFvw8OzZ3l7mccj6J39c0obG6VYGFdef4fgXmRUj16Q6VzhmBQz05vO5UEd0hTqzE9HtquMIsmZkmyvvUZKxYBGSBEmSU2WXm83q4UZ8Kx5wfcNoVB0USoFplkx1RBm2PIjrzJL4VdmyS693Mn0TogZY2Jqhi6bZVMW9tJlPb33tYKAT8SsMieroDmOXFcSwoHHulP5Y5JhidIGX4sud2M1,737b6c1725e396d4,41d95312bc9c99b1 -gIjMVACLkP1mNtd8b5OdlCACQjrhKwiD967CS8F4ubaMAalLMRm3jRvEdyIrePjKFJVACqvrCpSsTO018RyIqXn6rhNvibUTxo2mwkz6gyNm1MTj6y7Z5ZWvLOHvSrGSqpGoHLgaOXWn3mTNYltPRsDeVdgyG72AfnbzE9MhRCoGInP2u8aFl7gA1gIaUYUGa9kiIHHc4FhjL6oQxFX4Z0XCtSVdRx7B9KehOGJ5vp6vWL0lR7LflWEz4hmQVHjXEKrIxs7jyugKe3pg5wIqFNItLqFcLEsjz3yEOmXyZq6hC3pMELgFVH,a3b9fb4c199d1bb1,f0b34f2352a68d71 -9E9x4nFXokY52zFPD27Owk9mhOPZ8iPtn67If64HnIuqIWA1qL2AeLGSc3swe21dA4W9KvuMWqQKd3GJKaxU3uRezPJ5bCCSj1tPjAfAruuM5rRo0HFbMvHrtgyvziZtqqulRNMLzzsTz3Q6UGNjvO6JDe5pwHj7mxK5MuqDX8yYBCdu30LIBHXEWNmtJUewkBwmc90WhSUBR7I2xZ4oOfnUGOdpA8ZZ7SztPerViozu4J6nth6HNcoV0K5XjJeJQgHG2KYNS50wT8NgnL4iYpxSD1GfvTvuPm39FxNltPx17Al6UCsoQQU4uZ2Kt5DkXd3XDy2Wlxv3bc1EdKKa1lg1nb0HbKU3AnRWUUqg6xTeCZCHePsOjCyKVFblkAAFxO8PKHgeUWQ0iqrz0VvO0ma0cHflp6HZDPWI1Tnz8LYeIJVgj6Zx446QU5U4ujLh5gVFsSTgjPANRWiCnFqyJM5EDH0UDvAxdSzhRaKpiuqBCAM7HOcXHBdLJzjdON0FK5WVXz2uI1tWGyPFDK9gcUxhaBvHSy1eEzAbJgTQlVnZyFG9sOyp7qUerFbEUPSOTffGWucpU9ADP7627bXPqC91v1nj64f2xteD5AGHq535ut3iybyTixAhT5FnefgcYUUPGqJ77MZwPw4rpl2pLTLUg9b19sW8ehNaupmxVQfYGY6Q7CC5ajSYxOBI45TwYExdEBa3nuGovePfbEYX3rdnqJwVxQz37jTUY7xpQGrAmruLCbaDJZSxr8x20YlsBGALsjIxCDdiJBurFxe1Gm0h2TBwwN81WsgBSA2iEWem2qfVF7pOysFUg,66aad5f1e02515e5,511a1a0cab7ab807 -8FqyzZrAb12tx5WaSLiug77SDgHwESMdXaGFQqEiZbYUkHAVl9RaLIkwGLxMfUl1Oxm01nDiEN0knc8TaKFyY21K6ChZC8GhIKzaOkiipQfuStno2oMa4YG1nOvwfco2pPWxxH78nHvJTh7fgW0snpY4CsVr21ghAfN6nhOXpIZhEk1ebCVWD7EjQgPZaNEEtm14H9NlBQLATYlXdJrL5eQNi8QsXgwaQN6abyf5HBSSRxVqhpZCPNRd5A0PLZIYVNIcNJhG7eto1bqBQA290pMm7jQz7jz1kiO3ZurMcPU8y5MrThfXZ4JTQv2z5H09WUltLVEMEo5QEMX10Ml870olpobCaxvlpufJn1dNxk7empWAPhREOM,9ded3cc7057fe7d7,3ab88d3a0c1bec88 -eF6fwpxgVOn7EzZ8ELqd11cC9UB2wcGt8CHeCUNSBRDV0E8swlZMPXgoOwwsKmpbkDsZmaGqkkwQRC5vnMtnzm8XU4HH54vfmyw17EAZ7IwabZtPeUwqPag1CbIAYmD2EX44QKC3PkovOFtUbo17LJouNjPhaMM929HsPGd7RmbZnMfoPHrYmOH48MrQk9B290mOwKw1lXQZ24TCiZD07ProLbiFGu8D7EImI7mrIaAQilTMLmxkllCLt0cDFpLYjFpnSz1z19l4tkdf5GF8J50g0FvCYInSpTMdUC2qYNeuRFhJjLWnhLQBs1mlpQ7qHAG96Se8HsVS0lrMkp4SsCUV2T5QFLL0GOcsPWCoF9eGKwDgSJ9y3UpBaKOw2dZzJZZzrUuzsrzNPj9jnBI8lDG4FDWBuJEA0Bvu8i0pK1OiS1Ib0zJtvvZAa389LNEHppXlbJJHoyzhbh6wWBDSc7unDZWHW9Y6mbyMZEbOdmLO9EhMTWdYdrBYRswQ92AbhdHq3bP4wp6MXY1Na2Vog93y1RPWCfEZ3OYaqOATFvuq2zpvy3guehZkfzBMOeAmGZdu7zyoSLegV3NJSEpTfSLGxeQrx7XLo1vsh6WD4DQwH0lr7csMi1ioSG3LioEoyADR5Qtus0u2EpVZPXyWRzrjzI48AZjStNHTuNk6YQwCv6clJQQHow7d46fcZ7IxTmztzIEkmYbBRU565D8FM7aMlF83DdJ14poJR88zMTgztUIqdww7b5SjcRG737h6dKSBAEEH0YeRTpkpg7QEt8BpgPs3UBtELwnHcEeIDBInJXGGIHCjWPMcgWxnNvXapva1onXjqkbcOA7KwQkdrRwBxTogAOU2IPufmuchL3mnZjnjRlAtHj3LVFX9Wq2MOVwsz6r95ITp0,7e597d47f7f17d98,2113aa5d3f957cfb -dmfsb7notbocWzoiFMqSL5UDVQyNjNiZLsUBSkDJMt1KhjEzlvMYJjIixO4nE4bDB72rqMBhgi49iFnlQJVKKlHm6dp8KmogXpZGWximsqpuPjrafice0ZjXUuwyG484lmprKSQbXwSyCDkBmPRb0MMMrUBeGlzeIGzjCh5FH80uJF9fV7hYI09EbiqbrMekPLrMn9RRQtZZoDLIPgxoFIWnFuG5M1woSlcPRLnEX,cf37180aa290e3b3,faac1ff2ae470429 -TcUQ46yp2JRL28q3zbBA2Rzs2mjxAiRYTug82inpTK4PJEN0w0c9okUNapSbCxFM97OPVSkyfvLAjLHwMddqNtLEsvDalRWSIVauhdFXUosxRzSVdK79q5CyxnN4aWbFIBmWQKyxNfRszi9xcqjgS9fOYDZHlHO1lEdH8z2DL7W2Ps0om0KWFWUYmkgTdlmcl4kBevtODIJtNoLc6CNU6NbWL9upJb7t7K5KUqJbxqQR0lBkroIer1UptZ08t6vNXkdOYV3JrqWVORH2yE53ILcQzTT1MmYcCW76iTsB8OLVuNgEfe5CllEeQt8ksic3fkesD31ORIiwjfSU2IdKRoG4ygT8mEjszWomIUBqriw0OrgXqpyeFia64FFSMKsgUEKVGolaMV3SmDIYFmUNq8u0Z6HUJ76MqPmAJDXNA2k6EfVyN2swEhfBNIzkHUratlGjwN99GO9cwanFMsxpZVvX8kM47JRU9uRKUdIx992GBrFnfZxbwSpfIdthMgaM1Bz0RgrnwhXVMrb8Rqqk029MtiTkhLuDY7mPTsTykrbEhUh9ybYUnw,15d3f0075a9e2f8,b507e776158c0377 -V1RGPmqb4FAohMZfof3oZtn5zwOPDGd34MVCUp0VhFfg8CtG798teVDZ9yMe7WRKxxaymzNSSYmyYtOXhTPJluxlXpDJ0SK7ERNyG9dslhwYGLzUxzJSWRfo9HJOTxOCH5d0mvQwsqStd7tiOHFYYxslysQvl9HbWPsAv7ogMPtKUewJy2NkIPUJLs2GLA5QFPgwvxSaFtBityq0KU2pGGmCdLDmgHj2INzcjA71v5akYcCNBm3SvC5LLkqyH25uw6OjeE1BDBRd0mDsc6pSsmPIQPl4h72mIsN0l7RCmT3hHYwXq1GoyU0GHyC96z5fbijobFi8SiEmCsospdFywkQc7EJNuAowU35LyZjsWmSKceAWAxYVTFCuPrAExnQ5mFRvMAdrgdfKHaquDg1geCvTDbz7TsWHx7GUPwLTOJj5EDqv0EzBpeDpocYedKF0RpZOXWdAoznXaQo3rNPkrMjFyTmar9D4kjXtJFwpBNEpGPs9WXwi4VNtKvXbTiL8tZ89flfA4ZC2wrBCxtuYNkMzrHVCXMzhHuwXDuDVXFo0GyN9TluDgNVRqYa9KyInQkNCvLlGiBmN4tQmp8pkmyVdjg949lU9IFMs4u9RbKM1V8apolRdP1oDj1TKDnkROfP8eQGaAQdMb9MNp1ZhAmhB2zvG5prYUGLFhlmSDhayj0Yg1DBuT1VjfrS6Ycw6HBWr6trKoDxjKjH7fYerNmhfdCCyiMKTH2iGIxabTTJKEAWxmfmFv8U90nkgTXg92z3pqCLP0B1ULY0eDH2lEx3Mocty27kfXg3bFmchQwMCvydn6TrDt5WhFc11d8wGDvDCWlEPtfnSK75SI9CInmzP7uit1gWftwpBga8lN4KJXpx4jl1ymRhsHTb7waUhch9jfpsYhQ61pylPTdPk31n2vGvalItybdVGWZiyt,1cb2c78cf57b7fff,4c88586d7dc17916 -YHWQyfhMAN0LUIMjseYD9S7V1BHTlJ84opU74qr211ccUezYqTywV4n84EQys35kg9bnFd0E9u27tJDq0FWRUsU7mzKqtUDeMTawN9Wej8H6DJVuQoTlHBKnLlitSki6CuwhBeDS73jtU43X6pla934r25IorfxtWyFzB3GicGEdKaEa4xzLz7zFzZy0p7EjIUD3f1LXWPErgyQUpEJjxdBZ0NddWcQhsHZXH6Mx9MwJuDoSY9VKiuAO7RmPJrNn7JPOi0hsiqDuM2YNUhpa8sDk5xd2YEnb72FtC2QOQjTskti7BkbKnQfQ5LextcQLuB3ejLRWrC7emXiNgCmtFzaF3GjLfMzt3QsE8J1kZx5Tf8a4wYzEqYqWkRNNyn9ELi5vlT4k3Zf6yXKTnrVOhn36lhzAeHKieOdmiHLGbIL3TDRYtRoha2ss9JVpIyCKWRnIxO2IoLLJHKsVvjR9xxeGMvKac7xdBwy660U1osO10jN3nxBecvmu5LIUTewhNKiCPvMD2gUbmZYfX5aR2FeRdVW9mNR0sJiq3TkeFXMxauwmU1X0GpGEUBeBigB5ItzG3RsbLRm5uwr2WvaEt29wiC3z1UFNIT9sgTb1VriHIpGyNZpxffFDa1o472i6XGwbzONHRqm4oYis7pfHBNeIp1AdmEB0H6LF04HcTmnRWHF1eTbz08IfFWj8gqZyFqEyM7PZ0VhDS3AMokxrPl9N,fce1769880409bbf,eb6060b8e7894057 -lKHkBpLaHNMSu0Zme6j6v6NRD3LSuO3FQBCtklxDGkrKEYaIbknBaNbPv6SI6WRcfck4NW2lg1GaAxYoh8FpiXkX2NcfzvBzVUTk3CpNAIaitQdSETSwLdqSQsvaQgA5jGvRnJMmYImBzcnIVEYEcSylEwF6j0TBxsyjkLx41gaeaYU9xUiPMvuolgPmrTZkzLIcnStQJE6,6868a9df4a5b215c,a6aa84a594643fb5 -HJSMlbjYbzFVwtN8vHT0M0tINOZDHfWTO5kAcm3Ae9vE4xIApUQqgoJqg15ccX2GcGolWfHS0FcohA35H4xncBo5QgmKo0HFtCFuShKMVYcrX0NwHfQ19sudi0mE6X2ZWyS3TWirWCKzgaPg3DpiQ,86abf48bfed573c4,9a743017037f8766 -2y13plupXxxBtttZtgVgzZAgqrGz6JiUDroWLXIT3re2yDtuPQ1TxHHpyBoyc0W5o5US6LVXpRCxk6Qq48VkPCqIZycQSt7n3jhnF7UGRixp9a8vN,1f9ae9f5550f7230,d83c85fed1c7841a -4C8VWVCv5ODPCvWfZjx8SFq1FEJzIWfaJKpKMi6LcBFUAWNzTjfc0cjMEVUxiLptcq19hvyQZ2dvrWAG0KAt4eBaeeN1EZUxCRxWNMHUo7KpcmpZN2POjmr4oBRDDOk1WuMl3JIjb7afO9o1DngElFDTf2rh9IYk2KDZobE8jXiqCwETlGoTtAOZfVyq658pivYNgY4VxWUzTLGzU1X75f4CclqiozT3aWwPmoReCH6GNStPdwPYnPUjoI5ynUikoVv6MOL0thfMXr2Jqf01vTln1RRVJZPNq2f2zJh8L0g6r1W5n7cNvLIoSWrxXPqFt8F1Z78WIMm2mV9h6yEqG32UDOaLCgJiv8sGqnzcgiK6OgWwWdm3xkBejnxqF4,88fc7c645bbcdb07,2c9f223b53994485 -JwntCAtjnELjKTndvIEwDPo7zopd5XCHQVBv5thzhD1I1TmDxIYkFEpqUCxh5Lopxh3p0svCilJqMzzpHGVPfrvWoVhv6ZL8CawRiDcT5Tkk7W9YZE3TbEH0WFR0aPvujNp2Z4xejzGhpdhPrvbXsKmWNPp1o3bVnIweYGmdw9ONdBSP1ADYWgqwWAYyO3Y1ncMMJgusgKDjePVPY3ZFCDohrXiVGBNGzO9rPgX8ldz1NQ19fzcicQawmqF59vDhCS5xvhKnnMrhRAHVIUPdQXk6YnnjFmn3DDiWYKG5yK2ymG1wATx2kvHS4NMPrM8nXHHUdnSuZkEtqDhEWAU2uDnFNGvAgrmkplUFe9FiOCnJcspHVyUD64P90Wl2vj92fGaNOSs0pD2FIQ5c247mclCLiAbTAllBKIoLFq3bruJVScYMlIT1IOAH7c262hgvflCozHu20Vqx75ivO4tASwOOnVb7nsKYDWrG5hwm6XpAUicxiWz8JQFAtSNbdR0uyFm1YBxirRFIJC193N00MjvSg7EBBz65MThtvtSPkaFyS3RIj3D0KX1UBrfGrpU0aoZF4jEGA6Az4RY27cx35CWKRSBUOBQzU6MuCQIAX8EYdGLoVrujMTzgjp1XyxWmBJT8tofcd2xNgY8ItdlNqEUTXaSBdCbPHdQLpUytQm5E9cXLrBQn2igCbbXdbBD7coU2FbQSN4RMzs35Oih8xHrehcW7BmIJ9XecDYG6Seq0PUnqPRl2qvTJM1UvtN5CcQwzp7CSCPB4ZLMseRibqVV31c56DSjO917EtTXxjO6UyswgiuZXiHpVATXBCtvTfsY4jzits9rD9P5yXxZS2aqb3w6qcFonk7er32ieHOkIWq2,ceab4bbb4d6fb87a,395d2d093bc4f6ae -cGHy0P3mMoPafWLjH7glm86xFbtVq6vL0BKJjR3NtYR10qukbHVFveamgFUHybD4Ez2cs8aPfAU0Ao6rmlbd6R16vdMaYNdV4v6iXE3OWm1mxvUobeBDUKzEmoeanzThJMaMCnvLIjareyFoPhUyhR6aQShdn1Si99dAlinlbblYAezM139V8efh7bmM1qB9h1pU3PU335dKYRPMytyAKjx35r9CZ3O5dXqg2wUD77TZxgHR3DrCOudCd9dI9IDnwd0cG8mpYqeDgfGFshs5nFyz3DueRlslOLmKfgT9L8iEyyjDUJAdXhFJ8qHKrec3BuTxcEACNCRY0TxMjNk3PrM3OoWi44Zr3xUs7xnUOqRvy6axVOgasPMq1JR4hiyxfg3ypCGRELfuQCHwJhBQnVCVlTnoZof5MCrfqq31tTRzMJBZ4mJDU25sw9iwFdByp47RVvOvk6K1tMDyPcbCShuykmfPZOpckt6DGY1KgtsNlBwxCVgzcxIQLpaxvRj2ckYEAMk5FoivLLuV1a6TtGPuOVJtic2EO78AKIzrPpcb9mHrmVepPpF8qBOIoT1GVdzfqs3VzhvAeGUvJyRyTZOB9SXI9puiQWbN2Ynp5AcXruqY7VSGEi9WpM9VrSXss9iAJCvcVAPkkfgFrNey95PS30gDuiTPxcSKBS4cZT7HECZApxLntOOMxnbaUKW6RBSTzMo6sMHwZTjGUVz4rO9er8NwYHoEplNTRJyBVEPq6EPQtlHPWVUX1EpXQarHiYqtoX9Im1gB6klYCPndgyara26UWRsCwUs2M3EFqlxqrfUrQoh8UXCpY1WUay0gnPb1WbkTSI8CF7h21pNPVpAVQfn2zxeA6Ctys7YzKw6ftfVWKp,e37abe8d99d4dff4,e7b9a79786374b18 -zjKjWUJR9jWBpnZ8vr7SGjCUwhOss9j2nfmDRRG2DnvGrPwGlG2hmHQTKpJnvJ2NcSiG8hxsywgKf5nLaKHVb0z5rGTgxpzQtfN46OgESh7jdEiVdTHXxKMRv1ZMlxcBn2Y8dQg0Xn6pVmuoCygAgYIDTZUwC9EnGSN9b5N0uKuG3zWa6pRFaAS3fCwk7CwXx3hIJVEGYTYhwiQP3OBLH8pyEr8zSgTpKhTi6NxTNBpvuTZncMPwxxueXoldz08hNRrpO4pPkWokamFlufDX7hnPUlvFIx4v0hhpIE7Sg09lcz4fGXwJZgVP1ViBOor6CDC4hW10grOYhBnAX4NqfMtWM7fZqEJka5p2MI5SwCyzTWgljveNuGcXTkDMthj4Uz7cCnAVXfRvJMz4qkkwTGDO77tLn6EPLC7a0o1nVzPUF82ckBymVCM47hDbhEpBYiikHo6t7iqSKXHRA0MbROkdO81L1FEbV13JszkrKMIfCPAeBIT,625553d0fee158fa,1a2b8437bd12b6f6 -2gzfZeTBXbvMqVfadXaoBehYXBoDevvX5qaSqlOyaGUNfrB3g0dEQks92KgZwCzh1TE5qXmeITY0sAMjOIjR7w3xgaa056fQWhaUeIwlovHnCoNl4BT6GV9SDpnVCehye9ZzuZ0cXovf6WFd4Fv9fZCqqUqIHKMkDHs2mXtlIKyzDJBxp9r5Dsykxfgmpy1sRt1zf9S09aKqAf7zhSPqUVbSrBzrW9459EQrl0a9zuHXw3BOUdUHAM9iWRBFvF6H6,67e0caaa3e55c1c9,567a6e723d56011a -e7JukiYTfSd1APBgdPb6oFNS8WBwQeMV760aldtcfCLqE3F4BgJx6NuA0cy42k9BpNzc06mIMqGVcf6ZvpjLfoG4eRzzuEmUIPKqe2QC5UUjGH0zvPN6y3HBAeE2EnX1CdYZVcpZD14h69iYcKoJ3FXGD4g9UGmQAZyBDQ7g9DeN1qQcem8rZUM4htPUlwk3P9zAjOTBeUrWaVWaBI916i8jDTKYXJp085G3BMlhH6MVbu9kb7pfP7dsBS4czXCYSmlN005PWBTqmBwIcBknrZFkch477FrPV9VHrCMJnmu3uuuPxuGh0D1WiqsOBAt3sgpoXigNxsvyjMKMpyRLXGdCoCx7iHAL8eFPNXY5mCqqFcyZZSH9VS7c9Imy2CoCDeyMe0z2X1eRgFZdpuyiRyQvivhcW7VOfIHgSxDacGN9ENoE2QHVsgXvPEbWbEHEufIu6tftTbHt1,291519ee6f81adb3,747358724135cd1c -lDEQgV6fx9Z28SJOKSWcBhxFvq6tQK9D8m63vEnfekQhc5Iqe3lDOEb9WLGYCS4ApZU4WkdcRRqnHL7TyM0yqZ5B1qBR2jI4EdiLbe0XMvyQvLkkcG4mMRFBZE46fKvty8CgB38N3w5I5kfEr6ra7J83hiOwvGQwirE6VYwzlX3jR3m8MOXutpwG8688rlKZgLBmwuHWutLa3SdUt0LSQaes7499Voj8UEOdxTtQ4KwGaIlOlyJGm91gNUcIOGY1vrMBSAvPPMNSSj9e7UqLyELLoxjbyqlrT3mtnRDmI46CUVFDZKoPsVT8j8sCwcEWhV7t5sb26Ooa4WrnQOMzVTC8XqU4bIyatmw3lek4KZAhVO2f7JH39KYjnjkzCDHTUnCxfp37VEN7d0uMoENFCOlO,603b8be4d6d809d4,3c265236d49fc447 -tH6D7XjuM53PXRoRSqZJ0ajucJ5XVJsr8yTmMkWDmyYaLyR2HN7rkDPlfnqhyedq20IbFasYdp7KGgV50Ixi0qZLYTA9bQXtbgFd46Uf4n18p1xo4zf9BPg3qqEzlPDI1hjyUtZpXb5GOA2uL5NFvWYZ2qq8jZKxguaudCocm552zx1KYQL66rG2QmpqLb2Qo6T37gSaUBXihDogzlbUNiVvlz8KpjylDicdhrGZwX0FcDpK8z1TIfSMOnEzn03jlnSLkmphDX5fdm6t1XrIi8w85kBUpQL5o9lBkbqPj5L61RgHvQM3vUrcfgcxKCVX67Ul0lUBOwVCCpoaZ00qZzFdW0EMGYnox5S6CIzW0m39IFutpDvHlNN2cVTcSpoJPxe2dGlFbiGwv4x6eNvxs6IP6XF1x34zIjX5YDI4Pm56u8AGhRTexMWZYlxvtOUWbw3T7ca6Impz20mpi111oHgPWOEPCuRFUP3Lw7K5EvWj7M5QElgBYCJ1xR4Q3vvIh4wvK4lwcooeiVilxqt8aB99lg6JH5Qo1tv5Hh7bcq6tBV3o1WR1G2xqExThbVLiWr1pDENGIqsf7LmbFfB369dPwWk8XNgIm6H4Pa21iXqaE1XfGTfEV7o7fMtoAavf1dMIhHuCYUeOxOi8rjWVZtV8qujb3fCyge3GHXEq7Jeoxaly8GOeNkgf5fTAgx1TVorYEU7Twa7NpeVVdXDm7HYHYXH4fdwkhbQTGMjMRPc2awhGiBDHCxrX3ey58Fv9QZDFE4pQUOkDRMii8MA1YJzctzyVwv2q4SsHJCu5PxSjoPc6L0R8PBnHJ5PutawCpiqJt626KSHZtnOQmolGSnwE1sLbJK8mLvTz2XPyxGXZQmr8BN7YJxZDfVsR2XeNJd4WPxA8xiCdDTs19YpOu9OKt8aki7Y1sfo0Q3Nvg5hXHNKETFWmBdjydMNJ2HVbZBqj1Elg9rS7JjpeXsKZ9FmL,32865909f2279b2d,fc069c4d8632a23a -8CB11IIpyVe7s3W8z5BZVzkPegDI799lmSDeHfYhCOccYo71vn1UAH6DUJMYsKOiWf3OG00KLxeA15zQz4ol,84271555e65d3f1f,aaa6a2a9de83976a -ZnAPuz1BgrrUuDMD0SifKRnZvYCe44ptc4OzBrsI1cumb9dgrc1BMAtzt5VXR7ezVLIdquUD7Xoax4Y2OR012sxxdBbyi7ZooD3ikcgHZSJL2GH0kpSF7Ld93XGlVAQnfQZ9wdVHMm2uCbG07VC34MPMlzRWAfmc5pm0bvaq4D87JfjDAQEibp2Y6TwK4gJwRmvI1rgriTaRc41Y3bK4vpX6mfzul,2da8612683a94892,5998b9fbfeca8a36 -UrkfI7r3OeW10NYAFevmvKnXXKdGeglpBXgFZxoRBXWPqgSEg0nq6qtiBaPVL56701qO2B2AZ6i943plvFaN8Bm2nEwYSJEomOrOa0eTT7wXUlTZohmD2RVduWVKVae3oXcY5bAFk6yr9JYAo3sBrYRuGTFSO8JEiGubogmTcenoV4rBBMtr6s3vv5sXXiiVyoWNECdIjCaEPHwlmxhP3NK4SF58T98FSwad6DtiM2tb81AerQcQj8AB0ml3ccIpeGpYaMvT1RCsPctQOXDaY9AOm0Zm1E9MQZboQVoHE39zzGTQh,6c4d209d7d60b153,7488739b2318ac0 -JLJ3pb0CwfVGDJOkFNR4B47tjFocYfy4d1PYQKjzqCBWyYbiqIaSpEzTVkhn2LglJk5sTj1FZ9Wr1cAug9p1EXNAxQQzkdRQMMdIJJl9g9do0TMQyr41DidOktqam2pLLNMZh9Du2jwhCQMWvKWSS1ddd4GzvbgTFDN4mLuHnlpPESPTOIpSp3aKmCxxmtmIHcvTZme9xEflNTfr4ag2YiDeFKv7wzXdEIcoDO5aBPWwNt6nHut8FYeMMupazFoEfVK7SU8yp4dRUTpqkqA2fwI6SAurlxBkpQTVs5aHvJto0wEIWbPuQ86TIOA7kMAMoEmJBctosPKYBvhbKGEfQCrag55H12xWwprr8kh4qzv0EG8fow2WjGv5Ue8zpmLw0oozSIIu7yigscjUJGtU1cFAegjLx3CXCHhRBJCVcvLYV3lmZTycnkg4OBbOlt6q0i3jjpcnLfaVUWULRAhkrQKuV00A4EgVb2Gs0vk1DSA6VRsMlCQkXqNbwhxRs0ddqeDhmB81sAhk30WWbjIbyHv7W3PDCZkl5cx0vb9eboGnezbVRJaCTdVprFizIJio,188e103eaf28fbde,4b9bc837a46194d8 -fu3Dwr5s1uLGySQj5tCjYlvdC6PGh2fUUrn7apYRaHIXVpVUADLCGHMMnchHtkXI7izxrrefZa1pTi6EQ9iTQM6GCxm6cpKSsuxXsGCSGZ87W3SusV7kjVG3Wcw5Gc21HKIu0EqgDIh1UWo1LaozO7AFNPnSVQLFe1kVSAyhWLlrWUBf2TIPApF2zST9faLBsOKNYxxSg6k15tgXcAXNCj2z8U7AN5XACZyQ6vO0OHokPkHcdYi6S1kvmK7EttwU9EPcASwR6N7rJfFkau36ALZlMZJSUhvH7TxZNdXGtMKrBadsKZa0nO6ykqXOY4WlsSV4deUi9ixE3klsCrXSRhNOfkxpFqRbndIJpJC0qGIsktnKLSOnGdDDrPGLJsKSeqAGi4yBwE7SG6wgtYDJEExQG1dGqj95smsOu8OMkuDLVIdyq4TpAmZYrYRLtWhmzjfxoErvaJI27LUWh0A2A8rU1m7wz3iMPnnovIq7NiHTiuQjexaH1RxxprNhYzC8p87OvzHllJiycMcuH2h2cPeavsZz4PM2bBTehWiMQxkeT4wZLgNVDE8OsPzbiznjN3J9BSjCjWZSHNvJdB5gTqmHjVxsNycLzGdpjwiC2TgeBgW94lPM1cFJ6tBWkvzzlZuov10lBdPqM0DIs58Tv37kWuUwd8P5aGCeHnCdVSzrl9xCBRgeBJ5nuTzDoT2zAFTPy5Ob8pJ37ybwoNGEaJbvygF1oZdEDxb3TPc3dfBDOMChx1Z06tLwDBHQzpza2mZt8lRAOKLnPFHCSMyJKt71qxgD2d4fmxppf1wcfBOOLedg7KZ3jGHFrefTqkEG1XYqpBqLJ5cKYQu36mwON9RQ0gHIEOpC3yaJgXrUr7Db3mAVuWy,2e7a7ba23f9b0c9a,26e473d8f50f0914 -2NoekKQol0xjgXYLLNMCNs98C5ASqAYglIgaSriuPyO5UNOVstiG9uz7UsHCmXaYoI2z4A9ittV08ErqkCZBwraBmaQ4E3C7wvcYCBUJHR6Mk4uzNyuR8SSxtKajdC2EbR2OZKTWrP6dA7u2heqDKvWrIqka83V6wq9Tm0QEn0JFXC3EFJ4wv7m4eL03xd65wBLoayrCrzdKsWoXLg8lLG69JCTrfwVWHhIAt8McFYhFbBfCKWuozQEU2XK8FJe69d7t1rsrNpq1AtD0hIXrBDmXZ33qxvt8S4zT8bIeU6m0KiCJoMb3S9h1bSKbPPLDKcGg00vKONKYal07iAgV1BNKActDZNmQISnA0bHXg5sXLDFzbzSUf4UfTbP2j1z8LUg0hp1yaG9j9k4rKzbtNZgapXgPtO7eH5TrmBPmrhEyCwkuoJcaezfvRxcnT62SYoQbbHtdtg4Ujy1v8ysmnyfOTdyfgW9DvBCHZF3ZG7GtoYe4G3g17ou2Fob0dXHf01X16RM7W37UzzbCv1lthSjZUugz5lllDiBuMW7UxVXGvPSHg52W4Bxb9k9PjzCpOLEHiY814pVTzZXNUREsJuI15F6ekPg3FDKB4cxC2UxJKspal72qT6TpfIRtRfJcTO4mi59DrW147HHJUJiG4uuuBbZ4dENMt1Vlqubv5hwQrNZoIEyQgZc0MNxuw1Qm7rFBio2dJoH1ZN500MryIQLmjScOtfDYIOuYSvO2CF7HACiPJviCk3v32alqPwQtPm411Ajm82o9X6mEyBBJ0vRoZhKeehuNhhqHNl3zcpXF3273vMt3TZ0s11YfK36mE2BKIADSdvxOmU1sblNgYoGGl6ZmlOhLHkjclYs9jfFNzoQL7aKpBeev4YKEiHQPaXxkU9Oi2A3X9kiy1wZeQyX9y5uFLF2cKf0hvbUxB0YDbCsrzDF8tusvb8XCKqvgbFoYBMCg5D5ZsGXAeuPkKcePsKYAGasNS,fe3be8473cd84845,effdadceb38fcfb6 -AowU10f8p5nBjZzJTsfZfqVc8JWksxCLW6spYF64XIOQGzd1s955qUOe2toxbnaTweegy5XPZU4OcBUcZ9mJPnY07ISVv7ND2JLOvHOmCC3kkbKJto4d3BGN6ntpbQKNJp25nhPoMTdtEzZ1ErmnDkQatvjrER8mvXv4TErFvxQLuJbM8lbzFosh3rIUjmSIfjVMSu9HFHojKuQK1ZRMGpWujvPPPNyCfXbAju0XjvxFAEsMnWndyJu32RSVTjMNQhs9Z2DGZhxjgkS27HR2IgLLR9aEXwXhHsZnbNkcX8uksoifxN7Pk5lft4zO8ZQXfKSRS6kbgSo5hjs13PEHUtSZH6uJGbuIyzu7Bgb80F4EwTvsdJpYy334jx4SsIoBGOcyOhYEy75O9tqfXe77Dx8T2drwTjHxEgOZd11K2RWBRo6Uht2M1iNqZsaHu42nzN4DycjZikC3HZfHRGfWgSCOmRyZDUClR3yx6ppCFaf5BGjZVyOLyHj8aytAGYwRCmPwQUxzNtwgQPwTITHSarervi5omYLvvGmWgkvUgZyKBSZ4dIS3JdpKVbiwx2UyiogEQHeWXuxQ6vT3uvLmifduxX7ZeckU2Pnm3wIpnPGNnjPB5ytNURizjwlBY1ymG34EeAenQeueOmqS9CUKl2XHoGVgAchfRXpkZu7Xlzh0hcOLKWMVYGJqUHAGuZkxgEeEjz8ONABtWQ7aMUprropZmNvwtkbpDTxfqQdw,c3c59342ef1f855,e542edffb8915b68 -9YwzHHoZLcvWHD9kxfUo5YTgaPNwXRP4SGxsYC53LuJQUj48ZDUhHftQamg6J0pTA3hY5AVtWy6W7JP8RnGXZbbXOVxvXbY9tI0xyLoTNbWm3im4U6EgOs3u5u7kJRTDs,4fead0d0872da4c6,52bb5177cde8b75 -al9XTk7m5aKmMXHdESNmix6T4wa7mcHApNqMyzghfTTcwCPSgnhpFywcmHgCPGfLjZ3X0tL8Pj1JvQo7nhdJdyNg1cFlZjOTAtyWlR13xjdDkaeKprIZyGETtmhJM4zTFhtXlYCJgH4BhGmjCQ3M4v6Elpb,8602babeb3c5b23f,268fb3ebcd4bec44 -3r9CdAI2dY7lhn3umjQMjEI8MwIaYcLBaPrqlQbWVtLea9p3GTsFylYVGWadX2dsqrdJ19uNfsF4cYEFHDcP5HyfSBzVwxz6kBE2FKPsYaBtsCR99pbzdF5bcgmx9LI1E2DF4qDFktXAHvnQG5kggVICsA8V8wzd2tHnnIbgkHxwCRaIQ9NpZZtpeLvJ27owCCh9h3qzvgLlgBs5G4PPJHcM2EhTBFlO9izGcVMACjKFGlEICn01UdbyURn6yhPC3zhr2ybM5b9ZAfVvLdGiPDnm1c8GZwPKA0i2WixTWsBqu0fVq4uB68uriRUzJcq2LvssbtbdcphiPaBxUrYpebivpLEwCM8Ia0rRicwG6tiZS1jmMCzCCwJ9dCyq6jkQr0lKtGUqz6eNtirh7AewcPzPrvk6EwRavZYzIuHpH8OWWa0ILAb0m17eOS7qCNGDd7pPp3mzYQ0meFl48coCcEacORr53PhyQsegQUDnWYfDf80YZljMlPRgzvxYWtib3SRHdoGYEPEPDhl5UuLdsHgLrezByPgKGLpru5pyXU41q1n9zimyPh8xsaARzo2WZj7nUYtPEXdVxNkSqkf78oTJ4q8W7UDBL5XiiQG9s2riZl6jEXaMVGQ9t4eB2FcPPIgcEWdUTc3TZQnXEo801f02xqUPkzhhcq0dUO9W6PXehlLoWp8BbqNjO9YjOqxZ42VIOf42jL1hHw4J6L3KQw7b0m6R6k9qWFmfbdrqHwGvZUm4jrlk2WJ91t36AttiEgepvXj1Ti9oGaKLyykq3yOJaih28pwWVCMC6JcuF4rzvQIMPuO9Fhm1XiHibnD735q2WPr5ZXSEkwkCCQz2uqizV61,c71e0c7593176fca,eb563a9ab2f32685 -8Pjafwqj9cdxEm9qYDRXyY0tMGl9eVkc26tOuFOI7YRcvn0TPQl0eMLeZvzAm0jGyqf6mZcRDQyAJpS0sJwIEhkfwyj8HeQ9Za62msmcFKM12EC7potNiwlJw2676EyF31uavpYFImPG6Bhsn4xABWS5yzXkOa8m5VudmJEAaMKl5nog6wSnxFxOi0ERoMkQz8Dnbzd9DBqzoi6VaJygYSOmWdIP0ACjw4UqL4gKnXmxiABMJ9JMCriamyf2KcKBagUc0LgkvjMjYiaexYViOU6tCPJ7wIb3KRIFDRbdreOFyxI8Mox8967WhnoIY6o9481DOGRtWhxdcDzjoNXpDVdBB1jkyKTYtIU5O3O7NtS3ntrOHFh0f9r3HVmUSVfvCTKOxlxD8OHNcxq3bcEWAm7mije88uNLCaPOzmsroYmotdh1zZj1fJAJqRM3IaeV8pCV4i19IBH0R5W3IuZKtwZ1fFGQKmyclFtFsmGQdvJZUEwNZS8wm0C8UVHExmdDgdLggBhZoViO9R3yk4vKjLA8uFmzrz6RRkeI8ryONrP9SaYcmlbgDC2l9sS6m1Ou8MzxZFjn4BAkq3wHPbiLmFqnsYtqMpJsdNlDAxU7l66PLEgrc7gGb9L4wZSPfrjKAj4fNAB4r49M7rb8gQ3OtGQd0PtYC8XsIwcPrLSPQyXWPLVNPH4DMhkIDqlXlV8qgSvfXDFiXJ12vbkxrnyxGFep7SGA2sc3etgtewmSMg,ba390475b1a170c0,e9bedaaaaa10130b -Vu3tP6k8p9PCiilR7S5M1YSrsCIjEj1pvip6YCFa8WwHm4KP8jSh5WnqACxnAKdowsePvinQgcTd6aoZfbc1vp6uF84CVwK4PzlSvjDmvZYvf8XgQxZR6V9fNhcjoOj6PUft6baUrsHyciYTbSfDKBN2inCahc0ho3NwD8YovZHBcje8SDQEtDtm6FfqviLfVQif0jD3LrCuRuASSxFRoLsnavppLyim9hFUstJsNlYv2VKlsJVAG6Ip4QfgJBcMetJujGVYiepMzF8nPGeCCmvxvKV3ykPwr1qH6NT5okzF,82d81021a215b893,6b79606dab35371a -tIyHoWbwYyWWQZCB7fDhuyPHevHe4PJq6oRqLNVXl92ZSLLekqWlR4NMk8rTenZhMUJ7SQJdwGeCMJ0JHcg5tW5eIb0XYKMZt0BY5xy7Ex6QuHpIZNaV9xddN28WUjTkf1OikJtRnmvhMqcB6AxfrCkJaDAGzqdkqlEpwiw9nIC4I7si8vEXIPIFoch6M6Fq0OK2v18Uv3ajgbQQqDU7rGShTUhL1jxI4MlYNGmpNHAFD7rWthXXNSzajJpf8VlIzFWsfIdEYalpIXDE2Ez2J7ZLuLjoo1M6qYRL7PS018RUJfrqbdbJtSbFQl7X4PT1gNmZQqXNYt027nvdcGAmOFdkH6bqkHfELWGbsBr6NaTjV61FSHxK9Bx5sEqUE3nCpz0Zd8PW2ztVgfd5jPsfsdtSuH94LcC9Oo7DMNdEMjEe3IAJmIoPWpfIGYFzUJ92FvxT0lUijnn8B64sCSA3MMdKICHr91uxriLao7hMXQ6qlYOw6qpC9VZZblIgeuHXQDoAzkCAtu0GFCJeeEr5OxxRrqNBGsnP,e85bd2e0acc3ba54,3f294205043cafc3 -yHbuZYqeRuRazAXoJcWhE42xsbHgW361yC6HJgLnJksnKdOvrZp8uddozrb8MDcxwK7x9kevSKhsABdPd7e0Wl8PQ2tKj1SYrbuTduMHdz3whvCps0FXpFByjeiugpZFYFGQFp7yncEXFPucoTomJ8d8ZIlXzOTVhlx7H1axOUuQCTcIeIJH00Z6OkHJ7p7eKOgMr55QOi8H501WsfaPiDwiAnAAOqCoV5MFQsKzVv2OnFmNRIdFi8SqejBZmc4sPP0QebKkWwAUBKjRyVdwz4xc6vtsKnyP91kLS2K2THsRo8fqVZCC96JwwvwwTpllgRNs5dutuy9jwI4v667OaLndjoNVfU9F04NlVLiKqZVaNowCYQ3QURdPDJgiL6sdvI4eLW6vVGxnSerKQixnTaekDuKx11Wtlq9Uf8q2jOXMbgHef5EFmrLrtPSqp1O2TTrbI62isL7zu1CGWYWGxN29mgYWZpvR1VqC9p6t4FtRfzxbH9u4BYwqDhN,5cd9f7cf09a3a6b9,83626c82f858aab7 -irxGvIVS43LVLu5pzx5RI12MM51hKzC3Td54UFVfzBkdv37e76WHUyDTdEzpUpmjtRVDFm1ejOsrNvoNhc0BKr1VQxYVzxQNXQKq0Lc5wlxk3IxLXnoguiPIcDJP9YgTyV8es99uRafHOiTo4Id4WaX7EWHLuPivVmbcLKHU1jarefcQQZLBNR3EGXCFPcjTZHZ270npfLGQrH7YXNfKFotQzXJWAeJI8zm6zHp03yn5GLPZkrIKJgaU9AD9quUvGLXSu01cwfroJE7bJTV9J8HeyoJ5Cc2NqeDY,d7b5af094ef5bbd1,4da2131b61a2ed30 -jvqNcFC3J94ibQfTHAXGSY5f355AMOb6KxEhZCuo1zURDq57uALzQXITVZmqjc9Yuf9S1FKncgQtriQb5JGEZVnPKIq1gvxk4O153Ydqu1WRHcFFNijzOJ6ib0POo4n2pb92pzIjGC6fsFx8sSKqjnk18PBQYlMmzW0yAsoqCCUcPrgmM2MEBu5rVL5Lk6AGHkL4FCdnPN7PfQzc0bvqvQR4wb01mfqyJMiXSSksB2X9b5VeYsUCzpsaJHJoHEToIJlrsJX7tCQT8q7x7U3WXAXQsXV8H7RrEYTXs5DiLdqyE29lolMq2NvzQzvJLVO32Vb0P3yXQEGHGMNjpBALMG2klBFQIyOAiZ9iDoOg0hBOhKhPHsuPzbH3JpUBcKgjHa3siUyGr72yB4157locQj36rYYnxsheCHa3yS7ZHEyb7RYmJJsDw0H,93523623b30471b6,6342569cb4dc9d8 -EHxWOpJhOb9E6ZysmCbpa0yqa92z62lvgupiJ3QruYU3kbeZYjm12ASO0VXP4y02WU1EGk20S9tkbTDCTWhKkyidAj3YKpO1mpkSOvNnWcEKVPqH45moVSVzfFWqmKwD7hA2Y5wrcuTIDf9Pv5Wec43HVEw6AEeR3tfH2tBS4PUyd5T7BgG4dh0MiVluH95AGHeAtd6Yr5cBEk4Nd725uD3PTpTTKObnbJTmcDeckKiu45kKPwbKXVjd2ORhvgMA41LRbfnkZ8SgHnb9gG1WCuPex3W6bOnWNSS4Dl0zAGOVHv6fkixy5jj3QD3XRaiRahXvdfQHrmCGAUWs1cqcBf9MN39au77HEX8RF6vvQ4jRDG3hdyUWikrF8nUJTMXdz,653f3c16a1298790,9aafd76e5dcc5bc7 -tOdmZM7BkhTBzPygWSTa6ufYEFaApuTG6LjUhfAarXEMUrr01wqFfRYdefBnrRB5NrRmJaHd9F65ZUxgr0h93LidBjmZtlczxwB73hCBMkAVNozdkvtIrJZ4ofOr82AkQDcsnIybtTwRidNDGGodOncjz4UiYGi8IYNbgnrngL7xg6L0fvxzEfpJcqIuDuJvjMPokcF5kptOoNFpUO1MazhdJatF1PjeUWRhvsRp8f8F3cVW59uki2QQpzi0ltnvAyFOpPvKVldtUwgE7OLOn3xZb40sV5MjUbgeEd9z1n6wEsjPW56tkoWztkfTT7nyUcYy2vBc0MPxJWuQ9rZcmIR4oXOAjSHcKdtvuiE8jpfQS5JXfQtlT2H5J7yW2D49Be0ezV4BS8if6kEoUSddmNDdVoThJ1rt3KL5tJkCw0XyIXnOy3PFkXJaRnDo49S8lGphfj4vLfMTgIfLIqMg0IZVGWwEUdx22WvRA076V1h2pTFAMBG4Yj2IJxZkPx4jNLwKduWeH2Oviy8bo9IirvMQ3XglVgkX4yh3C80QDlgJ3yU0NpsIyWB99bxzRLB82akv9Yvxtdp4UTYFaF4lUfI0ANGTZECsod6bJ6tIi5n5AR9ZyHThxJrpytlZysKArerTZQluqes9DZe0TYUUSE0ciLMBrakUG9cfQK7OFoGYkeKFGLs0qA54DVSAlW07FysSOgiPb8gegkzOp1MsJM2t0cXIvl8FgkWx5gHWTemRBt4A7BJjdYT,988d4116ab43dd0b,673c94f139d9052b -koV8f8WkYbCqAxjPPQAQN1rDKEmQecgh4XEzZNFiByBx5OTKArdnybyasrGDMr3S0zj7iLx4HWDhlM7mAhgb54M7OQ1lMt5yThuN5scgCn3yNjjYMMDEp5zPGSocrjBTCprMtjwugsAPBEOktqqzWTS3sPVkzJYCCAWTbOWdKEA7hLT1RoSCHjdWiuZH52EfHDuZuq5ZMsgN5vyXc9DsHRCxlY0I1K4N5sf6WRfC4kATrgNULN26fJ4ho3OyWqztDJmcDYplIMOH4HB42IrfInXqJ8ehUZG4U8VESbm9kaJGpaInbxJJ3ImuFDXRmbzEaZqsd0V0KuM,96392533207140bc,597580c6f2526fc0 -Bov20lHCZCTCmTAGAtmXNkPxbS9tfwPes9URnvP9cDGEA1iuNbxPKcHt6TdDkz3QDmlpZAgTKdBtcMRD2seZCiquEQ90A8dMjKk1cKLfM7vDgtbScFnB00SaFWINZ0TOuGkT4bp2go7gXH9qB6mSB6sFxPtvLYRc043OQ1hIQndsLmbEBNTsEsFJbdfShfqSDwNQtv2fJk3UkpiIHp2xvFDT59TDDel5fY7qv6YhqQpAr8jmCpG47QWuZcQJpffuyr2C8ns6LVWu6NbXuqvJwA2QqMQ4VW8iSvXcYdhl1ixu7zdztRZI3Ak5jWODEaLslPegfQVDVToTLi80xzetUAcMHq5cHKrw1l5AU3D4XvXvdoetCLB5HL55c0XT0pe2uOJ8NHvSXMpR7LK5n7YN7qs0C5c4v2ZZok1ILQqFRMKSPlhDENcWNMjDG9ZVgdGpdDDTpo3rBANeadIF,89f9c2e914cd413f,39e2899fae884b8c -tQ47jcofVfNnGvGMw50TIuMYBnf8Qdcz00JcFE8uZw40K2ZwpA5VSHGeGPY7gFicDeTQPVXauviy18tZqV47C6ZCo9lgYzNvEYHAuimem3,76fc4b5904fbb312,95c903f8a033303e -boZZgLkuo2T1D55uTFEUWcKC8UOQXPbFfGomzc2wIAQnoOc13pL0cTEWLWrabzOqoqNN7kLEzO1egVuDigMihT0Wieqc67cC0lofrBKIKoEf6hKVfhWe3LfgR1Yc3BF1GohAmZVhTCKRWYubuDIjFF3XQMlp7NggMQxOo0w7IBzz5iR5Q8FpTG3AtjrWCT0zXjG4qXFZpidyWy8bNQxMiqNNaY0x8cJd50TYhNlN8BcIB47Y9lq4Hp2QZPJmspe1QALhVRvTonj2oRzJ9FPlaSbPmZauiW2ZUQfDvJtuY1uYyWWqZIB1bMJQUlg0RaFTa4MOFgQWCMFom7avWE764d5XbcvJWVDUKIYreIrGj5lkM638rUxX7ZnAEa6StQM6BzImR2LKxVcGpJy3CTHaQKpL1nnMUuljvIJeUAkLIZIz7Gr08iDImEIijy0DfYmuiuOTvMliVfbDq93W6AD4OW3a53AfczxKNq6KmFXvd5vu95VY7HEJoN3Y9jn61Sczl4BKsT6CdB9uNbcyDyVd7RCncBigSPhk5byZ5oa9DsK0vm25CN5XsCvnNhtlp6iB4TUE5yPI4yersn0cc20lRF0guntfwaFNu8YumAQn5CcSIkC89B4MNXlNjOpRjtrkE8R6DDzxRiQmwqz8s6fEoUbCGAVhU2WG9ySIqrnQ0WsuWmkETb2Jxc9OdELPz2pFxjL6MT1An71yxqQioJ20kIL4Ra0gNWYa6Suc,c03f9976a818b06b,6023c7a2fa4a1ed7 -qo9kAdZ2GjZ3HfksStb2YSGgthx3hsrENHP82E68mj7D1uA3VmOHVERCLMtSgmGJcbwHwFQuSZIFGjtnjTCz1pScMSl7UDcVMcfHPedudIHp6t25oqauRDrgCOx4AllPwbQToiY86ZlHumgB1q0XICMXj1BX7MsUFlNVIZRbVbO9ybxNDJd2FZbJvriw3h2ZmlNUqFGS9aPlwAn144dJtpKenqFJSocAhPyapz291e3uW3qgPdZVWS3o8wbZqiG0InekzojRU3GSV1LZOpHKe6xEz8h9cwabWNkDhYJEn0kP62UDY4YpTM7QS6K8BDfz1oag3CUUyWC0EF0buPy1XSNYF6jkcWwkU7ld9SnYvp5yuJE2WrulmAP33RGrg2FagSyJQdcNyif1zftfzPKooCMz2DKmBM6KDkvu0Xc35IcCn5r93Fb0ZOtx4zOHtKk2odF5Yf47QTJHe4NA86UtGvvLmMZi082sdvf2k3axldtgcwvji8GaxGIKdD8gKaBM88Uol1N9CC5F1tIGHJDeU0fxe38EGXIuFshfDnoHWSzZCmcd7eZ5EEdIQCDJmRgoTDfSEwFZblaEMdX5cKjpmPlW1PTt9MyWTzhTYi1YHhgNS5TK20HHqnwCS8oOIAWvtNkczX3vvBPlgO9yZMsxca0yhb4DvECf9P4BBr5cQa8xLUcPY3oTsOJ54zcHd7KVrZIaCGnu6sW2MNFH79nBgcV5sBKW2w4jTPqftLkMiSq7XLR6eAwQ1btVjuGw5BshSVsB1En9gazA38ARWs1omAq84y7MN1jF0cJTZtflmM9A7fQ5eTw2TkDteF6GPxA2rO4rAMvePdkI6SfcqjZblGlDVky8RLEVDRmgvsls3tOhHMnNWBSYQSMlDyt6Djh8CQq6LYdV4zxMmcgou7uX9zLSLxEujJuYKBEhWWaqoKi81ahD50mSIlWh,c8cf75a1a74392ff,178db75b4d360703 -B7fhgBhRwShTH7F1ow5cLBgB23R1aiPhM9cJJixn8cVmBlLd6GwjzqeDsndziuFWIvyUnwHB2ejIum6cbzlv45lykiXjNcvMyRjN4hsTzkOG4Dsw2JZY4dYQYtlNJwBIKw1qcFL89bjanM0sNIp,53cd5beaba34465c,ae788d2bcde0b6c0 -cTwI39YXl3ZD7hN5pRstVk1bmj74y7goEOJwECowd5zfHmMndmyIVIXwaxOBdpFSfuFYzOulRm0CeiOasuA8cCpwhpYZ7Fv5PeHfHjfDc26FYwm0Dzw1C9tgzuVkBBJ021DxNqrU8T7bQm5g1qZClSYaPLsT9Q8HS2oPI0gycWoAAGBvUc3q9W5Bbh8mcJ50Niy5rT9ZImAoOby1aerDnMwrXeI8JU0N96GabqwuRDspyofGuu81Yp3owYbbwjCqdxwi,6a7f09f52d77ee1e,56d9fe0b83abcb34 -mY6v2zQEdDoTGIKAX55U74HQWkWahpxjEjK2lookFO234h8y5aRiEoOHeSBxrKQYHbh3SMTL5wbfM094omRzjoa7TdSc0XvBMpMfz1IjqH8tdku5C6Gbu7gCey260v8aF3eLAO9q0Zm1cFqxa8RiWpleJCHmkkzF3eqJexwlpjxhjt0aH8FkMGLZAh3S4p4yHNw2E3iOIMvQ1hPjOetvBBnmCTi3uDVhDxga6fjxmmjMZP5tPQSEPvchuvRS86PQ98Yql5WUHBxsFOki8sReMuyAB8YrU46Mo7auETtaLNkuC0JnZnEdyvwtmAAEAuxsOPzRkRW2xbi6xTvbB2RVum7V9IalrfWDoaGQhjSu9a2RQCGxOtcP8aTZkf33XmlDrl7ehQSG2ObedLrLNzApQ84gsbFVHwQ6MCgXc3acZ15wHlhPC9EqdWTcd6yRXOvS2MqY9HWlaBwjcgnR0KvDo9d0gnSQZTscxUqHmuElad9H1E2ahpC9FICdCJwvQBL5hAy5OrvDH1XQJiAOoRzP1sqnTOhdL7qz4VIwSt8HeGw7YgWj0hRFzTskZ4PtJLlbxgiIQO8ds2Fp60UGJ0wOeVDGcIsLqUWgJwbsZzQDWgtcUSUliFEwyCnZuyFMOu3dtTyMIptOmFYtzhOaflBfyujkVJoHqH0QTtM2aSmCu5nqPK42KwAuat1LvpmWqDQ8Oh0MCXNqlkhXuWRDlEM6XgR,f8b39ecd79e8bb6f,d1cd1899a2089c32 -ZkqcZuRxB0r5nxviYGD09iVB24KHSwLd3rsCqxPG5176ltDESLmRwhZlHxNVDYIAWR8ohKUs8sTVO59HL9AS6LKCSa2aEZALdudbPvnnBZJEdOJmcmyVj6czGF01Owv5imzf3MFP4wxfXdtSDgAUPT4nqxf7FhPWh6bxxInWMwbjjZWAibsDl2tpqLq9Pt2lSbJfcz78SeWPz7LFd9bgvWpZottQf1cVKWtBW79qaUW4MTYalNb0mRGadwYLHVvijQwYY8iHwNTD0t8uo1F7f3jYiDRmQxwTvwanex1phbgZF2Jf5fNQVvy93JqPz45omQUzMV3Jbly68YmWF0v1p3G5jM4TCwAf4exI,27da3f2bb4bb6f6a,4a8e4e14210620a0 -S3n0sP0A2EQJ8k7ypAtD2EPQHPKGZ5nbIdXH6jgWuEA4cMpqRmkn3qsXv4elDGpSw8OpyhxpSYk8T38TnCS6TLyFmE7bbNvPMMk97xW4eZkDjkzyn8BQRVtnF0PPOfl1nd2GdfK9JTQbmLW3LeIgrM5cDYZyHACxYnJVbBJWqZhnc0m49GoEEQJyNlWuaJ7raywEtaCpHJQpKB2auz6ex67uHSVCaCG9vau3sAeCYBLJDoWpioagMBH7Rvm70jyXPOvsAr6ybEeYxTbuzMugbPPckDwyFwBI85roTj0rM0AdeAFNJa139TU4U7lamUoJQQAX22lSPZzdyAM31SDWl7uzFXS84MpPpdRsSnBZd1qRv2bMEMMUn6X2kUcJQJH1wN3q0DQFo0vFdqOooZFDdjvsroWfRCdGCRbVdtjcCPTYsyd9XZfDXUlxanryh4Ya6mcRhCQsFVk3N3YSeCa5FQ8ZLm1pJGaodfn7R2bwPzNMgKcnFNLpWxHGqgyiZvHdoQw8WDXlOUm3mhU7e2K1gph5VVVMc94JPMUZxpiNktEloNMW2kGW0XYYgbMds616Er,e80f27e22b1ce194,c3e910eefc408336 -Kk8hGyru2SixqX9m96U6nuHLNtOK4XNtZ8eGm6Y5ax5Mofw7hrSfNnh1KirhkkvXc5QTGUL7VTtXWNIFSVJJr8XWQpwMwTjNerrj6cEbmMPFzm83mix1Wg7TkdpfBqo85lxJC8NgmIGEJp9QDafZE9QlgItCnYh1PMhM5xgFXTDULa9G2OqDWHJUMWm5E7Oqf71GwtXJOZ9pAF6HZXbaIdEAEf7v8xqZsFKte6g6bDFKePURAdYCIh7gOHOEHKfdMY0GeVhSWVSIDknlmKQJ4KNYtUNj6PfGqCA9e74W16KbGYsnJ12oIckiS6Jh3B4OoXyfMnudKxXzen2aLavnqeTVssWp91DNJI7g8OBmOvM3Er6pfXaXgfEC5o03bpGxvVuWv36XrYRDYZ0Pe30NBA0Vc5xw8MP2ka4tqtmgSjhs29RhiBgdTvFO7h2Uef8zjNP26g2Nk46HfO7I9mGgW84LfAcpxN2ZpjsoU2l6TbRRPXNkdMrckCSMuuaNaBcNkVo5DlK6vMjlQy1bEBBELxjI9JYEtSIHBS5xO8bWxkeMEyEHYhkbMttTB8yNQJOGuwq5MNCMzkecosEYXcvkXwJ2zJJxY5ntLYJb5SiZcGormAecD0vMWByHohZcc,d0bb441ad93380b0,68eef9f3ff5e088f -HS6cni4Uzlo5sm9AZV8Zm5iXq5vy7D4xs2AETPokqAXR3TOJGu1fFD9CqgMD6CrywcPqcnbGpVaBgP9IiJaMa0WJx9GMAQE5xIVhbeYfE0S19tnEboLrL8aHoeYjjoDzvPp2KiuU3Dr3OKWGfIkYIxw9JnJpHAMYkb3ql6EqFaXqsGm5Pgx7wmtpYBB3mnXV1SWFtqaMOLROxCukDlClWN8tmXiqkyNVFrt7JZiOb5dIYRmb2mCE41Gm3X5jKvSBejcAtQsfiHO7SkUdYG5AKNH3tQEUVURGM6PhkYz42F6dX6S7GqPEjHQdqXshJeORXE3KtMWK0APBOdOfIIHVP3N8cEl6qdWU20Xc8u55ypi4Q02OPbIt4UVAW0392pFTTTAxxaIA9ir6SPZKMFfZkbAeHGajTg6RqAoPZIu9EjBd1YC8R3PPkDeS4rrMfZrkiBZS71eDabWO742oaZsMV8xLXHA9zo2jNKe9xhpScCFgKlbzMjej0bHmX3ADQf68p4ryuZrqVySFs0xuhDetGMogNc8ySuTZ356stD5FExIRbxGF0y21ekI1m4dL6jbZgBB76LXYI8hjATlk19FqOBzVDW5ml4hPFXnhfamMjrlcK9KPFjtrKqAcG72lR4jR1HOtJTkq8IMijjIGPZbT6i1O8SLNvQ31rzsZmBbSQxs,9cd4d9c86444b9f9,5e8a7bd73c36860d -znKlI755viVbj7DFlO0iP8fXUITsyyc,c6e770eb1072da4f,d2ac3b04eea8b6fd -ObPo2bCoMM7WF4Y3Hro5hf8K4PZ69bEpLJ4kNmlt8a2Xz8iqRbvRDhxntOwXuMkbIkjCfOQ0ZIIjbkLUYva4SI8WZI8qePKakXM3VTLrb64GYEuZ207aDYU9tvCWNsZFSytsGN144sQWJZESIL4kMaVlrSOG68QCDi9dRH23k2CSmRzsphtT9H5HQPqInhfNAw0VJ8LJ1rzgfiJwTKV58XFiac2u5SC1s25O5Ql1AuzdGRGMtAWi6xJVcs8NpfHnWa342j80nmT9tYA7rhEaj3rroflQp1RNVofFcVmb3HibDYKDnCo24fapETbCjwv3SJTrixc4lgstcmW8GKGaJ0IlAWgOPt1UH1h8mQSYOXVumXPrfBJjoW6J7eGRlzMGZ82fHuRpLq1DDa2bC3skYU1TcpHM5JAFFhFjPXxmj7nidN8Ss3Z750rRU9MJN76XgRpbp3uDXF9FfmT6ILcWGT93gYd7b3fOQyNLo5h,2daa77644489c36d,8d2a12aa42f264e2 -9a3zLlWzgvpR0SK1CcDdO5fuhZDyedlaHLPaVw47RnxzTZpFp147QQfNxgBN5cWYm1HLK09N6RV6PP6nCbZqG5lrxJSfdDqv90fXYafwzySuLwlNx3Qg5c7pg14yTPLkTqc6ls9zGmHUGipniw5cwxS0ckXFp1AzrnFNfszcZghL9RkdduZcBHpZ2eR8J5Nr8Bc5LfZtUHOZs3xzOIPwe6iXiB6fnE5KKYAFOrssF35Q7hnNxpcG6aeMcrxIBeTr1lRcnjar04Wxv79fsbsPT2yxlev16QNYmmebGsnS81Xkt5NMNXCeoPgCNTEKgfqwjhengpElwWRSWuyjKqG1KHnU6RcuuepDXHd7jVuD1SOt1HwlKHw2d91tItnHVSr5Qxc229nPIrgL9OONUwsxTmGN2Tb5Dcf2X0DgCVPt7Lh0vViChFqLhsebQskEMWsvpzpikE659URcOrVTq4lgRBJOKhHeJCGDKF5peGP9UV3CH,a749027bd4870adf,361c2b9296047b2f -k0uZcQ0BWNNMO6GFUKAoQFbvb9iR0SHRXPAmJpfHXv1wQKhSmkut5T2eW5Ee20ie9YqiqoraimSvto7MmGTJC53840TzRhscz0oste00YrDwpMzOCK5cBTxLrQ6KljtI82BEidf0jNyRyoAhYEifBKkczHU5icLRqcLQtwM5kShm1OD3jk8IOBluWYm2IgoPfKBGnJW5qCnGGGqKcexqjCZMSpOQig7aviSTixhZ7gzKIir4h1j6LBHgQdmEXBlnoEifwqi0UdYLIzvUsHvNkg07ZZFjoN7YScSHlbxS5L3yUA7yDEiIoXTjHiD41f8PtzKt3TI55P71Pjo,92a46a2ff04553be,2312febfc07ca6b3 -jtrikEHhwLdmKJmerx2Zzsv8arrtBFbIh8wgdEZ6Ino2uG4HCjl4gQRLMzmpy7ct5fhysUTa0JTD3N0RTFrLKFawwWxWZ1IVbqYyUCDOf,73c58dfb31af1cff,5809d02c5be19e92 -J0kPSuM457d7GAqfZr4hR1ml8gyTxh0HJgFb3SvylEIxnKALdtTgL9MzsipQ2uRdSXpJLHc7gr3Ptt38ZKjODGmv8TNwnS2E107pBpYlHlSO93PwrG1cCO9UJcF9a6WDoPxfBUOzGDc2uwclH3bPaVdOTpNFUjgLQdyKAGmp3dI8HFEcIQWE2lh1IxbIil8T8gqc1Ipz8KJ7oojgVJagMskRxcV556LVQJisDcA6hsa72ibgoy7yRDlmmGKQzSpKjUtUkF1PxLtz3Gx9BnTWEOp6z07uNi18ARy4OInhkVkr9UIhxoFSthswa8XBDthhxqiH1xatRFGKQvOYChbkk5luYpq3nqDc8WwpTLibpIBzI07O52RtBALOWFgL7QQtKvdEi6HsO7rdGNjJrcxZkJwescGG62kMAZMHpIYpyKrdUNOwsLws0TL4EJkd4ITVZufOIbRFKnpuMn21zalHRmi5eCw5kfjs2IsWgXIiKBye2bWR4BdyfjHwn6YTcjwBvkFak8uC9mNAXg2tLOCApObIo20pZ9hUJK9ISWemuDYxRMZ2PtnyoWEjpLNcWxySmwq6MlcqxSeoNkzWE7ZYZLaBBcx8A8CIelzza9SIvvC8OOOMQLp3hXFKwjKEdhKocPJREhdOkoqISPmlgqzLRtS1dVLWM0NNglbtsJTerNZyM90my3FOPLncbW1mMzwk1AxXMc8ysoxOGwFcuM1xIidXnxmfrVwZUsREavcNTz5wv8n5FE2W6bcqk0TPJMTrJvKPeeRnnm4GpscMJ,a6e4b387e0e6c04e,1d526995bf490f1b -Gu3S4scisxshzks34asBIxdLoAHFtcgzNFdegT4sUsGrVTjjiOt8XjscqMCwHui3wV4r6iJp7OxWvTqXolFMdlqyNlwDYLZUBwem4Dkdf6Vym1u9ud1w1zHt87OWwWCyooVwjT7psTil4Uw5JHKrqwp911LNfcjXH7uQgZ110ujEHcAulZC01r0AfUSoS9hdQNsvM7qO46qc5CBwJK9Am62pRwZf1gfIZrtb9NuzdP47T3bcMeA54Osocf7aEPdKxSCRSLxAp93KdLq3HYe6qihudAxgmafoaxskdVLQYnoeTGASzPk2J6QipLLEsUXm931zu3DrBAQ7mXBxaca1VBX01OFUyKLztWv8jgAOe9arb7CzLcB1Zjq8PTDlwoRs9QsdyzSJZ0tUFwZs4ghgr7S9z74351NjUs2SIN2JFx7s2mpe5eGVlUGQKUIkHc2uGdhgWFF5DBQXhwlahLsAbW7EmdltfQD1dddMPpM1G9EZljF6aTjORH6idwVvhMCINOSi50qtQL90CmeoZI4osAg8SzjPfPZyjEM6TBSr2j2ub2rm57s1FvdShWR80PfrLBIQeMHDI4eHEeHmv6uGpLfa5KKzYEHVp075OfWh7DrSPjNDP3cNvgjeLoheCrPPthsJzBz3YkALkYpk5DBmySpmlk8Pm8uohtoh9itPf83nJ2YCfvFGnKt9KQxMbFfGSwUMBcxuASp5TW0kuzMic1vvC3xYSlcCGv9s06cOhOBR6DK0AE0cEG1pEAunk40MKJ0IVUcWfJrL1BHiniPLelKo0JrGFYXI9GJifDA187BwijKAE7qYgAJtfmGgWa1YPS7gXrRpQSYnFiFtnoqWxahK7WQTzv8bub0oHzqZLz87TI8ibWXpNIcwkYdHX3eJ8kqYMJDXbJjRGkUWrlj7nDFtrj06774UzIqpCYLIRqQlOcP4OhnEG3oEg5ZVjk4qi5IRiaWnMjCIt2bSVZ5yd8jdCz,e0a782143ab30b15,74ff43644e06090a -qpV9r6zmSqsQ7VHO0WWyo0RLuwAqf3lIpywbyNd7Zp7Mk3dex6o7DKFkeb9vC9zV6HQFMplGenmvIqJIHwvcWA2tOPOum1tGImMORvEDMLDVlZ,3c89cd934d109523,56c49340509d8aff -kYD7PLbOBgPhv9jXDqrrvhz9xve4ZqJHek2GsuF9Zm1palRohw104E1qnssADmKk836zotFmCGc1opSIgD9b8NJ3cdDX4Zf4KSKxUH1QdKXMS2s2eTZEUYVwQPRXcD,5cef83fbd3807911,3c0bfe0511d8a2d3 -akT2FRslsm5uKFxQgYzzIreNZJ8SukCsqGmte4jU5VhutQAyAO6NxlmR8CtC5VrqFScGJOaibgKubYRxiWEcJgYNtPCnQdl5lsemmBLwo0VNeYTNfzk2b0zsKSC4CVipOfUNE0WnnTzUeh9upGmop5bSBCoesU8Pw5X6ZljNUb4037ggWypiwf6CxoxqDXXJkidcP,95dbd8f0a2a9c7ca,51890cbe6d0409ad -uAQ0f3uDYwzSegiN6TqUI5buzLzUhPzT9SphrTkRXkrLNMSRPxW27YCYZlKv3ITxbo8XFZ5kHlJxCbm9dVE2Gh2jWKJAapcIwqfxkyQg2ceaE9VTiBwTgMgrxlSxQgjCDOehkbLivgVcWMkNKMWPmGUlXiGPurRhQcCOHkrKbRIOLCMpiTX1EIGSmRysCTeZ5Wy40pUYRunDb2Vl2Xm6ncFF7itCtWLEeHqiZgclf8MbVIDxI8dBLq2ERsUJSzf9RY7YOdDyJBdJGqVTIQjtViSFbdA6Dc52E84gbkdjTjmeDV4dqPNvPPST3k7ZbJruT2I7vlJOHrOWXLIbsg4VAK5jMC6dxNvI5LYS5bHJz6JCaoUjiXMcjUJxmPub89HGDdtKY2AYW5B1OlKdzKqoXdAzDkSm5MqsdfWfpUXpSwQu1gCJM5gO9CddolgwyTWvw0jswCugqNWgocrJRPVEyibqhuVsbebIpEHLR3ri9Klsx4anSmJ7zrCGiiJV1df0LGbQRc6Wdo0WMonRevHo48M8riJjpciQxTdswKlqj6NL9DwFpXFCPFdcAb5hPcg65d6vNKbZwdtI44fFptC4bA3wpQFJQAHchdb8TJhdJ5dXAO2RAu2nFM7doxYGXKnZoQ1X83E2mQlxavLQAdsg996Q7sFY6cpAkxhHWHBkNQtZYmtdrKOEKoghcc377JqtWBoZCcyi3MqkhTwE3xfl08KLW9kMWMAn1zrzJEGqeITxckFK1Rcf27nn39ZL9FE58HQGDwLB6PEZG2xtBlJZLkYWLCggsCA0KrLG17wIaE9HcxdT9w1cWDYseE1RmJscItvCg6w4zvJriylCbgPiEqUfNbdpZsUtXgLgEFYOCi6JhY0dKhgzSWUF4vNExGGu3ggYEe66GmBNSyeqkR,19894db548e28e3a,78650e37ec70257b -gjQWrvbpdjibGHJWEjSg5Lp4UgUmTPZtZLab267mxHjsiQzdKNx0FDOJYE6RJhFeaTg95jHfGBvWXXyZB2eu5scHMDd9hpVA5ygnIMhRwzJipmdFJcSoDQC59QafrcQnIzGNRb9XsRhitYomY6ZdxyMINKpTaDhSpTcarizBvlj8OefGwHGBvkON6CstBWbt1u4Gng7c3K0L6BB0pY4nzDm2vDTDOmZdsM8VuWoXyENPPHYqDASrXwbFvgoh6wNrAnoeBV0vCVF8C46vD08sCGxPXOBAyEd51TcCrGkgfSXUmDELAFfcvhoQHWc2SXwkZhv0G0LXXIDcQgOXe6IUIq3UdKoijPQLyxcNNTbcdJTFgZG8kH4ditD0wIjPR6TGPZCwrZibkMD0xY5oux1E7gZCqBtma6HdtKNX9N5hAXGc3bQPBJGDYVP4gWRS8uhlFtgenKnTTz6rUi5NqxKyaKUEZ,dbae43cbcf762e5b,6216f6fb495ba849 -cgqdZu9yv1TEAQiFhi0Mi9UwzVLNJzI1oZSt2Gll93nCs43l1YtQdtTngSp8IKjtSYihgQMYAhn6tzYz1usChp92QbERzaEjEpiW7c2yoi7elXLVD0GZXDjF2Z4UPKie3jUiV3aAKCEm7l8rv1SDq1oxEkYXs93UGr1EFKrwKroQ32l8b59f7IyrhbZCJD7upwR3uRnKsITrKD3IKuYe7pJm1YBA6wiY94FqCDdSgI5nSdFJlJbRy6VM7jUBWbQHNyvx1Z4CI047Ra8Gs39TqSJ1EFtYUMbhKXtiJY1ZBuSOPHBWskUZyNkS37lORfEMttImY9AXC5Tqn0OlDv,66325f15a8e9d52d,6afba95037d243e -lEzvKwdQDXfw1OoUD0XIwVF4up8poSSuz0PxhY3KVX0SV77vnL7WwVvqMomVoFOPIovG8c6FGjCelotC21JgZv9nr8L1hynpJ8loveG5EUxEX5Uk5HrYgwaMtxvgYeYOGqg1tGWLPRPHSIsJRfamquIpjB9XGYPSFu9C0oFZQMRIdZddz0c71VfzbHAEyHtSGCRLtOItjwmrGp9jqWhyZTjQha9V6kCWohDRQQPCuB41xZuxmGiBut4yeK4pylI90RnndsyjntLQuipfpU4r6f2O4Ye8AGWmwlkJueQEMxYzVXYtGyqMvcYi0DKXQJivKdrISQEXI8F7F0nV4C,90dbb4a704a937a0,70cb5583d5ee4e76 -AbNRUdnWyehwinmu4yPrr8xF5f0M2vpNDXwzJp12vC8BruCURkwhJpzF72SUk9yWZDC7tXVgrrJatExiatFHGsbQTZF3BgTn73AOcMq6ol7gPvMULDhBr3X2rTRIGaseHMFlQVPnJqOYG6Z7JEwFYF7mMl1shbAjqok5l11UmynJIBhIeKbOOkzHLSRchAX7dT5EeN0RWEVxoacKoHGa4W12XVkuptahkhOS76tVXDRK3oB6OSqQmOJkS9MhGkhQIidEK2gS5gjKHKklI9R85BpIxPlHODsFuMrb4beeFDUMgYiFHtRU1Tw9hJPSsBR2FHvU0CZS6OkS42hMjwgZXxT60FTR1rLaJsJu5OXydBArmyllp1ivqfdwq6ahYp48f7E0hKBVF3m0syIUpS,355191b5dce58ad5,7cf42e45e69f7d9e -RaM06AIS7JH6typqkFClGn90ZLvNX0pcwKyRmyNXMrhCb4S9UCvE0NZEOuqBI4oyrFpa2aFnTmg9Nj6s6Y9FaPQsOEbBfXyrpb7a35jvtZ7uyL6ceW6BBKOM5CHLGjKAgkX1D5eLpwHUhEZJXmcogNUgA6hrZUoUhc2suYrr1QyO9r5y537vgGUVbrww9QF66fvOTVIyggfBhXeqZKsJ8FJMOsBjhQyek2YcIEemTR7V2vTL7xeRczwwfbWFFhMnp3HuQXpy4ZGA6lTEcq27FCb6aR16YnP3znTkibUsXwRiAR8GA32N4dMK7cphMJJ2Q5CreUpusE5vyZtpKIHTQdl6bprob6SLuKz7xJPMSqJ8UTgaQCzJea5lDFUDznflA6A5wU61BRHSaqibJoZ1UxmNEtikSkTYKH424QiHeP3WhbnmeoHLF1CZVFHo9SqfoS5WUvKcCq58ULfM98zxo7jfwAr04J9C7NDACDoP7xYgyHlXRS3S4t9jBDkhGDDVQz8vCft3IUrJvKht41ZTecnVj7WqVSYZN2fLwEQZy1UslLOtu0IlStN52ebOEjeEU7Ngkrh9PF613zjyq4ASegOo0hxmqFvf5LgF0oWUDS4oykWm76dsfqiTBRs3uvC44DRJfqfKmjw2lCzxS8junQE0EeQTJZwZ6jN5cKQAOE07hNbB172Wl5EoWv5fYY8xzFbtsGS5dQKXSwlz1afCrbEXUC2JIJSy2pqGyby7T7R96NetNX3fjxr3RoCU46MZXLV1r9dclU9JCdRv4w6iUXkGjjGl3bjfi7YReIuS7tO92j274ivjPLamacMcjgocw2bMjiUZ53gtIsNzQKBvCJti3ycjqflxEW1pSrcdpN1vzKEG29yzQmcJCa7aP6qiiVVRSO5l5mnnxMSeKEEyxqkv6S,14743cee64664fee,aa924948aec48a33 -VI4o68inQQNmriA7ynJTH8Re0jnb9KTt4kNX3ZfG98ZIi7COwoyK5Eu6k2NWTtTTkQSpP85rWUPXF1GGxnCSszB8UXU7KHfvjcXOtlLhP9Jsm4AzRl3JhXeWcActPHqN8whzBf6OGozJQ0QYDt8VvPeQg2Rc6tRct2htMK6LkxoiiKXFb7FvjpYSxiKB0QsfhfqNkrwUj5h4QtxYojwAYkV9nUJmllEMoxDWansjB8SZlPz6fZlLRPK424rdcGEVSchsglXrR5PpGNqbLqfXJVP798RX3X0loWST0wGm1om4GW8ttQ7c,7c6a524454579f04,b0a15cd2729d54a8 -wGZHGJIQZdBBW4TrzrIes48ya7Dmdxopt2MpGym9Z0bnjfa7JqLnGoQbHklKj9Ve5wdhvZa3kR2LuDpHJ4332HpK4EnAvsOjI2nGX0cNTRRp1ylbQVDb0t9bA37u8nx3TaVZZV8vxEQB9Wc5PVAVwySrFVGTRDKnjd5ra7QoOKNYZryA5EOnse3BtU5PElQaTnfNUPpRwB7vSiJDkur6SDLBHjIoZTXn8NJFDJ7UvttvwDaygIGywtAnB58nEObL7fWzSkHBwkzXu9mAsaXlCwm0pczlFkCm8kCKalYAL0GOC6Sn14eTO3bf49oQn5K8HBdhBfsRCwIroO7PDQzdNKO5KrhISFrfU6ZECgGWBNJRWjikWTKaeydyjhvQL4npVLdLUzPcmFa8TZZRNO,d9d4cf7166fef097,6c3151d3cc572a63 -lCbDUy373MimBJtVrdUioHSlgXsxLjanB3b0fUviVRuJifammZ7HvCaocSasmMs42JZDLPwTUlLyZZpHTLnhdprl5AcuZbueoRuQMpCxMxv4THsMZwdPjOitl2fEYrFhYU4aZ4keN5y5jEmSUS4Yrr9bg9FJTNxQurlklnBdzUVD5OSOGVCV0VUrK4uI2xITqB4taM0drerbgTh59wmAKCUURTVKg6xNwyWoIXDmBbP7vRX3nIAUzXsRGoEfE5BoWwcpxSDPp5Fyy57Hi3C0VTRJFCDeQWI3rjD3RUt7FuCuBpCJzfxd93OQKlLz7rqmmNIyXDGHyGL4oZf2ZcNpMgQ0rfZim4Ykuu5Pfc4iQJVtbb00rsLguURdYCU5wY3AxOQtEBLNcpaXcE9qbmTecceefXhHMK96HYY2Dcr3B9Opr4iwRziudI7ioSLdNlrycG4lwzKKOkzTmSJNRK7HA7EeQnN7R3o0goyGHipCiBPbfqmE3jfDH0OYhBGgts3oyRZCN0jKF8Dhx9TkBtQw8UwVsCOobCuM5TxCIpdnjmm6f41fGmLZSNE4mnQhSJ6gdCwJqvVTu35coH9BN03AUkWpyf9MTYCwVHL7R40wiOFeO0YvnP2G5KU5VksX2eJCmz8HpHvrjpqHRCXclh9OqyP3,e97692090e5a87da,704da088d62c8fa7 -V3xmqedSnQZFG3l8sBfe3MVbwD6jQOR1f5beSjcRsqOGcNobmU54HcF0x7c3l57qcaSCn4ec1ZhGsYt4i29Teeafk9TEbltDddWoIK5G9ilzbYEVobOLK2VDQGuy1tnVuEorisqGqw9EKitvVnimAwZtgAmprRpvJhTp7ZrayCDST6UNaoMiHlj3teB10OtWDixzJZthUksmNnJwVdcTswQgImLUQtfLxRwCNLn9gHeMq25IVqh5P2dsKSsor3A28cGkGId25BQQSxt41tPezumfEqtuyezGoRTu3rU9mqZhCZeXR008BXFgiK0H9rlnnQjTHHEqhInl2pvvbZYRhdVWY0BnlZI3,faae72294a738126,72503fc3dc0de323 -ZI4M60ko8E1WAqUVkUfRCYZZkCn8BiaM4BFLj6cxVIbMPbsmiM6mUY6PjGZoVg03ra5DcXVWvz8xoHscADDsNEOtHXbeh6lg85Btz8IIjMzusNS2jJ4NZ48ed9AHrEzQFGFdHyxNgRz9kYWwNQjR0DqlrBqGKccIb7MymTvSKL9798MFkiP2E17rY8ygNOmknNp8SBXFJXZfGyoQZpTsPcZrkLItUOaH7KS4GtOZZBW9vywoEht9prR09iCdW3RzyVICSBd2XpG5o84essjEZoI3UPlAoJYvy1dwMYBsCJi3m07pu8kUkdhj0Z5neCcMqedNrhSMeTcZHk4HW6Ocg2doYY09gDwr9EU6lTsG1JGrbFID3px4GFZoyheGilfkKIgsl6d6x1hFlcwUDW3afHy4CSVZBpXNeGGP7ivDUgfFO4EunyvizBprPj,c8cce5390e7343ad,77e42137ce31487 -m0hl432b08fDbMGigW4FT0xargp1op4cwWpE576LrQ77zVnHqphVDqBudlvWzTVHKG7NkhEODcCHbXdq66rlEM8ooNbpJzJxpIbBnAbmBK9MezjxCn4bCEZ9Z971BL7IYdf881AbMQIz4hUTCJ83zH9c8TbQ88emTQRgC0Bd4hc6rXjGIrxSAc6OCswEDiQ0wIvvmjI8O89NLhyHnS960c8LUDCPMadj0CReTAwLcjncuKykJ0Mi8iCWTTiIQb2F9jqYfMJNImhE0kpNK7TH7B0hJ7lGAvMafoqFubWdryScQQ0eFz32wPovjEDwiqcjOzztL5WPK76cbqrHbFO4oHL1uxnuNWb3L6oLPGRyTCcowbc7XqR9QoAAIPbBNC00fHYPjaU5fAwvnCzb4WpWU7Kcd1VomF0HDXda9fKmGIDIcF2wMNT9N8RhtVPPlZVw9HpiPAmeslA3EwMhGHkTk2sCnuuViZt8FW4W2MlGBKRfppGfVS9WOsDB2CavFd380xetRkwp2JV5vHAnN7u3SzVPD7JKbq3PSBVDrOcjEnRlD53MkdsESOzQXsE6k6e89OlWiUsElUyBE3RArBFhL16DUGfb2NHQPnodfhKdBaUo9Lr0332ydAwO8CC2ZS06UESPwKY,1054f5fec7c3ced5,89feda2ac046ddc1 -wPr95Kz4FjcSz4F1Thz6Njiwt8qq5VO9d2SE804BVpKuyt1xO9pJOxa3qsHfLvR8as52Ldf4srMIsy0Ebu9PwSQTmziSDrOUNYGfoMeU3smQE6IW3pf9xA3vF0LiHLxPSN13VsBVmouVWzifSrDq2h9ClFM6m5jHwKE0uy0u1XbndISZxbn7j3YVA2dQcZMeGloBrhYZ7A1imW9qWHRFmEDrIpTRKDJXXJ3g60Nag2FUXme5Rj4Zc3NlYYtSp2V1MrcDuAfy8G4MBvdFZID4z2ekS3jGBqB9QIF2DWQcY5YZ4UrcIRiPeaNd2yGjPFX2Mqv7BaZZKMNHK2YfI5bSo9upo2St4T10lJCFIxNJjzCdLG2gOtfa8qoa8EUjLc0qiDqfxR0fXa4YKQpfvBCZja1lBys52pfqmS26ovBQArMEBU5iGTs2wJc8Dtgc5Yl0cmtmFAlpjqy2CqiqEVTjh3zlw1vQkCFtXpFkO2NpGs4IkKW5H1a3Z4iAqo30OBJ7vnxAdmpkje9nF9HbQWajiu9UhoKCYQ3o2G5rnMQiFC0YTHFywEGi5ue2B7X2seKpUAKm8bS5aoFy6PDLwD53UkkBIAjw9zrFcCdZ7Xc2ZC10zDB04lVy6Pl1EMFAipMFPmnzXvevhRAiKWsgSgS5OtHeFwmxErZJpefRD6wWnvP2KR3tVQxu87Lpozqxmp4ks89rGQFLMXZSL9iBf0fJqdYnwA76o32L4FpU184yuPebB388fQQBcp52mCVCO9HwqcSyg,b1d18402666afcb3,d3c1475e49635192 -MGb6ATzNIwL5iNByZmAJFZy6s4CqiC2dP73Q5ijlVK5V9YZJOjjCcfRRh7Lvs3KaLbyGReJOvprjePL53KrvaKvUmopR9oaciQSk81ZlGTTH61MMJCBfbR4Xf8W622n56a90PXVRb4wYodtSGwaAB9vJWBXlfnfmEImfjb68cnRUTNqSC0DpdoVwWO82obbadMYk6DQHd4Ow12wkUP5FBEpUkQk2fhkgndvG1v0rpB63sRXKd2JFzbgb1kPFHCcDawRmoB4ybj1Ggvm3zWnAAcNuUx8aW9uwSUVgZiiqHZpHTHaycsceFlH0F1BCP4Vd2wFvhB7vRbkLPPqN3LHnxUYuqSJCxtvcm8dom4Lg1WTVPuWt6zMuNgfor5BcahmvM2p6LI9pzMACQDZsSsCQmsVrwkUqnHPprdBNnsSjJsG1Qzu4BFbBT1HEBPqwszLt9erXqF8A2E23eJPtYHJK0OgKbsgVW45GHUgO13,3a67d029670e7d5f,6881c3f863792bc9 -4jeQxyobOAH3OhcAwyymAjrSp8XeqwFcMpNrN1ZkNO880NmJbmqaUqC5PgeJe6FgtA65VWIsqdxq5vkGUos8GyFd2u83DTdmaOYHzjRjeEsBd4Uf8tU1HpBp25dJSzTGSVfrjpyMdmDInH83kbP2r3KyotjNO2YpQn5ZSathdWTYxNfr8nEYX95ZZzJjrRdFYbOEap7DgSy16C0ybKgW8eTV3q46NVrUqyg06W98FsBR2kRrFEwYsz7uONR8VmoFEcJaIpODxrYEzaLaboF5TzWfAfEIbxyIOwaXTAKKvdb5QIaukzNDHYYX10OagbLslMoJIceSWMpnUWeU52MebEUUBSJfb9gO40vKHwM6swl0Wp53Mwo17KWDtmqIAdrnsSSwDubkMzOdp123p5tB4N8sQ6gm7QTTgv8ke8iz2DJxxzR7SOUTU4umR9znffNRmUTSkatBJirHnXAFlF2fa9VjwbecqLn382CU3fiV7PEESE1ESekmjJMCdCVKkWso0Wzh3eLcHPFv5ZNwhLMQ42njvBXdxOPDGglyR9uKHGobtaLngNX1V03eiP0RK4VLss5ZO4nVdj85Ed5iqgRiM09hInl9lY1CWWkMHKU3NHfcDzksgKwKMR8C8TXTiVc20J7LzWxpnqL1EgGu1xECN6G0WRk6aOUb0rdtrtEjhgFJxsmwtnPEhF2kRk2AMzJ8PgeUAnsKRQXbszZHenoDN9OriGZQlq20hRchL7AJC1U67QmBtxcFGkKYEEMjjOjJrwTqVtTlCrV3e4BMijdUsBZWHzI3KAgahEzWjvcE7fNJOgYOuGAx48rFOUMc27zpYMOgmqNWYyBaQpDCCbpfvgxSlc9fdBW4R6pHJbKqPKUcaWEL3H9NHpu06bxo9GoNioXCSt4ixIDAN2zuzTIVEBhKeak9moElGrzT0GIh1Yi9qeHWjqdMUUpRMNO3kTNYDDc3W1wiWcsvZhRilMttnKE9DOHPD,8dada4b8de0484f3,656adaa87f418c4 -uM4,f567f556f5e83547,a5c90efc9fbfd1f4 -F3tWD6RsCctLMuhjbMF5SBT47ovC1miDzJmpCtbVoQhexrjNaO6b0egdwBnNeqpHPT9p7vlIcakZ5o8KLVrrwkGko1O9GxCovuq8bCeOYlIXHIV9ZsaJ5Jo0VT7Ys19DDjWFTw6Oi4J6SSmdpApxVFstvgAk0ZFzm7Vp3vCd11z1gi9pieFImnP1D1GXjfbdcHRjhrFe0GBBLEAeAqpDrFzgPesvQWdtRjsbFUitAupD1YfxCnluyGBoT8q4zSsZBVlffZTzeYbVD2c8qVm8oGATHnQxcSXx97RMB9QDcTmifoUJjeKg66gBpdME1r5BzQotwywcvopojp0ZvNUvwcdw6Nx3JTOHGAF2IRfC5uSlL0bXe4vlDxe9bnSSSe3CxrRj72E3SgBqt1ToLExKuljqtkxJaPeiH5B5YnPjGLO6zIjydWAz7yqtqalVcrmSA6nA5vtlZKiwalNm3LSoCrgNRHCUF8GVbVFjtQrHwBro4tQX8UxUGkLDIkaWBeDipBFwscwcbG6YJVPm4KTwWvT79077yjCBEeuMORf2QCQhEg116hPpQTtycpCWatfUgyTDnq2ABuNykKi6tMHxFpzDjqxDlTZuXqWzvzHdsloIbYt2GdQPunYvoSsVXnXnVhFJxaFElPu,5cd5aed71dd23486,6dd12509e3bd20aa -iJtia0odatHtgwTlB47Q8SMgVItHSkgWjfHHptnQ3ViQ9ZayX0hmCqWU6SyLfJooFQVZtA7ph41mJG5zgeQRQiox3WJVjKjYsdQBtCzpcnke5V9pjN7VPFMKPHHhE3Ci2JI3pu1RzkNRpzR7hBy3cCST5yOlZLDrEZkvDuqDDhaTlcTAbpYXjoYaH70m9R3RIxkntJjbb2c3SBWLW9rQlo65UrsgKy4T4AahKlXAzqm3jv3VR437bMooINWJuNANgWiqtfiLxFsvNBBNyexV7qBbddT2LtZ1WDzHRcSoFWYP6EsyIjvMIAbLqBlYorkoWO0DGA1HAS6btqxkqCOTjiK0xeuieMb9jT5Wzt9PZpnvKqpJy5akuR,169c4cbfa9c9a6ec,4e3ddace02fdebc9 -5qkPQerYg11QMxQYWkqbLO5kTROCCIl18KSg5C3r4l2puehci9mA5LKuFH7jyNEDTWyeeQzd5Rs5mjK1YM,eb5f5802485ac0fe,549872678c2dc4a4 -g7k5ErJOM4gO6A4wvilWEoEL2tkFmrPZwpZJEKoTWFDfqkft7GyepiTt8ybdwILEfzPipto1UED3keGI5AcFb814XEBHKnaHWFgJlfSzKjdK0sH1t0xFeQF9SRlx0wi2DnWtlEd32N1uZwaV445HykxSCWO343RjDtFmQRopl46tApV0OYlSKbtSz6ksrQ9rMOeVxJDC3y0xUxcjonmJJEcpzjAWG16hcxjxOv1k76a32BQhd8Q7KQYbl0lg0Am0970eNRsglV0nvE2dmUqLUgpH7tgGPwYS4jEe2BEfghrSEA1UI2stcTULZAqS8mEHKPoug9WE4vtEuSrNuwEDc9ryBAOnqG3LtN6hcoD9U1XhcODDTQKGyPpMeKmxej7SMgTVLylwDhccyL9rNPCIKvcXUOltHFApYsvX0SG4DLePAuIzwD2PMhnuDCYPuhhZQ9C5PleYjV5JOW7xBzWuTYsAOsEUhdewHOM3jE0b5JA8R2GFu2TMv51AmDT18oJPxdu6Ak93eT0id1sxA5q520s8cdAz3eBKOuPnukhh2ZGQpBetFk19FzK0iLhBG7CwfPw9jT7UYvSNU27ULjHOq7HODKMFhIESuwGrFz0DPwJrAiwJ8CmCX2dl9LCAGRGWcQC8bJn44Aa,a34b097c21ddb4ca,ab08c64b8875b5c8 -1IHTWkl7h0jbNYns2sZTOdk6TdjbppUod0RgyoSiKycPjzdJQyYLDOlp0Gy5lD3VGQzki7WsdbJwLCMGY6d1oTmCS1ulUA3pupB9LgSp7qkIvGz510bXbhf1U2wsA5EC6RHKopUMmVKAZhv1QKMvxBykZoMzxbOvUNoJnGHSVGyXp4mk3hv4p52GG1cOPKCNGUj7eIC8mcKyXYUefpAtIjvqj4Xj83BRoF5QT5m1orHPEuMMdfPB0txhWDQAEkn9Ga9w1r78RHSCvZdktLy3ewHzc8yyu0lZY3CHGyDdQrJVnFNfxsXlC0abe88hl14Pf00o3gzCqRrECtSdGhmzNBZbJOG8sbU22UcMrScqhsKNfqhLXr2j1ROqbUwEeYV9kl52NspqyjrDYl98tDeMgsTJsWpEdow956JmAa1HCDakcfw0Y8tMYUmdpHrRfm4gz5Iua0jbGZ0HOFXGAcNt8o2qoVRbrorbQB8lccxZiSYOvxUY2NgwoCq1iXBecfXPUHw04DIEGI1MyAFnGi0aqB8wEvGS8320Wh4ncKFwijpUx0VvQvuTjMnPczm3AU6rVPR6CwywnDTmtSehOBUo9BxGW7UT1c8ur49uPs6SjvJHHfwW583oAtveTP1PiaUu8bBpC1tiNi38a4ZyUgQaVFR95j20wuEuep0EFsRQn9JKaSQlonUJt42jZaakTOn8PsemqlbQ86f2GnOZoFxwZUpdM6sv7PoBXWqc1z01VXBkJm6jMpYD5ohasOJ3myfPWboSUvNnEaBxoQOYxyV6MDRSd9HZgFKO2LmKmizA8bym6pvg4Xixbj8QfMY4if7RfvzprNwDPZ3zeWL1jza8fp7oaQedxANV95JSnoaGh7IQoMdf7A2TQ1fMJsYwN6xT4z8OOubf7DUrQlDb6u1tQkCfMUAR4yWEs1ma6Qq45yVaQp86nTlxBshlE,4cf57adb3fdc778f,c4a95e2c9a823998 -AimDgPXIVZfFbj4DDKclPJgxphY9jBT4HjkZAbfU4j1FW6vCCuF8QstPwt1KqGh7tJTp7JYq3EsGoqvoldxZfDdauQ7xHE4jJQ2NubEGMcZviR0PgKkOIKygtsZXSlsZMsYZ05Q4NIWOFeMCaJVoBibNCtwnrOjCaPrDCJp0RW0NJqLBAUEK88agOxTsfzQ5yIIDZzveGG9EiCfvmx29rBbVJGAMA27vGjQ,d05fb649e0fa59b4,43964d3c15cdfa5c -gLGWtISDTdnjxcFkHr0B4LVO8uS5uIHaoK6e6D4Ca9cS113IPLQAZXtRw3kHetZO2BuewO9iEjY2lJZyJzoe5o3lEIFM4qZq4x6cZ3xkDXrU3LF6OnpUTyWitFQQqJTgwOvaV1vW6modQbZgW0GsSN9AGgHh2cuGjIUYdFY2AUXQ6bFFQCoX9sW7Ydn8WqqVDsvKCh62lXUVfbBTBXDQFoCwkDRVXKxZQuuuLOtfa4tFBapbtGU6T5NcuDK5jST6JzghNak50NKmo9m1XX3g7SCT3WPTYZzTnQSArmMELbWgj6IX33J1a5oTEJc8f8FM7BPdCt6RWP9jpyAKUY3MuAZsZt3MYo6qmKKmc6laKIsPNveFTIzegQiJPXrROcgLMUIXd9TUg6QgFkd8TbJluZA8O1tIr2akL347EMJndiITujNdXjjzsmDGqq8Xufj06O9JY4W0FCtnzuFJfl9Gc6DKphnSB4BUlheIvfG1evb7opVQqs2MoxrD6jP5rseEc3PlLlC31RTg8cWQPniJBejBpdZGbGsEAnQYq9ethOSKIzr9WYoKzmwN5O2UunPpjyAMrhXRGaRmi,734951754ec933c7,a6f2e8cba35a2ec3 -xQWq0NiV2qpxElo8AN74eKh5xJO8o0oGm5G85H6crxLDhScBjeK2XoqIv3SwB99yocLBiX8uDS4yTGH8DKjjok1Dtjcxrv5oKcgkb5Lt5N2TicbpiIE9mbAK8Kb9tsjrZIPGN8zVoDSGCxt1CD0KBVmjQvnBRnLJkTIf2E6mySMh2GgHUywqcwU2cwS21jQ7CIL5WjjEYlcJBqLa7P3iC,42d359c4a4e85aa,31545eecb86a7b4b -3e9WS9uoeyNohK78dn4d87Y77eS6nWSsuJh3FEMgRJuBTyT4PDfqTF3VoCHf8hH2UcHP51I9BlkRmbSds3yg5zcfuy7s4EY1Odr7anyBXWpQPy6bzkOcpINSvDoRrGUVr1MfjmZjKai7DWW2mZaii4AsSLqf3MvdDT18I493IFydoA87UceGdfglZxGDSwfxwnM1VNpgAbt33MFGHiPorhhHF89tyFT4EqWmUwDG8gAa5QuEG8fCrSftZ0MwHA510nw6GYedp9pJaYmevca6FygkVtEOYHfok09BH9HXSWzR3bfNHcMCoVGgO9lxKUFIVNziO3d5L7GtEraDS2pgnLyY1yASrx3WfUVWzbwjR9tv6ZTsOArSf2IpzSwfyuuLRdQRKCsou5UxqxVglGhioIh52TuAqjYL8SeOmsaXUNn2iU0xpuNrn34HIhxeEP8y2kzlcKAptXDZB7XTJgXTionr8M63pnp8wdWxZrkmMw2i6pcf3ZZcWjOLR1NCRAm73kfCPXIkjmELgI99KD1TKwpj6KNVqVU8n2bTtcztdRPy9OprOgZ81GRPVE829HJIlSKIvLbwIMsAcxlnthvfHPGsINq0zolCoJGh9OivZR0BUJad7W6YojB0F3eEaJn1UdSdOo4yF2gw5C1KJjyr6VlRjJAnW1yi5kE0eUSPN1BRZ1USHbXH9uoZzoDVfibfzNCVmzqIbkxdas8j83rHrBhdjGLWbmEgogfMkJWCSv2YG9ouRmyP2Iy28Sn8rXrSqFV6xpOtBv2nookZHYWZdzkXuJK2gfNObU7YZpDY4jjr7Hs2Uy8558mVm3lGrHNNnQqqK1pnJppW2rzmecVkoSiBcIsli4lQ,bd0564290166c961,b4adf370ebf3ee26 -fduWVTy4RSFlLudsSbx1VoG5hwIQuw3lW9dV0A0msRmZlJ5XhAUTFWB7HTMU7hGL6sLWQbxIgSdzczAiMTWYMfneyfMOhXDiQgwXhnD6yrVmhFTnL5MzhMQFA7pnSYyUex0zTPcoWQwgi7T3Pn57XGA0zcGRXr9IPhmINaUPluj9VIDvU5SjOsJBII6h772ayvHV6BVhBsuuJ6Qmy9uhmB8mU6cbdS1Re5HPn4Jhr25vBFsTAHAL3zbJi27xeK2m8hA7iGorHySGh2FL4JRZ3xTCaXtFUD5tJwo9ZZMZLD2qhjnF5S4gH2ktGX4490F87uPLcWICgngT40JLJ3X7hN18kRaicbjIeTr2emcEKyeG9ZlK5Ss39uaneAKDw0T3P4NynhHmV3w9VTyLCOm7wn2Ox9kGTydIRvQQP,a3ced102201da308,9bbba6f1973d00cd -yYNBJ5yud5QQFUXCFeuD9K1aKMWr6yoXEygLHFS4t1M0N5dOzhd3Vajzf512OCb5vbbHEGF06PpFhSUG8HeWD1LOScV6tQCyrOUKwOvNqqo4V5wizfHfFYzDQIvOB8l9GRFdZxRXaz4O6YitOmJnIjsOG9Eu9GpD8o5RRo0uGdzKAbcEMFdr8QJQCwDeANSqiQUG5dgV2iRV9gATG0h9Uu0iQpBDDR8dembscfpEMrOvGfYZHFLyuP5lR03eTF2HikYmm5YBrbWgE2IBtJwsKruePX6XBkavgAFPaBnC1XM5ZT50qTOtCguB5XaYAmbsNXX2sWAq6Wg4zALa0MI1Ul3aVrvuo4lUI7NXYUizPLiegM5LWQzguK9gmKDrxar2acUOeytzSp0WjPfnepVxm9UehPX4rcg5jDkE1ixsMq40qtLZP4FST6mSgrhnk3g06pJlyYWb2wV73nXQB61yz5r65YQYWWpE13vo0F4MDT3qPbcIVz085LAo8Ayj9gksNCWlBiOtjXsOD3Nk9ZkSyPXrESsqYOgNok12d79tzbF,7948eda7135b8b13,53bad4a65287d8b8 -GekVNJpq84HrcUzzr5HW5XXPpbHOeWNdRDfbRdZPuDlgbNWhaSJrgIu21NvCC5Cujgiija5af6GeXXA7XYbElMPmrb9AyurImsyw0nBhKxqcmSKxtT5awmqiDm18kt8MPUXcYnA6zylsSVzCJGFEYc9uZsYhe1HKtHCo5QGc8JE4MhGObEATtCVmUJtVHEDTimmNuCG5UsN9nW7d5Pvx9cJCAPh7rabGi4Vbd53Wtn558SHoRfb5XW7v3DDnnVe6xodwwg36V2ZrDKIR4lHA8De6ndTBWdpNQNcxzVJtKbaqxV1xhXvWYo2XgGiHplmZJtSsAFjrWSV1Y6oHJ94V8zAAU7z554DxxhvcPoiRX0OA9Of7te5cYNgqtU6NnsSoSS052mGJLdhPUHnCLtcdooKOQs8fN8WWl9d4k3jfp2p5NfkzdvgERM0T94TKyVyMvGBPfy15WW9Fge1mtxV2Fc2WptErLjfyqXzZa1tO9zgowzUlLGR7xrdtcTShLExzXVnHtj99decXzxVyfW3nZBA3h5VcxBcRuz2xck6fvFFqlZojKvGb78ilJ,fe1d52bec0779f86,fd3b509efc2c08f3 -PgVXKzDernMweKf2lYzD5jIyEsMi1ACFyNEdWpTXyT4JrlTH0KpWjkKGzmePw96Qo0xEsPAwEu9JrctKLLrQ2IvHXpuFRjTF0nGnntWOveg1aJn0yDWMAQ4sNx1kns5rgAco55k2I0mNrFFb8DsuLxTLN2fAgIRhHvcOvZiUZj9oOBmHUCQByfX2XJTHj3QHKZmiGukVSS3c9JCnyLKosNTJIPk3TjBLlIKVxKC5dOktD8bVIuP7MTnH8S1uGJua95Y1lBvhL5ZSHzVHiOwLVda4zcNpgfJhQEkWfAJVsogqyn7BUVPm7EjPcfiY4X2wv58EiMul7qWBtZKkMOSO1wodNtCR0EEEJ6vI6iCM0J4a4E5zOE442CWwuNxc5rr5Ecw6ArhhoZHCJNp5MgGUlOnZy8pXPUoruD61XjTkwnMC2YlDpt7W0K9lHk9WoUES2qEXtjziseyLWghwRDYllvnaK4semOZ2lnUZU9Fhp9t7uZSB7p4XS5OFMljK8Ln60fvBp9ubr4VqjTMeuyNuNuf9ETgZgNV7KS0ts39zpcRtBy,1ff08508a62273fc,a9c257dfb62613cc -rf2zh0cCObF68EIQM5qWMLOAMRjElihdxC83oYt1YAXNEEy6TQys3oapjBDZdeqTSHSiNaD7NGE1lrFtd53pohWKPaJKI8NQ3GB3Cwh0Voy9WVoylSOsewZ7O4B4pbTtPKtwNSo7ZCzPtrkkfz8,797bfba379810d65,a71859cb16240721 -jS3lgHUL4Up5QwpCU2PAnr5VWqrmwQUvSJFUjT8CzJbJu71uHMSxVbbSS8l3OMqI1Vsp2s9tjFztin7UuRoeVeHY61qdxBZ0jljfR2g5tkPYQlwVdHVA2wONioCM1dUhF5YUu74hD8jtB2GfeyDqhIrFlNrok4x77E4AWi8tLH752Qg381Uxg0QseGUb37hQlsyxaFffROm7PCIk4u1gjgir8kzvlVYdzQYHcIT9tAHBFQcttExj33aHHY0wCH7n7L8FpoytaBEapdOgG5I3oU6ZC8Bp9BqpURSknnhkLWmW7,54667acf5a19984e,148f5de93e2f98d2 -sPOrOQmU0ulgKVlexh9dzr1kEcahg7co1KsHAuyGFJelhAzMG6RJaFG6nF05gCO03dCvgmorZRAJvDdxj3Rnuz4oFrYYTCtlIfUXjN8NWNwqZhVDRpAvCCYUa6Vkzn0qLf3DgVDRFZeDTtLo7eQBA6CgR5qvE0fWBtlpfvf8KVBUXxlqLW1RhYoAB1LkNGjj5kNqoUmQkSlOzl2tYn3o8WkGGWVbofj0o5YFjhZX98S3zuzEratloIQllcdq6i3tthUncnubAsgqu7nYHeJkoXIUveG6hCSNwFAv8XGXZPymphNyFOtVKzdetCCDjIgqPHDwQNKEBtJNRyBreEwrQmSMXWCMy5Lt7RfbYA2TwkI82E6HnY8j7QFLYIFRM6UaH3qmCssRqDMuFWlk7VoHaxOjnGzfNANMva74IH8lPKtfP6aYpnlPBHekD1nmUFA4uzh9RNYiKkpZbdnWCqt7Ng9QnbOponisAc3a4,c60eaf69ded82fc6,f60fc3790e69950a -HromBCfMIZZzgchTjV9FfxQOgyyWAReSQzW4aKfUHjYqpu6lmYii2SLTRg6JlMsdSFTjkiJmHhkuWKZHs5LcR51OeFNFA76rjwh1VdkwCfBF4le19gG2KHEte6MRBgIUOa1IPdP2xONWFWdg3hBG7aJuQNyjkyUp8pujppjEbneAevr2wG,ec9f1196a962032d,4c3fc4002f4b0da8 -NgNrOWc3m5uzLOGItTKKOcgWgpCkLgeFatd9sNiF8ky7JNSHdQGhEwGtHSTPqGJSl4nvPyowjcK8K1AGipbXAgUIUOt18EwhlHYkF7LnMeOptoQLBidypDL7hEa0qCAgrW4HrS33DEqiHW124TF9OhYed9eP725BVDCil10Oq8WOH2DCLr09K2egTiTdbjZrBVbfu9ltakHg5yarF9f2JBeHO8d3QK7PDE8TLBtk346iV5fvz2rQKDG4wnHeakAycm3N6BEsIbjONGE4UOysCW8DoGvlf0qI8vArGREgEBqMr4qNVU3yecu6lEqN4sUcXsSqJjJua7WalrKYuG66hLMZQAuTuP2JNWaroz790wj4dE2gyBgpYIBCp4h5eBVzbZeKCZlDVg1YRun9FN81kQm4Ylg6uMzKVj6Ag0z8A06fG4iEFOWkGEnA28oVIXRaCMGryhJSLmkpgkFHNnwaAjFR0NWuW5EFRj1eU6pAiBh2cjQROn6Dd8kw2OJF0SOilxbFVnhhU160YNio0ehqvgHHN2Trr6IkLxv1ThPW6LsKDUqVWVaNZ6bqRgjfpr3lnhtSkd7ubJebyg4tmS8beqwuzLb1oWwTVbfstGCWPnJUm6awtFWeNzmR5WsGkrN46YZTDpkjyGWze5d08Aq5o9bkiL0g3TKCPq2Fq5rhGimj7JNqF9pAmPQ15yhmxBpOptClIF2m92Cpe2nVRBpFpCb053k1zQddAr2PPxWQYXb4tyJAU2yx3HhG1WbycnjaoeP9De19ddlIFGg34Mrgx89VyN68Vrp95t7qXsAXL3pyvf3dT7qo2Eo2qgrBe3Nrj3UsZODTHpWKfEjrcJYYXAdahejiPsVY1DkQTn0KnwFnoaqI1RYXcXDF,fde8951893bdd6cf,8232983c26b51a73 -zDQdJf6hlA4aBOc8ifG6xfSUQ3bpbzW5YjohQtwC32nen3xQPRG3kKnl4RMRuW6WrFKlCqzyXBFa3MbZInCi2xm5kw5dZnw4uYrUyQaBM4NXIEq4pts3wHDUVQReY4VABs2YPdiT2yzEeBevuQje0qMEp8rHiJM5jY0U0d83WjHN2IGSxpKK63EfGBQZ4LEcBjIO4Mr0YMUV3tJCpmHY8itlYC9LRr6shp1i7DnGQ8mR82b5nUhz8COHNThrIhTTxyK33Fm2VNu3Tgn3idw82VKHMVrc3HI802XVNTxe6l63gjQalbWsNAfm0yxZbHpa6c1USAQkQpvoT8gc0yLFyZNguvEyau030mPDiqNMEtC5W0dF3qTZji5d8ncB0VSKrTRF3iPH2gvktBmNXhA48jEvjfMBkmQDpTzxsB8YNPDgXsnQndU008M3wKMtGieED4CEtKfZSUJVESKLmiyE5vLlA35cojahzPao1nQigZhEZtEcP20ZKWyFSZ5UYeL6wnM98fXpz4Q2gTNtiFOahMvpRAoQ8sYQnfl8KmcjIhuBgG1JFls9aJoHc9AHuO0X7rfeE3YncFnueS3NuVb7ZpYVAb0CUytMD4d2fDZW3QWXn0Q1oEQhrpWxK6EarkpOpDzei7F04HBN6dBTx4LquAEcKRGBj6JkrjwbarPXOmnvvaVjsdRl,1457aae3263ee270,497e277cd01f0281 -hLF1BhVcMWlTNXMKWAZhxEhXRuX6Ng7tpX7ExiWZTv7SSnnJ8YAQ0AfyasczZDhKsFA1d9DS6fI4u1LPphd9AT4sl3VzenKJTBm2LB4wZejezAwlfvmZx0Rqw7BpQSHlKkqWsZQS5REALzLfCgYFnK34kf8egVGSWBwAFhw3AqyCPgyWHo7p77OGs9D4ZrpJJNQZ9BOZXt8CsSWgi8HSK,c86714d9a6eb6792,6bc38fac0bb6a54b -BMWqbZAqTR0MTW7WNhT4ljCywQxG4Ij3faaKtzcMuQ0ADMlxf5hGwyS89KOZyO0XqvJGJlLyPyL0l1AMRzBWaI6jx4Z6BLMz2mBZBOEVkdQS6SOQPDSx5ntms4ApQ9CqeyYdmBL3nJOtNcTYHtaTbadEK3IQxL9kRcAMZwKiEfq8MePSOAEtiP9sAJjXjOkYY53rwHWxy2mdYpJFF3rv8deU05zWx3VvXrYI9iMr3bGpftFp8QWW5eBzh3T5FhYWS8yPthkTCfOWxhhlnZpxisXBcQ3KqosSWweeFpez31wCJMAkEH8AtowHT4akV8fzYb7KetF8rubFqyIHM8VNmws04zy20XuAHhHD4g8YOvIkhtTRSpxK4cWOKAq0DPGUU7Qsom3zp45751lTyKD6eGsMH2GsbFt7SMiYzYSWKrlQn1MEJQXvpuFy2kAx9wlh3bqvSeS1SqvCXMRzl5SVInDbcd2GgTHDXWnqWQDefEDRLOzEkxbgRl4o1XIeQDlTpJEhxV3luMRiwiNrl7Ppcc1wVE6cglgBBcl8L2oMAC0tY77BwkDs4vUIBP4fTj6iKYtNBPrWiUKJ7zc0D89T4F56gXLaDIiWfF9goPsG7Fu0YOgRV4CeVqpJFcq4RgL8mV41HungJStvTGZ2r9deqA02phmyyHPsmOMZQk7txzNdvAAiyVq8JifmNCJTjPCR6Aid7uNmlK4c7ZbIbKlhH0gH9HOgzvmYtRaYFbRGl24efmQ7OVgY7NmGRRIWEMFWQkrdQ4crMSza4myHrRkhvGHhQYloZVT8xDTFIjP7kFInEAVDDbaxcSXoV2Cw1sEjAOZoR9ZlF4tbIPVqOmCAAaKbkf908U2hq5cyx9FPzVGXLGzqFbnGUSeZcVutXfqaRTJUnWefgjc5B2Tkva1SNoomEWALADydT0fs28S,ecca950db2926fc,cfb16ea5e6b844e8 -bKUgCtunhquT2ob61owUEIMt1i3NMO8mftXDgwtuUumVY2LgRu2jge9urmvjjKYR4fjMi8kN1tDPjEWhMCkqEJbtRctLL2frinhth1GG4KsPQgBe2HQkpodgwhI45LxYTzw0nvNk5BIbQd7VkYM4inxzF2OJrO9DhF1ikD19BNOyyzZxJcz5joEodRtEyegVcn9FWg9MlMOnxTXIIhcJQk6QO2iKTZGzjBWlSnwH04N7czSXyyDI0JgEPNrEulyrt1IxMq4hGBvKT2yJERlywUXbzx2hGMAKDIktJc0B5BWoNg7wvoQs6Ny6do3aSyVa6hPAfPDghdnJKOj9nG54p3Oug4uMyc0R7kmAujaUKedfn4ixTurvN5o2XYWu2YsE6Wqt7Rj7PG5jAc5tTHkjsSXr577aOhKXsLoyWMm3zQGrXjSKXxPvtTsJ9YemFy9f1ItnDoT9s2C1R4LKysEgNRckQBtMg3LHa1CZzTA8nlDyXGNMAwbz1TlhVluXEcSawA4ClzOwkBtX1EUSonaoIDdsxoXxCQqbz9GfV1ENyNqRJX9gld9fdJEFpNahRO1xLVt9TD5REZIVkZHr10z1IOH0ik2cNPs108R0XYgYkXb9zAZq3LugjPqRck3xaAy4peuMLFbycw1Jm0nalMEtZj8n8yJdMVv92chwu903ulFGJrm0XF3nd4g3g3Wko4pHNsiAMXEfxOju98HSkmAkzdKhx2DqOFFUpkYbD2AgLZroMx5xdHmFcrY0MpqVHvPuvsRJauY2qQzFNkM2P8ns37YMh84CBKcybzjyKPI40o3AzgEoQk1TvV67S1EeKIeeyO8ceavlyMXS6cCndbAeYYRzumsxHqWNB7ywvjzCE6BKg4XOPd1PupYMBFEpbPwJucAf5ZUp8ozWwpI501XtFSRALuEvbzIyZaPBXIwWeRclN9JIjOtdIH2lWyO14C9ZbeUX2Vn0sKNHFyPXcY679407TIfTr8FJ3y2lM,fa13ec7e25de7d50,e0dfe4798393e4b3 -DpkaMBSBjJ8OLriB5pCF9Xnh4OegOVmouqXZLM0lUfm8nP48FvbAMjENu5y76gaALamtLi7D20BHljSPM5NCMH82ndo2QsY454VjWSV7MzL9VNytgYl2QfarHv2u9PQn6VA60j5iPClWQExKzkqs6NylQ45pitn7gd2Gk4ZeoGwtdGmrD0oXHh3jjNIl1RCmUJGEwXzkBZJZ9IJb3x3rAKjNRbL,807bbd47093584ff,574eb59b73988789 -qisSUkuthzLvn9nyJqQ3KJKE2AKb4GLIBduuXuxnLoYniZkHQP15wiBCympvjAU6sI0Si53UuHmjMZnJC33FFX9i2rjTnPJcI7Tnw5wPmPdeW9hfKh42MOMXi6lljnJ0xcgY1nxTJvPVlLtbgiHyAD74Jfyd6hCOVvHPXbsoKpQj2enBX5IMvobePIyoBzrC88ggaaM3SZ57LkRzOffX5hEeVEsUI6VYq5D7JW8oSXQkKi4ogu9QF9iG0ISzQ31bGeSa5wZTz3bJL7SstgfgcMlT8Uf7LYgxRNSf7LxAfjyRav2dD4NLYn6HqedbYxdullzvcXQQb6kDgi5GdUAdcLDaaLoEhjItKoexc7q9EalZO00YMCjcbAhQ5E2af85ipAAUrvGWCwdCxNFONSCy6eUjp1us7mNiiLLclQvVN58PqRPd2EZesXsvt0keKBSFMMoFMkvOY08uRXTUGbM64x0wAHXUyBlB4mXXPiNXKtmIwpFb5G9dhzf85B6IVWhWq9wvgA4cf4VX4aol5MbYW9nngrHxwpaKeIWOSgKQxIZ4C6KQo3kOQ5ptTTjtzwBFhUw1greDZ7YLOLsCju,c832c5f366c1a13e,f8d1bceb1d2c2dc2 -L99agHqtLFy8Fw4nR0Lt8bEir70p1saD7CJJ0mdfLWtzJrCnGe0J2xuhZnGueamvm0m6aFAVLzT81c7pQVc5NK040aJ9ZV2JuTrQg2vv2Fneo8meSqLGhQmZX91nv8SvGFGJ2iKgCoGCf6JMsQjUEkojVr55ByTH4NCl67KgHSe5qxcoUGbWVZy1toj6ER8uWv1jOHsv4afzENYL3WfZ8kmedmrtrluoV4iYnafs3exh28nBM9GszXG7DSvT1ry7MEsowKglFVJJinRtghDiDEkayK8UT7EWOEztdeJSUjdYxtkK4mekxwE9qCiDmw0iP1L2roy3t5YpVnUK2bALuAvzfCEWLbwbXPXAW9FCjG0ITjFSel2d8N5zbalQy2Tie2pGEbacRnFtUbYoeiB7PKmNrUjCfoKzhNGv7j4wt5XGRqobsjE0ZarMfcDKWlURvUilyiKtXhQinWJ7cSVBfi400aziNt,51109dfc4da4170e,447dd7493434683b -YjVJeOERGHF2FLtrm4zKjoSQr4UQdkxPaT0wXbYtjYHvvXbza5KnosCjgB71Y2KPcfiGdw8622A2MsftyhaJKN8zD5oioYb8OSKFAPmPOPIJ7j9fcFq56xLc0sGMg1qXqCeyePXOQa22TxbB1OnjXrPTcJ8k1ebHt9WWVBwKIRY3onlUebUzMFimlRKZmw01sIR3Jv5r2bOQveQ0cb0YYlPtqpI5fCAvSZqnUBm7PY1122WkwgtrEyz9Pv29RbGDDveg8Dm6apP5ovS0PMVjuFv8i9WaVpyUTgIHiZhkBzymXAbRhVZjPsOPuQVe9oVv8VCRXztlnSPzV2HjBdxdTUUFKlj2hU6qOL746IOsDL9q2QNK1QskkpU66syH6QXKl0n6CnRHR26OmWaKN22jJBKQB36nML5ifDOXArV0EX6WBhaj3ujhhW08122ZVXJmkemOMFNHTbX8jTCzSMhjftAPIHU8fwhp1n2DfcT1JzZR0FQElycKAXkEyHLvc7WfpbrK5Pvi6ZGcFtbs9Bf7GxsUYLqSsGcM6SVqOcqaEy5qJzKWijK6i7SQzBYiHni50izFo76nQd6VFvUVzXR9sgprktIIEMrVBXz85N4P78akxcoHisTztEWdiEPfTiG1EPYEeJFyzO4mUzox3A9VZmRCjbvp05r70OngQrqJtx3ChiTwzSlGk00u76qrmO419bpN8xa6PpmunE3iUAg8xdpH0w5xF,858f1142cb2c7db0,8d5f9656923903d1 -60bsD7QuhpdDU5Az46XzY7veFyHFNi5W5bBuG6aWcXy9rJelmg8hjbT3uG9aeKL1WJj1qvRUClwSL8bAAyEqOPi1zLQmkzAZO8EMJAhpkru87Zgzas9bQWZ7eSJiBSSagxEVaeMq3v4XYSnL05WBSVxLHjpQUCnsjXGmF7W6IJpwyhfYJL7E8T15sF4qlmtgakJvHQOyVdzsqeuve2IriXqnHp4j2qamPKdx978AiQ5hKdqY4sm0e3jm7ZBX5rXWNwzvocxQ3gbcJj87OruYZqahdIJl6YT7VIOnw0F3PujQbLflmWZLbsYy4QtgfjQEFXqkjIFx5EcRjt8LWaXGwKKyWQSqtYIKNcEfSiDhryvcON4EthiAwW0hzTWroFEIvTJcBE8rENuedxpEso7yzWCokgu4jEttD1YFF54pMfHDVab1kKJ1Qg22DK9GCO6pJRppaTyOEcot6WfeSz2UWOqQkZKpS8Qr2Jycv,299073018d793cae,dc0934821ba9837f -zFrctU5cVRDqR3UWiuHERgZzisrcZ9P7lK5m9IqDdkKSQ2yBqwV3PhQqhJwyPGumlTspjeNyNSjLiZaWp0hZT0cle0sfjDldl6fvwxwAwc1pDRMdxcybN61AW3s6EOmaI3Rlh2JWnN2uOVwq0rLdw8I8CeVUhWDLHupZ65XX9ILCuyfzMqwlTHq7QqUfDCV3GoGARAwn9h8RYR5FGpxZTNIsCfV1LUpAh2N44Rn6ZopMYTvG6s329geEp3ViKLYbfMEKoSrcn7DZSjsyYQA67D9zHp4Sq04fS7lptrW8HoniQx1XF22zflhaYOwhZWMsS2jU0AepNclA49yZgULCaBEAZcKtzpeGBP6CeqppQkAjr32M2CTMiaIMMwv7CO8gKmaOmDdRznqeI0si4S8X6E2HYkSutNlRYNRbRwxZedQt6MMJMbeuL8Dudp5cHJoE7gQSebyldHcHzLBdIzKuH8tdKepbnTDGIxpIedZmtgyKxO2BlEwYBS20b9HMjzNwgt5mXDCTbqHGnQMls0VqhfvUviNH7ZKuZJKWnxdS2l9IKjFjcnZLfA4pWmhoxPLFzU3vfi2obepDgBmWjM81ADyQ55z1D6RLh4395yIJIHchj0IviKYtpx19mUIRebRJAsNWXAC70lJj3HE8rkqPXsZmGoWYayi0nwFAh4dgNcSM7Jijepy4TzoQuUBdmgcZllVKpADdHTyAwT1NWRMT3cNUGuS15G5e1gEf45kaYnJmiLYlrBZXCce5Yij3qVXm4voJTxd21sGbwIO1r1OHuBAZesARqtJiMM3Z7Qf42oWxHngLyhtWlu6YBCrZ52cgH6xJ06mkKBXt8cE761YVH1hwyL5FcqISFqn1eieGPPEiF5PWhQStIhLvhtiJa53NNDm3LzgvlY11UTydR7tgSQcYPpzb8ASq5EEPbwtPSJWOENDNAFuwWeIwO0A6BwNVi,dc3370479f3a2d57,935170d4ff0b47fe -1JqBqRv1ll18DqZGNgQtQdFkgMxqqGkbe6v3bWj0p1HcOJ1BcB4nQRl4ngRuonD0yfstWSt8JitqvXlVHIOi1lxH5RqW4QiCvPgjFpzkaj5ToGb75GPBTKUd9FKWWbhyMt85QS4mGddY7owcGmx0pYgXJbktR9TfgK7qaNkXoEsEY0FInUCe4q6M5IcKrcYVaWMYWs4xJfJpcQ5FhzphoxEoP2m4vKo1opJxHht0vmj2CXgOYSkTZEdfMhGdXFDgkoUjLnWuaYIL9ObBr4f9TLhlguED9E8faB94gBr12jvXYZfTRlkvjUG3UoHlscoeVrjXhlzdhYgXD5tLSQk6gRGPAHl3EWki48J8Z3JszAPLS1lw2pLLQtoWvE3Vu5Mg8bcDpJ5zMuEeFvJWWYmtSF4aEfNg0xykJSfjVLu4RTP1Zi7NspJrH1bUrsQBgrziwVX,a1afb97bd37730d9,474d5bdd5398376f -t1surOAg8JYC5z9DFQtcaEqwBV4ah02D5B90OL6vGDslg65iT7t4G72malexju9oXyiBnSrEpefve1tv5movLoPVS8jifoaxtR7hWeWC2pi53wLVddTtxNGyxNhwH2rZJuxwNXC5j6Wjjqtsze1k5EmktNDR5Gq1obHXxw3E,a871c2fce3244040,2e7a47de4be96cca -EqO2w,a860dc368778e5cc,4fd9ba7de405e7d2 -q3fYnSKRhcjteNioIDRW8tTloIuYpynSmP3v5LGUcV4gdWrhY2XduDDVy4yupFgBfYr06Jdn20GQMZa8f07ndFPBrhq7sFThuRfxvhDkX9yzJxvxeS6sTDwjaGZKRQIDMYUO4sHIrWU00xkvRO8C9Qc8PDaNuqxf1NSgCZ478nyzVnykRQluZ0PQ6JCcFIDG4auZYqHbKVh7kozRjcgD8rQJZmO2ZsitFYJgNl5aMow8IVCb77O79S2yuvQ1cFEs3zW6,d655b8382aa150e8,67cdf135541fc78 -o3jbbNe7OkBHauCN27aqG2MKq0um6b3T9n63hYokXDu07J2AMTvOUPZDyF77wtPbOA8k65BEYphXJPTjowDranjK8taxYEjw7cQHD1IASaHXj5T2fhgFYSXVSH2KR7EUKV109zpTJAIeOrH4EPHsqC8tEE7A6Z9eezB4SemfdeiGnVC49YOeBoMscfUMTe8FSTWluRXjsbS0xvq4il6WmekC41PA4dPEW09IQk,e4d52f8f14d0b13a,52af714120b64d8c -nAaDMSeCA2OHAiL8n2sH5,feca23fd4fa18f8e,75242ac82ece481 -YrhlNLeqbZuwSlV9aRPfXdlFisiVgtG0ZZiMcYSs9LL6wnYL3bmTZgbQEz8wCp3XMG20UUwmljTfsf5Q5tBLF0dkKzHv6QsjXGx7K2Ge9xgkQ0gWgkpu4du7FCAlLZP16NE5JSXyJyIPb1UxFs2HENv6TTKil6JX7T28r85c5BrwjOQ0izSeseGkORZbfh5Ij6,ff20cd67adf842d9,2efe71a5b77177b0 -HaKu9lxRGBbwo811kjfjvERWUJ2rkChb1mdxYppqZ38uQ2eHnShrgvg3UFlgqQFvBbhGkv5mLseoxDfpjvjFFJvlDOgyGkSyFwgUYN0FobWJPH36PkwHBbjOg5L9hVuqpLVg9L5rqmHOglk5g6fGpTXxwuXBuvVwmxqUQtYAmLuIxVTo1jsD436h88jVLbaWNCEjUsAJ8qZUqN64cnDypCsvLGzeGeESZPczK3ZiNzqURapH5jodJA93B9Pu2kOs3bAxzbxgjrZEVVysmxUaLTHbrVUlc9CIVyb9I4yt4Fryx0tOcy9bRWXSwEY8YO51idUZgF7UQ46i39dM1bD1HTg5xouMfTRwdMNuL4AUJmrsEynBXQKly37odeaK0Ib3HatOOkMnoTZ1nSC8sSwVrkhXa46te3f1iRUVVKtfDZ7NtugIB4EPWPV0LI0Dn9bvLaSpFnqai7FiFan0D3ZzaZcXVy0yHxUsaSA42EOKycE95GevTzzRbb6cNfJ6bcZ92GnQRZTJxo8gkm2t2bO7g61oMf6HLG8sNTqtTVcZhwgKnKoPs41EsxP7JiLuCyJogsf8MkfsssAvCD46Adcpgrx5G1YxB8oVsQBWtUnuSpsxnvK6QokXrqn4kKfcfIkCp1dmUCfBrZechQrrwG1NCVykBHo1R9dzL3M96AJ3krc3CUXiaZ4MdfXw5mm8NE7GZOY2Srgtlm2R33aLURU,da3178e21b6f39fe,98303afc57ff2aa6 -RwSneflfbxBNiYZmPDyk3ZzdKm7U1YC0caNDiZgol7z3da7lpF7uWtjTusFHZVC4wdkQYYexlFkLJMwgG2BI94aFWMPPSqr83UxKzVF8OIE0iNt3KtoZQeeQLEZ0IP5owbwF5MDZRFZb8WH7lkvNSr0FI7WW0HpC7sOFYHpXYwBIc0tkgbcsAId7ntzNILN8zqGEmvgBPZaQL8OrEqrGopFfRJAtX8J22I9tIppVd6vCGtc3EeZ5Mkc1oIKWb7otdkaPeV8Y2FhgSPsXE0bLQWR4s6efBUfHZIuODN4pMHKQv4802Xo7CPXoPbArD1wAA3BRyE8zZgSuI7LNIECaqHmSPLY6SKQug4xpT3gx3VYt6vfoCB7uMxL8L34SUedJNnmoaDZRm76I5A9Z1s72TZveT77dTkbAkt6e4QounPmBaoTpSWCL0kcYGyit6hy8N2lXmfqV0YocP68OdMKkjoqmRdg243mgI4YzpPMCqUibMeqV1tNLABAYaUdhbyxOHfUmUFygZCsnZLhZs7R3PPuo5TnuKVaNlJkvw4UqwUtvfyMi7d4psE8E31GSDNogJrGAxdDWeZ3Qhw25jpmIqNDhdyeeuD8ZVFaD2PTW8bwSdWNsHJJlHeGkFSIbHm31WAv2JCKtYRxSGNYVpJZLOHupJ2o9ncRfSxFORvJb48qGLRv0WR5frodB8OJDv9hCopsHN9LLfwquur209ATKU8aigwQ5EQwvuqxI6dPz513UREKHmcb7hglQx4h4LLIyWSuGmYS1Rhikc96jTKgM2d6ooX8PtPWECJj2ToqX15CQM7OSCjbVPv0wFvdgfX65Q423dmRfCJd1G4QFEPzLDi2FRpBPkM8R9NRDWXeg1LR7,249194f45f12c90c,aa442d776fbd2b6b -rjtMRcSeFICFDIE8Ey5Nvy6ggeSmFLXsOcj4CUfdVu5XOqkpMBT7k8OueOEDtt71nWrjU6qNwtIWq6LXharf6YuKSEsBwmgrDq7NvpWltmxjTYVBG9y0bzJKn70BrBwuzjEN,4c93b11760323cb7,ee31d9bed30d188d -QX36wPukgx4BTLmnWKTfLqJIu5JCcR7IcMLbm0NxEAW9mCD6JKUF33vzDw3pjKTjclJ4eCaSqvfzJ7I7bZEkQs7DFSiheoFxqDaTR6NCcesUKp1RXKqhLIFzmRRptyH3etSupD6VZq9ibosgJImjSQPGD5VUWuXa8C8cdJzL0dsxP9pIDYDOI2BrHbCZVr1TXsOfJjPXVimujg21m4eFccLc5K7Qh8acSSMcSPxJGyZh5kkpnjVz3esNxTOK7ENooqv4IaVbU7KXo8voD070WwIYEhupbJPXXVCbJCjfzQ4NEqOmTZmeOgPQl2CkDbngUrI6nzdMYOcswFF4eKmj9L9QOkwIlx78FuaeYRJ16i1whnuUmioqeoeFnqDRP9fFcs3UCiYnhWcT5ygk0NzX5eyxTtNwU4P,2a4e78ff160b3b59,fd0edf309b6e50e1 -c0KuYQfYUcdlZEkyn1N8C1ApXpm2BplUJcEY2wZYKq3dofesgUDgjOq9rgkck3AbG4zloV0Qd9ahqhcc13rlh2qZ8aqZfLnt0I1tD4Vguh2JkSs1zH6KgZzU9aFOmb2XKVL0iVMzosms8RVVZqt3KG683Ifqma6Rq1q0EQEY7L7zdqdeziybNJw8HUxaBrx93OqTt8rF6LrCRDajlvgMAIHLMYUJjIdXg4YDy2FFMjt5WSNkTsSbrsk0odg2,4b11ad941a8f73b9,67e90475ed1651f2 -h8OUfSosyhYR1GpCs1WI9KM14cIAEWuLeATMXYqe17e5XnxHHY4hJb8aVMZsAd70rFlQW2AtEDtDU6qmPiwbZa0PUmPjtZIecmrjduZnCe66ic57zl964r0F0DtZEpqioQlctFn598bcNm8dlRNCcLxoqEDzLral84RutwObDqWZ7xQFR41HtxQyr2BkKXsN3pdUZlhfFIgzT61M4fCoUn16kOjuP3RRJQpj67iHcu2qmBrKYsRFUoEXRtWxRrN2MswtXpXYmJCg0t1jP1S1DpeeYDfjdfecm7UTrk1yr4QyDHfIe8q9wtEwOQZR7kBMPTry14VXDU0uzIT3VNcdeKFrT7ZucaQpGz1t3T2XkUQ46fzigqXOkFU4JY0VPTez7w4FyCXk6g6GW0mONu6ETgktj3KMOVWfwEaJxlUWyOdyr5y3Zg7DRfZsjPuizrrvb1o04uN4FLPDpOtBOTIQCHCobQRKtIPzeNhaQ2qVw4rJz3OENW2GfBvXJBpZRJ0QspxnYdheUqo2Mnw0UqK3paX8QiRoeZPWiFQV3E0xhPQ0mSaKm5HHHMBN5lJc5VY4hG4tWhl5kJK4of8DZjtmspV99dtg3RHjTpjgJZGw3qPmnmOgndR95qLBsxeQ0EexJVk4dAHdzNKMKS0Uk8jQ1v9PBb6sYvYJ2kjPF2ZI1ZL69JQeiz8GPT4Y4WotBnPiJxwxvM2il8P9kUeGx48X3RpDbFjdBK0Aabp0CZq8TM8aEh5hPamIuLQgNxtV0EFSsoKRaygPGDy9dPhY0eChqyvQyAmtrNnOOrfkzbu71U8YZwp,2fb41f365d1f1a2f,80ca52088e7d85d1 -NVumoBh6IMzY2r3MGLXkNsmecY5mMGIVKWlNO5lUDQQibjOgrO3I2ZIgORu0A87JW3I9NTeEGcVVusuQvCBXyJzi7fU3GYWGMqqRnnWxuWFlVu47uk6abr6s3p0RmwalPqK0Ysr6mS4VtTHF4mWWJ139p7uaxaDKgKfzCN3ZLpJ3D3CECnDQxMiz1RpyAEJ7liHvhDcvGyZFPzNQYPJohM1PGBEI8Gmljkcz7NGcrL2BLOTXq6J2DmK9F47iLgX9fzchDhsBrFqhwT9vC3zIGrrl3ll9dpg0EA62EHFlAQf1xhaBmpZ3fg8EKnqDFoZLS8f1BlGUpuMrBmJ6PoqU1MYLWMz0VkdH5fzCADFNK1gx7ylJPRBYmVA85eVgSTjIFIsl2UFqA1YAriBC5QqpyFpJ5cY932zTRTWOddNaM31cLDvW7LvfmATCXgeLrJJ29UPEUcf4wM1DbB1uw0uprDtuQudrr8poASGox0v4Nllss3CSaSmOJc93RwWrDvccBTBZ5Y,188ed5853cb9272c,ccc589be792fc0b9 -r6b8Wm0XQqThl0LxSRWQhp2O74D7kIl0q7Haeru50QNASinaMugVVSTIGh9Xx2Ds72O8jML0zHXEKEgxN2Pp0pWj8tEzMEYECmR8NRQkvbmBl1TWmEe02kAOeZWxANJHbZsDBayfwW5zlydMB6j8cNaShXldYLrlIkYyetGcBqRAhZZdRTz9KCCDQ2oCjlTnD9imPJtrgVkGajqyf4TBEqvoLhqTMvqqV9PyqcKHgJGYLyEZbaL9uLrSHGhcnANX2LfcXFnWOUS5mdhTUucBq6MMyrMNLfVkcaAvYqtObuG7vqSYq9dVEZIXMn27E5YYc3tfxS2S9hcKRlsxgNXzyPE42zfhESsUVg2eQGgbfGgoEhaUp1KOEFrwdnKUa36mHk8BFHWZVAiz69i2ywjYIwgCmsMpAFTczXjEyOd9PQDdfiE52ByJmDmLQ1g7G7nu3Pjfm4MbVUp8UyaXMeFUJzrCaseGxZOr1kCV4YFhFnRv4DkJ90AkuRQ1Tto893knRj5uJO1F8kvNkhV3DzN51VP7UiYjpivTZnV88D8erONoZjWAhfqiYNbaqNOPcrzVw3FvFtUbAOAjU8DmucunEYsmviYCxHw80XUmKa3L7r9QZdIzd,29793065d216206c,de752d17f4682e99 -vOrQpa9AsNg1MixpBBeB4L7TzWlD8Opnk2hW6ByxmnmQ5wPkvkV7spJ9afOEJTb8CX2dZhGdXldc13tjQfbZnqdHb1AXt459sm185Z1xGBf1hVg3kBrWJddaKZLOK052ouL7B5naG7yQog3qxoQ72PVFeuMQ1203oh5i4jE57M54c0FBSDpAUyqx1hFawuJ7NOsZAsSlrdhn6CynRLZ0FTiVD2mT4QahIoHLn52Y7p4wWWqNzQ1QTu1ZunskRFHKHvqZImvRsAu90iKHHj21pMTdy15Yb5,159e8b8e0892512,4cfdb14521d9f9a0 -1fvMxA2LNrlLlDVbsQshFD6DbfmDQL1sJNCHxyUhde9x1JNxRcrDgxwlgpxk92KGkZ5W8Uz8Oc79JWZclHlfKcEeNMdrSYxyhgMeC7jPlyGFVhZEDljBdLVP6kr2aYwqFi1XtZWXavQfqKUOdr4j4FqNm2WTgYZrqWqOWbrP6auTGcY7UTVWJIUvKPoNzFhij7N9sbE8NskgBtzs4N0L6YRRZNQPyGWuhhnsl13SpA32R8zIYwDQZC64gDEQd3TNjgXwj2ShEEYzxJUnuimc3QzRW2UPsn4gUIUk28swa96sEOKGsMRJLhbZFNlPY6vQjilePL1th0qvMzNfxE8cEAOg8r5XQBONKDy8vaNl3pfrHIZHOfiYhcqjOtkzz1JzPSpqC1phIr3hAN9zeaIXhsLbbxLi6Z2,856d0d0005f0a788,814517a7c2a29d99 -LJSwCZ0bHKY49Wp8h3ry6t4niVlwS4za9INonZs8kJ6D7jkusqdRwXiXpQFMCdZ1pUYMZ01SBLPGlIlnSC4fdKOGWfZ4saHWjmOJk7V1mTcXah2FfsA58qikodEPSq8utu5NGEmt8Wr5oMHYqyH5q96FoN4VrZur6u6nlWKHMJaipi0WnBcaeScPdhwnanqYIEbJwhjY0rx8U9kx7cIj3Wpm5c64t7NROVp8UQjvQ0wXK7w3wIwiSSwvZv0gtn6NvizWvKFet9Nl91qPM5pzIgwrQMfRha4Das9Hy6mnzesQYPPEZ3wcsPzmeSO674MKo7jrgD4jvUIGPdjbCzkql4SEGDtwISSsUg4J63XceGFav4x3nhQayWinC1NTyHlSZz2npUubQjoqUIyC2KQ7rIyn2CUMC1zb1zGXu45OjeyX32WQa4nOBU55ALO93Q7M6tdArPwj76sZVdOTT8XaJxtDZvGOpUHSlB2T3VGgNuNQJXKERsYRwKen,9d207b00cbc370ab,79ab9e44c627a280 -vAsK15agveUQe6lMpC9ozlntQo1hEnD1BIWV6hEC6p,1d2f2d2752c3506e,bc43601409eb48e8 -mxEW8LTwqC449xUWj46HSmFkw3FlfRAqVlB2F5zfZUw8XR47aCLWfI9HMSGm1uCXpUod5gMwQhCgzaKR6jylBAsV3j5Knop7onr8IXq3NpcyrjHfc8T7b2MbiJrNdshbsuh4Rj9z59OdoEbHfPqQfTWScpFlFvnLxFnRbH22tLyN5UQn3VGReCxM5rfKtY9fJFS2Qxs3fcsyIZLaOv5OlQBBwyOd2j5BqXYRLnmGbL1MDmmQUbhFfrKkVrzJCW0nkVh8V1qLzz5aKJFSMqwEmUr1049ez4tKYLXRsxpHyh7kJCk9DASfkBiLfwg4qTrhsilrSoiYAjPkP27hXSgXeOmu2PgpPui9WjSewNWg8HIqOFl3SrLpq4rBKok4ZlWzvQ5hqgz0fnMLQFO2st9lQnm2k1vZrylasUFLxZ81NYjd0B95e2DpZ8zf3eLJVp0Pm7hkZtMQpiXEECVYACXwOAy5zq6VCd0d8vq48u3tI8Rq4dPlSHtsroFVMsyXgZy12VLbTNQFTZGbnDmvva33pVX6Q8B3mWwirFTYYS9nJOZK8EOpZmLMe72vhNnDMLJrTlhw5hyEDKVCZL1PElzSjxXaWAoaUP3NN0IqFGB2ZzeYoJ7hWdp2MSJthKv5Yv63VPmDz2UpCm6b2ixy9jz8o3g2nca83uaYXakapFRTyGKtRjHJVX,980ab568f3603600,f9609e53114f06ad -ECbWRYq5CXZmj7Ev4Z35Q85RNRhleNGbScKxUzad4EmcnrRPASDg0WxGwpmLZKYQYCGoeyj9hdPYyCK9Q8cAgXJtz7rb6K3Q82SnabW7B5FZ075ggPzQM5dVGFTEDq5AOA5Y3VqCoHc0ELZNomwflNpMYQiy8pemsxr4T4p0G57Kxk29gx3Au0k7Z1RhZn7h1UFVJYZhlMGhwic06Xq5168p3ADxuCZkkR1FLM5eKom9TeJtTvnWIxfAbU7Cfawgsh0kQiUqTTlDlMgDHrjAKC3Z6rfskBrH2smECho9UipmOlKM9bDTNtMEpU4zX340s9U2sSY4EUHw5kJoVEJeOPMpDkY1vyWMYCopFfj70VIR6SRifCvPFz5XEUqFe3WtZ9TCDb4fshhqKLy5UvTr0g5rNt8AJvgKXV1eN3hHBHvgotrGL4QHKhIiK8Ik9a47Kozr6p8cqgDMUxbnDOEoI2y2Dnvwz8N0yG9VaLjJn4KRSXQoiKIG5NpxKplCrxBzPcy62v6UD5AoqW7uRx3zsF9E9FQ0dITIf5AQg1i5MQaOWpqpDaXVvfLtIto8VOnzymrbcvRNzRKbTDOcooaHP0nBpilGDO7EoyuhBMerlOyJOtNp3Bvs9edAEDtZMJdelFol510cVhf49XfatRz5ED9r0b6RlmXrD8d4W618Qe0JiIzrkryIDrWIXfYuVQTr1ty8ApG8T97ykh8atQLmKwHGJYBPaMQIHRBESVDBx6ifC6kZ8Lp6KGIoyTOdmsD7kTUq2VcZrP1I48mkNQEehcMcl7AlY7nE7n8GDJm,142fb02dbbca5404,2b835e141cc3d960 -seZZ2dg89lzTvOXTIvy9ewhVmmiDvC1KcrsujmYG8HTPvZev1YmA4TP3bzsaAO9Rfhiz8hVs3Dj1kYg9qWirZkMso8tIAmxe04T7rjxV9BJB1JBhwiefr8n6ax6pcFB2S14bVGniM9Ba4RuEj4ThM15ODQskMaqR0OUabTTthjrJkeZjSVhOJB08MkVlg0epsKtMdrsJHwbLN3tYWjyGLQQBAgsZsXCEiEKOLt2DBdgYiZJxu7rvUMbm3Lr87nyURvJ2HxluivbvFwyXxyGB67euNgr3PsOkGSIxQel9pxbTb8uAeSklSmCpVHUUTFxTnANZGfabbTQllIqSyixhkQ4lnHiWYKqoijjCOcCEn7deChG1SSG9YNVtepuBeBoDtWqQVeYMxcpyJwe6PS4kkyhpZnSwsvHQBBmdDQ8FGKZ7ISdrCXip8Ei7pJtc2FhNndKliUtJJnJmafaVp9KyMBpnVWCqrgjbxW79fYLo7XdX8ZMAJAdYUqKjjOrp9BJmaoc7u2xobPImnZL3lQXo7lhQUa1OkHCHoWbvZkTw4uX2jwipTQ6vtREDvMeIGePHRtzYQr0n4XXbnVXPRSaPmft4onBTrxW3FCQc8YtVOxb22anVIlcUltujtJOH4BQ8Ym2KmnUtF3qmDyamahv7FaFRHoE0QiCKIOuD6KBhxnvBb0dZnkwU68CxIE36GjB03aiV5RGlpGx1CQLnSW5waXoB4Y4DEPhCwLsrIpT010lalYuGkcckuJ4drQlCACQBgZaSdDYTMJdQ1,8b0a91ad49bfab59,dbd9e1d5433512f3 -VMjZVIExpImZq6iXzOiFHjcMPDuIIap0aqHS2aoKsIuVQPHxay6DL5YDZiP9GuK6wX64AdYjIEJCrEhcKDe2o7sBUUo7WLxPeSMaMpDu6ksHNJGSnY5AYwIDNFm88YHDTjwB6JWC7WpVxmEOKrLUeeghsJCk7vjOp5o9o36aPTWdLGiY49C5zfGAws3VhYXKCiC14i2quR9VC2k2ZopnAq9IkOHFHaGeNXCJM7c3SwMmTUiMQtFf2XvmdjVu29FPnrxJT84xUu1JrkqBrizPrc84iZmY0gs5tYQKkbbtWsAXTUlwdentiHIsjToFMuRSxQm67weWxfQu8T7buO1f4v3pcPlVsxmc3GYRcGOGUJFw6EqRBDkq66JGJhNxyu45UjgEWamm2RG0ShNQOmEbVRxAwtVRnqegxYhQZ24KYdKmqpDMLGOo1bzajWnEybvQQQQ6ZQ0t8a73wHsGGAonRZ4Acr1RC6Kv7FyyGs0w2Pw6NXGN2Z6dd4LvUUBgcY1cBLwdpc0HaO48qs50DCWouwQ16MhcQEdaxOpguQhG6TaT8O8eGP8MnMj92dlqRNaDSZ9eCVVRxGYjZmkyT1WA4coEzcq7U9YuZUtvsVyLTVhPTeysZgF3S3YXkKuJLPd3cuJHxVyDn7A8q7cdV2FduBw1hUIa1bEwEzAU9VcQSQcvmxQsb3Y9tEGjiKDrgIMmxBzmmF9Az73UUb2p0xOCeUzZK8Va7ulY6SGhYYWP7R8pJSyrUILROE2B2cUu9pmWfrQWwEuZOF1gxM8YOdwuYrjJ5H2xg4mlOhnExTuGPSd7ur6fnA1bNe1ajCyO8oOH8g8HmxRua5WGMe1TmyVpYFoE1UTYQRcoIFiFgz7Cwwo5Hy4GgjTtD99ygRAclqEZLgvmHci3oxv1FcTSwYQqcohTE5bR1heuK4BDesb,4a393d34ee179ff7,90aed7be8a76b6d4 -yAWO2qGgsX9sDMCwgVoZc6JiEBHNvnO5flnGjwx0jj1b54VYEdUeox5KgrDKMOJe2kF08StGwtElfNxTUccCIFbiN3LmtVrVps4MScfkE5G7KTfHcJHRpYJY7rSlfyh5,6b818e4caac9641c,8d575710f793d15a -tpxIQbmnsQkNOEpapDkvHaaZV1FoNx8BuJVgPClN25Q3WrmQkNoBk6hUodDjNj15yWcSXBBfB40djVlM5lw3E69qf9ZOnYR0Pw3dskNsupzINYTmbv9Khiacu44PDoYad4acS9OdzbIqFrehQPYVfb4CGTLoZiZ0b6q5noH6tn462KAMALdZm527ETItsy9qDvtN70X9yxENfONUwNlApahGSHkJUC0gafhe3g2WCv73AwRQw2JFp7f9YlDwNcEXvP1vGudyR2sNcNA6gDQ2eZ3ElOrYdiXY2P2zHQf8FDiVDIB2SR8HaqoVSNPdcbOUiORwE5LOyotSQ2edXEysI0g0GkV02WngKg10173lv2c7SPy8PEa6RUjQffqZ09SEwy9EU4u2tPHtrwUvYx2P2J2Q7YxVGHO8HeqwAuEL9EN22jXnK9n9UM2oHra4lnh1JPSODU1diPRJ08RZ2lLrb26LiKLkla7pirNAKYYw7boTzQ7BSY2RvOmMlsayenLPG1s24v6G55ghtYEBG7qyoDOQ2WCZwYTTSiLN5zaQT7VhFeMLwcgw0Af3BPZnTVu9W0VqO5hAvdq42FPSAFVlsvJUEfL1Px5mX9TPDm9r8UL44Gtvq6u1GuwKDdwGXt2vXuDngFl9cJxwrogv73kZE4bR01HeOoqEVyWViTnGzTYETU9RODx1pkPY3JkZjGZmpm62PHKqyPwcmfAXTAkpopVWMSwoLMgfFt,908b874871f3bbde,aa2e537c5a8f5bc1 -7TBplvT3FrOyxBzLQSdTMi3lVoKZs4SO0sDFMS6BmZDNuXkqVWtOSD6NFOZ136nsp5tnwNL28SFJvnOiwOFysmYSMRjKfzNtkCzNZVjReVacMGLexddfHgSkBv9NoOMLGTnaCBF83l1f2YlyhE9GZAqiLIEaTqeRAbN5O1XJhkqBHRQsDbibVbMAeVHsyxM3kFGvizgPGbtKj0eycxR1SHhKfuU9T7ACeWQQ2oJXaHlLjvKVcBpy8gOJ6O1WvnLhMwBTignHJBcbFRxccofDL1l1tyYzPIEAMdnkMsg3yt6UmI3jmUohGBWmY0LO5WDtYAZe9IT5e9GE4rFJ1YdEwAtVtJRfjc6UmBCoIfxU0INavksTImCpzGbvSS1MaAsu2adksUtmRvlpifDw9HZ1lBfwhJiHhxyb8PTToDNXxohp9a4tj22n5uDec99tMHma7VYfU0c6yneZpnYFpw5Kn1NwSTFynfQwU5s9UjAS3OYZbAIaLHyiGyG0hdzMAW9tnnuMVFwbQjDBSvA2hr3p4BixAmGqlc0JWOtdFPlN7GhebEkdFB5MftLNtaVCQF1obtDrAQrj,e4f8c7b8faacca4f,4fd0f2153a44dc71 -OQzN8EZyhZ2RU1xM4Pf7ydOI2tO0jEhkPtTPlH7tL2KHMcgHGnOz97UurWgGJWD2PUz7mcP7kSxJZJ0KpyFxyZah4GpsLj7TOIx1jcKYSm0NVnqZ18FN2Ub2UiaNpAlRtalyThEXfaMKXFdAFaItZfOobtRR0GBM4bQE2JUKUqdr08NqQaN3cWDSg5QHnRsArPt6ItiroxNsFtvcHq5A9nLBLAaQDlZpCmDvMA6PldSYSKlGg8pxT6Zlf5Kiq5VbUgy6mBmAcOVfZGoY9lEpP8fDt818Wti76n4Ccblk4j6uFHRBdC8EwcPeQyEBX29ZUAoa4gTyeEfKJchUfblqDQ9xbo9kyXDUQmWewjm6bZ3GDlOMMSp25sRC0orDWpOyaNcvvuwMBIcS8ztpQllGyWhz7FZXNvQvVEkExQNtAkdHTwhl91ioqA2RyHRVkFUafacasV848bUxJ86SecBYyvNbU3fpn1y2edpCa6OljGvRRcJwgWuWwg6qPRKFu1jKFzko2mVeQ3dTfHLJiqxUN7VkBK2RJXlFaaNSkezlwdR2YG8DuirGXOGoPyX8ctSJCfngHNcPcRUa1wiiCsMKMXyElSsyel1epEsrXIBCc1FYO5PxccQeUD6jaJMxyHe76LA3ESZRGrG7M2lrtyz6SEqBJWh0iPfqfetVPRdrGPUVPhSSvZjwo04wHi45HrdBkRSt2aBHKvYao1CJCwurtyH9sYwVDCbZMcTqgt7Lr1K1C8p4748LNgFp9bx6rSkH333cRunZhelxJRdrFxcIx5aSF3wJ5RZDee558P2f68ZZwjs2TkakHf0zKXx4tg4sff0HFsP07ZidZzH8f15TZKaPMoI8bIHDrclpFpmZ8B7SM0rzZtrLl99X7KdwQXAQm3xsCarXby1LDcLZe8c7txEBERWHt5,331922ee441a5515,f91e7bbcafc00f49 -wihE9HkUcCW28pLsgxolwOCsmbjN2fmsGWabBNM5RkSNaUGyBQTuqjEWXAcGzjhFD4CFcA3BcGIB2SNNtULbo3wxLzgBjhqNIVzdV0ggRKRBEZGWj6SHiH1uDbvDw9UtkTzxNvA3oWfcMjC8uqcMGAffeF5EDZ6luW77cP03rrHCRiuUgW0luFM0a6cvVF57wofxXGCmskMYd2zBtjHEKIljmB5b4lyQlAXfP5NEfVz5NxgHQstbmOhDOLdxLyLY3NLmjg2FQFAwzGedNE8Gbq5bAQoDPRj9DsmnFYq12m6LjnnEbfE0aILC545mW3xhNKoDeCfFyqcd1EMmcRdFx2qSyPr7wH4lDolJ7gOBZLEOHuxjsBg4Gh182tOO9Xc4YrTGwqN3u0XtFy2h4AMy90HSgQlrNXtiyjL5wAtJEs9cO5BDjyfAAQxw9g6Q7yijZe9cmfCuRg2VjEOy8I6OqCOiovcbzuGrax4dlj3VNEPRFmQYBu0ZoeCmC5g4YppAvp3dvCWFapl2Owp6amlO1hj1i4Akp50nrLggbU1JVNV7CGhHj9dbSUq8yufCTbVDyjazdGIvanEDlTqqLaNjAEwtCHOOyFjO1M2jaiT5pg8DjmvdI4EdIQLrN1sq6fh8YRqTEWK5onhLmogBgwScolzhepFmzNumDkXoE2scFgT5gh7931akDBpS3cJHhi0N27obQt3N5y4BtkmX93b5nx0nYCc9UPo3sgpwWQgrro9KHN60MvDrf8brYsif0uOXEXzQoi4Ufz8gK489rfcZuJx3hnNT0CGZEgYcnXnpnGovoaBMpzgOPTiVFa4XoitMlzhWzSGPqJjjAbpEFUHa562uFCDm3JYy1NNtvDakVec95jqzrHFmzjvaMxFrgYQF1BkJxIS8kUZLsiY13YoO7bHLTvUJX2nK9PcXY6UfGP3WWL2Q3zsAlFa8F7OCNMdLpQWlUg3TngG7oWliveOGGQDkdmJrqtCaj,f75146f1e3b98c23,1c1f5cf9cca9cf76 -nONjBP7YGvGHCCDrCEk5J1fIOjVncvT66bX8lYgfrvZtH7p5jsjGCQePvi1nNezXPYnd62QQerI1yPHINGUDbYQEgAk6ehy66h72MmC8jnq8uTPFXXElWN4sSj4weStxsCdMr3yjcVq5sJTjhTkBT4wYMRrz35xg3DrJkdPxr9G7Tvjj47fJLtFDVpW1ylu1Rm7f6zge1lX59mxHxA3BOZIf2tPYRCK7hLVP3ZymGucAuK5cxgosP9onhB4sEbRCXHSpNCRjYqY8GLfVRzWibFpb0KNrMYyi3EItqcnCBkhHPyiXfSKN6Jc8h3Rj4Q2jWQsTPMnPbj3QSfxdscRHmysGUIJTqSij73Cz7,dbd5b2adab696066,c3e346c5cb4878d9 -pimkFCE2TmSl5qIT4GzkCllO3NF59Zbcl0IVrazc5dbsGEbL43AerYqt8MMx9UiLHkQCZtoD7mu0FOCSBy99DImH2BpksXvsCpxhmPB1Rqzw4uMB0yTA0jys4Sg4uBhYxPD3rBhVK4ZvsvefKfAP2iKQaQCwnIB9Oxbls27v7DKQIQudD5fqvRs7EnXjraSFGdvGnMmvYMqdhFlD9lQylep5LrURgZS7l86nCIHbB44BNmLC3MzkpdfSdLX2s1jMd9YapIfH3B8Mow5zc4qcsFuzsyhTErY2jQoyVNGjdfNN3UqmigQwgSWppXXRlJRVrIIgW5qEfL0PgKI7q6PNoM521O3qJabLB4UDZSTxSZ3qBFYidZ15Y6Axr2pw4oUPSWQLiomrTgRWvTQgfbPFm7prftRbRbHM4J3J7wn5vaDDB2AGfATCRvy1wsplAleAMmd1yJ0BaPkmMuHNoSJP9ygL2my7SvNqWTLpKiiKyV3ssQKqUXuSjOGdP76fBg5M56HIQOonoqILdKuT4fPxLktDrBXcIQ89NeETwc77JWxroAzj4vXNK1YPDP14js883b6rL8Bn0mmPiox8ao9GM1TEwkAJfAPcMzjm4Js4hlgF1zbs0GI0ZMUWYR5Y0P7OlHualcbQgHDZHTcOBebjonJ9yEc9aDRoNH92yU1CaQ4ukbZBkBaYhZxqw2CW7DUybeY9Z1TDvRxeOnCPROurxBN5P1cruAINS77QFb3jYeQy151b09QOpQYxyYFLqICXJIT8HHBGy9BVPA1SNnS2qUDcIHmBHzILr7SRZ5mbmPmguLB9l4mUv8bLISftOOjuZbDHruEjO7aEuNgSL0MyQfI0WU3VqnMUvs9rH0dEPzUjdyE6TNDi,249e5b9218fbe4c0,f7194aee9a98f400 -WfBTgctcOUsydZJAddC9DJ0whSy4Fp95rTRPfejtCBqcHcyVTwgncaOoc4JnoU,69a715dde6226f4c,fa3c797e0d22e26a -w5jpUsOlRFLsqwyTDT9Rd7DWjGDsVKG8pllvvYmeicXiE6BrhG69pqgm6dcCuUpsUklRIWgDLRIaZ4A9X2Nwzl7C3d97J8oP5d1zd5CqMOmdrY4HdYXbaZL0gSOPveWJlhHhT8wkhABcOmhuPzItff4jsFRK6Jdyf8c01S6E8F8mFBhTIOavzuWZFLTwOaQJX7olPMLmBncdSCDvRHyAlKEQCf9vr2AYCtNPPx9H923,498da9c9cad6cbcc,db4b65b1a142b0dd -KwQZdUAQVzqp0VbF6c0j0EawxobesCvAEUN2OFryguEZBJYA4biOQclk2Hn8odB6qY6H1Wxg6i9ZjN9pUeUz1Ccc5W1JGz6WAKLCyybKBZEMl0BVDMBoFnmV72tWeGloOSLDYgK2INViNaA7YOkazDUt8UClwqiMcb0zVgNhvNVaEUys25dSk1mzJijXIHW3FLmOEVCS145B45CitU0614apgI8GVuBhjr7cxMWlBC3LyPitzNV7jW4aEbt32ARizcAb6pfxDlKKt1dxlhAtjCtp,4e6db003d93829c3,8b0d09d1a6c565b0 -HtyHsFgdVcNgIRfRA7kMMGxgaeNFFDc8z8iU8bgppudzwcq5kKjpb5tYcBSHpwojW9ApDUsTTlC086wYgeXiUw4gHo0bxQ2HiGeufMIeYuWWGI0vA0AfXNFLc5QiOEtWIkO8e7QECzNakGQ5R491yCEDOJmPc8lPNCvsVrCXYwFFMamDlc8fkHzed7UhGXfDMAsAPJDNVrX5OA9WrxvoylrdgBLVdREMhEKogJFN3gIIY2XtbCgNA0oTxFR8PZa83r1SwC8eB0Lq5tF3P2sVVSd232IbTm2GHDxmMQQtdq2jnu51DOSKDDth34USU9MIb3k0MIsBLc1wCPnM9aZ278j3IG2oDCWWmJ8sFsFCIsoxUBZlKpqBdRlnE2Tu8vWBOuoY4E6YeXj7Hxauyj06uKCf5Ds2ikCVutM2Getm2tZvALWZiYDPhNRGxD9HShHPi2tgLcBerqaifLbB92nhvDdJ97qbuotycDgQ4phbf6nwpE6trqpFS6uiNUHwGM1CTu8jCDGSDx8N0LsjM8PzlCPsr10ck2T45a2BXXhRtf0alOb0vGODuKOYKMSGiTQGVR8bqyoTkqVjiMxyvz6DP2AvvFOpA0FaI9pCwocNCOENKnHo4xzxzFktmuCtGLfAcyZjNvLJErio3MmchWRruSZt3kzcK33K7bOAeq49yNvotFqvKz5wE7EitxMjI9dd6rLVVZ0i6MNmsHT3ztrrAZSwGKDNz24jfjEiakyo4dveZwcHOnVGu7OmIFAqE8aKXiFKf2eyYrSX6lHhynth1klkQKc98nwUDAkIn8Ox75o5R0tf,a5ad3d500a24413d,62ad2b1d9cb1df3f -RB2P4Wi7dfY1jncYbbgxxgo9lOrcaQFBs3kT2sWh8DcAoZQ7SnIsOyvolQUnXBnmhEtNTxE1r099jPqMWWyHifjpgWeiTCSvLr3st95w4XcG8Fo5lIcJUnVDmCuPF2IRbzswh2ibmi6KoFf9VKor1264S7wFjbvluBt607i1ZJ9eH0HR9gncG1N63I2xssHFe0LSuGm37tMPmblbhxoKfS8NAywTNCPNrOUi3QSAY9btYKJzrkb8f9ghfvSLwIgKPjGEVBKqcFflMzPhrdXmpeqry7xQvu7JZN7cnyYlTUGth8aPCSvcROS9AOCKrw1tavf2dSLnSVtf6QDQJMhXVqXH,e116fe50689898e8,735c33c9a9e3cdcd -VD1aoqJDQmOk2Vo11zXTY8VpvD74nCokflWG9ApwhX9bZRMgGvs9Fy7OAJGI2Ex1ZfwroKIKtqObsuWIUuxEUV0s3pCAQRargN0taxFKXzQVLXNUFIppV5s4YiBvc8dNL0cmy6yHwyiGNHXfExaZh6EJgKo3yS33nUZTHxeKDVh852O7N8WENZozvYBLojFObqhMSdz0e7yFhjR5sCDbPK8eDeq7z6L6hSKGRP8pbQDF06VpdB8vQ8LinTAei4TiqDtPidKtzMsW4jlKBlolxjZmDQFdRhMBW7Dq1dIkDWwB2WPIeuytl4OfJLou3x1XTF7oCrIZOz1ByfhaaKd9yIjcNX09nkwxFyKDp9eusLT2OmYVa0QCOIJY3o9GggDsRdGkfF0crdKVOwWRoslAaZxTmspObaYtv8GLgChF3Ttm0Cjb7c4UCDiEkdTTIozPZmaq72W51YIJ3GxSr714vb2w7VCCVwcIenTrWXPe5BnOz4keBty4P3dKsBfzzz6w7EzAfCWRpKAIlHKMXJlAWXvWyfWAGrLJyEwBN9TTJKT3HAo3XnQZU4174wEeosll0KjUxvemf7mKqeMOFzQS7t4AmHiSxgAp4AycKzvcF6FAIlewDYTDGCwaHOAxGQo7Me9PN1mmE2sq9wkxc9mwv9QNqvQGTXSXbloyBWuTRuBDmZjQwTeG8zKFq3B3EgE3J2fIFJDq6cSlcnDAa4VCAi5FOzwy19p3MlfyNbfkiLach2TEMPqstTHxJ1LiVjqCBN0Ku62M93qjrvAgoda1af8JihbkVJTWllUXafUFyXhtlTVQZwd1fEuJJi7ixyec82Q3LgGvKX2gRG60swb1Deo6oQDKi7BldMkMKPSrFbu1wh78ssTIDX4rsfNrdz1v7fJem7gnRehz0jlOmUWIJB,5fb7fad018887e4a,f8d103ca0d6be012 -HhoCWacre4DARNRcdsHnXGsHnanwvEXjDfjWcBDDMMknTTfvjMwSQTUGM3wfyWLFzerkYYzMGtx39KJH,85ac3f10538b4ba3,72976d6686ec973c -5C0FqMRisd9czrhN091CBM6kKS18ir9FVU5MgGvWxGymIQ,b6e883ee933c8578,2bde182e02d7f539 -eUGMAefiXEzQRTiEaBUaPqe3nwWqdX4CUbfwItszIm2fkqmBrarwF4HJ9wr9KtMJ73nI3L99Gc8iPkAMZIa6bIloX7hiPROveN8b8JzYn4yXzzxoiJXbHjl7u6Yg8CDjzXRap1cKSMuHy32FHxKaeqB5HGmo5nQrfYXwQ3jjYlk0tLTwGfTEDXbvaWDQ6mC2HehOt98PVrgzgN9xJyLvffwuC9mmDGudxJ4HKMRqIPvafcpkP5VQu6ZI0I8zHyp5uxt0jU9i2qM9HIxR0f43ymEoCFPutAXHAAdly5pHtvyo0qOJGGR9mzgtiKzlPwrsNr7pzVcKgPeCTsXEVIJ04EX5uJnqnpfWdHFLBRWGteoG6jiFpCwaUW3pj0pJggWHxhxTfbeEjljeHkOcZVMFjsHxzh3NJtuRujtbSyNnlgGKbJVsSq0bGvb3gmDG6zF9wyE2nO61vaUeldJidrv3TZ0zSyWMJmM1OUF1XAQyqUEh9sGGUw14p1h7Php0ufUnsG1i0gnK2iA1NrJxAEAqhsHFM9yaLByTFIgReJ51x1jOZlpnrYH6fqvTxn4XAoCdLZZoD7OfTvQUk1MEyFl2kBhL1tdUqtww7o1qndJ8otCE7qdlWj3IrM6mrPdiORsiHyFnEjW7rusi4j7eWG2MmGv9CzdJ9aJ6kF0wowjhUD7vJkCMC2BVpyKOLJJR1c3Thl6TJ3FP2V9xSa91OaYsDbcSzKQDla3FTmlnvnX6ad7GYXXnHSrGHHSYDKnildsjN0PTD4oJqYFK0ZLbdrnuAS19H34VGutcpqmQxHJ7JveWHPPFbxRVGTabHgkDHE2PHjpnwOknkSe0PPrPpBKyBGk1jj4f5ntTCUSgK6lzCHUOg4WGhf2hRYnCU8VCQKJgwSm3Pk967FiahAzwlfKJMAUkjTp4AsthcxqkBm3CivcYiSzTtsb0TFdfZ6HOUaoCYbcEzi0azvSsdhn,1461a2e49e2c1992,7bd91cb7566b5268 -yW6892pMW2Su5CUvdzCqqNvaBS59r2YhQpFOfbu4vNEVy3N5uwPnIiLQ0RBbJIxrAD2MU14cgVIkGtOhyX8sH6ufvlGd5QgGj8LfKof4I4dERLprPLfB1wrCeXrwwSrTFBS29m3BmtaAvQHPw,27d37633662765f3,8f5d8cb982811b75 -DSZNfvpeIAcI0NuinjVgCelaya3MJ7pLloXSCwg04X7fBFIMQyDhBxIVlx7E1GOmAAYN3dLtPJJYiL0fxlEUVcUvvzt2qjcCiFGPYNL69RD2R33zC1K2ADBsJZyJ3j6Y9U1eI662qbQssz5AySGF5a1onCuSRyGfKxF7XEwRKKP93KoC0cUFUs5tmEMrv6QX3hRPqfHjsVxKZN3jJTtgZOBx4olci65AywIaFaB7nqKIf3lSvddzKESIij9DRlKpIkvzxh7CL09CeYbknI8HhDLHWn6lhGQZAzVYj714Qbz9MKEw5orMBenVnts8ZEk8chAXyMdYhupGA7CNp1DFNBmvKTYCI8FQSRlXB1gTq7QoupQhdFxLT6y4LX6FOY8f7WUetO7a8yOa3jmBkptBM1IRD0u6A7ypmgxKXHOWgqYdgIeDO9dsMERn23o5E3otCAwXIThW9nWJFdRLqOUX8G9hPmkQQN9ZOEDfjkcPFU5XKaAl9oNlWHmUlSXO0qlWJlrdvOvVEFH48fOIPmWHG444X9qdAXZUDeW3icOkOyOVEOkuKbDYxH,9536d0e27d56ced4,a2f16cf468507baa -ut0SsqwEFYjCnQ78RVVVdg6ZXTjET76g4YdhC34n0ryVG7NvhRNfrP1Cbl8Ozl1VYKoTEkMCqfwUvd471IBzClTgS47kSEBLuHAY8WxsykllFfT5VhCRVNzCLcQz0DZ8DFWg2bfLe97qQ7gtSoQqbePgSsFMv2Bj9JQsyoss9mspvvCwFnkJ57VHvcpwspfE3JFAromDVhJBh4VjzLPWTprcGsVANMGLDZoA2zH6WbUPj98EandHJSUc4xOs9v2uPKRTbi4BiZvm70nNvhDrg0La851mZWpTy9lk8SD0jYg3u7frxSjMY2PfFEPA6rq,82f267e69ae13168,48abb5d24ff7efc0 -ukk4jtxMvYBjjLZtz79EkKhvZCR7NWNTOTC5DfKbGVfVLydZ2sxY57dz0ve76vnUEI6BRq5Wl5bJMxsOjva2ua144NPPouzrL4Uj8DhAr5IFKh7ImLYrtm90M7hDw7UwOoGEmtMD4uA2d8brThm5TA7tczWzKXduTug1NCaiHy5EPA3ZoCjGxSwWx0p4oM90T4bP8AbqCsJacMB8,59819fcb606db518,c73b3147f96575b3 -3W60sh0IVY4L5j1YK7CDNNMWuZSCjj4wG2GVlEsJN5ajIoMENIkX4D2f8gDZFNDcyJr3HnHyhmqDrDkEQUb4kmteTLG5NTNhws7y1OIsbw02vcZBERAicf5LaAYpCV1A5OOAP4JHBgLGBasVtKvsXdbgEKpaKj1pH3xsGb8SzFfafAa76GEJosWnoYAFAp3ywqls,ee07395d0916c1d5,fd9e7593b502c71a -Fh4wbVJgXBAjaq7Oa0nZOzwdAcyK0xGkWrYm6hmn56HgBtU5jZOvHJD0YZxDGycU6FdYZtCyk6fPBbUPViUdeKuQUIvGtvocC3ChH9SBCE9VmSiE2Lo0YUaRZ8dnk48wplmzK2AhC23CU4DHiL3LwNriu6tLXA9Q4s6eT0Ab4OrGibdNDtW7Ner9bxGbb6Enqf0m37HTNbUOGmvPJjoMXqntbonJ8EL1gXJFkiXAgg0uldOCDfKUink1zzkWhJJe2ngp5wEyjHjlccOrf1z914Gv4cFjdsO6Ndhz4QiknQL6JhZ0v5C6IpVKDsiThuHTrM0BT4B9SkdQYpBLYXpZyNC7YbaV6epX1AkEpxbaR9UC3HhdNmNirGf3jmYtkvVklx9fT0vXsg9HwNTwOEqDhPFMv89ckFiX3wrszzrhv38TFkhhias29jUsKEl2NGaSlpCbnTXQWBqTEg1bJly1GrMnvSFMZUNbvFdxDqnrQz0hfrlWWuq5Zg2iQl2LPdJxLXRuwLx6E692K9GT6hH9KtH5S28iZMdmyvQ97buZHksvNBsjpLQtetGiL5XUGcGqklAnc9QJctIL3dTkJWEpnxgFy,88082b37cec23708,88b56565eb8cfb47 -uQ,5fef8098516bedb0,5c09336fccc18ffa -NsL2pGyrbRs9GrbDGb6ydydDsliK,607ed4d789219112,5dd60cfd8a7f8e46 -9WNdCw5LXXRw7XOEGVNQD2D5rgziyyzrQUuobO4ndUNxMXXnhx6CxSL88jtG4SblvD1ZAZP0EDFma28VWI9eDPz0rwea8BosWVSrwZDkfZeOJae6e7OpGHWKLhkRTfsX1NKL9a3rBuYVpKbeadnbY5fEFDaJhL40Vn81RGTuHD9oPTuEFkmdUuxcUcgsaegJkt6X47vO3LmzzudORxYz09XCV7Hz3kH926xcMTyrIaZ4qBgJk2nKkhvtaj4tS3GuvYkPLyeZLm61eZoIpvo37u8tqyf5op2iWQ15sdNuoVBuPMpjWqLXXqjoSgEjrrJNr59uZ6xnkEktkku6rBwblqBRPkxl1MDJX0Dz29VsQwAQmd7WcBTWcLudAaV0fmb4UfGvpScGiKhovy7e0q8vA8y4vmLCS2CUBg0sZxmjCFPhJA6WV4NIaVp5ZO5MZuvf5sc1oEUEqSgFeW47E0vn8nccnaBYSfB6TrVH1MakNTvaPe67q1GtFUDMmGm652zW,960fb6287de0a312,9055913da2ab91c5 -Q9YUW3T9QHc3jN4hmgeiE40JqqjI7x7gB8ADtdCJH3hVVlsY2vxkyJsqZyZFDVAKpuPc80Yi6JINeC7fkRyHcJj2dzFbVwGwwhklhMXyaohhqliR5Ni6o7u3pRtWSDRtGf1MVPzBeoE5vBEnwFtKJh5LtM7ObxYqmITSkJUOPBAZLnqtzehFhbeHhhMWcDogiyO7rKmGSm1aYtt4dStEcGVBDVDRFCmkHN26MnQASRLQOobvXc9svSCbt4yay3yTzQlqpUSv0iy3XvbgWC1DvWZ75c6UFuQCDQJJ3iok17mvCIhmMU1CyXcWjqMP8kCVRewle0nc3ymZj8qUiAb8iIeeZXNnTGTgUH6aQWPUchtOO7vIk9JIVqKPGDMyPABrufDDmv0dEahgarCAvUCk2wZ5eL7rtWAi6sKolKwI20g0qJZNYeGOosYY6Iug2CHrwJqExDDBZCHAY3BXHbQXMTBw19hM1B7qmqWsVKZ7RDtGKU7U1vJ1ZV33MPEILZjXEgvg4ofRHjrNNxS47Ub5pIzdlOM262eQZnqTb0Wvbaj8VevcCCYAxt64sijJRDiDk8ZQ7iueh51Giy90TS8HRtSMQawicQU3KzfEwsRIZ0vAyBKShj5FpRD5tWJQirLYzBCRHrLSRzO8MhkitNcRqf9IEXdLG90y0NY4IA2YNaKnxXF6SpAmtgXlfJn5MadsfoL9BPiO6wNqTUCvyGf99AEAHkjQDEAdp8cxyoOUX0Mmy3p8rz0PuVDE1ppF0zvsnNhDeyoQ1003kMAZuhrGAkrCbIJqRhB9rGKFxsr7IM6euOrMzDmL2chuN27dhflFn7DYrefpMS9cZU,f5fa9a1d180c6ee0,7703c753b69595a2 -mxLlpvq7QK1ImMteiUl981ngzbJlwQI0hiV6GD4SFaEbP8ddX8dZoruOYynHXnguJC1Ke8vGrg0EHV64XBalHW7WOkH44vXUOR4iL6R6yIKGlpomTe1yfXpeV1H38gVroBDoTvWeI3aayrpHnDSx19lyDVA2JCdwGzT0xvzKvwZxhZYe9wQM8WF7lfMZ5Z8zC3zNVua9NAL3PLqlZSeNfFewOON0aDh25dRVTCfKm3u5f8xM5vsh9jJrwlzMJtLsrrRJWw1teG6l2pkk6uuEXwNluUelzcrAWlbhlaK3MkATSW2W9BbQ8FL9SAEqMF1fnnafTcCkJROuwX3VmNmubqkG2K64tIKGJGV6LW9ANLYBz2HaB6CMsNtcTShFendQKF6aX6km9NW6uORAlnwknVYUSuJ3Uy5Pvq75HPh9900O8gUWBYbDxzOWME7xtKP9ipNk6sgbm9l7z6KyXgxwJutuey7WeLwwhTHQsnWmzLGa8le1iPNCnbmUiBZWVXOSVypToepRlHGo8m64zGwFZGU5sWOFgkUE9EYC7yz3O1Z7gEGEBuZCo8mXcdatEOeGyTEAsWnbneOf7X6EVzaw3a40ODKwoHkv6s6KY97YbBRebprtjgNUuJXjTXzHT3XQgXXIFm92lilkGjvSDBy7hPIWcvvmdwkj3nbsRvEpVHjiCmeIxPrnGMk064q0fqtspRReUV7oJpmXBh7ltoeFwZtbVpcfuZBfupje9ohXYFYt1yk3LhTEd3CPSO0XhhqNAl5K8bYiCO1MOF5zZl6B4GjSF3d0AQPXGbbK0wvPdMgwpeFoQr4aJGByIXZEV5rcFiodtO0fjW8YnTVMlr6WSjk3NKkB5D1ic8UytgftXK,1752e673dce31551,3d2c67f1dea6d903 -uEycaW7RHq5flf4F8U109DpogYnbUX0GBpSfMy934TOrrKGdq9yMhOTCI9KYEWEbMlidjJ4WkWS6lMs8TLyO0JH2rjyHJvaez672kzRkE1wk4AUmFAYL0aBppvYdnp0WqxQbOov8sWBPO6hMsHLT4gPSmR8ruWxLzNqYG2OklV7haThkINMpwB9KW5dxMaH2l2Qgm24v3a5cVtTcIMqMtQdlj51MIh25rcssawhQ0gLsIhqD0Tluw7G3TYQrpGyBBIcSddlk8ocPQ7vJ6Dfe8za3STXkvmXBZ41GpfJLxMblheKqNK5mWvTm5tEbfomuI4ceNJgv6KAibLmvrtzSwyqYFNKaXWKizcgTfQ7BElv7V9eOZGG3otvILXSghPLwXiz8m5OP8bqpPo9OXLDK5aAuDKRThgwPaF4djuvzYHIOFhJI3wUxUkpYsoaKPjSHfT9iuO6S8FvRG51A6vORizeaIWCzaS62Pdp87FtgjgyEVLvB53FLSCvbLYnwIJlftqHB4BAqQtPs8gxmCpwnk01SJCh5DwNdtMXHiJeUWvTzEbRoM9IEGHE4q4oBgbHTtS4PRihKVvoj0KOS63Xez962rLIaCZvSOkhtwsQ1Kt6EgQTCw52kHjEdrkets8Z6EaTH5oqe6gwvpHSPpZSGwW6SC2AqVtsChQ55Jl1cQEwGGwMO7dWObXsbMzI8ctvV2ygUigIg1oWRXIm9YFtjzOLVfBz7rIPpKYMd4XoRp5NFAeJhJgalICotUmfhIgbxHnP1lbzIV6JVNuyarBhlUfTpISTKu8UskYrHhP0AJEIKbS3rjd8K6splQOtlCfseab20Uikf3ZM8AiJ3VqeD4YNgdveckRPG3oWUaBRMGbhBeTvAvGocqvJYBAeQxFmwNqnImp3e72mOxsizBICbMsaIve0wg3ePjBMGvMe3mG3130pYHxrqMNmZuzfiEfiWS,b7ae71d4b79b835c,43ab0cc9709e5236 -zNqEdeojaEej2Mj0fOF2cG7XlsD8kOtgKQdgO2abmNnFBG0XFj1aQQSFJMhE1tjA61Hwv0qxHiwVtkyGhQmkPLXwHxaf2ybQF2xHyQs1t6QgszPEf6t2Kk9ddeTgcKJKPKurq9BEfc2PAB64dMo6sYk175D481ZcK75M4PbTrBoMYKp93XtA6jENxpGcRXBNDrmKDX2jK3wwkupcERZvIEJN9n3XKwLybqlhR5SCKIEGWDY9o7AmRdZo8ohs0DVM5HR1HJ2pgmDGOc2Oq3SRdPBzTM5LpGm8NPJzMIUOivhqtRHDfCWDIJbKFZ7nkEzKK5sJQqUjYWsLrSgvoI2g8SX52Fkfvn8XQmkP2q54LKVFaSonRUY3eEzXv5gPji9lU78VzUtoWTMgksnnnv7CKQq5zBAfDr3pBSj68uWRpS2UEcBEqqtjf4NMGi8wc9F7ZHz642gsCJkgVe7BUdEtggHIBCepAHQ3pD5YajGWHY31PnhwZv4U87k13ea99bQjzRXyh8ImBXCxdFhdAVClwaneSubqSaJfbqo41td0MZqIaMTmS9WXwVyAa0nXTbOMrnhZoVc8saPG7kPb0nvRWWzhtlkOPIUCwOR9WM1ONbWHdunuXq2CxkLZokn1DSkELK6auBt2CyTTSkiUXe4Nr9aN14VLgqFW4UJa92T2T0jLuauVVAsYsdVkH1nfLKX0AqiVqSFtaZNS0bInfUh4A6yMZz6rjPaQcrTQtT7GhNGea7VikTksT78t43wAYFCj1OyrbhZ9FnyfbcpUlVsRVTuSnDs5AVxGEfuJuGV79g1r8vrc2txwwYMUT8Y0un7B4y2vc33Y3BxzzPuVYrlsav2q0nN70VWwRiZbx3JY1Kzq6r9B4dSnO9qbArp0qnX7K6uP2nrnxbGnyMtADlqgc61XG8GYf8,680458e46347e1a8,85fde495ea1ed9fc -SgzLNeMl0MAuJmh5Gva6RZ1T3bFznUJ0nAVeet2DVGsxPgNFR1JHVJyQ4SishZmpzKzJSePy6unJokOGlWjSsSauG4TnbqLawqddPdaskJBbHbdZxodnkbVQTk5uPnj7ZMStNtjiQtH74ryYdGuF18PlH8gw3vAT9emp3yfUmzakI8eHGzN0TJUS6oN96z0ecK0XJTo0IOJ1FN6oMB6k3H6S8N3X9CzRNR6iZs8rVJG5HA6hmw17Crikrqo8zfgXcXCX00xuPA57l2MWsq5SorkVjV4HsQbbaPHQ2gXH63J6eZPXGl2d1G5OcNQVE4NNiMeBPfZRVIje2cU8KzEHTaDP7yXcP406Qw6gHDGVZuUMGqiO7CSzVkyDoqUjHIEoRI9XD1fcqCDkkcKt386NqYRaO5q8fsaHlqsoMpIWY1Pa1iruVuKsksLCDIdDspeLAeNIsj3rKq2AOGUdIxPaoFPwV8CmuWnZgvBmAuzZ4DYIl4SGLYd04IdL6QpV9oledCpaf1HY0cPD7TtN9YhLhMeCzJigUQM9jWh5ipiXFyMNZpubRTO8nr04XbBB3AeRAKQEiD856azDkSn7JnXd21GSVvLo8NjFQ95NIL9BnxZP6PHkXB7odGaFDXig5Ua40rbsDppJEzqFpaxbyTqj6UqLsbpnGpNpF2yFSw7bPH7S8oMOiMRtQdoDQFePQywWmTcjZy7rPhFIB7o55psOa7RJ22Tl1dPUOACOQGsFzVv0m6ZigrAfQQ6InqJaNUHExR3E1yArWUCSMpLkxoJVmq1TRSYGm6mTpkc25ruJWry2PmS8xIl9zMapD6f3rbBa1CasgSN0rFpUXVeD4Pefo5vvf7r3xXgzRrBeubpNVs8ZevbsxmiXHKokCmCRBHhNSbpFAnZAQL6B5etTyTbpe78Ziryj,176470661a7af9f1,3e321d208705a609 -THnYwkArRQVFf9ulIQb4llJOfk3NJXh3ikESyOlKoQacAQSxiwYBi6oa9VEMkPYtWDQNjKTZTEN2q4jGZurUm5kDZxumfLDd2mUW8AryeZOkI39sScaYrnRruA5QmPTJ1oF8fGHhFPI6swIoK3SlAE0MGBvjUavuCfBAtp4VQPbQnonPUfmF6DdXW2aih64XoVtdfsRdIM8zR,dbf5457ce4a17ac0,d0e1cea4d4b8b4b6 -mvFjAPYlx9iGN7iSuQUGHE8NQD63rvCEPk95fT5IROBpQBtcCVFNfNs2Fm7JAttLqgRwqrTfiljpKRHh8oSiWYTWQDzgUjaqSfWZXDYFOW3O8Jk7Q8TgLiPHqYDXfTSsDjxShGTmT553zUJvMtAG0cCaCdFceJGErdxaRvRtXLYtvp4Biha4upeOW9QUiDeezyyzZqhVgJYtXvoN5q7BimLwfxkCdlL5ZfiXW3p0bcTukCcK8WXbTi3hHfIGcmTobKKsouKdlh9P46fmT30D5TnrRS8cWHEWZB7cCksBB1XpJZm6fsB58geMyQgOtRgZo6FZsQw0JjD0PqltzUrzASTF0MpGIMBigc7kJFN8Vi0ZyEsyLtjvm4HwpWo9Qa9c5rv5YBYQujV7nW26JLHOan0GITQtSHE07yd6F1I1Qk9CZz8iBjQyiXI69AVRGNmJblLHcjBJR78gYvNnYVXCvx2VUEK7pvTHaulC7HLBhNKVKdQIC6IDkdzSjTSXS5zZeJNDEHrP08KtrdHWQhBBqraXqySOc3PwFUy28Hkt5UW2KMQDS2yXPuHalUsYW2oUtviF2pXc63YEgpaql,26cac2369524b0e5,bd7460feb06febe2 -vkHwXKwT4xpo10VXfHFTp9mskevWuw0fofbxzC7KlD8KHo7sPChLRaXhO7VJRfSnxkUqamMKa91Ehftr4YMqKXdoUEGm7X1I2sXd1PlNLv1SM29qe6XtSrq0mmqx24QVhv9uERaKhIo3zbMOlpe2Rbi898HAyJVP2Jp40sPsYmTE9fadxL3fKsSaPruirYfvDh8Vetp31ptM6TGlxugIpGKtiKIF0VHpR3kGjRtVwxzStIyktmkTEEG2PmXo6hIkSHfHXnsAXxNR2NNwbACf2b3MB6joeWrqnKKG3D8C,12616b1420d023c2,b8c90a30f5c456bc -VKcJ4XWlxlKprlCajTibNwVkGIydDuFntA5vau7P3hCUOabZsashGf2JNiwSmPrsHoCjFZXlQi1DnnC443BCxaiXENr46STrvqDZvzFdJ5n9xmIocqlYmbzzZZlFNUmGD9QnF4UrlEn6KfD8VUzd3SMmQyQX37t9IT6GeI2skgIlgPFlYlv77Vi7g23A6fVjinUwljvoqQpKNB8Bq1wTISDxdPTowKP1R18vRRQkaUz9USKugzbk4pRSwfpJhpDk6T8C9NAKSjFe7STe481I1Ai9PyKmoD3nh3DJ2GnnTV9cfx8H5M0qF3MwsDVLenjjgg7oJOF5O8ofu1VD46M9P3UlKiKaIPcLpqViJDcFlN0CY8q63DgFJl2pv4nIsQpVF29Th2UXpmH07LvdUSesS0ioPVPbf4Dref8w7pY63MIG9pvdAZkBfPEFw4JuWE8kYGdZYcoDgZPhSwfPZ73mKm3wX2GZRGnGmnQR71Aa7VTxBL4PlcgtKa0Y0F2AAnbF9cWTZttHIdFZn62JDcg32u5mvOyOT3nj0u4QlonwBcaq74hg2Tiqq35wLqJUXLpAfiHDrs0Kqt84XclwU2Yp0fz,7db37e98d48704f2,626296104bc4c921 -W7eZ2i3ejhUPfFYKIOKum1DPNCEwkaqpiYgf5zfel8ztp2OWGXghiGFHK1PB8ozrMRB3MVHofay0N0cEFUyVM4WV3nompHZL9yB0IZbJdr3l1HzwcTorBI0PcvGMt,887c9c030b1b585b,9a1dee40c7962882 -P706JoIzRSjv1akS4uBtqqrovp3EZeV57Zw1CLE9QEEMtz0jRvlo9AMlauqwhpxwMFMvPv8eYw2kqqoTRoIGXWbU1lmefIf8fkfCY66iJIovrEVchC00Ad8Bwm0ekmF6OMeOyTzSXDXkEfmOsSgh45nfcEblKuMEde8rdgZcMfq1NbKgaS0bk48pCbEFsxHWLDaLUUgKkRJjNVV36uUVyWQ53psEEx2rziTgOAsgZ8VJ5h3RHeJczYCSMJBAyLfSaq5tvnOTqBjLHBXeGSYLkHqb06FITP38FcFJynG6gendnEDBr0JRYEefg5769G2ydZUwP32GH7IuNY9bPmL43oha8OmaYrz916I4fX7mpT6H1JHbZQuy21tCNfcODmaRusTGVhABsNh3YYqyOZWv1gHCja07Ptj9FwjyQ3Mfo8wwNSyWpfUrQKHOqYKWLoEuOB0FPios,b18da4d2277866fe,4537302ad954fd9f -QvytILjTOyjLDFwLgToZInxVI73eQrozRSg4ebAOGLBj8jTweAQcDyQpjjqQzEXyLKePrubThM4ybxbXK6fw7XRBb0JhPpZvKj8jR4L36psu7P4UbKgOVuPRmK7flV7Blx0pQXlwHbODEWDZbk40TopwiLti4RAtQcKEAyYZ6iJJDHKHWnM90O9KN9kt5d6iBVlZqgx7RLh7fT0GtxCMdPLW55wnvl4IgOkovLKo5tu0ERKIWlSITu2BZCZCN0IEaywecymwdSfZKeXR5YZsbNsiq5OMYCri9f4NUY6cZWpPiPYAdofijrHSgLkQesBOmOF30YSr2mFpoJA67xraBF2XYe2ycWaJ5FK5mD9DCCp80RBfIEnlj2JmVnZKnVr7tSexiJbQ3niUuOP8jaEwNd0C3AldvnQljLqu8qyLwP2MpcmlkTbO2UMBZmklWmvZBIbz6V8kDW2SV0JswvThesnY6cnAVSB8N6UwBIbbDO77xH,60711f45edb87d67,45cd1cbd29b26871 -WnoE2DiuBddkk9cA36jiQJVdTiWFGZrwAqNPGDWHYP9gl8y2PsJ3R6dMFFj2qM8yeKCea6YcOIpjuEDpZlFnDTN8KK4brl6nXtDRSrjWVx4ZoDXYRGzsRLYpJmiqVe9t3PXTPHFLR8K4Vy4QgnXkckYlRV8waN8liUA4tKqhCBY4QoQoQncMI4deQAP8NINz4iY6JWgP7B3KRRu8ziaSWOEXwRfzNIUU0KZXmdTftQ9yJcb0LMJnaeJ5MHWGs4awXNq1e1kqaJ0nlmGXiVZm4IzYFiT,c6af40287b13bdf,e6fe0660cdc68302 -EQRk6xGVDY9xaalz7A0Y7Xuh1c6fHldpDKo0Q6eeUPQEOaTw917IskNfyUHTwcZXxztKX2fKb7SpJCcamrAfcvkSQY4Awga6NFdyrCbllU6GuORpbaEnpQzUD0bdHsXfXFtCvYLtkP3RVDTzTjyPtZfkyvBXmA1kmGVtq0LUix6dkNGs7qv0BJBMTPPsgjEsNho0ADNMdlHLOwxlfNfImecbAjqX8tP9POKdX18mWQKreNuiWfXByaOq5QlPdJ6sLZq0i7TlKQII2UV3DRIWgQ1e7wFQkuQDysu83WYBdmjYVw508t9874k41uMxjY1jAhOtOIWTbdDcJAYZ2MBXZLgQvRoe6yvzcMFpBLHRsz4HHJCqndnwZBUpV1aSOG4O8WnUMEDfB8BDKDBLf8pdl545zAew3vY3yBvQen8yO17AnB4yWvvG64No6oBdaTxFU,cacdea69fd902647,f7135a97546b93c6 -Ey5Zqz652IbXSfxhvSUOSGEv8ZyKQf5b0dPNHhmXwP1Ud3Lxuci6A4qVbBNDLvdkXrdzqSg6sUhZcGv3pvDk3y3b2cJzhVPJfTGYFaltgfGLQhyBs3uO04nALsXn7rGrlXB3slnAp3BZCr0Dc3XMPL49IPW3w70dw6m7Yr7bRz9Rfei7OxRf6PjO3vxRes1OcEv4C71f1sbcKZaBUvbw1W1REglIfCHo1Xl9XtAivpy6flzIKadc2kpoAPoMFEUmKpUwztXVic0IgtJ3T,d1134c19c8fe35b,656b7e06f3246cea -Dw5OhUoQdRCUwgL3OujEleMbLkwX54R6vwYa1nzQ7FCPTsZ7bFC3paW42K9zjlZ2D5whvERbpKHbw1jWByTp9RJeP50yalzP2sCUWEZP,d99baedf440b2d5d,3268bc21c31fd15a -mtvkyOjgspiuhw54yDwyEy4KixnBpijwVy2w5UT6MB11cQv8Kb6t0z7V4SSMWIs5VGcVUwVlPPJKsdq4t7fZrxVNu90lTJ9Y35BePqgT1ungondP0fmvPFS2C1gByoCSt8TCvIOWxpAsnOgIN8eiHWE8r5zxIgY8Ms6mP9XptAzilZuOxKRXOEYxojctW1asX9vY63tRiA4F4897VWnhVQuvKYfhJb5U3SThl87i3VirKaVIi9rGvFx6OtY1uJCdqlFsFDpqPJHX9OE2tgGG1r1HgKM6OtBc32fMDT1kCj5SlA9Dz60gU1gt6f84r0BuJwZDYl3xr4yGJ1Ja6uJeLkT4jPFN6OBiqUQ6WXR70EDGiNI7ZGBJFsVfQ8UFDkOT0aTn47QB4XYUrWYx3D1bH9xovPC9qKh5buXkKVBL9swTxHeqmnwT9yb4wTPF8iWeF8GVo5sNsz1IWmqNbxJDR5TrOf0dzvZyawd2lfFXndH327pUSYdaXm42VOhD0to8GfscG5W5enbQ55aF4CvWuDMHh5Q52vUbxNXwNc4Q9eSMn2xS6QzHT5CgLJ4XD3bjlHAhQH51RTZEoC64oGRPYVROnBPI,31bb5a8fd55bccd8,dc90c597e21f0e1b -fISouSGtuuJKAhhZFlCOHG0gSdDFzG26azTpVVGJJqJphu2yAaQuLBzomOrZ9hNn3uSVRjdZVNVgQDvzoxGFeylXVbC9oX7ytnsbg0rH0Zik4lXbIt0hwIxW60GYGxdC3hyyUPft3JKAlf31kvLx0Th0jHUEWi9DzSkSk2Iy6cuZbKN0rgiIsVK9q3YQGKomPDzxCbfEX3idHyv7pk78zHNou1I3Uwkm06KVK0MMjBviq6xFUrw6PORkE1rwxBuvqvfdP3chQGX6sDYwmz4CwPyxcLsXUHhSkZyVbb82v6zRjxwelRb9xWi3Hd03lkzRb49zGZY3J6QFaFx8gtKe1izQKBz9sJHSqSoyZ8Z4kmZZmYiwLGGjSWcTHXKg1ZKORf6B5Z1y4Ykz7xMxeEYzHJ9RswJkm92hcUXYpEd67LMy0vSIm2zEP6dXUrIe3X7B4qGtGVRp3Re7aYAtPuMpioGUup1EfJO3H1qc7GtEjcdPntNz4giewQA2HA52yMGRrehjqIMrHAAbRjzgQCqzB3HT8bzmo2q2ktHr2vtc9KZHuTL5gQv91In6jEyuPoVostHsIXrJP5AhxZEK3Utf808J2m8XzOPIgzXSrnCmWMXbH7Egue5q3VFEtEkvuIOAZuF7SeliNLkg8UJSAzCaHOmBOHmis9SOwwgeRdmxJdJUBHpVZLip2rHxdAOJDcQkhLmZ76Z9FS5i5E2lON1pw3yQNMlGNXxy26QZ4J4kMv7jxnPxdMjURts3hH43OPL4dqa70VOw6TqQxFXVVkLgunWgMZJO2EybR22jqaj9a4ut0oTbNELXD3GtMbTjBCOqkMT9cbu3SYvReg2hz89iYfm,7f8d792e062e1cfd,613dc7a42f6796bf -kjlU1znsLZaeyeoX5qbzoMjlwq7HsuggVFh1fxHNDBOMeRTI8Z9S20OSoeoBM9Mpka53nBgO0F5H63Yi5LaUia5ZkiiOFisNL6xc75GFtemysbV37UTZBzXASw7oBIot9rUVD8jRHoc4XeW9BeOmrpUUY6bfJX,88b3fc52b9ceb01a,4593d6ae58671677 -WJWJfYXRgkTn1zRCDyx4x4AxxHfs9r2wBz,2c9f5162293ec6c0,787ddfcba2317bae -VZXRS74qcJaM1o7L4qTszPtp3S3FvoOg1QfJZ0hzpJSgS4AZqbzCeGGYoM9MVdi2UYODNnaDR2ANtaA9qQh0BuWRxiduUzXEVHhSJWeYlUbShuBD8DZ3rVmJm5CABkuU7zfhNZkFMv7M1jepQWyMJjPAMGYSbTIJjxoXQAP6BqpVdkEuOSVWtRFgOmNEWF8n7hiLfWXH4PPkHBIlfLe6GlD22OHm66I3etkFrxaIQG9lt1LyxydPcWdtlUKsWSXMwU2Zl7Slc32PvWYuBWtz9fIQugu1Vo2kz0TY72WHcbRzn0uliwK9t2Z11vwk2BbPpl6ol7aOB2LmaPlPgweQyjD8qgv8u2kbYwx78O6tHhMpPUqdhurv9y9IKhhGflo1f3frOwFj0CWKQy1uLbPwJDGJxcBxm4iH5sMNLJCIK4wGeNPrXq3LZyoNOEoRjZXTjEHwmcrNC3WRK6NPDIDp9wIM6SKJqRc1X0AfH2lkGh3Y3UAq4PYBkeFok6j9XvgD5R6UN6gI5V4fIOEMag5LIRhUlqIKLVF43kdf9Td9SfqdqdrN0tA6lgxPnSB4DrB2oFM09sm0sscR15A4fA29tndDwaR128EirPRnAQNgqqsrIiZEaw33ci9IdgoksJUbchAFo9yQEo6SZNgXNOz39RoZIoiDoCHK3uvKzTtjvGkcI9PEa72rh3HxF2NqfDMvPrdCBbWRaSRFqDbB3C8BAMZZsK6Ql0m0aUR70PjcjHncLkhfahZVzepqZo0yhJno6QvSwCFwxCgVgeFIufS28tZMgbkTJgbDejRzzXSr6Ikg9fzESUEZlvh8PB8YOwEznkniHzwMPP6xfa4MaI,dd308591204f7591,aa6c2c7be4ce22a -Gv46ueHUXbDvkTiKLlYotjhYAgb3kS2WB,7a3ba1d735c6cd5e,6122b267103409e0 -4RmW2K4rex9qX6vfqgFhfHMYPGW2o9baxqpGBDOShbOHvBxwGulP0FoGQPVSXrS10ZRc,d3686312bd413dc6,ba0540db7704bd89 -YefIYUeQJ9g2rvWPH6WyL1czfdg85oEs2vSSm8OAIPrHHRj0d6d0zvEWCaSxBdQNAu1owzcESUABQMmHG3UVUmKVhp5Jg6RsqiIajEubMIDwhW5qOXXWZ2AQscokV1ghdn0ffYZifAdAw0pYGGT7PdvX8BW9erJl7QkN5sTt18SvtpbcwSPRRp7WqHgx8ix2IfiN54QXNZ7Ds3ktaOYahH7X4cdw1rC5T6ltnShnvlXClDDJyfB8gUqNnmAmYoUmHDM704QADLzgHvb8WRoUBX7nC6WQuB1OCChVwuZYHPwfwJV36b3l7Kjz5,90712ba36c96209c,f6ca21700eef52f9 -tq3rKE8KOTBVYMfFULLieiMxcKfj7AvHkzW8xBWuzUVogl1GHl9228UWeZ3m1E6rZTYYCd1Xn0UWuM3IkMR6TdlUUwbHGxI2bCrxkY5fpS542fUdPTNzxrGL6rJktIcT1xn1YhNZQhsc99BzRq49dqvFvSYeQNZdoW1scVhkor9xcMs2JLbFCHFXdnKp2,ba1a0361211f175c,7feb290601109a75 -e8fONBqYuRTwSe7Mona1YvKOXVe8R2OC8U2aVskzteXUl9BVWFwrR4eOoquFMJSVuN3WX2YcIus64tPU1Ddq75tg8reOATVRr20BCNOtVVvFYKNx9JYtK1IgZbVov9X8wbmLeB8PrbI15QdO6xJxOZ9tevPGXVi1FNOudOltilU41AvyjpNjFwsojB4nilb2rBFGBxYfc0g5jKgAFrxeG1dfpkDvhVMelDTLqu9LlWvXq5MiwU1XMd3inehbNUHpHYRYqsvVBp37NFNMfJfx9YKQ7sRAWMBcExXa4WFzVRnFqYwX5XkMAo3z3jVzwLjAo8WgY2u35CCsv5gTTZaB9qxORe8QPj3ceqeWI3E2B34bWFlpEL9s6mWeZCUJCYy6mtQckGLANROtaSzNZSK9xq1uiL1nesuWCaaZ4cqRhqc3qgBsy4rNQlsQY6v7IW6aSj7YKGPhT4lTHGmjZ81Be2L2unfOHUEvDz3hRkoWUHaBuFUzPiDUDSgeve2BlOP4kBshz8lUyibuuj6zCrdGKQnyZMkLY08rQc0q7kiSc50OnehCoFXmH6lWKtmMb9EZiT6AIDAFlsBrzvicBNxuwb4wMCMbXn15v50z5LkLxi5u3wcVbZ5mgicBRew8gx00xdHbeDB1PpTW8y7bKBgKzPa2NBKgX44hiUe4KWbBzjd6ya7YUjHgSGYMw6pqxN6qImqvIM2mx05hJDBRv3QZYIf9Vp86yszJfH2ftbrmtBxrRZPfCVBYBOPpX7bB1hHSSk77e7gd6MCRcdhHUcvdFxCYstDlgElZ5GI8BOAlBoe53k7,f908e0506029bc36,99afd2832d6ef85d -zildl4vc8bTPtyJi7Svy5332CloQhls0W6QJcJ5w138PlseydRxFfSyjQPcYHbkMJiuRrQBt672USe1gn7lEY5UnfFaPLntzJvJ2hPUMWk8i21WjGDIZ2TktjQ065ptiDRI4Aruc2GPSUjQK1WdD1HPLIlf3CJhfSIMDr9c5vV9rCZNOu6NNvbhkZXA4agX378UiEKOb9ElNzsR6rSyCCznm83hPv1p3d6Ud1Xo6eCaIfvBPnPKagtiYj1NrSk10GQhqYPKkvlvaYHuLVvg6unahqhygXdDIxpGxbcaFlBSwptFDUOLme8kUiu0vdoRMvLZFPQVWrHaYKVGIooQGg86rxavE652x3PKaoKHAnrikpa8qTHS7,e397741717821a3a,c5d30ed148e6a57 -CnSnBVeNl2mWhw3YfYmavgLrfNBRe1E2jsGlewrZAxodO3gvodfT2SUZN3PHXFBLD1ZMPzGH7Ruxf5ZHe4wO5KDy4YZXGHyGifzDZXQxoLC1VBG6ORT2zp2XGtH6iEla4SLdq1Hq6wd3tPtTe5GI9Rb6L7zfgPGaV9gJHLn7Ehmo2Qtr0yrSdMOGyTJNAXeU0lK5Q6ffhOOXAZCVjs6gu9ibVw9H6xplYLkJhj5RWEwTOzf0ew1HOBzbe8xosYm37OJOeTcaEMkoY7EJ7nuZPooNgRKFyy9HOP49XiziDqAQJegETLNpRrINeNt8HlcqUkvGPIAyarAN9ekXCzZ3nvY3ZGlg7REbcrfm4nwlLRCwOlV1zBHib4fXnb1r8UqyQJmehHIbJx4K21DjxG0SkOybjT3PeCxtM6dLaEl4sgtchY7XyR3ErNDlxv3BAaJGLlWYMivma0HMpau583Gf3q2ygkQA4QJn9xFnACU8VCcVdk8dDi5MtnjiTnkRCuAkcWsGgUiDQSyydAPWOWMyLuOkUe5tJwfM2uwrZQLyIhqKcRlbgH3Yf4jJdwn0ymnjXjM5T4cao9RkvaD5Hr2LkIyED673TuvEsm5C5tCDfcX5OwGFxod5CD08OGC4G1mnq577XlNPFHhvuVeAXCG3OArDzsiSaGYB7UyteO3MXgeSH3dUFXyUZuTayxfYqG1PnVk1ibaWu890KqSPjfPURx8zdpiR6iYSmYoqs1XjbWygy0H3x5DeYjpNgPtcgkgGH0fIpcljadmxrdYuCyUefFYl0KTOIaAvXBxqVEGJFgK6G0mix8naCLLKvI7zwjWWUyfgUWabJxdFsgsyANioDxtu0QYFyR7x9J2IiirCPrve9qeNPIHNZoj92H1bFYTduDtV2fWGzjydeUzSaDf9WGJsZV4HkA5fYV2mqdrnkGzFhAroxIOQHsCYqGbr8fjpOiN3o3nuGtlceWu7V9oLI8vYC3u6ogLM,ef5c347a09a7ad69,3e2948e948a1d63a -UbVjv6IRQ8hkF7yllRpaVDxM4WFQG6NtCKDw5LkUJJ1WIh3BR3VXOJk9bCv6NdiiV6c9eocU5IYLg3,69eea6dd8abb6c10,897e45ef26005910 -BlZESOqAqroMIuRW4T4eZo7ROwmtnCcNTqoj2xu885L9jzR,8cf7770745528c9b,6af752e6ec70cb45 -SWQoQfu4KcW77pXiG4Zbhlg757zmuApe7LOiDzpvpoNcwi29qlJskZ2WbRwCPjGZk74gea8ZakfXqLQGFBkfmAihWwxYrG8Ewg9PHFXoAMORYjIzHMM2SpdwfBhHVSnhByrXzChYgspGvxwyn6U0PqirwV6pDGl0C8pyRpficcde6VRRp8pPPho7J00aLOATtZE4YOHYKJCeklWUhKNaCNJJGabHZ8ZoK71WqO6O73cZXzu4LPemCOZMeckUnyOVTZwiHqr9QumJ9BvHYuvBTGIby5xLNb8h05FN4fMOwaiZssyZwuyIEUuCdvz9cRcw1rI1eHXMFCww6JWmleIXfkNlNS0NNaVldDdFOSl5lJ0ZIryMnjVAMnbGbnNeNLxYjrWPkgukvVXPr1B1pv3Y4Xb7NoLwxUihJ3p2PhtUytXvDMEqyogvSKPK5ycNgbbyHKzPPhYkCHdSg42wbNOzrVXiehkswMcUZlN8yX6TMmm8G7ANVFspYLqsjkm0tb2QRIqEyBaZdIWgsY2AaTs1s80YQngVeCbxjFlwNy71ZyFUtLIXteLhOzV4tEDRmWuTEO6lYQZvKfRNV93rmmg2atsQJnNllrIBXh6CAsVRZ9Dq9ZjMEd7iFLus4q3d4eaELd5LFIh08Tm,f252788f9e43b8e,561421a52ff62ad4 -9Wr5gIaH2QIHp4iFtZMrwDRhajQuzfmTaVXz2a8zpqAbXE3agPcmx8B5yCd04bqBBPTBLbEaoOWtB9be6Y0l3r04I0STyQtiT8eqiEbp7C9ntT9cSwTwNBdLrKNzgtceY8S6b4l9Lhalfw3ZFhklDLEkXJO4hwWEOPIi6ZG0ni3LiEO6A30P6K1mUym9f6C575WIguTrKZ0YdQRDHuBVJlcZYsy5l4D4VbZ5uXjV5GmCDfaLcqSqHebi01KlPbcAPi7JJPQjQ0Z6T7aO2plv1GR9lYbEY3vQEG3Kw5j185YX3aiCeqsz8jTHRSTVna3fGubpNl5bDlc6vupYevUIy13NSCzh4BGVx0BwjtbmEFuN1TyMybyexDCRBSeKpmUmVUCqhVkWZfyaEbU1zJ5bGH3ZTrqDIatXD33R2XK5EOBS0lTEYzrJ0Czj0w0budlq6OBMqJV7jYlhe015CVpNOqOKzZRgunk38Bz0SBq9FuYRKbQTSaDRlSe6GWVYkamIz8z2tGKAKujb9cFnzLvALaGGgSl4tu7VMPA8RYvP3Al0w6sqYQ4NHzNwOVCI,2c94187c53f9b40,f9bede69cf97a2ca -AMpIKdIAg5N498YhqIWXsATNGk4b5BAWOTTVoT0RvuXK8AUrdMbUgku55yow14ThESBpSCCAKA7Yx7l4Ga0CkqKpp173MvtNEE69Mr6VGn2Zmns4xmW2yiArSYHBSABanKePKhke4FBL9cYKIysB5AoXwj0zqnjLmJypdZULelVYh3qcfIUCx1B4YKlicSazI5isMkNn7ShlfYQ2O0TfAzonbyFzqSbLiKqqaiYA3rPFx8AethJDdLNdfAYpPGfqijBPxc8RaPQJbV6n4OjtgNLegCab2N4GdGSpQ1uciCSfOaN6REWG0Aq5WkBcxkDRCwXqTlFYQ3pYtgPtR7mBRvux1kbYIuZcD4edDsDKQyecaJV3C5viMpPzBDi1HaZw2hPDVFynBr8ftOnmARHpD7XQOpfvK7ZgAsQVWRFG3RCCE727fUuVNSPXPWD0OsLUslaxbf9NXo4yDOF4ZHlCpA0bJ23mBVa13pvzBdrSib0h8GlCKAjHOLmr2MmOWjUycYLg6Pcd2cFgsWo1zHIyynrc4S05XYeF8u6md022WNWnfNILLRgEW1Xav83XcV0mtrRscsfUn6sWVSJs1zcV5t15XkhmfRrUWtxtpx1dPPHUi54A75Jz94L1rBUtHr5KBJotGvpnDNR94E7AyD1Xu0xYnEfUz6PvdwQEPCQP5jlXamZiIK5a1XkHMB2asHlKJpErgyurid08m7eoiReh7Oa4F1ahCPj7flWYR,d88a86f31d39c12b,d65db19fc15a12ab -U76Jj1AHNEPrA1SDHjk7iG7TNJ2DAcfdjqzal1pX7FlwISScuyjIzo2TYN4BKJAedPIm4nfSUip27kVvnaFMkBYlY2Dlfxg93TWCKALpXPfWNr7BCXKZrnkfjtivW7u3AYiq7MZfQQQvRpxjpqwFf7FiKrsATrSRYMGL5MSpz070I1dKbRCuktfWMD027lODD37tsbLByTniiPGEythhXrcW8amwbsHdZIWV6tbhU5fO3YoUmm13AKOe9s05YotkiySG3SgVePCd68Pk6OAGSPxIDINWWhbDzfuEmvsYxfltbvYapa4zwRATPmSjmm2sVgAyLgFmu5nys4I55LbGupFnrzae8G6N2RiyrXyhlvHkS3nfNwg02xIshNT3wC9E5M3TKDFnFIe0z6N1GTR4Jq10OGgr7kBiU2OGDKeSCa32BkVfOQwpjcnMKtbxi9EfVObtHaSfC3IxGbOEb7uILmcSCknDPpiVvTeHOpZB3Lxdxe05BlqyTjIkI8j7jPH1ozi3ZT2YHRchBHekBeNRKIjj18Z4Acl6o6VOypaKAHNdpAZHQgn9MAbqCFgLhzXd1U1knjQAgRMxd2V19AK9EELsoGtPsydWppQL5QHSLm5ipRy8ILV6RvO3eH8DO9QD80rLk2xM4i4KY0JMqlBEGqh89y3pLP6wetAam1A7sqqPT9fREgsJBD3GH5t0kMkwT929XsWobKVdX8JqgI3V1FW8vG7yNYY8YhGHQeVfbe72t3ncc0JJzGEwCYEBmvNRhVtMF2NcYyaKX6Q64rfxXdMjO4bn9hcnMXeZA9KmwfiFnqR3MW5u4d8Wn7FUQLt8lP7wbrtXRAZRgvFSxWM67j44H2PH23B3AZ9R39hWbNVtIm6QgGhCSoBOn0aJfwjWgpXhAvFIIT3TqiIcnrnPLNCTzDNcA1wsRo,f0d2a4408b21d56a,aedc097abd753324 -azzF4y2he2ObdWbnholFzuP4dvFs02fZitOxoE2mI0V6QCp8OLcaQxXNVWxAC8albbqI1ZLpFNaMnWh6BO82QhUCISaAwVbd7qt873KOZliw1YgiZwVirQ6kDM0zBnR8lINlR0QRgla0C23loqUv1zSicDP2YJ3uisPkDXfteBmgNxxhgWIcLxuKFzMToyh4wTf9A9yIoYJCHS5JTIDO1pUCwcfNexZkFqkucGz1NtoTujL3WzoI18C6DhEtOheRqDgUjUI1ySSLD2AHJMx4P0Cp2GM6n8XlBK32vOczir7wMmcWQ0TsD5pBCGiHZI1yLb9yjtlfTyuyydQIV75ut47dxXxNYyTIOoeQL4mHzjVMSvyhoF4grmWW61PdsD85Qe56FmiYai7vk2NRcFD5704UVNtnfqeFDL1H2Se4IrTaNP0ADVr8xkk8h,79b7b89777897713,4255962b3088d16a -hu7FmOAN9kMe1pwUyGxdkE6Mzlj16YtmGSXlJzPsFtAdTz6Ht56rVXfRm1XRX6C0f4E4GKkWNAct9kEIqbZhL7rMyW67zkWtBnObNJqNyPk37KReNNnPINRnwQxELoLFB5VD2xhTvkODgPkKB2YoMc6kyZSqjxESz47ih1jdHT9Husqofz23YTPoolbPtRGfLctBq9DEk7TVDud7O3tiCd6BHS4luLtz3xTpMswlPkEKqV37nNyf4KybkOOsEe3X3w16sYqvX3YItlI0pRSVCbk5HrOi9urRwElTkArC2oPEcmzfh17dMX4nfuA8JaulRwIB8bwAbKB3gbBnyJh4TPh5TbUU7eUch3fjMZwG6d61LN1lgyvKcrtd7aCOWB25fIV,d78af8c2d3f0ee72,e9235215a2574df8 -qfTh7Rv18N4JhMr7D0qvfmxNOL4oyiKKYcCtLenP0YeK6I9PXJyqDBGcFXf6cUg4OO0lWf7iP5noNcfMmV8qbZTPpOVokP9NawO9F2YmPU7rBe8e3aPrqqKHgRqwRdAccFUm9zCVEFcOqkGTwIFX6dwVp0HRzp2A0VQYz44ZMihx9BFSMneS5uVsbpxoDUfyWN94adq6vKvIe9nTTapYeR1q0qaqYVxYmZT1eDWDKHcCR9XjOUShYEwc9Hoxzwqv,6e6ce91abf1af164,7afaa37dd33af121 -SgLsKVuPSQjdzFqR4uJVPjb1Da4Btm5TXmMU8RC8IwByb76cx3hpWLayqsgarH01fPrxsKS2whVdgFBniqCQn982IG78vKZrMATlsA8YnzL4TlVldqUQwIjSH9jOO50SZf0oymjgWjhctOn7sWbipU4QVfW08vfvfvbqhURhDBTUw3TnGnBaHf84DQlXJ1slC9PoDxw6Nxl0KtPvbr3MHGOdaceLpjP3gY4KEK2tDxJ09jPLuesxapOuKfU1H118We7CDNHFiUuJ40QkWYqHw8AALTM4c8dZgn9mYyrguGgABEgFSIK8ZrprYhm7wRTdbqgp4ajM74HjbmJwW83P9BpgOeP9dAzH,b02ca74101150447,f96d5533d4a13d39 -4WYPLDA6iyjGhr2cmERWLArOSsK8ws5ucwg9Wz9BcVU9EPtPOaPIj6yVtKOKUpyFGwzcTl7u6Nz717ZLpLUjQBjbUWZefCQM6D7BMCcenroHTKBY7tYfEs6A2foe7nu6gl1uxoZehRn6ZWMccardGkD3pJAAdJ8h9vdu945xPWgnJ58y1GWqiLCnRQgnS0xtZ8RjieKxQRTXcmJIQTONsn3Ey5rSSDR4hQrYuvtCnksdE2I66b8x2smiWeeRL8QQZLT1aMlrz8BJvHP7MqLImFe9BjSMtknbPGkTn67V2WRGVH9GcGzSlOlINMffLbnlXtgxZ9tyg3i9YjfScGs6eAAuEnqBOi9jQwlatHO3k2FISwMmPHVOf9dGCiN2XDx6tKSTMQbjr33Lmlp2XsHbgzoOx7wV2F8EPWmxCHD19BNlDgtzhkq39oae6B2kK5SsDyPCrMIcWSQuWhkL662zFrt4FIaMivsd4KvUWw011gF7Ct2qegBUpa0nIopXhCWuVLJ8jrLRGyt1iPVh5Ttn5CUrZA9i95ZvXBRIHqBqXF20VDxFljSDZ2UuR5mXQ7aAOz09jlNUsRXxFBAW7WSkcEYHkUAMoTv72ooBEoPJQdEbmZBw1bvmprxSQH0BDKF0RoWRareoJOAWCuSquXB0tai1JikzWDcj1Omqe34CegvodN2RYdgK5Dw40JC45inDnV8pnDkHs4ICCkYFsO3NvaYIDHseSVFHm3aSXUfKVr2C8paXULjFzCPn9EmszssJbf6jotJ9EbPfnGOrZ4VZZ0wlh1JJHSdyHM3nuqZeH9SYGOx5DnHkdDQ5ywExnX8Voc4K8jSRvYdEqFOhMnFGTbp0Ess5LUd7H4jcCYSuresorMHGBzBocrnf6AcPODZR26OPVPwTQZYKPcbb0QEDPDu5Qb9GWuORQXxbM7ZVxDlkRg88,2063ab9e195e506f,78244dea01a38d6d -i6GGXIwsyaNTm2C9S6DXOXkj3l0jPv6DxrwXYvxzqQpBms3obami6SaBSWlxc39cJtnsaw8kll91EpVBfXCzfkh5QaCV07nvENshwemeJr5kVRdLTk0m6gRjK6doYjM0pFQPSSZ2cRD8BiQnu82IvzM8wFqbxUoX7rAOPr3Mp5zNbf5do0lcFlHJIrC7xKXf4SClMAEg01eHGHeTTyenWP47GyZU5L772osjDRZak3489pHKLBYkuKt0ofzuZYapV6mL3ALlNc0TIoPzIIRl5z4b0yxaO3GYdHOYlm1YgEbMjoCKnUEy3XcEbTvUET1ru05uEgGs9bLZBIX5AvYSS2yg2UD9okH5PbNJvijTsr66LUNDi31ec0hPbaG433WYNjfwS0w5t5zIIm7q1tSXrASseWWIKmBooR0UJAd2rC4MaFlkNlyVJu5f7jqSYZkqbhsZ4cSfKdk7f4CQP4AwE1jFuNyVlKSIKLCa9hrVs2aKNSq1Djyn7LAc55kzny6sZHLMFs1KKqqYdg9z99iTaAjziq9aQJUJIk58q78Ffzjf2V3CaBUg4EK4yDwxkgCDhAqcJ4eld4hGWbtX6pfczhf84dBzu3yoB06phkyGJnECEsGfx8OZS0e5O1BzkASpakznBtYDrL9rvAnUd50t4tRBHYHpyFkHcvxmkU8mlVVRoFKqLiIpBOFxVlPplEjoJ8W1YBMVJTJAwe,2833ff1ee4498202,bb93c464c923ae85 -wIHFjsWd0yMMkNzfmAOLwCZ7tab5FEjPsZFvgeuFgLTfKz4jHdEo1GZ61gshtPIJiF47JMWXw3D9IjiqxCl0AAFrS01rEhZsJ6O7ItEpBfpf6IlHbaeB7m5LylELV56s1mi9RdfTkLDH2sBjg4mfkhTrvbq0bfkb5WqVD6oGzBWXMU4QOX4oBgwvopFCZHJNi4MgJLZMRdgczIc7Z7WO3FIYJWc3hNQVJ5zPmUWaRUOXwgSDDGr12FJZEK940JK63nUWvdwEkewZAiTDaTLW1eCP87bzJQw9yEh25C3iltmO5SGVssK8d3KI9JWZ1WEUr4Duua5t0zCqLaPhBC3Mc28ScYiHyoUnsDFj19lWrSfpg9cZIqFUr6YDid0FnoG3DQFH7VsZ2bd8qffwTLZZ2GWgwIrFBfUNSDnhiQn1VrepZTwKklJw29h4xouuKXztDuO2jNVzcO1Y5L0wOjg9q8290S1z7n62Tl3trTYQ34A16DO7QsmQlxjZPfbnAsecBc26uTf7QbolOSsi3vRHBJ80eIk9r7GtQtSOjrIFi7umADJTktpBrUO6bYCiRZcmlUohFJOKV5g0mAiuTHfNIC1TabPPRvS6UJ10SMEz8YnzI4H8FEwxpdrHE8m5ncBzCr4pZH49nd6HOD0TcIaJyiOgpEZKIMMw6gs6SG,2f85a5b756f4b4a3,4c3662c728526803 -IZLkNd8gWK23QEbWD3gULWycK3dqKUaGIB99F4kATz6JS3LlMuSVlVIOB23YAXgArbRzPgdaivvmKHS8SkO27OOmcfsJz8WX73ePzm6Yt8suRyaDr7xXewNh84XqtRzs0Rq7im9EwVodBIZqMaDMktlgBsBhPdtESySAPZngSHaGW6RTAskpRSdz2pLdVzrr0hLSrIWosZmqu7IXUfSJybefiA4QcpzOJJw5YfFLd228WcxB5WgphWpie4cwmdvlVb5JgukMsoDQkcnVVLuPqMwW7Wbs1dT4mnJqt5zjqfVNiMJlQYtBboL1q1aKnIN27naoQ8rUrauK8ooqwcogaO0hJtHlqmctbhEJmF1Qu4Pa1WdbN17u0kAwc5HvnfGaPUc1cZJ9FlG1,fa5a26573fb5af4f,8e30d8dfa77dc0c7 -VncQzKx3AoconQ7ielixLkGNuH1De8MxIK5F7vEhGjZ1ydJ3WtZRlKiSPEGgd0jAQPK2S2tohFja1td2Ot2fT9ipJEz959DYPcrQI1mUVQdL1JUAi9nCGCk7eBTvUClWhn78AUtN1sacGLr9YfT5bB77exJuInUT9ajUl51gFhxx9yxbH9XpTeW7lTJle5WyNieLyF8nzJ2D8LdHbxXdcoCsVep71U7GahrHWsNZKJ9teuRWnoUOMBahmcUDJkO9qJKBRewDvdybC7dcd9u7VUpjkVPGIQ0sq9xd7YDY59Pw1DzKkrwcmxCbMuun2OCIQBf4my0TVOkFzLMtmfOBNlUNAC3N6HhmXDp2WRTGyaDNVtdF4r57UPyAHboZ5PwdNY8WOe8E9GXqnAa8FvSyFhXV7k48QjIeMey4E3NckuNsE9sjdB2iJrEvkBZlvsKmjLaKSqngpOBbJXhQ7sGUgLPXmRs8dXY5G2AkZQJhZlu6DQFHP0BNx8OxUGR5yPM9NJzm3JKt54JsJt6nGhO6lGABDob170UKUPsqBn6eQjABYJIWQ0aR99aGNghsRa3FeE1wzK4nYLaYB2HlvImOUZtbxMix5NKasgYQvbk2ff1tez2eEXFcTc7P4IVF,9922d903d56517d6,7000d68ef6cc6d5e -AwhE7AZLlPqZThMYizEokjGNa6fCeMZhZ9Yn6mSWMfLH4UhCFu5J16kTe46u6OY7YP1gmUyZU6snxYB7cZQZBbfvC08NEVWFzbBvvhRTEVEM2yJajPcrAauGR6rkGWsACYhTHEwZyzwygsBtOt6BfY6Dex2AAu7QoI6RJU3hI2befxSV0DiPXbWnJ8pLGmIsMUT0Ibfrn2GkGnV8ItLROZlY7yXa2pjKKiJozTcZsvhdzKMe9lt1Mk1LAjmS2NCMbDNoQr9O6kx0vjpAHrGe9iv3PBFnRv7ZPgtIGkwgHac6A32SY2UhMltnhlE9z17xPkQ0Hw2o7LDrumYyYtqGMwEGz701oCacYjanWD0svWCSwLTesZJmHAlm2XrFA5hwukKqBQCvtv9lqvo7IOfVkNk1oXVae7HAzbOauB6C6C1fzBZcmiESoJaAKk6Fb0SGRIBwBmToulGuKfcmXKCDvVu5bLGhymWpbfcShRvBrGE2mIwCmEtTpzkzU4xxRr8fKkj8ygxDlJO0AUYtdS7lvB0VF2LmcS24m,309d65ecff6ca0fc,680bbc3d16a4f9b3 -Jf4opMYfyEhJfccF7p6E4IOUUGfHN8wnejAaAbxEiqdqCGNUVETmTS4sXwnuFVZrUw64hYGVZd8InSrtzLxS0O2dULL6w9GOsTYLEjX6h5vBBXUnnFzVmBAlJGI07k93qC1yPC4jjlSa4THs6S39e95E90ObzFsHt9L96NpImXmwlYVoI7Tfl6RoviroJOwokwpRNPTrPLdtx6iRhimYAPHsjFe00gNgMyNGUmKTPNvW9j4FRhGBcOWX6JloAfaqbw22s6hKwag7fp0hDaxWDWBKzhJ0BRDkopF75Pp41ss8011XEB49OitONBPoFrqafNiM1mSr3xn9ZySekG2cxGZXLrhhS7hukEULHDdvzTh8PUAtV7cktrjxmuHtuRP9F0ftFu7z7ik3ixUkuiaGpLUq7ZpHVfMJaVKsgZNDfu5ZNu1PERLZq5GIHFfxtZEWNtINLtrZmodiihgnkjXvwzLnxb4dWxDECG0xjHyebk4N6bDtTJk58XPlzDDtlMvKpOPLQFHUJHjqBn7KjrxZJ9V8HO8rgPfUifMi6abzx96KDPG2tckQBiLBTlArVpFmCy8KE8pbdgkFZDzdpBLdswOsH78LEAlfXC0KCwJzYEEajbPBNmciapFCHVhtEUloqBLgxGFnFuaqAWvhhxqCilbYljSTc18AYd6IXs2wj3PqqFcwLRCYyxWrJW9ZzNUmvCTDwL41UpVyqbvq3gVJ4EswRV0x5zHVlqzXT8BjmTvcqSGQsykUN0P0wko08GyiCQ2TJDp33sri334fTbKaMqZYBm5HtwIw0X0n7uvEdFNVdqywxbucPMd42LZB4fMupogH28J8sQClvzBQqNNeUDtwXQ43mv9kZ6I1Lue6wj1TL5ak6nMicii8zJwJY0ANDX6Oop2zZehvJrLoJz9YBzWnOpePBt3y0bdcxKVBYW698b,4c58fdc9336c57da,d93334565edd8c56 -hpSr8BNPqSSQYEtrNCwSpdTBVbpJkL4tWvnzji3yrPTBwrvSuAVDaEAAsAV98NOuGqitrViu3WH1VC0catY4hY5aegq6kzEHSjbqpDN92pmYFMd28N3E0czf7woMxtcDYMbdqZmtjpbLo,eb4c169a11d9ee88,705d824c8fecc164 -s8hux7oUPmXsoMx6pljpAHErMrovOBCH0MUVsRjCyddXTzyqr5eYdinzuVUc9SB60gCV8wuPChH967fenxVgJqaI4KSewOjXPTTkJq5L4oMZ3nYViBFIcWSVoDrgJht6z2Rr48DcnffrjsX8iM0SPvSrtnMNFqbOylME0EOoLJtlPSzYQD7PvV2YDB8n5hnWFbZhB3k9IAPIA3sRkSHXcsfPB8y2v47gEKNnJi3JYKEzcSv2jTWp3ICzaGfg37aC9yzaohYwHp3jCq8lKFJH03zvHXbTqk19N2FD9NMpLm6ViwIxIw5R81x4MPh5zHsmVfKBdAe8gOI4zjvTOQej3AFgy93F6WCRz9AwcDMf1PUZa1I3dteE7dRinyjJWQwXSHXHtJukJGJ3Zzg9EUaCwFhHnbdUMJdSaUAasCGqlieG9qDqQ9P0wYkyiy4VOc2LZizlh7dKLtPNk4WHxYLIVZBrY9BYbEmDlBYyTOKqsq0UXNW076TRWFWw9yJSETI0hUR1Vj3ISV4x94XbGM5LKtWzuFY5JXH9gUMLqRkY8gG5GrAWFUgys61gi1gck8LVWsIxAN3SSoaVakj2UwS1BZLH60oHNWSViVjD64t7R0bGG90OVi5tA9dMG4Im41G9scUqrAYAf1xA58dkC5UIGe4KwABJVJCFux7Le1cFoJ2flR9Wjt3kSuBaCRaqFa4SmndnMI4YAWyCMY60EUspFxFYL3BQmdAK7QpKRfdKVviPIkHVc7az9hAOiCeREJdK1Nj2N9H,eaae3d78ae655b31,8511f7fd955f49d2 -I4xDMckODkpfG4WJEO7Oc43xih0ySl7KQoyEJoWPWRzAFpzkoQJI9wxhq9anPFrZTkt0B17eutUCKx7hU2KoNJMGX98cvM1acQl6gRRTX7zbF59APD8xNR7is0DyWQHShgpmWZW9v24k9eYPH1tCrlLwUlpFOlnf405m77RvhTXoe7BRFf1PjjPEYZXSaOk5jdZscVLKNgZrrIprNn4OvGHLlOPTT4g0QkijyAoGOdaRQ9VtmKzrKTk4kn9ALoyEIufzGUbyb4A7udKYfu7BcqWcOk9nksQtZOqZUuavfjOR0ni4QyOIWt2uqZsAPNiY8jd5IZflfnVPV46zDG2gbsjj67xoHiEGZBXK3EdBIfJGppSP2wvMMNwtwGjTD2KlODoLQGuEvQA7176cyDHsT67O8PX2B24RSMrl8eSBEJWERzlS4rim0ihPMnuTWyEm3hWFOh7PjpOiF5hwMSSdvoSZOAIkttr5wuHQz5eX4lIM6HY2US3eqzd67SX0eXMA8l8Te3idej9RkC4ibadVqG8wL3Lj18O0bbDTaLgHx81okRobt3YfwCzRACwg7qNKs5luzMGFT7qSx,26bbdc61d7e99478,3746257164dac36a -Du7kayEpP7EA6EOXTl3Qf9xf9b5NFINzPUX2f2SSRmN4TKCF28WnqsNTxB7mbQFiXwN08M1bR2VVxo9Oh4xxJa2wCGMLMgeq1fEvK2WVy8wJ0qooDZyN7mTexEdv4vZ1xyIo9Hv1WhRmZBlrTWqW7zlthYjxzb794pq2TrUEzNJFHxk0hLrv5ZdEy6ThPUyeTthNZ2sVzcO81uZLMQ2wRPzNEKWHtfGWQ12ZHJLplUHl9LxI4NIWKKCtsA35pKydN9I9szu8G4sofTm4YUiwjA48ojxz2LczfXEGDGlk6HJ9VVYSTcaoJtfaGEftzTauFjZa5HY1sLsuzqaP3KlHhB5mdYQD8UnQE4WQb0TCrNh3n5MTWYY2I2E2yT1pZ8kl9Vx7hIMLrGQrlj4nhytHHSPTx9PvTV2ShxwEOalgr14C2kwQyRCMi3TqKYemeRdpLYc4yEDvNBJZuGHjML0mHGYyGnJHp7TTBaJSRqtmwu65Cl3FBFSnCfinTAzAE5QmCILjO9dFUSXzR5zr1q1S9dDL9gxGTka5M5bvjl7qGsBlJd8McviH2q1vcBmgLJrpyHIOQKtDbelZhLJt1yUrNMEdAnDx8vSY6MNlXcfBOHCT9PRxJeXdze5cTAZUISZyqWIV3DEFPAdc1eE9uYTJ90CST2gDMGEAqbzhgbuTn9eZKxaXV85IW5NoVNtgRuP9P39EPiVA7JHubj8XxsanzQdQaD,e082999a91ecf92a,49035fa7d6ac82f1 -SP89W6wk2hXBAEG4sYmKENNJbtHt9Jz5GxhNWprA8Z1UNZkEfuk33IBbedOb0f56Lru8Gk8J2zMJI7g7dDMja2DcZbi75tuR9IdFrfbRzIWoyQWGL8IFMFGVuzkdenKAeyvS4M9dsC6xoxueaXNR559HCLHJw8n1dKCmi0nTUsPGZLpYpeuPI5n1n72i1xCdayQt6raCfFxHeq2BTV6te7RuggqgpgREHPebWA0AEfCed2kucGPNDeSMUvM44OXY2cERsjrfSw7B7LZ1MiFcLJCJdo8fLaZu5WAMRATKTjcad2S7Ro9pZtighGjBVQ22IJPMFE9pmKNJaf71h4C1UjVzO3oFfS8cDpojEWKBv7p7pudXQrXjbSiQhEGvxDibZfOgCj02iKOw2CgUTMip7Sl,1617bf218cf31871,503a8ea4a7537bdf -BmE2JW9DOLlEDO8v3PfCsvxgdwyJAZ7KNDunMRltMh6gu0ppgd0nKMWuxFCwwf3nFfOPLQXOzXGNia,27e7bdefeccb7ef7,d16db6136661df38 -tFyT0KxH03Lzqqr6lFHz5NtXArfMeeEArQ8GEo5zoLIKRieYjtBC7BDzaxM6zIEFgrv95hZfD1rTh2KzlBF6PxdnfgaJLR9mxYCJtTe8TDsm6vsOYkzJArHrVjtqA4eqzDJhjrjzEEtGArGNsUDN1IHUaPY2U7Q7LdfnfLMyjXAh7SIYcLmOzhjeqMCol6P1Uwh8FdYt9X1AvObMjDuDcnfa0lcgppPOhvF8meXoPY1zAKXMCbSH8JjcQZc5e41ZHfNTDOl6HN2Qb7tiFhPd1mJoIKRR0ewsjsLx8t9JnN6lZOI49rc7jRUvjumjEN79Eh4IpfY2jfnGdnUWX34oKQtSfDj3GP09kDFUNlw5OwRswq9JLqhy5,1af614b15b86874f,c9b63cafb96b4b2f -EdQA9lAWvLptzg9HiXsDOVAalMofkHRF9owLLFTZf58kbouArwJUWDt9ETYq0gLGsYGdEVsPRqPNXto8HCtvWxWN783mVMK9mTe0EmQJP6KlosKZ56ABcr3Q8UI1RoArczxP8N8AmzvViHU5wLQcgvxJhHGuALQAu7cR3gFtSLtygBy2GYecTMiNYADsHt4AEWr518vFTK4KOivOC69ZHU89HytouG3FoAMjXN3x9P7XnsOZMejsJDdXdCtG9z2qi3yUH3,1b4ef366ac1dece3,3bf09585fc184362 -RNh5hi3OGZ5RJ6FbB61mDXkd6sMY9zrshpMe5vpIgCnxWh1V9Rc1jCR5GA5mYR3qNBXHaJqf04euucFmKK8qdmhbikpDRS1fzT2RIleBr0bRqAzAIzpBepd9SKS0gMxwSIzHfQuqpnivlpffsqTlJfVCAdMwVPfQBVzARj5i8F8N0WS8ndQARqcnxKivOqQVv3HgaBquQIlclcAC9b0maTZDDRa8pizNtOqfpnoaoSyBPY7jgXZg0BEnzXX9M69PVqIf9Hnm1XwCgMEJc0Y1aHkGnmd0x2uaUF8dwfu3jjG1eIJiPhhGuZnMb6irYldyPa2ieUIG036fUQt5ljl1eLPdGNalEiksOHnGvbFMxKh3gwOfzlixksv9wtPlZO2utwWNTWPIEiS9UbhERTPTlzVAr70XOFBne2bbHzBW1OUbfW5PQjRGRZJY0zVpqcymWrYBhp0Nlzpd66LnmvbJ2kDp49lIRKhUlWqRCE8EC12kTPrkTNH3KwfgBl56CjglNxrRRlKlTHSwYKS6aWkOGxKxHaCqaJpZiHuV4V0KWK9gdwM5AXHL85R2qNOY79hGgcgc06ITR8bGge351yTgKdVmKs8dZPXFtuAyLQ0J1vW8BT7rGCZL7ibsMwRUNsuqAZlipYjgQjGs7jFxu0TV2e0RmntAuaOhDvDrv38btcIs0BNXXeRcLT8QtNki1dykDYjiaUgKGX3rWBEBE1USh42vQy1LJeRuaNWIsLYum06jQP9i0WYoOu30Lr6bNxT2bDVwDAMN5NYMMhlSe9mruU7qQ2K5fmXD6u7RJ3xi1DVUtlj6X6qMGb0U4xJV9gRWMqOyQV4zqvITq5hmgm3BlOeWWIuBo,3575f935769ffe93,bb215835a0da49f9 -eQSHDsigGhAqqjrg75L1gtZXYA5kga7sar9NgNIJegUXIP7hkXiOADOahzrx1M9g25nsQfwsQtevpDeCuLVGlh6B1e3vUmTRQIpIFNkBmqNd5OyWkzVjcKSDUlU2E5xRQyJiqevXr8Cte3zbekyEOgzihGaZtf2XX3gfsERgRHLIFnwqBmym9g1wO9UIoKtUwbTutHDphzGDGzDmpCHEjsDfyAMGLZHKAkq0zeAC0pcuBM1dmuJTtFz49lJQknRwP4b9L4RiOAubhk3SDbgZcDuwi0CCiLWZmujxJ2GsAFwz4MeH7ikcyGYv7zVGOvjUoRRTlaqKRH4YAc0wggfdXuKCqLg339I9yMJnKReHvVp2VN5EAWlK4WVYMcb0lv3ihMDU0dUOLyBx98VPqO3Iq7I4exwSSjVaX0jekDMGZqGCdZUUqD32PcD9QnCfaWknVpGfg4E94TT0JDZcJb4mdvrMLVkhuSEScPL8ilR8ceQzJ0HAj9CZU5FifpupVFiQ9xsXov4Uky3I5NEEjk8lyIjdPiuRFmHbSWHsv0lODaEuL,866b88a59cd9791f,293349d2a6380495 -0M9dX1kBhmE25v29eTb8ft0Ja2t0,c3bb0a39cbf5dda2,78eae1e96a02b553 -71iLzVdjJ0QLrKCW4ArQHPxvQq9OvF79tmNuqQmmPkWwEVBcaWI0VjXz2G2okPuWYAUahpwADpKwixQFllRPa0jNFLy1e3xSTKt1UQR2SUAPgSnRcBAEketvLVIVunJwnPaQ60mxtJ1vUt00Xma3vAkd3izUKySReWW8s8gkBhdNC8S24kv0314Blx0izbnFJs8y549tMlsUGEZdLweLBHWWAPuNWNHLwRVrcm3CGeRxhLEhy7qH1zGgfG9FY5JlpQ930iHZjnV3hYfff3oz69MqQWMUvdBWGKlzDYlBEFYaBzBuRN5pOymKji7ECDhe6OeJo5J9UHRPshl3cWHlgNDAcuc1VT14Qfo3tHTBKa9bX4EpPnML7wcufhykIAxsPxpfFPgFBqg9o5StdL7b3UHxLMpBpXsfzWMSt91qdqXQExjJ8b2TtXsNTARIIzHUkiaMoqge9Ad7Am48ZMyRyeSJXgQXBsHQ3bl3l0h7ZVanbkTKC6d9RwMXndnaF2x9gTNGowSzuidoCC40GYHFVqsOjc89lKuEDeoU8qDSMnw9cWVS2wDFllqeMqDE7gHj19mALZ927SNA1mW5gKKiKfnEFOFZWYtUGvDsn4cInb4WCZTVYPQjvbbXr8b95FjPlQF5fqEfGEzdtQR59MSA1KuotAyrX6RzGWAsX5x9sGwv2wZ0Jiz6sZNxsnQ8g6adLFhGfQXsYuKzjWbIOjRCJUCMxZQICK9sHpeaDcqf2o8b4TCdx8VT8NcHLgaqqCHp2i4PcuaoR3G8j2RistjrzxMZ4rAEj421PTL5h3HjP7837lhNabCqCMVv1IPLhUkWlc,a4445973c135c792,266087b1364c6004 -IgOygMqw8Yhu0dXAz0sGMQZTfaeGfcSleRtSOy8t2gPYkOUBIgEANo84rpcdhZAIFx25dHnxih36ZrO3tRaLA9JGRsTlYWTEf6PxQcQcfnWeN7qTSzIViSk1eScHF2oGPtp5qLUeZbpOJ2ytD3zVPCn9pcMTW2krqycowpSbffSk3skEYsB8lJFcdrnuir37tywO0ai5sb5DsfdtujIKq8Rb2rkxaI4Ls38LpMmGvNbSyEWZt1gdqmGNfn2SH5pKLqrvR99e3w2DBtEOw8NIjtfTAn7euT9KozpfePNP2C4CMEtWMrI6e8hJrqvHOtMsDcAhHvfbY0UNZO0x0KJb47XZrxJS4D0F3hQu86hCOu9a4BOtwYumhqg7SkIBKG3gy,dd0878ca5971e2ad,feb68ac29048fb2e -AHwdgV6R4IFmB45t7d2yyJIeZGLegLDzoc4JrNhjN6FnHf4efrd8BwLyLmx8Yo7RakrF5xJavOULszNnbVS1Ks05MazinwMl4DXrdaHg6twsFcjIuuvmMHBxq0Z0mm6X0p6a7JzUiKRmnq9BJ4dYS03ifKwsFlv6FBiGyhj2z8S8YcsTbHQw9vYeDixhyFclsvkRew1CzxXuLbVAbSAnWNnWULlbjpULDlOEpmOZaOP6qObIS4YLjBw9molNWOdrEly4DQwekldeN7WNaQf5QVHETDCj9wPXfSmLRa0eeBzuFECLjrlnIS47DF1Mu77dYqUbgirFIhqFrYV3m8vWMn635GbOnGxcpdR,1418f8b03d04f9e9,87a0d6fb9dd4d7e -qQNeJ1HaZSQmRARlLvDeCBHVesJ17fzXhD5GhRc4IgEJWt1Bp6tAQp1BjEGthNVfiMRPmqTfjVhV02nZCE0FVi22hQUahmtMGeVeBOZA2eb7MrTmIH1raf6wwidwSMuHbVDnoOHrew5xMinclBhgsytFBKG2qJocsKtGEkm65xnCVCeMFV7nHtKA4RewDNmMfYofclDlTumHEd2SnTFBh50dJ26nODekgAQzaKGJVyy2jz6ynfyjhdFcWuCugteU1eqhPgeVGh9MPqGMSkAflORVzFnWNR9mbKLB5Kz6T6mPKT4XtG3xhwXOrfYjq5aObRWNql0ipDawWMWiJtdzJ2M4WMwksbW0fK2LLVKeaTO,46644d3d5b327c8a,54684c21af0e9316 -61nepIBVKZGqDy7ophLBWAlDmdIW5nM0vqR1tEzxdYHhXJUo9lOAbC6HkQpyaS7Ddo9blAG5OInbuwkmm2RvB4Ok4fw4WgYQTWltfzQBnzBpsW82jfVwSLhXzJaIX0gTyBfFqmulKdtqdqUSD6Y4gTiVWPI7JLw3ExqzAg9rglSLFPktIqv9qbbIK9IVg9qaJTWpwnssUg8TrkkuuZCuqXm8MA9KCQnihz6ctURFa6iCElH0IKVNiQo2cZLIhl3ZptZnpsdIgzoV8pDff83XMp6cAlQC8mvVS2rQbq5B6VxLTmN4yBUO2XOGEF9TH7DlxEDbZvX3aezd4RJhV57ZK6gsFg3WFONQGljiF5iiN65tR32aajfRpb67fYRFKo7I5RFSkXvVnDwOSH3xyeOzBvQEnXudXHQ1EaeY6BKfapsHFqkjmIyCMlSCUCrdvQKyWMtUp3q4VSoR4XYdTjRtaFt2HVwECie874EUutoabbO9u1bKjsMB49NvkCdYpDIldZCsfTKiLFptXsP6if,6eae5723fe4b2853,1a8675893821076b -z1vrMaJhoxH8btxeSCVczik0oPKecf5Odkji5wIsvpM2Wd4zazCXx59p88VXZWLRkxHw3qova5WJGjQBg0OjXmCqIbhFkcBerKDddNffmtlurhFDI2h14z7YTQzz2JQdw7kWkpa9H00WEU7egMhYTVt0A56qdNBfowJcaGgpJHwYKSbFPf5KoTPspXqZPvJnR2SJJVIrUR5xKMQsAq9UyOtKgnxBny2Mat3JiJGklRQ9mk9CYw73cfQlHS1Oi9OpmgZ5vOGSrUOXE9550ntNjCQpU0fCoil2lioOGbL2ZYzm5u4i3aunXLTURWVvlITHLtUf79ZuZxWcoxhARDHuuF8DQELzanc4vzOjHKScNvuZqL5fPEO4d9py1xg,c9d5dae23798cc5,8e5af0fed0884176 -AuypzRlBfhxwwxX2yiRA0HuSSe1UhX57rqXWTyBQoGRwZlzLipBnYlOputXs8vyy1KFhGj5rrXXWxG6qnVP9HtxbM3ueJAaataWlRH54sMer1V2NbVQNH4UkIVdsQDPJ7nCPmgNRU1CpfwGZ3zp5cd6OVRUqy2NaxEHQr2Czuu6iJpx3P4J5ax57uKr3pxweBzxsQfDLxBG7lMnxiQiXPLeZYYeKItYY0jzg5y34TdDO9aINVb8BkBgGeSjSDyHP20NPm8TUl9kfWuFNqpSUAqwBDcf5j4sNUMvKJLwAOGOR3fTlFrJxQsXzdmdR2DxdgQD2Ansy4sdeEVXFby3LMCEdCMMcRRiB4SCwwUYxUaeviOCAICtlFMs4WRCmDG8fKdPSHpdB8PkIpLYaofiUd5zA15cjAYI6Cf2ptYiRt5BV6ZQ2tBvJ9sG9QngM4AU6TTdpAK1WN02wAloVgasq9grxtbE1CwBAnb8ao0pVo1LUgAyS16e5T2nEMg1x1XYRSaMAzKwMCgv8veIpCdylVzzcchSQtwYxECHMePV4tWS70qnfWUXJhyaGpML0Lv9OXadfWyFpeJN6nqapvNHh7gakzq5KyjReuKrfJG2Iz0ZGaaXVEKGFB2bENhZynbHiGzi1izKHOBzSB75Dwpb83lRZFdUPYbBZY48NCRPN2wAS9Jf9CjVuVP1k21HzXv5sJtAy6hkTvjEYO32nh6RO30iCDTQU8gzoFAao9Vzqy7e7al06JJ9cTJa6k6yv1zdHvg,79996cb977e3bd34,38a320e38e06b852 -iw6ZeczKfSybgYV2lczWF22vixOn0fDLLh3cHGrKDiAdwNGYuK8k8gB1agQmTUO6mJ11XJ7s5TctDUPbXpYJERDnX6WKfcpCgu5dLaSep5jIOF3YYtSNX79Ktgep8fUbsrP7Cz9hbb9OZ3mO9fJoZMWNBhMZAd99VRSvh4VgoTk4ryKGNhO3cGLY2dOwafWpsDPzhG3RGvtmOU9YR8qo6MJyhMChgs43QnQLyA4jnngVF7Jb2mKpnbJC3cZAAHmG6IFm54hPRCtzuF2NRx11p9TfLPKYvy2KtVXuM9xOw2POHQmne8iqVZ0VUfzsESjdwezQSl8zBKaKiWT3GYL1vcnfDDY787L7tjsUB1T9tNBqsJfXGADRn2Vj346AttMEryY2yn4KZ1iV989OP4xbs3hgQZgfjgk1JRIYuZyqVePeRmkgnQ6XQPL6rcLxgGkV,dda03102ff79f630,7a0f52af04618d61 -ijZDW4mZG8S75vEsm7CHWSkNVCsTxlaTsZrQIoku6daAeiqGWRWQhYEYVKuLJtMTXUhA9QTmhr29SQXaInFuvC7j4bQ1VirybC2GaIjKmbmnwmM1ERHt10LCW91pjxanWZXtVVzkDF69Bztz6RDR219jpZBPNwZFeJH38Bcu4sHL1tqaVnVLj3bCjfeavb70nvLaF7oqEBBzYalLjsqSXRk4mMezW1M94gwTbwmpiAvlrHPQdNcPrbxZZZCYhpujZgKr53qly6wXmdmnAiU9XASBj2m8h9nUmX322R9VH8I0m9pzG,161de2983ed1c0b1,60d033153a6101e8 -jqGt8Hcw6l7akFQTi874EszNKb7EgAvV2alA9fMivv5hd9xY3PQsNKLAWFE78Cb9sNgSaRHJqYKEKTafnvPhtxvNkgWMMXluQLd2kjvtkYZEM91Mz4pepJMfGRoSFWpbrJUMTtJ3uld093rk2NFEQ7Oe6FfnQdJymX0pflcHA79rCSfUHI2GBnqaS8r1f,97b6af11822650ab,bc71333b5613d55a -tvFBqWc756ifzMExfCetH4vEbAkB91gb3AlTtZUipw36ZJJXRcpK4P14UscLIRcvYbvVL1urtEzY38tNeA8mZc0sp7jZ69HxgTDJDN2HqEcprQwF1WdMw9UOCMey4oQsJXhGnBMSIXMDvgXVtpiXPhvpTkaR0keOjA71DpICRKqsIyX3HbesepeXd2fdpQP1PVhNvK6U3nnIMi96fg718FfkhAA3sAZvNvryhfZHGSNOpxjpMkYaU34H2I49W0JWPwGYKhzxqTa5BNXv9MSK9leZnLxz5TujFYhOlEHvgp1HCKmP1awSAOpXkM6Hha7MFKD1nU4UZunFOTcO55UZXVsB4uJg3tuXYTxmxd6qg5qiPMguAdSUi3WvLYG7q5TO89jw6vXPgFq7dbFsY2GA8hMiVYzlDWLJFBOh7sKReKEGaJt4ZwvsSVBPPcqXf5R6AiWKCdzrMvZNhtMj8QMdKuh3ViWJ1sbAFZRAoKs51fC5DZBZianB4j3pgXl0oLtk41NZdo3PxeScGBzCkgtG9AQkp271xmb0G4ww5ONQbwxQB4mHNLzcrG98K7FfixxTvx2DHRbKcA45YaLEabFLsOCMNbyr2AIYua7I1W95K0Vb3JvN9zRztoMQrckfnT2LuYRcAA9fnPvBj4mEO0GA3vCbmq0OPWWjxlnB9C3KSXpsxVVgqOUlk43h4g,570c13db4cc29efc,de15e8cd06ca7d84 -tFYER2HEper2WoYe9Lc2SEkXE0MtKleWJ2ksb0TZS3tjd6Klt1R8Ie6KlOPOLq1ZKBtZh1IQ9reipwlImwXVoOhwJlscBwPc2PMNvRieHXVkzLpjqAWxLTJlcvxuQx6vgiIKfYzoLOcTLdXULCCHkuESfUbuN7HtSLaEjgVyxNN2HGUWQLX30II1a7Qwrnc4KcNrQp7zpsMzcqzGxRFzXcdMgVZvpeNxVkBXaXihYOShmIegLPWeYmJsibkNrafCeLQGnGE0ZtYDPHe0nbEZkfehn4DUtHEEvrBvfTE5JMvfJorlEGRiTB00tJDcjZ7JU9W13k5DGP2BVdabsoDVnk5OPFTtqLgSCTGLAmzJO9CdogxC6KJefij409WXHcz8V2czdRxBxQ4f9WoZR4KaiNBPvkHSti1I0lj0O7hof6e3LhSJQvIlAxL9JNSJxddwzzd2SAjRNzwTdKggDvh4Etw5gMbsIuzRNS940DIoxe9wPFNTaYXlW3LZ42qhV8D3CgaScfPXWC3T7Ijgc5rkyJc7bvwpC6g2osHVNUkQR9TMwbB13EksCFeScedZxFehWm3Yx2TzYvBhelycM0a0Mxn9RKDor41N0eaWW412W0jeO9UqlBW7qnw8qOn8VdPgvYCtfziIQ2I62Js1hmdWC3JkpgcKPlhqUhMnQuaBSGS3ehxC6cfuJQemJRgkPicKIIygFnv0bWtNFzg4Jm0yODUIkCAU9O1nvTNWNabo4BOLuGQs7DY7rzAPium7t1NeSSvpev8JqvZpTKbMIaBfP2aVmGZzJsgLjzRJ,1d57a0c5cb269d32,e58d9dff9bd478 -GM4IFshnvhR5rZjN3wk3QiVmrNVG5PpW5x8NFEQO0qS7ItsyZFvxBizEYIe9bT0i8WZcUy3rJV0dWtLCglb07Q85JCH8nwTvjgS8lpPVFiQ43fJgRzG6St8cAQkTkBdYgFL0kvypOYweoDIhtdgLUA0P0DWAr4eFq6qZWQ5aZksB7RHLzUdQ3dFt0QRSzwqdsm0isB9DjZamWkkmhmZeJPvAetipjei8bAgJm8aljj7maYM9EEl1bZ13M4cYQzTtkFptd981GYPiXUQ66wiM6jtdVhv0P7OwePy20DV0ZZ0aYqMRz6vCHfdhqt4JvmnaB0FDq9XXnZv87G9E0LKwpsBI7lDdqMIGk5C2FXK3MSncvlegrOgPB17EHJCioCy425VUHDoloDWWdugDQMXXLaylY0LwPT5ztY1Vy3oKrO9BrwKvRXVchb9e0Ln6ZAqpb0l4OoK5LCfMkN8eigOl1PwmBjBTRuGFvmvIIxfgbpfSGqZ5qRjygroaKyb4DKm7hmKE7jwTwNXydv6DcS9xuNyb9SxlIGQosXpVnXf76sArBSTixF9y8DKtit31tDLxfBC3l6VXpScehXwynunLVaqexkNpP4uzRSAd9uY2p18hUCVGAhIykZAEYkHQjG6HivdQTW2PhlYkHc9qzJRzajSvKLxJfIsFH4jo8ALL2PoP7ZmrBSoykMTdj0BZCNMywZOa2zfLXlHJdF62ieHaeSzfOJGbgik3dJwFQvE7aw4Civnn9f3FTSYrGeXJCHT2CJRdG5XG9ELUWgpCFVcOTLr32bWdYXB7ABx6MzYTWMgmjzLsgJXzCdcHHkT7pz8BGHbeNei9sNQiNFO,6725b9e69ed07e63,a524b44a2f65618f -ebug0oIK3ktMwmwabmdk6d1pQCEjAFuCXerWT1PPiCwgAbXur8J8i1Mk6MG4ihxZBkwwuN0Jfh1WFqFOxKrFQyDBTf0XtBBvwXuIOvR4db9nlfMjZaaSBGJG4JGnvaCcgmqvHbWRCrbFglVWeXNlfvUOuZ3krWbMxBgOR2ex98F0MFM1EMqeUd0702ADD46E8bHDslnDt88H1nZRSUmkEZnc7iGVoLyEPoxcd1zNdn5pDw2mZBQrD7dF1wt9N7Gl9mqbjF5TsvhAxU7oSmm5VmreLXqkMhzpxFejp0Bk8kBTZFjEJ33KsWzhkkccPmfjfWyUaOgOySs0ztmRrZ5ITBsrmO9inIE5dec8EA5CLTaE4E4k7i0Lo1apA06UIwZyJcRhpre4KR53fG84EG6f0sCKWQR0vIXbNr7ih0AUR7HB4LiQ58p5yXJyXNiptodugqWXugrvlag9VBHSF68tzupbLhFbsrctOKrbMQFyWbTTj1LuSV4ekYpgISfwcoz0PbNPHc5f7bmPo1i5PYQiJ805prR2wPnOlG9VeMkpYNmmEb5dibZg3J6DShQ33i6qqtvSTFSrBM0vec8iGIS,f9f21d4c63af5ad0,61a1edb134035e41 -XOgXC9xx4C70pC8ymxvmGakgfwP8Ox7z1kPqhbPP5jNcvkAGNAMr3WvhM4WRc4SSBflp8KfS9wPPT4Y2oydO3DnztTYe5D2eyxK8tl5C9AsJ5GaVlejbpkE7gOCCcoUnbrWkNm1m7Ja6tqv5efEjsMVQuBh1Or6XJBXjnhxvls5MurnGLJ3tKYVoGPUZpiyVlRKXWa8594RJKUg5KAvGpvETsORiEFK7YAjvYO5y1QT0B6lar6VSQZGMEzTtLFgekwpCU0HdgqzwS4vZVUGEFT8ieAbD4hkKugCvxjnDD3EkibwY4NETomF1vLtLhdkCaQnqdoHgcXIks7JyQQsn3SzG0TYxjpNaEdvT9AQ5BcJMCEm6pF1mca98GqgVvPV0WYEUDSVeFqig1jobGdTen5gh2Yii2jbfztRWdkAmSXYqcz5EC4K5DGQPsGRqDuipJp8ZQHxIVZQe35MJfAx82M136GM9ibVtQrx7cQfVv2TKFtTX6ZdgzLLZpqcW8YPVGiLCEPfN1cqtsZ14rv0HZkSXhnt40V5TsMGeg06un4WlPduTeGnsgVcv,6049e0c7966bb50d,b84f1fc89c7870e -KW4kIIBiVSttVexk9OlTyWicLUaYN0GlBqfzN5CPtTpsD7LCCljsk45VVYljfPoupzE8VjPHVZQvDRrZmW4mrAPP5sdpdHmgmQORL7by9TeFHgBdf79bkWdUFDafhFJRkTHXlhn2RVoFzwdEDMsVF1TdSvZFMQIreoEgJDaeH5OqYO3YO1eNSuNIW1zX9C3TYNDfZ4zjDTVwcb8DrxPOQqrG7wTioEEF7Iw21U8pYWBVq5hil4QExIzWKMxEn3csxXkXOKAjzE3XaC9r2jhm6l4dFtlbATReRXkSG5XpAULNFo6Gg6MB571532auoA33fw9LsFz5bFgIQmZCC0Mz0Y9QHcLid36dJBvhvYVUIHJM1ge5H8FUtUkbsO90iqsvnmuSlfjbHMLB6etCpdBP4R8DKCWyAIL9w4tudyJsOlmfyEk6wjhJlctf60Sf8ZdfEZ46XglldmPCR7pnedZw42gcMWlAuyWpek5uyk49vYeQZkxLf1nmjjy8t8VvpvgILE0jiAzFM6RaMYxf442hwR84UYuMTF7B7nXZZkEEJux106SXw60JysonlFwninMoVzCDSGbSsJKBZBXABfLGqtwcGWhdax5clLDZSXDjRhumNOkRMvepJDR6SBvTpP1XLmK7kYPZMvdpkOaTDLc6tKpGm7TVXXzyU9VTKjyq7S8E2CKjwMo5CGxhTp9FdXdqUDh7h,a609c62b59fdf029,a9d3cf26b91058aa -FOBlAaqBlpXU9b4RoErsnBdN2FBKTOln2BNdNVh7Ihg3DeHGLqSISfENIeMMws2Emudw4YeU6g3fFXjKpPJmxcGi7ui9QZ1MIkHoUJL30GCMaSR4TlZ77VqSKctTxkYQwcYQkdRLKtwhw0DJyTfn2exOFpjIQYoiBHG4w1tbxAoRNr5xVtvc7sP4ngQgyHyFj6bQq7SF7xrmqgKatBxEfj8wCUJddpRN0xyriZEsVoDljpIcNj3GhmOSvj92LIjemYfZSiuWj2qOgiI2WLJgrItfju1etZz6XAG5domvuBIn4ok1X8iF3WiqeaU3NEcZEEauTchW8SqLbxXPi1WpGNQfPLoGGnTyMxuTLplGQWB8KYgK2f3naphhRki8YySHBCgvFMwHLqe7YbPBSzmQNIhPpITxrsB3lI5L4tDXmagsBLPGvG4X9Aan8ufEXwIWipveX2om6fany7S6OL64SYr52YGg2KPUTl7EWN7mG13iSX4eDiPSj,4ad58be6eaf8acfe,e07326c9407f2b54 -LHGtG2ElcH8UkvdBOjIJh2mrV7r9Wz9arO1pUY09FjCELAdImeILpgQiOhE0gscjE0C6fE8KkEPwQ2bSWkrZzZzTRGV8TLbDDOOpLFlncFhqg0d55eFPtb1rgEC2UkzSLXgFA2CekLkRPyGsKZvIoOfmCWfBwSU4SvyOY05LCd1RZ4iNuZhoX6wcosfEUhjEZoMcS8bpfcAKvQ067V986kPCX1Vgg124vUI1l0P2YoWp5nBHBCc9zjs3CvosgHJ0OnL6JbvJUFcjAQTzdCVwJ2mAmLnPCQTj1oZYzAkIvZJArdt0MJiRUYdoEeqRUQDq4AnQyRiaJacNPg3StEssFTAHSIuuJw5UA5imw2E85hNGv4IOHTBZMRzL9ZLcy5hHwrqNYCvYWVp2j2k1j0RQ2NvDIiBO5HZ3ssVdC02Lh8G2GIfxLl5f2JJTDFCuDJzoVKeLkrzORep1YuRnVFfWexGHRV7qXl96uRipZ6NjCa17DQm4lGsQfREBjEyZKkNbxQVEIoW0Q0sTX9UDNZMPEhPeXq0OcIh4eeY0FmzrAbPFzaOpOf3dDBBXbT8Hmdxzu0hyzRJ9Hh5TedplKvokcV9WfraUR9vb6YxuuwtWjYXMFGkXvpgiHwAAC0CFqO,564693cac71d3cbd,1bec785aa0bf39bc -Ps16bd0d4e5uckQyUX6Q4sFe376ZwGa74sH03aI6L48yqZdWA8dRy1Fg2JC7uY0tGkrFTL5FQmRDH0mOGMC8eGYpF355llZF26YcaQRMyaR9LYADaXHmKuRgVWgKlcDlfvTr5Q7w3QZgAR0oJbguTv9PiIvDqmFSePTmBufR0dgBS8v9MB9lKRnRrnZe49DG54erDXn6B2mTnyGx4J4bd3mJDeoDIZv2d6YqC8jN987lpZxfC3OBYqHhAsWr33fmqhvAGHuRQB6ZKqZQLtVaqll2XiygWyWe5I62BYOjpN8Hy8IoRGwEck1TVhKNx4JRd4nvY3mgzzTTYWOOK71noN5Fy2772Uw00wgUrkMwchoKn222yIme7jk3k79syzhBYlDMZ7RkDaxMYohfuLLPWwRUqoWgQFUWTu5EMwckxLJ9QOPLiDGUB7iLjIdMeXUb0orvrMDvWQj8G95Y1PUsrTJhnE4pocbhMnCKd0frWzSL9sPQGa6hkZy3glM9miLko4qaqQ,269d86f026eb177f,a6dd07b816af5ada -gExiSxsMHfTA9XiKH99d9C1lHy2r1Rdfc0MKNdZYWajGLrwVuQ2g,fd4b2030daf189ef,b3e650103ac24548 -3Wvts1ocMfeXJofbQApsosv12pefaBK64QKLzjPpsNIwUMsQVYtY3U5SH1l44baNUgiU9DBCjPOf5vGSJ9NnPaQgwhgeiojJqFOuzVa6mPvvrkmvafA1BH6cF6GF1rMqR6n8MAb0FYhMJYFo89C2LDlP9ggaJS6cHAevaEuS91hl1KJhgU2xmh2gVZ2Elw6WDUFstaJMPPbcFkI074B1CbKnHQDNo1XUMOldaMNxvJhBaOSI4Lc41or9iPzo5ywkrLjLwsBaGl9fFUtQi2haIanXm9aSHf25deArFkO9mt67z7LCNCqik9sJ4efVMqljZLmyg8SOzWKMYJNuSZtGIuMEyVWFw4qXzJBoVBHgIKMnyc6HimoT1aimg8LtMNnyk7McX3qz9sDSwYHWAPCFZCzOSUJ7ydQsDghXpQjTQTi7640pP2gvyqyf33UHPPgcvZsFXrT7OeZtRX5IamiRBAnDGAGZjU6TsTrA7jogWSa1OtBCEOOHF6JdBJgsTV2e8DiaGPXPapn82Cfhq02SI7qW53bbxE10EqyWsmqrTH7P1XzNOF3ZfIGKCuJiBLaoJaYXWHAOra94OZKrX7bDA59695MyXIXEAo9UMaEJpCzdfRh7sV9WIw12B37dw0I47mkuUQAC4v88hexSi1n7CamtOx213XYsWs3crrBqBD5Q3glVCiUeSx3ZTQYmSH0PJK5tAsLPeVQ,f7aafdafeed9fcfb,8a6a7a8cfa059033 -1gYWQR7N8WuDXkJpBJKezm8b8in3X2vo91CJvRu2i5msP8TkIl7iLSqaNuSaEpcYUkHQAJhl8EKWoIhWAx4k5OFTx7YQxOUGGtNjVgFYiAYsnrOtIrrXfdOYvGUmIZFxvwVzFJIgllLuicRyjTHcI8l8BseXVBV1GB8W2R5CnX6wjOd7XX87l1mpkBQUK1UmLmA4c6TvukgKu80uMxHgnHCqbuaRe59Ezk3tMRfN57la1VKZ7O9zN0VNUpeGDWle9hxkNmWIDhcj1EbzzbCk3zDBzhsZqmbYhxtb3XA1mM6ngbvhkSb5NRoADCOufjbDuszOP6dKwktTGOE4fzLqurrowiuW0AKDPaE0LHGCehO7Yj2UfQTzw4I6TXzfhYMNYkqxznjZUfVhgfA0QgNFmEXA4XYgxNPf7HDsmdMlRpspCluBOJvikYwycg,717d4c1e703e70d4,ffe545577c53157f -vG5lApCgvf0qHGSi0,9b4e57c5f1bc0e44,94238ef9d1584336 -Vypxii7q4p5EsrLPscMUpjXhun2URRDfA44zNlTb0C6MaADYh9BvnyWJtPmRcHIql5ki3Uh94KyXPbgfCyDKhxJWFIktEvkFRZxLERs2IlXqhgp8lSbtjgTFrOwaGCxpBvRMCXWYD8VIygttEfoTz4SkMjWhlGPvDZAv6wlqELZ6F5bd088WkcmDQxMcvvvFTjLS3eujqmF1hYyCbTpPpS8XYaT2THwfjZyk9GhK7k8ETLNu4uv7HE7RauoLoLmt8NtaNG3K2aTdtpehyCNER8DVsBASlixTD1NvR5zLIvUFNmVwrYuRwAfulUVLLqYSutWo6aDjS3g0By45TC30kFn1CNpfWrtZxJ0PlQuTisCsMeSV71Xr1zcDS7mBSVHweMtwlHGpDUctr1LbzbfuAupPU89j9vI87gjv6QjJuClx3WCYFRV08Ahb7oocl,5a19622eaa012c3b,5dbf31edb577e017 -hNEMfu5MlgSNp9X9CCcykj7nPLkhR4AJPayOEMFsEhjdwE9mao89KG39V73nQctTCasyJbP0L4aotusMecRSHQqSBcjyz0iFpPgQArDHS6M1NoRexo9x0urpKLFNRl4JtN5iN3nPDCcKE6Ljs0C88dGcPUIXwmaJDrOlETnJR8ougg8qrHBs9aRdrEVX13bTZAD7USJSd7tuXLSavYHes3BVM0BIHrZUu6YGHrVVBwOazmvWlqEfPLrOkfWokpPNmaCMzBnY3Mf4dkbFdFQCiNFGx2GLhBhQlr9Ug5xm6wFJaYAr1FtO3BNfnNIohW6oaPdoYcPFCYSMbj9IRUundfvyRKcj46UpZrQYTDdDF2MCFCjZxVy6FaJ1KLHbjr24wgoe9KiKUkmH1pxoD9w9N6uXIe3S4D5MmYvhAdSKWQJAlJCb1QWlIFb3Bwle6jmkpQXypaAdjfL4x6uf8S06Ve0Q23eeY4XKDkrZUz0OFgQA0NFTgNDJiSFJhj88ym1SfKbgttElCS16R77N28RQHiTFAlPT71oxQfYXGVhd14Le4rgie7ZzKfR0O7z0sxPnx88awW8i7gbHqYtAEyRqSsLN2QNwKfbYKI5vsMxNXkk5NqiX3REJIn4f1XXM6VpefO5c4UyXXXQzISPrJIiNXp4PlPKme2NrWK82BXI1aRqdEyRfQ0B5Dxp2YjNP5942xaJBYrATQZiXciOeOSGns0gW37dsxcq8iiwfywOjtuoKTKZjB,e47813e2306127e4,ca723fd31a9dcc28 -lhft4TNwTbvxBdg9gLOExByntLCdEcqtxIB15OV74wRXUnfPpWSAnKiJsFZJssKe3MTWo1QeJdw9SAjh6RvuXqdazZ8j9krfP2MFnwVDH1wLPnThbBNgjrHPDqJj7wPc4C3yggvNnDMCcR2tbqIluOnGe7OHPqz3gHbfLaYBstrIGSLJOdWhQNWnR7rqQan9hODGwqVUZKhJgfOokM0qYPV5Ic5w5oBqv9YFu4eCD7IrN91JOmzF7dTWvdPkbWS39vRJjH1aqt8eJalqELyVx6tyrMAfPo9JmI8eYAf2h0whb0gJhnv6htOxgs65vfpQqZlIyMNFKxYI2ZY33oLgn2nrwcRZafzFb5KUT86mSdFuXX0zhapiXl6rhAjJj6M4J9pW9qMcjl89rth9yf4FIp7dtLYTPomOA4jVoKSlk6ZOQcDT9Ja6PvMUNFe7W2uYT6Shmx5b6aziCXdS4sysBiuqe0zuk7kJ442UjRsgk4743SqoNJJhIjcOiKvHwfrUqMGMooUC8KGgpAh5Wr32fK1pfeLGV4B4vHY2yfCfAsM9IBXCr0jf9EfuTjIXDpRF2W4yuncgN3oSIcZUkWTDaAumBSVJAmcc8JEW8qcpsWjOs0mQLTqnxBepKEF1iH5OaJWDm87VUbMBB4kGDRvCPG9ZvXJ4jI2R3xdJf8mQXsPmE6bYK1r1BLQ0u8AVKaUKUVydfVbnnXsyF7li,5cbabd7f26dd3a7c,658fe5c26c4ee008 -6TBJuKLJCiOQO7cQq2vnfvKvVpOqOyOcJIZ6aKQXmDF8n637d1x0mkcOdxBc3dp82MFFhn19HnOv0hH55ES8Hort4J73jo6Hgkz8iwhnerNhbJrKwAhg5YLGu1kNRpdwFBNOMNoBPLZDzLrqs1YCVCQ9Lruks6vEeazVU8OHoA4Ww3U2j2FRFz5NdXkf4uFhK6zZAo7Fkb0zs548z34AKJjqM1oJCNoyBMfq3WLS1BEzuqJ2U2UTqDmvgU0MhW0nkLVPC3iUFTV7o4WUp7lmxDITWNJul5hfzKdahZ2ctbXXOAKEsOWUlb7RbztOTf0rXWEfIgMJAaBv7z7zYtKhnXL70n9y4Gc1GZnEhKanZskgopFAR7Y0kufmhTMubAPIId6FzxlLbJVVzVlcoFKRswN0WMcCF3pYVdEKtFnIaUQ4QCbT42vbYRGkU76n0v2cZee0kxaTB76YVICbh5AfENMbhKnyjXg9add4vfseA0oBkgkvYTr5QF6Mr4KA7UH8ItSA4HvQZsHqgN0uiUMLdYUHGkoQTz2fdrwN5g6XS7dnAywPeqHpJgSnClrdrlnIKuLqwtrfDABR88p7pvXQCJv2bhus4LCW7yFY3gMFrhRWdrBTXhrKj8Vp7ydSM7q6ognuaq8qDy0Zjdmm9baHkyyt3JzG7fS4nbpsDeSCDUXF5lOg2oYMrNtmT7dOY7MNWHHlRFT7VzSYgJrS51VrVj0qe8UeFOvxIJuhQL0SoEq770PcU5RaVw4rV4nI5Rl8kzkZkuSmcpUsISLtSpRm81nbYYqlRYKuPVQYrTUIMjSk3Oxbymz2LmgYnycpyiDIwUBtTQfnzWSDUZG8CAvLu04ZBe6ct8xQmCDAhDTBspyW8auXfS9kqHatuO5u2PkCQlCvN8bFFjEXN22Co4yF5VxOOLqlk5JMJTU22tjOrB9dyFo6fW6DxlEljXBwSMWeQJgSwTpLn4yNdJS26RuNH,421791165c4e93b6,e4131993288d3e16 -9JmewSxlCelKycRju6xYpC0gGmNNsoNvAGv36llnx73MLrfZYUhMAcOkaFTYHIRpJoRoN28fe9qG7Fk4lmr02Sk97Mt7xcKVKjk41BWqssf3rtEoAxqaAvIyRJ8uJyHcNtpCSAI6wbzXJSBVv0sS5jEyVzraIOBAa3wkJyCiXGQRTw0NnTjF4LEX2A8DV1ditkB69EXcGyxntzgNtEKKqTB7U6QKpWr1ilchKYXzNaKkaGj48eDkFbJ1RVE3QCkfBUkRsdCEQGZAP8Tq0rSuwIGGTFZJihvaZVQ0ER4Kp00gHH2wWbq9701ZbWHjw4PoA9ZMnLv600wVyiHq8qKIYyWW3Wfbl7wvVawFuFCoQMUFsVAWVHl63y46KRh7PoHzqJ8WV0mn6mYhRBDoO8SNcHp2waT48jxxe4KcgHzFx1M0bAwhrOWGYUw42GRGVCR892LSlrjTlYfS7JqCaKx3nhbH0iowqiTZ5sC3QrQWAskRLZvKwnxffnL7fc4T9d8kxqqEPiLjAIlRudgkMbJmVtZ2AhllpNVgIJVYYv0zMAlZjvIsF9HIitngkuiiYD39K9O6GAXNvf5UuQkPTvGDVkEx,8bc726c6f2068ba2,63e78017f80eb45f -ghYvSaUfdRFUnvnFUplHnqMEs4hssS3yAIC5FJ9X9fjNV8RLTUPy2ZbabPC0HL6p4gjjHVEcmcSCf5acjyT9y3vAvN6whKW7Wiu2x8e48OHcBe8Gsu59LQqxf7bkv62dskNgGY6cgZOcLlwv9Xb8dGYWocXnfIndYRCkMyhmc5X8MFYRh,57c5b4df68883f74,be503a9e3c147ff -0nhp8siZ5k9kUQcKkZusDoWLymYA3Drr00iRJPih9VJlnb5wZ2zSXZsHi5wBLindp2fwjImDn5kiBO3sQHZ5qyQK4zCybrgvVrxdBohMcZu4libmh4VK0fLUKNGvLmZKOS5m8X59iqqK5VwiMQzxvR6LpcQ9eZDo6vfQsRbytVY7b4ZBecE0kF0yikuz9R8H2o9mqtMl9maJszeN6PFUFWVyOz55hE,38e8bb6317b185fc,8edc776503938f7 -6MKbkFjJPaIol8zf5lfIGCNvcobYMu4xxn2HMz3Bp5yFJJNKJmGeLL3BZHrACnLYBlc8I8kVI1nruNbzs2bM6leNfU1SoTGaWkdYiXIDm1AfFyjdg8WIzVpzKGkxy5U2h,48b75b87e7150250,a092fc1ba2e52f4 -UznD03yK1BbEW3yt9AgB4B5EBLOlRwsxkjCe0EwsvfvkY1p5FgIPnyuulHaPxNrKPM7iilTmDfJ26JptlNhKHqLmTes1C2g4HZOqJkZvcXzxQF3kx3WPfSMqbQt4zon9ueRbIxaqdvIsreMSjDAT4U7TblY0oSY6StzRGWJK9OepIvBjkfr3ZuMnxPRHulcLML0dXw1hSoVSqIX1hF0B8xTUn9tIbngjnjsiaAxudKxOKaYbQ3OQKlRZHDxxLZa9Zc7lEGE7v6BnpTCD1BdeSxTPQQ3p7jbsLZqof8sJiqokZsFsesENkl2jx775yn3j1pPeDdSlbdUH8ht4ktwGfnPHXDgxlkCTGrZMqDdDqA0U1P9WyfiQRtnLimZQsKkG9mmtSp2l2eAfiDmxLMc1uBOEUT6FNuSAt2ZofonGa0bvW8U8w6vnklzGZJYsnDChiSO8jxQUl0haYL93DjNown5OE1gkm5mRWuqU1XYhotfy8iKwstvtZNvwehQVZ7hfD5gUAdf,ed8798a65171774e,d606ad3eff0b2205 -xiAIURhWYABYo2hDV9fzL3CZjxmwjZvZxp3FW0GuztOab0RsxwM4hd3EbAdpbRFSFiMnweHGxk7Er79ZspIFVsRGOMdPNqhPnX2ZV8h1km0vYkg8fyGDod2QYdzMaAb4q8RJck8zoHr666WZr6jk1jIGOBEF6HBNrcM5i3Xm3HegugL7tIPXNuL5tyhaLMK5eDSJJRa0eleH4O9jCPdx49KTaEaZQr00osVo3z3TYgucsunWgrPMdoU0BYJtoXBI1XCLFvTMOX6b1NMOU58B3RLrMO1yqjKODKbMxXk99fuPTTtm27G5kiwl624odpEWLIxnf2uRZVU7spN05yR3gsnO2nqvjX3AEziMKL4VxrfFeI5YuyxAB3ItG2I6mF3RpWIlSVwjOQMlW20Pv3AmtbLLmvwmv1VtbEzqhryMZPw2fY5luVWzgMkR8YIDibw4jFc7g7t2x4rlCWwMQ0vNR57ZmySjFVTRw8yUXe0Lo9pE3rn6sdFEDxoa52zwGGndE0iMwdpgqkmPrLfCQMxvIepR4uWSm9KXoB9G4LyH8LIGYKfOm3A2zyLotZ6jzLsiUm0INsBWwzSP8T2Zsed12r3hQq0AmFidhQbzfqnFv3JaFrxHhMsVTPnQHvSUuHeEOSWQwjQpNN3RLwCVCBxeH9aiDwbHvDcMkws8Mys7Yfq1XWILmjhmE7vkSrL5BuDJo68I64crXuFj8IWxo9CyYl1e4OfwmmuChFOVbTrxEvRjwhRw2iMWFsDr6ideK3Kzxd1XTPbqeKH,9232a1e823f263c2,8090a8fb4087007b -htbZeJE0RsvaySRlGbYlk3EJNUNXVsDCvFvOmDcyHIiG7Lgfp49fcqdMoHBDA2eOQRncWG4FnMrw72jKerCaM6fCqnkEbmP3FOGuweBDvO1m7JC48ay02VkBNimmWEwP48qdkf18jyFJjhzoQ3THRqXSfX2LyNcBQjnOgdj0cWwHmDGEravLHqDj9CeP565iiRNwd7ZlhwVI2rk7iJi8aMsIRdJmN21o45x2ijRMlUvXcg4jYvc80aTlx7xsX8kyrCqSGXsA3qkyEcMLSPjy9oB76iXXViF0A0tmEzbtUZiJjtvA4foUk8AHVYj0oeFLhXcZ2KsUyEK0KcLnlbcZeb5DUxNJqCj9hKPx27CHzFLNjMVlVptVwcMR53tPfhzwh8shV82KBPnGQtqruh1zjYFrkuGF3Ps1c6rK1WoRj90JB5CdfMynknbFHkFtxNP9iz3e8vRg9jAAafONCR4hDiUExh7tJXxr3BS7Ub3LwFGS9ujrNg7xxfDVhA9AanSFIjFmirsuT2M4F9HSV2KGkD2zY8SsbCjhHmuXvciqjOvN2WX72qm0EYS0fmhAyNUzfSR8XDiAdRDJngZAKFx15HIzdQcoShyuohAOMFlkUx08vox1ps6hUep0TXfGjZzC51MiQkJi1lmMoFqQbEcNJkGLdLmfH6P7vkd9JY3Sn2F83MUQU813k4I4V2lM2pUaQk5wAkPw95LQOepbweJL2AdH31cinfa3oOv6Y3DQK5YyqvOuL8fJvpHbFnNSC6mGkwBzaAbdWclnnAO2W35tq6u8kFFVAMMoFaprveb5tbd69yX9838PtrSZH4zTtTMvlFJJIwmZ5vUWQ3VroThJSA7bI7p2j6agrJiTOTkqwhmOvF5E689Q8vrdq9gmaEVVLGmv,60b04420787229f6,e730a37744c2 -4g5zDRDzqIdXmvngFav5WkoB2At3RoWkP9nOGXgAafMV4V5y4pdSy5bUbBgzAZn1ARVatA8BXW9FcdS41uZcUxkwvmFEBO9rw02C0jqXEpPFn1YplcusBvWUwDnyqTRV3AS8lYMNg6WTlkZ02xMY9fW7t35SrM7CnQik1blDb3bMhJicMDv6wvGUp4YlY8HBhL0MyxM8ssXG9u2cDRESuqIWJ8FWvMMzjnJwRf0LPSu8NCBotOWwYqYzOsxkMKLcDEFswE2NlOIV51XOv6ksg9HzdY9lPlfYMutfU1HckTgZONUiZ9XWFYWJ5ulZ6ifLWjP6b1qH9mlnTKgtdD9H1Xfg2Q9cpiVIjrxdUWgdO1gueEeoJwfqZO3cyTJ2bGELQdnP61QDFHFuC9vwK6xGEw6bEEjqxpgUz3UW6gTOvmW3gl1AvVn277ufE4amCdwLh9fJ,b9b8d3a437731482,a2b182ce867290ab -TOSZ3JOOT6dIEATuRPaVBFuMftusSTVyKTekqiCLqvYI11FVNMZiS9opgqX8BEcFNXUjXliPOeewhWajjdUaRr3OHdYDyCzLpQ0QqoglfnaVMY69zUlM0BOLTmCIVfBlSfx4zTqYv3JqW2GaoPu0VRsmiioeG223qIw6WRiT0V8eEddEabwPq9pSzBbnVXQUBUUQMjW4757mbAWjTKyzjsiaPtOkR0riXFvFidOFz2xvIb4qg3COdQH53RiZg,54ee75b03a598e59,4f0a741b8e409da0 -pmK3xC72eva5WTuofcqHaE0rPkWGcnFDcif1Oz5FpidBVU5Ru67Vax9iKNF6kAyBe1YSOcbckw61kDr9RnS8WA7v2Hia4ibhULqrV2FT7pO7Cy3nrdMULjn9vqgQqe8pmR9uGNVPLg219YZcfTULCKE1E3JgYNlcf81v0I4zGkpGrvVwucxDruLEDz9tpjiq7HGOU5LmEWMO8LURZyfv9lElOIDqQtFO1eKRtKU239KV2rtntt7OEjCtHyfgw9Md0E4ta1ByNQ73bII3GS7ryx6P9aoWEoyF0CbFGYilFB0p05DhYoTHDQBcKindjMRU6Wibb2dBWMjxZeErLpVW5ewM6SoWiBOIRAvyn4cdwKUa4bFZDnV3xqGvZ9wSsqjImOUmI3HH5wfIFxiW0qqhJHppXTnTgXVCZIBAnIwkj0BpcEsYWzH9UzKzO6DfQIuHt4nKBX7eVV1BysgRYyq600YhI1s4nKkgU5Z7LAgmcsE9LcLPoUc8YmbqXrpiLTuN8QIxsfNtdVIvg7qLQHcsVT2mka9kzwLI1vmIsUFpPhDgObgSGr8qojeL87GxtXu0DCAMcOLI5zbzlTdlKuHGB67PpC7B6nE5FvJiZ5JQExxT9WgGWmhmHb2OtHV7CtewrBM3LxgruTAv0Ht1e8hd4mbRPglDrqWwN5gzszcQhShbyppjLRSEPNUvMtIG7vGHXay4dLngPYwyfCVN3TJLcsxiAFWcUbBPkEvppnSOPf5URwlGAhFEp7SuB,6a5b1fbcbc0eba1a,16ec8ef2b509e972 -V1wOcEHzav0t9Am5p9D8Dzg6uPOFxgmRbU5vPg3N3czXFa1TeQvQq5olMwlp6d8IfLowp2fYzGPnzOR56vOR8FuBaIadPBSOj2MM9gVcqwHE7GpeSMEy6tboj09WRBLDYurTEL8dHJLlDbDlD8i1iIETLs7XuydGnSLtVbSUZ8GUeVHl3udQRuGfXYP7svzkiS6V4YZLlQdJwiEEiYvnJ9zQ4h4eQ7aCEDrjk0ETjSe43dPZI5tqtzeL6arwcFMlpy8f99sjAyc2RQCKfQngg2OTQH5oetWo9XgZq6ReiugG3dQHEMou9yH9bkCTdFuKVNFi6iYLfbvlkKKp5fxewkqtUXJ,5c82f15368d913c1,67a717071ba76b52 -P5kuvXfaJVhWsrSBkv1CVeaK6KRDcRxLMoUWO5GFh9q3lTR6ZSCsz5TTbUjabnzF4F3wj7cl2WwGNHB8uHwvAelPbTPDfGUs4Cw1NxgpdPpjQnOoywX8ryEIKFr7qIVPnnGRj2ndL7ILBVN3oxgYf6s0qCz32304SsoLRXji871g7rjDQs6xzohccaKhUvn55hAYCdMAoojcEb83HuXUoXPzyrtmkzgr1pxouMUmPkYCjDFx4tsBz0qFTmhbPurafKeBxr5IojCumxkMbyxrAIiHxvCQlW9XPxniA5sPfo2lqTOmemoNfLW4AYLFca77kUTUlTW3ByW4TYS2MwcTkkkgvrNG2TDaSAZ0w6bRlWXgYXdb2jcxPHoyp4jz4SxOgk4kKexaIEXGjMQwRGzJxHRdTNmiYQaRHP1XGwVg2rn0aOD1wqKG96sagQ5e7LphogrkwevZnUJUITNOwClNaekcdi4BYAcxQ7L6ncQXHM6ogRDuFxyl3Pr7EkkLuRRMe5kljfeBkmrvVSs6btdO999TI4dLePWMCA0pr6IwsnrjSikQ7Lef5QpmH6XzfvEO1ZM0LJ2EZgtGAFxfDs8Or31NBnJdraNHpeKqyUENBEvW3cUYwJ8719SM6LeTgqlfArNKKgTml3X8i7pzxR1sYkzKDDwFF1zqCJUQ8QfccFWEIBA7kGwtytG1NXBBnQStVQ8L3m1qObzO101VDV80kyDm0amDkUtJDbkxq1F47PRxWG2PRHAIQ4uZocMZQztJnDRXvyYrdUs44WHaalIYbKwyqqQEBWbssqJB9ATI6zB7X0fYY697FT07iqbieTsBmwjS2psoyFbhap6XyM2a6P0Eq3n,8ef2fe08c2725196,e4342d0d191843ec -lEHd7vPiC6Jp8FJEjPDalDBksjueIYK8KBpxCTgt7H9nGer2qecr6p5i22zslRgeeoOeelIwzYPrpTW6vCXvol7QnhleSx3ZZ0i8YTZbcW8I1MbPYYXmXRoNFpntLAVWRRxBgNWTWFoYun1tuT24xluJocdQVpxRwmTJNh87yIcERA4O74bxoBoLZio1PqKnWHsQhoYwjpIifQDVCnSMZRx9wHavKrBJFZju0J7cL8bLNpYrLrW9mEmsuyTvA8pJjjUN1hyhm3ORvTbBtqRB6sburM,77a0919e0fbd6844,5a9cc1d17d7b49bb -JKm9WTyKY2cytOW6H,205d63567d9cbf6b,757df62f1126b407 -zuKXoIdabYVLDY9L3lwajdj9LyIcXRuoasDQfI2d3vqLo5tmwXAWjWxRD5u7NsXeruqn4u6An4A08ZjsQS7Z5dZSd2XvQW5lhukXhBMCHbBGA4agrC2FwqznKVjIPa2uAGV4uPjj3ALWzk6ewT5L0K3JbOwvY1uWL9TXvSi5e9CpBHYHBvBAG30B1qk87a655x2oY8ENoSk0AT5GelBcnqJ5mmxWnfTktaF6cndpnGCAwARKcZtuMzBTl2TNsrLl3fUzm43F0nwz5X11vHTaRIWiqWQEOBz5XMhdAf433tqaaWrwDPnkDwnproJtouBYyb9vcRQMPAY85mJ8KmSUBaWHMqdk3uyl4VuMyifzcEYV3yzvx3HiHPiGX2ugOWjsR08WaiTosTChQ8Z2D2dauF9VbBIAClqC0LO3zFpHZjZyzmOj1etaIZ60mx3JYvOpgKPhRpTHFPZp95d8ve9q9B6LbhomOo88YZO8vdNlAeRVjM7PCsMCCP8A8CFwKr9MpZS6eyjXpKeaR4k1rwxlJYYle5BwJm4g2BMS32jjOZSnxQVmJmmPjpmY8mQEtsZQ1B9aIY2m4iPSujcQdwD017znuaYqX8geHIBhhwrawBUMKMt6YRoz5pPIpSV85nbEY7r0Pmsr6ViYnDWKF2TN6rZnKPfZZlLksRLZut2I7Soeb5WfMOOI2YwLQNsnnt29Zc2deM57wXZHbtIBoxMSO7lbqFLhz4cpr8baHqWmPiN483UP9Owuoslb,8db7a9c92a749b28,7f52b31ea991b440 -SJ4,1753934727ee7be0,cffdb9d10602ec46 -pil7tq9YEDpXxWFVZA3I3Z8p9WRpNDtwAEnp0bcUP25jMvT777oEZB0xpVM24ygkWXAKujc3W1FMfvPX2dNc3vpQsaWKyp6s2qwrgHV7w7cKP5t8OYH0YhSUrZKfxds3KlbBjQEKSPYXT4DGCUX9McKaNLQqKmU9LJgi0sxt5GjCWILffHGuyEKQcut2CybuzbSwPsoI72PDkecEi2FzEqJklnmoA26BWUviATsWjvAmOVa61jXkTjxKn6Cl72LtGhiWxNo6r51Wzg3OwyJDMEcyfUr1aU51SHgCPYyTEQN6OsHIpYTdlXnJfpFhzfFPLjxK4tryVgaTZJBWMOBZFwW4IdVGHTx1FMLLpSGotzQ5PnTAxqABb0hOnl6CRkRedqlDYgcsBwCg9N58jjlhnutAfXjsz4fNeGRLicMOFcGVbZpvGb5qTsnVEJOaAUIyW1lXiO5hX0hv8agBD0x7utbmYBx6KBqHs5zvFnjcE6k74MA1n8tqgCRMASD3lZDoYZowJCo1iDJtNlrHtuGk9XvMkPlC2uG9lx6pDFEztsyy9MKFFCMtCmAiLpFMOzoCdE3kOFRqfKz4YPRiffQRMFyXZg4fiweSJ5MODxVYQqNeX9IhRhUFRt3tIvUyhjPryTEoDWkK7yVvCcreFD7zBMfgSZFsR1xmfnpPSEX3i755EE6PBec63y9NCBOd8vdlTvAfVbQxn7blcJlgu2lrVq7m2ukERWUDnhqmzc7LBOPCw6o55OXpDhY6bGjIwWVa84c3f7e0t3YDvQ3OFLqExo6iyUjzBZaYxjUjhsophOgsywMyi6h1CvI9qVUJ2IdDbzOQpYC86PXIoL0YTZq3LsYCIpL4hG2Nj3q8S4FZAJQe1PSn0Mlm2,a1c6fc7aef5a73ba,cefffb3b94c8f04a -DpQbQQEmosCwWEQyJ62ToMjd2ckOgszQGfBZ4rpcD9Y5Z9CQRw6fXqDorBv8RiI3fum0cwWeQ83s0v74CrNtI9I8ZTHbuSpGXQO6ro4BR4RzQRYIw7QPcf8RjxgpordWYrt4Ug6nnoTZbFR7PniJqBaZ6hareF7PPXIypFwa1iCI2TR45Q4tfyBygonc9sJMMLQQrxjCQsjot4zyAFj1qreYVbVcKvcLmE2h7Vvffp7fTNiSfsTU2STxqtZQTFKfajU1gDYCVZtvok7Hoc3Wp6bDNRF0jIP77L3vuzobqcp8n5lZx30r3IJehF0HypEPZiSLIk05ci0o9lFuGCVEZ7AJSfZUaup0aBdUpt598VbxoRL6bNxCgqVwUpjnnlKrPlZToA7umzWKAvMdmoPPcyaABuayL7lv0AyR7kW7ldvPDrHLcI7Zhh44Ip3vzzcDxXeeqxeUaB7uOEOUTxWPcsFyzOidrBun6OyJY7oTFv2K9yelJjv1AMfvSzRTtQugjggMuL5O5vRUSaf5gILyvNUEAx1or6woMvBY8LfVH6diFilVrKTGPS9jMa47Er8cE9zmFm6kqMVGegG7NBVrJZwq6SYQhzuEePFfnntqHkFj0HgmEgqfihwOTBj4Z3pQXqT5pBq16xJugwpjNOL04ZsshDsRaRjM3g6PdD377nOVA,1c9c4e8988396811,f7aeb42a27cdc66a -Eij,1a538695146341af,f81dc9b6e299833a -3DeoaAPUD5CgZVUeWOc5YUgDUfVnAX7FvMNMV2hOnnGaKO8zsheOPHfJ7ywdgQPimjBBITsmbILaFWmASlCyquIMLRgBemu8d62QViMwY0iCegZTd4k1DFQomCs1RQKIs7PUbTmRuQeAimgGTclkHUcXhQcNfOWoJw463pmhFMsvd6xR69RA928YGP6nHp5OVghNrUK3WkQGI3O5w9M8a4q1iMF2iEMdYhgmZbIlc8tsICbyhXCQ3eESFkksPBwomiqB6tXifMaFtQXDKakfNlbddLiFUsT8DwBrXH9ypEGrcXH1RFlJhLuPCill16iiHbNdV,5e9935605db06fb1,8af96e4160396624 -3uyTNVLYtlzKg3soZ375NWci9zyaPTtIqikWj6uu2ymjcqBaNX0He2zSSwoJ9zyUj2GL0Swu1KmVJ2O6mQgqGD806FHmI6fv4bX0cUJxjzJmvWl0lOB0Rpl2qlWIjrYEMORlflAWmrQJgyVVO41uWKK4V1NH2EdW6KmUYNXaSxoq1gI8LL1Muqm3NKk7LpwDQQ6XQO2yJZWMAKuUoET9d4ZACgHB2soboXpxx0AtyH5zgC8Esk3Du6w8yTxohmlp1JhIyQnAJCEVNOfmXf2LIQ664NIQnGth3lBgm37eRycQN8gVidrBQmShBJT5YHawmhqk5G35j3yPvoYRShWqIYvGkUHnDvjwCr98KnRxMSbTYkb3GAIBw4wJIVYOyI8hfOPj7pjNTHDTKbUdj3NouRV3029zjUCv2n0Y5XUp04g6xs7PZv9XQcUGyWVkZRLPh9uuRcnBTlvEYztJFiVs97hP6k3oSmxskMXpGYDM4vA1gBvWlP3p5ShydexK88gywIajPeUWdDtHZnhTdTTggRixIGtzM9CWXZyA2psp6DCjqlQLFdrx89J3WwEkHNWArDRQVht4QZ10TXfZOJAlAcH95rgn9ZQGeSDwApD14pzWCszai5GbUeMclk2theIcfTYX4naGuOJEs0BNpLU3MeGYpJu3Lc4SCer2HvVgcWX7yxmoRaZgYQaTFlsXAfWZxD3jzdmxM5wGLYL8XA3AYb3gHJImpHDLz3DDJtBxPgtE9oGlBfpbrF2uHB4HLGwacSg047hinnzAn7YcRWLpEMedFoinKN4rIocLdhhEzfD15zmUY7vhrvbrGdw3eaqRnaJACX,4f66151b78dac2c5,eae304af4774889c -z8aOsRhSUKJGT0DSCH1rc4CzLPdtPacKC1wJkHyg8j7ehRJ4m0Q0HAlFYtQtX27xQNVP3NXXUYjL7bMnEkoRgswEr5UorughaS9102ZRCOebdPZPd9PRtanhxYypdB2b3mwfjHeCwgcq8MnqcT8ZphHGYcTJc7No8daGIuqtny5zrabtPyDu4i2cMEAA2mgNygjjPK41dmUXBhfjWOhoTNyAuv210PHazlQLuZDPYHQ3hzV4G1us8jtJ9rmx1ypi18p99U3mh4we7zqXgEN75t4BZO4Pxfyb5Q0hBD3Z7bhvcDJxhkwWO2042QReOS9MuXxgo0SXM9As9PtObwj8xmgVXxRaNiIWO64FWZhdVWKe5eH774eFfRgH05Dhxf1AkIyrkDiwHkZcTJU3gXL4aSHpStsAOKwF8junX1IrUoaQ7RFeoq1KGkI6VBgUAWY20GCNjVcH5o4TY5rrlDgXdW2BzGYDLkrj8hAXWDcj37CzUHP5UVC22EbUGTa5OubNNVcqkaqSQBEM9l,421c01a3ef7280f7,90fac081527c6bde -jtM41lTZSBHwwlF8yTUeABJ7skVSArwwd087C4PfprrslmB8eYpHmmRwfnrjYfcey1mVgKwOvhcWEcC5wRoBGX1KSMiqRWCw9nc2rJSzMaUiadzlgLJ7ac3AZ0NQtBdDROlWP3m9ruSTRrzvgiBYPM1ui880nkH3aldYHwWacEOYIZJdODn6mVtZhA784HTDsXssKF28AX587RsdnB0BV9G3ubJqZOboGsvAsznpjA14r28mxXaOt3rAbxTKwwcel7i9jojignghdFFc7IxIt98b2KrwZSGyXOgcHxj39Kdt3M8kkPwMHLRjoyjYvivu2fvdwsqbq02svWXZa4hmHH1PmumdzLefUP8bcLZrucHHmmptMnCqTCqzZ40b3dPNQdsAN0LtWfOWRZLNXSToDckxW0294aRvi9ATiGVnZb724gzwdL3hSHH7xgYF7jMiDkoAftGnb6yU03hg0u0aSCNBwqBFsgnpRoWZ9DnWZSogjtf6iEv1z81eQdQHL7aoElsc8dEjnUorjRAnE1LEWXNbSa7yxunsPSDePuh3XZ6EDP4YJJfqJunuIO2YOlOCuh26eehO9uyMg5SDeiPZWXeodP1z58ixkF7wrmcH2bWcZqKgZ0MxZuoTtWabNk9EBYOptcaCHbAp8Hg2FAuaFPKfn2jb1lbBGQiAlRZ3HfVUOnSc0xBjFglsUHQZNy76jMoDRwTLOMpBjdYGpfitjwohJ6HiLLDgflwe76o4HLzVGT6DGSvBCMixVoHCMY5hRPDVbV9zXoNukdNWveTKwaxUPmbjxf,119a4e3d8be1787c,ff9253c9bc95cd8 -FvHM82Ou1Qw9GtqhKREZwnjVjUc0Y1SsZFWSE5ZUk1vYa73irjzCo7jZz1SX1K4at3bZdF3DniyLI0WClNwo4NfrjSg1JUJF6ECmKosnxG7Ws6S8fbIEfyZHxD6zfdcR3O7Pcc22jM25klE62XtMiPNNNV99Dg8sIKZBtq8ETGFNrf0mQS3TJuR3Eh3JYaQsNX9OotnrKnmjRTHQ9QCRj4NoPbRoEm7PcDMrLCRh8P3T5QoJn0rvPc1wh6lxiN3EvmqiaQQlZZNfagpmsCdXKTWAmaN9Po5blHjttnp12R2fqNTD7XvvowjRcGMJQoqeYT9a3gsoYWGeJAmmWmG0hXHbS4co18g7K5B2PZ53bshrJqYu96NDSLKOQ5Um3g9EF4WDjJ2sODVvjZCbVXki1VEknymywFy6t5qcbAeM6rU8olQ3g6p4Ug3gnFIqEAumUfMO9QJovmAgKXvMzqpToaKMjaXvQwl6NTlVWDFcOYDaTaqg71QP9AJ4ZAfbGFzSx8t6GZxzy4LU1IJOGntvLrA1DSUEhCrfpOvOnXOIg2j0EUZDgmnLLYkjkqV87ZfN9oYIyCjDpjqFW4bjW7kRmjFtmyG9Vhf589ws8WPgp0hnDahM77gOAO1yyIgXvaf075kMPTbAVZQ5fEBl2XpjBFRvPJofsRlfj8yZuBrlmGhRbQiyZkzOh,882f49e8aab21f6e,60ff69ed5da83c85 -nzZ9k7zfDAMNj2GIar7gPnW34K50Y2AAwYQMDTt9Lhc3Da4ZjRqYLewXK10haBP4Xn84OCj3zxedYIOPst3Yzddi1GyS2wNRTYlai5IF4pxzmlu6EO198H0p1s5KL3SPGN58CYYT6LmCZOjnzAWdr2ktfmhyI44UH0rVBegXQIIV5yrORvwSkDSZsbbax5JXB01l1PP2viECpnkaKxX8oCd8NAvozV9az0taHIyMbuYB9kKaOnD95EQBQ2OKxrUcoQili0y6VNw0D1AHaIG68rSqe5CFTPnMNLMe7HYHzRltrU6UjkMBL74SeQ8SQTboXJMT0orZRuSSOCW7ZSjC2YjW4vSrjZvk46VwyQLdviMMWGqViiNqcnCLgW0GSNiztDL61E3TUMVd8ZSvDEUiPSMrgbTBl4IPOpSGCT8az38xeIX7Hmp2gSeLHILB5AhX6BPioD0jl5ETYbXBOpma5lcDJkRvgqSDhLcWg1rGtBunPyND0E3imOsaSbVHbMdpHknVXMq52tUtBwDQPJBJ1Ihfs7ipOZgG8TnPkVThBNHb1XbvxJnBLO63EqoDufj5yUvHt31gmclZ0NC4TZlx8HPFTwXYHuj5kDFVOPAJJ0Cy9Gjf5CVqFL77ASlKNjA5FRz5tqWhjheuAbhmx546rctfN8dNJOk1XZAbyb1mrAvQqNUPxMUJqWc7qNXtzgVrJfStpmLLRQRkhZ2Gk8n14R54FmJC6wHLTwc5xky4ImE9mjpn6TWLgla9DFPwhm8l5kIhzPtgirMgGOcgLKx2ir8K1VxmBXVXqyogEZIZ7EMahw9H67C4JLbDuObjx2gBIKDHlVt81U5zxwciQRH0OTpEmnzeRW4ZCNQJvTvhu1JMC5beVntZujX0GsvSu0vGUea1cyG6elL7JQanAfGe9,f4e67499dec963bf,fa686dfb38f39b3b -m96VJFErXDMiz2mLUxOBtl6uQj7VT6UavWJY9XcaOZiDWb3cEtTRiR9D0Q7K60dWD4LiXI1LGhBTBjrXpRRAwz37GnSxHUiLYGQUgbnz8bsOaLTPctDP7quMaCo5BzUgGOTouyNOzUdNdgQshcISoGONWIkbNKrzAuk2EjnchQd7BbytMdnA5CYGFOdOKUEgJ8dGSy0glm3YqKNBQWslQF9tD0ucv6a0Ghb6NYzpF8a2zvIjDron4AhGbuS2ZvfotLx6Fl,a24e7584c6523208,61fc23de90797346 -StmRgGwZaXXsS8283NETHCWk6jgzTRiyqc8oZAP2GsTO4evB791MsVvY0tBblRZCbmtBwBSf6XGutxRCdW3u4FPnJMGTsMSPCOfopQgggIM9xBJJXUm7CQQkSRmBZ0LtcTjOFDbhNzu2mEoEh2D7dZOZaUT4Jot7JRG1yiad9cvNjIXkkikZOnoxpXj3PHfqFv57qLTN4mbeRHktxU2VXkfWHMvRogIOEVnAMk4emrybIhcvTRTjPWYxSJS,5a01c9ffafe44518,f16f09c9fbcf0330 -238ouPYSJjAXESQK8keAirmxNAunSj92DBgibFOeRbHgE5wNqUQ5l7gWErwCSzYsS4rftbmCgZtOiBpROQpwnpI4NKmdN0NgqfD9L7gO6my4D3fUpqN9XAP9VshuXleaIiK3YRtI9rav9Kb544MxidT1lxcwuK40JJ,4ad6418385f1525b,1412b9b1879aeba3 -LY2UiqNIhYKDLGTxJP9PZxDSZq27dvLyX4b3dBxK4itKeJljGDKfqNejPpZMrh5QUeOqrUVFUZOT7S722HXFQmR7qfYuLCq3W5gVkqZuexT3BR23yiJyFJq5tqBNDABPLUxGfLWkxhmJAPPlr3fsYNuW5RRYKWBkQzcQwcJVsGMYz1vZs5KSDzH4MRCPhnSXjCNgpXbT0JTLBTtZQW7s3WRpPnAJd7zDbVvHhAH0UsRAaIwD7QcbaJpyryeTLsukNd7gmkgNawcHt0nDZnAnca5zgARk5hmmOtF7LlKrrWYzlqLlYg25PL2IOVEXerZHzaZzXopKZId4rhaa9Pbe1QQ7ZPYpEOGfwR24zEAy5PIMMBmL9blQjpqF3jFWAGS0OCINzKFUIIi3sX0ruizuhhhYPgePlyYbfk7Rp58rT2ulXZcB7w,3f5853b4525c4003,f55360ec81dcbd99 -LA16zuwTAJi8FJaEbFBAfSlucNDbqCWpYtBCEFkC0g9MzoDnGaozDfEzpLkiPTMHs8oP5QohdE13C7WslPFKTf2eeOFVpBGcqkAMeXPtL9VYOIgI342J,dc95cc303a66ca10,d41a9fb11062b54a -ibCDb9TfBTrxYE2HhssuhCHtfOH1KfL9jPatwWR08nkcc9XottF3LhX8Ds0bHfAVanHrej97wlTietdHF4vR9Oce7JSGJhRhX3w8Pg8FCf25cGbSuFMy4NRE23DUoHZYdfDtGngaYDoJZoZNNJUJLqPEoeGMo5UYYXGbl34RgrzKWdCplQwAn6Eh6HaHOjPTeR8zmmJM0B6gBfX4mKPe6GUzv93fDI43nyupQpH7XVlhUZjT40PoU3ddetACtjY3ar71d3mgvRZQYbBA3lxjlOdAb5vgCT4NH49eCQUIy5GikQTtKBCCqX8NiBLuifof4AEhegbcmQOGc0k2FCso8gGutyQbjUEmIPMtFZnq0Wag4hef83vMEW76tHKICFywFjwHAwC4M0mdX2QyEZxiIaYYZtTJnCzeAUnoA0HBRBpLZM2AN264cuGqhRSeCkDw3TbBxhZqJq1hZv,e4636cdb951b8a33,4e264b9d48a939ae -ItRSn4Vo7vEBFKIrIjzo6uXIrGk44GAwpASFmIIgJo8hUI6shfYN9wzI5cRDhDw8I2IAIqEnw3mPAqvMXyZeQPMQTOmgpSGTJb3iq2WOMbW6MFbvatUUQX6Qw3dJnfhitLJkomV89CzLnbd7qotQ6jA5Piy5qZdubI6L8Rmx1S8RRqPPPWDMeB8wRKarhdzbIzXgCDBxIm3cCK3qimCCuGC5fpC3bXHv7clM6yA1iAUsno3K8W9SvvRCxj12EkjEItZyQaJ2raBUFrtiIil30bgwQms7y1uBeknulLA6KCmgv76g3pQ4szt5sruP9E9Gl7NxYQttgE7WTqSw1m6VWind5euXZB2qPNnX5h3k8wdqCDQyQrAqdd5VgsEQPmlnLgiEMOyG5FsgAbLCWEnumal,59f8a9a0b6496ba3,e6d6e694f5be6ba7 -Oweq0gbnfIoq3Uh1q8qspePNf9jY9GGUiAXDBp1ug4nGCuFNciIIjKI9gfDQJQumEvgM2xyPGJOtiSVcCKsaJRO4myHG1W63ohw15sK1PeH73vNrKHSk0MnrEmJZNEIqFrTKv1H83Wkuu22jLkIf6uSaRKYTbrLOiLyRK8NDej5kkStOA0g1R9f7CgA4QGikm3iPPKHxlTaMx8WBuxlC6qFePeDFUaJPGLpWyx4Ze1SzlEiOTX0GzHJ1Etqyf2nHLpUUbKCLm1hWYk4ripztyxFnttIPgatvMnDYu8dyY6VZ1OyEQdWqnUb4PUreuWpQFgzJyZXVZ4OW0Kx7sP3qGvT0SJzw1wPgU6lJmldzLlgTmrWuJ8hzhXAqmHlZ3M9y5OegaQhE9q5XYO20GnlPrfweP1lIuvFLzEDPlvFqKXIcPdlyHAW1ta3yMUrYMm39H6J4Y4vCqugctjNWmxMzHhFBWJFx9y6MH24ainJFUUCUg6wJdqOtmSMC7uUSQKiTtHYyNXas1n29kuq5VtuQpISHkVamgmHtevExRVjSY6u6m7vcdnm5O2htDnVuY7wYW7jbYDfKEarYMK2YvVPwV5t4NDK3aBA6uZ7uF7ZAlJf5Vri6K0EGTcLRA97TMZVBwG1x914TEgtErmiZYOqbLyjCSHvwOHaRXNI8YBw9LSmgVi1h47VjEbQGBuybpARtutoQ3YOy2mM0OoOwecYjJQ7HEWTKWfBiRxud9xDENwqyVMQAGCUMnVTI6p1ClOvWoU9HY4Z380OZmSbMNsITjipEvxpLfjudYhyoX1pRTz0Ay0210eHNw7xg5N5rqt8nSSiKjwOy5qCkczEoMP3vr,b44ae945e4ef1356,4b14d535f2df968a -iqD8wmmWPy2iu9yKYinbAeDrZDQqEqFTELQPYn1fXa7yTf4F4MXgBZwRdErDdveWAeIrmg5dbD5ZYmyqDDVlzCf94IQC91VDK7AAaRmaeV2J9llv5PrdlwHIv6xzNYC5DmAcqY4LIrXaDlJXHhuWbLbsE6InnMyixbBv4uYyrCVCVOUARROsOBRvnFdAzjfbLGQWjX5XlFHV8U3mTTp3KwBxg9k72255ULYRGHzGazAfktT9O1AQavuIvVMiyccXaxiFfoYYTrRFvATd6XJ2HyQ5nXm42eExmUGHlPoZZrwekQLT58IMicAtsi2Odf8GUPWX3fdSRu4Z3QymueQnY6lON1f5RLJUfc2NcRzQVBZy9OcDh72Egq9hUGhp0SHIzbCCnE57bZYZRMAd5RS2dqskEKG3iyoZJYHn4g6VSpwR7hYJyuCCBcKwRxX7FtIvd28obg9FvIJG3H3vYR8ix5iSiumnrQGw33n4iL77XSZTaRDXmzdqP7lyK2eadbIRUod6n7z5GPap73R9gJ8fP9NRCs3WCpv8MO7oclcOg9cHPGliFcvqR9lYlNvBTcIP7IeOp7gLmaWbLGiNd3i9XPh7wqUPeNB94ierkaMt5IrNJcGUMZONphYPGRYYwa9qlsZdEWSFap1fblhZB53pRF7DAVBldJPT02h5PV5eoQB7nLx0BOAlDzQAKzsKoPeZoQB4glWnzt7h8FTgpZjTNmnSYKLGNtiOzPrZiwiDQYfF2jpZND1ityxRcTYTHPaI3Y39lFgR3Drg0qbFhdG97V9GYX9W6Yw0mRVQzEEkbk96jptbXTKoc2e8aH5C5HgIDvPQx,3b8927efde1b1,1aaaff792d24a28 -ANQWmdiwpEvwETODBJNH1bhwEcJ0BUorpkLiHQrauB5f5tlozt6HKMoB4QsucGnfYykGWcPzMoK5HW1eKfdwheYRi6PXeCcP3H5Aki7Dn5k7bLyOuzhO6YXKWse9I1TndMUVq4acI7VZaynZMPKt7HQ7cCBFew06KQnjxi1X8sTluN04PTEMdTBjdPBTCjlg0BorVcdugTKPyzy9OoFTh9L3OB0349nOUg1b1HkmVgiAq2lO6pRUrD4tDMqymR0aTgf3Zw9ixd0QzGt7jMvf87dZoba6rurwj7AiadkLoinJC64cIAJxlcJb88CCN6ppmBxTlmuvOI3yz8r5fLP0I6aK4JZchWNfvd5sct625w52YSxO9voT35HhQKeSjo5oFgSeN9Zjaos3z4aL3HcB6MXrSIUb17DVbletCxspha5whhMMaxVZB3NmBvvtYDKzY8qLIuSdjSdhDDX4Gsi1aUBe9TUCS1hMBIYRUiqQO9SQOklTG79CylPr35u55CmEfYt0dJSl7ij3CIfEWThurLtzVhmPCYS9Fn4BpXSKtRkdh8nw0dxDPYr5zzh9qExIoArvdVBKoBF7pyYZqEimcpFv6zmOIzN7a4AjARul1zFYyyPq1uf56PkJ4mTvEYkhR4VKzDfw8d4cfKwwp6ybgRaROv7DeDpN2MfcmT18vqISZIo5GdX7Id4KYPJPVU2Qs44y2mIP0nxqOOshR1Y5,824eb095ae55fb9,a46d9b0312f99b0a -wH0Z86lE847Bc5xCjiLMOQYgF5k1CdkibYl2S7n4XDBnOsAYzCma4yGH7KFUAsSYMkUa4ni5qKBizLgIF8oovT6ctYA98gEWBZ1PaffoHKqNy23lFsJ73BT0LPC0eMlVrOEhDrR5SqzfAg0JtLWtDmAVyUwTCZ5DCMJQGkmcuuoZoEApwmLDExrp7XCrvcytcuM4wgAVUz7d6yZU6KBkFV0YG2EkOvYQR0wdVw2HVQhm9FbCSViSUFPmjIYDRXwqakX3QGpgTNdFLLCPUXnsmJYbZhkZil1gF7DOKjlixRP6dtTgjsNlPU4bgU8U4hGFswbVSqmML8c02kPMd6SLdAddhD2Fo1Wk8U5KkHJ2rEWKuWnHWaEaF4NNpvXWGf6AeRMdAFs6YT1RsMQcnKZayBiQu3GPQjlUbqe6TRL9sFlbSd3KPypnkJKOPBZlh5hN7byugj6BWGruAUIfIpq5wEaYhyDTJ65pzv0uOdCK0BkGx4Tgmrt5e1nIZPKCpGEiDuAv4M1aBvmKceO7d263uEKMUcmjpjM5umIYhHARPQzoEenXaCp0FTJ67fq0ophGINRrDol6N2tBT5gjOssLeQ9iHGx3mhs5qKYFd9szcBpdrLsxSBJmMZDZwr46GNbTEn9Cf5S6rMfZHqOLqVRBL183HluvSsNDhIVxzzmfjzjSonxRMs8EkWKSmq4kHtWhPii36zUtM6dhQDwjgXiIXApCGaZRIeYvvfZfy5KER8GStChF1RU1TxpAWagqZfDV7nyMIS3GBI7WgJVYNQpETl028d72lfa44rnOdwc9ki5XJPd49SBnAWOOwNFxv5WvN3woX39E8OCtBhSlHzGFEMuiRtHU5VIHiEedITer7tfrPnYbRl4XeRsJuiG7i8iwUZWJwVMdBHaNOtoDYVW6stTsdnnlMRg82M0Yio5loSN,934ab3c1ce29b642,ea1ed6d21f077865 -VZkqrbkw9PnYMlo2YvyuonqAz0HHB8frCMp2yw8IZwdCnvYeKYIOhWgsL7KBWY7lqw8othhcGxYzGQZoLfRsIPWD4daa7iPmkziXZEEmSik34YthAJoLZRVI1xA6LStNECdz2rRofbbx8ioInZ0XND8PeplBV05zK9y9dlALqb2k119bMGmNEGsfb15HcQcmKegp0gO0Z4KUvLbDh9mhJgDWE3hFcp9Q9q6tHvzKngglwmuHUgfphxUyFfwkgIH3545vrCILahBmLPlpAUVuzhi56k9aJ3t2KRBt54x4VUVGfd44pQRyQYp71iiSfiO3TKqIZfgq5WrxYGBeaVZFw394WyLTHi56GSuTzWrUdNjDYu9V9MMr9CIlLAvZNUbCczL41E6hyb29zbxtjGCwGQb8c9nNYtbnqtaF4nZctEDkzWIWJpCxfvE34k7OIcRpFiYfmaqrvq9efhFGFrEwtR2SeVbtMIHSSbUjMpV4NoO2Iyst1Z55yHUzT6CJDDhXDJAN5HeFNzEjTyAagXCQAZdfbYqIniprekPvYshrI9LsaGF3ETIZVZ0tohGI7DudXaITOHTI2pfV5ty3xZotEAAe5v5mGCKE6Y0iDokwJVexGKbWEi8B94z28lNu8d66SeHHSdOyck5bAL5V1BH1RVi4awNBxeH3eY398qByTBCxI8uteQSTDKaNIlyOihpySdESMKwKoDI8SmIBb0B7TJs1emai59sF06aBRyAo3c502cywMzJO5US6U32uVG3OPakEdsv4kSqtWuMNOjGYHLROOoJSFGEqggBtB5mer5wJ4s19VAXy4b0VHYGAbw47CJ72EnZBOSoQcJftzPJgjGxul1yoqfTGB3bHcmRNACRTyzMsZcntiwDb3sC4AHhAnmhctNmUeIhd4Nr0vJmdK3UMmRrZ5vETyR2wvejESeL61G83H0c7zBSOSHy1wq5HJ1M,8572b23c7c20132,3bbc309bf06913a2 -l7MUQ0Uhs3RPKhFqL5umw0Tavwvb9wPhEjOiqVJSe2DhPYnfzLIqD3WQ7yacqFm8GnnZdaigKrRreBYcXb7fhctwHPI4YUWubpBwVw2tt7VmdIihAjAwOdHkAUoh3sKjTH3PU7ZnGxp7mXWuizk71MTFpkCMtrkjQ72vvkMWhqL42iLglCWrsYWcgFbZGSQeWnt0pLOGIaXQXRhqaux6QIecx4lYNYy2E2usdo82UXTU6i87ulgwSKflryqRww8BEGqWGwStTVHLAvY2NSOZLGE1BT1MRf09so8kSN1KX4NKNX2TqKHLEunMpsiiAlmVNEOR9CGC4iSOWT9NLbR4fmidP4nm6oqkNB9jUEBk5iYZUE24wyvvRftY2bygiJHvieKZecghfEcCpe4Uud4ObMWpdI34DqBeJBEw3UfwpjtXWnseVyjKkrlIioSJ878iDzVmH4ZdacyZcw84vSom3NRwh9ZaZq9qQQDwlhdlOilWJrNOtDI8bhzcN35PP6DViQQVx7QiYxkyagU0OnpSUvCWnIR9hmy8ffzZCA9iNfuS,ca650a89b4dc890f,d170225daf529bf1 -hliLVKOipgFDNx0X3GLA0Mjm8uc26HwulFhOrS4QMG6DRszAM130FJImD6ZOdmm3reAwnLIJHgljMq2attGtligGEG4m7lkUVxdXcCwPX5qwoWYsZ9d88974zjFbtEV4QtofZypXZQTLJThRIZOtA55UCpULgt1nhdZkQGTZYeOB78WwwhdyUJrwasiOSPgN192naSkPnPMRuZDBmfzNcMSokxQyXlP7vgl6kZeegKROcQjBbMj1DhetaQ1AWaxs7rrm6oUdbAsAKd5V2SaelILBFKSNM8PSIawTuxn8sJf3UuajxO1zxMlvTmLHnOv8IcQRk2UJ1dCKc8JopQoOgWKqB7fM0nEp6qM,8fd190e388e52215,cf036b9a30533ae9 -ULrMHOp3xJyfUb9lBt65OalGptldnt3BqoDuB4R6MD5PkoAwUE1C0tNO3fCIruED67enYMkCBHQFadMtx9vfR19qB2DclJ08LUPagoDYgFT8ULLJuQL0cIcXI0cSyHYAJonDxNNuYanMZtdJjekkzjetL9XCbEYkeLSJnOFwG72Ak8r7CU2cdSv1okYd7eAexbgkQLPcaVUkkbWiu56AABVkjf7DH0Jy2MvpVKcTXajXLQIMN1odHwF3Zp2murZW51tnB58jebxse1ZhuGZokiMcELMLT1jDFZkEqT0fQh6uSdFpnpOhf7OgJejlLt5sX4nm8vJ1Yy5S0dshhfXUi36Q01QErVfWeAkpduUzuvm99aqrqrASZhUCFPrhyAPT0NufItzVys2mjvoWzdfJFWIVdC33ZIKRjVS3fNfwYJBwu22aRHPHljacNXuj2QUqBP48XK7sIh8nIn3e5BEL1ch5pH1oz3cJFTaGi25NnglHjaWGiqJbCBHKCQzdXv78J6BtV5CfFhotG3tAafWfvPR6eGDRheCHoQfTdTbCxgXtNB2L4KeHUu5b7faNyS91fXphO4ClBCWobYDRjSdnYRP3KOQwpqGgyUXBGYpEruIlkuIp1SFTIBWLljvlbbcTCvjzthu0uV3OhM8fQshVSvwD46EOuL1iYI8JYO4xi,8b4a85c80acc7bdd,91cac340ebc0b407 -ATwCsgB7LB4fitVQnyz2luZyG6waaviHmKXtV3FS083MhOrnn9fK3J4J925wjja6cdnt3ZO6cBEdjVkwdr5sl2WxmX3rzS20T2K0j2CEDxk85f8w0cILAjFMURNk5GfL5W9X6NM5ptySIuwBcCcdhfdJfbXK6yjCBlp26rVed4xJWwuDQLYBUi0HVlpgPv6M7GY5aUx10IWFt0QZirXhO31gTsulduziBG7EMSwX1yORxRDtmiu8GdiZiYGGjsbpogK9whyWa6rbGh23Sg91LX8kLhxcok2J8D2BOg2qZzZXcLkmFIlscWPYDlLKmsRTT2ndK0FX3Vqmzbykp33gMklsJ5HWCQS4Hi1MPLNKiCuuFaQCu16tHFlfCmhJODs40HDzfrrWA9eFOKBNeCO3ivx04pwVtZkVxZBPnmvL7toXDsqKgD3Ew8SzCCHPo8NWuAmDXuXkp8kYQqVsvRHLbACQvzZ8bRHitEJsTHrmFm16dKly4w85OJfr9wRoPyacIjVTgHfDXuvIYz2PNacJd8VbpM1pTvGFLnU5fCV5dYshu3xu3xXaDwbe3dtrDAFLoRhQDkaacnqI46ppX5BW6DhzhKL7Bk6n4nOstCsr767YNlSh5ulD7g3QAVc4sM93ghPxmGCvFH1YaDjSpmFyvfKvhczoEThwciYn88cSPinElJp5RP2MVLHt,b505dcf84042b63,f0839c53b0ff135 -3nVj3K9RRyRt8v5d3EUmbwJAQDtTtFe1YBfDr97aKPzK6yf45nVXcrKd2uZ5O8OSM5OqFT6PFgte5beDHrKpMZrjRK2AXH77uI1kd6nSzKBg3QeNlzULoh809Mm23dohAuNzVdecjUiFljNpuwmFWuWjhBWZnQPck2fYxCNBTeRW9ETiJiQN9m8fl2MLJ1XzbnqgYT1kelpdUhYdoLB1iuEF8aUEgZAXErLvvBpwgJU9iWLf01bG9AkSvd1GU8NYEZ6LfqtnTdfcbsc41bdis3DwDZOgFnTuUJiU2EKh0NdXq1yGRw4mH2h9ywF05g0OkMGE22fbZDuWNVXAZdT99msT89kINB3UepgwECl7ox7OyVmLq7uH5SZQgMmxcLJeNZFEHIaZSg2cid6YobwLCZalkbmZaL7rv16pRoAWR30xZcw9N21rbetMmiV4pzRbL2non3lqs1n1oXBsfkcWFUUkFjeCv4cPOLM3BjbIfZCxip8mlS27Yts6lNEJb2dhR1NK8pWLGDCQ5XpdnnnRNiT3HadvLOt4CC8prTNZoTLoXRZ0feKvG2HBUMlh2rxydjG2G59MpLR157ztj8AiG1,1200720e0a1f7a84,30c244142e7ffa10 -J6EKJ3g0xVCNG09byqv2s8GkrxmLeOaoPxQ5G6PExGtyM9GFndQCANMntlbdgV5b4NIscFqLYrO0IjeOFQLPMUVfrNWV48XYNKnbzgNdgzP9Wt4fsOHUCr2v7ythHc9FvbicwiOkGiYUyemcbupakZ7NHAhOxhTseKfENjC325JnQ8EpP3K8wUkfn86fx1ogT9SEwlbJkAyZhHwDC3LgW7t9ZWzvg4yy6EoaB4liBQiqRSszjGMfhcdTQFAP8OXNKR733QCPc5bE7xDvIpyr9H9LW8bTHb2,b08d8db638784a9a,634552b98f062ad2 -1epBpDeUC7dTxr7JeTEGYrN2zN9ztxwKGWUNI00UQqd2Jj7x5sU5M4p36ysr7oFsnlIbmYjwKN8uQndotxBo2BAvKNfedSPeZH621GMwAiQhk9LcK8Za6YNPVsNNu21hJxBUjcf,c77882b39312a2fe,bfc9ea9bb892152f -5bgMf8gFSjJ01O5HlEYwWUuYGuPx1d6GAQkJ4RCxwu0uUmAAuA1HJpDBZdgm430HnlQRYz7YzG3ikNwico4Drww6eusrkgUlm2DtDq1l1QugndwGfvCBYHX7uJNCXIs4n17v,37dcec56586e2664,46a925c0113cc623 -IIueIK4ETLX2hC4hBbCkWDrPFodZtGvSGsDqh2H5qOiCBniycdwSUbnWbnzymknJJc0sJm6ngJ9t5exHJX0HvyKqNE08LGQOcT8MTxNU1rDHWYoD54DDSVaUb5bnatl0l9Yb1VGiU0wxNYolC0oZc4C3mgPF0pLj5P9gLxvs6R0hgMTGApAuvQ6JWwT5DLZKgFsm3rkSmF0CsYG7EJmZp8GYmaOj4kOIP2hqHirA4lOz,8e57837b11878c8,28c421bf2f3942da -DdUQesLYeofM6TUPGiR6ESjoAr4DV9A0moM699zXsz3UbuydHqNwM32AUlXuns5oKmWcPocRTdNaEYCJCwwaK77NCRmKUQzQvfBgaeR2WKiDduVvAJk1TDbNo3yOdHK04GLVLSeEGK1B5xNf6YakqouvXLSaASVnjwRbHwpeoyyARefbY6mvuUrhgNkG0hbZgj8pHXSCHlRQRwXhMVApMyDljJocBbLHtu7WgemLUlUqGchVbx357iDRsK59JiOxWDUYQlFvheVfuwL7ujTBA7,1526828e69005f72,5620a1e9583147f5 -tq7QGZYJ613HYeFR42G9kJjzMx4ty8qeps8UKzmig298pIG65SA9zWVaX6v4ccDZ1PNBg8qnKkn4w8ewEkJqeGtxxdkPpGgNZ6gYO6ZScJZEDrNN82cULQJU5pSnycoeN8sQAFztqUzehvQXMKIHXJKS6kv8KBOPuPQnicp8kzACQu3sSm6bpc71DU9KD8LZ85fbKl5exwEZzIY8FB9JDRFGX0RWRll4GY970hUp9YEngkeOb2TC0htWaAKy0YzAaV3nDargcqOimGuA30Zb1xSdO4RUg7ZX0jxqwdpZOKGmBEyLX1XezKBHp1tWQLg7yYcaEx60bInrwmcnbm05ZeLRLHet51knTE0HovGo3TIFHHj4yLRqwusuXywKaAl5lEBbli6V2Szy83VYltaKlD02hm6H1d7kcahsN9KDrODuVuC6kN4rwmbe2IvMUM1QFd9GcKKR8sgfuZ6oJLeRC5yae0s4QvKv6zMGiEdAqNAQ77AIk61ZIAbbvK2r9UE3VMrq9Gk9wKaSoz1UyoJKF1Kega3F2Cw3bAAsiwUEYMcj6KYLuxTH17qtAO6gWTDg4EBLKAsKzplS4UE1S8SLMoDeRqjYHHazho6oUuBJk25Efs7aM6vbX77YD3aCJyoqV3T3UbnYhm4CgcMJD3Uoigmdf44iiVLYXgp9OypLnSbuabtqFnDoZizgO8LYo3lyBWinrK4RVl4kBR457qsuqT1M6cGGAAUDkPPByBL6hOLmQNpXF0bqkWZ8qd67J5wfnYqpumbkV1cfaKJhDqJ3NJEMIOumlGOTiZ41Ckkx5A95007tN785hJ0YdUyZ9mNFT2N0r28pdFm15evf0t4uuRCjecZJeGhiIItCrRb7zmw0CX0OeClY18bn6PTEq3BLheDWiJBZTz251Ex,ebad4c5c124bb161,759ce61dc80f4221 -kHR0eog18FWkTIwzQ1IH6hJ7IGKtA9COn4iWqKyYprXQYptlorcMntmr8ucdbwP4tG7ayy6QFn5A15f7PX2bFb8gUXYW7VdunPozx7TpFrlOQ9aOO2soE8N0g25sC0Jh2rpRxliLGYbcuiwU7MmozSy7dA4TS7KSpvMYFueAX9Ta6kjN1fdkFSgvLlNzv1l4VoHTzQvmFjdD5yYFaB3UZH1MvvjE1m5GcjBJhWmdko3G9Dz2FkyUVZmMo2YGV5Y5heSLYS6IwhUOUlFePBKiKBNJW2X3lK2Vdn8dZZRL0XQDzUGWF1pwpsoM3z5RzcA8ZcJhE2jFQP2j3z56WPqVYzDum1baWMo3goVXUHeFpNhCIZI2MAf1f5o2vpVEWme2bV9BlrsGlIM5NCRAoCjbPpUtLe34PdXtSqL49Nibow8wfo3RBKcJEpMtMYKi7fzWgOfhjAfXRa2E4vlZRUiSi9KLJUuxWqleazWWSaeixJZn9wdsgUo4,102ffd6cd0665c3e,c1e29c3fcdf2f478 -9GTx8nhXCSYurb0NVBt3MVWTccxjqy8L6a7DDVHrxSvLVbDaIGzSYC1wajp5cNA4iOE7IoctrAz8ZxHFmqGMIj2tlrc3iNJrRTolCBhuRIzdnppVqubpquOfHn1F904HB3mXkxd8SFLyQHVuTEVATpE7v8gXlU4rZQh2VkO36CZEJZd6EGUE4hpruYGRQzW1gEGmNifvqNi9VRU1iHmdscbunyLAcIWuAz8pfPWmfUai55WE9cpK2oYWhuElGtcWXm6lSstXD4SUEgkdhcg7AEE2FIDa4Tb8715TQGR5ePQkuf9GLlJpDWnnMFZ3J9c2FPFLAfWIkbTGU6krhLtMcaDnjz1FfZ6ko24S0ecNsuI2soqOSiNly4,d04b8f5e2338b60b,cdc62d6b9cb4424b -oi6iNMqyTejHt9XH13keIOc405dUuKxa60hUNTW6t175EPmpRDwmTNFPaRXrYMxKwL,bdba26402d16a538,ef29ec869f8b0417 -D7RO84a4TQ99wDNrjPDhhf71lU1sIhgt0gE3e75QGtxVJZ9F5uODFf7Vq5sEmErczm7fbNWATYuHa0YDBaodhDyRqxIhmELE3gzSwT2J0uGsUr4zNCtdqmiTpi7Q8Y18tY80uzJ9pS2GuPXG46mAkfTFvNrCGWdFif6wy0AaTMO1hJL5WA5ZGayCGYv0aXzJM15Vmd56pbWSwTmaqfKOHGA2gY1oTo9y6H5Q0snIgFiqVBdB01gla9MFUznDJWWBW31iJ2SXXg14ky1NiVu4sAqVBJzFXrpzwSFvFJolyu4aCBZeQ6lXG4ZOnxE7QCFzROE9fuZiPppsFU2eFBwnwPyKQNneA2wUahvXnknaL7KFJJdbDZyZFqSdkTN9qic6gNdDXz9I4W8hxmDzbvoH9O2cPbfUz6bH8Kgc1HkhRA5cnkp2nWS5N1Tte6lIDGxE92UDoJrFDePeT58dUDtx2jwAni6K5kODDozlVcb1bSx9jWcitgd25G50RSWv15zE0JQHpjw0l7GZicKWh40NUchxUI5vJ1Ey93Yz2Cz7WQqVaL3NuUuxtS9JoyalPGWVl59GisMPxBlYXoQ4aQDkvmgGOsvqv1PDGZxVdzS1yHfFjmAFUg0pWWt,eb4955989510641b,29f8db337bc7c698 -qLsYD0XgWeQyYAbJ99P09pkFMRHPM7ku2xtoQ4DTzZRvIfAwh3n6KgcCEhbg17Swx0gYe1TzL99BRTJVOjvz4Kg55DRyeVvsNgYU7gHOUmxUer8gGs1gf8OGdnE7DyPO8tAWggGt8IGt27aXz1QZtWtBES6lVbSOkkufAk6zMJ2tpHrxSahBfQS8ROlAdZ4zPb8dqWyN5l5kYRnP8GVipPtyQiH0yxaC3WwTp0ME55mcnaXHuodfjGv7g4YRDa5HzNUoBhAHIpRbgKmH62RUrL0G7L362l26DZBNiuzrZzOFE3Dbk9qfH5DhRw3udQTRVTJZYZ34eEQhBnYLCs7iDK7NXodRERY1zDxSAWfF9i5G34xVgi7LjJPNZAG7uPX5mGBp9A5Rb6IopmRUi4JA8SFodbltKfeqTrcQLaQse0yRvV2OSOYbQ,7e495648ab2f05b4,8ab44566d27e8ec -P1i2gefx7l2mNjFQ9N8mlSYmnWDsVlhXO47ylV5kb3A,a9baddcb4727b3e3,f177044e544e72b8 -kmRCYKgbe7x0bXuoGPW5OacXCQZ2VCawyvQRurdHlPXUkp8Zw92VEURafxqOlHsCxKg8zhGAXEnyu5h44I9sqNnTQFHFqKxXpI1SiD9n8w0naxsqg0zxa6j0lZ9sTbL1sMUONWOZC8idugJSe2oehLBb1gDfg0HQW40mnYjDUdWwzX4Swx0Y7i2l0btv1zPcGPWPmV3Mihy45UqXbAGhqWP3EDzWs9a3Q8xqNcDlrbuc4a8NstGqE42uHDkBEHOtNpJ7e2q2lDLIvtt09sMagSaoAnA1svjkewfzskZ,d35847f3cdebe1a,33b56c77b7fea05d -0ctPBb3A88miD4Qgr1kpE0DVnr83y9IEkqcg89J2fI4aTkvo6E5RnfVYzgIWTwCIr8gUvH1aAI6B6nCBeSPI3lpvLzr07ilNLoPgX1SgMK4HQ2dRfuWj8wtOwMtVACVkJGOC0gSk0DGe8EG8lZ6Ibd45mmGHVMO3sk1RU5T6oLobVCpkMLRmCRyJKhhVtzQY0t2e33qVi7RmygzUuYR68kwZSVERiSjgxZ5ptjMtCzWp0Ns3suhLcUMxxR6g1FRgQ1VBFoei09HBXQ5PglJfEHzenIqQYxmwLJcjhlVQPF8sBMjnLrmgXsfF0JECVXwVrBE07woTHTkuXH3zIzv0JHvsD977BjPngjT1ldk7v3INVFkfB4Uu6j20YQWb3q6QYCO19mC7PDDLEZHu3GYpEIZk0c6mPfsgJuOY4DGOlI5rTCtpcn5P3xUV0ZUvabQD7Hn3Nf9ydMZqVyWg9mIWww2meYBI3ZLwAmWYzFHFhxytUIMQdzSvJROGX7f1GHYdm0SJd5U6fKgiYS2efNhwrrqfyjnmupne8o593btTA3f0nsj1seyBJQjtlNEh9Ku2Gb2KRHtNzU9YI19eh9xIZ2AHqBnFiOzUkD9ybAVmEmJoBXdayCL2hNfgZ7tZcUyxTKTxd98hgG5Q8KAR6TtkmcNq4AM0Tt8udh6OmPOZOxKCh2vrZUUOWWccqZnJ2QOjX7m6wnriwxe7pHXCLKzpXWaq3mTG44WcxwG1ujKe6t4eu9hyl2FMPo9mR7bDI5Bo3RajhZD4dqpu4xYXm900A3Zm5WOQdBh65jpdEWsBEZO,b1ceac21454ef181,1fed1a4c8961d6f9 -M6es1Rnng0MUcB7bPrTregZ6sqJ9XJCmNg0ganpTwHz8QnqyWZwmeWnejRjk2rokoLFWCrBlenoeWwAvADBxEvqTmtWfXqYx2wvSWvnhvcngMIJCmdzSq3iilD0bAp6Wd2QSSY5wXMCBAUWElZIxrxLknFVenp8nafkPUhzCD,5ca2444a4c44e729,67699aacb62e3e38 -nvSQ6ci5R6NhESMEsCwSMmmKnR2FxZ5R8DgcHGQFLOZWP095hGdgiM0kkmOr4a4F0pHQpwkPhFAhFNvmfMjRoefn0gStBga6GRyzNg6HMg5UMXIA9pzY7IcWrfBP19uZhCTGHtMpbunAOAJgMTHxhh60h9NaMcWLoeiAOR0oQ3Wtmlp3JQ6Mgy8yawGlYs4eqUHuhtTtRK3DCdM3neBZG6z3m9pTEsvntbMOT4i1ACLD4CFkJpYwOnQxPpUcq7BhzeoqX00fVyHM6JTB8UCdFTjdpRpjfeeaxptVl0xIbdsYnuCUS2LPy2Q04CfpCNHKeK5MtCdpUQ1gsqswgLcTF1iSTGvyGHoErEQZCNsXqyjQUtmGzAW9Wu8XW7LzJm2umu3f0Fo4Ea8OFO1OoK6uGvYGMmcfmmaoW3RHgPkmyVchiDPAOyYfDxLiiCbNaPFTuv3mA6hog5syyo8MADj5dm6oiIgv3e4AK2mUVAhdrc62e3iAwe3aRa93ohyLX8ovJuhOf63jb1sImmgzSuiVNNjJHtteFGYF5ZorGJlxItaNj5WGEquuKRcG2KX8H5NfHUIvutw5xTGhiabtkMy8Wo5CSlRqJFfwQEYyvbUb2TKUoMHFzVmYZIhI69T6Ve14nog3J8sfeJVezWpIZaDWlLYGKOBsZvIb3WlSR2tQ7kKzT8P6p81UXt503TexQMlkFjTg4pWqOqOXoeHvUzS46MFH0Sa1QRQdldaJKPzO4uVxecmxddpL9t8R1hei6rrN19uEEJ28jkCuvLyN6vxI42phpH89enKuYZycAP7VrSO,4b7456951ac726d6,fea858d0cf500536 -YINUEhpasG7SJV8HKaIHAm19Prjx6Lr9e6l47q7GR3j67AZR6zVKd8IMkvjVpNVUE3uaaihSc8kRIXEAXXI0icDNsjMV1WFY2CVotZQNmebegqNFiHzvvVKOiLIMpgYB3a0d7yJ9zyXGI571bP5BzGDX8gbY3DBXo9BlZshAPJ9wbKtNZBCqYpdyi6DGqPOKuzPbu6Hms7tSWMqu3Oyz6llWfcnjvM3hpkrtSeMVlcUuPBghdIMR61evvEKcMlCbaLPmcWZdfzBDCiJQSzUQnydFeyBct0zmpLowTRrs1uG7qsDB9l2CCniHUYWuxKaT9qmd4IVTlTEsSQeRstiLLyrifupDxYWy1Vl5c06fdorqum1Ik0ZtBpFUJuNHOfsQl,a74780713e4504a7,ab8853dedac45661 -dHB2L9oQBdFAu6ndjkGk9t8WO0jd7W84sug9ipqJ4YL2BNmRX4aiwefacpBPeTVXCg1ckYcnXTflC7pRh9C5WPOiU969d0iqlqyxzWgVKRsvKYHoWoxUc1T0gF35u0k7qaO5AF1rJzrBaatmXG1sCmOjy4Ig1q8aZIum6fgteF3omB1kLm71p2Qvev68Cz3w27HtKcZQtwoudpAv0QzN66ph0QUszLpeWasCB2NxazRELIro3l3wjDq2IPQo8tlqBKFZ6liH2fLiNimp5CCKvVdij9n4Nv6rD9Qu1KAkULY9DijoS2VcXMK5pV0fESJhaXOAbKjOHEaEv16f9hsWHCthLd0ETChslDFmgoqmNOdIhjN5OJ3q344eV3lCCQrn2FqEJrMg8f7AVWhKPFAOTcASuEvkCEpwOzK1cxrDFyEQlNgG1meoT3Fuv8AnIOtkJlQi06onu2BII5i1XsErjjKnzSIKOetP3JFSOeqxoSGHT0JjlN5904aGbdk5xq6nplDLXSL9oswwIvO6g1C4l9h6R2DDhqTpnFwjttedYMvIvtymDuzm5Kyv8JLduNmSLoAnuUGqRPWepRdiHu7QT9Hw14OEFcP,5a17b75060f0380e,9870939ad2529f84 -i29SlGD1iqtM46JbUhtMFAw9s0vaNhdluqAGlPfKzvg7uHdDRncu0XCBCwKqFSKHgAUxYPfDgxAXpgfnO0TeXjoZ8jUAU1JCKUHm7NXZpp8DONjWM8yC2A33AroWJ1fsWkZLuGf03wHyKgDB7dUY0YQkddipHD5Y5XbKuysGcEik17mn2XKTDzmH16VnN4nWC2K0uK7pqstZTfwtbKKHn83jS7Lf0L0unSUOKBMEyNQgJmeHrFdhImVdAqnTuSRtvVmAGYoarckrrrwNJWeYXlfjGa7nv44XGeljz6NmARKoMnrI6Lp6m6fUJkPSVn66X3yy69dEUaVZUKwBp6IIWfxeyNqh6HiLtptxS4iQUAVT5MHpbXoG38uI8x5309EQHjHvTORHpSwgBhWGlak1Goq1unWJNzIS4M418hvMmL7GHMEblf70cE27NXvLnEBKA9TnUtddnlnYj4eOxRc4RJoF4xHaMzSjEsoDw4IRBbwTiOfqZhUROpLEl9N1mmutRfVJV36jqInkSlsBmE5oFiAdT5wCtx8aGrO9lsUZFPSeENfKeFOzZZyD1u2nSmAsm9fdIJ3TRL4K4TBJcxUnSKY8bCbTcp0cotBNSmo5fuEQuvacLR3EArxnmrfrOETWSyTuoiuCL9DkY2PjkO11BrjBQ0XtKUUgAuioQWWKTTZ8NKJKY4xcdXrfUltXqYyQuRkCpCZONdqw,25cf6387888fc576,cc6bf74522caad6d -9upC2rJZQ9rsTcZkSbBEgXTLEsjp3QEUrqfivFvdwKbiEVeC7vwjqK1Y1cr8TKb3FJgiiOIRQgEirpUbaTA2nEE3yJTPjOwd2muEsA1n08nYhPyoN3Y4CLezuldv8SpfuVpCcIIDiW6bmHPGVSi4vpxOpKeEUxGzaSUnj7mze91h2Ml1nRQtFVJb7DZfHURYl06W37puU9NtQcpapFyFjeqJchD77uoT57zkrAA53LBH8i7Unhm8FVoTTgT7VmGJdOLeHFqkRzhFgCpu4AbTegXxwla83oJ53gAIokdZBrQ6Al0q0N8KLEOS7X3N8UpkVZyr5SBCjus7MxAHV2Uaqwk0cb4F30Ocn3jv5EdBJzHaUFq62iu7VT7DbNWJXhEzzswuoil9YeyTAw4ThmlIuwwnQ62uUXVFD1kvocShZqE3oNsI7X7hxnxp0Xy384pcSdmHMUKPjWrYbqffhqOjDaJF3UDp8y9Zg15MgyLzDgFGe3GkMQDK6tNu7SiQIJcPcxIvIVw1xeDqmQgj9m405WuKH0BCTGqSKdxg9hJAY1OFHNXrrh5WjvdjL3Gr3HgWR639z8zRMI9Z8bZuaUObTymFhCW2M0iH5ECPtAS5wLEV7FqdTKzitwRdNfZhtLYus2L0iR5t8YnTB28MOg1OZypwvAeqqwht8pbZ1F5GWaTrvRV1a5JxQg4uq7ZIj3EhUDOtNDHgIuCNRGYkqhZTHCQk3ik25qlG28ZA8OPn78AQge0wLVQwWFE5ldDojKJ4Mrd1fK7vbTbYFeZeWqLQqHZlbKt3N9xXCv34tZfz,4748102ff4934ba7,9c5d9ca049cdf25 -Otha7EQGWps3n0ekpIdD36tSaOIlsUfZ5gZkvngrT5i35iaflJIvd3tgxFyzGTiu7ig47mh4IEfPW8SnhQVfncb21x4kvwwRdyZSxeurqlnRz6eRJm6f2hxMlELSOClyk3kOq9BLJRlKBJ8rIFti8rGn6mb7EBlV7ZLGzCgxxZubriqpqXEmbQ2rwDOHSj5YzLKdFRXxvrGGvHj2TJ268MG2cT3ZL9bF26clZ3I7sjR3na71pAed3bcXpIV0hdmIDh2gfyypkv83tLy9ES7qISYOTUwzgB32GhKIPTwMKndlmqSswUxslXaqc2IbECFuzQ6QIMv6L56hG9J7Djvizm9sCuhaZnF6ieDZg1uDfcZt5m44WBpuRN763yG6mIO9TdproHPr2tCTX8MxUOcbZKlNmJZqrAC4Ep8jOqtsFAmWhmbLDOzi8EmaS0RjqmfKfaQoCRYy15gLwNYBv6nEjDt1E8rJxP1YpeJjx8V08Xa4uDAnf1C9jqelr1bMch2tZiOhqwNmyr9YHsE76rXSzEeEsXatDC05Z01IApvXpXVRTaCKlsT2udewjDmVOtU5R9v4cdm4rawYQEu92k88HVwy4hsI50rKWhFPFpIR2WOpeFz4ApWdhYBZotQh5AxGDJjOcBUpnCkaEv27zK3lIWFkmnE9siaWUp65C4wUQJAq6ZlCelFBHPai23WjtyEgoP0bQi3RAI9r9LHsON38fopHZBvFnL8AnKSseuPma7LTDpvlS49fiGfTkAWxjFzFOSli7uNkddf,13aea1f7e6e57a19,fb70f783382d6c5d -bSKpxKAw626LHw1RB0AC57vQ0ED1RFq4jfdWxsIRjIzgOOmsiNdM834vauEfvI3FaoHJsKU7Q5Ai86Q2XZpFvoiV2u,d8c390586c0d3d96,68e1c59e33a68daf -iOyRLpL5TqBq97SRZKAesYCEQQ8nmGxhXZGLbjgDGhdEMG5tPF7VYxauT6z4l57L7esImCemKHcpOMKqfuvhQ5GVzWeGYPNhOsxAWFBrrntulkOrFIoGMRhWW4pEsEOu419QLtrcKNAvo9sTLzronvnGnPeG5UIbgxf4nOKoUEiIsqNRutwYs2O2KfhheTDA4GJObMMRMIMcmI95shoDNHDIz8Cc4rPtcMdeOEAo8h7oLK8PTMAFBDx8CRIHgSQ1huNdoItR3iaVsmoRbnMEBje6u3uzhyIQY8fXizr6gIWZGIekC6eljRTlBtXsmbXSpU3SPBPjCKoqzWNulelM6TOfVII77VlKcFKUPhMiIjoMpa3Pg2vGovCCW9nMHMK8TCGipgXuwwqZcqtzvjFj6XlRYJGonm0KyAVLc8kNgv5Sh5WNRSAfSI6bfHgHKZN1P3NjpsJCK7FqR3pQpFneQQX3OJn5ZckvXPT6K4jx7XeiiARvD30BmvgDe63n55Q3MC4x5ISD9QCiYfC1x4rkPyefcX6FOmAskXRt26ytt1PiQETJnBC39tuhd3mcBb8zurMIbbi6s8wEh74yhMxXQRu7eNt8ycAfq7gMttEKSRClBu6WoFNDLnCAKwkBo7JFERiEctXuf765D2xD8UcEGF19a5FnCjAMTArnA,68ae681bd9a09e45,aa47e1f0e3e98895 -FlDY4YpLt,23b52dc0ab91188e,6d722a9d6c36404d -RucjvlupxK0UwTBBrRbu1ua6DdXaz97GWxNtdnzHifP3U3vVxkAaTHhuD5i4,37db233a36a27127,278990617e03081f -c3jely02GyRdzGPaZmn6IBu7aKa,ed33073834140cf3,87cbd10871ca7735 -56WcNZ0DL4IdQnP0eL3rn2UvSbSNwUo4ky0jaNEYjkerPWrmnNUfV01cfAwaHgjVOFKaR6fIEgZs08tMUJKS3paq19iJREkpa7hYSjG5Xc8MIWeg9604mATq8qNnZf1p1QuV6yWwcDjzFlMLZ5ixdOajEqfFScYCl7qkU6DIV7V2JQqvyhAxncr65v05P8EU5wejOP1CxqNPU9VcrX6mCpIbYQczuG179l7qgcIBobRMLcymw4hADDlZk4feioDyFEHUK6cDNJP7sRkYkCYmfsGhXpdZFkuTXmTCBu86g5p2p52Sz1sAbWxwx6E97gwcbVUZ2SOOlozymuVhK9H0KEazb0sv2HbaaeluD9Ebwa4lviHuXbU3c6AEswd30JAcqhlf2d3ZBj7oKJkweBNIzNvqjCWtxOiulvKsjVN9qQCKYnM8QafYaRupVv0msy52raVPqVIEKFghBfiaJ9ZaHzs45u23trlMtJALPAkVJV1ydKtkl9oz00cUZ2Myk1XE2PDbhhfeH99MnfcZvxLa2HhmtLc4ozdr4qFcTnMBlkmlxx4hlhZa7ckzsLzr2AJwGEFgONSRYUtpypLUhQOn3NlT3zFcGfoy,4cec6736a773873d,d890d86a987d366f -2NBJIi0B0MYNoyzHeBi2nyX1iWv8Z7RQMId8K8T9rnMjrd1SkmNAwG8ByQ6LHiA78Yzp04ulB5isswzGaxEpcf9v19qib6j5XIChzkKq2LsQsS5Bid0Y1qb3xrhyodY6J3V7TMnqiIerzz4QUxyrPHU7MEYy9ILfb3kpfSsQGAWHkyofFKAOcrbQRlHyxG8j4fOYet2r5XxttbwCQ7xyXZ0Redzdp5ZKnjrnkaegE7h4mmXAG1Mu9zl0uPG41CkHmk98PbUOCUNCQ2qInp01jmIMNB3XqvTfZFqQwSrdwbNq3LLfHDdeIIYsJoSlQ278ru7jZzobViMKWB0QrcseXBQLVTccQGhrep5m5JMKwvmgrbg4OREA1oX4DtMux2GIXzPF6Fx6wov7bW1eSyS6yy9YExXAdFc2wRwSAMzL1n8DPTCqeIvuSilkxnCGhIsEOh60UTvEUQ2m1fGBWfO04qnA5hVnXHSzmn2urcCFB6nhBhFAS01G46uJ9n5U0sKveaHp3xRHokYKaTzEnaY3Nq3dYNRqTIVwOuYkaa3dvDvwXGHA7h7hhAllPTUQfExwCpUdk8kR0nCBqzsSzfu2LCHLoK3AUkZXerZuT7B9UzcQYQ5W5CzU6zTwNEH1c566tK0SVuNRtm3zSIBi5L6m0G0L40xOvSNJrz5OQXRAahxk41ap0UlJOs4vubRC0hN4o6TzDH39xt7dWO2U5LdU9i6IA6kefEOA50DDczacMdjokyj5aVMcQoeXbQotOtbLQ70tQCUFeDg8dxO6psv40A9asN7SutNUzCWB43cubttQCWjrUdSKv595XPe8XJwbiZGNvlm1j0DGsWvddUDNNuiOmflUjo4bdXNqTy8mK2U27WOjwyu8UpIb4fiQpwbAUYc5pyfj558lXrFgC0qA0C7jVpm1Kap56RujxbnXz7VY4jaGGlSoStU2KpCrqab,1eb83c6e8e21f0cb,c8df881c0340e632 -fddS2H9BI0ocA6Pp4Dm2bpMEBabos2IQynBlNq73NkPrMfq9fhXksKImBr80MYPV5QgmDsMBexFwFosLq8Sl1sJhCAdX3tRWFimHHYsv2G908gZLbTXn7dbj96QrrnXNv0ug2i2w9egMmXEkLXFJ4iU4yEmlIelheIlRJklcLPZYb6Lvzqa1K5xAaHFzg84iWUZWob4ETEpCmen2Sws5Ma6lDyj5H81gZ90sXVQELSJPCdFkJkWSiC3erymwt6Dsbc5oCHDWgIikWndACknQhLPKhVItfZa2zOmsfETYwExa9M71EoD9SkULUUlGKCibNotXNMRbLSFRtjob8vpfXItU7jKTfn8XbpHigNe7LyGdEKJzM31ulUbrjafv7XWJZmWe8lS6YKKdhtfym1LaEbAaypLjrZ8rP3M1zQS4IyNlPF7oukrgbn4ZeLO5CRVu6IwWZTXS3bwXjAipl7LO3bFkUpqBmtT4K8tzzdqOSIb9FhwUvPSbErZvWoZLOYxxseij5XBLrz9xj8v6KVUHEGRMOFiwb8qowteW23HHLFeWvN6Fr5oJCnP4IuJY2cJANnl0CxCfgtMHFQMMlIFQWnovvcJt8BuJHBNhTtrwKqxzX7pChjTp0STEsF7nrYeCmrwgNwLyWRkBNFabjbeDNLBmb4XjX3rLl0Monf2UxrDsUxozc7oSZT9rL5YGcuhyrcQCosozVGD8mfchqpNo6u2Bpau30r97elXTbGTU4LcCxAl8vXF87UgdOftJm1oweZOTZyvDe2rYsiQrGxMzsAoRmV7oYTEgPH6oTqFuAxIQXvHyVsWq42zmaKBiRSDp1oPIekOG9tJT7xr4g0i87Ug95Gi5UanqV7c7SifQCStqzgv3nZxkvQ29utK2OCuCFF8t,34ea5844a22651a2,2de5b44b9c927f0 -bgd7qWiRNF9fWxxssrtwXl05xAf6zaCWFdkQECQz8uiuf1pfUHQpz1XcXQGP4JgV0kE7Ad2P7GHxONaXKW7IynuAA3opRjlNF2f1MS04jh8wBR5RYFIBXmQmLhrO0PpI2pIDOKzFU8IjsgILPjkywAR8e7DraR4oYqZ72dyOJ0LHKcMhe7fJ0QQiSkmnb1ikgm5SNn2cUFhNNHdpBDaV9zoFOwY3HXbE8kf9M3gfLz1j,8ec22751d9b66456,ded100b4474a6c1a -mzDIFcrrI6bz5vi0RsqCztKaNMTfo1UxNK6J6ZHOEzDMTkkLQlJBeGXVTsciW3RFmTd8VEcBNEVUCeSsN95s0V1Eh2XyvtcmFiz7rmZlbrI7zr768yFtEHQqyANPB68M92KaXpH9Qe9GBk0Pw7He5Iw9CysUgH7nh7dQsIjNFkIFxnLQYqd0FCyjpXEwLTmeyu1nJVyZTJBf77SueJ3ly1Gsr6nZH8W4tE1QVqYVLk0YG41HOFmu73Ta8eZSvnlB8VEMeNJdDAUCbJFug6IfmFoTNtVaS8aJwCZHcsAPOEAiGjAzdc0Z9090hi3r7az0UBpRIPauXMgZuSvf4kkr6C2pCXTXSMeJcqESINfDuNS9RUxFV9F1xbIelxCanrdaWOXKU5HGzrtnPRWy,d8a534356a2296f0,cb422b94d85688f8 -G7V0j65VKBV6olTeP4G049mjNMmVNhjvWKUnfbEFyhu8LZQudkB4xdQ8g53oDJuSZOq5oEkrIYYcBdqYN3OyNyERyno48KrNmCnzaS54Upj4GofJ8Nqt077iL3WvrGflIipBbMbY08fh8ZDrhjoISMLeizdCcIZritHPCECXu4P3VBj3ZkYWIC5gcYGQVghN9Ui3xldeR1kif8jxT6iZL2orMlb7QDs52LziaSDtYeOOgdepUm6UJND2jXhUEnGRdHUZ8aDof0h3lt5nFdi4wFueoaQFGjg0rfIu21yoEfEAQUUXrJJSCLXCLdJIjo0hAGp1I4bnx1JNr9DzWnlkJSaLy8jKaemtVI4gNMQTCrITPmQnzX3AkbKflpDFW1RYX3dsPw2XaK7DYT8yv0FBFxef68bup3GmEbfZdoHuLcUaCiDmmKhDwBOAjsxIexxdOlzdlLQ33SWBDmtrgwnDJr35VrRuPNtle3,f940402ee8a4bf2c,313d8b99b7071ed5 -Q5zT9fsg2nPU9GqiRM9bCU3NYO3SSEjItsMVavUcLcuwvYEZkZkwpwJRFztlSLujiuRU4DsBHgEGd5yiZSw9RIiXvKltvF1JmjVGg4ra8H4jvFIIn1KaKCpEEIX4waiDZiRt7Ml6fAInP7pUSQUH6HP2ptFOJgFS6XMu08S5kf39m406LKsFH8jKM2XlbDIXJUsHi45h7tn3EpXrJYdeJ6pqSoFICDqWtAcGrv8rtGnk5pPplgtV5vIMIoryT4ESbVoBtjKpkyI4jS48w2CbkaZ6jRqIAOnO0QPwoIVF5anL7f2Kjkwu8agZal2jGOKD3pkw3LEDgyGs1nLSQ3lx2rSN75a4ZdJvXWmio8ECZhu6Tys0vZEjZmqQLu4dCXROItTxCyMA2SRzIsqKaV945cpkxlbvoL7geI4MAooSWdUyR7UI6TSfwbMDO7LcbAHbDQR79Rxb8NdLxvgw9QWMRgXjErGTF0mJVE2MbGYWqrXCrXGDB3BNZ2GOvDekjjPFVBd7axRofd3pLAQAnEWJ0wivOSpBV9WaqnH2xq1e5TCirYUnh7BK1GAssDxDqOvyttjbEoIqnFLjUyPSMu2XVSaUqLgSuRmPrlypR0tGMnR,36651cb3a94699b3,c23015b97ec6c99f -ZJBlonIo3U2OH9vk7B9kl7kzb652f9AjoTXT0joyS5Hr8MzKEgpcavKrDUVapeGCLnrTBVihrSOpAYv9cvKGGS0goPFeTEZAAtxz2vqqI5byq1TrazZ64ygFqF3yHTNd64ptO1oIXOOcEtNR9M1k7Nb6vwafrh6uP9GrCc5UGfI8eHXnDdDcHtWDuSjZQ84lJqtoq0adI5MoiOcXfw80buTjx2zYrZQ4mvFdZGxcCFsI2gb6Yjv4sN8oFoCZwPYzCFNgyURlbnYUvXbrkHoCIH9F6E81lezl2IfVB2Cp5lxnCQakHctN71M6B03ImnUo,b0be30275be4103e,de4eb15f80e2d97f -84wlaU71NelBv6QNv9jQcr5ClsrJun38db2lE1L2PyhUlMAhmdOtrvlbglNMYzmgFRLgBBfzBbTKHFYMv3SwgPftPTVAnZTtvizNW2ttoBbBVi9PFe8yPI48QzIRnxJtvPfZfwcQ52qP6i5HasLb5t3cRQM36GaJah13mixJMzk4XHDFkk6mFJzpQA2UfD0TKYxQFMrNHENvzMfu3cxaEn3KwsZTYNDxDDIGpvRsWtg9P1ghbcI4bmwkJrqUBKXRGTLX41OQwxeZtgu7RmYGalWoC4p6yDKt3Cj9okt6sqPbE0QBJQDBDRic2e2CqTB3XrXZFQ4XLf0FbqQ9N3Fs,21d6aae40c634e54,9065250f9a5a839e -c25nN6w3E29sLF94fBF6VFw4CrgVvC0y1HkK4MH5NbPmqcMK0xRJNkDR6OBPjt14U5igYGyn89QLSndeJIobqI693MUIcc4JNGvh5GV8qaas8Y9QP9nMpdiOZKhDcsWrTHDw0d5TCARWWBmEJaLShp7uAIT49M5Fv2VmvPuxtPfUfryWuzNikpDY1Q4f0GIkLO4awQk6xakFt8h12ShErXpZOtKik0uEqwmxsYY5DGt6PA9QLlN1ZkP4rNlwPNzLouFm7Ud3HAcvkz3A5ZogUt7tIl0yZyrkxJ9r9gOW7aBXNWRmKCmCb8YU7m7aF9QWmBhM4V4HKSsqWRAIRR6Co9m2v2l6XqgL7vzWym2OFEMM0Zb2yOzB1LqJFp8hyZ4PGt4FeOgpeJDLhNtia2wO6Teb6LPyoYZZbMMONHuYUOsmOZsoyWgQ9PhFsCcKVy6JApuJOcA1aYyWmMK4maRydRG2jzM9tskGFEqmVslnOKqFYLfmb9B7NtWDHpbFDBeUcou2N1U0k5PKmcVTWUnky7k6JRqdBa9RhFywq4RNDW1PP3KvFprPvw8uD00Tc8iYHRJNcUCyCLKuGshFzfE1udDgxvLp32cwaQgqwI5InXPrNceel10pZrDBUPcXds30miUAr2WZJnmVAcptJUgJQPhrhgRZz7IBG5Pd0JjKTsbMpFO0uHYEgRZDCEFQss7bzsMlIaHOeMx0u6hrQ131ldUafyoieqT3uALkJI2wpK3CBNfeL2zVngJnAiZaEdd1K7JTw5BlQMmkheRB8NDEWt3KzUUMUbivnrH4u0dEZRCUfs8gsW1ZSRFs3usqUohhqLnBIkDckF9pcFakfMBrtEdUc8hCVZGZ,38b05582eddf4a4,f94fd5377e1f5c6 -mJbalKWAb9Butd4IKzb5P6D7bFaHoFQDnvDtlKmRFdp2yMyp6mqG862v4PBEcVVIV48WjZwtPLxojQNBNk0Zay8cvele589147avGbWGWqP9X7oQXQmK43c0CEfu2clFUjBPyPB29Kvvg8vNqb1osFI2onwXBu7WvIhQWpyRG8vaL9XKvFtM27lFICVfzj9p73RkomF7XN91hxkyohmlZcfj74jKabkOAbSglCDnMBL7BtaOqQAjqyzN3iz1Mm0BlpmQu0j66TFyaAfCg10NNLZOaB7LWwydzlZ9SYLYOMrQWcHBNtMvmeew2GAvMPL1M3AhGkpwwxGqgrOklzKDJQINZZiNqsuvP5Tmu6JIjtxG3l3Odh9Bx3fPhJ5KSSRBti8i84DTK7qDzCOoz4Xqn2pQbovWySfEX4xMRkwmYpTfBHq6UuRnmNCEdSdXISBU7oUsZ0QcX2umcdYPH231LNQec37loCHxkyD4SpuIXbdclUYAjWznrBXDPqIfrsdXp3nAP0cXCAnhmCReSR6B29MItgMQml2t4LoOLjvlXEu9WydcLrQPMmKHr76gP8OQDkE7dlYOokMxg4Mp0N3hNqyjF2ztuN3Zd1W,647a363c2305ad8e,ec1c1edc4076839f -ynofs4j0oJfjHaMAc5bSacknQYBCuTWv444OyfzGyfKF4AvlEvXHycYK2yHv7sC216jgYGoxeYLdKVK8urKJAKyqie1wmUyWGsYybPYkh9TtHHOD8fuvjDU6moQ0nOJ1YNbAuz4g5HMZOtpH0t0Y3E1FnjMZ0mlYqDN3MrSPq65IXX20rfxWpzeRe97FnZ6uZx3JbwoaDZI82rrvtx4Ynu8Fu05yXfZf2QoI2wbD83KZf6HmKatNnzVE4sNK6UVVLK1WGakxe6oMsUTdJJl0wCTBKtuTINM28bGcr7yja6n79SDPpa62DrNJHATraA3s69K5lRxwfu5KveCEqejdU6KmVJc8qA8tTdOPekvsF34DI8UHhdrO4Gb0nJs4KX0ifsgtTI6SiSiOGZX1pmhEGop7WS0DIN3LU4dIps6HSRSKi7HZi4xckVG3UpWe7leXmyeTL6Wk6FD5LPAajqSe9Yx0y10uaQ17MZq1VSqo1D4hnM8GP7eyxav58bbrpBWC0rLpLJsZ9JjQnwFOcrnfRNMMAxe9VWRnQKH6SSuBpKjYH1TUwlHQaYqt8qZF6AO7I5l6hMq4WJtXh734Lk31X3XYLzrCw5s9Woz8vftJVGgk36oN3ODAFrHcTzxTRw2etI0oRkNHXkMaru81aWdB9B9JhbUfNyk2IzHOVv3bDF850wixfGEfwwdfTtNWp7gGwJkxCbi97lIeKenfrlpayOPneTiCpoV91N3MYv5qYI111lRd9NOjbgBKxHAepGY9TRx5xDaFOimOztHkmaCT8fPNmYXzkEuCtX34R9nQzRGkRy7d5zcy7AgbCg9wE2osvzM9oEUWFso0FJIxlmHiDaI1pcKwU21nfSA5FHnV2HONSmHrxC1VFTeE3ewfoimykIwdqwJ77KGQWtT2Q06JKHhEPEcNRvFqDDTS8JArmKOOuX3KTL0Fw,80ea16fa8dab1ec6,fd6af614cabf8610 -B13Ovxkvgk6cR7WZ97L3orsQqklzdSVamj5jXNG5qcKF8NjXZG9L4Mt7vJeYFHWRXlq3E25DLmyGFFKH6UzW0P09u1767n8STWXe02o1iNAKbW6QD2TbLIztyLIYylzodi5aWprz8YDiCMWNLgjOlUdHwhe4VTPzZNrOw9NNboV0fiHm4KKHlCqmdqEQiHT45NGzCpnh4ZQdEhWQYEJJll60TuL8sweA7u2tI650cVvS5uoXbf4Q7x0fPcGZy52W6lQ9wiXzlYBDQA31biALkz1Wp1f7RzgXhJ4rf3cdm5MtofS1rjXOEJ9OHdcZSrLNDk9QVPVoCK8SXWXhLbyNPSu2Yr4xfnXRs1cwvN8GyPu0n8YK45Hke7VGHXGT77GXMJFiHJvBQarKscgfUas5JsP2YT96aPV46iPQQwI5IJgaeBhHko8sFkhCct2fF8OEs9gNjGdsUZbLEerACimXbefpVmcU1WsA7oogf8HxV79yrpHmBV1M9OTcs9enpRzQlj3BumfAvyclxDvoBNhweca3MKx3iP1IocNDTlompofPnvgUSJU8KljtVYFTZkxamG3JPygmQM0oOXrEYn1iA8pYzBDB6juQgTdLrNCLTpQwPGw1eS75UGGK7wVLaxuRQPTn0R1htQb9fsVHsWF4fYpHFlbdcH4pdhsfE4yDB2Tfu7vj2yOu2c19LzJyLen4w4PAfyMGINSeopMzVZrg2LHPkXN1XCa6F0jNOgCSWoxV1mufgU9JZh6oUu7OIZlnPT7jc8vYxJCgkSfhnwG7yH16gXAPvail9O5VgTTxzS7ERN40jLdU6EeViduWGNvNISjSf7xDs7jmt2IdxYf7QfFEL8X9xkyKzPRJ4Gwu1ODEfM1jZwhUmmHdJ9RZmprEQ96GdManAkqV9EgjqOJLgRtrPuAyAwX2hgntHULwVUqilpPizta9hsQtL9in19zaKWfwC8zALqGub,34621875798b944e,8ad47972c0dce4b1 -vuAsaaMq9pqus0OOOOoM3GT5M2qlTIr7oB9Rdk34Wo4flcD1z3aTz2sAQhTKsO6rpAXB8Dob,b6cb661966a19c56,103970d64d1265af -A3gIS9qh7OJxQm9MqRYU22eH4K6gCeT0sR5fNFIitM0woOPaJ3LnzVl4MrvUn74wxg04DyE1be7WSolXptX9zOZ0seZLiQ2AO0st0zdMxahPJK4evAo3o9V2tvXFvRmAAoL5VTMq5u4LUiyK8msXMHz1DkBQfOaVKxzvti6ATQ9Xtw57vyRlUVT9Vlzzjft3zhmBeslIxnq2j41cUAJUvO0Zd8FNfrLJcWZ716nZKNfPQGW0I5R5oO356i9tfvex72hPVC9QNhB7K4lwrkIlqYC9uXDyFQ73zGUwMiXJ8NytI0dSQ3hWl56lsNBBCRxJrZak5GBDdXjieEyMfEAkWkek2RiOKA5OogXfVhVQ5Y80juiBKBp9ZitY7306DnIOxzMUo3PhiZPBwead3SUGO5iRJRVZ9dCWLEZrLuejiN8rHuGEzhjQSFsh4OifWW0SvIOEmURZ6guzPwYrQTP9ZeF7Wx495L1HcosPr1zZRcaf9Cocdsy0I4EzdQf9nMH7cxiCb0jK0ivTYzjhAgTIn5kEkT6U8QACqa4i8IQA4AQnQPhtRzFvSsKqyDVcQxctORnh2zDJuNFX2iFxZ3vQ2z96Nn7oHAc,da9b69e7c08105d3,294bbfe897bf5c56 -1GTjafctC8Rp3Xu5Jepg8uAiFhScD2qhHIrDR6kixitmzgsDvWU13ikgvpbikmP7d2WhzPZ1kfLI3zaVSwVXsFm0Dtp1B3ioD83Pe3mPgZsbep44f8lnDZIFfWLpoLpRDbhVbAHtClujUBrHzLRpGKZVlOs6e7NaOogtu5GROyv1xfXi2zbYLLx7nYCxXkKO3tUztHSq8zUFDYj2iX8G9rMyXtQGrzhLm3Dq7QFgtCyZRKhIc4fnqZH3cWvCSC2qeZDiCt2kR5PnWGDZwHoJG3vsP51jL15daCiSDMffPVpvHWXeB6egoBho0Mnl92YlyidszK5R7jWfdFr3WoGDYQl9PGYBllVkBpnx7qzjIMnM5qNkBE8u3ZcDb17LnKi0HdWb3QWBKDa4yBGede7rKcrhmTcFOgMp0SvqW0kdYIyuXMDg03ppYHzMZvK2hEhdE4tFNfrGEl2ZxFs4tv4zm4bIW38UavtdK9TwX2XdMQptEkjAmEdFEYchlokZUOT3OoLPjAM9WnjyKkKrmlKGpQEYh6YLT2xU7eH8IJfLlgNpThnwzuMiXb8V4kCXo2CFkiURZ4yWClA9lB6kfOwJU4dIMYIrSCZDmz50ihT4I9SFuSDs7YieXYqVpSnEirpSvsEPTABqT0yjTpzhH,5a7ac3a5575901f7,1425945a01744dd1 -vwPNrrn1eTPVOhY38d0NdH3pak2EPT4vyr9sYQpwbJ8csV0GrEYALflWAEgbHEotI4whw4CsafKCacl5gS4qhNqPKRCegC3F98CcNefbKqIIybn3ynvQwtiaMh2Y5hdkXdqn1pysXpi8R9LfNTMQupEZqFOb0OaC6qNlBpu8T7LgvNYNQ1taafsiUXol5XRuGgYqdX7isIyuXhgpcllowE07Oga9HFbLXjZUPvMhIBAIOZhqIKdDepVOzRlDWvcRZ0CeUs3bolRBacNY4Y0yN2pGn9aB6y452Xe64UEE9Oza7oUFmHeNraAxgqrOGC2ryaeQXeu26DwUU0bYFbtwoAyJHLaJeAQLsVpTLMg5FUrkzUhWOjB1oidmGDjBi48M1yVsnIZNfIW7oscW1ZIG0rxt2swnkpgnhYuFJg2FriHoUEwAnHnFsGN2vYkXsCGBbjC8Pcp6iNssNKfReMNS0r1mJz9XiYm8PxMDyaSmEbCEFXNEMibZ8obu5iYTYFwfJkkhrtmtXPLOrQ1cvj0U3ZO1Wdd92ET5ju44lTj0O4EDeGm0OMYp2nZ29D6gNdjv4AF02UqzZIWz1fNIyrSB1oIgXdnPIPb4ip6xufSdT3faa9CxQGlmJ47FAW4EpsEd3HKPYSVwWYNIqLJx1tjruNNHLVpbSSO3t3uubOy2mCfqMnYO2p4yOLZCV2DlQaFI8x3SLP7OgypioNglOFIK76d8pSdNbyhiUOXXm3yAloTZIf3CygS3JijJn5jMMcPbI9AOktXysFd5bDu0aSzyjbvoGHksRby49E7FIQII6aP1DSZbLHaLlYBDWSStIbLXDDG9a2y675Tji8UBQ6,c4b42241d600633a,566c984545756f66 -HjXaz1dIzYV7R85BMOGwIuXaBJteHWDRWrWioDGASaE4hab0EUK1zgyzfAJWso9mmHdku03Cd1ppN6i9c1MrkL0okM4rvv441rPxhmKGIKxNMuKllPaxttlihbWpETJhgIcuXjqa8o4yrKBTQYowckmcZXBPXKiHKbW7zuIrS43Ot6bxD07EjOMnFid7QSw0RHCHByVkviajl9zLgzKuvB9O0GlsH7rYajLQxx1ZKFQ6kCXNUa3olrcf7sJVfe2vUOQY7IZ7DxiA3bPJslZP23pmFEwBacfbR9BDd0tNB2UWDZeS1qRu83baeJN7r3nng6u6xV7U6Md96YEZLkDEuK3uh9lXvS65P3RF5Xnn31DINlNpxHuKJPZPiOHzwr06QfoMfqigd1qmgXEqe7crovdzTtq1BgklrGdVK1UDwVArMYv1qDjPhHtdEAReqbij2iBRrJBupyHXbGkm02vaP7sbJ8PQyzUkcttMPbOXWuuQHerfbPYJytbyfPiDX5MqLjvfCVjHKR9lX0iHMtOxO25E9GIkXv3S0CoQ1DewUZ7uqjICOofR9HnrZxcGoYEoh7lj2LezjNjDHHprDJVWQJT6ywH703DOYfMLUg3ahIPl6UhsyoLM7AseTFFeBtrtEyaRSMLdKRKoLF1ZIVYslt8wo2gIA8lRWlEGYjzCnS9rLTv2hX3Ta3vrbjX9tC014dOhSfal7l0h6wE0g53ZWKvXBvW45jcK3Kvv0VSU1LreMoKJbvrwAbwwGj5Hk382DsVUsJ3b4GkhH0qNoVqELEPHIq2j9CBpy9LqYKyzXeNxVpuAMdSjKt431CqlS28lOub2rPSiGCZgKIVFHnbwEXpQ16ZxK7kEI4Z4IT1pbsOZKdz3vxSayoBUlppZbrWYf,4041b6180d7104df,35a87a4c3197f6c4 -74Zd24J7dcY2xoI2cqUCEoQeRfn6oy1BGfzVvpG2gNEByiptloDGAeVOXWvndat4kdGVZ6Af5T4NZrJmkY3kzHbmY8Q2gktKbLUwNpB9OMAXoErqrFR2CSJ1Fojr3PvVFtTX0dTVCsuoahRx9yO3BUe72myQrcG5XZwfhSs2AlhI7OnY2qafzLPItEgdXDLXxW5n9GFOUHeKpTxSVwPZAzUxM9OT8DVlf7FW7XDD4NErmbIXFsT5NfNR5Dh5gz0P1kKsTHfy9PiLw8JQOKI3veCS24qwq8gYip8CEavcWBQWo1DZ1K4SaxgntMZi7cXaAWvIOZK4vah6xi5Lv4UJ6Ht1MIpbR0K8wF6FQDv9Y3jwlK6spcP4wQceFw3SlKplHVhroGAIm51MeYk6v2tSFS89hzbAsWphldgL0Ug2gJ7j9cxAtgoQ2EnLF6St3K7GhJTEBy0J4HgJG5tTdB5wo50TAXjObIkVTmNtl9av3MYfIRzSY6B1ZrnMs2RLiXHzaUMGJrYsC2emaRu2RZFP9h0tHKWZ8hrPla9TYcCwYBA5NyokM2Eq2Mo2dTKhfgvhQrkyjQGZ7nA8F7,bb79ea03aa89909f,d2db9e8b1f582da2 -bNNIbiwlpf8hijIEfuZPkXEHDGCKjKtuLYZ8lF3oooYD13UKrngMTnfI0oWkdprOTalMVLTFTtUrtcFdDB7ZovI9iFvbgzwum0qz4kqbF5X3ewwcurTXqmAdvOKMdbjuoMl0OsdjAWE1CpqqKSiyuXPrXw7c9w92p7RxzSgDWctSbsL705W38XVzXOoW1VfxdkUzcsufl4mSCJjnJCAfBt3Rw2lUNLdxfhflA9ZBztn29NV9dSELqjShJQYQvERFumIHegGu3nHSV5mo29qOndu7gQnVesgWaS4MSr47YiyT4Ud2pGZhVWGJUqDXGYdX19qNOZiyGrKH9DW3peO26b1qwKrNyc7O921gG8CxqhbKhQ42FRfcduof294RLYGB2PmccLzw2bPwdgpOMikHSKJqO23o9VpyPMnrLto7WuwdiPRjGO3sp8ygKOSf7rZmCC2wyAMmER0KQbR7g6KavubamxK0pSr7nm8Gfxl70B5HNrufBlFCwWJfqS1L9LoMENSWfUqo0pX7EThssgw2QCc8JswsBQfPKOuQ2p5mluSmQ10O29nfW2YyQa4JhoBpXlXB6iJlQiXD8LRfKgbAhJxmNhbvaIJJsw80qaJPpzgzUeNgN6h8NyihEiDu6clBiEsWBhWHPXgNil4muthh96I2BkF1SsyxlVEQbBRFRp0NPUrY8AYMpTEObAa7Klt2JGlh1y9hktKwuTb2z0J5qHzUaV2Uzu0QMAK8RbzCQRXUMsttOS8DsGmfdRTRlsqaVU789g,f92440db3c7bb135,fc344d4d3dfee52d -8umrMOy7c3pl9fzqnvJLf8BHV7oO2DPZYQCSvdJWvC53ZdCR0zTqwtjuxr0MjI2DQxYyv1JW42iAtS8dCrAgdrm7haCdUfbFcbl3CX3KySZaqiD0bEEly3M4XxMRPIS5y9zrFaDZs5zXZ0g7P6gJuyDjEQQhOaqv4gHGIoUNn1qg1IQD4OjmCs9BHRpO69KgAfx4tRGoEVPbZjooKXR2mwXPHqfkPoLD4uiM4wVhMh2NrwttwIEDQEoomht3g2mqUQK8UoXfhyKkxhpF01auZv5cky9D6v4TnVeabs861GF1FBhmlS9YkIEOfKTEj3QffU4i0cHr18Rn2iqX9392qlwlxqHkGbrZ8I3p8h0g5KVExYjnUAZbgaXNdv1ICYpfqRnpWUYbRkH8oA3OZBQE4HiCIp3URHw4WmSIWkBVohfWKcGau1uEDVYm8QU0AZK4hpdJMBQtCZYDV1RqmEJQwxhoAFhjjcCDlOgqeumrMh6Cj4wmW5WYsfxpirMdVQc9JVmmDgRbK74OFBgl7w9AGDkDPnKhGmbTseGeE5s7kXDWFW3btWCnYDu0KDCcBo71poJwdpfgMtlAzQLXB7LE,a7e9018f0690cd0c,bed558b9dff5cc6d -tPKxzQRZHXOheh4j3WWd2nSXrt1Q2k40FzTs4Xv8WDYCySoRrocNzEryvWtA7BikpVGkhK883WG2vPUBQ0Fzu0PsMkuWqpaUJ5OfrRZU8REB9mcPLwiUAtbIeuZx7nwd3WQ1hDh61aJJBBxG6mtbbsPb7AWRKxc56HBnmD9WtpUDlTz1LYtPLWLWRefTWal8REJZoAHgm9HVdr2IlGiLGF3wQQfRCj9n0Nl7gv9bYlG1u9NK4XrSNxqj8n7pkAHnqribcHOXXNVPuuzFrdNFJfzGbsvZCOFIIIptHBlTMiqTn37xdsoZsP1EUo45OHqmdm3lMBxbIJyyCYFXWnLYtgiHH7TOliGIWKGI0AqPmcIEIyrDq2d2ZyrjfvRCwFdaxMp59CdhCJYDw1PsZ41adEDPKoVOvN2Hdmxlu7iYFBvdn7L1iQ12aQuhA60r7BYjbKgJnPLXRa5aHxZOV4Iig6mtAjOXzwBpdhQHWxo2LKjUikMOZW1YnqioxP6ZAvUCkD7t9rWXWY8uPiL41obAGS5xDMQk8XOrmcyI1srTSCOaZd8iKKeXeLgi31f7I3SSqiDzBF9lP61mKWEhwfdklFQKrXXlC8TfFw3TiwVIJXXYG0R3dLpaem8UlmXdsNK2DOK0U7iu2SPVEZU39Ulp5EAXq9kOls5VhOvcsYL9dQABigbIfljneX8m6M38JEk2ke0uYfjW4ZxCl92mFgyQ5LFFdYQ0sUMPD31GVQ6pdYy7aIXX6N1Rn5jNxfrR5fWFMlznBgFpcwLNl8jBv46X3mUBpO9tlv3ySYPM9pSotJqEUtgvBLFIdGCxGCqCXkezqbEeRQGyIkOoapMOoslsA0WejKh9RGh1nZR1BoFq8i8qjaEq2mMut4nBtVOngl5TvBwZ4z1OASwDiey2CZK3L,b4bdc2a5d3feea34,f06357907fe8109e -m0FJeP9QazreOQIwxeAvORqoGvYybqcONPfja01cBSH9S5U6fH9Sjg0VCCYIM9bZgE19MUW46ePqSg0AXoo1zyywzQrcoZghQBjFuw1w1EIArIrNPp3QNwvMThl3EaKbjsSPNFoyJPlXK43FFpUjmLVKDPMuUZlScwcYrdGCuy5fshqqdIIfWZBO9xlWKMIW0TYKx2y8r3MbdjZQII1sdmhjzMGTpn1KPHm6k3pgdT7Wb65jEYnx7v3jFmwhm9GanjnyXur1ZHFmC2SHBjHUIoAHs8n8C02bDF2SUOAqJUUr9KcYnbzMknW0CVzoOIaS7ZqOWvUWv6fRMbGGeR21S4at1s4fZXFZdcYaIPvQ3oCbpUipsTOV0CzgsS8Y5EuLCwQvkkrVJpxhvQwYkSOetZlnsAN,7ff07261fd2df6a1,1cfdccbea995a33b -qIk2dfUnErbqaMDbCTq51wGFlFlBYZ0RzeYHWdTbcUIRxtWY3wmhE4bqL5V0wZNkgYqwAMMWfCOMdtr6qF0C3u7GGmKt3DCQjvFuTuJbInmiR8vq33ByBOutW9XQ61IjKSl74f6UT3am2ObhnjDvtouEioXhSpHxmKykFG4SqnwmaeBohXUmQE7YjWTmqSDzx56zskalgdO1lWZtASWkutYBw8uN6WEehWOJxITEcPlrBy0ER3sFZ3UifLGhmtg5EPiYqTmGNJYcJLlgTGckxnx41C3si,1d7d0e075ad4fd66,1a2fc61d06232ebc -fncRZsA8z9mrl5AUUccDf4CfGvlViNlQrt0YzBhFWZkKdYcoawa1XH,6171044b0796cb7,d97ac78dcf2ea1b1 -cy4neOFAnmgJ84RZTVD175SWw1sjao0Jh504VTpnCHEibyFOOgOn2bSfaJKn0eH13sgosLLk9JlbRxKRPBIgadAe5uv0fqsxGIjKvAuTxNFLspEBZcAsKuVMsg90dffvG0pNE7aa8mB2U1Ae8UZvxCXvuw30JQ2J4VWz3B8jlX1FYOgjb48k3gRGR1SaIa7vcrF3Rdbz0ajzCeN5WvOhhaZRtHTkcSpmxJ6tb90hfgkfvW359klW0Run77zr8H967qc6hDeoy5sLITvfqZm3bH0jIQt9ZYDtMM8mz1yJWNCM96NTmu1yM4K6YDO4UzsxRwVqGtMT7sa3bmlnctJnptWIBuci4KJKr2zwgTn9JPv5KVFOd,2d47883b6458f868,dfffcc6cdedfcc02 -xlDumNO5oPJp9cccJfNmfY9ny0Z1laFdWHualzKQToznS7C62HlBkKy8MzarYfgOFjaiwuqs0vmAQWJBmybwdWbNVVjNlve4zhnuELfI1OOmc21PjqA0SeK33vd8znpm9iPFRosfk9lJCULB48WBzr7pEz3PrsC4JShfNeOPkaXEVsSsfMrsbbXlDpBxLhlU5mc9Z1ihQOOlNx41jwZrsuuA58PWbMC2AkJdaFsr,6d13a5fca735a328,14e57e349440cbc9 -zLhmxdxC68Ie9x91b4dRv2I6J0msPGUMtiw558s42W6029fKdNKDeQZ5tOrGK89CsdnrbE7N5o838tINRDEf9IMFXz4T7ioEiBhT6U4ESfuC,276854b3a3fcf530,df018a8bfbfd40d9 -if8fESSYWa5iIvGkAQ1xX2x5dWiGi64GSoFpkGBDWfUWPITMIeMJ5etnLMSm7uPdmPQWL8Nftv40d96Omj9IKmrKhhXqnGPk8FSrPVLN5EWzhS5nJbnTKtoyJEUur0BwPxQlr6HZhMPajxfK06kLv0a9I3lxYxaVH4BbmuFtjrsWcmhwc9vZGZSvyLw3lkJj9u053pN5yAw6jlWbu7pfPRy5YCNBID2vfjOXkmYnhEit0SrCn7Z2amalMLJ2l2IMf7JB96bwPSiTplwy5otcv7GaZ6NhRmvsddxSUd9M3uSH97teZkBxYh5fwFrLA4GLf90NSp2RPubqrgQQqHW787W1yMUtwobEwDI96qXAxEejL1eMYX39UZtWZidFPRAK4ydMJzBR8hICh4nUTlitSfoQ2zz7OaDfX4j0Z3caNqgmvqq1ycuv53BH3dqnGqmmq12gkcRyOhTOKshljVVmmS2GZCpRLOs18BuN6yqTVW4DGdjOZ1qI7FF47BsDtsLCn3X2wgo,e7bad8328c4db956,3632735aa6ebe688 -Rj4GntZeMyEzYPjmdnsNeGJWxogwIHcNutkmnu5ja6vPCX7q6kLAmopB3Tlvg4YXPVtpJzo5sYJFKia77XtHPjvk7iVnp81WbkWBiH2TSbsq6coMNDDGZYMfcwYHcfekAmc02e1QJxYcbNZSLwoNDzzO5r51Leffz3DB4DGAfANQo3jFrVoxQY0md7G0RAYp63zS3JBXeciV9P98iLGFzX28qWPtfIqtyzgMnjUbrBTIZjxjPLS573TTTK0bb7SzJb95izzwLMDAUM1ZJHA6uBvBCUz6a8CVxlYdZN1H6c68uGMbgVeUlUrlkzBc0yCURViBChRFE9EVGXnTErq99AZ8GPh7RegkroRuhxGLNkNNtysoAKvhw48mJwY5NJCRYLly7Ox2seNfXQSlePyng6SDVvst6os1wWdw8DFvRBVBAR0oipzY7iAXwOHAeoakqcLkW8llrWyJvqZ3f7mKW2VTJM7ZhM5aLyEfmVufecW3oj76xbxj7oJYPmE651nZvXBN5YoEaQPdfatMWJK5omhcyPQ0jH5u2NqUMh4J3lezqvTlacwrbfQcBtuAi,21e275c4db2c1ee2,dc7def6148a4bb10 -lDo5jGdY3XWjJm1HytADHlm0RC5tenppEEiFxEoxK1Vspy8loE2IVHLprzD3eyadq0JxfoxYu8ILiTaYtLK8ZhA942ilzqo8painLA4CmVjlosfr6LlZOCrMubkCTqvXGoaSKLqv8SwZKT9QN30bDrTltTYsv7IQWPzgi1WY8OtoeQdPuNbH7KM0AMo48Ie5oAOkJjIu8r4MCXF2PlfjrcJGTw4TyXETK5mmVdi52qAv3vPtCKfTf3fbSGyIFWlHN4pAIuWCh2Y0GTAKbM8wlwFNXuBR11q08aJXEIOEJ7ue9lqu34IZy3hDGEUxf2WbjKNdvkhlOQIQzyKuYkqSgln36dD3lHTj6rQ1vWfZzimE61bHlzaHzXHjYMMAN6siR2AMF5YjpVsg9gxkp6KjDwVqxLnZyxfJWK10Z4BLqyYRwNhYYCuX9kUQ58qs09ss2ynRiOP7ylhOr4yX7XofYSZTUhEh3jMXodC9256ulQsZGa1QqeWSfPF1LPQfj7wzbvUEwtMaPBV61OCzFN35znecDbx2IbwJWN2c0kRj0IdeEkbKpOrzfqom5pzRod1pZ17pv7cQZQ6gVDeEcnBl2ZxbOwPidg1SrMFSJGoPGcYA1MYWEWiCgUtQyhn4hIoztTrsFQaLUleWfwcNi7a5gxsgAsCvdVm85taxQ8ixty7khVJLM9jjqgposF4JZmccUIBtjxs6K8OkjRFxkBf1hNcMTOIWVbYCKeXhf4jZePBRIJx2SMAM5t,9ff4c132deeaddca,786776979203af75 -yQr4e3IHfpx461PMPLN3klr8CkXeZgshf5ubNe6SjsiBVd43k0IOCVMTvegpVQa5SDWTCKujiuvnwKuyFGktjGqbu7U21ryuIkPcBFIHgcbDpll2UosHo4UlBJZeZIHV93wh8YDJ3IYhAu4Wg7bC0S1EVDxxzFnrbh0HUuyZbeoviu2AT4GTqk8iJ5zIKoLQE49m1YAuYNOZDOddapXYPSZF7A69dzPjDn9LTbpUyxcVj6lD9E7DXoMOb0lqaUSHRMHCOUNVjsLW5O19bdL6ivRiirZSZZNWKzoM9kRKiObTvRiOcRXPTqs56OUZ48yTk1ItfFY4dzT3n1KtrysgrRdGlttLBasO37hZG6yoGAOXlLH5215dnxa5UB7k1dBeoxHrF8Nl4BKcGdYVUesRYmrZo2PI90mcThzjk13GCb1cYu64cqTQHHxFWZ9NrSMlWpicZgqRh42pt2d9IUDL5lwhc9XWVyt6fQbog6uBtXTrzk1ej51iz4OkSFZXIRvhuRyTrL7PQJcwXwy9XdyQbyhbqFkkkdQKlbHCQdzwd2EPJhKyR3ATD4DkIldvkTbQjcuXvnXVzjVC1n8hjTH6lrjpe4asWfJt1bxcIsICiBmFiDt0sIOCU7eBjK3am3H4AfJ8Bk6NMxpYjk7u8PZh1yXTZgAtTAhcoKC30GprJqgJuI0uvqEkBGFxgeEtfISTCjQkmJBRQKc45px0jpPUVwnqzOXh3QfMx2z0RpDvHLksjPIMXP1OsJ8pF0x2DgFEbh7RoebmdAtuSRG5dToZ0Wh9tqPvoEz5c5G9oT5wjoLEHThQlz5iI0jATsdIoVdO2JGBMVs67vXHtMBtEYZbig5458azFlfVC2Rs82,d2f58254c21a8b3,bf09e12dfb495945 -wrNijnUyTZBbackeReYS7qcaSu2aEJeZrI5lnbl2vWKJ4kucQt7ud1FQp6VwGyVwAIwZY3tUTbRancC71bEDfwJ2wyK41yvrhXeHl7q0qjdmWk2CGCOgrX9LykayIT2d0c4EXtW1LDssQGwSNAosidgePyXC1ckwnkWjjVELsXoN5CRhiBeFHGgz0jDmZBpBFszwGcS9o3jDSDaEeLrPkkbfEoZ90JslIrPuja9IZh688eB8yactK2r2uzsCEqodj1qYY1PMaGRJ6OfUEzclsLp1D3iQy4ABbKT6xcDg75C0Z7Z1jiorCvAuFrlE26eHdEoFLVd7Hpf2VuyQBr9HWuUeEFwOXQYMl9EzlBb3uneCMphHL7I3bt9GbKfib5Vr1P6jKV6lRZk8Hg2CUMh2dIozLZAGkNzHHmcXm4m2zMwb0d97ljeZwm3lHijsIiMkC1qwdoSerUGRS6KYpJqEh4eEbQkiP5MEDPxDSCRrkQmTWjfy1vXCofffkIoujCqIqIzZe9ODQUgCmG0gqyzisOTG6L5MArguZJ5LVZWrHy7Tf9x9IubN5C2mvDtzK7od9m8e5AnWxemt7DmKgt0McUUfsQkTFTXuxFFkRuPa4z76glkncVwnr21xZD09LpFeMgVWrOhsSIIPkBABlFuZgJye7E0oqEhUfCGsvIAP,a6dc038f8a19c1bb,542e1e62d25b1847 -SUL2dsShHhjjmdpJWebfWHGWHMHfTdlThMMdnV7PxFtsBlsrnpqaDXhCX2Fc0HIQr7OgSqVKII6oLg2xsnP6VqZXbzo2UuCIPZSg8TddzbXMH4uZQisI6oEuQHBO1Su0ZtmuAl4E6lXT3ftxgJ897bGs7O2HQTDWhexUfBdmc5tG9Hp0rb63j46mRVneqOxxirEfetF1KhTZPUhj1Z7yQHucazS4kcWitu9jK8ACL5QPEkNKEzBAeFoRcULt3YFMnwxkB3xt45MM8ZHa1g7p4e0b8PeYQxoEpGNNPaW43WFJVH8cynwpjgk7um42jf0FUl9jV6mdPLNKaEKsze6OejGWFVTqWtGfr5dWG0BHMFHIsqwSeCiO26P3R2aUIWaq4CACVaeMjDr7Jig3seTa4wtMUW5FCtvBkITYuSWcSeMLkDxQT3rQvrti2DhWYdjdpquOG31RnrUOdc5ODuWwAnNm5isGEL4ngl1E1uyEDsip5c1u7ukLoBTRuA5L2rgU,d7fc0695e641df79,f894e7c5c49b2617 -QWEjRQ0LbwLf22rsJI6gTWKvQOmBJ9NOBCCsmaMsSBaTP3dSlkZf1nqo8dGmNod7xkqmIt9bdmyWHSOddCMK1cPBjvU30VKxUnzuo4UMlPN2AEr2Li8bLaPmoc2kOHidF39FgcHw1OWmlNo19RbItwAPFlGAfX991iKhM3DTYPZ48hdpjhrFknbDLXI4gHArfSDw3h2Xn9cGngLI7KDPCN6gxITBN6cpXOiJusmNUWgC26L5PYHF6554uV5JcvEIJgEcpXIr5CYfM0hWsD4l7XGyRUUOsSOdTLLhAibOdNJfXNqRMMc3rnXhKyRUF9NLG5TSSTBEyEa2yJYcUVpl9RPMyQMFMgsZS0BzeamBTd0GrmGdHuA0zCYPmCudTJ9wDzS1Nv0rcla03zu2rfg6FVL2HihpDKBt64N4sVgOqhhdbGWLbBvq6a6rxviuyZYSZfaaRcZjMQljLJh8Crdy3SiUtLCSQt3HYMCmhMabQGldfHdJPYFiClpVw6MsHoNCDm2USpdlQnMTMLVlMJZRzQrDmq4qaGc5tRFtONAGLMwTcZcsZYKEFrnSiFkNF8MthCHGfniWHnCHtptLQkJWp8acazaE4euPMjcitdCtcyvWcSG5KfQKB0wwGhpTXCxmogYBrpgfuhodwrJv5ys89X1x6UMaBlFfnXDF1XcBGfMUYCOSU4PvvaQ6eqN4zIaHCMTUP28pLNhbVYwTE8xGicfy0RlmEn9ZJqYf1MMsqaKFtqjNnO0WbWc39bVJXE7Uw76oBwg1IOduxUrdteY8493Xp1yexdUCfWaCOWIPIjvpXGSNpHUFMhPnc4JMLSAXd2nVibqHdcW0ldPRiz3BQlmfT03xcUXBTSHRAgnl590MR8,389c04ce817edc2b,d3147b934e1ab9a6 -0jPoEgU3ODg6xiEcAjyaW2ffZbpn50h5yeflcv3IMGFpPl5OquF2DzezhgAUebpv8mPkpKuRUygkclbsrevhWDV8fIpc35bNGji4ZxTAwwJwPR9Ph1qyzJYjxcJVAFNUnWtQwATVXCAJ1vmvFYYoEyTvgxweeU7HkyyZX2EgbY8pZnIqmev2wITM3450bOiZZj4uRStwIxT1sbxMMM8l0Qh1GInkYJpWZvQ41jAZay0A2nDXv0p9r5bySGyBJ4q0UJhwJmAQ1Y9upqlnSkLEi2xBIeP5sBoDLXQCEVDHy8CeCAcgZ3oADWf51qDFmaebg3qabTP5uj16cxrDAMisDFKUHyrCSwZdWy5T889wXccPsPocSmNZzvlLNjc4aCKlJHwaTOtu4cF3YNvHL2XvxnE9YFJwXYVSqUu1ONVp0ELMrYAOSPgmsgvLRFzpIKfzIhMYZRRS73LsqVIrmQiAQ6T9pX45FomBFcsqshP2z6LDzFXa60tpquqpWkwmxphNIyGHkpf7vhajohL7gz6mBbzIKIU8c8vP3cNevcwg9c3FhC0u26T1DxeKGKLgVGyKUSP4W2D6VSh69gwYO3j3N7EqzRLFZcdz71S2LyeQALXXw0Rm4Q6aUPZBuTA9kCOXk2HxvAB5bMotRzNPYL5UnNJ9RG8azXTZxmYlroDo5wxZCnp253Kztwqevxe4chofWmM7vOQ5HbSyPqUgHqIy3vxgOFojmAvwtLVrueVWGtbSYNnzD2ZG8AAgpOrvPTquUbAb10gJ7gVwCPAYczeQrZKmABlU0e6M3p8lFjohpeXSVJdwvuEvzK16FGuXTCwI6eOwM7yqjOs1TixC31IxgALCAL4m4AYYuL7ag5HGnQRMng0VvT9XuWFn4T8OChnhldmLOyMUqJAnQt5SDJfcnYGYzsPHijbrPDOkHEj8J1ZooGa7rS8Bv25X2u,5ac4c7b86c6a5caf,fce8031dd45b9689 -tAEiFyhn70x05v3A1oU5TCm3L9xeMrmwpf6UAetQrZ0aPwy8k6rVsn8E9kUxdGlj0kwildKyWdTvzTETxGI30LIbXGldef5YieiaNZRP1c3MC75sH35NtDXqRzbm93ceO0z3uiuXpydJPIWj1CBWtCya4Gee41uZqfSROdvmZaDryjHJA3AulucRCQ6wjXdk0gYuRL5nm1CxQ4ysjqdohPKF5xGWeGSTjFjIUeKWUfm21ZLr9tT6qwq1Uzu5UrosBkWLVjQxxXTtSdXol3J7zHcJDO9JKU5teJRBN3oZSmfWdwIWvqTYJFUIl9KaiOfYVnrTxutNb0X7bsmKve22mr01rxhoa2nlznYmPExbkUCtd3CrIxGKzRhaDZs2H6QASmVHr2fZMAAiandH9GlJ5pW8dKZOAaTwsYcMR0NIQA49wVYIf6UPjIMhSxdXxjqPMW229ymzxKzT9bt1MVDV7s99wc0,370e046db1bc732c,4525c080d84c38dc -rk25AX7V36Oh7nhYL11zagIgWGXYyyCtyxJ4TsVV6KFs1bScRlHuI8C8Hhy2c3x4Ufg7n1lzvgZ4heVnozYf2Zz1l2gckbPHMXsA8vT99LNgmSbnsNmeQjOBRLkaLgpCTUJmgW53HHgk7q4ONOIWBx8fNoHsCvzZWFp7Z9oGiowjbWg0kVqWLaV8rUzA7NPudIaC2TtdFpUQEzYpl9TsdMWXWSJD4AD3IsiGHKp25KRxanAYNjT7eP8jVGWaZx3u2B0LhcBV0V8I6MfnY8Sb,2e30ff18918fee11,f4523e7b4abe1812 -EV5Os08veCYmVGc8m4GLeGgj5rBtfuQF26tgEy1EqaG63EBZDp0Gr1oWbd5vyueBVLhgCPaVPwWX1gT9NlGScgkrru3MrhMucIzfOw2UgKpjB4v3iIQCsupo1P5aE0CjJleCG3naGiTOoe0dPcJToaWHHl41XAVuLfSr4ClHPyHsQy1G5MfwvIGFj7vHyAF2Eyh7cVAHvEua8ZiAE9uBl9c2qVz1TyWjQGjgiJlAHrI0mlpEMVIx0ebOWvxePD7IzJVwIbuFZ99CPSxYiRg5PXjg63l2OmsIctiOAi9l1ZbgL0C8biXzpPg7L2tZlUlOOPm6z81nRQ5c0hrVpfzZqsrqE4mOb1IzVrc3tkJYaySdU3ZypY4VPpsaoxEgvwJJGVdDGo0Qa6nK2rwhkaFQHPXlxatlkfCSdj4xuAii5C5YecCbvfLDbqabZFV5glH5tQt9W0v7eg0xJHgnPbjrhUXCUrQkXeyvJQT5Xm76tzYKU4UvdoYzRN3BFink9X1Bns4EK9B5uGmp2ley6Sb1weXs23eenWiYDlXzrAg8j3UjZPkXCkxRQJZsilg4rtgxY1CHDvQ2JfXClT9AQQ00dzYxcGu4uJJ0Hk1f6yoOts3b8WnLd3ZKqMOlUiXfN9OdXFPkPs8W9ETbN4JmDpq07DNqwvg9w69wRS9mOKRGVS2gGg4UR5mKLc6yducfBsfOzPr53Ip6hNCvpDzRqgDLZIsvWii3mOKSceYmOu8P57jrTtCCdamKP0uF5uWxIRutWWiNcMXzr8OkXTToJuApDtDLWogYTATTOLJzaRXMpiAaanHnfG85dT7I2V,3cf8ac5452e55129,3af5c45958f5e6c9 -gJN8s7ZVbhFTL0rdOf6aw8w0wBTHZ3ot1NGTa9PFlrkiddfKb2SmvC2fxONyumiEAyaTuMXnvnFQ4NCJdfpRbPFxEIxcEZN9bGZ0SiGuf3NV2GmU9KcsnPZglMesXTB9Ppcv39HvjnwhWHY6glfvCCBe6UkeLa40LEajAFcXLdQpMMd39L5UAgaGcQbJ1NK1HIieyFKzmmczvLNZS3WimFDyCr57PahOcT9astdDsLMcwZ4ZKaY4RkKCazf6Udch6zNxmv1H0q1xSwJTvYUviLHKenmnDkqq9W1dc4yVIuFT0TshYtXbDIDG1DzIEQWOj4gx4LbAFGAQ2BJRE5f8GoVFHYSf23UCwwQ5ppfEuBWHYWmpXv0SwjJGdTUOKV4g319z4fYh9ygAb9p7RhEFUKOQw23XgpfLLXnaK0kFvdPGlCYkLZJIQf4rtkTPbBMvJlDELcBeSz3p7TowiXsONpVAmL49pJC5Y78YBZ3IcbNEm97TQHLugTiZhCwHGacV9VKDmdpXGE5OwvwHDmkAYE3h5JdXHs4pX0gInDqkZlzYwyFJwWZxXkglPOEL,f39a8c2d9573a273,e97d6995a839603a -GAzBDiwCi5wsvBUpqf7ZVSQPAqqfYnQSAID1CHvkPMsz7xVrJBKAfk8342OO2pNbMDjAQ83rgoxG9CI3J6,ff4e8f0f2e530ab,5b4866f283e7e6de -TxJuT5khVYdaBwuYQ9IBeLOGmRSjxuhRXYuErKjZOgBsN1qbC6ZpJgybjEjwMh0oVxyF3kw3It9IDgtcgwhqRl88XYGF3qBHsyiismd5ntQy1bLTp9bBZAlvVLWvAZDILCp74VGcz2kKwsk1tbn3GK9rLKsvKmJaYrtMgbC477XG1oEBGGUYllRgS458VNWGUvBQdTprI7XwgSDMiH0ajumedz6h8Rqcoo9SXDD4JpxRaqFyoSYKO2WwdG188eI4lzdGqYDOV7DWb5k2z0XvXa8ZNKXjjnDhv1Ba7qoPKV7FuDtdoP7JBAbO7OaXDMr5iMreqwLi3ivzQDpHrtuCLIdBRtVn41SF5HmroEGPyHnaWpFIAqcbwWWxIzlKHqw8QnoRtyPgZpihUWNFIMB8khOztRZJYSdClILnjER3dIzMDJ5mlpAsyRP0ExYnb6l3BHR95skmEESSk7SAzCRg3RqshQgfO98dvPYQJEFN77MvrxoQuBbErFVJWE2UZrammBLS8MdFvM03STuv3TCU0m7Y6krPtfEXn52RQ8RSgb15IJNkl38dUgZdOrVq8yVzJqvK7iNFJUvKLcPvi7wDYfX3938f9bPnatnj3M21JPwurI5FShz55kD4G8MQcwbfm2TZi5U4Patifr37UjK1wiOE958Rt1SSkSEIDcPDy94kwQcjd61waluwBV3qjJLcZI4Zqo8liibYBBsf9c44G2ObYq0oCBvGnKp2EHdH7zZlEc53dNQ95UIOd3ZqfuEiPjhPzDepL9jO2W9W6FSD2hUAcA9K2jHDjjQ8qop03KzRVNOjswKAFYjpN6Rqrr9JaWZuqw4vwXDJgLiOk0QIkrNQBQzItZpVjoszSLXt7yJa39OeFOVkpRtqACAcWvMnRxeD3lp4PKM1amKVdcyx55uTtM8GKz7mjgaEMXcapoEcN8kFXqAZQPnC6FSpbzq7iHX4Rwa0NjoRIod7DCPMxgFaYyvFZKneTSijy2,fd388748991c151c,454a366497393411 -uEgzTXIGuBtGtixsg4snRw4c81pJgIqOK2mNP,4b9f91b3830bfe6c,58ea1a0c1e705763 -IZaQk4JM57vxjx2qyNtbmdi2JepHtHneMNatg64id7Q3A3i5RgViI0fZ35sm5cKRKxIysEosiraMGoV1lXjLyYgQZzqMdSwp69mX62KpWovGqVWv4XhZqHBOo5UcaAmgkRKQfpTluwtYTaaEHiQDnzyuc75iuc4FXCQAolK2j6wcKBnD6GMDJLW9CN5MaFDEFZoxk2aBkeudqvazFOIj0TrOnCq1t7NmlaLLqtgyZieT2Ba6FlYNl4117lyoFGQpkYOgv0Y8leM5VsP94kXrsHSDb3VoRR87FuXJ7ExUERVo5LPZvnYk0Na1c3ystG4hZVPZiOUQ5J8qxxExHxErQCHmLfbKCpI0VOqlGyQskobHOFe5mThX2AWMbEHBqaLDIw6fd92VCh1kO8w3ERzY6KxwFESfJoFJQxbBweS73VDw82zV4QQOt9gYmhaFuAIgxDzhJh1JZu0MNDSIv7jQu4PlqMxJn4eDAiHuCzd2SJ5k80nOqzBxdjRm8EUNnvUjwC5pgFozY6olEifmXZlWoirWAJXYrirp0Li2hKqr9V9p2XWKrSgQKEba9JXujXp6QzimUvyBGOOE6yKEdoKIhF7hPJtxDzYUZWzP3Qibx5hVQfRQtWCOd9ldhPojVkAzjR4HLGZ5WuI5jD941aiXTahUzFu8kfd6DPM3FCPHTk1umIE0rZoXd5sUNunYKeAzmmbuR9to4PStbBCtkoxOt0N27DNNcF8geJOc1v4owxyXIYnUppQebC6sOaXFVNRl2lNI1vrTo4lZgMpEr2AdhRLuHNbDgYqfQsP97h3wFbO3P1sfV0cwyjbTOcooOijITb1CmJFE7X8FQJPxHyKd3A0mt8zbL9Dhu1XJA2e0WSFPFYsuIa5wQWyuNC952dxNQPwQvSQypzFhKQj6vJaBZqxIU7It81hLb2IVLYk4FXMgoZDmKj1XwZOWEDmRXb,5a2a627ca56737a0,ddb140012f7091da -1CD8SpL0rqceLxhcjHMzldIX1lJNtKCjRzpILliOPGm7mMY6imr02huurOwvA671Wi0tbWLlzXWtZOh3aRW5W28ts2uZ8pPhs9qcgiMfMLYkQIsXfhI96v8j23aD7iFcPSJPuYbIwgQFsN6null1xDUHjhinujySVkgZfAiQvvZSvg9vNK4tTtI96xa3pTETCVtfMNQstrrNYV5EbNb8WoGtImCvlkKOrDFsA087JaxKJ76VvtZGD20t5NoJqW6fNREx115lW5rEN06bPX37vJIayr4J0xL6EZUA9g5BSBzAHkOnNaFcg5zr7t2npYTUYPlcn3un0zI7pk2WFmCDtOUfAlbwffIEls6AAa320zwnw0cQPPe6SSowrbdtVIUg3FNESGc3fFZmv0IDCFJ696mpiBGQ,4820ad669dbd72e0,da2561a44662543f -912IkdZravEFKCwgw6IEub9Ut3sbFTFBfmQ2MNdhnptRarG41r9LeMoRFsmkzhA9N0eVsQdQ62S9nhTgFS2H53M5rxueEMsVjsIqdqv9KJQQTxEEtaXwmaDxAQ9zzQISC5oa2mdEktDBK750U8wHhic05srCiyCDmZTl7u5XDUQKOGtN44aR,eaf81ef22f9dae1e,b1451bb37f7c7ddb -OsM6uraHzYid2BZ1WqurNkF7aBljLviD4EnsyI8aCyt7Ri2VavnC1HpTUBlsYdqeAOcIt6KeVlV8TzRDpnW8XX731eggWILMwxWj1VPioekkaQUgZSk3S1hVMqS3x2kqBZdRXeG8rlDD8klc8Ssqxz88BFgcCnBUrm7nYXZLQJkCZdU7BP1UEQiPSpnlFa71nx97cVer7mnoPsgIco9PojTAQmPvN9QfooSitWXTAgL8VWXOLVrbCwGWFFXgXKc1sy97hLJSMqLf37oa1vwKB05OHxfCCnygQHCDxAA0ZUtWTEX2A1YVSF6g1GAydVvT9Uq5IIZFgcPIQAoJIRNU2UHCl5dY0e0nKkLzqIXgXDUZE56vCvnc,f5a34c50c1e264c9,343c921b24cf5774 -JckdCv3DigwQG6cS5Gg53sMk7ILg5Dpw60cjQgERAORlN9FMWy9ugKVaakvJvBqdrIz6xhYbMwKyTs9W96xpC4uOPxvQrMwJwqYrWvjAWBikB8VTZW9OraFuTdakTQxVIWK75cTbzgjUDp8WLIIXdUF7qgrX3BRtmzwPpUleeq7iPbXPO2cRSIeAuEsT6fy1zn5xbxLIjQV43cZeGo9D1KspKjTE3U1SRvcJNFm0AHshaAowgZ4j7XIg1zsOnYnKYTjTPyZRFQNWBi8wd3oGHbYRIN2LjV2ZPERNyzqZ4wuSdqvjg24rjVzFghfyePbzy,9d3cc019645e04f3,85a3f42873b65c36 -vASEkLnbIT0ByPxgWzXmcP78kcAe2o3VfL8vEKFmbfeKThkCwPx7ONLIGnJWTIR6Mj818EY2MQgUfAVRglZXzpnTfxGTHDZ10iLmNkLmEue6hKIu0ToGdcXRae1ASmKpSRB4G0cmiDAjiU0jbh0EfMXNugGnAqkdtjYjBhPuLQGq9LAbC2lwC1LnsNUKtHnWbhh6Z7S6hhnl4KRzzFDlk1Kcq4JU95oxepSxU68nkkXpyawnXz821CrhnTFCd4Qw40M4LT7VuAx6EiZDg3RtepiH7xEmlfbDBUFXmqG9XHXaTHYwoDmCP0E6U0gxLu3lGcxFk7Kiaf43W5dfVP6rwxWgPX57wjsD1Rp82y1Pr1Ue4ZhwI0Q2aqq1ShxWE3hcasVIZkQvZ7jOVRz35ojCW4B66ZvK9rtUn0Swb9omxBf7Dt3hSuj8gkN7gbAKZPpiCtgx8yhNxyq7W5AHLgVesfoQmhxGVSi7dG6D2eX3JEUOR1XVZ1XIKpK4DnXheUfWvaqxfs1gaGG7U1Kow0Nl9i39eOLKd7ZDBWYd5zVcPzoQfBH7NJgr232gjC2HMm8LQ8dKC1JvgsIpJOPmpHWnd9tzU5mAcr5Y0UBZH85eWOc97hReVBSaxD0TXecgWPCW6awW1J3qMM1x2J8PkhMa60YbfeUH3I6RvCuYLDk92grhwN5yUc78kp0i6jEDijAFXClzefvQp1EpPPVRTdfBDNgFZyJ64RDSgoupuLnpCwdnKhMk8b4SAKFiQAOsBgWVy0gFEezRmSYhlQMr5K17QE1qiiie3ZOFSv60D0A2L4eZm1530yaTlUsuqdO4YKW7Au6dNb30nMLmSQL060zqYY1GAKtHfkCZOPttpzEsHmpzLkVHbjgWvTAzsmowWyEnqOe4p,df3d1bb84174d12f,cf21f2f6eedce62b -KNzCCwoUlHGnGbIodflLn9kmpyh85CtMxsEcEPdhELwkK0Z7dA9vddUAIwxDuZDzhKRXeK3Uozf7DDcmEnRZWQd2guP29soeCeYqrCMoaDJq2o8VrJUrUgIvKbYfxGLwiSchPkKswpYncZguQp6GSuUUpjbf9hn4XFg1FhWi5sKbXIy0DrCtyGy7AFOs3Ngn9qiwjZFWVqE4Qh8yWnmLz4pBbcADdFhHvtsVZFl8a71SZtC3Vd3yp2mEbYcVvs2s1JwNTCh0U57GcTvxIhoJyjbt70Ovkry2U3W3yshRmnt3zxI7GyvCHFA6VWQ1LUgnQdZe52j2u8ElUzqDwjHnnWI5DsWyTCYdHFWb34N,3861916b92b3b0c3,a5c7fb7b3d605785 -Pptc8rp5IszBW0QZoaREyDMpxKEnJBXmp6COpF1WMj4KPbswvUcPBpxs8RAXWS1HR8kYmJwF8nZ7X0v3SLBfcZvLtPUkHpdKWAvvAqFArLeavpSzVEdfWd8iZAnffgzSYelFdVK5VldODnlJaJQ6qOLRE8L4ybDB0mteLiQR9qlZw5p2fuPiAG7cd7mckm77eWOqRSSqbTUXS7X3NJYDaj7zQUuWGXkgVAn37JfZzMRPr61BukdOQoJzTHxmbazJ2lCzxeJ3y0bffuGAAv2hn90a41PhMvKBsf7CZpDmyXfnbh7NNEN03MhvMeltz62GIDomINKSS5bIaY3hn2ie2D81umnOjgA5qDv07k5TKJ2v4dm0CqsUWnMPELZGzA4K7TTr3dy8ZrrIH467Y3JwKbtqaHsiBlzrIic0eVkRX5yz7ZZq7f8XrZ4VNZkFOj8fD3AHRdRd7RSU4zVKRfisxyczbE6w7QchLmxZFGj1PxM8W2huciRBNofbm684aPvTAiV5aFZsqPYvCmfIIQRRxueHvoHdt9mleGXIwnAUOtwdxGkVgxF75jVqOHqs8rYOYaNfmgyW0BtlLQd7hRgbF22LCxvpDNuaGCuSGe7wRKv8DypqaPPXitinrB62dpCdYcRvMYqEUYLyjJ6QiiPh8HYaUUQD1Pg60KVjR1Q94cM9c7BIV4qbMR3WXzjylTdVqm6bB3BQ1UzAMWihzgIQA8WxM24XVd12d4YhiNtNY4bz9daiFlZMcYmuJs5SyrD9NJm,82b51d6078bfd7b3,e65fcae2e2746b84 -4RG72kGFPCVMqnap9IdvMwrdergNlNvEjwI4D5M6nRyKrCfvhJwhHE8xkPUfMSom1hddq4M1kOJSYhlTbMPgjttZDhQJUmLqDYflSkh7Ts5jLVDZEGP24vs7IoNpyLmcHgxaPUS4RMiCqBpEYkDGvDhYXp5fvJ0BVrZVwlHHzqntuMyCFpOMhq72KjCeE6f81PhvYrCzsTEScFouXHWhBtRFj190QCXjhafcl6bOPukvzHIQ6VRmbH3pNFkpXsFZISQPnstPuu8o8moqkSEqyTIDiu9mMpHFPJ9ZoQVNuXWsVdtOSBFvGXpadBgZ5psM1c8DgBE7Wn44YIlbMo,7f7343e05e16a21b,ff25816853a99052 -hsZ9MzS948qa01H6zxIzEcUrqifRnElMfx6608HPr5JLTtVLHwExfZMs6e1TPJiGzFJgmkaEYNgPZjXdqRpb4IJERFXTYFf2IcbTmafmWV9HicYJvm8bOOErKgu5A94gZrQSEsfQgptkEE9b0wNLoFbw3yPADjamKfOtr0qx5v0RfQ2xdVedVNqQi1q6SyQVa3OC,68c5a6500da37a6c,9a2b64b4425839fb -0MpxAkPc1eAmlOv6WifDdC1JKNbK3Skcg22qE3h70ACaQxpSRjodbjPQVFZcVRIvvImm4OXhmwAqeFXVvzFoS69v3vDynydzcW25nbgNApvaUx6aosAkqUQqs5i0Pm1hB1p42HetYXj8PhXxNEpwYapIKGUYRoufGFBRdJzM5AmLFBBCTyaK1OsdTa,a9593cd6d2a896f7,19f7407b6c3669cd -mEDRFxKUSCeJjr4BXvZULzYXRzFc1UUSyORpPYZvouhk9yaCGvolMMPGIgTpbSJ9DQDCuvaAWYfl0sv1RTK9zdEnUVgrCU08YcVZrEjobtvxd4Fyotz07wGpiDeR13sBVIVsZ0bgOowp8kNKFWOeEA0uWUTsDWbjHQkVjbPz3Im95G5HloYA3NmBg1ePNRiSCvhxNLE3v5ZtwHnpAAYTnapPEdpYkI4klfU5AuOLU653NR6zoWeHfqegXXAz2GMPoHUcWtyiDyVBMm8ESvvj274CQJud5Q2NBhEiWLw27DvOmgr4fOtrKTo0rdkXqZwExw6IX1ftRNY1UgJ6LuUzCIAKyWejCoJm6Gughbe6PQl52nTjmCJN0C5Crm,9863c4df1edfe136,953d888b74f887f5 -3B3X3EVQEYZBq8jaPrq0KMjXI7C5aqyHnCVksfEzIX8RJFPURIwTwjNozSIo3ImXlVilbBg5L04fnhNFr7vZW5q62XERKBdqnqMA4PlDsvPl0Rd79epdZGkChx0G4jAaXsh54F5Qmu5HK3OZIOOQhRBkwsR4H1PTvclp2doHh5c2aBijcgkKqhNfDW47LElQ3toUykYGfYyJeQ2vX9Kgh4XzbWH6IdT60RNH8xFD7yIgYYzxI15PaOROFwB74cwUO9w11n1h1ondV7wYW1QboUJ04csWuRQWYEdhONxswq2PpIDOCpw3dekCCpWjWBIn2wQOA9rgJWXEp0xJlv7gwhKzZTNDPTFNWl3nDo4aG3Q7Zfrauf0KGKXUmobANqIGsGnpaaujJplPNyvJT8msPsgEOStEeYretRV0uLEQFSDMDDG89J4jwxNSpuMOvMDZ8utrSQhaJdcK9hRKscY1LL9GOo0bqeNikFpy1UAsvC2u0tEP6ojTHkmjXlwjbIchRd9d8Xbvl7oktGQ4a5ASrwI9mALa0ZhTphQZ6mrHduDvDDvlheEZYqNWw0P1EygZmmMReztNa1DSVzZXQUak6nRbpwpb4YapiAda11LOkxSb3x5sIKlC2exFGYjuVWWVFm0noRdPQg0W9SlfmRWHj2I9Oz4AYrtVzkz58TVTRwY4Agu4gzqdmVdAuj2J1qmkau4dBepcMrmnw3LYrNfp67rpwO2r5GPoAXjjQdLDkqWEOjAY5r1dbm815DOuuiG66DiWhbe2W3CdvWnk7jNA1MhBelx2EZwq12qQRyoffUUMo327yp0WJAIrEGLn4PEopTausXvaZr5XoU5BLalE6t7wP0mcvSdnKBK2A1JG6ZO7Zqrx4K8MoybTuXWwfvEgIO8Qbagj4FTtzjdp9sxEBUKsF9YYOMAVGeoaZIkv1gdYufM,f6cd7ce6e52c6269,adcbb59a67392c38 -z3KTEqi5LCfzBmilVIJvV1Jj5JJVZf8sVCubPe1X2NnPaYvoIXPu3P4qz0KAviVWmPVculIFegoybIZDNgO3PFFDES6V3K2LKU9lI0MdRnFgBDJPrE25M14Lx8i4hospZS3bQRtZLgvcktwODWuevghyc4eCSmFtMrUHturLFKKxgzJPh69MnAabXjHDGW5W5uNvPS4QNL0UTqQt8apbeQtOUifnIRydCTeExkBgfojKSyTAKe7AYWfBNr00IObiApgLgAlvQQA3zr3sEoSalkRnZNRx7p7IMEx1Jd6thH184S3qd10VHVOa5zKbFKDmH6cWnUkTOyLAcVNBNB2jGjoObUKuonpcW73Nnl4OUfDFHnipmqdPMhTSzaYoJRqb3hZf7vV3XPEsLwxiKegTTUAlv5MbEf3dtXOFsXwEPgcZ6aiS8SjI1u8RjTo2Nz7cJWwnrFzpv603pduh0z0h5IAUwEPnXTNm3Ff8hJzMTQox60v92TGvdJHNJkKeiEjuClh9qzoWJpPelOSxfnzFZkpDDivXCVRBzp6K2aWqzcM21HgNwtSUymff,ee3dfaedf564b334,349c44fa0c507909 -AMgy4aWNsv2m4bIpfOWU53YFvehqkH3vud8xCPbgEzdaZRVQZ5JV7Jd0b9OVEMA5X6LkdoeqRurcoUUM7wE3ew5G9hLjr07FvP98KFf1nc76PM8lHKMhxpQwhDiS7bNA50EWjXdRxAeflKDK16o72BEOsV001yrdeRVBGbiLX0RmyYVdTN7wd6mGerzOu8bEEenw8Iv01qnfmSbJqUBdHoTe9lqgNqTEIh7RN3s1jeaIEmtyUK1DO3BWTvQgA4bCAL8njSaxxwQQGqDmdYriCq1ZNbzgmkqSYfse2L1hnwl62qjhI7uOJng3NCVmTVwTsfp3BLFyAOpfY1KomRHRCjh4W5GFftX0x0dPyLrrq2SW7fYMTGlU6gZsLm1ksllsglPZAwvhLk7ny9hK6PV6JzVoJw8fGaChkJeiJzB3PPlBVXFq462UCkvs92H0uwPgEANgtCHyrSTtPIWLcvD8ODKEULPt1PuunYqyMHBSKj0d4RXRRoXtOWt0jCdMHyAP59k1plTtBVL7MBcP2bNQ4y1qXoDul0NP0fMLXGA8gaXSY6i8qW4MZ8iOaiuGu0NjtOgdkVMz1LxFxsl0Ik7RaU7OtsqfrXszLrA8BQJGjRupuoj5nUP6OuU2cSVOkbGuWaybKzTiOYObFmc9iAuAhilDSrc4fpiYvyuu,fa157c50c009d846,1de28dbbfb5cfb6 -f,ceb2427132116d2d,c3bd4c8db1d7bcb3 -e9P0UR5aOLOf2e6CITjMyh5ESWGV2sRkLAjCDVHRofcDs87cGfpP0WCO9SS2Kw3d894BH9b,ac88586e30b87863,d3a0b74f7e27752b -ZhXN9rijzY9phqfs5w6c2MkADmjbzSRgNAI3vJKWTcjCqVQaAojY1ge2TACHp8VsmhYg8v7RlsIuMd1RgUThLfkNmBEQKuFspvpE4erSe0zWH6Oq4shji4MImELPSHZdFFgQvfO4DZoREy6HuYGwcyEB5C3AhVcdlB39DEs3qQC8lNi5PS59QKGJEOGiiEqHxrAnwvNLMxByruJzTSQUoZhh7ilHRXkQk0bMbNErKiZCWrAAejEcjU1biTaw9VsKBU6rCcFdSjSUUsbCXTyd1JwtZeTnh2kRNkH5cFxIIGxicOpsjIeZT3uSdZKksY8Uh8TWMaaVHH5Z3PWtBmdbjgarjpisYwkjg9lgeDcSDwCDgqFcvi2uH3xrdKYMUYlnoyU9apwrjr4FtR760oAjTmxFhrMqeFNT2vqAxpGTj7urfaZbiZQYStR5PYICgQQfzXBKlSmzv4B8wwr2JMnLW3m6DY2p9F6QBToyHMYjCFEK2hUGZ1nJfOzq75DxIJdBAcERfkoWTfxxzspU89i90IPnJap43LB4M15f0yj0F4urbx0R5R0Ku5qYalkUeAHeUaDC2auTbESOcXkCKH5FyrvaQu4qwIKCLoonTJ6VGNtQExKB7LGNlaqlMRG1y15wyXS8Yw8XtEpMy7rPvekW3B4gknlQwtkx820Anv4XerHgvCvi3budXnUZWqC4qRhiEOi90yybPUJ7UKewEIJHpUhHQ8pgBnzlBtv3jaoVZWHVWIdcJF5BShT5shkf0vLGk8xgUAGiINv1eukD0h1XAlC6LjbjVelpkrJdHSG0slyPkFP1ivB9TUh1HZRVVqfld1EsvyJpBogt8FHN2lYHm4M9e4CqZyPIq7FJD9XA7dFgz4um4ZBjSsG8sQM4dfADIm2Lqq1pohJXMh1P5ns3W1J2JOlfBgjUVXdrxHlUoQQ43rROeCxQxD6pmqDFtRCpn0d72OYe6RVbnO4fyWFsg60vQl,b24038fed4c3debb,47583b7051a7644e -51Td3qRjAZwSCjiNBINcE00r6kQ0uEvW7FQaAb3pUC5igMsbrIlMkjihXpGHSgiBxzVfjBy72YwraHO3GiGlG0ISvffw,aced0a91647f5df2,9f779d075a87bc4a -4x39cewXlIamHTkmBnhXPLfsf6h9tPTO15TwWYWZ50nFRfVU7gNUzUBYVrxY6l22ObUvRdfMN5NLJN7Jr4gEOJDvHrxB91mb4InmeCgTkyi0f0fJ5Oqa00P364jR2sKe2fBO1dgo605lvlCR1Dawt0zaSppn3LdZDn1zd4VXDaOt1KSQF084JU7eioZkv7lzqctTNwhPR0JciiHMxapsPJtUGp4ALobDgwnMPEW4dvOXIpUQiUrARGG6MrO2cC9zQ3nNZM0ysrFbKxFSgJMJre5lfg1fAxu5O50lFhnrGgYWoFy7u9RH9wmASnqpmz5gjJjfCHX5NYYJtXwI3hxvVRa2DKrTi8sqVoEMfrBQB6BcL5mhg7tqZWWY9vUWX1TfpVwLcFWOy7m3YoSQthgPZYZJVrocnpDCfP79M1piitex,163c84c38f48cde7,c14bd9066361b1aa -6VRJCZwgDO36Mgs0xzx3Rd86YWYbjb5XrGOYhxBN07KScQAEUpPJIecBS0LuEEDCDjsABA1Fe640ANja4GyiuGshRMAcHIFJ0FHm87GaCvvsEReZ1QpLa5wdrgrD4vzY8rudw8a1TbTHP7xqwPLT2nV9YP1jmeToycBan8hXQkZE61wm9jZw9UAzcoFdULbeQM0mvQlCoHoUTCcIBe7x50MFX25wFRU3wNBTULlMcZEoXVgaIYtf1lFAdpaI06i2769Y2doctz2DKptnF9Q4okpoqSwr,4abb6d7adb3b6d19,361ac662e003a9a1 -udzcTkuuNlpfdv2duZQIOMIh6qRsh9UWZXxv0ngA9UhS5aEAgT0kD5CyX18auLhB386SVhq7zYlD7CIUsVD0DrTJbw7PgtD9NZvyKTTPNHscDCkcJcLwWbGDBhN7LaTGwtDSet0ASb7F8wEHVWoFsNyfvSoQm8Wjl1riT0QPJ555WYg5lEc84BaNNXOUdR02RrSyHUq0OSHJJ784VJuAhxf9jHr3lLiyIKI30D5ai1bEa3GWNh7Ahdep6sHDAWHjmfTDAAXp7UCpf9805fK4v5gJyrfWzQf6c4DwzoqyUnUY3EuK2HIrTdvns6RGMoSqorLhaCyZ5CC1pvpZjACbQifDlWHWWX32FrdDG8npEA52gawFvgvinXbM9OOeImUimYhmS0vin39TyIWGXWQBNLl8N6IS4n2RQN6wmmF3iO0zRf2OVfVXSPbDWnUH,791360375b12cecf,4ffce002ae8509af -bNQdKwfI8xrDS89mFnBKH0A41jziskjvFRQLjJn8OLLrPXjWZJsQZMEUDflVEQj92IhlKBflhv9urBVMf18Ipf43vkcrLwJIrTU1nvWZa2HtgacaL9QtdnRtXTPiOMFm7gmevDy84lp4VxsZ8ugHMQlZ6CakHWDbUGrZUpOYVFcmG42LgIhvhzlMZwnEmQoZVGqchyXSHDVgqAXno1ihPKBYQCKOK7kJ8nOdHzajfvmga9EcxXjfQfT8CmvmCDe75TdVh1uXKEk6niaXk54Do8z0CbIfqQQpselJxVSHxYN4bIudetBTerGiExiznGCfaEPPWdZOWcxnoxPvKpIb8Gd2WksKBeMRTrEo5CfiUneGJSg2WQ8fhZJZKm2lyKRIdUeskY52nXn8uUcG8IsGpEytj06TZCbhNKNCNwjD5yDsSJeh9VNmcTZNLhlR29jMawk98h6zcUffrARglXTqd7OZClb4Jh4fQeF2jb6c6yE4Z4V8uwWTSQa6ZqgFzMKHYv8zICw2VaO7NHr0FTXbtzV69km9eGiCFlEwORBOzPclamIYHrO7Ly1kOX7EUKxHSNX8Ypen6lg07WMVhr80h3HYxBsV3ixGdbD5JQQZG8PSakvBOyE1cKs0CeXnUUG9EScyLiFS02vKcPnx1SW5KONYxg67oQs2UQs3eVmYacwNF0ABUHydi0LKyTboISKh7FJLpJGobH4Pr3RN46TgT12lre8ArxL1Ngf3BFab5HgDFg3iYUrLdwWlTRcxAz80B6AQDk2DSYmdxmfhK3C7vMv3mkQtBIaPaWR5phOJMM66xLQCmu3vKd5IV28cwsw0TARaOlGxotMGPij2IPEGtdS4,cf0d9ee7ec638dad,a36315cb3b4dcb96 -Gye8kVUVYahRTlzQCQZy5bljLOAzg9JAX01oQ9Pu2NesH4OjoxOysEPmZyJtOBWrN122z246djNc6Tusc9Dt2Sqa14Fr3VdlmnNLYBJMt5twch2SS0HT8cpaYfgONhBlCq9gGDbXSGc0Sr2aAeqvFnl54XEJH0VhxT8HdUNnuvOvV9WfH2vMWuAA2Lt0xuXjn2FOMPwBe6iv4SsQ2h1nFgK0w8MTNNUnKR2rk9vr4pxn2ihNNDt5r1TO168shwYrzRxjKX93gYrcdYwsb7TZNxvl4kARc2D01KBvGOUYVv3DzbTdXehAdx8imVb24ppcu9vJjOjCNcMkwMFap1DoGHVOYxpZEHAWreEP4x1T8gIpI2Lc8vFFgwixxiNEqNeEDFy8zcKWP2c0Lxme6K4kuYZvs3J8Io5cpcBjFOCb6wLPfVQCfU7bdrflNJka7UoiCWf8VpBqztrz89NFyfODBbGMnFQRdvA03G1B4xk47sP3Vihllwq9697S8guHKHocKIri2JqMCP99ltqmCeULV6eCYAmLQpUxQI1gEfAxg,5175db84f2b7cdec,38063c3b742ce1da -35ZEwk3pid1kao4rxxbwbZXs6DBb45XX7fGKCjglQDwepwEDKD6TIgKlT2VWnPqY0AVgBVFcmd7Zv2pxh7OEOJcs4QTeAjZ7xX3HtzOS9x5BK93xT05QOgKQ5s8lJ26UwLHRzzuap0sls7RSof7EAo6v4oWdgNJtMvaMP0huSfjyaoHDap2GCnnhiZcE7PLJp7UOfydhVyPiruLeZQBpyOJRjcD4y6QjuWYZse7okRSDAJ7POTp53veEhOTqqacs7fbUPtxfxoMLiXG75GXFiFMk7duc2yv7YrfaZSwAhNil4TnLesYaNCAOlm2HWSA9eZJ6E8okl5AAMGHlKGwhTkFZTbgFhAhK81FVHkjd6Cg1KHvl0zQK4G1ZB2e3G7zS0ZpFneau0rnk2ovB1DsbOeHCV6u12kTLe0SQ2wUXKlrAMenMIy24uPmzVcRbJvPof4uTJHTPDdZBHL0igbvLofTVMvncpiYOnPPfVfodrXF5cknyiSHrJ5Ntw6L6J4pLQSTLBFmS7LFfK1WVrAABMiHebQeK65SVEl7Gf29GNmrFK4Jukv2gOTVCSjXVksylUMTlvOmES69bPrvjr9Xygq71PheCbYGxmvBS2gou5iRpDotlCWucURGp6mu5jvY51vT6F2k6zX4xl4NTFLkoZf0Kuj8XWCN5ejHoysSzkmNfg7SI1grjTRGUd4tKpKFG8QyXWrQlHuNxICXavLxL5VfhddueDN7wc6ggUVsDMxI2BFvRsI1xuJIuWbmvAzyzgVZxV,2dc26f8a26446bef,393f80a32eb4f28a -LcA1wlbkLM8DVacPmYWmznlwETDUdsTLLk9eyMOi5X7eijxY5zjwnMWHa6CZJZDiSqIYC1VQAMNHnJpqTYSQI5xkJhgMEK2BnLDRGzfsNU8HCguCyNI8f8cCs4iLgxTgy1yn26Lgto1hTCusdoeHjRo9EF35qIfLWg3z9NMKllg7huXttybhyD1A4mFNpDf7LHZyNRWFR21EPSGb7rebGTeaLgQ9QexfxBy1eJs0DedbhQi0SnIrszZVYPZqmMSlwqBc3SUf4yL7UXlvVILrKnXFdPIHLfotbUMKFRKH33xA4jNzXwBEVXvpfFTMvFRpZJivLirZmiIJeNX5rOetEDpARs236rZCOfXFBhbN56l7FzFU7BL4jdXFLRJ0BGEaBZRp9PDYUn9rA1LTCJrULlyoWJhqlRXSQwepdacCpFUQk16fym9kJ42P8g8FrH8ArwrXKFZ42EPINM7hRGHmhicZCFgV7Gb0WUdFwfoBIdRVNQrTlbKFddH5WAcxyqA2qhAFnBsRof2pvMPcWMsMal2ILPiBHAiPuPFdDyBvaI2RmOWrgpfiDpPfcyTeljI03RrdyCBOez18siaBTFSOeAeffsXdnhsNpgbjzMudyuQxJLUtfp7SG6oYi4wdryYEdj3VnWqocq4wMR4o375Gf4T22B4yXlje0G1YfiSEoFk8zV8Ek8O5Uv27UAciCfFXwUZZT8HU6HyXX9YuEmnb0sbpTOrZPq9mLBDs6sVLJAA34hicvJz0sblVHJHaJCT6Ejrp4ZdEydAtzUjlMxaBz3W2Q93KDKC3aQp0XAZZHprX,346c670f695a8d60,56f5b02657448dd0 -Ht9ncVe63fXxpjmrqlHr3HQ8N1ujRduUiHxNvz9FaB6ZA7TKNPsAkSNOJ5MPEajmKv8kkZs2C4H7bSxN2C5XuxfbP1FEx5YTySlJCdn4PcSpcjPXtNX0Iq2i4cOCVfhuGmUHBRLLa95kYEsvmwh1FDhmND5fWEU6LcWYnWgobO3WE8RNdgqd7AMSvseycn0IJz1UePVNtpcMjbXGr61qV8rMIJCT9RbLBIEyEVxnJldwFUJvNYc57EdjtjcExPqqA0Z6xVx5bLcBS5fqto3u35r3pzD0fft9zKMnd8MI0DDng6aGitoL4qxXosSZyypcMSQmaxQFcuVMtT2miy5pDLLRbuPCdf07Gu3ERsWO8qPmVtARjvOFAmv0GhdNg4i7XKjZoZrI2uiNgOQLJ0LQJrdBVVEgVfM6wPPLf1GlYIFls30fWNw5QYEiA9pWFzlwQjNf1G0vx8GjCPnfJsoJxLeP4Ikg4gEy0x8Lo3qRddBjOv2ZpHKYtnWCfFw49oXu0KxmQYZgNmfaNPBXF4FG2u41hLto3RE7tQJt0f8zMQBrdpemW8rUYT2lVOWsUpdR9qubu9WLn2D87hItwlxc8VvOnnXrezVXgdX2zrzogS1To7F3047p0aTGdtN6HQlLret0jJMlDebYcuBgaGypzXeo6jps1B5ZEnn9GesvuikQkl6mT1YiONcbVyPeeFovnQhs1aF9g7AFxEscHlmbbCD8yg5Cl5MhPtDZgHCHEOm2LWKxbcsuc5DlhN,2efb9ca1a0d762ff,40485785f1fbb051 -HShCiYfPQtKbbu7z4dnRUu72szH9sxAHoes52G3o4DwmYzzul1YUMkGV5Axd9iyGJmd4Ipz2EoPaksggRlnLW1yrxiFdrBPRLXOGpziHXJ64gNwQKxy5BazsfuhPjaxSsyEzc7lDkFIg5gMJJtEauTrHlXfT4Xh9fSuJVc18xwbFfPJuPJMlqUYS8JpyMS499lTUz9tfQ1w5uTKAEaRcleZbU9CeszBuBCVgnxiBh4Vq8Wtn8C71RWnk9PSeTpkyUYzQ4HHXozLNWbVhB5VSyngIw8qAyUvOPXotPP6g5dDpJu3P0zoD5AJLv2kurSGYPqMIwhcXlphfsdI5Gf0TQi5KuIxUhGj24kFw3OCSh4KkO7sfCdu63taoXWDBC5kOyNMaqZfgoTdzZnUs,635935e1be77a9e0,b7c2c2b2d03ff4af -7XvLCdHi6cjOOLe3eFNp1VNB7CeVcxOoD264Fr5G9ZTlLJj2Tvb6kqwpeDdpqAAmTOqo3qw4T7q1AbYr23IhK2sbSP1TSFk0i8oHyWWbZNIJGy9T0PS99LZUsotYZZEC6LFDt0DzSYQ52LDqFQSKiyRK8Za97M8MXDgWRz6f7vRhsYYmkRN3zR7jKUrbgph5TTYPx9hnoiTAQSWQufUo2M8rHifC4vDpLpJzgEOYWYViiIzJ4bX2BH9WvoGk6wCipH1UMURr2T4p10Jibgv8nIfBgJacziFtwKweHJXiM9iUwerI3B9pIotp4Vy7Osp33G3JOUFSuLfNDpopXtQYPqMx7IJuP7qVnoOZZFsreufq2KZc9DozUr6Xju3mK2ee75x9b53YfhueRjgciNopILJXT66J3cmJ5irrKRWs4ggnTkp6fXDXQRlbYFaP8Ev3Y7jeBB4kJQBw8eNzzGRdfSkQoRkyBbARDM1RRM7l573Y4cRDY1SruG55vdTmZmMBnQwagY4pGOmE45bdnthKgCCRmPfSgACZWHtvQ8aphFwqCO0scwDJSxP9wmijgo2oOnWLm27Mm08VC91lTMNI42QlFF1NLUV8DA1CLYjx42HCEgoC7KzUZBuIirUqfD6MNzpGA4lYsXrXZnIuNE7o7ktTjb6KUSlW6ktDN5o41RuLulu5NJCW5mDzfFIsoOss62oBDGbxZCJoh96k2YyaCPN1jaLnYBpHPZfEr2DUFbE3H7313HxEI0nyVdMB2Vlq8FkaZenHpukCvl3Q78mEPE4Hk34ReHcMt2vRI3FxogHRS8T0p6OA4rpdUj5LD5EYFCW9xTGHEl8FNspu9ighYC01SSkKzQcke,c99a2dadbfb6da10,3110d33e730288b1 -kTJkDoCYEycBDHLC1WgCknYpF77bZNzjApCm3WuWHt2yUGb9o5RJtbiupsvm4jBVE46gR9IZ9S0TXj0oXwMxpGF,95cd1482d8cc89b2,812ce6b4893df0c7 -MtSWLjywLZYdugODEmZj4Qb8TYI6qZzSe3u0Zw4SHhtCMPk6ymCYULXUM6fUp8DqvWIj6L4PG34mWMNXKk2vIXOQiaDKGSfSrdvbHGtzFUj2KSFthO3oYjJVcNb3IMuUbytPScsqVLenMBrEeFGeFCJ0t7wpCbLwZalMF2r2c8M1bLFATnc5Ufxevrz4zpyygUwYD7QcVnynofukSFZsImf9JUM1VrpzOeOMgV4TVPODFPFvJBti9yR71w7nRKJEXr111fzGxxoZt6SW3Z8468c7dIKODzCVf07W47UHk6cEOkjfGVfyrgD156G8Yixi0yk9sjxeCq6yjo8lqwGbfGLUrdWyZNA4Mo9dQhLtxLBmMKK0aj9tusWnwq5OrIhh5iAQeKoPPQ9s3a3JVLn9MEuw4CvGLHZYHfOk35d82eBY4XL6lyUcsqoZHwiMsaN8fFJAxNMJX72G55qAQip3RenyhFxmbUPBog3cLD3V4EdjZH6rSOwEKCEqY0CJScTmH9hQBVr5NOfduu1PPw9YcPHGge2hpunJhpfa0DfyfdUkiIVRV,db050bc41b7eb23a,b4bf00535046e060 -lr5C60BWJ6gojSil5kmCIGdz1ZXkeGHuN1uArBoGptdVLFA7dInOKntMRnAWC0wg6SHDE4VzXYSCXE4JEqZqNjMKHXcOnuUjtR3i0MPfMIO2nk62CV2CHlTRMwG1jdGrkMLbZ4g0hpAW5LDmFON2D96GXEEBNrEhqJcGlZ2VRKh6uilHbdrT4oUaEU0Us3la528Q9Fqdsq1jvzdBZmDwiKWH1KjUZwFMBAeTiUw4nUCabDkJmJsPWVPBi9vXlIAQxmvPIjzxzsXv4wh72mNl49h420qUqHGYpSrSDXwaoTUC2DYNyRDVKGweu2fCAYR4kSnQreCFNGMXncxd3z9FY4GwLC9Eyiqyd6AXZpBVibQJLgJalU8Q4gRrwFveQgay7skhvn4dzOEBjswRw2PkHywTLX8i5qFknzlAzldj0AlkZ9U2sM9VKPpRMa1a0vr8l8hXyW64EjPK7neTwdeZlgxPJAnt0Zj1j6uFnmXk5Q2TJC8aqhdkfpsQejpEGyxOOFQpFK97Znl5bc0,11123af0eb0c101,dbadd6d36d607839 -k5hUiWzBl31JAyzYTnLQi1Ufh5QKWFra1deMqzoAaYRWGLFyTos1YWBojBTNUZqYoIrHXfBRDPSKW0K40Rqn3a9nbNxB8pxe3TmfIvFwGZ7RBhAXmmSwcBWoG4xlu04uAXmBSKlIsyy8couU3sRZKVn3JCYUcdR3xzOHu3txEcn6pEt,5c7c3efda67c92bc,5892799a4c20919b -chbHwvtbWjl1BEkl0vQPKKK6iWklmPGFTP4q4v3HnK5gL0vDIHYMcxzRX9PeGgGiBZkLZaT13u6u4fPY9F9wOU6kQ0isQ8rsnUqJiOB7rkP2OPTnOs16Qln7vIFmryidNKmoT6e2Ft6RcH1RLQuvklP2nbSyQ0gPapQqnRY9uVXhJt5Oid4POMLFVsn77OhqOQMvDGktlQHqkFl5SBlV5xTzUUMmWbhkm70frjYbSElC0DSCugZYHLLZAIdakTIL9wAoXjZGpgQQTwk7CoZM0RM0hyzi6WxdukWcleD2b5hC9pNsRBWcukadOLNOAY2WynUGhaYNeSg0li5vmKWFxVc0LD9adM8D3FRYR9hEjmiEAqz7Y00DZk2em7tINZo74hKQ3AiCMrEj42l1PGwGVmeST7rvY6xubtYA3ed6ychqrCBsqqSgiOx3EW2nKE13GuHOamsAE0BPfsmJylYf85rYzn0WP9P6U7j6GvxP6Hk03Y2O652ZXWFuY9i7J7PBP7fDhuzAF4Zcyv1bLEMtYyc1UKzytuVCbBw3FRj5Kzk3fbqEh0UiKVRqfWQen9oUWDQTCsiNtbde8H5JgIPQ6vQF2RI5SbS0Y8qOaMVT1qNuXyO4kvS81EBRYiYzScbJyih2gdVJZan7azLTQkil17ErCUbbUeXqfJ17JeiRJU9qCfAjxFZRpdn3bzl2Y3pRn0DprEdDakp7fBeJiCF7iPhaCf7r37EhAW1qL0ivywT0R2dwH,7e982eddcdda9e0e,fdf980b1c7ad4dbd -bdOOnHFBEpu6GVhYHwgoBKzHxUtAp8heVmoMJR8VEuYc7GzFcPByygOeraw88wMuaN8nxVZF8mRKoABGUN37ZuEjnvQScoi1VcJx8gcHjTRa2wmQVw1z6ZyPVsbXsihEm0jsmNm5ZLfH43Q17Fu0HbRinEYBcB6okd8xavUluFo9bvGi8Wmxj61UYTWj4BQYa8sQXmMASzBBbCVXHCjUm8HYIP5r56ALXHIbQZXccsPJP21PHNWKtv5TUfJq3qV51c3YDPM7HOrScGhDDWkpC799NjsI6eSl0eO4KbzLLZ7eS8srCwg8sWrz6rT39CSu249AzLhB37x9RG6EbvDiA9WMy2qhCy5OLr6aj1IeZubV3gTVRozTtZ7PupgbOTqeXJev0GLpZGUBVTzhdyqdVm8oHObYWcVYiqaHKQ2tChEnED0cm21FKvkQpGLEI0Q7LYPuALRmyZREZ27VKoiG8nh3zz0mA6va1MwfldNY1hgii3fPcR8Ndlj43OmhsaiZ31yvi07DPf234ltDiffr9edAyYM22ljczNmOWDh2XdgnSaZpgDpyyh35OZ0WS2vMMfstKNMP9gfF9w78gHETvq1gLEIQBEm4NCA471STfuoc9UDDT4xXFyZouBQqNRf2ulzTqpi4V2rYkSMr2,ce458b3af119e69c,1bc58f452a9fd4b6 -du6blOwWtNMUgYeImWYjFfPrdsFbAJJWKvoo56dIMP2Nl8w9L544vppr0QkjRSYcktjhIT3OtTwvOGUNYnwbkhAMP3qPEhGhpSHhjeGgg95p2mA4OOucoZZL2sNXr,66cf0fee48f1cc8c,2b8d368b40a62c31 -0ucp1mmEoz5wuLB4eLvz863a9J8joga6sXMfsJpoTOOmQcDiH9CbjmMWNrqD452kJpayoYwCJG5eEloFUNSf26z2R7eqYduu90qliYJ8mrYDafoWQhw99ppHclmdBFPcEcH9ZdFYPSuMvUlIlkaUcM5lR80Wg7MRl1Ao94GNtu2OkxFFVTfz4uquXQallDkcu1OiuRlGSry4UEoq65d2jagRdiyROVaRetDWV9W1FIErPTLGu5BCOJze3ZrPJcFZakwAiBV3ZaSAFZxktcWNUuyEDv4USMI17wzBOKgop3U9IvelT0vtFYp4zyBFMG4liKcnvBfgy9ePbabFCHE2KvDnFT4c2IBJxDFtbMtOk0P9rlYeMTdPizk9xqbgUhffGbaOTFfhu,2ff2e09404410431,f7ee28fe8bf73159 -lpJfSZYuEj6Doz3Tw4dvCqpaUQCD6WahESketMmB1PegOtQiSpg7WFmvjOsBthG57iXTz9vRg4CJbbag0rG918jcF8oiCpke73Gg1ZBnsuAOMrNkH3,40b159f4f6e80b8f,a82aeb3766b4a95c -ReRC3Pt9ZR00qBP9ponogMeic44HBB8DGjaztnepHkWGahssguNhxrZhoYJE6uTQzf3Py7xGbJnSXgFr8WPB7dvbrhNbdHwdiCZ7BLhgyfpMQdCAGhtRhTGcDJJI9tm0G5o9RtYmnzCi51KWJYsfDlsqvH9Ojci4Qe1gqYxxnW8pxXBmFTuNp7is3JQRWRrCg8aGc5LNhfGDgWy8uaDhAvbmZbsPvfJPUtzahdQDoI6bx17ziri9WPuWPBPmdx64SYUJAVSSKR1stlk8Ep2hVQ659JzliToWHWzzeSqKjaXNMQfzGAZzFfrI2QBtad1ILv2rvqpzThow81mtQoq9X5tROlYY8XEVQ6oOCoAFti0hoxaSsuv079YK5K0OMweUvKHIY5LDfEP0JIr8hi99uUoDFx7M6S49wmEBhoXGqtWwwDBE8MboDRqvuiIhyj7T9cxGqoDt6DsyTR4UcIsS1Y2YrGFejMnxGbNL4w8cloujUJfXT9lkp07gnOphRmpuH6DfJ0atQfjVBgzH2AfWq9o2KRif4W4AKvvk5jgd9kWET7K4yiQKhZ07jwv8zoH5hklW927JL1IpKHrXrbeKIW23GhVw5TbZBtIG8EkqO6qU78mA3vSJYsIJD0TrvJChig6P68nIqEh9zUjO5OJGcLzvuM4PxR9bGT68K631UDIp7SjtcjGHm6rgXsRTAzKy2bPssng4dLDZZukKrriEm4hMYNV2G58Ic8UGLUa4uaQcjUKBHRPtcJQMQClYrxLeyMShP6jySbmx4wUpnLyZoCwMqeq2xzh2uVJfW9YGfLVI7jEwRGcWBMrxNAOrm,5885982eb1e2d0c8,568a9b53b34916d -qE3GnhxN52l42AeegZhwSSMpC5OG0DTrZQqcYrFIsJgQyf7JCS2yeBq3y07gjec1JDfMxRzNcLtuwBtXMNfRqh0gS0IHSMirHKwZz9GrmDctdebbcuXYwF5Yh2BWcoszgNJwAtAeesR57sgsewwHqIeD2LBwVBc8pOK14TuTHDSpfqEbhAgcsTxuZ6rlSjTadNU3rqfLYvuvRhSxHcoxRWtu0wMs1UmZG4jlxNgAkCKcuv2yhcd3ydeb75PRnYC7UOT,85d1082aca8865ee,e5afef5cb3aa93b2 -VodqBFdwHage25gK9kYVLxjCl57XwuewBRhLg0Ztzt0MeoXZhDFMoRoq9jHZL25SWAW4WIhkgT0M6Zj0LPT4HEFWUT60OtZAs2XwEqwWAbhpCOE7VCBZuJjFOvZY9p6DLwQczTYumLBLijneqB9BU6smrHuHyroFfrwOwKkeQDX2eXAUlaE0iGOrfEDbh4U0LoEuRX,1e41962dc78b937,eb2501084eec769c -c90usbemY2VheLnlyPAWnv58KfhqcsY1lrRlf0l9vmnxD7Wya1baH3h0skrPnqcmPJ7u2QqealwSXKTF9MLyr3DebdyWnOPhH8d6BthkHwUM4uxA8Z5fgu24snFO69J1iQjVuPXEchvdapt1OTq9MWa1T0FQJdmen5DsufjPuW7WPPS9g7fH6hUWs5YmGSySwuP80bjmLXFvUQ16t7PtKPJeQgIFBTDWcRuryEl4VCyFehyprRwcJSVhr0fCwrFebQ0FCipLWoHPycpFEcJmx5GterdOFjY09zEZko3YarG4ZilHIemQ7ovOZPieUSayibSbqClUs9sp8xhXwqLpHXWk2L1N6hEq0GOl7GTyLjK0VKnA65tRHR2ve2QQW1UVNtfFugXEbl2t1aN3sG4Apjrq6ck3Z6kQxG3TeV906MIl9kjgL34eapaiJ69gNGWNXd9FAfdnyhoVskJw7CmA0pgFPfDhqpex9HkFM62wxDAb0bdwnvtGmTrjXUA75TqfcMOyqH1KJx9EUt2pNGv3jCiDDpp4,448b777576fa3cdb,16ec9dd16477550 -hGoVjjV8xPZcvOZ5bQR5guM2JyqDZVvtBS7kimPLB25nrKbNQ2uhTXeuyqUUsP1Oa6WmqhvVZb1YHSMD35zk8iOdcAjzkcAovbThqI2V3wegHd8l71UhBYlo8GTnxCSjHCqtdZ49Bdx7GkUfo772oq0mIkNQ9FJsbsTm8qu0aaJ8Mcj9muxSr9fxdyEjAzAX0qGH59sCREwQIhNcXWklgQ6t4g6Ow65enFkjCrSu0pFtdWtjYEIpftjarPAolYO4H0OAqQuRNuUsIULwn1Wj7Ix8467VMadlBJ9gmfwBAhdGzthARg2LfTB6SsA76W5PbuJHjusc04VYq2zeSBGXq9Q305JFWANumga3Pv5vP8DH0jq4BdAbRkXKygc3EdpL4M0sVdIJ7haBfC6k5pwes1oHip1dIgcxKIuW89T8kO1b46NzSWoQsXL18b6DqStEx4gMZ8kjT2H0fqSYGWxZlZtVKO693XRwz36aBnM3yqWAaIm9Xs0nr4XILuVTj7lTrWhcmaoUfqX9plbzqQIDsXWokQiKkYNitjepan7QdIjxFQPLtOBJbigitD,962b403bd191978f,1cfabcfd7e0977f1 -UIdvzeO7FOscPcHFk4BBE1V7KUaYbBBab5fYCjCIsgMmbVKKjMkn4RimTqIwHhRfzKhckZnlrnFmBOJWjv2UqbbYojp69EB163HWKZ5eaGIO3xh4Q5DlZ54YnDBtHglXriW1k6GtaWB9mBeY30hdjogJPVjqhVuifDecW4RpWsO6g6KKnmEb3nwzztsE9F33bIJWTfO97qKstLgDpI2VBlJNjWTQlONpenA6J8tXJJS4DuM8VuctdUotqI8bx1iWmWXpxv3SdHtxxRZ5l4UwuQ4phU6hPFI0FSI6wVWIbSath0M3VqF5bxf8SZA1k6XLE9w6TrgLmYSQnOBL4xPLrKa8EsRxgpr1m5qSrZ2x7WZfy7buYYGU7thmcyJW0fDeln9WrmY7OAPpQROUaOSWGCmGDhnbUfSUW74asONir10Y3jISCsMlGW6JiePxMCMplQrODMTciCAkwrK2TsQxenP8EnmSNaAoPSj04QIzZXYxrnJTzp5cliVoCflfwCelc8splTqOCtBpQMKEDZ1cCYov1ntCBiMlmtqDwtpCHRe5rJDUD0d3yIu09VDu0I9OttEyLAEK9Rch0L2qkTbVj2WEP86R0UGPqSgon1QXdNtdedzYXabQNvzLlYSIKkIYSWJeSZcn4FayzygMYXcqmx6E9RvStliFuRjO9hm1VjEOQiG8mvJWy879YEbSwDdH1y6EwfC30MTyEMQGyQH4F4LqQv2B853HUMBspDPnCmEL1lhTltvTgLoztMWTw4rIvkb7GgEIe4CknonVIbBNvtp,a4d444581ca164ce,c28c39dfd758e198 -5jIMHUzAj1gmxc5q7ZssnchFF1tIl9UUSvb60PPHRB1QjA81Fe4T3Jhe9hHpDs8s0n7L342WWa3Q1fuirZbd0Si9Aa2cqCdfJXVSNoU3um0OQJGqCrNFT0EJSbciMm71UtkhQxCZXCPn2Flzz8SM43ZPerf0BBVMoQcJrcjVUU5oUGAX3KMBKSmMnyhcl24ymeTgdI8YK2e6VLULjYgAjdw1FGtIsXxTQLhOhpYdIFWtoYnBmoiZvdwZFtD8qKwUd7VaS4c1KWuW7ZL4Tsn5UFhyHq04I2aX9dVlyU5Qke2QuHqaNDCGSk42nZRA4AyC6JhI6Ktj3mzooRCRSi8laiCdv8f5LilnTRRWh9Kb6EMfQ3rXJSqHUZvWm2NKGM7mSO2Pb2iWVaHW89R9rtJ7CoE8DWfact0hQ8dBBuXuA3pYRvkqswVPTVcKS4JULuA4R1TXwTmDNsURRDzzTNciTKm510sHaLATyaOfxuBRRgTCARF5ZsOQXNGMMs309XDZAtUm,f6f51fc1eb2a7ce9,ff58c80676c97be -r6i1gSuxmIp2XizIkjlr9rdMqA2yXNx2GsaF4htORbSgNKFQnAAdj3bhqEyUVc6ZeD8oNn9Ha6VsGtkyp2qphoZBsjj3vukTSps6UJsitSFQuY5LyZWoYB1i2Ac3ZhMwtB4xkrF59g5JfrxxJf92oXFI8KaYyU4Hfy30wFBcnCWJ9I0bZ7nvJQTKl0idFpv68B6hLjTRy41lnfpuy4gSIl7iFXCUmxVHZBoayNBZJe04N7Iep2G8myqE8qaLQrjy2cWs0qiCcdHsADmtxDNFFriPwRbx7yzGBDupay5Kkr6uti8ZhXiRWxWi4a3gedB7sNwWp0FZ6GDOC1NJP0c1yYFXF7JEmDIw0FRkgDIjmpH7850xI9EXCPUJDJMeEP4hGaTbzPNEZ7Do118KVOcv3QVqQpT49s8gj1s9l8QKkmDWZajOCdeezWEy7D41ahLe2PNj39FiMakOrHpP5w77rGASrjbax0zxXFrK5cN6P2AXag6c5ZbngRaABVj4Drzi2HFSk7MYLiXlegxR0sPzDyDxq4UzYCGQiHjnajsKdbIvKlIih2NdLyTTJloqnqQTWWQMDJ900ksGaDjQPj3pV7qhCxpMTf1cGRUWXjWMKpHb54G4C1z0sCfgHuFzxMAPgm48fPfEqOyczMKtgABzYAnCgctgQXsjmWVssRQ8VAXRhWyYL2u1Z90boCGw4DjLc2fcwsdNhSahgqrWFHOz1wFdOzuA2NeW2z8ew6n2VpPstCmWry9DiqGRy9FGy4qua6RarmkOYfJ1mm2TTIQkmfeW1lsQds09viWSqq54VsS9WmRMl3oTGlSzHHzsULoAbCT04FDk69p8fnV,aa81fe22110cb3eb,4bf093342281a397 -veH6KWAUU8dbvDrZaABUlWeUpHKW5vV5mTOSftl3L4myBz0q3j2bRcYK3Iu96RLZRc8ti5su1w4BWzo20WMGtba0FeXKBhZzNCfnDCTTgbTdeyhVFLv1i0PHnYSjYWqsM10PsWGxwFSlAiGQMuVMYeYtvGGnV5EL2o8amtIfgVZ6JTe6QkJ0VGmcPCqVrgNd49JQsr9zGz8IW6FBkqtbSSP8vfQdbxvihvVOrbzvTmi7VOzDKOlf5WXkNQWxKP53MI7GEAhsJWavx4USWNdrOg3q0E4p,6885e2e8c8a31d27,e2c65572199c191b -fTm9ABqvtFtLlROvi2dlR0OilKsfqMGM2z0tb2PD9ZVmdeJJeNTttK7JShHRp3as6Ap37HE96MHim1X5kKkMnSXFp2wBgkZ55sgTkn5sJQzQYINMz2m7onIkI3EzzopTCeDvtR5n4z62cO2bNF0bBdzneWKgIaBsyXiNLK2V8w3QreQPOfw8uNLSL3AqxStLENnMVORC6lpKJhP6F3F0JElEgSA,2822f2062f174578,ac7d2c076990ff22 -fcfdmd0IC8HQDCCwuol9wMZOgtwI3YcAzNJXjCt5USbDeSRRrbDQ9F3tMS,71883f9b92db501d,f9ca43b34aa75f65 -czdLlObHkbJpJ8bvKPOzTlo4bIJkkFB8PUI6AEV9BdESqR4bnxSXL4r1D568nhHjHj1ARFL6oaOjkimBheIhWnH8sRwz1Kk7b8HmjdtppeGZ1aR2C0HwbLiiETJr86w6nkbYSu6UBlMJfiovZSMk8bRCA6mTfL2StX8ePwDuD2kPVQ0xLIpIkJQw6dWYzOcO3bBGrr3ejZdZCiNktQ8JlcufqaoMyrdtZcyNIPaaLFx24RzJr7wIvDCfVkWbVVJbFoCfBYKShGehLmPyskgU8p2j3FcMbtVMwGoCg9lOxLtmlGvOxiQRzmCYOScHqoP1ckil44qVjAddroCtmINQISfdhPVwcnEb01OiIROELUoLZ8mzseFqaicrsj91d1cKOeLCn2fMIV9Q,2d39e86ee65aa0bf,57c31881ddcd5e4b -Q783vr2rvjJ5ZWeGlPSREBaXdE,57fd4dd50a353ee3,ab2c5fd9a7e98ea6 -CuV17UMrqVDCdmHLoLWQPuwKFvTuXuWgdiL5O2ZsEwrBleoIxO2Ci7ngbK6hN7Y5Y7PoKPLYBmu4fqVtdVzCe8An0jtuC8WFfQvYnXnq6eWa11vJzD1qdmWbMSJXTp2zJgoVcNTVJgviJirEvACghRUeRSOM5KzzEz7yseMOSSapwKKeVBwpCtB6tl9RPwhAkwZIFkjdpeF3YA214AbTH0M1icgDwl5XhE0yZnMQuMJLjiTnn9d30xwPh5wj74zVgoXvjC4pjAlg4bXtiaPT2ugLy9LEuhKu8DVzcGFxJmRaT7VXlSqU7Co1rMY4ZAtRoG46z4zhRwEClnISKE6jmwDcsNCujufgfdQbKR7zNs4AGh5kHP4fP9Dadb74RTHY3cLLewtndQImhj1wuCwpc5sUQ7WZGtHqB7VE1rLCRnFEU8EYXc6QZ8PCe0P4fgEUDPhKQrZOX6vKFfd5qTpMKV3xv8D0N985VLsuJifnz3ayRjMr4NYiijWla0FlJqHEbHqFKVgz9GTl8p9jHPVKZ9fCLVtxLc2Gvp7hTPfI6h3OJgeHdFHWGf0vsta2ahJxKZswMWxzNzn5C6uiLJzArDIecnlRE2su0SesTzJ6hlU0Gf0Pat8X2AtGaKYe3H7IZ5gqMo10QjvWNWqeMNDBP9vZYilAGB9x7WLR1kUmV316Ri7gy5Iyg1Y9DvQZwSjvhfFOpkHYTNyvva2L8B59GC1cD3v1VTsu7eQNRS0Cl58tHCjj25Ta1GNk8vqEeyTIwK7FFf6oW4xNyTzcp34GyCWfGUoprSAdFiw1vsBy1tSJ1oc84gmdNGPHIGkIYvySU50K6ELtFEHvFkkqe1MpjAcSSn25PxyUL,1ac4366f58fb0d96,b319d79be1adff3a -s8JEmzo9OB6QQNB6qEJk4OEDZaXT2LQlpcw1WNELc9e2IDbm7fUrnqjPyxRp0pTtESDc7nsiAMlRwyFuhJOXDqv0i9WpftEKLFXNGueuYKB2TTYI0fpaGyzRqg8FhotllUzNM5eqGyKIAxBuCdJ6Xdzp0Cmjin64KQXIANx0k4dCZMphP2FyRHfZDqCH0MhjuP1178lPWaEEGwAI7aYwMiDumUWXTIM2e28TaD7i4T2KmDqPWKEOL9J7skRk8ytfjC9Hffe4U8pw5rkvFXepuUlXgjQqaqrKQshaojiFxji8CaAXqw38EdKVPnbBximq3SC9x7o0oDWF5KG1KvJ0JLn9GfyMFwELu6BueusDbtnhJ5aVJmNYVY5bHBIbO60cKKFagGDRnMnvs7WgG9SvmLH5jvMMEx21Q1U0X9rgJiukDGLwqFP2N1PDXkihbrkj0Uf59XnvFGLxmvDiGdNpHj2BkHQvA4YCCdsNH7XceTrxPS8NaFhNY6onehNiT0sIvGlhF9sLq48KITwIEWEVTSvLu8eK347b9htdSVnrrKDO2v7BQyHEz7rBHNffJQZ7IbYXdKkjQAWSJNXSp8fuGBBvVdbeV9UW27tiQbd67n8JXhnnWNdhIUBJuuAel8h2dlGUB0HFw62YgA2rQhBSMA1DxleHfw4IZup,abce905e5b63f2f2,c08f5a10d81f68fb -i7o98rTQ2KjRtRTJGivaJZY23RsZbdgqKA2RFIrAHVO274y4FU3iskjJKvxMFw59Qpm7RpW0qsQQtrE5L0W91jvbizsJD3y3lBcCpz9ovQ7UZahiY8HBrfYnaLbibWsIwc3deXzhWJRLGjw7jTLGbw6UU9V9eWNXkr9oTyujUgfz9cz2sPJrnKS2sWDHOPytDW9Zfi3FyMDOSCJ2Lf9f7Rm4J9HgZreyk9loNGVymNucZ6FE5OS4741rNGaLv8GAczgV6W2WqAACjJyMLSBmp1QmuFw2W3deMz6CDQiybskRMx1tPgT73cYXqb0uflOZq4PaqcaJb5UaC1TCp2CZzHUVrS0lv1FzN9HLSkwbwnZtfgjgvB3dSHCF8iQXtWTcDHZToXwUFwaGOCo23PuYi5NmgcWyFV0cgXZkXLRPIb0S2NDQSBcfjk60qDdL0z6iFY5GNM93RZ1t7xhplWkCB78EOqkfWsSU4j94Gtce9FsG7YzYPa2Rj1YDv5kZB4WeoRobUmFacZ6wOIQwoRGzKZMFWsPM6GBGpxd7qWEE4ITzlwcXyjRugLS6QiwFOQQcNIyewtdxgrBxOgqe38B7hx7vjR3xtHGm0U6oQFU8iiWcJRhlZwZcCbENV4pK6TvtTwCCTLpl06SOIX3lvdPGsfNyg0LagwdjDpnSq5tOiAlVr0cWjJU2ic2hdUop7i3QxdpXKLMBXs6EIM7j6l1Vm3Cmc6nhAvhLh02wUT50tHSYaRMQh5faBeHbMlbrWM5tHTFey96ppTeNZcszCJqKAwJicgRR93YfAYBAo0Er9LI8bJd3qoQd6eSPltmkVV4RqF2JVfdLcMb1nI5xGpQJdmWByu7jk2W5SJ8YxUQQGBzJDxwSpie1VxDTDOQ4lNYZpf7YTEpDdBmAsz9uRWSuNZty6SF8L8xlaa5j95SlH675DxHoKJ3aSU6,c4a2353dd8cef6b7,18c9d9c60761bb05 -AQIn4bJJwuZtLmafgXJJr99FFvf7dJTAB6QrQUIiwBzzkQ9gDMcGe043UbxGoA4IUsF2iMo34JLtGTA62PCBxMqrKUZEi446lQZGHSTqH7Rj9VizqK1atm5UmRezWfcBdLGBQZMeM623rm4H1PNooLAtV5xOfuqbc5fuiqbKbDURyVzNGf5h8wTuLXZhOILvwcw7jKgyo7FUthIWcJ4TtyDcSe3hmVrqk9OfX7sjygmxA1DRJg2Tt4qCEW41HUUYSse47hnnM4IH0a8ehQs5i1s3wrYoQ9xHigt3sq8MNZrZxgQHUygd3jDz0hyptRjYrZGnRgb03IdogkqgXDy9cHF19ukpcD0A5LxAHGuNCrCacbkVGAMsXZz4TUh6UAjF0hxQY3cgqLnQUdyhybDGuHsFE614VyjoFMHItnrTHfGYfRktNhA83JlRNsoUIF2TwNIA4Xm9duHnpVXdz0vJNHmWFh07OozyhqD0Qaev1WnZJFLUgpqJz1PezMbDyZz8KOTZEZ8C0jWzHMay74GCO7YhFTxyNX3yKfTvdMB,456c750d0ff7d995,5b9345e5b9b60c3a -yYR3m29HX2V0QYnZNQ7GiJ14mYfoizS0kragvTvDkdR5EEbC4sGUU8FgxefItyqzzkenJXvFRt0kJlY2H5xN15hXmynEpIvcMAxma38VdlDexZI72abjLkjMuWq6ui0reOoD74E8K0k58rEKtIaLez93XqemIFfgY2t8spFdHyNvhXhFVABdXYAKVS5AnRSRT8IXzQ0T8IGrnxMr9U7oyFjZjPBlOMXgXQk2q1zzqcMRuMPdbVx9UuWls0DD6VOFurYpQ27DmR3H8MmkSTLxMqedvk4MRbmwHpBEzm5aNOV2CaLVLzNENhA8zuq6MQVCEFWPf2N1U6i,be8b9706109b8d8e,7a33b61584cd958e -lYArqAIQYtAYSge6jTKl4XTxaDtXj4FocdSXP8KqDk1D86z5rMvpTuesYsH3zO0cbYmvTn9EOfWzq7NjxaRLAwe4P45knQ5s1FmNcEgj7LbqM7eOaAUkGkZjISXW4vlYgslXrZsqORYzi2xG1eXpkbxZGEtZnoGQ1NaER9v2gRP8dxpEsSsG56SNWbqzxnbLd9S8RsLTkdfMt7RKhoaH9sEErxDo4QIvknRNH6tnUe3QtRvyIGxDTzjiXInEl1MSZdVJAeKmZn7zaFvjVj371nxfpDKRYgkifw6KCMZMwEllHOHaTykCh319rHjlJtLsyTYcI7waY5AZQgCipBlioirHUuvb7roClEIiSWAQbWs3FS0JQr6fEPsTxgUc9W7JPRv65S6MQBzI6RbN9Twl64zoSNmQ2ek1sclhIvnOPYQZp7Ycqf88M07jDqJxNvjfqEuigz7KQFRA0zQUsQO9cMiPmQEABCjpoGFgeECYpo6xcvBkYNPAa5yhGO9VhCOJUkshIkecHeDKXsVGznCVjbRBT8MUQsRlZfXkrWmkrI,9ff02d371f385893,cc062e7b4cc25bb8 -WziNdi0bsbci0OOhBbjpI5KUQcOckA31uPTtIgEje99Bj6u9rnQLSCrFjQ1vLV1Sowc6qpV8fvfiFeRmStXhO3llljDMVrsd9waXqELC9HtenGYZZrLwHHw1ptvHs7i2jX3kKQOw05x1QoisE0eoXXkYLrrFaCxIZyFZCFzA4NoYmF8UZb02lRzS5aTyBz4Xk9LOZ1Qn8x76ZKWZUwQrlK3D1TrP9R1r8LKYG83XnzKzCFltnNHd6dGZGEtBQZFzBMJNRrigACbQP3xjd7LbcHqTYvSqZI1zRdMEgwtWKuuzsr1PNgoiAhumncmRRAMPeG0BEqgwj2vRfjjTVgUTeW1CxYb0J12OjNWid9967iJpi44hvZdqPNiMRs1RAe18hbitTEyz7JT83HBlEv7udY1KRzJL3qNb7jLgLKadKwWVQeBc0fTohW5BOQh1whTqOsC8wQDQaGTJQwn97AtVlNro7wJNPZ9WHQyBOLjAUQEQOvg0Ja47bTiSnDFDd7eAOpiDyq2vsqrQWRcYuVxBgxw3stM4t6HMogNW2kuHnZIHXG09gPzUGvcvquyPWwBYpXHFSbrWbZB3aIRxa3SmPwfpOkb2tWcHZmt9hto3HIzPjR883ntvkUHVqijRJGSE2Kj9UfZlZzTryDlRi1y1kARx23oJGuR6T8CgCpJR2q8Okau8TMqJPufR8wHnLlnrtHjZzPP8QVpOEjksURkicvwxC8dqOFsYvHVq7ARBibvW8ZOc4X1E70EV1fySYPJEk26zHyKVMIJvE1bJ5d7g8LoZM7X0eHqrh51gSBfjzNp1twVsXKa8usPy3pvKWMXCwbeOur9st3J6mqVGOFPQdGOlN0Za4WPmNgpeK0m7Xl63XI2Y9mv1STTlhgD2y6jiWTljnGZwUs97o8KdMQNlhk1fhEMYSHxqpPLWPqO4CktlSyxAeu7cW9AUBhhOE9VEd7T1INi,729e76d021448526,91f723ddc1eb6c3c -DErzvQnhXzh5OYJPJOHkVhT3txumjttkPE2uMwPUaqCg1tqVChdOU8xuhjPQXbrebwzNQWNMP6ZAO67iGBNmiUkS2koYcBUBzpk7eOXBq8nPXKQhESYR22kEabWsVXJXTWLLWepVBbKu2dhQd058OgKyMD9sBJOz6ZYVCEjkvA6jVvOo3kKH7C2jZas5U9HuGJep8x3inmWiPsdCMenKZ2pOAOlrGDHb9w04WMjdUVrLAPEIyvGg5ljsKVOwaIm8cUTWZEFX9Trr6rcxtZKQhHSF0S1lzxxSyPZPGM0k1o7E1vGRxkFkNXVDPSa7YSijSV17Rjr1tTnuIXClozMZjIXIiy6u3usZArlP0wEPZ9uhjtVXKk1gzUaxutcCvQXPqgRm62lS1jlSrOsY6Ou2OLczqorjH85ayMH5kjKyWYuavymD66spcAdX92HtqWtN6Twedl5p9ElzHmgAxABub01JvU4IaFALGNVdjP0Uiru7LXxY8QSAB0KqQGIQaMAugfqEuE1LFDh3yrmTaNLsalIfdtgfOkgBTzOLkJGteWrjx85ymhUKvLtakgnlVvt5LDDp4evsxrX2SyMW4TlE2WJS1NPexqolEwk6QJUs9jHU3UrZoCSKVUqsez3c4GEAkYttoXVmFLpCNsCzY3jWeiZpTP3RiXLWkdTLsDU650PQFoZ4WxgSX6HNLVnDJyJhTB0ltUu4kI9uB5UBBMtUZ3bTM28XdcaZQqL4dUTVAYtzgoG3K1JO2ne2XYx0uMPA8NWmp8ehcgfmRWiMMWyPtnsUnebrrRfr7WW9nhSDnMYq5HqWCGNb5lPZ1lSNtcu57XZK8eS5uPlmPJe4lLe6fw510mNxQCmXzchv0hZgKgTGyan9VGbctVHAnXmtIbUAkndluduY4t5cskRVMgVsfrd4UvHuVtsEEdYftzgC8,4f967213fb1f6f02,c83ea5bb27ea015e -glMPFcO85vEcPp4YkFZ8AqMOJ0fgS5Vi7SD3L9lxscnwINLpJ5qmFMVuZvrXyjS2i9b5xzlb5EGfBcT6A5LvPPRPkx0SlUttLJWbYkEFZ2MZbDS9yHmIoUD6bws6j7iZ4gIozsiuSa5FUsT8P7VvkSadVq,ab6d3be8d09fec3,becab31686bfb7da -YE01EUWzH7QBciowW0qJ65h76ILch8gfD2NlrNm0WeI0wahJHOZBIKKCi7IukoMOaeID2x2nUzmn9EKIj50oBArZeYan3SJpAjf9H2WDFtWOo5QR2PqXNqoJx1EcbsNTHIfweCYEgNaZ7o6vyRwnIxLFgEsliQi9G6yV63KZzKX9ufzVd5LPTaOURsfggi1H6NdYyYvzT3NfocbZGZgiIziNGSovdweCQKJeEcVGfYEm3mIJRKJpbDVglGJzoVAKnJGa8rvBhW7jmUoZlPLn8cXWAvx26dZZ213tENLxdo275lhJ2sUO4jUDX2EHdiqQ18sDoVNrn920bDpk5rPCh81MEMMnaYu07qxsr6m1GaEdXHswfleM9Izvn7eGBAOMMEf4PDvkxHUAkhRUrNhW1AAhfhcBvdTnQlWAHKQVOVZy6XvBgAugTNchXya196O7qVG3UxfQU4n21sbuRpsWf89nCuiuYnGm3bXKoh8i7cw9ux6CpRQ1O5kUmeHM9S67wPF1Oi8j6mxZnWfqsFEK4OD5CdtV1Tiyg9j5vGwU38pWxM3SukeSseMPhzaGtnrJD2W6xZIEpRAfszGErSQZKtOg00tDXkVdGfcPgza9oKd5zhNEGtnBTIo6Hz99qpDKJUdT6QfPkA0RI0RMPkjYWcQPJWtJ4vsXsvFL2i6261bi44CtxFQ0HpAlaM93aO2KLbyuyP8VdjGESMKIOKnefjZiZ32vnY9W5UNo1MTiLkXIMPQIjg9Q2HPZhbpYWBA06V3wDbZ7gHr3DR1MnHhzmE3bp9ltsIc3hOObIV7SP8YrMLQeeF80UDF13nM8ATfjh5qor9SF69h76YEvJCh4s6ORDYgT3T1mrdKU19BTCAXjmTj3sySQm5mhR2dCm4KPPXIJqpaHZcU6nu4IOJxiU3oQysThD2P9vxAC0YcLaTyhLICCScRfbUe,7c8edf21f6983444,ee3dbea000d336c2 -NsT4HGTeE863qiIHeg3P1IzyLwfbTHb5tSnfP97TJTL2KWvp8XEXxDAkDP9pqwCZ0L4rvxS1mBfDlKwQqyQKkvk4HsUcfzPDKfUd33qEDPO5UU50K2Uynk2ZWoISDinbpC6ykM597HjxOkDUBMndmGj7DNpdwaW637boq67BagukQhP2wtZJmMySeerOSYY6IcTTsmdZT2byqoajcB4PIaSeUaU1oaQ5GqoEUgjuGTEVbrLBxNl09a63L6BBtrC48OYev15b3624JkPYPvKwLWLhfhApXEkhtnHQgm2nlCAf2pu7Edt5giU09qDm8paPDxFc5WGCIxcLFFqTwhOkyn0gp3Em4hc9CnHMx2X0D4IktKIJKsZGeaIyKTDy9BcK4Ieha0ioVB5dGrfYwrVnyOpHbBj6KBEdW6R48TelQJZQm8JkzdNrd9HlWMecS2LHv1dPgQqCLAXEj7mXQKd7rPaYdRubdYaCO3ENITxmLhjT8niCwMvlNEBu2sfYHwWWrqJ46suCwvAAYks2dWP2MOV5fWlHrr4AiOsah9tuCOZawP5rlKlhT0bxhZzRWC6mHxQDUsdmmdpKf2UIDdVNAX8FX5iVRJtg85APMjNRANncQX62JKVhIeNvwFOFHnQtW3spFs8eu7MfBPtImLgaZTJso1RUZflWmaIkQyEvSjHo7nHtwopRD7D5vNOLS9NxVXa2G1u6NzyrLC1hqFoTkcs8lzkiUYrZ,4c8cb89ff7465c6,7d821189d4a8ab50 -IFY3iaDXybLWeMCs0HyhnATTQmRzvnXgHYWfaqOWXz2e41BD3zvjf7TYF68ej0VpEIFkpA3nvU1kaMdX0pwzlVh9eTq8XuTMUi7lhTkEeotoZ1dvoTNft8Oa3ty47CrHeYSJAaitWdW5QqLgf3elQUblfPDmCXEYgZaChEdHYsCK7sN2waKhg9pTTUpuLzexG4XkNkwU69tuQDlaDNqtIzzxb5IvDM6nlqkUUJLoDcnkqq1IM34ozB9JHD8euJAhpnZLHxm1tQhQppN8BMIDSV88t39fHGVP5gb95u0Rn1OIz2EzYaciyKqNYzl2JzvOhFmheJAwrodCE535NFlDNYlcXzKnq4zTKhochhMFlRDOtFDqrQN5O62kx98VuPgoenmtLxzE3aLMKi7k3TGcN6dt6kJsXe8zUFQxBNdu7r4njnNLqBxXwUwZnzc47xXWeHy0a93HRgVFog2sK8pHAcAGyN9K7qxFDDGL5VxQkdsrGmkrX35MkuD0281Fu55tA1knbQrKzoO7JUdgJomVSariJZ578lIGG2O7O3BwFGTWh4pzOKOllQva4W8QIERnpsvc0Fk7xxYPWRm32ue9VgvuSxcPxufsg1gpcplpz2V5EtEKTpNprHjKfShtpS6wNQvnTeAU,fcc8183501fc1b51,3e7ba833ec380ef8 -ufw21XqSsgT2vMAfcCyPTl2TMtcIBi0oqOMZNYEdcL3yamEn3b9U8w3uF3txKAYtaDJ5i4I3dc3tXOQPXhQ0lfbPs0DQr0FldNPWloP5yX4DLelUBMlmqofixbkMEPHuqcIfF3yrzvW6pk71x27Vs47vTh5zs1ySW5ZAip1Osw3cjWQ3xKD6gh34WUuutXUUL3jwWjqLflhVni5iwWaSAmImgwgH61jkrLAtP8lksbt0QkLxkG1lyv0cPekWMik934oLaXlxEF072qwR0vhbgB9tQOcnkQKXTSkLLnf8pL2sVxQ04kxiOds41qqDu8fmWlV4xaB1A5OgTYYAcl4KCMzhxD93rjVkIchWS338XrX7Klwv5x2Wk7YFfSlaBYKIzWrNyjBdbyJ999tyaVEkaXpkGjVa24CLqPloH22e9zVmiQ3dTQbWj9620TC4xtfsofuQbndD3NOB71ZRIXfZgFQYvCOzPflGLiYJclTI3ulTG0iu0GkruHnfsMP9hbVFnQPURDVGebFgdWnX7Epo9q7yVu0R3eFXBm5FIZKJPFcJjDiFDH7sUihNJac3p3Gnz7XOynEyNnmSBzwFN4S,196932fb679798de,1d474297e5cab6ae -emQMF02PiJ5zAtHUgmCv17JH5ieoSKNRd7fBYGqowLT4mmNVh07pLVkXowq8hJQMCPvEyjriRjTIr9FMrh4O5MoPSZSdaYBRQotyxA8RyyyRdChELqKj8Xz85U3l8nBP6jiOa2ljPXebILOrLuhtu8FKNbDOjMpRfYxb463GGbl6Q1TRvKK7GN9XkeEjcbIE12U3yJms2qnYGM0km6xT1FXMbE3kvFvKGiHg704N9U4fccTOKJ30pAAZqIAJbdUHWtiiXB5RhjMGKguhtAK5NYlwkKCbPGTmndFJ6gs8VWBVbXrVC06PBVRquq5MflRBlgZKuGnylvltHtZj7P85wLvsVbNZyxcqilnQnishol7doPcrUgulQKCgswxLseITDTh1wvMyMghpioR1ww3HspjiwOvBfivCOqTU1,73c1692e4425a8a1,88deeb3784835411 -CmTPFvM8ED5GduMmaqaLmKs3hMzmVHyenPCXbtvDDR7bQBOKwcKYYaqBTuQlZEZfzmEzcRxws0bl33GzqoFMzVjfKLjCEMJNwCRZoZMBzd0J9qR0NmbVY6ROZanTrmukupzB85LafK24tSLuWZ1ouiMWkWPIbbGpOQN47kdH7b9on2Qp1cb2ctNIHId7teehDmrPxY0ItliENcbSMufzowUiqapAiG7QNUAjkq1rkMOkg9xk9Smdwg0cAqqdWqakPuLqeXhcexZ7jS0QQZ6cR9OeMCzYztB99LWmL5tz8UqCXvnxTSF9elzrrHan0H6xS5DL9KaGypuEFwQqegZxrwTmU9aZ5jusK6yju8WZKcBOldpBpbjUnxhnNAZu0LayfOxPwucaCFvSaNi3zsawGVTQGYg5l3w6s6RjgRIO20PAZTkdte16YLnro9fR2OuNNrz2IeTIwU5ZZF6nmY2PkJPw1HuaZvUBVxyA5ljyH85IkIeiQKiDI4u49GJlLOEeyHAKg3u1LK2beZJ4,f34c810948880635,8aa406c7479bbfa0 -z3RyQVOfJvG9bm77aABLhoukSn1wa3skSye7YzbxcuZHVBLUDg9iVeVTZYrpXTekruzX4PIHFoPbqKcnx96e7uxZPoBXdxfT,4a92b23c649d91d0,92bddea05d56e395 -Uou0tsWrXrHF1f3xNkh6vkOfXq8wVVOgo03K6STk7dAut0KdziR7ti47Jb6P7ZwSU172e1nFEFNGsAd3eqOHefd0HvrBMFL6QztjOwxPrwVQ9THjLr4sgXRv5A8xTPAdLkTRuz0vFhTUgWTFdE4qkqHE5IdkF71PEeBcvzQ1KdiGCRlkRsZThDKBFoB2nx0ghJue2fDneK944YZ1kB6IG37zFhqZGNUsyfjKHUEcABObMdGmo9jgVOXI5EGRdWb0YRyFZ5txrWK2sK9hDSL1jAFq9UBAY1J8jQLXrVzc8M8EU2wVDAvUs90nt4KJTCdgVMsZ9zVdLAeo3RCSgURRPOizujW6aJk5SBTEJXFB9dTjZmH5vr8EysVwWPD5Q7KaCIEfq2ylRVvNyg5rXp64Ymi9giCH8BFfnabwLDYHdCCy9k8BbuexubAPj6Xl6jvxBS3AAtMboviclu6fzp78VtPGdsPxDKmYbwWhv71TEEKTexvZfLHHqLWr5kOU00qDiomtE3Kq5OPiuq2hFUoeIUCs49jBQNK7p2C9SPhqCSHUrObVYRA0YBz0e2xSUKE0Ikj7h83JBhzioA6cJPNngL24MB7wUsLCW9u5AEp47HRd8rYCwAdJJCzgiddh6IdD19uYLop047vSuwm9ONrYyM9FJyVCrw0VTBmnST7sQ2OQavgEUj42XvzQyYW0XmLp3ouBd5e3HQlUAtcB2GDzQOoAi,75ffa98556cc644b,fa520de5fc2b8179 -29dq98BjQZs2MVxNdVM6UAjzPrfBSBiRTHEP6EESZslIN7b8XDxkA8yYLUkC3ACPRVWARGcCHL5aKHqStbaK07ob9W2lxO1XlzHuwsxauLnDdOrBvRG0xhoZn5aEnt3JsRPj2uJkuTYq,4eaa9fc7c8eff6bd,b5e6c7456606b2f2 -ohd8gcljledXGQYK8Ef4zN73WfZbYsxk2WxNOjUfJ4SvUMGCHcpRxTLaq2kOIvmHjkSxDRCS7d0u7jIq9bRmEAGcOHLWlky8LEVeidk8AkcMtJgZTeiWuCr9VXeZkU7dTfqypjx9rQ0ImDF231dF1eSr7tc3GY0UsKunHEo2NV1slFxY3l5VXXh8DOAx8q60F2dpQ0Q3JUENv6yJNxXML7EktCYjeT2JIIe3Jnsqi82xOL8xHuvqYoNkvzh4OId0rm4g3HnnGWetjebyqk0zpysDp0dDeL2w1GIgcEaIGOPAB5OsP9SbnW0uSZUIygmDzDBivSGhGDqfRKXIrLfnB8mVyk4gNfoxQmOsyEyi8XXFojInDxYaEDXCrmTP4hSZFzTGE5ik0XTTCqqCR839tbB0WQ0820xWtgbyrP0EyXwIPykVlufJdRoZSbiHyD2BjhQQshFGQWnx8WpweygMmDbMlX43bkww0T9nCrRmcV0Euu9Px38vn6xuVWJo3jcW6CCMrMaiKy9nUUnQAJ5cCi85bS97xDgpL1Q3IzTuq2oHgJdwyiOAWSaXP0HkWTUVLtLp7UQdACGz8Dv4TSY0PNef4cVf70srUjYvOtwgGdo4fhwkkwzdc3o69My07PRKXixvEusMldc0KPLcB7TgzaNi2UwxX88FIyzdyf,c46dd1bd57ce931c,c3f0a29a91ffd34e -tzu5xGEHeL0Jl1uxzRqDb9viG8Lxi4ytLzfR8OAkd8Gpe4HENtqT58TIVgv8qp3IVmUyZVSsbcp5gZXYiJgQNNCiwvNyMKD5E32uZUHiEwsrzmL1QMABEyhbrFYZQZE9KwcagwMTtpB85ivt9qdN2JE0hNpp00prBqjKc4rg7d7khLMCHaoUp6xydlE8iQ5txYtmdOYoX7bwXZ5nRhB8qPYdM5g3MOhz5e8AN2JcE0YXoXcUW2A7qAGd8ZbrRJLIGKqg9TpA6AmXc9OK77bei7Y3j6nr9TmqnPRnIoEzh4y2Cp7yx0lPWd1Y5vKabDRDNg3Tj6NsBK1mlcW7CwQ9DtKCv2jSAGje5UHK1dIQIVolM6cLfeVPJ9wzHvUbAMXNRoZwRgxa7xZInzIW,ec08be9a533c858f,e6ea93df827b163f -xd7eKGweCyZy7SG0WJultfEWtORJ71ce8pGi3JfkR8vpUWzxAthU5Qj5WpmIoVwIEGwIRFjeAnB2eo1u9s4Onnz9GdQUJz8MUY26nl2HStRJN271Av0wvARazx7rfo2hrBX4PgeOicsDvS1RnqHIJpYqeAow3zuUacQTnXQWxSEY6ZJlEsTRjcYaexyQu4ykm8Mm76lcfFJQv57l9JfHJ8RtUypK6cFdcvrAjwiH1DLEhJb8RrIKRzLvWPAYWINFKjcS9gPeRyrmXiJGpG2kq55PiX3furEocFlsi6GQ08yzJFqHYNYZQT216A0dLLkqDBnIwLrwE5FwCXVhO7twbO2KL9Ovw13OWTw3vP5bBGBySLMMNclxA02pXoCIlwr6TIf3D344NizCoQyaK1CyT1miaas1VEguvd,6dac7403695171e9,294ba2b59af0bf36 -JOITwK8UTBzuTjCb24mk7erJyQoymsMdv4RAxnBbkuSrbakKqXZqKg7ZgzdaakGju1UHawaJ1dOn8GuL19Q6UJEJqadmcio3cmJ1bE3vo51QAK6m6mYXbSiWX9Ho0wTvINNW9riMyyxFSS3P7puETmdDzHqDvhZFBc50AkZWbqYsfcCJIMSExebCX29EZeHP6Hd2lr9vYnjdQlpOJ1Q3VF9FABabG7dkMg6WBwK5EH2xdyKOLitDPkctwMdaqV9bAeyPa9ktkaJwDEgj5gDq6opZ8bdcHuiOcNeinqjyotuH8ZUNwPdNwr0kkg3Ta9y0FStAvzMMutknIDxqcstziAD1xdgqLhPkJp8LJnoXgTojPwxml0fm9GTwK1HZfoBqZzPYFlCU7p0lp551m0tnP1PiZxF33DFe0lK5NYpytu77TekCt3H0ohd8TZn8K234hxx3wf60qQS3bVlUD6qMZYvsuubZt3JfD01zKEpD614F3Y4iIxySTrc7ft6ZrsXizRXR5WkJ73oiK5gGXVKxckwCmvEuTuHTHkb9aCRLy,74dc0857ecd622f5,401381421652d7f2 -r3uW64XUl1EQNk92YkSpsjUP9LqIbMBd8mITlxCIH8W4CGzJzKts0TA07d8Ttx5ORpnWOSG2ipR57SwxPl2B1zcdABerjMnBDDYcK0Z4oZJP8iBY8EBJDBGo41k786UvKH4eK8BGTrVsIv7NOtOoN4VT1bTp,e652060ba4babab1,cb5dd8c1ed0fed62 -YUM7bjuyW7jgIkS8eyaTI8tFpIlhiy81pyUj3xe9FKerXOMhane3VuCEsyf6n15DB39AnmLseBxO3jKOvD11kMF4F8CbGY3i4Ntyc1vA5tkkDdMGsEGvjHNPoPxHPfb9IevwK7IrJucZCmIleuzE1A1RotJ5Q0a9dJsahRxJlWTpGyotgddBHXnAlKaWJDEJnfsZ4tWReXkIEWi1k1H3Egks4doKwnMbaJDOjJ0bxoeofY5ioic4qgMssmP11JjzxYyW2fa3wR84UVBSObQLfXDfvpaaqRg7fEIXivY1cAxZPoBAHJX5rdVZlPUIv1QAhZi,e5e6581256bf3525,74e5c767d2f129d -npLfuYFQCK4Vj1ZoYgRivV176NRP0G4me7vVs1CXOG0OvW4UTMvyMK3JSs72eWs1emdyAMGQvYR86VuAvHxWnlVOsb2yNK3Iu66FiJuuFEv0sPhR0,a82595f3c3464791,af205669a9b5d64c -jmiDO1WpNhx4CE51moeoYtRADlfEUf9Q0DixzY6s8RDPQ5etDGJjbocRtlotYWOWb2ZbEYgRKgs8y2Y5FuovDWjalNOBVRiwF26jRdvTrCIAxyIsU7M8e10qNQmLlhaCtbqqVdEcnm9uKNvVOSoRpJPV9rhsGyshoTzeHYrxJpZKYdy3KSmsvT0EgRCcfKe2bnEr4TCoSqu46HP7Zk9kmuZtyCExPCFQP4uSpfSq1DyNrCUaAaAhdoAI5Ai0NYA3eB9lsPL1chUbFk0jeIZSCqOFgyjgQ6pjX9Tz0VzE,8809e15291e0a4a5,f820a56c44eb97dd -y4nA4K6pLkN7piMC5V9bMeDjsU6I,3046afd2f7fa6039,3636d462d6da94a6 -ii5BUpgBv3ed1XFi2XYAAmpdyC9kyEGQkW9nfJgSJsxNplv2qHTKcv2TPVGvLVGx4BSKVnzJpdhrxmd6OgJrQVEQHiZPCKKLRJ4X91tkpnTOGzFvbJoSkNDdtr66j8OivBCEb213xTw8BVukJHPlfhaNmoVIvt7Gx82XUlKE4XnZ4BukOVORfCsVR1Of01qHnFZ2BTCQIvyMsFqO0kRM7RcYx9y36XJQtYkZfHj1nhHvlUI1gccfmhpmRMurAXESUjW1T6WhGRWehvTJVuHL5X36CFYOjn9we3Vo4aVgLCcjLCuCEPzV1iZLH4XdxMrkuW47Z007xEU6el6YZmC6x122t5O267QxvEStiGkpFxv9KAClPUAl4sWUsIsChcCrBCm3ZwmDIfbX1RTbCSpakpTdSxoblQCa80mc4ZmJfqi8kKEHdwAcf5dxv5IGhFNKrxBMijGnbI8Ole5jwCiLtwvL0QC8Zg9GG6Sg6V7Y9Ln2xX6EjjrfHaOJ9ImaXGrGK27H88ZgTirxAB7UPkbqUDgenKnwovYtuA3FSezTHiJYiSPuzKDVHu0h6QjlbjCjpAXf1Dnr7nhzzHcauTBLsY71ybOAXv1xQF6I4ev1c6bwEKF9pqUYheWgU694T1MwouiGfyyxFRKWI5jMAhrQm33905ZnBt565YtbWA1ZY1xS1kzkUQp6tYPL1q2TJZ250AcRnBT4MnDrVC1cpaiUiQUNvyNEJnYyLHtMs5F0TVtGW1dshqKMhZsjxL6nwtHm8rurDGY8ViWUHdXe6Rld5h7AH8XFuSxTQEKJvHeMlrFI9SXbMfSdshJi,9cc61d8f21eb1374,c5bb0e3cd03b6d8b -yaQIGE4wRv5GXjZAf9ZcUagu3Yawc1BtHABEHj79k1Wi6p3SbejektikTj4qcX9Rf1Uq,9ed2a092ebaba1f0,2ba813b9bae75414 -c26cw8vBlWj9SOEulDTqreQJ7h9MD2X0xekMsmj1ILPcMDDTZ9fmHb25PxgCf8pIGPDXHA6Xs14o0oG7FICmNTUt85gxSKAI3QzcdoFyRGvMzd6d9GAt0UzDjoqjNMY0Bu21nxhrJZAzn9hwV0ncLf6eL2ZBzsbZat4AJFJHfqEyVnVlNKymS7ta7Uzyv5yYRL3glOj6y4GRkTWHKeRGZh8bt1ZobkWfdJygJDteO5IV7xDFKtRV0jhZQaEMFZjvksLc73M0rdbwUkfts5VfH5z4d13Ej90cLORvVYt9XoJ77ExKA0QcGAetShnR3Sey57slSop6evyNyb7cuy65PVuFEq0o2hq5QGz1VGyIZnDG2sBmZKP62jUz2OUqwVTH3jwXM8wlHOPaaHou20kbqJFDrnKFBkc6pFi3F845sE8GPxIk2mMcaUiLXYwhdKMTwurlsiWZMgO9eTMxqRiCKnHhMxEv7VJ59wWr4DLdjMeGkgIlsmkAp8YCRn4Y07H8M00v6HrQUMDkZ8AKa6yO6M4oFpiy1vAmP9BogI4FnWyR67sT9Yrx9CfrCkwbBnOYwJhZZUlEydsfFN9GjNRkJnBOEKVhtWDr2VzvPxFJpFZnZcQALYCAJ2sObmaaevQEDRoCStVLf7oiEifAsU3XYPPtizvkl7VZB4XFfiJKnwgXpPBYESOkUbPBbFIFTxxPcFtGo2iGlsOc2DFJJAY7RYkbWxbcjA5bQJSIc3rj,4795c1ce14ff6203,6592df3bf9983e0b -IOABH4nz5uAUjddcInPrZJO9xZjRXOS1g4WoFRBmKEd7QDc4zvAM7jCdGD5BDHRG7WCVfCzJrY6BHR0jIpAzT1mvd2PHbJistru0kxxqhn5wo7wdlAYY3zMQYHIVk2RNcTh9ra7oGbGIZVFCKNYhKj96OSZYocirXnf3hjnf0G2RX0tldO29IUGAmBcYefhrVvqCur2RspSDcrHCWi921B8mphjKTpReqwqQUqOUHrFftunP3hdacOwAAL7WwV61gsyhFu312VXjtpAXUibj21QIDlIPAJytbb7aFky2cqRdnjeXYxjiyyxM12dQhFw6hD9gchcEvKQP4Lgea5DUst6M5NgKD9eMArjcKZbQ4cwx8lVaLZwiGx3DBptxScE2c8WYWHFp60Q363Bf16OR4YmpJfOrW0ASDPp8V4BTIC9u9f3DnBu4iPY3laTTnMH56XIyY7Ehi9crkshplg7eEBQtUusURdGy6yBigTNtim3fFJVOSICjTNs2xLcVXYT2e6mGcbO7hRzf5H0Tndd062E7iryOQ26DTBg6gVsyOO8wZQ1hiCPLGQ6OvS9brdRNFIBRR0j1Y9VfVnaGJeieJPpOUHvHDampLTSIsCH29oVS23Pey3SGj5pDJbdVfqPo4iUXqRifywG3venJFliIN2hW8f5eZlMCEnNENumzmB8SvwMVRuoI031osPOgVBJOz5GQx9O7D0J5N1fyDbFjvWLkeMTF0Fr3al1oQuqAv28A7ILyh9lAOwM3vIRkc2U38sCwpEGKgZHHPJxsRFcuxlB7W8xYP3fD0kP0ESEFtmRVb8Vl75jIIEAlzLHbWSMQeCRJwoBNp5QytBrZr0AWkeZBH9BdKJ9ebDwpk5m9AG8HvoW6ekk3xAyevzDxzwW,62a702c37194f30c,49e10f012e40c4e9 -LGXWgYU38F2QQzMysW7GpmSOhqWntzZE2qiWiNMDQNpothqTW7wOBBhSnQsq0ofNcjYUzx5MyndI64oLV7kRAP8VS9MOr3LET7WqXotKNczUGuHSDNRz1zp3QI0CFb5Bteyt0LMCIPzdVOXw6S4AaSVzbRE8oDpIMkNWflipGvwP9fBgCIn14BpXhmIiKz2EKUPsK22Rnsx6dge2CzHlRqew3mkhtDEOuYOUAykiWGclaWrywtCYhRtwiqDmnbnUWYBX6VZozWtVGXFsYDEa2RjoyaG5BPAUveEukioTe4GRBHybFxN2yZ0erGvyP1foKYtpbs33lezJ0kf5jqwRVFEJ0UhTaJ0lXSoTSkR57zEaZQIGjLzmhFFGSLW6FXhf8CV90XFelDyc2XzxU73wl1PinoTXK2VXUbhiUe73wk1D4XvnqLxLIKOIAJfcl8D8osV9p5YyRa8VfWibzz1f4dsRBD0APoMCeV3T9ddMTZ6LSGMiePbmaTvhXwbWpSacCBF1oTJqkVVoi2FnkjoBc0mnzrb43PUU7ipewmDXBoOXB9bWKQ34k20SWlduw4mGrvXdUzApPc66Wotud3E3qZqHXFKO9nt5YyzBiY7ji8H81ISGHDRT2GVHngqXxlb47OmT71MZo8ZiXzWd7tpiSsaMJONBSqTS3lMdtkjoMiwDgl1nE2GK8utTpVNekQ66Xwu5e212V8lWsgQriQkl5woZ0JncCKAJRRMHpMuBwUUj47Hol33E8UQYKe6h1N2ATZQ3MHyH0WVNC2yQ4,8fea58c5ca5523cc,b378042d7007fbd7 -QUZXhp2qvG7Oi3pOwJNSAzmh6H0QXHF0XHYFR0Rh6HDhL9gAP9CqN1Gb2K52BTZkiLDx5sGrPhhw3TdSRdgm9sH3Su5RlVQyUTocCS0NRU3zDNB3JpejUkPZnnu4reI8NEqoZk0PUH69458Wuid7dOG8Ogf2S6fC6kfvgrFWKCq4nQ5MqAU2rAimcFT61Rp8rT3bc5OyYs2gwENyawKVRfgkW6lmTtIvKRFbHTrCQFxNeTKWu9s2H8LVI8jSRxQlhtA34f8kFYUkH5yJhQ2Uwu0Wqkn38LSYLc7wwcXzA9o4WZChbBNBw9E5tbL4SqY563SWgDN6epVyWJMeM8aZwqqnbOiGRG8IOZe62PXOL4thzSaRhNuFgm3YmCnjDLNiNAPwjVUT3gxA9RVHZF71r86lrVzylRnjqpeIikLi1Rk2wy1o9KFKxPR3Af4QQDsI69zhAJdzsLqfhByao3H7Br2DuORtNMWwaXUsU0I2nR2i1zSMEfF3KVMDVfvNJ9xMmX6ocOZCWiioNQoTYCFGdYJFImbgomv19mgHMUVHiUcDiZRhrMCr9Gaa3Xn0mZdDxSP3xRvajb2qjE6NCfsTZuH5Jn2q5gSDUdKD9rkITEu1Q1vqdbmiWe6Ofowt3L3g0M6Lcqg29wk8taBcwFiDMUvAcU8nAGlgRqtEucbBc8vFaVL1aJRDOvCYkuf6klQkzI10ss0hhhDD8E2hbF6zFaqz7QA2HcatlCjsz9DMkMX9d0KF88AcHbZRj9BhBmL8JEFecr0WMbrt0SNCKp8g3aQOkgIyXomQDENcWHnZr9x1KORDQmjySwmwKfP7nlFdkCFplD2yS9QSYHnEJaqqB6,d1e209ca9f99f504,89a16c43c0fd5428 -m7kS5fFFtFDGpk4bDZqdveNVGvtZZIcDHrJqsdhG8SKbfCiQKd33RWKa5esXq0so8UtGZMFwf0JWvqiBNmxLnEvJMmEngqmkDpMno1oa3F8Frn6NL1FBu9BMBSF15IuVUdzg9cFugt5DBwcwAA6vY4CK2vSvrPmbDnRgXlzZGTGAwv24DnKjuaBWaaeV2XYE6rSOSYgK68MWt5wmLFjMJ6VRK0cXF7teBzVSmBHrEIaWDAsVjFeLqtVzeV20vwbGPAaNiUCVLGZlxuLOwEAb6LcmVC9ZNxQXpSioxeGXqa0enlUwuyU1GY3JKS7jWQbRToV0DMfqpjeLVMxrIHMEHGE83gttx5inxBzNNW7seGoTLvrSub3QcrkqXuEysMPmWbG0TXBzMLiYdMmAb0M98iwkS15KbxTgwvMJUuD8RMI9V3ggbclOPCwzCymcMuWoj2nsspynEjempa9XFj3vJHtBahEduOaaK0Ogn2OIt3icKBNNIZvcPmKKidGVq7anYXRKalAuX3kUABH8ATkFCt3neItcRO7qLKv0GnebTRxZDuKKqxTaJXlsTzsDsPTKLtMVqRteBQn8g4VenBvmaiJkcU92rOZkSZc5pAbFOLbRTZ2VGvZrer23whyxZkHYASZRqmECKtUSJNrE2bP8ldTGNDxcCCrNa2SFu4TCrplBOV2ci0kJQEIqNJi134J7m6nomts6p13zhYns126CAJLXU13YbJoIPebiRPKwQ8jCVXj2HEVEWv2tNHClSJPJ86wapX7T4FWaaTD5pz5ymfINRgzIYlIpGdxltcUywHbUpt07UzWyRBM6ctWoO9mELCfJBZoAhNwFPUseb3GZkoZpBa2rBY3dKW1yLFXXpgUS1jCKUKWaTKR95TdJdXtHNdrAeKWrNqTlNffBKvNlrfjZ1pyPVPwzZlL9UFhe7IeOGDMU2erm14GpPQW0wTUlmmTEg1QWdYOUWf,9ba1db1a2ec0db10,9cb4ca76490e2a3a -1o12uEfyksj8MVciO1QG0ln6hwlmfZbauPOpOI62nzQjGnyyvRGT4njN5JCWep9injzmvC3ZDOWGeWOegPlBwoqvlNNCqkVMACDqb4SCaGTg2NhMNNLkT1K71eLB2Lx7llJBSRuU6YyvWUdEd6fARfqSO8BnyEU6wwJpSULOfmoputk2yfHhRNdSPYxFrM0wMAwRRmoLxZpb80P4wzlhmVCJoBxFPKGZRJUoR6yK7waddLqqqDpenID4JZPHq,34b9670c3e42bcbb,49646260cb15eeb6 -Msw4zxyRtY7DbYcFzZ08A2vleMYKCqW4b9JlPlW2O4eNPXQd0yfvSoEboSXabD3rGjnqKs2FLhfgxQcx0qOew0gXhXFrIgn5B8KZaBwrofI1s1h40uNsGYh1YTkIGFy9YbqKqX4HtciBGVxezxjYV2qd6c9hbS1CLo2MMFZeEvWf2weKur28QXxxOokJWDbcy3ymaofIwkhSTZEN9m6z9tpKJeABR1idiTcdTxOn1ojgONxLjMSUdpJP5qn6HHGjQ4zB34Jac9ThM,a0d67e68423752eb,e2b5f74a0be1a554 -7ZsBYW3QQhk3BB3UwLEtPSiUOoDBcnYasDeOMDTMXj99ziCpGZQSvMl8DVBX0coT5qlwkJyocHmzGVJ8j1XLeLr70wfZ23haRi17DKY3HroAHpURGxkOLddgpZ5dQtIPtqtMMnE34DDLuLJIxbl4N3hNNzYZ5VfoI1IdmTjHI69b5JibVJXSUByd189wkSjC2dzgyLBre0OIDjOgkPOAovnwldx7eL7NcSqxvub4zyVC5vVSJiTwbLDelmDgjXEu2I57RcEGCBHVGKUZe6wnhKz8ltety4W8jKOVaNPTiN5ohEgDfSoXandggWubsEcG0IQMNXVnDE7Oga9H0ZlC4tL1Dspqdrwe6eP8GxgogTp6xGEBdagBCNbXX4GpAeEc9P8EZbksW2CawgAIGJO3BFppSLeYdXQa6PS6Fg52lPW8fvao2QKJNfuBFuIYxEyMYiS1feBZrlvpQb5xihLSS9TqCNzC22vVPkDh8bOEgaxM5VX0DC2Y8bBrmgcpPJobniaj07dFsK32DgA7bZ42xFPE2TNk4Rrw3ISdyb9z62fErYA88ePkvx2Xnnw4UOasyg5IQSGk9UJMwn2mJQW1iRZmM4aBwfT9VViSBfsZDkX4WRY5K4tPE9kZM77k1ulzODJAWOh5owfkqusMVxWREfm5cDgMPxIa4IuWMGuyj6zMBmWIGdSLCMIrQLOMIfEfcdLYJcmQDcxFz3Yw7asEuanueP3PabBnRTMbHvsdo4Bz,77322e386aebfdca,36abe9260671766a -RfiJwq4VreITtFBkmhcdxPh4mrPUzcAYViswLJzC8beaBWc8OcgfjTEadWFzeVwaY,94ef3e079e5e88e9,bb77944c46081331 -ovmAsJgfUy53UliHHaszldsWX3ggo6Ioq9Q01lEZ0u0enBGj2iDttL78mg5MgPsmz3EdXPMlN2ssx7gzHrFOLp3LpEc60d8Rh8rc8PNn8BlkW7OenjDKSrTyf31JJ9nMfOKXhz3QFTMCnnDB5VUiMNFWY5Nrmbt4E24Hhp30E4tb48u2PUYCvJSmpKooBqMvc1BzqZZvnwybKmQS2dMhOEJaeCE6gYbc9bxLhxs64dgg1y43Gc93Y3cSTSbaW7oHFVAinvNIuLTeRhKNtecSN3hMa71N0EckEa9Cd0dsoxaNKkPXOnmpKQneslxOc03U3gVMNF4r9MBfb1vnby9n8LnGc1jS9DmCUKRWYHiAhjuDr,7c2eab1e0e4e2b52,e27730f7526f15eb -BCI9QrsnCSvXZFKzOTt3suOuPpI1KXlJHpDnVPKVHSl3ymmihgZsI2JcWXmxCxnpU7R9JKWFGWx8WcuhkJNiyaz2USso9NFumFiJCd9HGkFxGlPe0jJT5hhC0yr6F9MxbtnGFuj7NTzpHVHw6FKW0sGNxbnvReY8xu84hdM7ErNMGSZSPOr4c48WXlI65bdgP0xtjFU9pl6M0zb0XF1OgThLDZAiXL4oKAu1Fj3V,7705f5586e3a65f4,9e2766325ef64b7b -bfAxK92HK9bVy4A6vNFtQMT2JR7Y93ga5kuH8QXNnCVBuRmnRSnneJxIjcm44dpeeMNG7qd,968d9152dd27b167,cf78b61ebdd21e2a -BOYhfGcVFrNZ2vfejR391yTzhoc9OS6ZBUfssio,7be3de81757761b2,d3989d181c563eb0 -r3r5mQwG40nVrR0m2SP8TsEKC1dnHL35oDSlEHXwB0WX1peFSVUGb58uno1yaYLnX5ovH5f0fZaqjg5M4WMNhcPz01L5FxhXXUnI2skRZavPZ3TOPu73PXntKseE36MUTyJtoPCqfbTil8f2FG2LYucDOQkohFJZ0WHmAQso0Zs6yA4QCvzGELlZZ,a1cb2c39b50628ab,2ec718033809e2c7 -o0T5p8ywssfPVvWz3mZDMwTULS7yatCVQrBV6qnnpmx2F70rByVQllWLzPAuBmErCkvi0OOzIZtcQTHohA4ja18vqJ82UzJE1lIXSwouVB1fIa5Kif8sD2eiJFkQH2NSvr4W8ptrNUOkhcLwxjpRrScJuJ0E5sHQHd7yrOh9fzR2bpNpbH8Vo8bFvK4pGlPfyIsqF8PyAV69pDIDUlgtrIx1bTCxQj5P9cKOE03Vax14tM3qXkavzOzz5VuIjPWyKd4vos8imQwRqQyd444cm5REFctybLrwdb5muXW49ZsZhgOEjEj8aYnlHtHwG7uazgY4k6VAfzoJXr4IE28oCXAkSaezeam9lCrQeRNnSdwb8dVhwJA,fabb255e305818f2,70bf53fa7299be7a -meqZ2ZgLWslEwf3eVLS1ZusXVU8kOp8zYlVesIqL4d5QOpzI9yEqK6utWWoURmC8zrh3yBfnsXDXBnwrdxrK1kbRMSeLKJXPEjrYkUFW9g6W4S71Ju7nwxwf7jY8EfXrUSnpqtPewnZZgRnQSZVJ8RODSfhf7btSCAxbZlvtq6ZPH5mvuxwyarr95XROJsFPoIdl5itAznSOG3YVpYUE8PJgPb25v5gDPvCdxiN5Xxjjq6xT8DVAdGIm4KK7wiEhviw7Cs2bnhHrtU5EikIYQa92pkRMNdfsU35NfgAHfocf0JZkOgRFGyuvoaQPKq7ZSUyc0mLBD7p2GLysFPbti5Dts9ctDwjxctLAvvM7VOEIYgLgLrghyt1zaO4RiZ9wBmLjMiqkXgWkBvcZT7n7yi1jgkMQYNhT17062mMxEFr24acsL51Wxfx6oENrZTRRigltbM0VhlX4ZL25vJGpBnxmFJJgWKvd8F5rDutNvK8FF5gRYeiC1UfvTV4lu59P6JFhBYbrJpewTqujVsvnm0ZZ5OkP6eUWM5BOFF72LrjRMhkirT8uAEGOqJvmmTc8vipQ8gjBbtOMQCml9RRFj7d45pI7NZccueVSU9YZ0DTmINRf9QSx1XpEcGyU3HP737JJ5hEc,dc722a8bd3b906db,dc1e672372a2b9e7 -m90NEiRC4X4FeCEnoanClilQPEebXruX3KljFyL5RPn7ezSRPPS4fVdCxo4V3HSKtjPGIYWQjWR1aba29dXTAd0OdZmBz1EeNVNCzplxVVLS8ZCl3FY8vziyQYK90stwhpTWLQmfGUu2lkImXET320hdDsBFTxIbgjRpfmnSd0TfuUBJ4rBHu3NZcPhQqnkHCtB47qc2h39aUZZXRtQF2OdPhrjsMhSaeaa8k854QMn7KWPvGevrh3qM3Sb4pg8rfUNs6S7NIgoz9ULYnJAKODBByvwwXJkDDSBb2VV5zr8nVLNBxptHkddxRhPMT4Dflrcg8eqn0ThQKMUqvRVtstvfgGw8A0d6KWL0d7DbE5pvv3GxP3QbN4ZWmmUEFPhBr0bjKUo5pjeoFbleW73Ljp33SldA4GQhW7oT2PkvHNpPeKCZPojOlbRf9hjGcuN2X9c4daufXB8SnXZqniojUpDUm6468eMdhVdgap7ddKackoPrizjFYXqtoY6BcA53ASXVT8cmiqDNqok3E3xCB7h7yV0NViGuq4lHZnFy5BQ31LpCT6zwZQGUIilSQXpUUpe5M0jhy5nOpFQ0srME8E9yIHW4gZNuIaWmKnasPwu5oZnd12prWXu7V1wpLOYkpgUKZS98nmIJnOKhprnF8EHeeN73n1e4wjSst1Vskf3znD5GcLgk6E1QFbrjxKJxOmtXcrJ1aj1XxB8SGAWlnRHjrO3RfFLS0K0XoVFkSuiCSyFET5kpyfrIFPQgomsDSTwdIcl1zh4jGlytu40x2Ny2W9AVzn1rEIo9iBNhAaHOYfW0tevpHDPfmVmjTtrutfEj6TnuP86vJR6hgrHSxcZC48S2HtoddNwXBiGeedcPc1Dq7mpJm53SM7Opd5mnp4D5TFYKMerw1SfmFXFib71GOfCxqmtj6A9jwLTNcFIAw,7748c16b654914c9,29c08e2688e022d7 -OnXyX72G0YPiOAyiai4TUgLQAuYZenxkk1pIDIte10D8OnY7S6DXSl4d2TGYL1oMgA7JWzCGQSdxBxewCEHT9RdVI0GHjWnLIbG2oDi34EGcsDEiICRtsS1ILTHAV4Dmt9w1kFwywbKd1VCknXCLtgDGq3AJxierAysNzw0BN0NqPZLmGHa5kBQIjTPx8iL2CO5QFiVHJWgtyobFT786nhu6S0FxKvgfLFCv0f3MOIfitynrTCfpvxxPKSgPMpV6tFnFLrNXJ8NilPWsr6Zwm72sTtONn3XT7b7junEr2uaZMfpAaFuUmEIefbI2QIqi2UMJ0e5FRQYRS0GNa6Zi4AocCXRtFP0tbuS804ixkJ7ljG23hNV69gOYQnJjYE9GLVKjGQcCdHWIdwGykd9Hrw1OuDyiyp1GuJ90HZNTc27rSRtv3pQT5nFqYqFgf3Uycalo6kydM441wVr8i91tYEQhzTUdauPan2cPg2n41bwP1YNoCDDFLQQwt54batE0SLVTzYqGWxuKe8KqJROjw5fkYmTv9MPPDaJ4yHy3bgddNbpSPChY0BEkIIAOR10vUGxCM4zVjnEF6ckvRMK3TkB4Ih4gGxvo2Gc8akTNXjHyeOejaE3qoTEObnLQQLAa6BhdFXr991Dp6HtgNxgEEppnWzJki6Bc0nOhJdBIsn912VpIeVNjgC1zSiOAiTjsIDaXSZdjR6N4e2TAlzzeAcG6DDxkfSVGfnImD6bNEX06RZJx3Xe34M5q7z96db5ADEgnB5szz38HPehAiyboUqRSx1km6y9xOX44AhPoVJbhEvjH,a5d6d9d690cbbac1,46e18b102a225aae -AWv2U5JeFeCw80OwRXwQohEhJYxs5MB4PqpnbvPDFrA8RiAWAXgKMTR3PKTt5uIbp0Ua0bOtC0LZAxAiuEmg8zz1WlPcCgkfUbZm058HQsUSdqrfVVChgkDExGFlZCs9nPNliVt1G37tdfbuF3U6kOkPLgqYfex1f9pN4x9nofKmiWUHASNCxej0rHLezPeNimvdHsaNQkfsIrdgtG9xZxZehdusn1jZzpmTU2pzDhLwWGBc0JwA8MyA051TmQ1jJ2vfWUapMtJTq2h67M4A01IZQOt65dA0mzkTCwba68Egumcx4xn60S3bVPysfEINl67Clgb1P3qFCSxaHXGM4FOImaOE307L3rT1vlhr2bgAs3xBvwBKZus04WGHyYbqs5qfWHQ8cPbZtA2FL0WK3PvZSFFmLKaTKiAKXiXmwtcqKKaXFtOFOBGuG6uzrkrmviTFuvZEc9z9movingdse6fOLSlOsYR8rUj1uBDE25L1naTiPhizv1mMaePDxF0A0mDpbuMHjGjzzBEFMYgAYENC2Mny6TocjjX6wb2xblaIgDiuy,170d7c9cd98cd705,1df2f213db30ea9e -B4OqemZHda1tDJrqVKnQMcRRIuort9ZrjE8EKWAAAjgHmVwNGAcyoTEdUyfP0zvFUJZr6EF4PQpsr4hCuFl7aQOJJoze19T61PdRGPHxdk5Cs6MOqEaqzbiyKTStwLaNpCekEw8fCenacKL6va4qcWonrAtDwF1wbxAGV1XLALCfFXvBR1QJgxBRxB2t8KmHCFP1KkHHFU9YuSptMTslcYYWoSxB37jRN4Fvz1PNGK6SFdxynalTEH3Pax82NuddDTfTugEcDngidvjLMiRAZutnVIPw2IzlTVevyIIdJXKFET561xfCOzn3UZeeaMQLG8WcsAJt9f54LkuAF02LMVlt5kIJp1gWFGUsBuOqJ2GeQrdaiv9xqyuqbHjRw6VZswrNQCkEt6b24A1Luy0P4MXbi7kjNRIiwU8vztKbEASKDjnRQb,b2a24b05e13bfe6b,a715e0669934639f -jF5wad0FBApaR51aZGyWZEOaS1weB3Ee37BSOWIwom4uvEdlirkiGkTIh6aE6XEyFUz9HAzOBHmIsDN3pQOxDKhZrg49pt4bNXXug7wXUuIoOB9gfaeKr7LRAMCvTZpKX98D6untUHa0EPTEKGhql1hx1PdYF7HRuf6siCNgG4rbJksdzXlCjqAQfeq8S8MVrDWZoulb1v2dT0EJNoVjmvjmcB8AqonuXfUBbgi1djzx7sJEKzlBCIOeRT9EZCsAL4uFUZwbov3eemIUhKsu4jNfZom431vZ7LslBRPBdWvpd8Dc9nGigNVYNxN5d8ZKqT0kUPHpBea9qgDQEhv0KVNhyPe2DzE1edCCULp0PPRlsvR6yCL6PP5o1XC02XkIYs7apO3YLBmhlwbXTSn3rWfhGQQs4NrGUIvYCQJHCtTF9H08mej3xpBvKbcolporP3b2SLxbLd7GXQyvwxqXsPOAt44o2be8DV1qmsKdikh55sE8MT3pJXDFTebWtbTuIr2Mqaq1iTooMcnH9aTbWP00EwHKzEKUwG2IDHN0DLqKWBfdE6aaySkX7bXUU7PInIAsI5j6qZKhuuQu9ZSxbWiRAfVEZy8VyQI5VZZyxvuDu5h9E0b7rSu9iP4anls2rTfEpKIQsvem3GHPY42cgmZBypTwuicW4uCm2sbQohN5GuuHmFBmkOfnxq0uRAKSwe46COhrSV36n0xunNtzaurMavQ96CPnAIxM2YxEA3gxeLu2OHkBoLw39RN8,fd8431e91bd41df6,2b48d81106a41687 -MM5kzk7ECsKYbBIpq2ARmLkMDeSa0qy9aHfKelGYA2CE1VoObnbgLFojyKWBhvlkbaSDqKFtFGIp1vgX4iRTZS8Cok691CydRGJMla3y7A7GKpKGUSr1nGz6jaeLeaNL4znwlmXvSrFlzGRSuaa5oTAvTk5LHPunB426dzZDb7YTzixNe6v9LbgwdtHCdgO6SnAUqKgo0KYCKpLgSD99fJXpj7ZddYZavNG1WWHPa02ts6MD3HleF04aZi2Uq7c8FDZDfuGfkwsDlidgyE5cP8YiZc7z3neJXfyuvumf6OdDpaxH4qQ1B0enIZoNbuJFrITPc5FXwfvAsgKj3VDVaKnIRAjayRrzW1DHbzBNwlhRiaBikwwpUhOReqSd3Xs35Ocx87ZbOO22YNTKlTfTDLK2UlhMXnumWcg71LyH7gDG2f77VgdIamnCWN2mWGf0u0F3n9YV4ThINGh6uiYmZ8ZzufONfclBxsf8omSPoqV9curCbgnbzGQDsF2420MM4l2ubHsxF8zlXfId4cRgGNICeAOjYU,3c3671231e8cc2f5,651a389be3cb36f5 -izNcC4VuGXWGdKKbG7ry80pn0tXuU0HyS2ZYrXftAzGQLAnv3aEM4i6XfuyvsTuR1lLj2DWsnIoH0ObziOciqJSB3VJgbXMeSSCLlBUMRv0DhMDy6zg1Codak8fVl4j19lcmcpc9aMoR1nUR70IwK6RQWECDz3c6aGiVirYpQuWrR5XhmKZy9D2x5kdJO19pFTWWP82oSYIbLvBO2JcSmqRgnTVAmPqadiUQfO267PvyHntLk9BDZPm7DMXgXOkqDlTHxxaMtr57XaBwO5uG2ZhJTZLpTX9wVrHvYo4qK8bo8FiCMHPq5bUnFjQSU0pySdLO0QXHlWxmHkoYhs2mAzc8gfYyWXGFFcYj55h5s40nz0Ez0XBR49z2G2tYWu6PYjTPQTkMFyxFr2hLoOlzT7KQb9KXymSMRaPRtWJsKVY6dMSJP6T9xPb2zAbYc2d66tdvhOX9W08CgLKSrk9xv4iYROanc2doyQAGSynsgwpyecMDGHbDAVGhg8iBsvl8Rvdnvh7R9sB9xsFZSiPedq8TfmgA2GEYvEzi5o8EzY9TF5mrusJ4PoNTjfZfjPyTjestygcgpxcBdwGgwyFvosGrirePZDu9ud83MT7YlIHLjosAI1nDhmIrei4HkT237Hs84uiuLpiwxRPscnupyFHZucsY4mNmSG0NJ8SddATjsQQkhAUbdE1YW13m1qgt8tsKatCQJPZQXb7ax6s5HguUSHxjoZHswIJt0DJRch5dG4AU61DCbc0v0sVbaK2lDjM2pDo28qAQwtam6pVaRFhBi2AL9nvSreJuI4N4V8BCn8sJQextcotKWYgv3wBk9AmT5deqIGYfnREy3NI5MW6dkhCExhghhkaDl3TeIMJSmIzXhaEAGpCKSqGHyJr8S1cyqMsoEeyUgP8H3BrvqnXC9MC3Kxz4IkIJAYg5E,b4f61920292c030c,ed010a4729492662 -m95Xu9jcTThJIaDEddKTNJnW8upAco8Q0bOeyxPHgnUvKGQ4dUckyXiqBc7ggrrIIBzVgN6hLEmz5e7FoubHffLCS45IE9GXWymGVtCbnAsezQKwWevsBTgaCg1Ta91FUtfk3G9Mb1pKP8diCYgdcdZ3ky8r89L9Yv484M1PnCGnVqlr5N1bb1gN7qZBawZQJxeJJM6um0dADrFUjEag0FonJHETnh38i1b0pceLu9m2TshKwO4ivTYDEjfyxSwCynciQOJWcT6H63XduQ0Kx7kFHTxnylXMXpIad7bA4SHDIAPxXZiHC5d1tTVc8IN0aG3mxbDiqhIHcVnOvYj47l9Gt8GEZrkgkkyZTQvkXz4H9RicyMdH2DysBTHCKRLjV643m7xUSeZx9FpKn0P29h3EOF0uhbcp7n3ObYhYvHpx92U2Zm415yd7R1XhRjEVO7BPqUs9CkUCo4ans56YyS4By7aJfs232nfQ0umrOVpkRy9rYM11uHWBPNMB078s0SEkXUw5319maP7mC9h0n3OkQ8tVvYKezsr6gYwI3gprKEyziyPthjRFijXaC68mBJaVvhxsSHJd96Qvcj3u6JE0MkLfpSRDe6KAq2155IJgn3d2C7njnA8X24KxlnNXOOjprO9tWoFJtuYjcQUeBHBJFrCXr6fehpYSe5DMUfuZiwhDmKRKyyjMxefyWB5G3Z4j0n15pIJiEEGhUPipWaDFghq0hBJqBnI5JGo9xMZ1AfSgAaIX4QgeJEOP7Z0dKXXcKyIBvrOVeAAMnSd4C122j16m2vWa5xP0vqovg8wMd4d79pKIGydSmxn5KjSMBI95ytWqGXp7X68TQJBJBJbVFAsRbrdMxjUFUXcBkTSGbHX2Y8jEVKZ6BVUSjTjkW0OVElvrqvSnTx3WNooCgnnIiDpR9Cc46r4rMeKpbLUr,4ff7de25c927502,45cbc871c7f85b32 -UsuuAuXsXzJuoSkSKpcLXgBn4EQbveKon2x7AUPCfol5uCbWPUImZubzk0qpKDQALHCMJrq5al5xAiwz7RR6kQg4AjZdmk0MMiI3tKNdclG8khyCnQJ7CtzMUXGDJCAhWeQTtlcQZopy2EplAQbQiyDWHUHfLmV6fLYNf,612ca23af4d8f565,7e417bcf53d33f9a -UGcE4ZEF54YC4tNGZHolML8D3QlLvLQ8yfkHhV9hsnrRrmeqGcJ81woaqXoVdzaVyAFYSlQbDmU7G8JYs56TegF6jUS5yHudHWxYAtGGTlchATq1bdVmLbTjJSGRb7fNHMvn4z6qn5m4TiusX2RJHWYoCwl9mhcCr3afknlrXOqXjdZ0dTBy6S3z6rXYmdAGZtX5cNdwwR40YwOGUMFfOYv6dQY2UuyHgFJqu6sMBTZW0akXqY6YVOihnbOXmPLjVhkC696SK78ve7SpB4AvtoxACPuAso8k0n3JAzFC7Cqwt5a99I79RgMWjToro7htT1kwf6pV3buEzEDigcUPYdoPWBGiDnrDZ3G3hpLoqbIFmRVSISMwmSrZl8R8ClOW7X3py5vf2j8D0NMWXqGFsudaBot1PNpv6DX4IrEBdqeZR1Ox7Ti30CAMVmgoB4DDs2wD4E75GR14llM88qpFdn2Tdz2pueQzwur5qwUtAIZyMg9b06F6HU7ta2d8bGkMcACzqYJ5gxzIBbnkR07mrWvP1cBDqPIzfGduobBTZ4SzfY7tu4dZgPIsueuxSwNfS22T7mjv0H3RHCtnKIeWJCvx9gVrw1hHCQpAiICRE2U4ySrABgog3tqwa9Lt3mZHgQJBvd2KAQbDRJPFKESW7H3IAq7IPPwrozWYu8LTgdVUJzmcW6hQVafrHXNQf2cf1J3hK6BmJtccVm8cjFxPSJR9GF0lqeteOvEtqRKrNmJjdg311nUNsEJ2QzEVagrEkE1mMGdfzofNqjtrNS2SeWpGWFcrH8uHQgpHCGMa0rdTDo3U1QBlOdWhTFF0i548txZK91uD83iGlOIs8sdYH9ZuqQ3tR9dKaz5z8Wmrycst,135c45d752895526,b808d0bacaf63732 -BQB06yARiIChobNf68ri59gGbxoE0rTOKxiJPOCjOtQTuR3WUJ1G46Wwumee0bTwMMuJo9j3vs34GwKlyzf5gSuF4o5fxDcATTbKrpgbfn1cPUiBwNfcMjO8AXyK8omtxbds8zmEIchPGX8eWxPRc03so0zJEmy09fsTOI0IJ8aqO0ougxg6lgTXLVi3GhfNkjcdZckDmgEkOgteaLHMirZ511gYBFRM5c7BGtNAXgrvYjghoigEueTkkG5peboXh8UyysKJRgxKpCt13JzePXrXD8xVeISTxd1HrDjuqjLzr65ZzE0xGIR84KxPbq71KMXMheMvyIcBTnRRmgFj3DG73vnPLMBqkySYOujSrTXEB74V4XxNQpOPHrN9oMWQ5FD9frsz6FPIYZXRUBLViNFb7tjZlpWzmhoq7kDytfM67DnlpnEU4CFVSgCtT81mdLenWnzjaTwlYEPpkjnofJFNgRaO8I5gX9bbjiGs68KKDqEW1FBqU2QafHbZH4Ri27QNXejTOepI5hSWKSUaIgkjtllfPmMovsrd68UFMbBhYUu0lHFVziATFF6TTdYu8TJ2oAYrcoDbT0YOEvbJQW5LoBygNNm7Y9v4h5KpjCpJT6dr,f38dfd2c9205e01,ae874772c9a9c94c -Ljan3MeUbsMTzriJAbb0UOYdlNjb9WRVpRMYjbB4mnnwGOYoejX3ygoIuraKUZO8K9TGQClQOrstKXHts5RRl0gHB1hULOXbX9ieD168Kxdq0zAwgVmFQk4wBo7CDXMYv8mOU4CCmqt6nSYCtCr5jYB6vCRoXzWpcXzM9dAuVhGaGQDIGCGsseXMuo0qSgKpp0H6gxGzbHZMFhGxENUID6Q8w8b1JsglvVeWuRIUa9wOGFATzPq8Xe2Op69mUNbBzIU1Q1FIWDzdr0OQ47PBFPk01sO5nzkwPMHRXBoleYhCuu6Q4xYPSgqXWjLpCMtbiHoe726mGWB4qnB0MDfExzlIRgUTlZPlK1I4qfoZTYODbSRCKb2eI6FQWCtrGU62LDK9xZbH2BkH14cC0KQORsNozEWKUAdz4rtMdH0EvY,cee8f0f6bc472f5a,32a3cd17bce18f37 -OKD3IoDxpK7lo6hevS3ynwWppu6fwUlTChb054ADFkGngatV9Rhfqe12jjfdE7rQgKmINkgwtYno3O9iNaU5SqGZqMgqWXfn6iiBub0kGWEmpdEnhscwI5ya1NjjCyuePxNUGFXXHNCxBL4EcfgJfNtyHjuwUVyQQhZ9Q4EuyaiaAMlJgvEfIaJkfmrAiv5dgL6ZMwES9uP9Rfek9Lt6eTuK24JUorprcMCh,67c29cf30568871c,a7011ba5e9368e7 -QmmhcDWEfIvwXZnne3jkFIn8N9A3PW3aMDm3SEyeaq3IfTBXuxKizAv0CJydUHejfWX8Fhr26O9PYPeUFQ5GcYlEoSMqJkZzNv4SdwSAQL9KtDMOf4bAhhkH7fYClLYo54UQHwKBK0b4eDHgj168uqZy1BuBbI0MbaFgf5fivZc6nvjfKjPEgA7jaOzIpRsk0W1k6oOCfAAqbZW3V9FXsbamOs95aKF4FbiS84YhGLz8Rhz0Jq0vgnCBnGcubTJCzWuvK2Wq9W3bcSDvGW01tx2Rucb5pL4D7uVz5dAecfSNrlr1gwJEHobygUW675v5E0dFXXdEkNnkLlo2CER88WTwWaxOZYKTjUZ1RVI44Tn4E63ISP8jGOzVoHUuTzI3oWruxRIaYL9aboPmsJRXHolHACdXgUgJnxiUUJhUQg3vvK0H47VmTQe7MBNnnTSMIqxzzcj7YE5WNvbe1xk5yZ5iAgeveGjWnlBdAQArueiWXAqSu9siGCw2eJDktwMu8N46Q9OmhmREQ97HYLJ7XtvXWboZf8BkCfi6bLGEjg7jQ4PKY6tcGO1KTRoXr8WUpUj3jf0WC1b8hherXgeYJAYJWuIRT00xf8rSkrFdJwAGURPmBh6ASdpguRopyn5Vqn0idiN6h5lNdoGE5olh9hyBRQCZPXwTfdemMpvd3y7ei9orYFGMe5LlaQlyRx4ONN2SAjzWMMYFfeO6r8lQORQ6dODPaiFsFKPezeNA6ncUstUspdEx7KrdqHmVoyjVWnTxMO19q5cusIFLeDXN5LJa92DSlfiEf5kPbzSx7r6a0tyldGDJrIHfKCi7BmwOhFRvyucFqouNj5BJbmcvp2dbjbgSFRJaJmmiyC7MYUlTXyO6Qjlz6RkG0XwrC54TJwnhVVTPjWsX1wcrZ4YgKWWmQcNyPrSYWKibLWZkAcKGei1wBUVqdbsJ0Fhr2EA6CwfHJRYfTRtWsWrWfJzP,38f95d14b3e9ba23,ffe894e01b97a955 -6Q8P9Z7hWlET2HBbAbV0yWABpaKENmIx4oZ8xpDubfjc899Q9iepm60UzOkOfej3bxc7eZo32NQj3ua1gtnfqfah5V2Ra1W4R7TEGxmne5Uilu0T3rGkSpEB9BwyHQ9DuSDNLFqymjynz41A3WjVLVXCuzGdkxWflAmvi8krpKdCs8knGbyzilsI4MZb887kYaTnZ3ul4HVEJsXCc85fkSUyxFwbWlbHtbNbf5MNOqmNiJ7wOxGoBboUG00Dsa0ndRlHqmHd9CybhR8HzWniHuc4W8Mp5lsOsOj5dyhujD36Jzv7luOmM6LkZMjJnC2drpBEq6zO0ZEUDWcH2FL7sNLxyL8hLDcRqSdKMTrIw5N4Im8dOMlxQ33x5nrdJ0D4siuJnVEsimY6nV8aOTBwGIpj1uHDoh5rNy5CeIZiv0dCABKbMnTcLWSYVEQGC5k10IdWzjY35e9ihQlKcxlCfId2Mj2ZZ8y0ONu7Vr2gSSu1WzJGOyoISThNUjrCF8tUFqQtswGHNSL1,75e4240dd09112c6,80e74f7f588d4bfd -z18DW7bXmPQJCEz88PNF0HsEcMXHXSTLRBA50ubhoKj5FjAk3vlVulUwO0oCFiMJxrxybvO18BNnDrWFDSijvsaAQh6g7IXhpTFcOGvXYsrEvagWwOGbEIgJREvaMhsCJ7kc6VBtO92wX9ZzPtYRnLSrfXumGtCjdh83xp1CDDcjxZw7ulIn6hNLkE0sDW7IWIppwteHyTadrmyjBrln4TsZxNLd3byWeDg8PQdiSk35ShHoz9YcKxpKxJ0mVOvg5eht0VNjGQmVmXU7TQ2oNaTh5Sx4ZbWbtixUWhmZDLoE8omsHnnxrHjyFHwx2rkuxAKNLbQhTKmUpprjoQYRDCnZQOgLkC1voy8wUyyx49L3QY9dkfvMNhCsWw4R06628L3lbLcUXSSfOajqqGpyfQLdxQR2czQzQABJS0sXXPIRcp1WEFt6nvk5uzkAj5ukb8wGXhQfGykrB0f1g5mVf0jDNJTtw0SwfZNT8k1onBGVUcoi5BF1MqAJJkIlsKU1x1W5Nik3Zagg1kdHDGhmDdFTpRWJR3Dr23MBbFt3ZVyB0EczBANXE6ipG5yfSmibDdSQwZi6ONITOiNmk5IgCV1iUExQgPLv3RU5NpfMhqyDwhHID0vnu9G3jNJhQosdIsyxFHoTtg5AUHgO40zMxZS8RlcwzpbxyXnb4mZNIMDao0gRUVJ1cbqADXOXQa1hKd2342DOgXqvOakTlLovzPnbbscKleXXaVHy8MZ1XlVWKtaTwzILXciK37cr6C6WBFhvDxEIQJftvNdvg1PSU0Efv821EeOOEUQLa6nWdRGVEoHiisajkkd32KnmpHaScGM9C6SzO3LbthTxw0sp3BBkHEifEHjWErxrX05X1M82QLBNEBGan8JWc7QiY3rn1Le9878sC7B6QM97bVUFpqm7mI7gU0GDqip7MCIXOnPjdMOQW3ycakTMMwgdC8o,902b3041f0390d0c,b43a05381a457031 -JplCz1sGDByu30UU8trTlsa4w7jse6h2v3TjQQLpcQdPnFHvJhuO8TVHXcVonlEG7LI4dwJMI0eQUJgWyUQuJTlzvIywv0dOmb3xpHSSd4hckMRAtNV3uWqs7ZYPN5GAZFoEuFiume3zhlsugMakdnV3w0kIVNPQarf9Dbf5zTWLfGbou2O0j2KQ40v0DyOwL3KsD9jbtIjQJTG9RSpPjPytpER0gvboSDsubsdq0spdEMLdWHeIujtKgIY8k9aGzU5AwllaNnLrRg1ysmkkFtKDdqtx3eVaGW6yf4adYmN7LD9AP95jxJJCpCA7zDPX97Fumo0N29diKF5zXre0aGmLRGWBuue7RSyee68WobVe6Eqs11uDWVN1YfkBLQI8hriBgEN87tjkdPHq2wg26XcAsQHFUgWgr05AfnX4VVQtLXo5MpS1Q72k1eLqfZKQslHz5BWP0IB9IlAsUCpUY5LMj4cAfLeJP05JHgMf6RHmS9C7buYQv8IXpEuuSGyOp8oIpzizhUQdL2RYLulqiddK84c5iZtXzSqm8x50nPgPq6w4Yyl7cndjYLCyM2PAGvfvomXtO28IlYLgNm5p8EfP7PZyPzsiZb9ogTAGTifa0WgG4unr7Z0QhCSTvbwiU3YlBQv0T6MByfw3BrEb3eAPxIiXZxi2o8EP26oQPMLkw4yvd2zHeG9jmEY7HVqts6CH5cYNXqaXlnmE,ffba891e52851bb1,6929b018a40e88b7 -HJBKQ5J6xe5oO5jpirtxJMNhexTx35QF56VfKFN05ZL76xQtA6GgLfx86OTHA4x9RyXCk6cgShvjH61JGu0zaqeug6hNBlEny3m1OiqcymgpLrDI23h3j1cBAfObF2OUyDFyidgzhAMFR97CtRR6SYzUBZTJPiiZ3omKBL7eDn1UESwjus2VNG4KYupPnI9vZkDWQ7QWEgUSs4R8vBWv2Cg4vqhwYOGgvk1DkSE0ICv8BMvwfpvmowdk8E1CL5Q7IqbNK9FOn8TOaS4NwTT2PHxeLwTNpgYGBng4DX8JH835Yr3kCbpmzdeuemfhUFS5y1kNqM1nkM3FvrYkUTheNYEC0SQ7cFaDEvjZnmp1hUUaqhcsiX9ZBXxXRbbC5RKwrzIX72PLKVeh7ao4r6yutw9YWokKskkU0G1xs4j5IOhPfUGgfyxasTJcTkUAAl9KEjllMtUfrdSeDuvbNZU8paTWPtLQN9O8THAssJxy6qT37qbSubqocFMvuwsvWHDxfCldkqRzM1kALGUMgHO4J2GPlXpquWxYwWN3dm6Yklkx3X9HOGhAsNz2AmwiRqBcwHYccQZwKZnrbc7Bixea5yGVq81hWJTfE3bY7AL3ahFagT9GRMhBe4kUbXIBMbIEwy8sqG2QHktsgvVytHHPeJuEYsjEysYuA1gPSVCLWMj9YYuPdRG4MzAlcITlzNtI2wbz37nS3AJcExEfrDUFuTQcvTjPXcJ7gCW83B3kzhgfe2w2hUHPbEZON,2b1503e1650a9231,a4ecb597c97596d8 -MQpG2MRM372h1JT6nmd0wrUDphIW8cao9fEx5UYS09ZJADX8HEVkAbFCBQfLpMkzwNfzS4ynt7HBXNGuRPVpuYJKS5RnaHMnszYPRENPXIUYpq3loGfTXZKshhCJvz1TmNRJ0DEQ8k3bdLcmfNF83zh1nGFNH8fM7LKaB8E9yQFs5MA22PUdeT5KOi5rguY0WDUhXFF0qnzMZK9DvOp8MVMvpd6B0Dwwc4KoV7a8yRkXmSGfOHlark27AaSh93NyGKD7ckw0tW4UFOSjQs0rASGZDRyP9dZZW97W04Oj9ErYP5FXotycX13ZWX10GsUD37KE2cAhT3zU7vPKMLxabHkI4SyKBDy9kte5PWysVs2mFIs51khAp8bwk4MpFgUGyjOsYFp7UY8UnIN8wfrnODvy92aGQ1sVjm65emDciA1sqOcp3l4rxvdj302iI1y2yB5ZvqZesfkFeP3GW7DLzqJsnh0XDJv6xpbPmRRRTlwtq1dbpx2OPiQLiNZN1QZ0KNzOtP4UknYYuSrrHHyqT0ltQl4WYMXt64zLayfCI94Dwa85gINxAs0NJ8jc4EFmiJy42OgCo55NecuRL0ZPm1oFRSKPxhLtD6gjjtpL07RMxJjvTOztBZkRWOkoFe1w1QSAR6XqzfOwxrdi56LqckY5vsH3C5wgTop8FqM2YVQy9PztHWvBBsfhSKxIp83KuvtO7zBgETTyX1ujNjsKyd5gI2OXS37uhUL1qdBVQtvRY,591358c305709dbb,66a4444d2c6ccc02 -79VZMp6c2I720sOflGe8kygi5BPIVuUtdXBwiDnwq2NqFsD7sxmT7Eev6bhDKWzJoWDiG3i81bk5RUPicozR9f50AGOYMbxPNnI1y42Dh4eq9aZZT5Cuqh3ZBy8xMInVN47yqNQ44tHQRP8RGBORQdvrJg0ZPD35UNVEHMStovB8fzMBuGC543ye3poclCkjQnaigoNRfWTZofKAQdFD4kBUYdVT4qylKCJ55VucZ0NzM5K3dFrYYF0N4qxM0OzJfPafZad49D8OtFZS7gJUurINSNGCDtJTvJYqnsnGMnuBTYuhjnrLp3vbjo8UPd6FCWjHM76tWiBE0YHCnKWknJS8d4p1RcVSoTWZaZhg8gOJ2BHVyXEqwcG87xLsvmqHNVvxqzWBgtkrNBWIMr8MoXT2xwCSNl9gpBC9lqPzYsZi0RfcCjWa6a53rWflTASpJUi,e5f9819bfda07384,5c48bedb4d05bc0b -oCF8vsheago86Jfvbnlj5rKR7dJrCwcPWNJROpXCU,28b7204c42f44ad3,226521bcb745aabe -vDeGYwaMYFBNThSkpgoIybn0c8YgfniY7qSPsLir9qbj4Y6H89C225gI7ZfDtvNYXXAsr3YTqDxTiy62QGsYIwALWyKhSzNGzDsQ0zV2UnTStVsCzj2DfiKcn4nOjxN80eRwEwsThOIqRflHrRyuf508kd2Shqj9D99M0ooYxaBOsFvfpV2Bp0tr0,c6914f6695b6646b,a9ea0b812faffde -6bEb4UUM0t9QDFg5GJcVToBeUdZQN8AySMW5G38ZIPryVYOpSQnEZtgWiAoAma7ADHp44MCfpvaG7S0Zs1dBhwHYS3nCopiH9nBTkI0q813dxfpBwpo9AjUxR8nrEUJeXdLU4n8zQJyIChVnR0GfUbZ8N8VSjAseq33XhEwT7Q1ub5wzW6r6ifJah6XCcHyAPAFcUpvF8tBlQ1oy5G5bN0TuLxYA9yN0n0G4YLSvbfEfWVzTavg7MHP9UiT0RiFToqvtAG6yNhsJIfwclMVRwwXpWVX4kuQllxPLKwghiyfdzvylBGlL91qxa1SpK1QW65m17hsnK8J6C4IHQ9yg2fP9M8dk2fDEsA4hR1FwThzAMDjyCQBGiuejYjFnBoBDvtJqHipFG7AVfhiLr43BuN8Y7qyQGbrX3Ar93aFBD7aM0CR7xpZr0xjhlIH4ngGn5Icif0TQwXU9JyA8dtioEc0cxExkahUXpjzkeweznhT2PvmnPmaFUY7wt2jbrwZ99kxxa3QwzulkxhCWDoknV45l5BUo78eq7eMZJcejl347jgkvnfjrVTTQHLMRc41yVVCFOt90fHVRaGtrfY2k0laIDtEXq3ZUV4mKKWta3tMKtN3mEn02AEE5g7A4PBOWb22jrecT1M9aYsqp,bf0e9b1db5ab596d,fb49034ff36c719b -i3Dk6LYysCrL9COKODZ4Pp4fHvXgrqsx3wIBz2GuCCtFwlc1jFuwAb6TiK8ULpU2xe2qTq48prvlf2a2WGf0OD44fLoyyKy1JVS6gG5dkVqDrJP7PNsNyqZIEReWSU3RaD0W3MUGRYFXhCDuZPmIOrCKkYSzyPyozkXnmStpuBhc5WJKbeL7Rvuiiq69vyrtWa0XFhsPi7p6FwTjn2MLckl2fBTmI0jXVMjdVGYrFduw21bD6xO9y5cyNXGZ12NZS5bYDQsmaM7MWfXHx9TyYJovqUBvCvCFXGcVoTMO1OYccdSQ49OUbu9MUHTCl02VmtJ5o5KqGEL6jnekyXeqOseI5mxFI6Dw9RZbM4RI4bz7b17EubEsE6jGt6Re3Zk2ENksoizTeszGC5u8sWQZYxhwWVKUn3H7ses0Nhu53yjl3MvvmEiLVGdUZfebgfpXwkYtHVeGi9cdUyrzTlcNczUEXq73Q0f98gy9WDajxkzGqkhxmpiltPU8TvGeoy8c69kEIUt2wfrU8V6mEOABUiv9aqs09TvuvXUwHVFdkrFkQPb6yIFWY9gDJ6gJQE8zo2nZIigYTL1Lo48VmIjVz226gc6BLFSS9lexOZnjTSRYd9zn6LSpePFDBnuVXekx5R8QTcRdGnz3UnKyW3aXVWahJtXxHTnv6NekyKG405G2yngXMWAnfqfPNI1rhfle2Oao4gdzwQnS6ZPV2DDtkz3Nh4b76ynqC64UjlSKQvxb8tf2vVQ9DAMwI04dMDecP2s5pLVqinsYJuldLHbcY2jKI1LDpu5l1ABNT2FaXewsC0KIlqHjW2kfvujAxj0oRDu8tCf3ZQee2bDnTXAvANt4cv,f69031af672970c4,c87120d425889535 -H2mFBq9nJgVB4v1C1qSR61I18INsMSXttauPcp59E2VUEpuWyobotRrD8t9qymVmBhRbwWJrJDhSAfV02ScNzOCo8cii4tC2f44EflSqcSE6Zu8DWfbAY4FNiCDJIqFfNRj6m83dnolsNgFnR7w01gZPCehQxVQ0742RWkBSv2ZPDy73pTlUrzSZ3aDYKLCttWuYwnHzkFcP1AzMB3l4bBE8ynmILABggSZ1hvKV4XGU0dXPGRq61nAsiObfTxbEbALF8V,996c87c1cb60bd0,25f36a45a771786a -fMbvNUm5Uwzh0gXrRwgK9f0tUYYoZ8Nk7TWHoxZgIZHFzK4mBkIxPYbKgb0JfULRUfmeQ4KVN4hF89ZfBzVZuzhWORKpXaahjoHPYrPiAbCBhTBOO9gi4F4VOeZSv41MgiZZWlcmDSZJTa0LbSsqUBfbN5boExHlcmKbs20qArsLoBmL67mS8bX2eI9yVtG1GvQ7j9xw4o8bkhzADv01q2kizhunTLjuTBavmorlnAPJUEF5lHb7sQtAWUrH7zsfs9kC6BOoOg7fLk63frOhs2ygc1SzxUumzCH19agP55SuY5WDbcuntZCdlq5n3vjDMiHHLrcRJia4rLqpIae7QacQYAq1U8d0hXpTFBaBBJyh8MVRZWxjacj1Y6ZHzXeQpEoHuR42p08b2NcuYzInieBnxgQR1hZFs8rmPvuhpi9AqqAiSV9Mx51sfy1RDDkPY6xNbZu3GQjffHYkU2FISTuGntzl86jNVop9RsvRzYn1TydQ7tDWc82rOVyieflfToP0OQ4XUGWdKCD3RqPcW0sBfmEJfzMy5zBXQf5DQzwbWKW62CRIHM7KaBaRkEjidit4ivZsbhAlDipKSsjzlCkkRZe4D9XN50uS60AWJ8S78vNN1biaJJKsv03cbg0jiWarrkjXqFoEMHVRicOD7Rg07PmWwCyBZDEQMFxHmCWXvOk8lld9P0aKXq6A8ZpYxqd869aSVPJInTygZFLRvN1Yd3mAXjnAWUYTE2wH9j4c2MDxEGevCgjyWwv0zBt3VUhsqpu1BRGAgQwVuqaQmEQLmyyH7P3STVotz2yf0AsxRLxKQDcBNd0nNHuvAMWjFHz4HoReH9vlmA33s3LGDqHoydNGk4SR7v5ECH0LOnXhFcmdZ3npfQ8Ftk2Eg3MmJooQzHtNS0LYUNN,95c737830ba1c75d,8389c02b716e1546 -FXgfEM5s39200OLiGZFTSHXiRxEhI5hoSZOvrKcJVkqNi1lipvCqVO0L1EgCMBFQi5ga537tHliO9wObWUkSovzOw9c1stMjQDqEGXDbLB5UUKwtGpYtoz1eCaaF2sQgshatHYfjbpj64VBb97S3DaS59aiK0eYWRt3KyEGQufWuCVlbNqffvrTI3KwLFz61AZqLOdWcYW985VvZIWyxclnFrsFKuZrz8zylyeRZi3Xtq65aOjJ8ujUvHloeOnxc6HCiyxKSRLYDkZw2lfwipUQj98LIz1Z4sbPl5J4YRubHPdkkqXw5QrC9DvWNKDnCPH6wO5dnMz0gmWoQ,6f191b232ef1a324,d399c07acfb26617 -yzc44p3fcSa85FcWzawbCGI4KOFCdA8qFsshaiZBO9kM4zRvYPXdx7DWiwxnMTZ3q9oM0N8N3GoZZxMoZXc5a7cUGh62NqZOzZaMs1Ptwp2rpr97dU7zdeZ5VEXt7vPdxVvOFs9mwmgW5PKoG6e6rolqKGr2xKRds6VCJPbzGpk7HOdST4dlTaVkgmTfBgrVz5QTiyvArW1I24yMjZ8ig4DtVVxNo8qRtVuP4HrKZwkUBt6jT1mxYYI1fjqoCSg4o8HVZ407NMlxcs8JNYYplYtgikNyGuLkJe7xhYiUlkdd1sqTWf1BeWS7vp8OT5UiN80VtqVsvakEWWAWgpNb3esu3ZkChMFO8vwrcddWD8YjJjgmT5LLI5gTAo3uaCV4k7KSn16Y5ztFA23OZvaPxj4M7bH7nDjnOMKrhMwCw8tO4fyNE2fZuPKTgZAJlCn3nTcbv67ZAZslJxfACAEOggjzSKTkDpfJGMq8ucqcZ93NMIm4U2MgC442lmmccirbQRnrayT5g7I9yLltNeXqUDbjHOENRwPw9BQQozmQ9WbfI6o8dlcwlWGxX0TdKk1Kkaz9ujjGdBmeNITaYJgdsRP3rH2UEiG24smLgV10uucBj92JFvhbjN1troncCYAXTi6SOAbTQM87ewdp2EFZCeDYIBxf61P8iSREWtDE52EZG6ofFHYF7veKOn4JfzudsGbVApmBG94LScbVt6TC8CtxZUfaNSIvWxNYuWV516hciYShT,976787fa6e7181cc,cae474e82763c1a3 -balBFK3dRM9MgHCroi38adGzzJzV2yTTolio4PJ1pMtlG2L52PHUkSJKxxY8bGoUOFf32IMFa9d01Ip9Y82ZqlvjfNL0Ja9brfjutIBvB6W9qrHTEPEAYYYmhEBh7kxTTB5fPSk0iFQwSQRzKGi0pFpdCK7EUQ1FumqxPBMTKILUUJWWvl1tD0438Ykn8U3felMYxwpbhyaaAJK6gJYNuM8AIoDf7fChnuh0qMHq3KvqB0kCQ12NGzMggVnqy2T2evVpnmOUXYzrPCz7plfBcFgtVE8xSBC9kyZHzNDhhw8Rtw5GFiak8TjlOH06cVIpX4IPYxKcwkgRX2ryEgQOkOJA8OyBl821IGf3Yov3N5kSf6J9ST6hkjRr0yc9YffpqaA11HopDwfAW0wLvGnvaue1gUYm2oi98XByb5x2t6xH5437NYwWRU31r9Xxk3q2Lwm20sAHMedqP4aEyfTU0d3nsevm0EIV9D1sH2snQrxhqBitweuXmhmBxeit7Eg5mVoqzmrgwV589sGPV9uItTpO3y2Zl4t1GNKt1jgLLEbaPWUU1ie14bQxWm142NlqaXDcfbDRIC6lTfoLFKXNXWsL5n16s4tLl9sCaWJdtzsxMwtH7ZyZeUGaZupKq0OuiBvKKzwvl1W0L7a35uEg3Idtayeg3lLleCDJUJySDqbWOu1grVptW5M0qrKM9LSGB0D2r4WfsmjFhdA5hTlwLbghBzEoLp04uOfdK2p7nMY5gIqAXqxjh0yuazaxjydf4daoDnl0yD5Wtvl1wToWxt9pfFBmduA4QFkeneaMmgGgqcYEFZqOe0MC5JC5TUianoohRz,17767681c4b87d7c,b137c084b68e0269 -nnRJgI8AcdkUWBuxLnOpxJYPB7pOwJu03ULiKmRkrlDswocXKBzwtG8UZIap6N3qBF6EllBc7yfQD8mllSeGpp0BmxN917LchPFKJ5Eq9Fr81ZldAl9Y8tgVWZdZgrpjJFaS9M3KdHaWFJDfTrLtrJQWLuYIJD5WYAJGigVYctSqVBbsmtTasRtEARGZ2Rof1eKLVCzZ5E6HJ1unyP2cUJt2JGBm6FNHw5Vze6E,c4fd6f7e13583cca,5b4f8a57878052f7 -3T7TBz7LoDSsmBdlbBa114vsCRuBi7pG9rBzPkAJ5teuPu77Qhm4ctTaKAVKnxYyUGTIAnFCVNANuUGAveKIhZbRv4d3Nlc8S3iAUHU1OROu8IhBPiZA9OZPQ3C8JDYXUKI8UHs8pCKChgK0XKgJ2nfmBPUKNEQPfEOYjO45rYXShJbd1tiiS17zvNeJg7J9cM4AKkcJbMc0nQR95bIaQMkIz64ohYpuFjPxOzWD25AuG8LwM8PXK3c4HGLzZzd4RjylgPLijVac2OvmcPsthqyY4KcGYSCQggHGx3uAAFzF56Ju5GS3E6sgQ0Q3CxgEW2FBfQeaN7G2ApkMtDJ2ZhltglZQmZ2a2uMotfgwheVCTfdwXwpPM90ddmRKDQxShsdN7dFNJ7bwGmiLYSFvWd2Sk,d7ca3bc10ead65c9,15bf1605d59875a8 -mXyk9k7Da8Za1HC81XrEwUaL6gfGBKawr4AflsI9bzg9EwtzMEvAuXkfwJzv9wVOgmd8XhrD24deNe3jRv8LLObQZsjdNOWkzdoMYCRTv1iG6HmUqBtXYNTYEdVES5KJoTh2GbG2sEVmWcrhmGEn4lzqPX0TgAIDdCPgNCh6rYAxIdfgqOe8pmUsLPDijEVrINxQBiBKFxduhXRU6K2cfulh1Xfcdhl72gUEx7vq6Qk0ntFMfMTWiiFjGDPn3W1dT9H4VrLB4fXDUFhoLLgoTNqV4iCCNtwVc3OZnx1fQtnO3ThTYtPvKUIQgEeXLtwaduLM5XpoIoxsljxBQqeUH4OLbpcdXFdDiBJkRiL8VNpZizC6J3MykiOnrlaMnCGid1jOBhtvuZcOCpZR05H3IhIwiSqfvLSmu4Sf5mK9xrrueHvLT7T5yEYGfG6lXqrNiOVpDbfAgu2QJY8PHD7ZKx6COWiArkOqDLJBL6ZzzBg2hZOKXTHG0ta3fyHHARiEHUsnSYfA6GU6Uvg4ewewanrd84tvvxSkC5zCtrZQdabDkLH,8c175f1a96b104e7,634596986a836aa8 -dY0QLGzbqrEvtgB6RferTys3urqOEXLj9F00ZADtltpjDTD9cv04ryzPU5tbscDth6m4IeZOV,ac8bf1d0a36231ea,ae2daff6bf6be0a8 -MXTWpUaHbBENqKr41kAEr9rtnGvY9Ny219jMaUfFwqizmeSPvWcKbleaxsIWhB7gsZLSHtpAa7zdl0E1KDMm8JdqVFmOioxmL6FqcZGAsfOsNcpkGtvZLxG25u4nrIYNHX1ClY99czxaBVYkMobDg2rSvo1UXnRe6NYLh56sRdv2Woy8uyP6K2iMovZXAur4NF7owKVppmCC92II9pLON4LfXvOp3dLvkXdk8NjJj5VuYiKscTVkQijzzZShqK6S4IfbrhMIQ9kR0U66rnA1gb7rvEUmTrRUG1LplMCiOnuXsEqgYqkJNNl05fZbiLIiJKviu4h57jOPwl52dmJrOOniiasoIhBuZA3zCZZ5MAaJ9ci3cPKn8WmIQzYvumy5I4koQ6U1ETUE9Xn7soNNf95xBj8pYdB0uwUzwggnPThhRTAsAdM7Ujz0BUGeWlrYXZKbqq2rk9febBq6XglLX7FvOnf6p58AhFqCIj7Kxzgn,a377686c88500ab6,349911a9efb4f8e3 -VhL91RNqyXiqaQQbJXGZz0SzzXArCET8H9XpxwvIymlmkEzjjotblhilhC4ixo1hpuHQvfogHo6RVe9EVm5qnvUL2PiwTln5h0eVEpN8TxzFSeDywRpwxNcKylnZYtyJwauWDk6QJMRcsX3BG6eZJdUnujzcn39tuE17oa77V8weQozhYC2il4UXElOnz3hPe6inzXTMkVfquzhxvS2qzdJ7PLq9w3QZbB9gAG11M6hs9xQWzGaQ2eGEDGL6jqetTl8MhgVsbCmQRk8MPHWKncMHiLcLfjgt4nPk0WchLiXVFC3ewPUP4vox8xKkaYrLQ0OxoSVP7yYAvg85S0WbFDlxBhYIXDcXRaWP3A09umYM0TckKkUusECEF46bxpEIRtRo698onXUm1buTwY9ZMvF04rXFgQE3hElqzRfwczZxVBxYYoKhbEpClRqB6OszD5WxEY8PIQnG57G3Wi5ytB7IZQFkQJUjbXwGOVuXZVkU8HOXXZ2Kfoui3ljwyX8Vci3ofBInjloRREM1SIuhmWdSLeJbBrCL7KFmSOiBnF7SnXYYYIDxnxfw6FZwbyBzBaftrckAx3Ysk683gG1tQPmg0mKCvvkeac6bsGFxpHTjXUTi9KQlb5r5MQaKRuxVErXJecYqYUtS3utQwLX4YjmXlksvw75E4XWsnyY89HqShd8ewLFUVJrrgYnAOEclEQWtLz8wxJkacyjKAsXlpvqt2sgNPNIjn6vJgbsaRN9bQq9W2qESwXLvZhNABMlyr,a5fbea611d8a839a,5b500fa6ba7e14ad -09TRy1Tp1lp32wt7vnULVWmo5D8YmSiqhQV0nm350SFbrfUCe3xlLehFXaWVg,38cd10eb8cc3c1a7,fd6ee7f995b8e37b -X3LKK1m037SA80nk18scwA9tQWaursmMiIXXHJcLEGUJXv4vgfzsXtTT9K5OnjVAI2DB6agGwsfvodlPCcG2pneRinAvESfb65SupP3xFtvGiT5rCYcwpn9vMnwvETtFQsDjEbSsgQhED7y2XJEmFVEyHq0ww5t9owpCMQF0lPhKuIl6Qo677VyEEW058GhXOia7exI0nkkqkBtgX9xWfwH4qLOfS6gwn4ZoII7B04FXl5HCr913NC13JmFmcU8VUaRNeiSVzX6FFH7wGikiCLRqGTPkKsEZHGVHLPX1aroJ308nPDVgOnQZhJ0yCum00SaJYQxUWXmAgqs6IY3Ro4j8urMNfHP2kePbZpViGMNKMVog3LaYhmrBSENwJZS6mdCVyFrNKv2fpxc5xho3BvdjllkCgXiXwrgdmiK41DW3LRsY2EXPeEPPCVr2HbsfIDGHFRRlXui8jCqQK5vWTCWPChEZLLSSbVwrr0MrzX8VXk8KUGCQZkgURbehTdhkcTEfr936qJDfxUxo2Ncc8WR72DF7yelbH0EBNdRV1gu1Qv24GD6jSHuxSU1QsRZCXOBNKQsn0HIfwhvzNWavSxdN9NIUr0mFz0vX45b8vwx1kjjQ7LsCbvxlJCoMcmTH3HWFMwwnnqBV9v0oinWexJtgaD9k0fVru2RWm2X97DtO0Qn95WGZcqxPLy1JtjlXLoSTBXJ2G4rw4DDjpJsUEIyOspTN4VJyMAiJcT1SCrX5xQ8hWhjo7YzZUGPFYbOiOvQKx72Xk1f8pgae2LregVCVDA1jXlYPrCoCWhANOEVx8z8Wf2eV2fZDwVBAvgwtpplNyxZQbzaLWZyni0kjvfPqcPUN7qU9IRI6DZFGJ0peZ5LeFokgzUCKulThG45SOFgHCSDFAorz,269e40c5c94d8628,11409aa5785198db -0D1DEEJzD6hQRwtWNS92gSVXDyruNoRdal9Rqs5UUTAvBIt3TtFXbGCAZq0KUvD9x01ifJxcTLBpPGLsgpFRZzKHm47ElozECNPVOcCZSHyzJ729zv0grw6kzQbWSCoWKnRXndL6irskz0tbGwyYvdecCmCRGhSiu3rckAwEcFaKg4FeTEUEbTOaA5liNjz8cGjkg3Vy6jLViyiX9u1Nr8ohXTIWXe5Mfq5vRVQsEwq5046YD0l6Tk9G332EWFlAEjbEaTc1fyVmooNAOvmq3uvyE4OUP6zZKE6YefhEOO2iEZnIrq9sT8KTlirQXoODOvUBANo63xNxVqvWqNwUj0QVnlUeJt5Ny4qOcQba15k2xVY6HZd8rAEkIX3ukpGq9UIHMRyIs9fqIDBbhzCxSwf1KK6GQj8lsAfgE4djuMZXJgTMpacFTRDBwtBY2yWmvtZe7iocwldfVK4txT2M4jovLdkWk3QYpff0fzWPlnseNL7i6ZopsPtsf5or935PPiqkdo40Egv4l61pDkh87q3Ss5zZmRTdPQeByR67Kblen0rsxJlaEMBbdqTtJXmzYuoLM6KjG6M8LL7sokxD2hMSn1ZT2LwkfrIVkEgkpFn6Zd0y3clkUZIQGpFcGkRqeOAoybSlwAbKPeKFBM8LHfSyE9MHn6d1,1cee8388574b2052,a82e8db12afb2ee0 -XMTLuL1LZWw2VKzwl1QMBKn1fMOfq6H1YtOMPXhkdmsxSk5JgdkW0NYfRaHltMnKQVplQrgZNE6U3bkz8WUlX6nKwUMrLAHlaioAG1u0Y6Sz9y7JIgDbn4HMZ9vmHqNOCbmta0tfHAVvz4UURd7xUuI5qE8QjU1V2Q,85b16685bd7f954a,689b82961d3cf304 -ZG8x8CXpMMisworVntqCPD0KuORRo4xlgeK0O01uQECjHvOlZyVFegY69D5DQYjpJaEH37A2hOf5cq6BfSd2erWCek2HWJlT36Lij7wN00HHNgoWLQ87NNjt6RPL2jKfFv44RvwaroZsvMabgMuvydGneWDZoduEnsDM8jWGxuePJLwk4VIdtjL6HCFXL8uYbpbfO36ovN7mvUryAhaBtREXZbWzDEXmWUjXNnkMFC1Xn,37237a67973dd13c,acc166279034b6f8 -lhnuaKLu84Lg5ojynBAaqADxSchobuWn5nhf0SAMEH6ibhTlCiG27qc8UuFaDJaryKNIwmwoI2oHDuOBlzasFFGmYKJyYwZteKCObiq2nOkm2Vkq7En0tSl4JVOgIs6fY62C1mc7rMJrI7gQYyKYsblXEeBdZw8TYQ69wR0CZe2wPvyeRexNVhPIY2Qht6rI4gi6XkfAq3cPf0ZxkEjfPa9Pit74sZP7iG1rPQYemQUr4cHoa32XhmytJVzpUWfWK0PeOlHWMpCfW5tRh0Zt8Hfx6nw5j5c7sKhpiCXYBreYsgCRhZcO6qgFCk9qBCXJfLOwPoGK2QyGVnJTjGRzefv1t07nQGodrS4yruzVrP5iGsVqt83aOuzOuaZIjZsatqGD1EJPGKhGdQOKyEMk84aADi6QFIHy8o2L9SETOOVS6AevgGTjuk7VQDHqjrip4Rx3LshohMXTPpTSFIQbB4OpP6eTt5V5sYLKB9lmvvPJeq1az3B7DpRgJifz1YOb8nYuXzY,1af83c080fe7e0,ea791ba7f57b5c56 -aec95fLVMvhI9UdsFH3SHx59L,18539b424c988c4c,31ecfc3554991b97 -sRlSIVrYGwWV2Bzg5eXQTMmr5tqVtUvlvToCUStYBxFwaNTInYMKJyChpkGKayFd0asx4cwhambi3YmRzs92zugb1A0y168WCA79vKDlxKUmJKh2EAxY3461q3A5VwlrGV89Cq94Ifzz4NqdDuMRBFvOlLL3oOVPDnlNt7YZf0ckQ6mSF7XWzovWfP1OvatWqM6SSr61AvTSm2y4y95xpdhlgQUKa9oFdWvZuLDNa0PFxkulL1h4jHFOeZ3sGEaGdiwAwNVo0BUdeHBAAwJ0hEIeU3mcW8bPkGAIquft4mLK2MlJPuXGHu7vDSXrYqi2vyut1eTi1W948V4rztK8Cn9I1FEw4HFYEyReNLcC0BmBk1DyJ8qpyQNdKCeCBtZzquZCVGnjCFghK7v1TwRNjY9ITdkq9QTPBA7nuTMeAdKQJRcdI12JFb9eUaKYZBKdOgq4ZSxeBT27f45YzhawWqu0QJniOv001RmL4qY1FoF0Gy3zLe8ai02OE1CL4voQjZbMajlhxbVFnVUMuDf2sKv5xCPumSK26ncr0JlOIrcAZngxVNV4sFHSn9b0fMHvURypPiN91rVs345bVKqalTJoEh0788DW99T4NchdnMyswVpfsXTJUMW0GkpqYneMfkbe6fq8scJKyLaYDO18xGVFQlMnyjF85Ncb7PdqPjrpBOLAOoekutNZJK62Odz254RVDQerA54R6ZkYaghF3URRXgVfBCbM8yjLSDukfcJjC3ny3XtSz6lV6e3v8UrvWexYqqBWNSM0QMzXZy3N08u54BxBsLjzKLA9Sv0Qm2rVvGGwPMwQKmp7B1KfXKxscMHBE9V4fncN5sxdYhjZ2thtT57xzWPrxJv1yMbkXmcGOSZWUidWMNTd1kMsxhWDNSKf9SQ8td7DCUnoyv1Dlat7nbMaZ8PmXDHZHjpOqbcIMWGu2blNlq2Uhla4FuT4w5eB7srnL2CAw0E6XmqXKxbzz,9ec24c521938412a,52e95325b9be25d5 -3kNNkKLDnha5zdBxi3OUQyHqrkpd5JUktjQHldNDG6T5wCDUPLqOVU07I7HqRCOerOXH4IE0O3oCgcLoobEQpXdwjmqRxfQzk49MVr9rFov8P3ORPxtYcIE2KmpOYaDtjqU6mga2yOMrIDIQmAK1MW2e3B8QNs6wCHRPpx0ROn0n1HjpXIfM8whjs8MlzoVTW6D7VMzj30wQbOnkTceVjP2X6i4wuuhvByvFSiUANDareYqU68u23oM9g8NIrL6kkssg6D61aPglVHVYv7jn6Wht07mVQgOWEh6XC1ghChV6qWybRVzX5C3QDo3JsyF1G7XPAq3OLDmLTp2X8IYWeolUZ2VHVwqITKRP4fAZAEoochiPPFUtUoobQ5GphHGh6UAD36z4hD78Jf0yfrX5bfzMtZPH5uGGlHq8Zu1LZimopljLRQcihQEmlKSps6FjBNsL0wlSCAYyl282jaEGtzF04OSLXhD5qIibmxo0HNEqojkYOPCmSv1zHSo9t8VQjhq8FxPIFKxasJw1xFCwa7p509uaVXiRQj4sj5lsavZ2uVGqLR0Ic3ONb8BeKwqDRjkLOTD6cHRqUCkk1oblr2pWHcs0u4f9g,f1ba6db9574139c7,d29f01818fd60487 -pjUOv0YTj0Gl6XZ7QqGlbRtd3kLvqYlWWFT41jg7rFLGCWXfpuRHtoo5mX1hoRCaVDrASzbhGxph31TNNJ1moUgYbUu2U1zbFxETyQ635VJMOwZ9jYJvE8zcjPopjgt0hCGCgaa4693QSbEHj4tZj21cslb53sUK9vG7NpOiGUhPbnMPJssQxHAmZmfsJ9oM5wLcQ5o3uAWKDfiQKtQyyYO3ELkAQ6FtYSXsua3Lyc78OePQUOPRUJcpncsSLgkMRCmpgXuTxgtfMgtqhyirUak3bjXpLh7ApKWWxYObTmnpnS9wuyRx7MNEDhcrJVkU7WpTsLuACvyTrbkTRhTT867HYciOkIjImJiR5oi2zYE8ko7aKAWjZODyjMhxrAvrp7TVEEDGPvsKEbNrxFSb32axJ196wA08dg2k3LZhXkG4Rrm474Pkfseduqe1jsRoLpw8T2GQ3FFLKZxft8t7JgMMnPdy3oeuPEVEPuy2RtnQQ5DxZXvFpI0R9ejoCGPRQXdgqZOXYNqr3AiNWkF1Qbq1TFgHumXPnpD3sVd9hNAa6gk6ibSD34GDpJRF6XYTLqD2qd7pvUaAokTlEj0aLVPFuGd8bVqGrsDxgeuL2hQpb6p8sRtrGiDsutn2K4gdm2dwKT7og5CQDR8xlTa31EjD07pQFkubOcwjNVX5rfpQ8qa4Pceto,eb83ed070767f27e,94e041312e0bbdf8 -7sfO1jCkMVdMFBRgnoVCl1qWLyDjuI0UhcaO3sydZvtyn7QPaLFbI1PUHSk1hSf5NvFlFSrEp80g1g7AiJZ8JK8ByQIFQAzTKCLFkoYLif9sDVaWnkJqlfnyixUIYpUPrpJYxUvzytwFwzVRCNDZTk9ifmrxsW1uqLAdNenQUaajzNjrzqzzlXvmapuoCMFJqSwYw3pd9FOcbj22pAEaelS6ot9JClTJ6FOt4dpXWtxPeynOowzeomkti43PDhxaHWOKBMqkapE1FxdIHGOTLofWxEbB2CEmL4fYknUrSIXz5hbM6rdwkcULr0TlanUu5l6LvmfiJ4iXjgwT9QDhg6Fwt1EPkPG8vZjQjECTCWHKDzj4AnvdzzXKg6nAoTt81hkN01g59QJSGdpLD69ESN4wV1jVNypacvlnwC9OEDTtdJApnWaBGXWayVLHwAw7sTpBEGo7ip90b9LHdghbz67WscUYtgd8Mjau1lXQpymdu6hG6BRBM27wqblpjuOSQbJdRUZWCGd9hKdidYrMcIctnpPMTJ5j7dDhUExkT5kTlSUnCLeFTcRMEFnQDoJSGltjbOFjKXOsC5vPAc5Id,d1aa7cc5e909d9e3,dbc8fd79c4f53ce0 -mmaZLgZxaXbHnkm6TvAf3Tnrr4t5LsBqcIk3GYaCRxXjdqeVJGlQslUZGnb8Jk5CXN5tdX18YqDVWy1KxdUwF3CSWZrHjCtPKLDj6C4YWvk22X4rnpGgQs6zLHv2CTwdMBz9TK6vaeW0j45gwctofX,f8c2ce891aabe1c1,5422763d63671471 -eSdhvImaNPdzDGco3WF3pNytsmGLewlmqlx87SKL15z7OSl3q8zhgk5ZLqgqovO54SZiLN88QlGReyrvFsxM8RTX1RLNVd26pL8g968FxGVjYfg9FEnxnPt6TgUWgemLC00PxFige9HzelCEv0l,c6aadb00c5853990,a4059fbd111a88a0 -OsruBjdIEN3Eyr7qcJaVD4UWhCfy5FzYzKADfFcQ6dEC8sLw1nuuGOSqLBsxqbKIq8kAPgMru6kaOdXQPZ2KGWCf89m0uyINLsaWucYkG7tfjXSmC89tbsLEpP6pAdz2diN00oaqn6wCaSv8SSOfLbh9wlyU6BbzaFfc1y0HdtbJOb9ua62yBs6AhWo5SX15cmQpgoRmf6UtrvwZJ8oNpnJ7cJvhDvNBT1oBehS6qakjlaSxfi8LYrnUSNCoCeU3HVqhTH6achjZpsK24jezMc4VY7YOfIdAvGNbtOoba1k609GTl3UsbJ4qPNtYQpYlM86TrjL674kXG0k3u9ErI2RTzBjCuULHFFvY3qCTJker9HMBj10G4MYUdU69WZJkRlIe3gxz4MbyoXSGfryI1dWgSHMDyz21yfDguatDVrBGxMGhMuwZ3xLLSJsdaR7rl8dkL4jwn7y7qkJTSBdL2FfAhz5qex4m2SNdXltOMIw4EfWTZ4v2moUwX2Yg4KuXwaBQ58IAsD6A1i6ReNhFp6i7bNhaHPASATzDSP07waBqb7QwIyMK7FDT0VjXOnElzV0amltljETpX7YfUit3S2vdnd1R7q42iExB4WLXqLWLsMOiAe8ml8oxHXLdJXuHyGnkfWFcz06MwiR70Jriehi,b2a95045c27ff8a4,174a4a18072de333 -WxPRhFjqPETfEkujGlXobvXay6qAwqYGHh2zcEYtanROX60hBVqB40500Etf0eplJBAWKPajQiF48jliU2sawkM1Sq5ClhcsgjHZ3eCyo7hQEm3m3jjzIiMiLar5uO3jlAWBRgPnbTOygsGEHmMcvipGhfTLsDmLVaB77L6kNSrzCIvtGUZwXKnOkEllbli6T0U3J9hzx7sBnO03CT29VzPSzazMxlnbs5LZidHfORMRq64dkmvv43Xhpu6kG4QEM8Xn80gtKPWuKY8t5mpQtcEgvTRHPzo9JTIT0Zx8uyItRWXdBlMMg4qXki5Wjjmv4grS1NsXub62gD63aLPpITJuOlPIZslSLFHRfWXEA0UEYONFv0VJs8LRaprk4hEIIe1ElGLz8S1hRO8kQ7P1MP7mseeNTGTy79Pa1KKmXew3yGgILDxj3buE9fLKe7wYTaKUillyfneZh2A7WEP69vv7xUzehRwxr3ne5ZVNbhDQJBtYji8hwbqd90Di2DNAvY9lvMmnwrNHmlv02vnYq2lfSHGXq7Zb1EZo6FGa2QZdVAs5xsD5cjWQnYgFvn1ZUo24Z6bVS0bVxPerRUyovQcvrrknq7iCV1yFcYgT98RPoTaHdrwcbuU7PJ8Zc5lI2cYP7CTLB9iqteqGD62uhiH8HSiVUdZdITH3gFrQkx7N5MzZUOEEFWzVcpewYqWWXRTY8f0x3t1Qyw6w1v6dLRDXCdcSUQuqKPaepcz6Smu1I9HnqmjqMprRJPdYD7QH2eM4shWnRUj82e58Pm3MpbnisEKwYmc8gd0ogBN9P5QLWFV7H9txjcMO0uYfPNcOKZWFXNJ2r06jHWzX2GffvHrAmvVunUiCahdj5dhVK7gDYdPr0jPBBQjNmHPcJ4wLOEqHCasD0830HVVNdXOBELOmdE6uj67aLaTR8c0NaFGETYGvNirPRPc7zPmHa,add03f1cc700551e,53c7a50f388b5dc -uz1nErSya0OxaiDgtyEr9bgQj2PG12lzbi5BfgCDsEFnN5mnKsPRggp5ztTQebgG2DG9SpfUyAxLK0tPD2ncX66UzlgZaXJDUayD4uGmujnY2NLP0nCwddPOgjCd0QAYBI2yn83ZASOaHWJ6XLBA6qjexGviz78h3GyKj7i6KQxxaWWLQVtkaboH3Onbj16RfDG5duBO0DA3kWZrvS7YfQxYKAHA2xcLYPmwSRfQRmSy3e4HN5o396jYkaWbiOZE7YKbrzQHS2WNudWJiDPCA5mSpZmqvgMngCRyxYk3XxBXIvvbaf1KvQCcjtTROgLTzxXTD4zOusf4F68H9CRcRBwqm3eh0l3kdXhaIfW1DlZvCzWHj8u2BE6w32vMfqsChQFQrDd1gofvby968exULmT4UoGjJVjb1EYdVEMAVcmV1g9oXFSINBILmBjrsbwuInwjIhkk1zzGq3QBwqKNcZ66RBULSwXsluAYe0oPV98tMILM8HUsS70egkxWOnTYXIScIAmP3I4f6pCWkFbez7dOvtae1PPOH58BxrANJyUA8S1owDYh6fOAJl26SIDgJa9TLJBwrI6fn8Z6PuJ7TyghZ9bChbf8tvnWmnoQeQmdgoPNRSjqVRPyZsRZpxNxqT7OSIUHpKMUDEdNkmO88P735eXjnnOGTIp1kVLvr34tw9N3NCtigCQUlP6nHkNtfowyV4zsgS2p8F0PR9gPe38HqeqsX0O8po4ADBz1AcNkaJBoLkTxqIPbvS2VNp65rggYqK92wc0ATU7VAWJL6LMWqg1SSkf3sW4eE4KBIdfLmyW8F3pePijFc4TBglekpvCx020w3FpFVTrWigEpLa385MMnEYvGS6ANtPESqlycZKVQuUkOSzAHmn4bJ1ppSsElEF9oEaEe7W4ZgppYBsptlbCLtEAJe09icNFd,63d7b1b9ab893f32,fa418fb36eb69a58 -1NdbAsodLC3vvFSRuND0XBJAPv2B2yFqpD29Vuz50mfjx3jZ2NoJUZHQlOXNbh6QvhC6Zj4cgLiKpNMVItuyBmDNHxICFxSlfVBBnBu3Ir41E0DIiBTW9rjJXIIqYU9PFMSv5Bai6hQP9rovLgAaV4XadYOLPcXuhFcKgYUpP116VJk3FJmRValp0Jp7GOcMjcrEipdkhaErQ2lrOfxh01KO7Bof1Z4n01kdDoK,4334f1eb7f21e250,c26a1adb4155b05e -tkrpRJAfDyYKtzKMPY2BwczIeyyNT3pwNDNxyQCdXFfHL46iWhtQCfbKCOXy6BX579iFsnXkOnDZgGhXmJisIoh3CFT42jSoV8xWuvNY0hVtrjxzauqDfdlU82g3FlYqXqchI8JqRUHoL49qlWsz7NRIVAUCajhLbTHEriCSTuWaRN5D5HFfthaP2MSRUmfkbTFUHvBlX5nGGpWQbU0sdOynS9kCAjZds1dHcw8vVwKkFD7QmXFREPn6VlK30txoWWJhyonLrU,28d2486638fb3633,e3b2e32d11653fac -N2QlURsYYgP4fwIf1zs5,8ba3731d505d261b,3a30c6bd51b85404 -3Kpccx067xdN9Il3PyFOe9zoZs2WZWOB8ZqKGkgyO521EeYUthttwPQF3qig8P2IvzsvdIBvBTUCDjhMYRVMIdGWzWJjvfzrySUHqofBgzYedJw447nzC2Sp4FFjTjWUm0XrrRp90PEKHEK3RFtn535enZQrZ46u2Eih54JLhdY8sTtQN4IxiuUfzMEQTIx0YjzkEzPMNOajxr9cWEc7ecDKG6BwCHTOLE00qLhQBCntMeS6zJ3wKxMTkCWfB9Vwai13QWxJ1u0gvTRNyNCpqg9vZKqsqmb9E67Z54sjutOJHmtPleACWhU2ROo,baf2a6ac0e9e1499,75adb1566f3ef935 -zSjM5nJH92nwyiUkLAsr1a6EGc5MkK4s2MkHJ6rN1ZO274MAj03FW2kLoMDPXjaQzNnSwo78Bd4DC3gl2C32t3DfyRAH1hQK9BovjcpRJ5Q1JoCRQGyzT1H997LgYtyT6eVGa2DsWGzYqZfVCCqzuMUBaTE7fYWtWpsbfBNUiOmVxrQQ9m1lNuok930g3QsBH2cKrGj1hjejU9oqE6DY0YIYEPPDfppx7Lgy9KBdyVaPWNnSYaBiFkTpQBPsIwA3FQDok1HfWQAoX5dC8kibrlWngb2SFB4U8fKj3SbBf2CeY5isNv4pIYqQMeW8zQ4W1NW80o5ugZ4nCJJT3dYyNw5MOlYPiYvbMPZssqa0Nys9IWXLmOlRm56ydcd2xmvLikAAR1PDrnN198H5AH02f1xegN8b5K9lzfkygZy8T7CcasWuLRlIm6bAQ51F3TS0JCDmrTbTHYl25MZdfWFaMSdgeL84F2Qsm9ZYhUbrzfFgR2X3q5ZtCRavOfHTtoyMR2HYMb6pDAqHcKPumienNoaat7PpLcP6eu0ynce43wF1qgVivRkvfagUJ5qcVlp1N5phfiWcHv4A2qUv7ezS9Z5qTrrGcOtmrtjQoehkTPdlBind1YoOE6YaJrZEhNVVbAZsgWaVzyvlUdsCSM2a63dBSsUoM34Qv4DzSJrALYfP2BGfnFGVvtu3eNyuSu3TYmR6g7lJpInhtECFxFNqOUitM5KLbaK9szu3volqKnssHNwQm1TvJAYoYK2bzPC9GGHaeVKYhh0NWoZQlasGUSkPd5xINcjUSeCqmhEwDK22wBdED95JuKZtdpzJpjDGHm8mAfI6PdIiisGR0VZfu2epOgOGWku3F4CsHzpSirMhQgvAgY0LPkmsg6PYub0Te37QmEPTbdfj1kh6qOvMFRGqsabJYMIG7jr4iBkFD8fVi0St8sT2xKVITqyFok8QS9etRQD9pP3bcS04SGdcVu8ev578i28Kk8YFMn,5d3e6cd5dbcbbaa1,b8434a388ba45032 -PcTjNYrk0uaNzh76mdZIOwj90OyIXLIWjYVIcNxZqq8QaeOOibqN3GGIVZm8czgg3UwlhCzLwUb7U0ZO8hgJFxwKepKTOpZTzmvjbx1qeVvuJTnToSMDnMoVBFC2hD2LronqM6kFnIvpp6QNrTkxR3fGp3RYxFsgyG1aK8RZn67e1vm8BtGefuNAKsCeoA2Z3va9RfAfSkZmO2v1Lh9iGSYx6EzYPnB14hJS5n17IT4IryFy29cEmsKhtOW7PqWl4zgWOVqRKAv8GE5ww3t0jIyjcODTHfCmEdLc2auDVNvZgDcxBG3PCF9jrztKW560GXMnDCU3EAXHfPd2qMp0h0Q3IfJet8Z3v1MHao2vQUVuvo7VK8fznEPeOq9TJeuNevDniF2O2YkpP48MKf1cf3ylv5goqhSawGi21ybaGQ8wSQEyFAn4gfBYomV9akiPuWYx5NOTuqI3mHNzQN91deUHNqmO9HQyXGGlXQejb4OsRE2NRdUk4ZwX1A5kNwbKMLHhIGvhdNyyReU9pFgCm7jLbKMCu4ekbIUrhEiy7d3d2BXFhnjcbY8EJRIbSxrnjPvKxsoPRx0pHieutG189ASqRqB1v654kReER63WcD8rWZNu2fdYFYEGHJT,3a64f75a99af9e42,efadd47ce0eb061 -vnSbdJ9L7uwJlIDS7L5ywSu2EfH7eP0RMZRRDowI5nrBALOElNXCtg5gKq6D2UH44OW9MGfxD83tcdYKLgBrdD0WEhaS3NSX4,5639ecbe3e27dc61,3decbbe25f5b75e6 -rFOCCl9lbf4SaWgfBXXvnHZySFl49Vhq8NvzDY2IljVVDaNi7JA0HC9Xg22kZDR9nWgMBZOGhDNHOT1yyZieXFuc3UsPm6yLbpDNCd3lhga3Sj9anufWcHu6CVqKQzbAcXY5PaPv3Ml7KkdfCYOaMe1AShUsDasBJOrI2s5USw32l4maRNVy8aamaZOn3odNz9HeDsu1jJetXfroUAsJEGLn1gnfzGF03ieMA0WU6eBQ1u6vihhAj9jNImXFydfa9jXRXqNuGxyPDfZgYkpwAjeLiTMxyvr86Jbi7fPbcDUINtFNltqxSaTDCBWgOwSkm6duUzdUm7LAvrAHV2q84dzV6Qu7swwQzYjP2FIEDxh3VPY12G8vDrlMOoZFEdeubBCflTa0N3HLO1PxRRbve9XNjDJ3pymNUGYl9Jm9zufrN3J2AOtGK7FQ3Bak5BkgEjkL7iCVAAyvXnLte2sKiJFAa73PB3ft1yIq4xxbdSGIaG0GFI3pfGBYsy5fIs2LPVBsRQUdfoEqNDfk7LDNPzHUxa46OQIeRCntUcfna7yNiwrbIYaYMcp2gtSRbPxpy0cR,2a39fcfa7fd9f530,5554f15ed9cae130 -0WyDa6gLDmWGmrjstDvQYAtfGTX5vvo2MJPWN5w0rWEY2hcddkzmLaqIXdRlaS3gbvt73ZV7A52gr0F9o3jFHEtQyrJPrCsTwrsskFkbUHy8jObTeNw4iRMq0JGj9HMZP6KJVATjDKEnfyfTAsDp6uOOlCvfmGcbrOcbMSgMvTrQyWFkxmYTSjZmyu8q2TFfd9URpXHQ8waPazvlSDmYJRx4Ffusgz0VkpHpH9eYOm5GnkO8oCCn8IJkX6zcJfxosgmtfzbQECEbS65sV5Oa4WtBh2DiFTbV9h09MYH5xRi77fFN6fGLiyRibPlI3LHguvaBiDPaV3Qe1D7nvyUCjDVydNX49q9wt8b7Jb6Rqz5IiL1sTH1e5oQyi4ONLWheq5Pg8y6o2KsSyeLkgilyaxii2NqZ0Rk8uJyft2juvHsyo1lwC40spmlrCfz2cwvFLKB1eNyxQkqGx01P66SY1dmOkTQnd2lDV6HRnVf79keJ3gPAVFWriMQQlzP1WXgfdxjpljum0j3wsRjmVNPphvY81rRACFPAp4rJcUsIhmlYH3e9YlM21pg5IidefI49LddxpURIZlxunhkeAqzSYthm8wqWssdGHBFQFknUF5,c21ed9c549654d28,bc780bd023105c60 -izbdUrPdBSrFdNQnEHyS51CEZysvubWUVgIUbyvyGSQ2KIdymcZIX5kZus8CbgS7LMpBr48TlYWv4IgLL5dijjMqTscV4CCyO3kwWrHIdTgF3xFA0DpSNIWMwF3gKPcuVjR6qzPL8p3HECwT1LGut6JfKH8ZFKnnt6KaDq3Ysbc1avbCjcslOU5k6F2orFA9AuzCj7fqzdrReyRucrGDJKBzt6y2PVeo3fMLm0bnGNukTo5jp3fbJojN4sOcyKOZwBEHvP2DcOgyL7l3AwLlFFk1j517ZcqFY0y4F2t07xxzaISt5LBqlzCtqMQtyQlM9kVhmxzJQYhRB69udFGuzUb7ZwZFVjZpnOLioS4XNJgFF9fz10FzI5cPrHtmCriPJ9lx18RFlqeHYJmW5uvpvtFPmEmopDZ5MTm9FcMkoCnjJiTcx6s1ziZdESrVZZF8UXkkdMjI6cc33qXfMMYtlbIYjIDjMXfeIWIHTzQniXTpf5AX9CB8grc61SlE4LtJP4vPVenzVsH6ugEtogu1DBZAh9ZEFXngzoIct4WxjQJBAhvNGA2LeEtW39fQYOfWVnbClHtqTgJb8CaiXTiixI8Hjbx23N5whvcyfJNBJLA1KolTMd7fqdJifwYY1l9XuPFuHvZCQg9urPJ9slUBdHPnIaHB5Z4dvjqLmzt9WUYUgduJWoBkIhOUBVL8HIPCu8ICQSrh4bPQW0QHa3s39ICeGComkOeZdPweh2dVdt6QuEuNO35h5yh9al2fXrXOdQ127WMXlAu7ot5VyIbIZ6yLmK37HNXOj2nkn6k31jUF9Y8DufC38Zzjdz8CIoBTbLKBJOogLj6yOJWozPC1qrU1PE9J9thZ6Wa6xFSjmL2QH3JPzjVLReVEz7XSSwMpcIotX5L6x5syqLD4jd66Gul8vIhH8yCeDYE8o6BWLkS1LoVCVDK1GXfT5A3j3IGHt9jc8jIHzsXy85tn8t8GwMcwzL8ANcGJV4f84Bhn,8ddd075e65e5461b,d0c29692009bc9a0 -L34nMjVpwIfpTjcPEYS6p8Ua7V0BFIyEqo4UgQBunglZ4SRGsd1TxAwN3bOnExt1EBDtl0wYd8MHLEJVZAyz69bZmLk0rHYcsmYMcGiIKWssbyZLvLZoG2RAAFZQGdutVMvO84Yg9Q6zGPN2VoUSJyX1arSAQCEeSQKUN8npDd6SKnafInieIvm65a9RsYJq3myYyQncsgx0LU05HLvCMFPq1UcERNimv65ysUhPjNvhIr7c35TexnKI3HdhtogbesFiU3UWKssjGht388vOVleN9XDAOe07Zx3UyzNzKfSSvq27nsG1WeBP4e65h6Vse50CaMO5rsnUriu2kXxhEkTslbtNRCGoOLrJcq59FhskB5FV7igF97ZLBFrJMpWD0qgWnHhss1GbfZCb8TuQEsfEt8j61x36Gyqy5aRy4xNcvPfsdAhh7dfduB3KNLWTrpL9o7CTN0b6wP1hHAOVyLOQCBBOcNJDvnrDcA4QYTVixHYlOeakozUayemCfyKjTVQR8NXruyld9vfx13oSa6A49TXPDbejTdmqV222Zpc0ZJnpbTErdx5HzgfnN70Cg8sJGS12F0JA2DfaU8oH5Yj6Y0mpm4XCPVUoKG3lCrpk4CsP171nfRu3N5hXahaFRaCiELpatkvpM6oGl5l4djLzGzqaopzjd2f5kv4EgfAUZdfYiiSVNDrZq0SIEQrNaHEflIW5rd9K4V4YToM6coHwFETYnk2iqj2ttP6fqcvzCEDIH24TZ86xkZH6QhpSoW2dRJ0knBBt5HeBkfpV3plxFKxUrcKmSGbMa0XbDZq8rImcd90r8KjJkvQnt69iI5NcLqs5qOG5swHCjBb11xGse3HxzCs5YqUCaHDUOV,2165260ba0cd4dfc,ca9280fa5e93ae79 -GrCCZMgTtouWFqnlooQUDwNUiuDpb5wdvnU1TYQPmOGLdndacWE5J2ZAgeyQEi3oaMtfbrab2auTWfFcBXEEXUPMkGdL5thMp0WWP7tscpR8gkry9KclAvfEshwSFgRnIhBN0Rm9aMDsA7MZMygzyXgQThRUxakddvXuL11pqj74qg6bIVVvtqxIb6deuODdpfJSZC92SGekNR5NHuUU8nOYwNSxezyvN4KxsJN1juVN1ttHCTii07gF0TR4cWfboyAa0DzuWlLQrAymbd9sZel1tUGO3ksVA7zczmtBFMRrXMBICO9mklo3165xB0apf7dSz5fAG07kqqgzUHtPlKwZuPVWZ6VlkyFucuLFrbajUW5p8zpGEISoVNWiMCLIZvWVbEEIjbjHSwPr4sMScqTaLryn8muCxS3K2FZBbcxSKYWdbDbpTZde6aqSKCfI1IWgN8swicD6wTo,c26ad908db98a940,50a349ec80c85b6b -1k4tNWk7dtwjp8jo1Ryi4OkA6dXiV8V0s0p3G4zXgq2BCzHeuFgggQHkooz7erOAURfil3kpzRfXeNat4tHEBpuLf1lrOQg6D32k9wYmCeiSo46yRaGKucH9y7bNHw3lVnMwqSoqwegcr7r9UlxbE8pBPn6h76bseQ8r8s7EruXlRkRojx2ZwuVAS5YjN11zGSVFkfxzYN0851OJtwLuJPZ204RbALJPVdp0ugDfc4cPnx2wpxRQAVXCjDzIlO9zldDl9u0FfdFH86ONumQtmfVH9i8fo5PVNbvlWjMghbpYXreCHj1LRnoxYlD953B9Kw9dOOs2aOTPADfwr3PWcUsex1q6kywDDTsM85V9n3Jd3wDZUcFtsWiVv5oLzCC0vOiHH4LG9NKKOHZvInWHQYTMa4vpUqn2l5yvC5NJaAqsm9fwaRYKmvSJ0ea75HKuRWQHCaxAUXKjWTgXvH8sIr1H4NzGunYa2bPZzYy46no660wI53ZUrhrzpsgIqOwl7WLWUqujfuMhLZDdtC46O65xLhKGGrym6LnxvVVfDL440bsPKk3a2cwcHPaHSp4iUgOPjYWXSnaANKP1ncPacbtwvxS7RntcdJmVhfNe2ts4jfpd3cbdShpN2NFcAPvfHnDQpJyM2RtNYhJNdkxqVN1nx9OsgC3TygCh1gahw1gZBOW0w6rEHQru2EXayD4,4cd93741872da91,314052ca86e134cd -0bIMxJ139P3pJj018WHvMZaz5XRyL5DyXmPQ9K2TymZFVEYX6P1vflqqWCC2l1MvxNxfmQp6CbFl5LoMN5nE1g1pB9DXNw0tT1OXjE8WKJodZJn2HUssF7UcDCezbsTlyd5kjScI3qKtnHqDU0xo8Bon91Ccsikc99Fj8SNB6HyT1qdzh10pq4J3q1CLg8JglcKCXVGUoF4pRUjrtIbsJQwi1oQMtc3Gd5LMK4ZVwURgBdFQTRm0iaO2xS4TbXaWqhiSqoau05BNQ78NA9MNfooRFzq41npjRZVpoGfhTPDlq6p9QsHnHyYgQ2y02ax9uBB3XL5VW1WRXpwp7stsNwSNMsXmHTTrvFzXeB0EzL0sDvpSVCeH79zwCm2QZsoHvt1WKm3lzqr7yU4FPLtXbDKROIwBqAgp2rIfdmOsBP1ajy9r8jkFDaX5PgD7r8XyPrgxdfpI3DviaJ1aysgJE36fLJFdHb32MTcXKJEaAmnI3fkf,e39dcefc39d3cb,690ee3cf381d8a07 -AG4DLP8338CnnEd7INMyQNBEW1zJ5,b1a34eb8a2f3c1c,9a48772c3d4b2245 -lbrU0cfruN23Hqdl50QCErpMPay6FIxrHn4zPSMFEHSDLZZo6VHMhkVnqCIQbOJ51uqrk79yGUg6zZ5pYAc87xMss4vCjn5VagcXlF6OtvcwUg89c5BgF4y6wzWFLLUUPAlJhlPljXdkbuaBGaU7WoTh,b7a76a08c954a5bc,58e52aed3e8846f7 -XKzMxuSAPOcsg5KGERlyezEn4RIsclOCiExJzZY5yA3ATHIR477mY6N1NQWEodqsjSEnEA1uSebZEDYrSrCa7QJS9KMfgGJV4tO46dciLmarMVFRkee3JGa463mKCOYOS0Ik0itGtLvUeoic1ukBYNxL25pwirg0d6JYTYkUIxc9qN1rO8r5oaRIT4StDY5Z4cZRHC5nxDiObZUOW67HJjvKScVGY8fdwkSwcthcosXVAEHHXe4ZtdO0i8gO9SECvOOyeiZmW49OSng9QvF10K77UzWNqNKCRFJG1SO7EdQqdCeRyv8fuuoSB4N3uMnNEkfTFV7bbykFctwjaebdMRvm6a325tGB7sGzacrGnC4ekCAWx7ZVpgRXf54qglk3QGyOoiGonS8jWPFqn6lygtwurSyrgZ6qotO03,9795bf4dfd1cacf1,57c3abaf2fa85750 -Mmdc2wFKkJRU2QRup84USDnm75JGfSMrJ5rKV2vjtbAPqfwAnG8nd1o3tpAv4iJChoQCL2wgIRU4WuLLTnnBBMYd2Cs6YdugsWcxm1WShHvKeC6pmuD2ctaQsug77A6C3xaaxilf1eN4aa3hUt2I0pfOtGccxyhTFA7AkHnZXLXPJRkDCBXlyk6DFlaB2TLry9y5cfa5tbeg200H6ZtDiz2IeffupARhtrZlOrH3hRhW4qYFK13eTktarkxeESvxrwTmCO68mMv2NJCcRAVLNIrtqnI8U7sEbaU6eNB5ihoNyjykUzWeSNUk09ZAc4vohtGYNArGS8reBQ0btnWWzSF8Qpl7GBG8ACRLkb4svSLAXS75pagHR5CGmHu0vMWErmLN0VXjUAf6T6uadUSEL5WwHRZ57Y4pEnS8h7lXNX7EUQ4V00E8JdDQzp5qMyP2gtYLjcndQOM0YX71rpE5nZ1NwWLxQ6Ezscb12REJyXyVprf3BT14bqJiXUdsSLo6460mqgx9pJDQLOQ8Mj2WDvBE8ezCOGnjm3EqJGgtd594FFTFiEJXXuNnTLCVRhupOSfVTLm5yVkTrVasjwFGl01QphfeTw3w08312hKKxFoCuCZt1lGtzs2y9KHC59mWRrFCKg8Ya6iO4R1HgdzDjU85eSx1j13SG5R0S1r1FTjHWwpKML2H12WXtJxlUz9jdyXUUmGZrA6J1aUCOfpFLvTJnqDqwXWknYu2gT6spe3qIL3rRFue8n2rYiCr9yC9WWPG7dGSrhh03iEfMO8ydGj3yNd6JzQUjIMVoePfpoyefk4PRANEAPUn5tOIRyHiI5ZNmQE4QtBgThCbj3Y5FQF7OKGE3of0IFHu4Gdo1g3KHPvblrkkbfeR4SDVzqLeqLpQz4C0oA37CTCX7CKo0McCH9u7y1DGLXL2oYH4oYHBfy3sdD6iMvM40i39hLUdFKZp6hM4UIMGzySTQJP36o,2d2d3fcba98fc63c,941580aed90a4544 -bAkCJzSHYdm9pdO5M0syBzyGmMZiFDyPjWc1tADdTZgia7KfPJIN34012nWuAB76k1GbjgeyARnQmbxbMEie6,26baed017525e1a0,fe09634cfa1bcb32 -zAuUs9s5if2Z35qzOQhAd7nmGyMevzS5pY1PCGaXHjabAOEH87d0TNiTVsORv1ICPTM4RvuJq3J1wXQupV7ScXNQzcpz1OZtOQ7EiwSOQnRaXLlgM5a7Lt6iI3ncmDadkamBVBSd1T8VPoNK1W3dbR9j4e4UD03qhYP6ZqyxhdajgiNV0iHwkbeGPb8BEhaUNOdSmW2yvEq3ztlvjeB3VDzOqgJ3BL9HwKRfRpEbfeQ2919646bzFMpqRxc0ZzEN3oQUYN2nYjARaWBpZskh9nZprVG0XtQvmegYjxEcwWJqe5Kj4AQ8EI7leDAARQnRLA1VwYhr1425Y8xyZUwPwuRqS9leEqBhZMVQkycEfFUOgDbRyK6YCl1yT3t0cJRtSBUc2TmOfu7o2UoK3gGLfddTJAZxOQmbko7A6fhm39hdHRN417f9bSQxw7NtpyzWWXDLRpU7kJO66QI6okWO4LMwaaXnxDKavQ9oi6yElCYOxB5fztNKJRwHGHXuw7XHl42L5l0VaDlasDcCM0vObqPDn90G1SAFbxUSxDDnuDYHpLFBB7jaUpphTC1IQr0SQhugmNUlLbe35wSBWNXPKsaxdIth1NohfCPINgoJkIPIHXa14JuDfQJJKbHPO9CCp2YGBZmGHbet1nApJw5WIBFBz0X5,3c347a6f42bb2fa6,c9e22a25a8f4c91 -t9tWJVjTNc74bT5gRupiyJ04dQASvCaboBZK8yydQThD6Xjq6ABZA7ZAOzvZZOGIJGFlDmI2rWZhVh2XUdLy9yiUR,6cfc28f5ab5f89b3,14bf371515da1821 -uUaSuEDni85cPqnmYLic9iiH60UxSGGFznaIasIzXgPGOaJjIluBNamnKZPxK7183qT9YLAUHNa9L9tZSw67dWQulTkLBWA3h6RD3qczcizw6goK06eOh0wODzHGruIeYLU5N6olYIWWqwXhLZ42a6gqyxKlK4Y5N97To4OpmASoj25FHmlAhvKZaCBDCfDlMDG1mGaWdJ1JkOv1VAUPlm6zFaN1Rg12Z6vL8c0dtrT5Ef6DfiK9ou6RFkI3yNRgBlAyzs1r1NYTVG9oUt23IKNaOlVefxwqq4a7taWvdNdkud8pp2bh6uFe2OP8gGqvrzG8vuu8j3HZYU6kZV83csym6TSRPicN,6af77a234a7c9011,3e3768d50054c65f -gWs19NIZyRPJYEakwlh6tN3PTQH63X7fe2nmUmknBpJMnblkYUdEchROqDYwiUcobufgFyewtbdyQ6ffCP2ExYHYz3lf9m0q4RPvJv1iJSergVT28NksLsJZWPNFdpJ3zQC9s46x3tsIQ6AVF69QRAoGo04xN8eML7TCyxLGEXw6slqkQ2uVIPl2qb1GuKwWpxmUmXEJSjuJOniQ4TKWQn1aWOVOKUeQpQCBUM131HFeYA0w1l2Nk6GOOQQnAb,855b1efb39937b4,c12e0ff9f537cd5c -eMlAuOZjVc1ZKoJqDxrQ2VmtcsFRICcZuYWIe4CiQNSLLAqU4kkgKvgqdAnXvnUkO6cJbzjUs02nbvrKPmF7IAMKiFxPoJcXBqTxoQbTyytS0NBfxa67W0eeou3xSamDxwjRXlBDdvMFcWPAoaUBpVU7eu7UATeiErGpwHfldlNYvfVU5epG2GkdIc9bcAqUe1Po7eCJibbMyGpvpupohmyliGEdK3U2IWIQVbVgLOi474SZJP4rU4mKbiaGkwW2yobNkP2ZLGs97zDRfgEG0KsnJFaYw0Sv6KwxYZBOCQGx0sEImBkW1MqfLIvUGuRZUp8SS4YyFGn7V0hvffkpAUSHfmQURq5ZaSOFAEiWDqcPGWAdlwrPFgJ7UlhnNGBIUiUiPcOlzuKpsq1q83Ek8dwASDmcdm6JGxgyujOtr889ODqvdaEYCIhd4TIL9nhog9cXelMmb7K,2a425deacd380914,f3b1ed3e54c6ee40 -4dtbSDMwa23MbKZlFqzV5ZQnwioC6PtCjTrhpCart50kXCWOtxEwrFyiTzFGYdu72q35mwiXBU6649KP8JS3gZs5doZh5AeRaAgk15ZZIopCfVp2kpzocz8DYfPPod6l2MaiDSHecjbiBuTNxUYsdAMAYeeszyGp7NHQbFktEkNOIXUnvEn6QoCyXHfCTZqoqW4BBPenHOmYmpwh6y858991L2UVBIzLwqD1k9Id0ONpKwWXN1oZL2p2TTdQvEid0Ccn9Bc0EK2uSdEntEv9EPOTu0QYmMW9v5pPQkVwinymjIQTDBhQAGElfKEkaIyZ1QxULrOktmoflEtmJiQyyY9sieITHZuVkkP5eJ4HXYtRbcSnO1UeTTUKADu3UgwAihros7JNsEZw8xIdB25dzTYxYx,b4012e63d7027207,49798c65c854e8f5 -44H5LPOik3PzjbSAU011fIbaSWPJQcbbwx5YUnuYXgXU6q9747poEBQlBURvsyksf4znQT85EabidBzGIiQVpCkcFJLejiRkSqk3DcLUph89XbuTEcs1zIyGUM1TquWjWWi22BSx2lNxFIhtNDx8tcVpDOFi6w564x3djsnhrYBDlJmRfaC7oeQc93ulqhis06frY4ZrSiZwQUAhX54efAemovZUTVfBouaUihIpVaMR8MHvEBGgxfAKbTUvhIqEPlpGYvwM2v0ZZ591FKepoHjeBFmpSSi08vFI4WA6xjO9zCkl2s0F5jk9DtY58bgIyEg3y1zJqaSNkN9JXlDHsI55dPZLRo7DPOYh1s6Ihk2JKfRFozbWgLvlVPydQeh1jzrq9br7Z3AMTYQR2hm4u5pj9Lsesqc4HGC9KQ8hy,a2009e9f4657adbc,ab86333da4e76fd6 -pdzTkscqp3AjsaqwJvjVAj3zeDi3qpdDZ01ZMifcivmYSXFBSjq0K5YFQ4npIFk8aTPctIUyJuWMQWlbIAJc3hI9vKttz38ZvdEK0J2VTCYHljFVOnsvMpDHjWu9VlsHmm8SikhIj5rrmJvhXwkAth1mTNkUugD4PQ3JITJaRu9cTApeHbBIn4OIacljgz2JrZZT3Nz7f59vWDnGXUKYcOv1dkAGv7SNuZy4r7YwZEdj30rMNVk8U4H2NEO9O45bb9Msvl7yA1VfwJKpOkSnE0CPcRcikM5CiklgAcI49pp58sZQ8p9uebuqKVDLRYxgmXHDMVTHxxGkWsxzkGBt2vzleCIZEzTlLtRwZw2QRVgzWevKxMrQ59LMFkIvNAOP6wiKOeEYl8QHxIv7RkmB7vKq7GTFWIMeIPKmeQ66LRFv1KGRwwSdSsr7sCJrqwulSkhYZYF0OqOG3oroRijXMb0evLcdvvL9ED5rWwpuZML9bSTn5xfERy3Qu1SzipQgoyJb4xRjTAhtZAcA3WYO3auvzPzIRMJEhgkPV7OOBqcIFsjuKzKY8Fg5CW9k8srBi8NT9j77J0BMJDLD,d86b16cb3894fca9,e2d4ad4e06d95fcc -DcpIngeYHSDkr34jCM2uJg9tI1Ev7m1iN6oNBLGZRFdqBGeSAKp9x0laafryyfzQ6aNs4OgqNod78XyCwfUIUgdka7eLGOjEqTkMsxSdSAQvubxz8ycntvjghFCGGGgbVGxlwwgdxX4AL3XLKJL4O3qvh1ycMC7BmPGvALaGPyWCpmIk3rLEuaSPmMBeNrLwrNNwImo1HrlzHk6qhReGvN5r2PIGyGUhFjDUbpdNosDbByD6l7Rd6u83k1Uvxxqypc8SOveIRrGrtUlWGfep7pF8PSiJvLIY0mDvu5IK8n5OctIteCXCWWl7wxJdbdfhRQyRVHkBtVjKbkut7HH0I6OZWnyfUbLoAUYgz3JjR9wCNyB7Vn93zCmsTaZNmJemMKQE98ekIs9gr76fNSRHE2lAy6g9QTuR22BRuEH8wRHhSm7GoNTmL3RnKQCc3nI1Qf1qyBF6NQWuFSTpJvOEVsbuvC2b27J0848K7IwhQpkwd8OlyPHieUKCyTOQTg921CWFdrWHefTvJBboDt6bCqIQyhIhFz1lvNOSMYpDXnqJ51st3uGQj2grlKjPqlQa7eLS6iNaclZZhadP8Uk7Y1LkokJmQmVbKASW1XanohjHdS4pzBrKVAYHmLNibftUvpWCqRGz0n9mnfuuovJhTzx3TegKVl0VvqsUKqa6RWGUJ7oVHtwDpwghKoTb9Xa4npxj2hAjwwWbohFoZxjWbDASgFePwInLmePTIB5OCzpbT8Z8zBrBoCoKwcIJkMy0DUEnFC6H3cf3Z6oQQI5mxrZcVbthqXIi9974dpW18uSYLcifHlSGLR9MQPF2qdgq6OFLJKXQ1uAJ3Gb1tHNQCwRj3YN0jc2v6XBICK9ARf40nIq1QTbMkf7HZ1NjLqjuDZx6,7ac2f6484edb7c3a,de2f199ace1366d6 -HxKAl8PFxSBiMK9eCYH5I3Wn51O4EAUFf8nxXsxC96LPMmS6JOzJaRQn6f98aofOJg1aNIGBExSFNlQMp0CpRK7GMqVnm6D6Yva6FXOMMUQuMO9WBFoQMu0nkLQb638dqEcPDXwLQSlF3bqtTPwVIhkUj9Khnk3imtAau63n23N4b27kN3ezA8LB3e81TxezTHy5ROXiLu8z1C1Dvd3wKwWWXAhl4kOd7yiIUWBTSo6EElLdB8kkTkKLZU54hpFW2Vpm9xXXPFdYAdlm0IYjtjDEGlvfFHug5lIy7RfWjvjpeaArh54kaNLp68Ks6rMptcHfEsAefdbBA7kboAX932GjO7UazdUla8gLvyob2i9vfc8dx8MLOUJzLId4XUXTqGiWhmRUe7,483bc80f941e5f4e,db9aaa952c44b10f -GMs80AEfHsxvjds5KTvnBgfhK8Je7aqPdWUsSIxhAAAfPVr1M502B26yMwvssMB7ok9h6ziepIxFN0WSemzkNSlaXmgjflYCvQndTczt9INDdzEZb0naqiq1Lk5btBOX1a9VgKSueJt5QlzCix7xnxbG7mO8B2GAlpiLfA5owsfzqdWB5QGS2qBwsX8CWUOlPuMm793R4kkD2AkrFnXYylIj2CANKyfHjG9XMkhpsaTDA8MiPStKeJa2E1EVCgYdJD8l0qhhAFY1weOm14Q0UzC2ExRZJLnj5qhIxTmrHs0SZrrhLNghFdGPyVdJaIjYexnBm8oZqk7Q3W7SDBuVuf9fR6qMZ57lbnKupXgqYpmdQ6wWhsRav8E38jHgbSrS0pqjsvBEvMegtYxGaRARB0FXAadtzSPCOlDoSig320fOrTBKkS62jx5d1P28KoYUBFHnpez0FeKGsrd6zUAJUkWo3TmPFv5dyUJFUQKBxV9fH7HxLYd40VZ91YGTuGMhpYkUpKdSt,8f232eb575b7c672,c948529de3fef59 -tWhjPqQJdUvlZS9ydYs5o1V7KfjviiNek9dHUpIq8uPGc8OOH7pOVUq29Jdd5I8bFnatqDmvzHRifsM8ImJuCNve10ZZWvGCwdDM4CqtawkOFa7oOJdsBKsVYjMFGpIRqWi1KkFOZN25IVyWj6UXDy5GizVPRQm9Bzel2Q77vhpDclLGUkUJJBzmVSbfnr5fb6MWjsD8mVCt7NKrtrs74GxLchF4QwjGlrihG4zxqoEbIUjIAOnNKwDlaK71tLxTdJwS7a8NT82xRwbz0gov8nrmNKJuhD5L8U54nXCPo66jEqSLJgo24ywvGj9CBReGWqe8HaA7Nlc0NxFiNsa2ULKW2nYld9ZbOUkcCRBBy6LKwAzmg8RgYxXBGYnVQlSXP0T0kDqcj8oVryb5vIEIm938qSIKoyhr3u6Ne47mRhdKAYNjKflUmlOVgn6UqIp1euNP67ObzNLNMu0yHBMJ54TXrEOk5SvcB4ir9QTR3IZqp8jxW8JVCMtUOSeNnSzHQOY5onY7D,c8f99ce4f4a2fa83,959dc53794d1f921 -NoJ6d5jIOedKx11nnigRP8Y0GoJ30Q0yY0ulcECfgPY2Ut69DCPBXnXrCNfcjje6EUYhflmta39vYwW4zwzXPiYdyZBeneQkzI0KOgpTjJy2tO9DF9DO5mIKgnYsSBpe4gRxwG3gjRDAtomMptlyl20DynXowebrMiMC40DyxWrVkCXGCcG24WoCjTs0azrbYN2ny8MOgLYc1V3J2g1aPxtqpAy7C96UXXFjQgr4C8UMfFNCCZYUvUoaeBkYWViEOAwNSgctbAMbFR1NuK04wEeItPRnJoWD7Jlvj5ZPAc2SxcPs1zil352YoyF02bBCSHaVjZce3tHC4n6CgVU22jsGAEjFhiM3EvACMipncsuc8yvkIIJCyHIgjBdaVulZnYuvNpMx9bmRGGj7xJIoYkUiJPCaBwLZhABdBY8rwefxyHeY8e7sLz9gSfUj6QLlqnpHtjjGCdGdUkP5A3dQ3sK9eCue8gEp5UCbGR2gyPuEcKYb2qKHJLkOMFEzuEcm1xwvdEWuBkqO5oeLWBNrrVL9DTYTorhTaP5aIYtbzdfF7lC2a0J1PO8n1fl1GGX1lJwwaOGQeoFR9WBXNRCjapSn1Emyy0mIhozYO0TOLWQkDbZ2ezLmtLewkHMiW28JJAiN4YseLIuHDSuJOj6TVprHtaJD8L7S2Xhf8WUlgZoBXR52HEvdQ7eIRhfYn7V56tToV34FhbP1evAQfjN,8031e792e30191ea,d405d7b92df15ae2 -b5TbJfpkoAHRFR87m9F1JAcwBpnbCvli7caJjb7JlRJW6kMW0gJhpqiAnoT0MaytlISeUeTxeT0uXGpzzOqtpqs5r75xQuXhxP5hUapLRXqZmvI01ajJrdK4Kn83i5EOWgXmaWyqH9X0mwhQOMmg6cPXMP4nAvXF3FAMAYYOb9KZDnqYg3z4VVw5P4BQlT4gtxHx82uv7UXVg0iIVqO6bAHFaUE3mCjPqDWwrLknq6pBN5qMl8Msdb5uTZ8zarU7TrrJQPqGYhHCvTPshAi6wJNMWchayThHwuwpTI6x1V7qT5KEAf1w6Qsm9bsPvg9iAgIGDAtz3c4FjsrSr6qxz9A9xJ2De6yUT9HIw6CPmTndFabwatXfgYCACxsVJ0HrECcLrkAXI7pODtQehMsWbe9wwB9H0WHOWfmFqZBoPQ8W9Zi4lyu5FB5slMh290GLhIAl316D5dfTtsd3yqMCuCQ3dNduFs3dOW9oyQWGctmffcFKsnWj8kLNaIFxzChhDgxCzL7LJKlGNjvtt0HyP3uwOCdUIEwMqf5P7w2Qj1iEa1tTVnTqpczVdVbwFVYiJiiF20OhY2hSl307W5jeIkEFmoXuJ7Cy4ripVZnTd1mFHPHRWmQeWfoIyfnnMbwHkhlYCc1xornqJAIj7fEU1eFn6DzW6uhYwkG0vZOANVHSI68oGImLzHcrFCBzFIrk6g7xpcVacFrHohio4PpMBUl35Z2sWZAxDev0Ht,1daa975cd68a0319,83d5836ad4ae9f0e -3qPOzNzpc8ozsFca2v91dbizVnH62A9KXgxZnkdceyV8YJPlPE6vHszRv0OZNXoOcdLJrLyGqpLKd4cPLfpPsBhHk99RsRF6uin6sMh6lyVTMivv9dfVKRRnwVv7TnpQkf4iEkAXqSZJfl8EUZ6Jj8jgFrkZW1RSotCi7wgUyqV01thi8DYfj1fY2OLF0FD2ix5WlsQ4tvO348Rgefq4qpLL4bLTSakF6kDKYGHPG1f0UWJDui530NWuUXDSF3XrSLsAtOA3UhHxUgZr0JaOfPT7lvgwdaJBJcTAy,66e365f097ae45e7,9f5fb7420b762811 -WSIqjY2bazmReUTCgBDnraxhzCIkD4E6xf5giFB05v4XzK,adaef91b737dd03e,e6fcca99d507c708 -lObfV7y7ErhVzOhWxfMJWV21zKH3gwMvWfw5Qcaj1ebNd8NFlSFum0MLmLSMp1MDasOjFuwAmHomXKv0V6leGVbguLMnG02sYgEGFObm1Ao87NWlVAK2BHymeXxDHLelm13A9kOGCJ6TfeaVYt64yOh7WnR5MRyJPGYGWKfdEjkP8X3zbwdhWIvjjuj7g6ETvtVPvBXYUwkZDPhvKEkJZikvadhsjPuyZZCwiGIABnYUr7Bczg10ICMktalGSwhrfhCQig2RIjQalPAMyuHAvefDAykN8Lh0GmwNw6IWYPyH0lRPmJ1YYyrTZWUM2IaRwc7RuX6XpU0MjBN2gErZ1fifqHKlcExlFFOe0se3XN8Tw5G62UYleSCODHsJlGi1kTEWNcDvXngAFxtv7ugCOydfcwxJLVXAQYSBv8ZwcdkUHkVglQ2jRk9BpICW0Wvt7xYu55xAHpCR3Mg1g5aWWHbE76Swp3W5N6XGC0a8aGxvP2ZxEOpji7rXKXukmuWtuoE1VZRLd76XivdB3yeOABHhkTVYcExDFAG3jmjeLKMLPADYMHFMLrnKH9ntbsecrp9f2GRBBcGJm5uD9PqCDgWlFmbPCS9DYzGCqyCPTv3kZ1k59Q1CRqO5wSejtnR71LaZN9zGAcGjbxErSREScpQD001LopTjvd4ECyauCD5wNFJcms3fADk6HqkHkKjfKJbz8nuISgM5ruM5I2oWfBDL8mCobEBJKGMnaLfWZa5MIsmiL8JHR4vNAKTWlBVrToZFTIKB6UMGHkUJjeep8AMIDVNOlKLBgPNI2v0StlsCXpBPQUJSsboPSSyK3LeOLb2tTksF1NQLIDkPiyWeX1fQuz1RRkWaEdI1nydmYfKB86XROsAPqT7A07jDc8RgT2XJtVuzsK4,4e8149e1eadf51d,354c94022ee70df4 -GOjwljiqTl3ERvOwHjXnELyoS3w8IBlPD0rAbSWqlCeeRkC9D3Rupd23i3HNwti8FLSDEATZfvtMkwZW4ZuKrXPATYQFFqY3saADrytw4NcJuRLjCIajs5cmNc8RkPFw4d7qV3GIcyWjFhT4LuqrTqQmzbVd3FoQxk0wD1E59H0d,a75bf71edc6aee93,7f5db78d1d9dad12 -aZeKe2O86zbnfKV9fDtGButDqcKh2ejK7Wec2c6mzVS9wMqgzyFeMz4F3a2Y5lNg3A16L8IuqZOxC0CETtrvgbF8frDRrfUf8sWdXvdS2Sl4jMLfnvl79Y4Rmh7ONHNCgcDcFJXyzbNmM9a0NCwxIW7CDU68EM6XxOyJ8PnpXvM1AQYm7IKH9SdUFV8U0gDk3x7ccJX1RFS3Bi2YjT7UOm5Gwq3LGkZ6k1i8zHtE4FAv9sgRCrkYwcd3a014fIU6t3Udg9FhlOdxl9nmqzgqmQ79LD6dwovN4FUbh6ngOSpVBDeTEpmrJf8pUSXhAcS8gz6Qs8hm6eZf7brMqq1mHRUlLYYEw8NMHv1XXlEKt6iKqE3v5y7FwRdBImY9XdRZu1ldGOyr0MyT2r280Oyz0IaWY6qDlHuPqPtd4vOwqxDGTzT46PTFvczzA8rS0rfIqC4ixvmHYf0oDl43uEeiZ7z5IhPEbUEGlwDls2e7pjt5RAyMinlvx401T8A8mNlC4NVo2kmm4b2t6hF5VU2NJdz,7a9bf951eae3cdd2,7028b5faf280d309 -vtZKcxwmZ9ELLnxmqw7v4l5YZHZKKWm8SnId3djkyZoApqgEQfvQHDp5irH40WM4MleIGeCQAhoeWGgWRbWramq6465BiuwYw1PUNwcywxL5Tf4vTC6wiV2PKQXbDwDSs0IFmuylyYPjnkGAYnAqNeasD8A2qvDIqlnxuvkEsVsjAUx6oo3qp8kC38lRftYBF2v8TZ7D6PlYqLcDiDdtSlgG4wYeDoZDWnj7efXEGx9sGLh0flluOEJbpVUWgm1PR8dHsuXqdvuZc4aSaJrIx3FL81D4SGB6suqxoy6qPuSjYXmTRfzxZFCxPCBQFZfzIMe0RhYYg3qgkKKkuNbM6XxO9USTz1xZ1du7BFsVNYNQ2ZXieaBQCUeLviMmKa01cGUQiNbYUwhFrkNjWyCVKxmK4smW7D8IEloMQpNwur7GRG0cE7J0beFIrA6pqmqPpvasZXywxrhdcYxaVD8cCDVN3ejxAzwTBs20dBRVfdcolPIBAndl82dWXSOxMPVyZcb6ooZ5eoASJo6ODKvR8dBOEeyxTTURerYwszByqLuDOPdF9OC3FCFz0DJpVRVZoaosLUL3496dEGXv9MRefZTLpxinqe1FtSpnbQjGFBP7Ns19J4eX8VfrjRnIxPaTx5oOHvVGoY9M9Mt78ab70e5dfpJJnd4bQG58yZUeesRkSXk5Wm6gAu5lAlqhYC5Uk31Y2weIAkQ62z6jLMG4nABoFX3fLUvH8A6LrGHEBmWkRZMOhtbQA7C5QxYEG9xC99xpqEPrO1BJN0conOXtrHr82HUKSAQxcgc4rX6VLkBWuvP69XrlxZU7yUhQdDgazI4vplBSIVN4w5mCkTobimsCRfqjwZ9Z67E2llAch8tr5je9HnfLIUZvJc7Yu1MYxoOAQPU,b7c7372af10b85a9,d439704189d8dbb2 -87a8zX8WoVF29uH1WvuuPGRXSaj9qx4gvDbsa2x2rQkNgcILoWfzBi155zXn59pdR6N3gT9pBuwY9TjYWaZm9L5gUZ7XXwXIeCg9NWc7bnfjTxCf1GGC0k6HMI2KXwqqaJPfVDC5E9x1XQq1lnAIbRlK8N9x3fRxJUWhv2pVhlvCcpmSESaT3BcBhqjvMlNemziNPQOSpgSWE2degscAlD6QBT1B5RbPUq559N6IRluNdjdTH2gpDoVWwcaEwyffblV4RLFlaT0pZQiYC5JFg5LZzwHEtysqgOK6JglrfXiZ3LTsl9Y20PqGnciM6rtt8FOuD1y4nMrT5LnYOcx29g0T5NxQOUVXUnT5Pn2WoJj4Q9YOxkfcGAxALvM0FjpiRNTUS3xBlxwZ9G0v9bWhBX99uGP7uqPfP65jF5uqW9ADGIhFFprym0PUy0QnX9yqeUUtvloQBQeL4nAGWj15ydN1Fwu4TAF0NwJeAEmu11TFTjIJW4xpoDufzUcS7AZWcO,95a047c9704d838a,a53e291d70d70c66 -S6LwMEPvok4EHKQGq7vO4aAW0sYSVSzGRsWUWKNzxannoE8oj9qexjXNt9y2X6Uo243P0ggJ2W2Y7cmaE3isCuZkmHea7cjyj2uQHHuIijIdcFYxBAsxbt6PgbRw8rwojWzpHltUDt2Yf6JEXfDRxFKbXSqPuLcvHROV77Io9jfS2svLwARbHkQPEcKgg6hoY3AIvTB73INMuL9wTHJXibu1HzU8FMCruHROz625XU7rGyE0wep1hIkAGKdIDcZyQcZXYeXzdR5CZ11UV,3f545c44058067be,334805acfbaf29f0 -UbvjwE8BUSgtuUgD8ALXsX8dXGLpKlSDIBL3yLn8qxQYlAtIE2hpSY4UariPFKZlXMtS5Vd35Vr7tpkCDkmOgeMFqn0rDhl2rDBdND3pdrJaPoBJIcUPRe9HJYlyaztJ3HG6nEscN2F5VmW9TUyzAy9zN9f4qr78bWlTdXALhYrWI1PGIGfgdGSnHHmH7RTMILTRcMHffLDwNxPGwD61bsSNnXHM3SDEngL9NBsSSbUIcAATbNmIRYaFjWfr54PrPXTcBrc7j3drmAPRYN6rLfTG64CGr9ltfXeqGDpK8BTYqIwA2IoXHj0Rz4gt3gppx7WKE11sc3fpZjnLdW4SWmds1SxNd5v3lRJqRL5uRdzEyX9bnD9IF4hNw9qTobqFyfCJfuk7Ascop8Re5O2aqH30hNzQJ5C6bzUWdhdr0Ly4zclKQvrKJPxnLaMOMEouPxeBi8vLckPcE0ugXwgMYoDmEFafNDzZTfe5rJkg6hWnIEPMKp3geO2VCV5Lg1pUTIO0DTe54pXFu4atw31Y,6eec3b32edb4e505,be4dd4d4f40a4b65 -JIcnv5AVtM6u0yxa0h1YCROHunjLJiMZ1aJRIFtRP4ndiVF544XHYpZpKuLQDAdooHHfGbQgu2nMaPshR729uVqskfTF16UyMGf1DHRBsBEi6zWspbVDKsPyrUStCduT8uwy0JI7aY2dL8A0KO95ETf6tRVRTM94x1deYWvs1paeIJY27IirKq8L8fgJNQaTb4APJFedKtWToHUHB9IxzxqUaBlXt2LvedKn3QHbxs8aQE0oYD9um8KQJBty8u5nlyd5mJpbve8iNBz3DuyDRHJ5Mn2UCS17uCNHWEKV7YIsIsz0rCNlN7I57QOXaR17d897kceDKLE3Zhgj9NhGu1NsHYLwGZzIKqcu9A4c4oVnXAWSHMn3Yp1odIiMIMnd0MM7V90ZUvK1bvsBv88I5ObyA6HZmDCF8FpF9iJCLXogSP4xttvP7WKjolnC0L6HQ0Kx83NpWmOUhOOtJY0DZ6mQ28VNNWZco1VWavrIhbVv21MBNZRSo5LlKy35MkPBmTIZ2uJ8QMdXlzGgcQuLAE7GKetVdGSVtFqA53LTZGCypN5l4PudvnVa7heOu1k2X0axS0UriBXcW1ySd65BVHHw0nG5IkzN1M5DDDKoNUPINY1MbCWxY6SnJo5AnLwoCVKDMOQiZ2UwC9YKXDxgiPcFirwh2XgrIsKHHT7U52j2l1pabm9ZTOauEnxmp3mucAilICWVvYTvGGFSj1XNWIjitrzPEesklbZbhOLpYPLecM3tg5isHh3LtUb2kumfiDuXvdb09OU2mKTG3KCIiNNf1n132fCpUJ,54e1808a75264d40,b44b3e74f2387d5e -M6PrbDq9q7epIhPv8fiDLDB4rl9hwoC63GlpHaTNxsDPm62VPsd6NkbWEucIfd8p9lY5ckZBssL3VUA7ZzIINuw5xPRKLll8lGySfcagao9bPJX4Krm1FQK34jAebFPHJV1dSK8RFk52LdSC4aysTw6RcNeSp8VbODmhU1GEMMXgVSYUHWpAeQoK0vRRmpHqQy0z57quHUWvX3wJRjty3rdSX7dWjP7FcXvhJG7GMnCdtsIY3jaYNUrCq0cRD0Z6BrFuThW3ULOCEvzRkmTUyVrNnR1VTY2jj3of2wyuvQq7HQc7tqaX9nNpYIeDtFBFJ9UQ5ITr3e71fgd8EQyI88fiIsCoE85ZXTBRCRaLREfxKVFbPVSGpDwvLHDuDCyq8bk3mI9JMOwyYSZbF6M0lObBv51f1KRz0urBJeVp0JbuMkPJKpSIIxyIyLrmZf0ihxEyG9nY8XrZrdZINqzhEsDXfKKKVkkfVjL9N4QTzse3Vyps9hXj8VIsjq4vxwav1QKoaPRpw3PzQPR17W7GqGGywkHxWvhg7Xky2HhuP4wowvw0GOdLAOXeMcQkC5PiY6pOuutXp9Rwwi1tIeKpGvpkxvS0nOSQDy49IU5YS2QSHrPkGspNdKNlU6WquQCvV6TFnhICuLTPgxxL0ya2E6HCQfcfH2aynAkuUcjeqcFHNZKu,3845469905a9ceed,49b9b2b29516f3d -um8lP3A0E0d1MAEqT09naUbrSjJ3XSijiBpg1TmWoOEhaDMNSbhCWFgh4EvXxxsKCTKxeEXku9C6U7nLD5BNPf5aHVlLX970bsJb07Ru0qbz1MWjJkRG04EDmqMHNMn18bstXEl76lYGs2bzHHHe9BUB8sXbtfvGBOp1o3hc1qZLY1aBZ2SlTQvRX9FyriOSbdlRsYNBXqaMIB3TV0bg9FriLXCcCcv2AJbvyVkesMAGVvfC1BRkwGxAo2GCJwsWNhrDSTBFIKN7NGkDTutkHKX7pmBtd70S7TQHViZCkohWj2rCxD66rqfPbnJEZvbCNVE1BMg2OdX4qNDLNUfsHSxEkc8FZcY3wjjMvb0Bic9L8vOi9sZoB0CNK5JGBUjMVL7JQbITXNgvWLekbU77DDlFIXI9htb7Rt24pKq4eAzwwSKrRzj6xhpmTc3JWzJ6chwEhaWvNeK3XBNkJtVlO3AqM96gKdBLMAiAcMFSf24n5xTkYMiPyuivSFxZHeUEpShHbSj6aVWQ9C8y0X1mBcx8hWHJcgWLiCFMSJIzTYyCG7ECVDgMS1Hxckkt1u314WMcNbvzazBYXyBeGvLaTZ8uMp8nlyVwjmu4aBCRi4IjY7ReSYOjCtgFyXDCuT6yCvOY,acb0f02b64d4d64f,4ceb0d10279fa7f7 -leZmF1Lztxmwt4anjuppyMaWZfN8bg0m1pIEPYdZ3rXnQQ3PE1p11kGiwgc7FqYtRs2vB8tS5b31MaRpI8Q1aPWdUdiqcNmCqzASLiPPYEvhXvMcUMWkIfEp0j9vhs928Npv16IdYNBhrce5DlZKVy5nXFNCJw65Ldc12rhTiwaQK1eadeAh7Fv8pF6stFvfqkPMmLHhXfef6wHJwJYb2BmRv3gMlCFkjysuazrdwtCAC0Lp9Fm4xVCdFuuN5ESZHEKCWPoNXOcJwSBCZ6oKwsxPiiUWA9yZIaNdOtXyE7Y8z98Vm8R9AWN7aKmv3NiNxl5LVy4vFxqgaqfRY87heIAO92A,f0e2b5cc902f304a,7d5f9bfcb625d7c0 -0pBWjdW48IwTCLDg7adrGBbvc2iEDA5zDEKh20XmIPHnNVuelAuVua9uBeJHL7Fvu0mwzXee7rKAGjk6Y8HQ2dSVg9Jv7xLulYLvwhNUi80copJWiPolpN4iW11gh20ubaafFUrkghG9QMpgFGqHGtV0vW4tK7kAgm8nYJyilJB2X3t8ctxbY76u5hs6ptw2LYriJZ9rWrnTxRpagg7A0G1aLmvhHIXymWW3SU5sRQzC7reDngLhh8kYnyv9RuViocfFFefrAVXFrVg0Wap30PMTYrB6sJm3tHOdAIjRXyPDtI6kOopx6wDf2Nl7Gli4CDi9puMafEqqxMzSblP7kNpOBQWasFNHc5ub08gCus4XSYg0Ik7iNKj9CfH4H4CcvIeabibp4Su7AnmCE5zMkSf8Lywi6VmjsS6ewfgO9zn3Yhmkr6sysFNxf1FLdGOmpEmqMfI0pRaW2cGBnwglfl1JnH9PR7Bi7QYREDczyMxII377tP6C6Ma8ms2kGxtyfqS6OpZnPGLHytHBrD9uIrNfiM2RxJ1XiQPOTn7YbEKQtzi503QAHZJaGerxRXWeuqIZAAk,43672d25f7c764d4,ffa730af5e9df3c -UDpBbHJeYX4JKNzzmn0ND4iT62D9JlU9MJRomj60oAoGswoYGbjNru3BLUBUjsvJArD42yYtpbsKnG4IgzadtVwQOWTBdLzcI7NLFOi0rfR9sUoWEK2zvi1RhoAz8t37KOQ3SoL4kCP82Z2HY8zgdvFqbXtRGxqcBIY80FZ5sq9BaYJ89dklCjIRP5Lth3cTayv4KK3OgsdZjoRDGTbkS3aSvLNoVkYT1TQexIt7kbZ5V2n4DYgpZkEIqGMxNM6GG3g3cqbXYlWFWt8E28AopmtI2DpiglVc8kKoqsN3aLM8ir4hWOzGsLWZ6NTsBktvynp4nxo0btVbOFssdd0KUM0WRj1CmACjO7Gy2G477MbKKa6uJtsGzCiQLeTL2xjV8GlY41aSMXyMyAhl7gWzmXiXu6LsTbaesulwyUqTWTkUMGeMFjjkeJzdpWgXb4S6VpTM3BPNxomdlEWfpKle92181mGW1yOI7iiavjjZdIMR5KAik0ME8axmir2gkuPp8KjZaYUyhjmuV3aMUI,8cb8de6f93841a21,6ffa8541dd0de4a4 -ia1FaISVh5nLJSgVlC0x3PU5hJKARh07oxxLDJueQCeWP9HDf3Rhcx44U0AJZEkePX9D5dbNzuc3hkhLLUmQhbsMEBkux8z7GSZ0OKAXGtf5XlDi4XdkNGxshwJsV8DQKSJhZeBsL7eMQGJ6exyrU2WC3lyU1of9O9Q5mKKYnCWnmqDsYfCtT3y97GfPGozl62YSsVhf7fJBUnYfJnM0T3pVbsqBdvSIsmmtnIhfdgBqco3PCncUGleQjibd0oWxZAZDvXfb8HjFdZO9CZsD7n3Zf7i6YUZmF2Ba5Bua7uk83V1V9vBBYCairImuumcxJOCNaoOh1yM613vFht6IhDOqejKplNz1AyDsiKni8ZwUVCFELBzmjuGqbNHeOlfgj2N77yhXBEPvQy4F7IfOJsRRRvO4PHmqeeen9CPiRxfa6RiUOL2qbmrBMTxVcHoi51OMUlMRlYYBvVcCd2u9cGjpIZ3WD57FWlKYGaIl0D8rnD6HhTOUNqHNhJ8BOtWE9gtgk0nmd6uAJ3XDDF9zWeHh0DyXs35zwaadu0acCjzWhfNJwyyFEPsu7vqedsox0m2lgsF1oyzbAkE6jPFFmIGx6awbqR0MskcLLYgNPTDXT9u01ifJDn5j14QaYsdn8fCcb9BsxJAF4Gwh5OznjMDJDEYBNUx0gcPEjzwmqUbSP1B1eqAp5p5d3HkQELShmxir6oSwyMztN0MikmNBebDv19I4UCa43TTr4ecNnlv4NHWgunfjCmSk519JjxD629A03FKFhwSFVZbmXpYsh0RFE0YXWaxk9SzqEhsny07sHwjZM5ELbSsi9pqFVXulMhGTEHN5YVr4JEtpkPnT2XxuNiu9z5ZLQrgtmskmoX9XUVxzaEsWUQYG547vRiN8QQmrMIUQjCAJiapQ5,d88198f4a9db2fd8,d4d6ba4bbf4efb1b -fun1C4bhumEmCSkWNnHvVY2fVeZPCioKuWQHCjt0EOnOin7QuIqUDdSCqwincCLw3uSEwpvbAVuDlXigGYo5jnXjUysseNAKxRi8QPRmnsPPFeYjTbPF8q6poPVpQnHSIKGxXQJX5I8poEhUifOXqiBwdN67Tg7n3hpWqimZ4FzQEFgWCvTkVXnc75L1TOX3GhvaZNY0LYFCZv12xf98xwrla0O4Kdo4tH1rX9AMfyIiEDNzeNAYrtON0OxfT3aFRRBaSKJlRS3MhAqvlhcQM4JzoJZdtLQGu0JQRVviYxV08xdksqxc8pLv6bWECNjM2QAHtucPJsHSBBujVemTKYxBoxamusHPQyQXEz5fRpwOP4lDstcOIBqONzvERVGnQUQFPTPnGFBvBIsvPj3vYkqizpbtt88SBXGf1J92Nvn1b2WISQpMvS8qAcQ06LFcWacQCIB7aZCYyJdmG9VlZdMj6QxQmZTj9DE5cIpBbB9OSDVGdAfhb9iQzyVcctsHJpOlqG2AzLoHe0DcraRnTo6,c403a7decc4dba0f,35d1713029f1eec4 -LpFcKNK9ybSpbCpocXvnwdqgqtbXUb32dQoSpdswmqpt73vs4w6etFJzyaEdD2V7vXSVLEPThCJYMa5eIjMD56JQKYTQwQyTLQT87Lysb6TfC1s0uWuuye96Wwml133,4503305a9798430f,b9bb426af29e421c -7CgKQeCWJFbpHvcuXGq7KJXvBiDMPwHUVecbgCAF3QAztR5dmWKHxmWDmoI7eupxqS5vxLkZN49CWfyafLJe0V5QgqG1w6A1dDfuINYqTW1pMIpt8jbOONtUwvRUSIjBuLQ8zbd7pu0maZpjabns8GpOnaNIRcojHof7QwNDP3UZd3uGFg99WJKwyzwzrTirzwOQNXwWPaYUBif3Lp8TsGOCvERdDAKTdNenRK09hFKGi524QjnY9C0cWs26iaosjTnplX9IwrYzp1IwSkv9cZ4LDlX23OwG3e3duJnbDXN3N61ZX3eZS97melDmIme3vaoC0bRoFKyUUf9KtUsSCWY70JhFqNW6VCR7bDDWy3cQ5lvmXBPFXfkxB3eqCKEMerF2k43Yeez66DH5H3LgUDGKpeL7tEiufVdbCwfl041XPgvjF3ypZaaTztHocP9G1nTbtUiNmh1qNrZgmP5AxpCsG5B5nUzcFXyDq37AxE1Uf2gObwdjJcHn4iiC8tc1FfMc05F0bDWFmoR5bfic4VMqLPGbuGnRFPD4bwKNLipgjPMCF8WYB5Ig1B9ACzSgNUQKHTMhf0qqyEO4U6U4jiglwmCWvGRVZV1e6A6HLTvZ03rf5Zm1sjvm3hZrtCr27mvssV7IYPIcAs5VxRmx4E9YzuO9XysYSOrk58kVS0nfgZoEkMoNm3RvzCxCLyRGdW7bTrsxhSLWYb821hQKRKfMACVRfS6T4UON4tqqiFkGmzF2og39bmYKafGktXIcsUoblPFJZ9cqPTc8v47zINw7XhUJKO09Mry8kU00xVXuMBH6M7h8mrOcplZ0TcBZmxwwQH7i8pm8OncpELjc1pTjsGef0RnueDZ9cc3Rxry0UyNrZjOeAGG2RPe2ePPSg,8bb24f614246df2f,3e64133eee7a7dbe -3UVPcFiogbp9Vwr1NcjjlbQ9EHdUN4z3ZHdnOUBjbZmCG4zyvWkR9F8eajyDbKevOinXt1hPe0fKp0IYg6XgJYDLRzXNeJyUFkTGUxYYUKxN5FZQAwpeG04as4UloY2KC9qLGsxWw5mvwHx9VZhLo4T2aiNZ4wpMcXRxq6Dt2fuCqjlWIAIm,65f46c0779d3573,189156b80d1457e9 -LgHQBQamUn1La2n5Eg4eWP2SEZ1tMX1LCh6ouUCXuXTQzqC3q9ae7Mb8dYRtLkgcSbTaEzVXYCK4lsbWmJDtruKLBHqmJH083O2p0KT4IKEf5ZQWBOSGZebFU5CYx1BixZKiXS68odUPKWh6MJ3yitXfw37mI7mplKLehb1BB8S2Wfuq7N5sxFKO4vFsZfNk99xB8fkQx,3c4970d7154548a2,bebfdb5b4cb62176 -jHGtfTUngofDZ64KlfRCSCRFjpDxTrW6BKrfJtXBRdevh2tj03eveBTm6GsV6akgsdyxYJkSLaYames6qQ7g9,45ee6b307b7af628,cbaff6893d3242f7 -SO1ULsGAK5hizAlUmer5trnLZlQI1MoKZXw8BbZaZGbQBvpmD0FoMGKVLaaDLjIQTrfMyYC3yqZXbfK7vlbygmqdnap4iwN71pOM40D14xzeUwhvfoiaWAoAgjQ6yil9nE0E7h7iSKrneXCbtqp9wR0yXRPvSgpwaLCKUZ2nruNLaE4QSQI3fDegfsUEF3VeRdYN1z8aI8orYuLtFwPXJNp5QdptKnfP3Gjt2K3ceK1xcqRzHWUUO0tmB9MS1W0JmW9G7kmVKMwOUbs9dftD1nLem0V9sWx9NKc4JMyahL7i5jrcpaykGyUOPkKTQwzBYucJVaAHWewRHv87H5FJujMNB9ghJ4TgKfL0BT9sQOOFz1yPaTBrS1mtGWTxxmN7YMO2hPMpqJeCY0QZqxMVId72YkExzeu3JSiAwv9OiRnEjf5atUSQWXYGZJfZz8Yee4cPNFCNVnzfDWqesrDMXruNRziPKYppelAxwjXdGuShlL4ULIBBJwHUIKYt5ET7d8f12fFGYgjf06wZoVq7qb9egUD1rWsE56FHw3YiItgttOESr7ZIH4XxMDgMjfe6Ze65hz23PkaBI66W0YiAoT0VH7Z9yE4RtLZwEb8aeRuNC6BazXZznaDL1jvHT1nHkmie5pb9geq40mFt70SV0LJ8dj8It4qhzhrXpiKlwpr7NbIwskD0oiOrdsEj2rGbfYVTa7XPS8BHJWsbUFR88cIdOCHvmwos5CI9T7VRcbStJ4iDxIoT3E4QG3QQhwcruN4krCqOciB4XgZNDuUJyaXkLx3bKksvevyxT90cfsKjLkkDiVVVc1UuwGDMdjQXL1ZmDhKz9ZzxMyDp3nPHBSbyJ3okpfSnLOgW7yk6zq1UmFBNwDoKT4liz7QBC1V1GOL9h88xYI305m7vGbdGMNzRZhX3YeWg81aASBOsduyeqHEgFa,f028c154717a354d,6475d9575a958370 -t0J48cYe6FWpsq1Icv2ab44fzrhgo4S9PaNN4fEIabgFIRt6zxjkbvabo8d184XwU43tRMjw7L3fZVhBGjAMTqhl709NLXuoM4t0RLDdyh5r0HbgwIMgjc5z2j7k8dGq7s0B59WiKaxLEhp6Hv3R39HGP,7ca9c5985914c937,70b9bf3c414b13b6 -Qa1Wk5Q9fTtvhK6rFMeqvAUV9kR56yPB0S1JCUtaboG0qxuvXo1yInln4Mjuk5bi9Di8XLro2AIZ6HjM98wlvsP1cUWc8OEJQj2OaLfGhR9QLkFa2tfcz901AT9V5K8t5Ida7ncl7EjOOXRpsz6gcR01jgCiqpMQTGOmohxiQrUunkomM28kpt0YZANMNUlprvKUa5kJjQPYYJHpwzaXFxXVmWR8m6eOhUkUW5XvvQvTEViRHEiSwR9ByLNNUoloSVRWd1bbJ1uZSF0E03BsJl66r7WyehSEKErYyMDJErpAbxCmVypXrNmKuxwT1FDIgOuGDNex4sukoqkR63xs40RY2PLMoXps53D4GYy9Mq7zOG8wpEermCMEIHy6jNUPpA8LVAAvsnKNYTrmrjqRzFESXVsNF8miXEYKhpDh8dLOk9a12kYPv7TxCtokMOKnIMlDNni0Ast9rYIgu4NcHOaibkYEVX9CXRKKSOsYfNG2hDntYGjNvmyRZ3UPyOxrz6DhJziLUfTeUoAvzJs6kdC3iggord3zUljEglNWV0PpB7sfpcbey5Va4O4nadeD1No0n0pevLSGNI6USwUXOp2hDpr740mVKdsCDScOsK9XWNR1Urqub8HpIEn6YcgmhjyVRiCyfhbNswqmlYkQrxppAxnRNplsFEgzl14QlAgVzIbdtnA4AprrrpX6HLG17nk695EWKKIFmWFLY0H6uU9qNOzoONY2xekwtmYJHeeKAXieK86vUU2xvOvwFvexhQIBOWcqlndkL3UDAPAyc6XSclfFMwk0Ox5vggwUDQVVz1W95VMP6HEPUxWza4Iq1WHnvTsdh0uGRyO02T7llBNW3m1QAseu0dX8fHRB4g524kTepSUiTNbASvw4fbDNxgY9opC9D,c0ceb35d50191798,388e22c35cbca608 -pkr90wPw5TFhc6cEKS0NzyUL670jtzxL1JqNHW6vcrlOnkTHo6PmgoGYz71N1V3M9R2FcCzL3pkWGbyjaYv8y6016GwpUCtKUUQ31E3qC2ZjpVt5LKW9w38QIPneSqDep1FXSLO4mFiPLOxiilAE0XwD6oeEc0JmmaUhwt8k0GcjeWx8GEYq7SWqunNEVBCFiUHH9iUcMfT0ldR2jCuhmuMFanO7wY2VAdKpSawZcl2qEASqBLuXBeHFNzPbTJ0rKTWXDI1BJihrM3Q7EmRiaRFYgU3JfE438u9LHUHULSZlRJjzQWSFqA5f4ojCTA6hNfuSFsN6BkLiupdD6bbcovfA04mBrAewjzs6QYzjd6h8kgEBtNPIncxPFDSZNhxmax9zob1v7K6id1sVXkcG159QfhQsBXikfGPlCtYJzRowe5CgV3OwYdbuAAhTT8dflwDClDFpP4OAZ0TfN5nZgqMAHazguPkQnazO4pps7Lnw0aO9ZUec0MWNtGuUSNMZ9I3YMSMnRcUBW9vC2klnU6o0YdoQ8PX1cOvCTEFHRkFEqT2xfacUd0MnyJJNzsz5GZI6ZRNAUDQZ9oidfFgwQp9FtJAk,a451df63d759f01e,26430a9f3ff8631e -RBoczBtejlvKYt4pYEY9sRDn8b2yh7aE2pZmpw0bIx0fuyfwod0F5afzIJ7kcvXPDsg1Gc5ecspkZCgn8Kn9O65GNO28NM7QVJ,eaef76292f5c5c4c,b8ff84172629a0ab -rWiUWJNgzx6lFhMbckcx13bOInINHGUV0WIX2Pfrfzpboe5P5q7glFo0G1dFg9577ER6NIw1zrnYYHpiX4LYYmyn7xlys0MaQAIsHRWKwfNLbH0zA0J6K5DihawDM5UNt4ghtjVbYre5TdojM1ijzrDjx5S5dYF7JZRm8yHF9cSVmp0xilmb4jhlnHdeHxRS0BbW4wWeIRVE1GHDxwBu2yKyK1KJWU,4b1cba13d9dbd1f1,1c317647b539547c -5QSVYbAPucYIGkfKYbyjQKJKTIhOfHFbgzFPvEKV5W137Q8ZPnt3z8HG06uSUG6DTRHJnKujB3Eq0MK7TMzcHP8rf34n0vKBdre1hTcVQYEYWdXBEpzmPuE9jrlGV1COdq51rJVhQUc1UnNNsVdChNCPbeaJMmenoYal09hlRj4kHUCs4aJ9SlPExIWLzLwXOXtA5mosksRyBk6hCh8zkjrdACbNqUQWWg9w21Wbgz0NjVQMs6IrCFEQGnYpyNNUbReAj7hJ37oA7irblAiLyzmuXwpUdi6hvBSiUgBYsQtqbGydLvmJkSrAp3k1YX3DnemTpdIXRNPURxuiWyXexIkgX9PIdFLVvLI6rwzj8C46RubxfupvKOvQosyNIZueUyFGsC38FoTS3JdrqlQUx7Uf7MJOTVa8JARIigweiEVGf1JrmwL1KjVycbvepFHUKFeeGsylwFYsQU0N5rrqQqFQzUOX4KHx8Gz2puCeqaTamH1U5tehoPOUeZjdeoqJpljXhSCkkcHnnPJHdFtwGyWG5uhuI33pC3h13IClKAeWhzuUs5RAA1Lk48AgF8qvyTQvU2BwU9gJhVzc1uf0yHB6WpKlhCmU5MyQcUxr6I3bBoPtrHBY1OAZLeoaoHXsOExkiXp7bl5Eh2xYGhlxI48FckAGwGVY6B0ZDY8xyfFW7hdq8YO8IfOSl2DNEfI02EzP7CjQrGA8gv0bAoe7FS47OsxW9joyDf3zveB4ovUiTgl0MHKEAW1W3rk8psaS5NbhJhg6dlvY5JYDD75owycfQEJeF25QPKZcrvrgxbjLBcZz,ce2214a26f70106e,a786d5a5cfda766f -HwHkJpYgS5GF1hQWm5rAJ8bFC9JAio7hm6cbwVqrha4Ira4qsZUJZEcvAQxN1oyEcgWzFEM1m2avhy8lBo2W28eJCh04Vav4bABBqUW39sYa7g2bLXvmdTQkSTJn9YSyJYgdAZ6RrcW6P4LX6dfDykqKDJbUIXni,3fc324fdb8e5a309,140e05769a1c7fe5 -HNZY9UPAz0SEoz2hxfuupS8pPmk9WLT4BK8xtuYhRSE3rKe4tJekoEkMJit8kr94Ub7dRIWQNWJjwiuwNBOIjidh4colr0GFdxN4hQPDch5gQX6Dxx995Zgzyy1J6cbWdJVDvnYsfftueZ4mfPTVMmA2tAU8OrW6vqmpqKQ33GYXtSFcsIWsAR0SaKilyrvQXJpyqYb3As1cUy4op7R8yDblZyF3pAR8wLxxAwhOhIFMNIAEqee6JoucUCnWKfsIkUbT4zAnyGsT9xOfeRuIiKHRfSG0fYsZD9n3sJ6f4MMJ9HXqXiazc5ytDNLScKistHrcj1O8M7RvETsppVvZC3FlOVMeiCSI2PBWYslLGKsNNKBHpJrBWh3cWGKdx1AjljMSa4RBQCLsk99mQPxpPYaHlp7OaEV8Hx9DHTkiBHxb1PcdbR8fJn3BWn6zkcMeYzYeDzH5UVUYXpaJG3ZUsv2VWLORNjLZod8mlpyAi82UNWqiG6q7EFaajej7GfAWcHolL6bkffoIiD5vHNH49n2g4mLYsrt7QVAJrxOPnQvxnSgdATtBZfhW1yMTrzswFaihV5R0nlHoVb3sLKsI7tFyvEzITMnySQQv3INAaQjPwK5V3eR6YwGot7tu73hgkfsE6kIWwQmBulOgDHzuIXyJYd80QB9MEgzeuwTIClj3DMBWg5oCzV7wq5OkAsHQZ1hK0OhDRaFzs5PmpgzBSMMwExA0vohGc0jM8TS4vh956u7lGED8kByT,919b42194c49290a,3a6280e1a2e3bc3b -hCq3qjcjpZnxBWiPEQVSMDtrPIoM1nmceW8Z9JdrU7iEWCuGyffpD8eNoycPcZBkSIo9x9RoGKrORCup55Pl4JUgsNHnPQNQLMiVubWeWRIj2rALLMfK2zQE6pjRIMooO3IQbgBZQawks3XaQ3t0GWr1GLcygBONFliUb1KbWsmBzCDFSZoUcHgx57rFHnF1xJ0Z00wf7iAgQUjvJdlYNddHDjrRkRleNn01wAz28gGNvOClbsEJBc1g26M0aYcn2SN5Do1I0vVEPvBEMq25ziOK73gIJseOoYpzGaXo3PXvvZjpJTPT1TSwATVdGGpbQDo6cgcm2OtHBee284RhZ4rJJLZaU848Mq8oGO5FAqc4EbzkV93vzhsJuCuGINJ5Bv9J8XiI5JFVapLh2ZcUPUuV9EHzxKyKjpzhZyKboulSfL71EFneYK5x4KboRdAC975DzC9db5GXxGv8ZnwetaD3nrorxr7cDpQoZTuj0x6OrtnyQk2aLGQYY4nt,72a2f0421749ae77,833b272af25c8f41 -aSB0ynxtguGosNdy0sP7ogm1G4aTz2dlmjIRCvW9NKCPCEnFSv4ZDTEfuDowrG,8e2b686c56ec1e4b,153b2b020083e1e6 -4a3pVQvkzJdfZLw3l57M98t8H4bxTfbpyTruSdHvyy1RlFP99a0F4OjF6oVEmxeeDKcmUXTnctJX4lodWp1lt6uLCF9xjROvqYu0GwSdufarI7Di9P5jJbHT7rLY21TkzCWw65DvROiWwgG64nekf9dQK2mfedPKQnRfo4CIR4o4UxCnOHGMSXcewNzTIhYyeRCyVZELOqwEOhdvaKCDWZ6kmTmKZKmex9My5Y5fc89BZJ3tpOwtccP1MieRLwvPOu6z6EcayZFdQ00Us2fWWakRDoY58cxsubHWsBIoRFkQ4SvDIwSLe2xc5zZ5RadK6Dj971z7iJT8GlRD9rxunM6lo1sfoP8eugVtmLsMNDNT9dxOHs8o3aYIt3Xnev2nTad1p5hpd7xE17Juq09WgP1O3I5v87WZEYDwMK0LTt3FGJDQZ0Yg6RhSibRFa2KVQ9XQQEEPUSYWPJLqh9lnPiapqqHcWmQkr4sb7Nh8Fcd3GLHIDCQ3TtcSmtrJUwk9Kt6P4cLfVv6SoGumpRyF4FwHGcPeKFboZGde12iXLNo7d0s2FcRZjHAzWaBn3CyGnNERFwxh7E2aWQG5JVgay1i1fnkWOLaJaYnun4PXfZ9jZaBtczSRqcbV7hsuUJO86U8bmoXSBSO8xVLicjeHE6KMWOPvChlrcdfWAtaSAXPkiPrD,5bbd667baaca20f7,2187e34727f93e79 -XSl8Yk6CMQfpXc85Kz0kkAvyHX4b7o1UkeOrpazMkVzKB9WFyDNvlu9Be6K51L9Tll6IKeHKTyk7aoaOMFFz6ssehew0nTg7aI0NZ6SsPaZtdT7wDNGfhUK3e2qhrc3b3bHKVKqFWrSUfqUAgqGYnFSs3pv8A0R00kSSG3DWsbUjvidtmGqw50HzWb5Co0fnoXOcROu3fhLzUBbS0GAKlexZOvKkUIxMiQ6RV32LWPL5TrCX6FR92HoKkobVrwmqxf3qJ7hlIlTT8KjEv2NrVNlsA0PAv5NiPyRjEi7xrkzwbFjSBKjRau5aSrC3flUqkKLaMvlGJbWM1MySkyrG87,3878e5e5d59dace9,da25b932a17f81a2 -tghm5A0Said5XssOcCHikhQegiTS6249z3C8gKOR1AvDJFxGwszy07RQD3QQnW3kblmSGxkfKfZVKXwhV2Lj5k81rNkapJVpgRY9NwxiXhdvt4ZgbcTMLiImlbFQp2yxsrnxP7Ya1SNdRHqGnj4thH2hae4r8EPw0JiAIVl7C93cgGoYbMtLzO1JXgOvI1tfHHManLnO9cENF8OQpfZWEPiYm9T55xFDiigKUgg5ZV8cbjGx5f86R6u7LRGpNva5mrhEHV5El9s0Za94ktH,99fe7f5402f517f2,d3107c7e8edb6255 -uSIub9CnIU0DkbFZeBTLikvfexQ431yT1ZGb08sVUInP8t9jH5sJMncKFOeBbMnWkYDt04ruqRrE9gicJRf8yqfHjfokVDhh9Xai4dTo1kJD83ffTQwwTL48CYRd3PXMneFRMEQ8FQu80DTM1Rx3EIziZk1tTp7jKjm8xEdBBvOtK2JSvpSnM5LXcSEOl7zyGH2qpbqDe9wYQNR7Ei3vgbwM8O1WsdvSWouQGM0gVxYFwCt7mpZgOfWNW3tel8yjXjuC1UOzpbhdkYcS4J42H9RUhONKGIohaRnTxkgaGPuWrnEAVgUWkKP3biU7zHX0wSoEBHmIJdwjZxfzgbYrErkIKizXMBl9N3exj9nFgDHAq2tpUr3JS3zbPN8HWzdlZZFCphoboQxNlxY74KZD6buNAcmmiL0ZlKL5eJ3Mn0pTUR9eyEjt7aXA2H9HItbBiHBqi0gG51sQ2toqe2Qim5JVypztmxcksn1Oh4GKLl3DjF8KXs2HLPGwwsN4SIqOx0yzAxuSOijbJDPH0GznWPEfgKOTjxJlR0aYyDHSd7mheoHrIO4TODAyjT905Gqb90CX9B5kxj9EIvgtnGFfeBqNOsIMAJRXOkzt5y0tcteYkQFVYgTolBUFTZTUuCZQcMRIQrCgNb5zKMBkW8ndw,8166c99f14febabc,b7f7f3eb267fa16a -3xQ1aMPQN5Jk8rhisKAMd7Cc4Zg2IvyuXUHe2Ko8jIuhMcFDJ9G3huYp6ylAVO6o3EifDGEkPwRZ105GVeT3fvCU34WtWuPvm59aXMgKyWTdZFwTR0aTI4sv2ercCUaeBiiHXCzAfYRBP5UMHLbSYayXnkuqxXadeJI10Jd1W2xPEzRuloB1GKPfeQj4W0onk5rL3iVAcKDMt8WwDtCa19PbAwoPxbGJP705XZk836c5tTFQ1RNF7agWlD5TOuIeuF5pznbtmMXfbbvv4qSi2qEd5dHq1wTtYnoS6OXUhNvGngvKyg5Pw8EIrUpugjfIrNHDnCFxxgRFmJaANjT6buBIKDWCuBiOpBVWKq5F4AwBSwAJaot80e98OrCMQSL0QjiBdr6hvmqEFIpORu1gbPnCN6phA4eharE2ZEFa8ftMPVviWc4ke3jUSZLQTw4Bg3joKEVEcVA7SQ,c96548af8473827a,853ec38c7f388e92 -NsYwCu4rfRhRBbL02XFxbrCTt5Wiyx7lgs8zRPd8SfiRwEV3vnJeoUii7cQKh11i5YpG1nIDAR65SZKiCQXtNrXZbcFCxdQJDjLGKeYNVEMHSlBy4fERlZ4tw93X6RJCYsBFxs4MHDDcSk3wolKSGcGWUQ7MmQE8UAndAKRndf2dG3XkC7HUSw2omjPCwQPIPNcLPls13en7iRWt7sirw1Q9q8CJssRIDj8ahhFAHc795yNdQ7Vbe16YIa7nCQKBzZT2HGauG5Wbc9XuSIeksuOancuKDTUlNNrnY2gUAa0UCyRAI0IhcOGDWLONOX41we9MzOWMtuDwZf30MxgjylG87sk8gdpbPNg1NLYJn9q2jzltoe0MrYaOb7Vng0GJ4xFzWZjdWUZKgBcVBDhrePzO5ehp0GIKQnH9lenfGOPtSG9jbEkFnnVBlHGAe8vkgyxaPqrZEAV5jHaoGvx2DT45FtCiprDDvrbycjQUwh9DYMyEOSNIzuU4i925WeKQMZwfrEMScDItXFQuVdv83iymHltGnaw0iKXEfKywg4fIM3EVa9K343didoy9Wtq652yiLWyqcBbwLbdU9gjxP6AJWuiKBmrHUiwBC7R6JB1NVeMFv22pdcWIR84VdRnvHf1SdTJ4xnqgLWrdGLcniCXCjkXqnDfRrxBcqIDlMqaXjUPn7g3FAgzckL6d0912C57MkOYF4R8cFoJPM3JbeGEF4qr9pzie2y4UZKlrrTsAGyH2bHLADfS7DYLNicpBnOAlG889eYSkFZOyOkjN0DXcAN85cf4n4kbAEdmgl3VSUti77MiLqbtNYR07BfIfuyXNu4G1P0dZZP4,69273e7a8a5f6070,1733150e6b00492a -sQDVkBj7j891ACjAkBbrELmGzpe2m8xbL3QL92wd6EZ0h0bPAPE9,ae3ca5f0ce4c6d,7dda01973e75bc8d -alecg9k2hpg1EKL6SPXeHlC6hoLrGsl18zJULDjmrGPYDc1sNMDoaQk57gTBbkWMniaa5G84zCC5rwFisuSNct7nMWwVxb9v04b4zhwXzsfN0qOo6Pk1YblRs27Zo3nkTshSdl3RidjS4lO4v0YGRGcIrq5RZaglwjvlEg6M9GqoJbrvKVYCiisT2CaaCgz6I7vjnSBWSfoeaYD9SG1nMHt96zzP5LZbqwAIRo2FZGysgAsH0j1MdWnR1XwG1owiyPVg0JJgJwyb5z83FZ1BC3aEUC0AyhOQtFPO4Bf1HJMUnmMHsPtmmIRUT412EHdQjLu7lCR5q9jPOVYTeO6YbRPqe9Z68dB388mrMAKnoI1MxG4OH8Mq2F0wkVzzK8NeVMBkJdP8racvkr4M1zN9l7f,22b775f42a0b261b,1cd10d4ceed417b -S0fUjYlHkwPnkDvwIHnrNP7broeqjjB0Min52MldnDBjMZducTswUt2nHjXj4grlXupjAYTcXIshr7fsNDRBAfM8wFyqi9SKfgltEB3yMWIXtiQb7xwzJEublgfxSqI2mgrCf9bFK4kCrtp52QNOYILsdZaQxCEVwIuJ7Wm0WZJtgKUwAskMTOe98h4XkHD3zAmAzujH7OlUClSdhARLXKABRMFS77hiNjejx9VBF9ODdchwnn6Dmi15Syk2G2lJ8c7kPHkEwNE8wSAWfYnKJb92Sr4e5n4T6SAvJUrZvwXkO6DNmeucOddLrkCn8IdDSf8CdOkQv0fhEGGZTST8eToXn7GoKSEeBOrufXKTuB2nVgKqHh90qErPXKYkmQIYHwNgQ6UdQ4KPZNpdobMHia9rArfvA5mhrlVj3tmWs7cs6hjPkywS4LbrrQAkqqW5ta5UW6FyUzu1RzPY3VM6Pq0tEigl3xMcx9sLsrhDsJsFK4IGydw68viHWoJw3QZcbSHxekOH4xk3YYzFasomUeSOL9nAPSpbANVp7HYrqCetyU4VHnx0bAT6,2379d62b8412c0f4,8343c51b026ba14c -NbBnK1lUDD2tU2wl2aKKm5acHDXLuSL0z8rUNYk6YUZBqaX8JwU2HJmiW7qIEtGJ00GBmDky4aDKlkVqzLFTxSjrCj93FsMB3PY3CEO4bzn5BwcQrzl7YWQz49BySJpQ5,e02847fcbe9d1e8,e35de4d4fb5502a2 -ZZjReznH5i6LCrl9qnkFnbxLMdTfogUFHDZrL9KXHwrmmpBgmzOa4tU1iBfovtGGZDREXV,49a0139f6a07f02a,41a126acefa1e3c6 -8dLCIlHY9pEdQNXaGDOGeihdPlQbzSmBQGXfLbBwR92weTHZWr2Nk0IJbA3wu2AzvoUQvgawMqdX6ZGwdY07KmP0SYdDj1NM3RLiQDIJhnGVpTUC8q4vWZZH44jGvALTZiWPuiXEcn0YVyMjEslMM95uiDskUi9GesCiYNA2YWBtYsLzo63wHhDzHoD3Ql0SBpP2gMKgkKwcgIQx4LBaMIsWWk9ioMBoDB6PvOmXfxEa3Y7WL5i9N9d8ink8C6DKtcKvno4xKEve9z7a,39ff546fc357a692,399d49b2455141ec -CIIvARSWq73pUNRjfsyEsd8a76T1zuOL3vAjCy3pDHeHkqy5MVKpK7u0YG8d0QUYREIRPgNtzGQGKFAsSvLBDSbtjHW7o8zo9I4TB5IFYxZYec6H4G5cqXnjgv2uYZ9EysBiG2dzKzUVN7pwprdOHKayyvF4eFmdQ97ZmghzIbvHa4cqYJbCBJhdlAZyGzzSBSeJhiJZtRhTFwj784BVYo0Gwf4ngAdBf3dOiNT78PVFavtOzjiiO5gSTnXIYKHxZbCBXu0MB6sbpQVSdt7MrpQskKUsTiibd1fIZAxkIrV4Gy1TRFkrt0B0agJXiqkKDURWhy8FY1JjuR4eErNwAyaV4H4VA64pygQC2b55W2dNmesv0RknWDsaV5dtHoNCxNNWHvwHq5ud2YZmKy7C0ImErfHx0tWv2MT6lK7A4hz2x1HcypPTAuFybF65rb5f8k9oVuZoh07wTgewSqyZNBu7qrN8dJLbCCPVnZaN11owUxgBX95xw28qdFjftDzrPRSAhHZJN7RLrcBEMM733VXi5FNppjveoY5dBlA2t7jzLxe3CZhFhGeqM5FNEngnah806PRY8Lcuo4uwMdBWOI1vncqouFoPDTNMqYRBnxbYzz2Kqd16JT58naPlU83qKYFt4b9JZxgxQuH0sqzxu4GReEHvhoKn09YRdLlCLWLBeTU7t3Sucj3CLkom3ctDVJwNBmVoMxzspWgAUKgmCp4XpuqtACOAZZ8V5d4ESEan8gc8mSINuklzHzikpt2ZUA5gkcqrFISKPqchFdEnklN6VjBEzL9w48yoYzo0P59JOKUH32Edc10BS6JzJb86Jt2kS83DNQo3w,fc79f840e9e5a7aa,16151fa1b27f46a5 -1xcIcCLBNrvaykzqScaiG5GYocMYrCnif31ZJ4A0oGz2bqvi2W7bGThcI51xHe6iSDvueM7zNc0BOPOrJznVEt04hbepiyNPML5k9Z8uT6wITD4qoXl08D5T8WxnHOExv004n4r6AiyISJD1CrYNaWTvUMzwKyrEbTEPdx6eiAuCoNDiJzX1iBHvaZItwmDwBJOCUOeCf8YZe7MDDzW2RPaxsVae0Et0OHz2Ddi8VFfyTHDjcsEk0PpzpzCEkemS1C8YBNlE6de2McVkXQ4OpJnkJK5I6Ska4KxbtuA3E3SLurcMj0NwcBpi5B4w6sUiOXW1Ckg7GjQPORLMwJKXQ5wJtymgP9iTpEe9koZK2KFlQI6gF3yuL5q0aA0mmll3m0hmZhuWhCWM3xV3gVALD46iovdXmAEuLqDEQpjufm14rz5gEsLmzVA744XYln96UjG5psoqfKARFy1A,b84502ee4aea8d01,fc1a992ca4111a1d -wBNNI0JP65CGQFv4eND1zP0jZBxCSIWMc0P66k7giptqxyafI1nFpDhmABJ6P77XJJxlLYIlDfQ69aR724HMdyPiG3EZrmkvptH2TSds1jsL4GtzKa3gBgsKViUFF0D9ufa4rlHxVWYOkZZoo0EBKP4imLDuSoCokG5ddTzjgLCUSFSmirdNVhMph70hCvyDQi48mMKyfZpzQ6LHlt2CDhfSKDfp0MWLQGBwpOopraDNrivxXUiym1Qd60TiCzapkzDaEqUPgbetCPAspBD9z1vg1ahFLqTKKXnr5eW75DRnRnXCDGjVwhsXsHZeOsXe1KTLCsqBPaZAiqooq96WhTMElaocWPL8S2S5zEQZpiG8a2R3gnZYrnDEYb1DuXSSjL498vVbT8oK2WORuJhlshiRVxZFKPphn6MGXrelvJkMinYgm2YyjaXuICUPEvCzr5X4ZlInsYVFE4f0EKMiRkDZCz8PLERsWdWuVvvRfWfZPSMzXRwiwf,86d8962a797b979c,2c78547a13b9cecc -OaPSfWDgCPdvgsDh304cclW4DJ95nUO6xqZClspq0dfrmFrdoMCxW27aYd4T9t5ox0MplAmqo6a7CSwauN2f8cJX5dZkIguIZf9z1KD4YgxXlB2cm0MPDcEiRG4bTFa6rbtMkzgpWF5BsvVYulwksOPzvJVFoZbdEsoiKr5ysKQ4UjIALXI6Y2r8TBMMbbbyQQhz3grrPSfbLOZxcSi5vLwj8Wf9Si5KbCrVVYHi0x3V5bd6ESeWftAmhHh1jcyCmlTCclWf99sZXfK1wTLgod6t0oAYADbKh9fusWTw6LB59szcrLiICIdjOhj2hP0fCus095Hr5UudDEqw0C6vCCvmmUQrzUv9i9bCRVU8gUWKhMaG8tlGBZ4cgBicm5bbQ0Qiyt12genDolSVpvS2EIpeu8JZA5PAxbWKnPZw5ZHqxEUO29HNVa3Rt9NZSVsVIvqNBa4u8ppIYHnCeDbtHkhyUkGTrQb64lzQcSkAuT3udXw5vK8W8i2Lz94XxMUlMwnn70NjcyaViXpILzTHcQH2Ccu8zSYRUtM2CbiFBiWAOKn9IL8ByXFUPnPYbNkrXSWAx7T1pxnKnLpkGyIhqQExK9ndpISrMKkc5O7r7tnTArcswiW9dBBOvORnhVtulMk6AjeGf88maBmsb3wXDXpfdlAtDHKzCcuL0pPqqMJf6w4eM59TSHNlnamg2IAN6houoav7EKWWLZqzuOv3QDDHlz21bswoAQT8PQWjnSTtANRQ9RArPLjTIPFTIFc7mVxPGBCrVxYIhdEaGgAOtipnswSQWow830iPdQ4IchMhk33jnnoHCugr,181bc903d5066f12,477c408816439b02 -bWxNo8XnGHYJ6mVwdyH91D27izPzOARGAWYjzkUlI1Sh0eldeWdRqeHomg3QzHiVs8X3GslwCx54fnygLznpC6TKfg8W8j27uhBJ3xAhA3ECG6hY3J4eVdIGyBmCBoskak9oG5xiTrTgm4Kl7DtTiHVsIEt8oilREhHbdMOlZoONQtVWv4ClZNxjg5R1NzMKI7cON9uhSViem3IDF9EBJYCJNa4AxNLYy3N2xvOGVTdtSBF83DSAexIcEI39H4OaQdGFNbJt33KO8BN8rOdMPpjlGvlLzutfILLYtDdNcKGuQKdYwGu9lyGi6lehTTYYZJrpG6dmzYCwW4I9qdPMEql37pzLjH6c6PKHNP6QfAL9HUJOjsuiTYU2EG9dYph7VBuMbV6AxalncFsUM0IJvltuFzIp8p5dqLBmlRqxUjG3yv8s2vXTiAvzeN9yp1RdxB4Z,594dddfe5387b97c,7bb7000e2dec79cc -Pa5aYpAOLsIqUxmVQE3mRvYlu89AmL17ZNoSw4MjrnwH7vD6DMYQOjJfy6egb1102RQguvKtMt8x2QhYBJteRqlt7FmIXrbCEIF58gMFqxTqwGfbTHJmkxwKpl8Y94Wa0gnpxf6wZqTrV527GR26V1HExAarKn0ePoaX6We83dXLiWuydW1vz1C6VQcxM7pzVaL5fR9uxNCE6wGHYDy89fK36qGBlFoEbj31MQUC2dcjQHBXmSJbWdP9r0RhKzSUdU17gd1TiT0jJfrGog0eu6cfJJv7MRAEyAukFiAQriSoidL1z5pafr2tFAxv7YI3uLyKaqYshRDcUgygyl3TLkCXIOEHwU3bzrxMjrQTLLca149iL3Nkhhh3ONxQRAPuR3HKLsej9yq7FF6XKeXfW0yT0tX6Ly8ntAeuoRzIg7IjqvPA5dNeuzwLTh81lsMUw5CGR4HOeN0MZTR8X15GbCeo1th6R6X1B2v9zn9LszQR55sgGt0pVu2wWlJqr2vTBvPWnYKOrjndkDLIpsfjqpPPXQL8Nf5ep6nxSwK5YnPINqYt98zxUaSuMdjgq4Mf5wDc2xbLEvrNJrLhe9,34918be3f596e496,4186bffbc514f109 -dBqV0jwanvZXB2uFarAKIm5qFDnzDj4ltszOAeS5vjC3tDYKBdHHKpMlQKANJK0fPYh5RAbil0nVFhpDYDxubiFJ5FP4MHHg5FLLBWEXda2ZrC4GYrfJiYQW5bYLRfRu1heDHRNurhbfkOuNMk3OC3WLdpRlbkjhvhNi3ZIu8Ie9AYUwz0QWxET9pEIKM2b3sRfEdWxIAQgkgLDVpXzX5FbXoCfFWELeAUbGCXSBLIrYdNFMDMbTuAZRKqzSS9sznVnlJxTtKIWYBwBRugmg7WgNvFmonsumQ2dnjJlbudpdDgmpPNAGSkQRp1JVvdczoQAMMwmGGLR9dB31t1CiNlyEoB1xdYwyy3nhHgyZ8vWhqup2XgDYGhtB9JwNHkJw4mYaU7ZjPeaSnOgj0Ywdo1SGhsnByL5d36MW7NJA6E1IDRbib00jKAqcexC5NI0Whdn12RtYLNO4y2EFR9dQxvP72Fpf3nE9P32DXS1nR1ipLCUXyGyAFC067lOps8pt8tnpQnPXo0cUnBsTZT94U9FEozbQCInCwXn629u3J8gCZWqZqDeZeP0hbZyf2cESI83cYlUxZyscFbgNslp9v5grl5yqt7CTvK0Y1mmDE6PBP5aYqAL6t1gIgkkkkvesgrjdpLmwHdCzfUkEyoNd4d5MPt8Pa9xQJLPCPWF8nDwrF5EWCUrytu42XdOBzTDnHOVtjkro2JWMUEYOp14MxbBhGRO6VbEeWxF5OqDjznDHKmsYCj27HQYrLoK6iQWUXVnginU8nrjd,a8ab9a9a5a1ca7bf,5750cb16f1cfbbb3 -D7oto0iaqGQbwk9zbSl9wIMER2IJMZFsYBRvZhXlpvWjErachBQwl8XlXufvoTVvVYexOtcVvvVjwjx5e5nfSj51zo88lUEYsyHsSiq8dLvR9WlvBlUj,2a716b8ec9d7e636,c46b124fa9d279be -eod0h726EPOBa195q0x52w0v9gvc7RcuKIvOmxtAH38TGsx3EG7jwpjVTMzIDAQDjrFgsHAw5kdQff36TJO7149RuPaeBCQp1mblfB8C8B7N6Xq1o5MONkzYkLRNvVgrjdQRsrIpb9nN5iGnpDBjL6gsxZZIGkU1M0pTe2w3EbBppL3QudusVsRKhzZY8GnHLqrE52YbWklat1CoFBHzywZFwmZu73OMCsQS7RGys0khtH3dxISVSMplcrAbqKTZLoWfIn50DDmrn8VzYwUkSQiigF1aG9Pen1isA19ZMyj0OJDgM83WLEOA8eBjq71BmrVYI0XKJ193MuWnXWM8pPNZHXM5x012TOYpklIV3UQEkPD6HdgTN6SuUTp5bTpyhdUDpANmH9G3uAEAQ7YU5C6cRDQ1skyHEDCm7Vw9WU1RyBOkpEtTECeSTIZzh8lYfUGufTkK2xFO0zmoudhAohLH39NNiyt2K4MSRGWPf3HuGY6ulnMJEHE1ieiWwicfORlFy4GU5i4Nzq1oc8KwbTwtiufuLcMirxoU98lSqXuf6R0DVIerDFhWqpayi4jFG58lZ52w7W7ChYnjZgMywgfgIBLEops8NZEPh4xB3WlNWKmYVAAQrhoiJruWHic4BeD5QU6xwELLwS0qonqndPV4FC97PVB1C37SWceBIrcY4xwF9NJ8hCZyCVIG41dHcOG4f3swN55NCJCMctedVoowZrNndykbD8ZRkGI7tijLS8Art0D4aauC4irZsuMQ,ed809e200623340f,83c0505fc6a51cc6 -8uIWi3X9JURrndT72dctzvZgGJqIK44bHxF9Pv62nnsrN8KyD2epI3L4u4bgxFHsxWesiXbWtCPVb3nAD7RJQOwi6w5cJj0AuVlCLrIgNHj2Sr04C9JKpeyQC9cDj4US5uEDPISvaLS2S9iONnID7dn1QqgZuNsAu9W3gP91rXW9xnqUYlDlaw9qb7kWK71LRGr8GLOub6OZGCbiAxWKN5MjeKPgaaXs2EG04kr7avbkQG1jBy3v7Jm1,84cac8052bfa73e4,e04a39db6a09d59e -iqO1BnIZD5D,3c619929d874d28d,63a7998af19f48fb -8FAria6VovMBMACEdf1rZCLrfE3opoScrLOKzJJvmWuJVcMVWOy4SF4dz6h9ToZTnVy9rETpC9OQ5zvaUmz937HYrNrTPLjxrGnYrE1WxvTVL81HRLF8veyNrRonnYZTw4nbkdAR93JP445zDoxBn9Ty8014jwm8v1gEi9qBUXyqNny2yYte6uWYKyc9IvMXjtLObygcJiqbAQW8PVdcMGpbqwL991JVNbl4ssuJSSHTgF27kIuqxkPA4VtanQjS6U2cDYoXGgpSdWTwhLg5UZkZB00nhOYNc0V9auerVtIy7Z19uVFkHY17nKuTHZDPLPoxedJDnsayNTOTyBSSICVxA4L3bFicCRyOvD3PkpUP9uaffPcpwQYrPoIQcqqcuhhZPv4ogZ6cTBRBBXSF9iVki7aDQKWz12ZcYoDf4ZnVbpwDhVjPuPe3BthOHPKgNWXIZHqQNbGm7VLJ2dXhb2MSDOz40nZGUoDTJAngobRadbUTycGnsJ2YrPGg19pfLQshTaR0QfgSyCNG30U1bVKsjvoYpqW,4d1c21c9d03a07ed,b5f05d43cb149ec1 -Fl9UVC9BNjaUu3t9v8kzuOsWioTEERkkg3338tI9iHVFpEw2PVYtHhERjMJSnuOTHrVvEnXYqmakZHDAyQfV5iDlqcorCpmTdqkTDM0besPWq8SDMc7TjvvQaQqrih3QRhOLe4OPFpgERgCPoDT7MqcaHUHZgLL5eaGJNIzHP5lM9Haw0MWXekjBhvO4rt8pm42BU4DPwroka4n1I0IgoATKYecr72sV1kmQuNr1J9BWq6hXajM2msLqicGcLIPogJl8J3xDs3IYqal2wzEzXDIT2a3vLbLHzEIgleeMYYacOnnuwI6x63y1DN6AQzysMlVXfoNsYbzBsQ,bab78b48a5d22f8c,2b47d1404c692b75 -peahPvT8EIodvsv9MIGiCWv75i5V5BFXWF6O8ZwkFVXL10dC22TkpBr0yBtCUChMlm7MjR2oENi12iZ6WvAs4aDUEImTugLItpHV4c1XjYIkq5Sdv8bIKILIAO7zOonrY3b8PUXUlGkjrYdqjVfkGEmFqlsHeQ82QKNvK0YhSgmimTIpWOkVLpJxnlSl78jH0LEeXoQK7ExI8be61HDIQJ9oVxuLFcml5sgjASewFabymV1VuZUWkvze6Ez1mrAAVFqOUQt3u6bqqioHUNElWfNNxO4mv0m5QADmRb864C8Lg6h4vtb7RKeoA7NqOMA4rRcFXynI22RrTOpyrXyiSOUvg1BtZBWtWJOkIXHacenqEBUEZvl5AKXAf8HLFEdcC9HO2mFQLVWNNHW0THALf8tqj9bflgCegk0EysfZuBR4TLRp6FJ01bQNQmBd0PngFAiAaom5VLCvw4GQX2EB8fUoru11HdsOVpJ2eOL9wsqjL9SaEK5sij0hVFK2U4JvDJIIWUxeAaeUsPO7s9bAuk0Ukd0IPFUKYnUfICS7HeSdbnfWFHS56YVWMlZ5kKSMNK4BS4vHpclaO8VY4RUXzDTHOpKPaMhXs5LlXblQC3DHh7BTr9VfLGrul1oVxa7pBoqmCp5vqu8QaTEnUnH6AaKLo0LVBImBDf3eQGS49lXpCbJ7sA5VDXhgcBQvMuoWH452lL9IOtqghkruprbyDXYVxJ33EGUj2jQdpBUgojiaR5sFoHyRaFhCZ9qrl6T6hJKvuBVzpvr3qM3PXAvM98eI6,bb9189083a0d54ed,1bd53b4f2306ca07 -IPNxO1MVEwI7Tm68jMyUWFPpEv1w83ZYnRoe43d3WlVXIcCEwdY7GXPii0OuLso2dQYurTx4Q1tSeRFniARqgYCxn9XlGknNMreMHEUzYh6f1Rp3hriZ9cyJ1WoxsqrJmDkFIaySogdtTmMqyDMhQ011i7F7slzXYwTS6QVe5hPJscFft4Bozc4fZVml3Ndp7mzJbiVZNApUBUhO19laLirq8FhVzOEMqYamxsaQ1VzjZb2qFi6ZJNrHSCELOAiicuGjPbN3uiAtnrrooEo3GWV3b3DioZf6yoTKDH54h9QmESeLZvxaWerFouCAxX889jZaxRRkRQABEKQyOXQkp6bRcD1fpbrtN6PaRbxFmZdV0JJ7JjgbQVZqGDbJEC4qwFDo4vgUbhfQvd5cYr7bYSyg04kPeE0WRT3SIoVu4Haf8dMwTRTsb0pMEWXbEo9BBpmpjivOdxFU8Kqa13pzvk3QrbQ5p3cO2YvUOJHqzzb78d1pQk7hwLLdptAkSrF7HYJbUhfSUxul7SP9MmcRaaP9dgwY2PnqJkzcmAB8AX34yi8MBv4jnrodLO24fORh7O97U6ASrlG7nOu3kXcE58kxnDwNgNWZGlqPuXPTzfbFk1pNNHMQOjAmxO6OGM8aGugm02rAA3Q4i7qzq61mqaLrAzFuSviHfMGN3vhgMc2kqm4c1OdWjdAJm9tOyNlAo2B4RGF65lGsG4U8b95hM5htyudYoAip9ykyX1H5WhDzNDp5nQI82H9MGK8CB5fI9GYr08YR1uBXqYWt98O4xBATW0DIpPEaubo09HMMiz58Bv5WVRou9SDPgDmHC0S6cfCRmQLylb3yDY6INoh17yIgx8mMQaUeBvYugrNGDROcxjnN1Y5ies5krtasknkGdN8MBn9XfxtlqPpFpQyjErr8v8tZRxxQ,edc4d51c21d3b645,a86f54b9231c409e -JjZHzE7Qp8iTxBfC5ko5SEZepRl1FWojckNyZ1DJw4PuALsjBJjjQbatZQRw7XNXmJDBFeyubq6Ecs7FGhM89kSen3cie1Fsf4wWwX29OXLNlCC8PeTLPEk7z5WVdWF3ySM7oJydbgoe0ywEYRpfuLomikjYejII6zxf5T7v2oLW5ZAAxPREd6draIPMcfbZF6chI4j8NB9HbKmeFB5oyhlN8Tc8XRanyMmJWEfI4gCyZ47oOVWY6EWKkS25etoezJh4XiVCwQ6mQrS45KB3hYxIzwncI9ltetDb2erJPbskMKxG7WsThqZ12gs2dMjeOXFVjXsaplEeesKoCnoGxqJLhA3mIpVTy4mKWLbheldntifK032P53TqBBWCydvo7h1GuA7Tnq6jZMqAMR9aeMcAyfB5U4PuPzQRZEoxYoTkqDhFPewuU937fj3Ohsn27OfsttXSfcu9zqWqZPUqldd0bHW84ZHUDxWGX64OKax,126f2e0337848cc4,3161aa49309bf8ea -tvjAyyQLazEl03prduUul4sU9wFbMI4HZYkbTdDbEWMYI3bnRJiY4Re0cwEVfYqalaJJIXoOKlS5bJBGUjuHAwh7Sh48fhZE2sL1E7zaMuzRJ8CfTxvdFod04u51L59QcrH2sB6kaM1HxFHJ4skHkaF9MQjWN865vxFXSXXJBb9DvjWZ55ShMzvj4MbcRrQjUxwy7lYIemYwxRnlHeg1Nh7d5YhckNo0wFDQqn5Eet5DPhZ9bLfCiOpEbm3dBSOiaJZF3tZhHanT8HASgr8fAgyw60YHVZihsHWaJC8Nga7,cb3bc500e1e62bf8,d4076a3aa003cc24 -A7dilXyvscgfYd1fENTQotFVb6D5rjNT1Z1aUsCXVqSROy4ScSdxxCU5VB2V02pMZwF1EUhw6YF364MwHKlPyfCgCXYJrEfoe4KQQyfjTWwzj8GT0mv3GwypSOgGKxSQRqQFlQxZV5cAt0j4aTprXD6h0xE7ya3pnavTTK4YJM91Tp4QgE8JYAS0LbV1B7q5mQeSEO3D50aMV9mY3Ontuj3SGKlqo9LKdhHacoQoWOKtX0fuix5H7bLE9AtUcwDnK6rp8yqda3oNeq8TRkSX0IzQENfx1n0rUs1Qtmv41G2eNxrSFUOXZ01PPLHhgJ0f0WssQcbciVvJUmD7AVrlcT5YV5KkiofcUd6NrvC,f9c9ad5558fba3e8,866c8ad190f3b348 -lxKIXmXTuYORXzTAyMNiQtA1t2GxHCw8fYF1MXsM0D2OgmDXAxlN0Lyvyf3ikKx40KkBS4BnaPN9DkpaqhWWul7gY2DFCSmtRWVGcjjqLbhKnbUpmkqBP0rb6DsRDKdZwip7F3oPUthNGeOl0KT57n9pmSkyiCHvhXeucNs4IDW4dgOizHV9k6Y6PROiB7ggBT0OzzXBxQd39XTpKZYftppdrLF0zlfJdMcxOtomLDGX3ONVwPIBbmNlFJVFT2mDanjoXbA3XYwDiIQG4IqwaF2RcxNAu,42ce190c90a8a3e,4b78b29312a64f9a -H8TeYuWsg4HB81PI0tLriSoxJAaYok5amUhYq7XlAchhH7jx6NWbUDNVHXDd3MpgkTw2bV5qpCIQ3Sz6TYcy4CAmG0XG84CgoXaYLbbfVw73msXHu9IFCZZQVhL69yo7CdAxxMtWAWcQBUZmHF0jGKdvrIXGvzQmbkhkx22NkeMnV7O3jT4wqEUujhwfASxQBJ2zWn1pfgW9HT1u53WUFAaZjdNKAj893UA3pBaIr1KXQ41yhuvmv0xdvoAW1Z6VevoxY0N4sT4A5SVY2iCgzXf86lLZDdHHXcPdiFMiohXuGZadNVvq0epSP,fb00e5036a2cc961,41f7f804beb9835a -dOBbnQklZWpwaTrkjnsMwxnOvIQA8Qypgq8GILGiJPVHeJ1tBkqyjUwW9IJ9G5s1HrPTm04MwR9nQ4LwtNwhQ9zPY6AaVD76fD8c58DCDGcNJrfPTaiUsyGDUSmFbnPwckYyRukeLIk1YhTr6kAtAaeXsTn8o3ExzWxIflk75CjeXUVtBcamQf2rfdgyCvFWVrMKmEoDDasacExOrR43ODjL0yf85oKwXY0U43kTbOHlT2jZtAKZAyaqqlIjout79WnL7l6TbWsHp3BI9WGHeF31102OhFl56YS3Jgo1qz8c3kgX5DpsaslBk90gZzaKoaOwB48hwZGyQtC7HkAWumdKiiPjLxELdeHLCmU8S2y4WxzEHW6lzNP0Ra4cPuHfvmDpMFh0EyZOSuKx0xJgo5QrGI1VzH0onXSrjentCGGrHhJeYhWTtI9QHCXWJfoMaR2BOrF4emcveMLF13CW800zvD1cxrV5Ir1Z13qahwScbGQ9ApaBJdzKUEi3t0bw78Sb9TinwUQYBgmqNBXPYtsvwNSACSco4dwWWDL8rzNwjUkya3HjcTQuzSb3w90SCMLxxBIyqvlTft0z0MD5qYOC3BRX1zY7UDDlc1kF0WKxCfHWRgOEMWDfvtaNat5ik8LXng7ZZh2YZ9sAKQfHk7YKqWnWuNSVkObgBrawQ0yPeEFqHME87hB1tk2kphySfxpTUWYgUHZliAEk5Q2ef6eolBkYBNUb8DQtv1E5mpmwb9yume8lJSae3pWtjgz0UlQAr6HROSf93GMGygvKT9S08IQQOZi1irh78T9X7jfW63DIt5LU1OwuoL1H7bxoqTcuya1k9YB8bJX60AR0Qwp1O6xI0htKXz289FqjtioITBQCEY7ACW2TtdwWLwNeySmDJTouChPS7LvYpgbzzwAbGXwswcnBDlVZ1j0rmE9Om8nkMbpSR07z92cEo,a00d6f0bbdd71c15,a19e54b7f0e900f9 -pq69JrcKS8WBewLXaaLBwArk7bPkVCa9xADg4hYPJJJsWlA5vQqdyfR5v7ft3MTKKxdzFTdyjEYVIH9KxYrcZILU9F6OvAIE04MZfQalTtRMyPZaahuyjLIzvhTvaNKr2gAZoFsGnr47pQgGO8GKVNnaQuiEJDosvB8Q9D3tvsLZPsWiNwy69JKOFyAVay7AfMpWCbqDHSNvUpbP2ZhAvFf73zMj81SelhQMJN1XFsueUAAVlpYcIpmhPlWEjUMn3WRbFQlvMkLGqFj6xg9vungxltoVYL4efCUe1gimk0osfmk5OZTBHVU6HBeFl1OUiDQBDqvVkRoZClwvjyef8ruiCV1ptInfcEwmuX3mWvxb4KnvFXfqTEmyd84ft9uPpL1OTpQgwSSnihvb7AxV0V8uNsxRIOjXxtExRLeqpeDEJSOMdLcltoBTpsXYtK0B7ACoHhI5ZCi2OqrscH1M7mtGAHPXPKkGqiX9oWs9bDRGpmlRU8YGVJmoIUeWnqUJM1rJtLwgx2ebOphWtuWYzBRywIpEV4p8DUFAPzJCsIy2Uv8OqLXXmLQArIv1NoDNI0t0k4jbpuSswJz3jpgt8Vm56S1SgYvfbDWqTyLzm6j29EfY6VO2GpyUqRnM7Ryhm8BHGVuHap70lQNki5hFsERsSEynCO3t3jDZCts8VakGC7nAxgF3wiNbB6Iy5HpVT8SY52iZXBK4Yp90XD8rsx5eTvBIPuLYZltmqIV6mM12mf0Xe5EnxtUBGJ3b6Xm3PuHKwiTtxpK,f9c07b65d8dc64f8,39852ff764ce8160 -ZoN5TT4rR50kmNtHD265LRjY4FXU3zPsqDwXPJ3xiSDbUohsj2cDlc7J6T731S6g6XgGgU8A1K6BwCJn6mJIkKmIGMpd3KhdAHbzzWmjYvNJO7BzndjBKjpy0dbIJ0ISdONEsKBqFdSwO8jVruSKNN1UE58qu89o7Nr6W8Dk3HEwEqoByNnyOkdPAyokR6bXEa4yp9jjpbcNtuz,1ab317081c405a71,5b852c0221654534 -VoPNGJDnbSJqLHpKUILn5udMu4PVrSBYgf6fmcESXXb0ZI4FbV2HXylse6OLmgG5QPwMny5zB7se0ULEJxq9Of9iC3sQriP24lUrP49M4jJSyfqip0eUI0wNLvrLWBRQb6v5tDFcTcuPLgKnuyP0JL78KwyxAmZaaf4NH4Z02C9BXHGjJpD9MfEXUZl9mQodznhBgOAI1XMaCCMfeFLsvirLWbM8ZaVQBBdsoptj6aOaL0hL97DpDGVXHUYe7JfdSJwzDvNcBhm4mQAagMTgYLenZZuMv3p8DIylFHYGmjUFfV7ZiKf56vyFicrFWYiWnIoKH3aTURDykasJGCDR9l9XmV3GInCCztohJS8KlEwbFYzhP6qZZQcKV7pENVwuT4FrG8XGwBNcuTrsS0gvIoJ6f1FNlyYAl0OerHBH8wcAXDANAiESvGXOTkt9nZ6GIAXEctf71S94N7AnzZjxCYr3YqC2fJ7ZSpne5hmTKqhn6ntr5Tmq1SIfXfYtV8iNbab8KrSLNgAxXkoGOVVEGanP3NoCtdcuS9XTqnYCHenYHMs8QkbwRtV9pv,7ce1ba1a453c297a,87647d89f9820d33 -RuypJwBZkaow8jbMWC5FaLHagBzsqnk1O33GdYgCh1TNQvAVm18GFqx2G7XMx72R56vw8vhxPqA9G1Qcd0qVhnocKJHtHdTWj81FVN10UkuILq0eJFfo3sYznW5fVQECvWofjBPgs3DvbqabW2m4jWAFT6zpwHTiHIDcQKd8cnap1MV2x4O3TDr8kJ9N8qcVIqaWXxeLcA9Hi366h97yGkKsLIZc1MNkjGyQHP7Lu6DvvNL1kR169EH02N6ueL45qOQ1qbUTQL44psW9ksavvzMz6o6mWp0xKVc3s7vp4937PUYoeVJdflCkrCh1tUVO2MVvBzmXbJf6Pf42G6vJBlS6xDhIrLFOHTEIQp3TXEHeftSsriQO1qjzTPlQN3AJKFTqhjRbQQbgs2ZvJPdwSIkR45d7qtLA2vqBLCUUAwu8WZro56fMA7KyuocjKtFGsWriuqGYHGiDqinUGnW6t42W7sAbiEIldY9PeyofiMlkDljTQnPRech2,e90f139a142780e2,fdf1409cf3de650f -rnQ386tfDyetCoqXVDvaOKgpbnyAAbfKAzUJyaJfPQx0Nljp2GF1h82SGvdYJxeP0n6wEmeJ0VbTrwSs5CbYUWYHUFu2rybWja9qQWyQuH03UFpblFWnTQ86MVmUQMyWlxD7U6ydNCJng5VgMpJuoym7aUHutaa8ceIbPLEUhAh1KbeUL3jPW1TW8cCg6AVamLFn7kuuig6tSn4jXrdgzu9HvzRiwQilKq4p9PqgpQJUG43qV0SwTGwMTK5Mj6pgf4cO6UZbzbDxyvVKIt0BWb4ZgNk5ZdTTfb35dtzQUiGKYszPIJDKcGEhDUK9UDcSZQ8Mh73gNZlnJ7ENQsBseqfLslAIiF8oI4juieo75DAHaCjivoB9VXIHegMta9UqlQSayuzbELUSLIeeqmmHJ4LPv9l9qJBXYZq7qdunmXS5ah6qxKyuTOK1xN8lW9ynBz3COp2eSDSGkvdlHA7SmkEojpLFBJzjTOexxYBed3kp16hIDlzz3E4J6tLOoVmYYiVyjQsP1LU6xc8LqxFftCNlbxIu4KxOgSZk1WFcVCiJL1TfVq4EhNtUNqljD79,8378df9dd0102dc,d1cc12e2b26e6210 -TLS29nwUfJ8M9pQxF9gRrILACzFaasgXNTMDwHNTg7xQ6Ah4jAmlpbGOo47k6cQuuCA4H2UeViX4YtJRikXY8v3qSlXy2NvDs5g5t5Syq55C6ACZ5pX0Lpdc7oaN3XB9V3oxY2pR159MxpaCkqSmN7QKgNe4QajNITpYShcw07xaxtUiwbkpPHM72WGyTJIHrUZ3AX1QJ6ghUUWjcTXe4sTgJe973MfKMMPA9p6DnKDKIMUbOzl9yM15ikYBuu9h53mjmzmCwEMut9oy6ubsHDYxdM1u6vsnLOBh6gvVxdPoZCtIkYo2GSoq7Xv5x8gek8KxkrW0xPw3t6cDdAj7BE6et3CsePzSgDIi8FZTaZVeV87DBjlHhnIkiRjStSxIG2KHwS3CWZ7h68vL9,bb7aad5107a0a151,6ec9147a0d3f2f96 -GhYTlCcOxrxTfTfIgh74av9o3KUr9lDLlbEGK2HnI79glZpJV4Dx4HMy30ueUBm5Hqrd6HuwR41avSxWuK8y4piWxR8aSk1MENTYdCTD1gTbsAjMd5SuPgLjNU2MwbYSmdjCkBFt1dM2VJ2tmVtyvYs0PvHRihNIFeiAcs5zKYdpi3eigzdrK22mOKdGJYRclF3ZT78RKn5FxOWjQoQmDD0hfUHx9ffDj8zZxNEj6zakvsPimhxDqEIINAKEdiDy2Ot5yVZWlJGawDhQ2sJEUB9rRNVjvDWoFBXQCHjmEXX5waw8YpiRjnWeb0xSGUzH7hKNK2ak9yM6evVzBPsvUlw0L5F6CJiTDhqkf1pRNwa8bgp6XpLoEwW4a0z1Gmr58TlrOQXncC7XwaLXE8YdkoEtRN3JDyCF26AQEcWgK8iup48pZ4C9DdYFPzABvZzWQtOmPlpKz1eKnwBxt3u3mCmEOBmoLNJvQlwEvhAGNraIo0cGgsOyc4E8v95r7FsFHfWtgA7j19YlFF2KPl1Cc5pmMAfLH5CPXhrFFBXJwflSfg3zvHptcLbMil1ANZBo9Bu5gb4uLfdxAS8fdrZ9aK4UjJXUe2oCUCkApRV8BgdNIOktiRYKaloj0dORntlSev9QFBMMt0izeyecOInCz3CrAy6VduFcXKQmrVI7trbxy2tmRvo81qVHRg9erYeWdy6ZXPO3vK77LvXscZWWsuTqu2QQsIZMCyaPkCyVhoZC5RiCg3lf9Z06SHxX7PJmXPDqq4ZdSGzuIwS1qF7uEspPdKMl87iWcLxGcCyzbQ6DzxudB4cVGQ7eR5ajftCW9uJ3z26W3z9ZsTDGUt4QJiPTa9bOu9rbnX08eq8BK9eP0JOxGAEJZArTy4uheH084g6e85QtOj0hf,62b76eb1cf966d0d,9a551bfa0b74e7ce -vSzQaMF919hzdBuxiAFVkM88U5qcUKoMVUOEO0KhiJrcI1uufaq1DGsrUcI9NCXbDVEM78vRo4bmHhlrkeSBVYAkr8Iqf76qIx2kfQKFOdHxdvp42RNLQHIh4hevR7iB112WJX7E7hhxh83jmGv8iP0ihUyXPe6zqaR1hOE1YS0PVyReIo2IYeNMJt4AHWXfR7w0rg1QIj175aZEZxXf1d0rcs6CifU0bGqWEuh88a710wCGamo5GFYLdRDmxqvv8xmli0mm5fWME0B37CFCCknorugs0JjjJRFD6VH4L3nB5cPTtRENLziUQvuLXnViA9qnz6Tb5oycBUQucu6i9RCsmjpO1tQAn27a0TndFdr1nHia7O9pjhENysncMj4rTTkp8i1oGxmqkDOMFqwBUwWXnQAaohQNwfKT9ByDL14TKIxqjEyMv4jKT4A0mGZLldZMt3FrEojllM3d2yAejMztKffag5oWzRWPUvuSitLI8YmHeuRAzMJVj0FpxliYrOQvX59UN1y5kx7BSjipLBqQCQu8IJhhQxBEZsjNeYlC0NIGtjuHr2LLIyvggrEqzh5Hh8wyWQRyZvuLV4Ug,ae5fee577d3027b3,7a4e9cc25a576319 -7O7KEJJtUnhdmn2cDHiOVRfKdj5TEJICgICHhYWAJjbUpYwpQ98qpTmqiRo5wHFJnz3ZqCNpBohldT6NdMkPrU6ICYBlRhz6QLJ2n6KyBrJk6mVfFzDHGIOwjx0fL85x6z2diFAM78wSSIpgLSs4ADnvrL2vQ2nawjf3VDmBCRkzxRQn7BE43NnVpb87RRVMFOq1q5yv86uIYrYWNXGg0VqXDteCxEW89xV68eSv0JE2CW9y0tEpUjAzux25bCfl2cxL4zC81UE3TcyFhCqxsepTSiXNXrHSYw2ZDddgUU6cSWSKEcxZfhD9g2FdJeQB1j1rm1yij8I2chYpqtP2gnL5Rfy42HNvIsKk7f6R6KrtRkp30QuIgnzuzMTqexylbGn6j40rpju8yO1oKUYTAsYKhBmjfYmgOYoAMZfzxMlqwKtFFXaIMtvEBQ8tSmZAi2SDeCaXlmFIuFwHPP8x0,c6c8234213b1d9ee,1aa0d26aac9e3d64 -3IFDBw8Bb7oQu98sMumPjbwCJ2qO9DcuGecO2MHXP83Lqh8PE54TJXvdYl683VrF8u2oqSDuSzUPSNXH80D4K5IiWbmqxW9eADltnnFdHMGG1V4svOUzjD6TS0BFwR2cZPViXUFF6yxhz07bKC7sTQ7cdMPrLc0NI9ftGMlqTB8cDTn41fPBSktO0evn3mhkvttrGuMxTldlCHxBdwUvOE7CMHRLfT8pgiexTbHoGUJWanTTClZ0BehdkedYAEjcoSgRiR4TAVlrtgCfZCIJUWfgrpsQZH7rwLKasEmJhBWvgcyasQhpCWRTqEAk0WJ6S2HTTf0B6se5YRktSH3FjHWk7nOSx72RPR1NeFdqzPLxbqxOZDmLbPPdnDbXKxOjDMZFUrbL3DNJ1F58YNnG7W4cbaBP5bBkOnTCYcqWcDswHaWalpc7ENhFJ4xmpBZiw7yqcnRgqXkz6ru2YiAgxiGSBUDosMGRacb7B3kvs28EoMoaAPZSmAInyqfUKLCe91Q7CnS8mRnl6jwFPaGLsbpd8SFH3yoBUEoWJjrE5KKlfIt8M2O9Izzw6I8w4YNGfh1CRY7o0BLb1DJXJh5YiwGUHA2oJyMoTQ8cFHvKK6N4H7CS0KT3zuZ4C9I4QX4QpyaDXyEbWspQdpdOzwYJ1UFm0X2Yx,a030cd39fa9873d9,d3d9847e56b8408f -6G5iNxqYZDyfWTxM4BjdKSAJ9U8AXyyaa4eR7n2GAp,4695dda04170e2ba,46ee2b4b6f09108 -UQCPla7yT3R19ztAt0R5Q5aM1rRPRb4sOWIbd435p8IntSODrl2DexSlBPVMQHJwePzwZMDL8uDvuItdHypmcr73TZTZZvGFTtlyTxSpiG16XiW5XJuL364bnbr8OpFn7L07LntORtDcNbdnhF6fAi5fJsUucDAUuvo6uxA2NWqvGhd93MOGEWdeAhxTnjBTmA3LGSW59e99umioJUwuJjUeSdcMoMbAYwdgt6CyXgfRJcmDfB5hgwbzQXqVnXcEqFiZ9QLaAcJdIUdvWn1sr5pfRH8ozM1tMmoy4Fevpojj2G7XmP1tcYBYq1XDUDwZACvAFmi28Oe2mdCcjswKVG7MVv0ifcJnWtORjf2iNEasNkUoAJdA4tSFZL2EALn2j1BbdDyYVzFI20UGxgIZ6ZeGT926M5qdJ71rKUaxCSsaGWg6JMMpyjOH6WLTtTTAF8SfXONDxRi2TYnnAChmrHku06b41Yqpd252o4efY0AImN3ExrsK69QKVGIOPEJaJj,cfd031b4ff506c2a,d048daae95db876 -VxddDCbCWxhkW2jyNMIo106jz7vt09dqB7XaPUb4FQIdMubfQaycP38e02SPziTd5hstbkObAIA2FENZjbShC3uiCiAArobZO7gvStk6Ndw14zHpofddYGjSSbm7FJC7DSgYwwVdJwtwKZUp55a9P0Qqn87bFdvoWylg9G3O1jU6ZQSCJmtOkchB2ARPYKfLrm74DGluqtTyWp6qC79dGuHvwoxBVXB262oRqUCnSRxQzCveLYqHrT7Mzaz9Q9hI,cfa354f476c97456,ee21d9487730c292 -yFPsJ0jDffmOvCcjfScTN99Re4Nu3kGxSda3DrAyQO9NjZO6t5i76zBxM6ICa1ra5b3Wu3GC6DE1Nbbfma8Bu6cZ1GI9OfhEy0L40qSIMnMugQkbZvnTp65NKqiycn3xUgwg5UeLaqnyeZCGtn6IMEaXiUXIMnq942H1y1SscZraT6rGqFewyEMYCq2OBLXhIQ1qWaLgS56xhN6qi34lHjxk9na6Fagz4abznaYQIPWseCP11xLjZ3A0ixDoGqL9izXk24Ah7Z7DpssF8mg3KPwQyrW1EhGfGeR9WpJhVje8ytKaTkDncr1pkjc3c5XXVIW7tmeflCAxdoibA0vSCRo6EKbudFVCcEW4CGJ70athVnFCixGNpVTbxDCTvIzocWTZ9TViqsIkpfZxVUiPXo3RfPncYEAyJumuYVo5vN4GZBVkG92P73fv1gGSiX85xD3H5eXeE8oyCFvEZSDa4S3lK1jijgjAWQV795wvHIVQPmd0uaSrhnqZzPxAY4J8oWD5gshIhGsE4BaTUDW5Loqx7kgEDHKAd3s1xqN0DqeLo0GfRhGm1lpjlbqh64I9MnG6Bu7c6aWeAWNV1gP9H0Q4bZePisvBbmT0k5nQlCMXqu6DZTcS1ZNDZXguIYGwyOIbtCt0rtzldmgy3bJMFW26IiByoLVYvGuQFSQBQ7fuw4a3YnePWG2d91skEjjXsI4IZJhXqBFd0I8NX5154o28PSwNM6aERTr2WUUYGpI72xpwwIMmLdKe337XMuFl3g,bfb11a724252dc82,a1ec51610c0beef7 -EZgxI14OlytQyzeGyQr3QsJeOdJzL7xEll1NzGPTQaQgomujiIifR4wAdCm,d2417e2588c97274,3b77233b5e3182fd -M4TgXbLEcP8hqk6OIRGjD5iun4bpj68Rk0iWKsIiMSlQw6llTSW11aJyOhG7eTYl0YO2WDQdT2NaVOXVoslRjm8fRU3dnqRJrxO78Wf0XfPqesq7U9jaagy5WC4Sa680LWMau46sNuf0CotmysY3PEOx4wcbYw1lFpgpkFvg5AeD035wxQzZDBqAoWjxhJ17E0nh7oNyV3f2Sq5fv3ctN8nIlXwvTl98zZYjs7DzAzMYVWRYAmR4poJSA5w1T3UU7KF9J94QJCgOSUmo8IQYwnuV0IvCQHyB8mSix8CnOYpyqgN5XPdLUiNgEyBk6B0oR51Pv8n1HX4qKeQNX4fgf0WfAcQHIlemwwT4DMcHcus8YSOUBlNPpNUrB5onUtI96V04n59M4FYTpQABgnFhL7tsPwJ9sG9Bk61PVLilylNc1eltxcn65HfXYJwgArcbZTdO88DScnbDCsXL3vehmkxUJatG8mQfvKzf8HCPhmZErmoUb8Suhz0NtYEJ4BAS5wlgw2cpCXoOhzxRdMu4b2QEI9rmzMZNcMaJF9tNHXb3AQLZM4PCGxFtJSn0Sv28umr7okiPQ6pQ3j5u7ey2PukFgQFWmyb9aqJCwRccPqu49NiCXHHrv0KmUERMZ4oB1hZjN6ii2xjJx8sgxn6DOTtUC1xS3WonffbI0Rg5UyvRAzOtshdr6LE6F4NqtniIceab63XiVo1l4NyvILMM9D8YrnqgaKQ1aQcLZLc4AihHoeaQVFoSggcT2zzagLAevSz,fec0ec6d12852ff9,16f6a7306efeb04c -W5oajk8hDrvE7NnALELmapdgOtmOAp6lucSTKWipxcjbOGGUmzXEMYNWvk8sv1YK4ZQeEVL5U27s66UGlItNftMw8Vxb5azprWCrh5hn8tVrLmnMhwRhshaDezwi3Fv30mKC7oJEMUAGiuBrLHHvNoNM3UrQ3qZz5yoWZIuaC9SJD7BZZrrRVbKS0Fko8zvcO4I1QxVfUEfpP7XBlsMk0um8iO28Cj1npi02,1841626d79e3d16c,7d9cf8754d1f4f20 -hWpFPeLK8YmmboksUEeMUCwRepC7paQQPZDHMjVxvsJpd6zZfP6JwB6xL3QsW4Ggx6EJHYM2ubQbbhKa3E8XVwPuxTB7nSjIjXWJG4LKyTSieFr9kwgcQupdhfJqewABAYwoKsKLSC1GwlCoH9rWanbU2JAIDERGmrNuEBhm4PPPKjHsW4n89rvWQARWPwPPGkgVX47R3ZxelOKlcaUJEG8YDe9JWcBjWgWgPIdq7ZVPPVTA7SFToCSGyxngO2iteAIGsCYx2XeWuLeZqxGdOYYyHvRelkSDesIokb5ITzFxkAaC1VM1kVC8KujMgr7kVWWHP6hejeouBx8IttuoLmGSW8EadRkBnQxVsS5GP0YMMU43fU2J9IZ0CMh6HhobL1ibXElpn8FSEvwbC5sA2mq8FYmUHVW8hIeF8DOeT,33c8cf5f78e25e86,8ae66242ad16c28c -pIMTPBC9N5NF5RLArHJkB3iRc6rv8luZN9qMW8QMg2nflyZK9EV5gHQGgFzmc22y4rrwkgIp77E1ZrV53G16RtmU1uiQpBPwBEnS88Py5KJsNumSGqlyKBIZJs6cUkvtozosgi4WV1iK6PihBXjWJryNA5N6B6N1MuRIL5jmDW7GA0njQDDnls0I9lU70tsB8dbmSrg4PwLyOvTwYIVfaGw2vaFRUeRtpVz5niW2OIs3c2ApGCjOdQMNTqTdNSja42IgcxuGxHwkqnWql4xeEnVvHhPSWBK9I7dK1oXPrrIsPvCKGOpXqkXticsB0zt09tozw5iAb2BA58VAynJzHLXTcRxQvetJGCsABUVozYlu9i8YK40qtNR4bUscvfJYQGuZulgXqpqUTLHxZ0LVuD9JjeQZZxG22g7deJFywwoF2bi5XYsE8o6nd2tUVEFE5IPe5hhfRmlPNP4j0UKQHxvE8qCFHySVAzXhcL1td7eYExJAPDLJlr9lsr7hcDJrOC1fJEl6SkEsyiYtk3zCEWUlWNPVIMyxnUX3k8z3aUr139ubxFaLb0fIf8kH7eadx4AEXQ4n6y7lqdKWE3YyFsbizBwdW734NZPKX3Ktu3Ibtv0Dgj7ZKYBJpb76WJrg4Dlqqouojr7NXdiNz4vDdBjN3EzHpA7RETWRxqfaoqQFwnBDH3wsDS7h7SZsnJea4wflA90Hf345TYCxBt0ieasl64NMu4Tu99q7NJ2zduzBgchskPMYXba1qOYUMKVjXJGFftPCfNn2sDJMAUN2Cxc2LYVIYsmwzl8WC88bt1Fqk1ulRsbBBUKGAqw9ID7pREacIvHhg4oeQJ1EyL7WZToab4tSlludR2QYwocxR9kh9tEZ1Gv2M8uVfEX0lTCPHSsU5iGMwPqjfBuE3o73OtlvE6ZQenqriboSjbjYv4ZWiwU68SMwCE0xCliVR3H1QH6HVw9IPGyFPfJhgfGqLgGIVzrtmXPd54ivlqW,1b61cdc046cea859,cdc8ab4e17a79eb6 -21HOu1GBWc4ztv6Juzzlu0cscXNiG5MiNFUwfvdnlzqzmwAK3aLpoOECGCiFfYYd6DINFfYmEGWzWZxOJ7YTVQJguIL9EMvoKxm4oWeskHDRni09mglHX2McZm0WnjfjgwDUI7L7PjPClgwxj0aBrFQKkFlYrTsvFhYr8QrrMDt0o9b94OT4BZVNjo4BAQyHJB5uhr9BE22OZSbFHma82WFqmygbhrcKQOVtjKXCFZoBGxDHGX2PS4c6XgcJZ2YcGerhsextOafCu0K3oiXmnyee3rNsJF5xXRxANuQCzOm9FwnZiUePyA3mxgVJQmQAUpFoXdvCUmhfMlWZezA8dI8l98UK4WCLhiwQHthuQnlUJZ8IIATL0HPVgMmIhaqDwZrz45G71pLuirbwt5cYqFZfZP8oKaCrBWTesxujrUYztVhIldXtZx6mtRCcIoJLx9hPbZ6x30bsX7gqxIFloPzo6maiPtqEPyOrGyrXgz0v7DgYigQ7RSsIOGCmJX6o78PWdmzZldXYuil98NZanjwwUQqReUcQUB3fMPoKL2qeTRYZ6UEN97Xp2Bf0y6jLRbLv8WTAjKm70sQkNcuGSlFlBBrTfJOB33D9i0ty2U2HXVVxUjalilG1d3QD5FQ9ZdXVFcdZebTaDuzcAMIirbAArarC5iKUxZTMXrZ3FV6voy8eg8MDlNve01pzAFRuwO,9100d7bdea716fbe,e46f0d449b704f12 -JBv49l72vhkTUFmROox1K2gD1UOhv3k8xCz2aJ4GOHECUITGnLGgAdOLJKz1AMu2iFy989YExAZvXW2bfvQxRRyil5vj6JFraYgioAEmdRlU99V2wg8dlkqJtsnqFu4Ef3Z9m42lQoLjKvZ7OQNTwu5UoRwuP6aI8zxns1VA9BIzwd07vvaJ446gW52dykazcw4QJzzGkMe5FXJBsUsCTof6y8WnsZUuMJ9wwov7kA6ts9kISREk8BC5BkDT0FedWnrV4eQyzixVY6PoOnUwmZs1sEkSmISeaKhPHF3WiJvVeQAphTDJNG0kPFnISox6HHPgBBcxbQaQqxqWT5bp7eyU6cEOII9e68KKdI9OCiFTOv26D5hyH0KSfG8ZALahZwicvHkNJzTvY6OQXtJYdLuF0EefeJCZkY8Q4J6weFAwsK2IjhqIH3tvAAGnFQIzPLbrbkZTcDyLGGno2e1krSRTqgRdq30YryCGPL958mHHN2kT3SANROGHkrphzfLGFysx8JqqbOwI8Yn8kQYQeN7FaywCVpco4GXiNh7f8dBOkqsfMCoN8EjGilp4jRDpGmy7kYXu0VT7bSdAQAgasELoGaas6L36ccFn5viH,f2e036fd2d5c42f7,59e8d3622bfe5d57 -sOhWQjQgcvDhrQYrVyXWwOtJ81zk3D02nlx6dWKA7dqlC69W6QINauB0OPKPMSyB9NMWigHyxyDyamvUbWnIFRzdkzIUxoQgSjELz6b9XoHtfUqdf0L2QukAON6TbhehzANwDN0ugMplgdRivO7L8FYNNyjJBbeIvRPw97xvtNRzsBTySbzS0rbxrIWb5s8GtLhTKDHWj9OIxi2Im1kZnYNJmHtteDY76FMUyRUUit21K1FcVv9EcwGCUMSUtePH7vwdUtbBGOjFUQhiLuhOSGbJgjxZFLmnD6mHgPKPb5tGCRq7iCV4hAhCNJaOkJTOFv6KDWxle7cVaqyndWO3K2YgJ4pVOUZVxQAOwvZJ74gIi6QyGpMfuAWBNExctEcOBBpihbceeBJdNHz3k6bMOc2ZxzuKQZN9SDvzcQQJwzkCbaCOSfBzb2He4u2eTzp7jF6cp71h9tKgLOh4T4GFaJdoSCvShT1SwW5jrFihMJLhhjyPtS6LZEeJvjRztWZ5XkYu81CKE123Z4OvNQ9Q59wr39oqRZk9XtymQXhdzpHVUWj,8bc7780a06d8703a,8990c59a828fe54 -K6AtpxwAJzKKrkTHGzM42IDJmeglVxO0m4xVZMGhR8KP68z6wMxLL2WmNIfQdS8yHkcrMEO7zERqsJIcAempUclg1epnqgsWUPvAgIfPiMAbwCx3XbdTXsDbkirvIywoizTVND5DfVK0bqJhWAvSN24bdVBbDqnBl8A84RMwXLxK28TJ6A8AN7VQT3XEcx3oo5ueFDQlEXzTPorVXRUo5T6WQqAKFtADbb2reYFGDgEQvsRZTG3MUHwLQXq0xReYVZRcQKxzu8n2hZ16W33hmduDmSgr6Cw0mpTblOGAPUTh2ZgdphjIRTP1fg7fui3kNHAgWsxK2deCL730o3S6ASn4cQNgQLiVntmqCiGgMIIlLU5h2KQfUtzBuBO9wgdPAmEk0LwRy7gPqyPCwABQPGoeggRc3eLvIvYQYWfTIGU56BkXRQOHVK96sw4npGhcfIDp0tGyc25KE4eTcwMe4yEJcNxLndVPdPFhrH5J28tmoRjnJ7tnRDWipgzrlJTw43V4p6U1rMvVE51G49UFWSJPWuHHIjHwZeC3He3Z7utEW4DApXopoKsgLLMVdc5cKXXEwyKKQWmo3bRsil8jjbDxdkFfPGxG0lXqsdHKsQfVpTAWiiMsDAByIoOjp4vyJAcjAML28NnDjtoDGSVVUKUn8cN0bEfHtBCoUgueZRUBQBL5eJcblbbApIKwLMhpba4jXAvIIdkNEzlFbMLNwlfmB,ec91787e275b67e,b3146594232c4fd9 -nmfje4Zhs5nSHrDQBd9DQhWtTl5ar9OqKU67gNFiiDF91ntBDbNLepDZudvLFJwWBXwXo0bWvjzqepW8VaL2wB3SaGrQq4UDmTkEhZPcGybtzLXEb9EUM1ZqI0Pxgi67Sj5L50oR31Maxi4HGvJo59dc3MqsCnXFRyOVnSG0RiWkSZyJDMatXpB4xWIByMTvacxUMFok3GYW4o986DzzyxY4loDLeWyhDhQLwuRsx5szAgtNIQBxMEllOhxSgrZQoGcItHxHJZqrMF3pGkJsOMUVLL6lvY0DJ8WFZYhqTPmMHUCl0RxShuDD25KAF0SGtIvOErp3Ok9nxZdiv4C9FnlXbelNKIGY6Ooz4tP1k4v5dlPnOE2jYwrOkbqSnt7CSY0USfbUlqNRshUzObPj7kdWkETMRDeqhtt0hue5a2DwBOu9dX51E1umVEkxg4QKA0umNkMFVpoTVuMozYbc9lFAFUceou4hA6rQdamYtJDQJC0pqZDPI1sjjYNyzvBRBO8EjGuw98vdeUvPhoM1I73mg60XuNxHrKqywC4gKLtvctnoXVlkaN7JiAIvAJ9FsyTiRrCFmnkvTwNygTURO5D6wbvpxvNBHXrkSOteqyxgzCCME2B7avRAIZ18IfOX91FPD23eYefZzzz6q5Tf16ZE1OyZuKmdHQZYRN4iV9i3K49LrbQ4QtK14OlG8qYlL8WxXuv2qJaHpuJuhS8Eie11PBiOSQV83rnVWRD3ePzbNony4YuQEnM2R174B6psql37KyD6fc1Vjfzyeg20pPt3jrsrIWwKXhUXqvHFkXPky38lx4hmFRQxVBnkT1ucOM1s,df8f8b15eb7dac57,f0fc677b20ada1f0 -OAOKyXyVTrrNuZS7dhAaSjChHlFPCfuREme0Tq7AauXERBcSHWc2ZN0gnXgkkLxTdopEGR26shY7PH7CW7PcN3NpAiNcSj5Kwa2YjEph3P7uZd2vcW8NckcrenlSYIExRHN4f82bPem1DLrcnQ2gXw0tW30TZXD8M0rtwYuEgXQGSSppstdPEMS0D9Nv2QMIL6P7GwzuQkj4JeaQVz2Z1aI36BD4lFwQOqmQAIUmNDuITf5yGSCfoLUugDanV5GEzgjThD9rGgkQC18ZUX5H3nFxwlJvzesZ7ZxUoNYJHTO7t7PkaEqfdj6zuqOjJO931bn1f4SrdJiIoghXGX5apWlmjXDAQokEuYoSH5dtzULgWBrlw13nsfiVUFAB9mirqSbpuSN9cwjPbhETPvY8JQ0f5NOSpgcNqflXN2qBgj53mi2HF7jYirmoGwuEJEhzWAOsZVY1puU3Ae8f01R80BTz32sX5UQfezaKSqRUqOqWZ95cM0U7mO1uwX2HSvjfri4Ija9Ob7X,118c2cb607d7d174,daae88c8afbf44eb -FoXhdVuQ9jhqwywbDbnEthqM4Ke0Q9lh7U2vSro4YQp2NQ2VLNMMhEwTie3BPKLIGt8qa8fhLDnr4H2XCt4P7nuYNIRgjSulTD4wY9M1V3ebO1h1TVdHVYlBDUph29y3rCr4nNKaVtLuNtHkAhy7hEsGJVrRMlRPyG7Eo48hfmh790i3rAa03IfnHV3k778AtSclwb5vON8go3lQjmtu9hzmVt8I9sQUdMeTQFJccfvAXWTGoRZg1Jxd6i4Kne8rjTZehBd2qkgZsvsogAKvVeSRfrH3Y9xY,3f3fa93627845e5e,48bb9df6f78ace1b -S7hcoKiOMNh97NM5OSsNO2qQVBjrwnoOe2,e4289c701c53899b,7c414301c23dd36e -3IF4NRl8TKBnX8QtxgMan0imNMlxtwNZ52FwdZ7SCfaOhNzV7yF2zjtLlmbJR5TRP1ah491aBqYrmJtppxNQpGRgo7DUYF8GsBPM2C6fbtAJ2n9SS2t89xHP70RJqutogXxkFQfXzXiXuLmIkBw0yRJLCqf6PPWSTCB93zQDEtveGO7U8iYUuBStJdbVq569W2eEotWFdZjqWbLioVR7epQjZB922XZHo7mk3os1d64WJAhoC0BKIIRzOKa6inPm07fgtik2GJCoTIehCuvPzCyPO3jopCP7D1VaIhXsKOcPqdj7rH01Wwx2WMMH6u3ATdzdMPtChkW89LMAcR1iAlopR8EDe5oAMfesYH3V1SsF4kZAM1rkBN5H5FwvxA785agL5jZaoGMfhCMDpwN2VZo0y7iWpOlngyLv8KI2qSfsXdSgJk88hSBbT0lbY4UWPGEX4mC2fSvUJt5pyLUZRGu4cbOYhDhgRnRFoIC78BjjAuB2WHOHBcw9WxIZgws3J7d6qrGz8LfQsrB1wAJraErzoRdsBSE8iJr9tn9hwmZk0x7zoeWAqHvveMnpLZK50XNgZWXVXtRfaeZ0k1J1YLuueRJNX6lq884a3eVt3mHcxDjlLuGNyorCkAGDqfx287e3Dm6zKkdeoRaDEzitMO9lZIuZmSVshzRnHGk3WEwgFqndLnXtuDOEMB6LJMKD2lknY6khMAQIWNWHHOqXl1VefXe5wthiToD3dx3LmG1e0Mm8kwv7rk6s5hF9hS6tuQVkeVOnnxeWiPceSsI6UFB95Gk4gbI99QN,cedddd4e2006afa7,1e333e445fdbf25a -WSzOyj8I60aXmffSYaRCnOoe4FndlZ4oCJ9AdDzlhEJCYoH1coMJP9cB8tELgYUGgrVQkpMOiTxuVrNS7NgvcTjauxQYXIrubG52wmrZcZVvraAAPm7smlxVgaXarsOPJbKuE7xOc9Qcz4wmJiv7V7j3HyENjQkbNOxX7752QpiDGv8yCvKjTOpi2GvMJ2kHQ17IYpyhxsyoZuUCaewrwoiRGjZrewtyxZ1gK40GAJWZY6UpsDvhhHUhEzlSdnHkzOYmcFfftoPbLg1dkVYse9h2CvYOu6SfckwEZb4hITee6zkGXq9O139eF9emGlH3gDyGhfBRFn342aJF051CZv1QBb5823ky2nfO4khIkqsVPZRw7xwjHOwUiPT84VYnsB5zGZwqoNSNMuRwhS2Ve3vfefQVS9vYZx9KZVL7v199lyBr9HloErGehw2rZHmSYGWIjndZbhG7Jn0iwh3fzHjRtwnaZOHxz20pJm3ilhzWkTz1awxUUxt1WbJVjmxkruKt6CaX54cIIjeq69UU6GiW9jHrIUWTyx2OPWQ520bUOKMixqLTTjb6fEGunLGBCAifBrMmwmWC1kXKXoRSW3UpyEBNCy0HTyopVOevXiuffJbn9mwZBctCHO1N45UWViI4s80eIgO06xCDwbRoorErhbHWufIX0siynkd3TRClUw4OIkha0WNcBVrNJpdiYD2AsgETS9mzCyfntrKm549Z9xflFzesu8bw7oJFa0n,da0a48ad18409649,2878e5f71c719112 -1rUzxFecki1vlcacRxfW2iWYfKhWZv3SntQBcQBmSVoCppwCGqfzz8rfFGK5R0oD2RnrpgSfMjo3tEHI5FVGskqtUsSeSlqHnYpKmlhEsQrHh0qASiy85VHikGUHLzxsT5XzZPx8CHIHsfEoS33QndbeVOsZ7GJGvgak8zJW98Toqff19n6egY2HJTaombG9ljarMBnuN9c9gQmjqeHYQFpF2qMla1b34eEJEtdQRf1Qw13HV8Lc6hNa862dnr4MuXPh3IQuGf423ICxhf2n4czoARrUFFJ0OdM4kVKeakMeCNA8O0tZ3dKZOOgPTy9ZLa70x86qAufxFNHWCp64PrW1mmKm9xPop8d3ovZhevJXMRQiVjBTNC3lQUISqyDSugIyqHWL6w0eKpgeak7joZCCqm2vzaG0Q6f9Q3pMlnbEi3EOKnUczxjv6FdYed303nrM2XPSxjL3xpYj8U89qPhJpWlm3g8GsvVgqRNXvIgvjezJSPOVCPGGA0t8afcQfTkcdktYrAckmgPXCZGfLW1w8q6CFIJBOt49XmauZ1OzqLcvdkMrTsdrueKRhP72r7PSihbEvEBsSHFlRe7M3mvOwQHUDFq6sDCiuVCQk9RkdlWguxSkGvTVvgwpprRTZdR3P5hfP0It1dl6wL3ZuwxoFbA27bEeUV1PCkZLCuyt1ZTyiiQYykbYgLY1kOrbTIxpPP7BI5SZQRx7zRRcBnrnOwVeaRLaOjV1ZtQ9ScCTctW0lyI3ldL9OlGpHrK6CUgOfG2MaD7d9DGNbg6HulFiTOtWRu7R3NbUNwcQQp9vw6BQzp00tnOFU3E1Ns4rbSqLg81wKvvuCN88HSU,9e6cd947f02b8ae5,94bbaf7bf026839 -LuQ014aOdXaSMzWLPnYpg2g92IbUJVcRvpeVKdDeAWxd8J7njNsCDVXNhshRDjEFhRhALZa7pyqfIknLrWJFlwTn90r91rs5HRada6Hvwt93SqECwamF6KUjlLrEKz3iEXS1PcgfBbceyDIzmZovxFFRfiwqrTfoLtBRdpsQ0U7N2jXJG6C0UphH2C4kr9YIDhkdOxxwb9d7ne6DzLnUDBs6uhqU0eL1j6d3PLKzjwt3snN4sE0zko8H35rjXR9FKjmSgYNM8eJc7JSlXOa1mE4QZIMBXKw82ttFM4RlLKzALP0iF0OU3czELtmuQJPcjWJ2QJQdQ9vDK0KgKDQRT,e9a9091b9b349370,335e1f1df033fd87 -DQFzzLANDUHqqZAVY6YKfkIGgeFwTl6byHIDrd4wnsbAe6xUiU7QALMx8k0pCXkYVnTf5ZFjboyQOjfhojrE9KUjpauxiJSI8JyAAyyDW3a29RGilDK2oY4J7WSOxvusCJVpeSgefS4QPqPwkEJ2GHkssheEQHSPyEqksxCsdWMFADaBnDQa5IBX4fvevwRgV5gMdFDhO3e9B5WkYkXpDWV1saE6yez55bHWhtHcfcVznzkq0wfQVQz00sirVAb2s2cCt74YTjjPtv5OH316ZzEQ6ZfkI2sVxZZemulJMzQqk5TEVqMKQGalxymuF5HyolbR4VcVDB6QxWJeg3mepTKxGJOMDGQC1Ki3oxBKJQIFRTpGsbdOgoctQp6VfnFZ36g5Ri5Z7zXErQb1h6uhwWZu6k8q2wNUOLPoCnnADOXowPBmKdHfDQfgvv8vwo229NShzY8qLU5mhvd4LspGlsLTFdlOcZYmOy7s6929pIoatAi1CYw3Bxw1IMDjKoZLyYoizRPvJz2G0Lhn6G8KiHrsy2e4dJuD1Pb6qLLRQC4t0TWpes6cenP5AfZmIUPJXFo8740I2CYCBAVn7BLOMqwvSVaX5iZa7v5qGHx8GbUPZhcesxvtLyMOKjQeJupElsej1CMPmCK68NmeybsffeA5cPXYE9ASgFRVnqz0a134YRRofPO,aaed01fab80d2f96,8ff744283010a080 -7ZysmOmAeC9HEoejneEgtx6wHSV874bEUZNAxYslVx1xngjimequcrTYjWWRMcWgME4EmsR80CihDntDoZmCrz3d2jaD8pIyCVOeJSJEA2a4gRUeU7hL4xBxmaMUzJ3U1wzp2eZgTRNpVaJxyDMejmQaBVlGn2aRmmM4i7JaSNdl2UiOm6XtWuf4uS8JgjiAYVLH5K9X6SC0pm1B3Efuc3ZkPztwDvxZUsNfNABNy1J9FFYTwziVj7VXwJXiORcNeYkmbBLA4M7qEjjSOXA9EEOYi9urCi0AwOKUPNgnSu,88897620889cb694,f60c1c94580750cb -4DAK93na2cqNVsphrHVYGmFuDi3u2SogbFbKEs8L35Q5wvYSCOPNlWflh1dQKgWHG0UeEK9Pnn2GU6pMWxwmLb2M1dhiALzoz0aUIAxYcQsXXw98Zkz651nr5NbnfEoay5rOLmp08BCK2FoEqJmFWLlPAPuUzlvhL5i0l5aKo1FWOn5RAHvQE0rzM9F88es9WxxA1ofUtCWKNkbQCB37VeBjY1FCJnJnOOfGvsuRDBfPbJS8bFHW6YVvnlQYt1wAEYDbPKaPM0IPHfF6Vjy7bMQVYrarSZ9dh0R0rHPiPT23uWikIfxSlqOQetCiXXEQOkju7HmJsvskfW3s6br7pHV72Jp8M3xgYLCsEU97UdAdpYpeMLjrfrJMfUz4nl71T8MEDkoSYRONleoGpuB9sjvChsLGHYuT8NboaoG0jjULAZsMV6uOacBmUDOhynHw0sbifQESf0ZO2o3OHGWjsrJatxn7C30GwfbTVg1QYObOJD6yBHpLU5D5FPZkJySvoiD4mnVlxxdiv7IbAuvw6e4B4LpkX3PU8vMabxc5TAyTg2oMZ6j265efHUJhytlmPVRAWtCkJUTfMR2gJyrX63Ry7toynXk9jVayLTyaxd3uyJyYWfgablYEgX3u65utJxH1im0BAgHbYmsdhWuyEushPKJYXVP6e4Tm7pu5puZ6sCp97Hz5eadCtDPgl,4129b7be716a6ff8,4c937bbfd540102f -SoQH9RB3RF7i13CLorH6Hs2IhjvMNqQDZxSRGYFlYOAvYuedl3glL8IwXpImKaqA3yZyx1xzBAvmtve8TFs1cR1YjSnVI9FDuVPkD6MNzgx6d0fTuK2djWmTkkU6rVYTX6VXaq0H5Zk6IoA5x1CZ7GsyXYBwfnQ1rYhT4kQjP5v5qaVkZ2C4yzIoQltqduuWy7f6ULQqF2JbFnhjX9D5T8M7JfJWpdiTfMaZQCafxkqrB4mlGC9kQdPbotqsOKi1894eYHwcPJ60sqmh6oaVpvXUm3hGotMRtn2lY42sC50r5cfoxbHrOL32cifgs4KTysDVDegYbCKnVwgOyZOXeM2hUjCgbkM2Ogk59TwKYTNlXC5VaJL9ugNECuuCq0SJaiQXHTAbYOTz3rXXT1xZrBIyI33vrsx0Gxi0ZY5iQWLq5LociiCi2KZ08wlIGlzHe87PwlA3voeM1GfLEIjYiW3f7DyFSy3dBmKMBfkGwKoWN1xjhvT0Omo7Xbs5DvjRxfhwyaXicLjR2DofBy7ovyUAcvICgfMZK,5e2b069da60afd99,ad67ee0ea8ba4804 -de0zVgrMZGdIQxH5ZulzIpAJznFd38wYGbco8zYpLc89AD1Fqu3A4YPWBW9j8XkVqtDssAZ73to5a945LnILIg3zN2g7VZ5J6pzQfv6KrOLvhcf5uGbAPIHaNLuJ3V,60cb8331d47fd2d4,1dc67205d1a1f7a6 -3BaLa7yLm3XX5D1IAAvtLyKACThSlxZv7kQkLUJ8l1agqQo6H5C4aKRVS1st13gySJiyF0zNlhJrFgw0W4dILSaWhi01mvbJZP3LSOeeQKIKOOuIWL2OXiIRKRmdFqcz0it9OYSTdF4yfCpEU6bz2zsOGj8KZ98z8gSBB52yuTvRatCkITqR8WyuClRykJ5AGiF5InTYAIMib3QaXuT6oSVI7gfeCc8tr7gAEd7bB6SwmNBcOdqQhECEUagjJVNDlq3pzuenGxBi6vcAptv2jdKEJ6m9XtHuET7NAxgi1bVZwuGSv5qAECDFzOyBjUGeOpSsFxjgtsfBTbJokRFxJLXNvSGDtr62aTdNdkz4T3Jxm3B3PWMtcerMe23qveUXcG7mXAbwojPsV9zqNGWJdbzVXoxA1w6NkkdTU3TdE91vrCFwJaOF7un130ZJQLzob5mzTjTuIUVDsKSDwr9tTW7mKMkVWQy2zKA07ycnHlJca7cz67aWXHsxTUi8F1YOe7UsHwfe6nDzYEJW5TauXCk6xNYx7K7YYqarTtr4mJBVIsEt2KB1xhm2ac0eaDTbphueZ15TPu1DQHTvZEVoUWIJ6dubKzpBBOMRIwfMtY0AB5eIj4mUCTXHZI4TB7KCUcZv9DjISnSpnM1Tdi48DKBpJnn3zNO3zBM8up8xRtT6FDpLxDgszq79o9fUrlhJB8pAmYWgIQF9GoYnDKNftzczGJOjCZgeasFeHJVvHCx8WFBEcqARNUQS093rWSkaFrxM5VG6GMkdfA1dhk6Baz8hSu,666ca3ec61e9764e,e7b1dd93bb0c1256 -MYmJQMATO9bPvsdl6RnakW8t0Foxx4IIE9DIYoYIDVr1aCAhXMFVRIrBiWxnUxpfyvAjs3DeIGUmo6VeN0CabvQmZknuX75nrIhDX6WZEAIHKvYQJAKIETdQTUPQt9pKY8QhwmuvkXo7N8SV1RFSDWGTA8ihD2773er4mNVoiDAX6ayU2BEQnIeEVgMYn061QFz1dEgH3iAUNQBYDrMsXrMxi9AbTn6WGppGNY7IfICtQLG3cIxwGj63IMpqghdXCFkdUHatfVNPu5dLlmRJGSDd85a5Ycxru0YBiG1cAvRWEPayqdmCQ1hCMnDWNyOMt4Ew32fZbOib1k6qfPbj61cAsayfPURFAUaUiHuxmzntarfko3TIGgzRptwqFALvgXN2zF0E7WqH9Z3g06mJZLI0t9Gi23IDu7AFktGFbF7tdtamoZkWv44E40r4PcMQMBmMM6nv0I1O9xoOPZNAVeZdgMatdlyz14KBlIZPVQXetsdj853lsChKbabEQMAaRWAmPahHkEyKvOdqIXuBqo7rGKwsB4ZAJtXwvVrVSwOq2JFjYAAhWu53Z6DUBSdVut9OffXDodpOQZ7lRDRPoZQhLrsJZHdKl4uoQ3MOiMQP8khBeH4untket,a31919e579a82f24,e1996f48af468674 -xBgOYb3LpeSroo7uyIeykQbhwxTkaIvmu8L1mnjbAb8uaDbNaZdNYyNpLHxtv2DPGkL5CThiPhTe71qJD3m7FtLj93S26MDmrv2nEhQzwQOL7Ha3tdhrGIHdjIMPYXcOxPC9UPyVqbTEGE6KrfZDkIKqujU5h1s1sma7FDaka9Q0AjufM0v9A4svXNAHF0sp0tKyaM0kYD1fXp3lde80zMZK7zm76woY6bCUtCLVtfbtaNDBcaHv4xh8X5Fs5weeYdwfiAbDOKR1TuIzSCkCJBTH5OMCEiHBiaY1N1oN0W3WJv60ntYVIiRD9nBmsTHuebkaBRsm7m4WweyITUbX4nogCVrCemBFAZzKXJYjEvnNXtwgaPfXaFBJTLu4puPP62KL7F3MGT43aeNiuD28Y6Zosb1gyl6Og3UZyThRdSC68RFddyJlGrmqSzpER0o4MBmMN9Vp5wiEbD7I3U1py7qX2EktrxQHOmBO6jL2wtMNXEJMpwAvpUbLTBRAoCABNrryTlKPaAU892Qhpa6nB8ZEdSbYssIUk5lVyQnaMpKttkerwOWyQxcqfxvxk0cddqiEXFYbGfuC0SgjyBur4PWyzkAkbXL9F0wcefadTTMobjfWd5vHTpYYlEWm8svPTy6ysZOE53WshsDbdXyakVpMOUmkNBmBh8ucylA60rKgaDsoqStduPft0lOPrfC5d71a3pKGiqpWmLQQGM0AnMjSFeuCvHK1VulAydrMeASY08KQzEBIgDVOuqxvEL2yNNzlkV91MqrWQoMN9unStCKEDIHKQVJcspAZKOcA77UMinWYdIB0ZtdHQz1ZmdrIBZfUP0FLwlRvCDD76EIHJ8oJ34lDufSRTQdaUsCztdAlHul4H1QDaQwx4Z2vn,79e7073f27abd7d1,42091fc3a1f954a0 -jbLoiqMSeDSylzw7gcyNb2e3fZzKSiWjbVo2Qp3PALJhq7OLw4Zg5i3yGuUb6sfs8lPea5XoerDB4BRbBqJRI219poGCtesauUPIMY1tfO1R0gyAtII5NaVnbxqsRZAqz0Ul5LTne5fbV4ENqaYYJYfjy79vYtLefQpiIneKTA53YF58ihLEn6phmo1oRnPfP8nRZXV1e0JgVeVgWAK9OjuzLn2IKZ9ZmhLVFsNJsg0SDLyxfZCbmPNqtLORTkG4HHxGcv0NrG9eErdCDEiQWG3AmbPrJQnU7DQmJoK9tp6AJikpdQCXqRrGpRgHyiQMz3IwJUrdKKoZKu3rHoOPWeChkoLDyjU13mvflJc9bfzLj0pF8qLXfv0DKeh,9778c575f9e17b02,3bd1e5ccab6d247a -N9y94FvzdftYzqjWZtdWRowsyxPbefzUe7ClyEdoTKPtAgNkgaUTd2dtyE9c4ijf02pfrVqqkwJ5ypb55lKDPnWrYtr0KwQfKl638YJxEkVt9V38hNYoJGHN9EFOWxxRcWiUOGBi3V8kBBUFn7mCRNg7NCsrrpZQUhWnAAtHrKF43xJ71O09VtPbB67CjocOUlSFjJWSiBL8hrtz8MRzkK45tRm89oHHeWiJAfd6qL9WlgQ17itzmDrjhswn0gSOzNdQagwe2mxoKpgwMzqRIEqlDPIl6Otczhq2lv9GFTEauckkhLLTuIEYxhqsPPy26DzbTZmGbgRGkHJDy6q3p5qVDD1Vl39aF9TyHcNs0Gq0WfxAOyeX0KjNgHyY1cZON6xFfagjeNImDxmocAcMHMqv0BDCq7B0dL2TwcYcZSd2hkv89TpC236cpUyaJZVm33gK823EMWpMgfX1At1XGHAtcBAbZomGMrlwIBvEe5g3xjftzUTRQUEA4zHkJUYqfmKVVrMs9uaOCg9sgIDHzKbTeZjIJ7Xk2hsRMSZHKM7Gu1Yfvrjr5ClIGVrtsVQ3f3quEUAV97beRFy3tJojLdnFXtmYqps2PdF9wRutkyhRJJ1EnePrI9vu7jbbVIYPxRU0IS2fg49NigLOayCfOI737WnRiJvOx,ff4b436b0662cbe8,1ae3104ff73034e -0lq7sctYeuk5iTlIfIrQYU1YwH0lSh8uejp9viJMr31CPh118RFHrUbbpYR0rfpfq3hGWGXrmGsX7bK9RAlkkV4QQPOSYfnUXpPoOrp6KNrZbspHMl0wiHC5eJ01YSjoJrbcX2NBfDS3s8uZ0VYdzML5fXjXUKSdVK6L558w8dAvhxvvaZzcq0GgFdFiZIjOGx52vV8ygnoNuXlb1sdXwfjpuJqX6uhF0qU31jSOWOxPH4qH8D01bccmP5hU0s3e9uXR0TX4pjukDA70q3ptLr3ZJlAUxHNjfOYm9R61r6h7O4JLschI8,fc5b78df2ee0c6b4,332177417e3b9326 -fVQVe7odBORzUjyH3AkhorLomfB91Sdr5QOhMCcATayXwS0d5avkZW2WVQPvihtMPhg2UpKEA6qhmmRfMPwEuwWfHBQaVlq5lDCwSs9XavyRvohf3zbpGAvslvHV4Altncjweii0azhQf0gqtqpFoOyoE9Wlm2qB3q6aZQL43Byvzjr9kMVwoTJWTuYokeq3PqiwTfOGMHspofLD2YoVYBNPBlEdZH1W1k04PMwuuX15xFDBhq0QAuBeXPcqmReaNfNQWDK9nSdT6m3rJzt9n9SGh5E5ktIBwG7NhACW44ifUyVuWaQcNg04Y1pbFr0Am9pCRinFl3tNHieESFDrVV6yVSzHlwBHjTcsmT1UQoOQV5F2hzSYsGm4wHZXaQpARlnQOaagYEfKnxXKXJ7pDYTCPCmbnUg3YTKyWW0SkxTjYZySIAMNES3HloMstFelPbFJH7Atw52qOiFk2cQfKT6DmBpjQ9Zfu6PGC5gcc0oaBt4YvAMahrQSYoLNDRpRFvaRdHGKj3GclIN14aV13mdjrXfEljDUdfmE6ZpPZ9gpfdb8HfTteRp2s5NjqrCj2w6vuD8ecyxl1xWjqFpChRQHExAmjlLkMucThXMenvYVsnCA,1949cc689d4b5d08,ec47cf561ec74ed7 -gJslhjUSL0u7YD8pzOoawX3CmlKmHRpvC1nJaxwN7aMyC1Q7cDVsVrxjdJDGxISqbgdv9XPcq2kbRzTEvqMPY6ZREHz1edzmf3VHyskN8bxuaY3nwwKD7UQ8qcDTNkYK6Rp0DGIOG,779abe9e58a9c65a,aea7d020999f14c5 -n5HvvBSi1t4Gl9Dm5d9yAhPPcZAlgQ5s9hO4ZxzbQsc,95cfb0486d79527e,c9cd46684dd7b02b -N6aWUcQeQ4mTzVh9vV7AZnc80eDTZPzLyBy5FIBjuy4Cb9vBk7yDjYS7OFLLGOn9TXWorQvd6wLXW9FTzOpajHQ0Ufj1YaJctYPsCL0eHyNAy7VEmo9roRzFqnH7R7DfXZHfZ6TfhaCtHVk47uguCajX26ycVaVzPmu8PnYbwYmayl6IZNMyF6qWwZzrCelTPNi3d8XvlS53KxCYelNc7jP4bfBaVMuiPiMxNGzSJKLPO4hbTz3T0FCh8zCB0Wv0LftlkXwwnePhtOkImFu2RccIeh1BpJ0iLyIlLAaYoqueiiXJabtO6jDJtxVbgb7s7KoZ0Q0Ey1SdEeinqaLLWVZzLVfe2rk0K3vbBglf5FpqPmo7rJKArd2Cqa7Ehdz0zfDiueZF3vepTGsatm2fbj51SNVG7kEuJFaLcUvSs5sXrhyQFH8vYVT7lscxG3rKwxo1vc653du9KGFHZ52bgM7EzdxgixnP3IsMianjG5abgPcUZtSg1xFGLsoUfhnptNqTAZoAkuC4BW16mCv3S3f7gNfOWpdeUBLYG7qB3YUGvUHDjS56KMdUIz4X0QzWkO1ldNWQ2xbgSuxPn7b6KVQgJBokeaSPN8mPaiEd56knSLcFpd0zqyVlaiWknAEK7Bl08JHabL96Ie0yJ8FMUkHoZXnsLlUAfA39SdFnb55jopiUYck61gKDHSwXAX2p6v4QUVMni3fMAdBtH2vgYNpSSCXAg4F54nQeViIgXAMS62336e4otZNn81Rq4iK7JRc1HvdrtBjNVzeLOKODBto5WWxdlrpnjqMJZRNyHXHsGY5vW1xZxRJeLMp1MITYXfDVjEn4NlXEp1w3UdMJpu8CQGetpULIhbdaWzV6aMKJ6jIm0IhFc1w1DGkZiPxUmRXMiteqUhz7BV9uQmDuO8yysR9mOgatJMCd3rGU6iWo1Wcqk7xMqkKeVaEW0vZuzwRBbItHVbjNkgFEK7eW5sjfCjR1GfEKD,3050da0644f1ee7f,51652f5b09c9b35d -dziNl0vkY3GS9GnF1grBlvy3nfGlVv04s2N2oUA3NG6lglMdAMCvikL20rGkRJcab4rHDTuIYxTsienKvBeNOcupr4ysWN7CB5f1upy5KH0uL3gNJsLFdDQIEynzqjBXphwmss6e19I9vDK9Tgj7ucN0Yaqbnf2dufBmXwfzCNVx9Xdw9kntlbT3CoaYQRFlR9YsdA52fAtIgUV5TJ37cGwV5quB25cxcCSvhq2cYsrR3FAqY446kGzpF4PCSVi3FMs,7584c2e2a88922ea,a4631948cecab9d5 -T9STbO9uxgsFXwvf9WBmCax1IQI2egLcwbBZms5TFGKWIVSmd3q0Iq5jcjOCyxT3nYYGZM84Qo4aPqLbZKVF2HEE692X04jT6gCEgGcxzF2VF1Yvf9zGrvl0jBpTCf5la0a95JcZnip2h6s5TM2jebC81HAIpopK4hysAbzYYDiDL13TEinUc2PBdshvcauztESoFsJV4fZM1A8SrfPHXuxoCtIwXaQkJehHBhoPakA5v9AkauliazQlMWXrgke15WjAWxt17f1E5Pyo2ywIvsEdhkmBV7F44ujb7Pbp8GP02r8lYexGCIeDBX8YqPrcdZxe8PpO2Slj83xZYoswDpnanDmnadMgVprXn4LdnIccrGO4b32ez9TWZAxkcs4hxWvkG0BV6J4tPVOB98ozIYacUYkzLAuc3bgt7JbAOGxEi2h,516f778704702fc4,8c0dcaacdb9023d3 -nxLoRcl4L3z9rlqkOdirj0f42twmcWS0OrvQCJII5fh8riD0fCY8x7aFTiYJAg7YMWQjtX89gyxmLYKAm2dDAnGTgF4SMrnBPEW9TqOQLYFkRDr1ONyPcUxL2SWu4Wzlwgs8gMrmw7fUUbf5o0XND7uLxe9j3VTg3mHjQVnx1TUefjyd0m6GLyZfsOOA45xmlrdXJ5kVoE2fQqn4xnCDCdQQ09vDoB7jFkhYsCq7niN8z6WbUR6aSOXFxAAaZtpl0OnFEXEXdVAFXiE94A2cTpYnFp3NayHpGYqgHLb1Acgms5AmA3zST37mpWoJRRj1srL1pMyk1Ind8dFMb96svnXAnhmxrP3ETS6Pk28mYkP7JcX5N0CEUKZp4mNFwkSYeADGqS9KfUq4QhdZrLiPqRPVP7HshcC23wwGTjVW5VKyZGPo9jImCaRFnuMP87ehOZxh2ExuOHJRFB32od0VfjbyRvh1q520Lai7byp9kz5QSwWDdP9OjA3Di60b7UZlTzu8rYYg5MkupSDgZgrL5z4toFcFXiHdbYfnOxq743WCphjt3CReBhTJJnpzKfA1TlKr0Hus6HqnuljERCA4F2fFx6FvKKJUHCSnljhrkxEqxS3DneioGk5lOWbnHW8hIlZV2kW11sAcUhZi6tPuPsJz9OL6i47HGAqlX1Q7AzEtxebT22xQT9YsVlOxCK0viRzwQPa1VjtmtnmCwcAri2w6fwgDgcr2t5CRPDT7b0bGx1jdEjOqlXk3MDOC9rQslHq9MmYXe0pstBsmath7BZm0Xtltzd0ML83L8Jx0KcEgl0dMKgKFOdRdf7vEg8SSWsjIwZ2emVZ0wr9zl16hkAcxVS9PthYWSErK,d0b3cc39a188a56a,c164ada59cdffd8d -D3jesm11Y9D0x1OUHm3VB7Kxq9poXlYkvRzmHNU3wMIbCtFXTHDVXNkYFKQVH6V8rb6aoJo7mDVPIc6CSnXjIF2CJEhbru0RIU4mgfv3wQy8s5g57AOVwg2BFHpEnlJ2Jz2Zpzc99LtqucCBNdlBdzw9wVr2i5Ax9p5elI942t3aYuaU5F1honI0a55s7JNN1GzSHWcrhAUWRhY0ydcLQUCcUpQIeiRnQiRT5kKJZAJHh2NCunykdMSNAXHYEkhItiXNUiIId0cvk9fIwDg5VRAdfJ78lqX0hXh2rdvA4ycQQydfd4kJwjkRlfpCNbIV4hG5dzKc9a474EHV4it8gZKB4Mp1oEwhT8Fyt6dNYHrkRUki9GQyxDdrNi5VfKRN9phKNKyN1717znVA4rp9T5OXE0CI4XWuKB1iiVV2Pgs92n7impQPKdLO7n4sBglEgQlSuJtz7rJLqd7l2dpmpQdE41cgmalrsw4sENJt3mVQTHskOTrOWAktAgGLurnad2IyignxEq4l1pUxrPNndiDbIFHQa012zXXREmjPfwc2BYa4w2gufcDhZFCXpJC8L3FpawwW7fw9phfzdxDUIUD4X3DQ5xQbqBEXJI6K3BkW2ii1baGZcfAPnsB4XVXXdVhJYdHZudw32EYpSffAfffc8zpVzgM5tI918hzs5U4MNoguwfNWRRYCrr4LVAWRNYMrJTMFL2aM7Ga04cOfwl,91fcf1402757b0ae,5c3ef66b4659c17c -ccq5bqUJgETKIIzPHpn23CYFPHsOVhZg05UzZCvQtcSu1muCUTCAta788MVCFdrZ0dTNhbfzecVonGDbQXIzbg8hJk18Fk,1e2ec4919184bd96,5746187716793593 -G,8f72a33501fba7f9,2d5e9956c887337a -ISiMie5MJBZLOUZMeBJGPz6fo4II08wXN0j1ZMJDouqT4XkxLlexYVlOgj9j7CmjMbZexMB0fhST9EgVsv4PEPSYz3hX52vXXcOG3LR1,8ab02f19e284b4b2,cc2581927b8ecbbb -QSmUmmCmBbAqLeZlAKwE7iw5vcH1YKwk5xVFHy1rX9EUPhvJHU7mBUT1YPMXCX0CWa8VfuH1KV3qm9XL8G8rxjeMkzisyUcHHD3lRnZIxEZsE9rpHbi4SvzKwYLe2vld1iL1AiDmTT8h7EttrC74NSsVTrQRq8F3X15pkcQ449TPmeivWArltBuSeAcCXdCppjkHGvqzOTYim0wmzQ91e60yxwqo8ZoKC6NKOG9LmIyrfWR0e809L4F92VR2Bl8raXQUe3uuuQRD8o2zy6ETyZ23EiRZPNn52nabBy0LFFvua2QiyjckrxulXeNiVVpnSqBp2okiS9gGKhor8ZShNJFvr0hJrL1pmqIupfPM3kHuhU14AJwFlIekT9mKLL435dDHnU6k37ZimpQd0q9jn9ed4rNAbnhmPsNeXH0sqzEfYgk1D6tVaQHxAlOwgG7A3OW7KkJHG9dP6sTzVQTibYfQQs73DDPZ6tEcBoi5XXgadtpkzIaqdWyDM0Ydn7N6C6QbRaWwpnRRLK6DYvaElz2Yx6C9V9fCVFBbMnamhmoW8FAGXGGqPjNKPikbZATHAmb9yrLJUA5lZD9JCjTAhxmNZvm9xEs8e2VwnQG9Ff82K0a806J2sc6RJ629LRdQFmW9TKIxytzKg4ZyFQWHj829EhLQrRN4n3wdpLgtJAmgqdOXIaqyaGHBOgEVhd0doA3K7RT2PBmilQj7A41n,b6e3d8295d38ec04,873e19696f39990d -JWdcL3qdBBY6HLDr6gsVk4GRjuMRymLQ2Zk12pbDgegOFROgga8zcieYeavGm64nHM2PTqPAXH9yz2AaemGLE0Nv33r0jKeYnNljl82vx04APfVIgUMWCAcWBTguiFXXWaiTYf0YajdX5BCXwkmvhJ0HATl8TLehDbsHoJ3VoiHrDWtldR3iVRVbgOrMb8H33gPH1A1uvUv0bCPTukKtQse1yGK40ePwQhcvq0yf4GqfpRjcnTbLKtsntqTg7n2qIwqGGAHfIFHwUcwVU484hu6P0urePQJ5GibfHqTMlrcljk6lgQX6VG5d1P94yu9R8YwRdcUNMWBvZYOD1N8Zv8unIyjxu3ctnwD1SnaEc21iGmou7XUi19dAAgzehrA0K4rqASyQJtOysVItdedZdHnyusr6aXLGzXxSIP9tGahKV55L0TSIRMB7Iyn0IyTTyaT5gflr1v44mhbrTIbGD6pQ9Vsl96ZrROQWFCWGxrkxfv8JS962S2JYlxKUfCWHN42EFkeOprTX1nyr8kOyyQIawJgsdhcycAWMkE5FQ1rw4OyVOUWLdnVx,d11871e4f3b16b9,6b499183f857bbb -s0ShtZNOicwMYc8hwaBpJ5wzzxKpA6v6YcD0rm6s9aaKp5ObjlPQ8G5RcOgr7jw0KG,cba4b84031586807,331ee66ae54aaa84 -bUFIv0abkbrMw5zVN6HUKMSlpKVeVlU9WEPUz0nAIDbB9DvOZYe9Knb8x572WLrIveDzlDGNQqTupos1EoSxb2rFbpSTI9w2A8lq1Slt7zSZcuG0a2hWIVw5EPNMx3bXk7Uzqf1iRoT70vEkLKUJ8NErzE1s5BGBJJFLvSscbuDm1nshpQrSB0SroJUqaxyxdra5RomZRRnviTOwMTnBn2xa7b0FG4rFFYPxKV9McyhfFgOl7M3PhNWDiHyY1DLcnefjyw6kG3TMWz8w3Iuw2ghlIhVOp0BrB19ghpbCmX21eWzP29gilzk3qrJPiR3enwrHxgQ2xclw6QAAmfvUZRllEwTAAllsOZcqMjAI9inNzc0DFaXzA2SLslDgbl9pachPrr6YRnlifSyQdyiWjkuMIP3r306XJTZN9McU6v3ibXFquteoxfonfJtQExkRNwY98EfTinaQVF6OaSZOrvlRmgCfxjV6br8zOkDXKKQUXAt77prajo9TuqIyhQtzGcvJxFBblT6Af3U12NlMnTPWFR0sqWpZFs1lQQtb8PdgCtbc4tBYXAktOHt0uRxcDdIXFkgdXSa89k9NYZME20cvEkH1U0LUQOGNNpxD8OC7A2pAmwNvxYs8chnG5g9W0wPOPSq1vBub6KC633VYfy5WEhocQlqnSJn1fPNVdufF8CnL5mt5cTkCfJl630q7Zwz5mMovDVx2vcPCCr57wma6VCUVMGoYi70iofNACxtw2uf2MItE6sw21iYyqaYDuxGlT9GwKuCneuYxj6iAvDrTzVvcQSYGYyUkIDsST8WReImkwU6,e8cbbda9a31368e9,2147f0f402d2f948 -cbGQwnkKsStvUR4TbD3F56BLWZL6S3kOtxrA7GKhM9N1PDYQCum5i7Ffvu11918rVkJaeMrmDH1ykh2CS,b51f50923c53352b,8306a3e53b6be2bb -KkZ6WcdZp0qr27MWygtjE8wVHMlIX9vYHYHNvd1x550Yii6OveyVdUBLPHaDFwCTUEIOY6BVrPBxZhHMv2dgrzrq8G4qHS0CUKp7EhQa3MrjiWm4Ma00Xeoenr2yp5s1VTSBKQIeuVefgITh7glhuSxa1PWLjddIc2ATekpBMDu8lCzKSkhmRHU68caFtBlQEfmLdV0QuHusRVHTuGNZx0nOThwnODyQbzGwsvh3mbCOwCBnUJIpBd5POb9GC0H6u8yrO3u41kkG5sN2xNvTNnn9YiIF02e5dKjzH1axdD4BC8LN0pVITI9zXTZkZHkzdQeogCU3xssCYN4iqLneprziMsYMuYzwxDlO68ehBuc09bWz0hTKILZ1lyYTcNj9kZGh97EhLfpXrEA9A3Rcif9RB3AHhfF1MRGXws5HsQdvnlWB53hSoIKdOCQPWdnRy9DtuyNsZV0xnkXPBKLxKhWTSoknIoxctmCZWvHndUMRqWA2jSaQ0j23GjWftrrk8Yfytct3fD1w4j3xPkWMBIE3r1VLR7Pg3HvwVEuUGJxtATQ06EAzs0lXDKgOlIHLbhSzPo6aERby5zizMeIzGE2G4sioDIn0osmjEyc7Df15HTROVqoIGeC83CZfsNHbfgHFY0BxYB1Z0vmsqGr9eHp0N5etvL2BsorHE788rGi2x53jOtI2n3zuDDgIZhb8rY4rdatAPzagHF8TqE53VHJNWoqe3dXvGSEJYNguo6AAGquHS6m0eOncqT7cH78ufg2AZ6e1RGQ8VPvrmU5NjfndiUKtB478x4RXvRuZcpdLitiFJYm5MQkXqaCaLw121CEpDjlgrRdOXpfiRDhaBhuOarcWeJDX0BcnY529Pd6BuFGt5SO9Ls884XHTyyLFhNhUDjZ8SfbqTAxn4sW2AGgb0SZEPREgtdn4zDuOl,c3c743d8314ea686,72aac96cf734c5c0 -HMKNmdpJh7gD9m49nwp8CaTgyatwhVE9XgYTPgqSJeNRpOtkKvCKMY5d9JaawvAMeGqEF6fT5QbAY8Zg8X9xM619RvBUyohDiHepL0QAILqZF1FTp5Ozlh6krP61xyeoJCuoVNr8nMvOLzZgXmk90chTKLKDdEJarU83DF3zE5lPdgMDqw7FcXjtEuoVfbk5DFSWa488GcGJIAhOe5CpkAVKSx0IjNYNreRagbeh2UPGR8IqHGTwSQceKxnJy5yY9XZpmBsuSRKYm8j013a4Wcpz2ZLVksN4xDqg4duwfkN4sSvmRrOYSXTtqRU8i1xM9dNqXIXzNiw0LRtXI8FDMpDADKEUvn9gcM82MfqRJt4FkwRz6vMQ2kE2yEOuU6gHYVRtcZBrdStBqZH8bzPAZztogS6jeOviFKWRUnXP4MUCA1RBVugvUUvMV2Hk2ihmJVAiD0PDwUj31JSEJH3Vvwv5vKkbTfds3zLo0LeBNqIeqo5rUn7TAtZsmJsYINBGI9spvGkM8MKz5O2mTuKkqaNELCHTuWRklax9ytiFTj06TRaUOb9SVU7fPh7luj3nDrjtG13JXCSoQng1Lt0tmuvOPoYhsaUxSfNwW8b8mPTVQg4jDooLQcrVEv4gBCyLHPhHv2NvkQUGUQz4gbWUlHz4ffV75iivElqJU8btOQcgu7Gu55srN8ZFKtpdQS9q9T0EC1S5dhKSobuqh6Z3jt1ZFcWzmkgYZ4lXqnsF09JuLIoSJRkF4owyMiMEA8egdyHglmAc2Q72ycI0pFkMzTlrW95CicoYIDQbZfBGtrVeHD4D4,7e379e3e380f8391,fb7abf2b13baf6e4 -g5kGj1SJvA8Y2NlvOHyUbairnjaGqdAoCM3iJN7LtDnDSsuxZXyRDpCCV61meoQWz5971K7FEGbWKQVKBGYlbH7QOQczuDVrK06hDR9XKtCG37B9PiQZB26F99mK4ZMyRLWOSrUerSMvXEF6VofhQVVYxqaYf5oLchEuxSvrKczLhnhcethfAjaVg0mc8j8XCIMJHgPGZ04kqjDgaJaFksBhqYa4zJopxsmqGe6OTJzSr1TE1kKIpSQRiGnuueqJmRXWSUoeU0XWu1ikNopF5jGFOVkuFzqk3ZrPdxK064s3JkgruPzwBntanE8PxpIsGFyixaq06QZWxn9pVSYcX3mDXeRW3cuoZ98opWjIXl3eeMLhetaOqORIh8l3AtAk8N9ci8wW9g2Ro63YoVo9ROKHpz2j8AoahMFcmSgGuigyj6deztTJmvu34KBfkltqMSlx4geXkypD5YfMm4pgPn8aUZa2klXHpLDuKxvkF379XA9O6VUh9dnOJQJ1Cnck9ONAbLRHI3R7jkTKMNsmvsnUEyvfbLienE9TNWH8HMYgsL9yrHIpt2MWcpTcxXerpN1All5U52ymovIIEWsP1u2HhbNMDwpRoMrQBRZAYnGZppEaWsCUHMDut83yewbFjKWrEETCoF03BVBtGcMV4d4yJj8BsIh13gj6Uk6Xe2E4NvnHS0HtLLB4Z1Alvusat8IPD3u7NH1bC5ANYl9vhazge7iZuSUpA0C5bwiPwyCl4eL6bl9l913HdX3TXwvIR0A4Ms5tiihwBuOqhagzvtoJEa3uu6cPWZtXQlvNkwmA49AERJCMt86zbu89jT5FCWSTkXvwOxvCBkW4u8R3y3Jwfj5baaxugOGYJPMLR37vTfo8hD8CkN0Dfx74WQIKeQ8a09Txsfk8zPtzrRMSWuu2xJThfommT6HZFdwJE5eJNU9aIOeLmbXS90KD0hW3QZbO1xNRuvxQzV5yAiixunP9UHyDryWcdN,3b24dd0132ae8b44,9bc74ec8d0659d6b -fEfwk2XV1LLDGEgU2cI9iFpf3tLypiBMGmKE9EhOxFCVszUHPNmdgtNoyTBdzuqERUNgVzMyD9JuYTrKutLrOoOQMKLjLaKbdKLF6,67aaf9e5f172324d,836d4e034c6231f1 -O0Q5T4nkVyP1HTmUbyJ48iAKsB2OTVs7pHJV8GbZqHAnUS2SEaukfyYALz77ud7ZxlxakVw5cM4MI9W3yR524lO2tmy4GZN8T73XiiQtKH5zq92GrKcYLZ5sarZMhY1JLSlizuwvk6YCGEX3Hl6ODXUE10Al49dzdLiaayYHnOJ18eWhLgl2rCk5tCWFNgEPcGEdixTaVnzcp6HSL5DoXL7cnjXaKUA9POuFqNu3BQporP70xoLOtdh8nbiJq6YHbRHkHp4P4G2ltyQcyCOYI54zb5zrSoAZERw6aVYhXY4YjOiwmPiri6yT8cOJTepdj7oBkIkqlixiE9n1TBZGWqXQjQ6G1PwWfcP3CnlMx3W6BwMb0Tt0jM2u9FOW2QDWe3ZhGJkPHwKJP4wUjRcnhdfRU1n7uw6lhQQHDHHSa0WKdUATxdjvVzqd1EWeMnwXwxVagcyejvbk4MydcqDNQHsGaOxTu45TUgIGAnhxFm0f9ctUPYzjVag3W8zVlLu7IptHlPdb4xub26PE8YXONgZRAI19n7VVtX98FMERZ0YQarVICVsNhBsN0FiAdRrovAmad0Yl1YtorC8RTTxMOgggTtzttIKsOn7x,14a78a929babeb8e,251c058919f7bd56 -IgRiYmWdRiF1KGsX88MSh1l1DqXnpg8MHvWyrPTp6skn6JhXkbSVb1zwh73kI5DP30hxx9X6yhE9ASLP3CAUG9QwEA2k1g3daBdg0UuqjFcbG9qUAb7GB0ng41mrxIYgPXKUad,f42ca0dccca9726d,f28f0bcafb54ac46 -4ApwHyvkIG8Puz2vNNvhaqPJM0ks0iR99a0tYWDRW7HqWsvF2YOI6ZGm4TH3NtSqgFN4eZtV9CYXTeIsMho3FFDua7hdv9AQCQXnTarJpbNrBfat7OH1BbCp11iUFtJ3cwIcapY17xieHqIBtNNbgBYGD37BiIjYs3PC4uzWO5vLaKNpHEvbPOquBWitPPkhxgBhJa8eRo2CatX0jyjQZcxo6gU9zdsK8Fh3WP43dYb6K6XwPJSkVdmRbrn5PbEo3CcHiXLAqkyFm6zsC0StTwOL2cggHdejbCEfCr8K8mE5l3cNv82rtlTOLHmneYe3B2ePQcSsOwlEsW66KRHVdLTOtz4PsZizOlJlRHtYXioz2w5x7NAgDzYeGRbLqxE8st7tbfpZbxX7wYrUJ3v2SA0IQLhjfswV48eFOqmtNSV6GwwTCfIBjoihIrvjMnVMbN4WKgzmtCKO3MGNlEtIscIGcUYY3bK7dFgw00skaRiGbDLpgx9yDhJkjb1KmpAxUc5gAv6h3bz7PGnGhKjNAyWvf0CkbhhoLbtusmdaNC1yQSKYYJ5tirvSQFq29SUNxfc5euI6PuovYOf9CV,7bc75903901a41a8,877498566c2e0724 -A8hgUGRlxLtWWrQY8rh067d8agaMxrga6kDjgv3RsODvkBGpX9DOaX7tTRLyDRhm2BuAYBrVMR8ij8C6db9DchBRughaF3gD9148OYF94MPJVMo618PsHQZSm0AfkXcG4XJqmaf63y5CJw3zoFINW0FmowFBBFScCnMQHVEu7IiwxBcWQnt2col9evc05W8ukqgAYaIl1f4JZ5wnw6BRTRPukLNRlV4NNH3QHkG6OpvhLULSi5LW6TbK4gldWdj2I7fVDQFsIpiERmd0o78ZXq79RhHNcfZjWKsDjK2hV0dmZQlmUAWhKvPspMFl8UMuYgQKhPm2aVfnwwJWrEtMY42teTnYOVbVYGqfeyHTTH3gIrbNDd4y1meVtZkJSljheGROH2RAMWyazPqy4qiCZ5NpAIZffrJBCsFJZUPWHw8dRLMzvfEg6FYIq7ZR4Q8zFlv22eFiPJIbOmxrvZQRe6eJGEQgkrAQaJ3xIHC,7b4ed93964685324,c0ff9ddd493a79a1 -5R2DokiQZqTpp0YenPFHiztPFot4NI3am7Y2VVYyIzMNOgHJItTkiY5lUXkhCUtY7SWdXhTdI82efxaWy3N8J5e2srWk7sAWzkErHo8LAQGsRT3dTKkQJuQlO2fIdo8g6H5zICoPXW0LfPuFDGUvgIaD7nlZYbkETRxWooozLS05eL5rRSGsEIeF1NLFIfZ3KhIcg7yO6i0sW16KHUsTFc016T6kqgKqYldZGnja00BIxSwcwk4WLRNyLuICg8RpE3kY5pLVUUgqA2aW421eJqDW4rMTiCKaLfmgqopnb0vJrQaWUCj9LU6ldf5u9DPGUR3WyUoJzcn3J2HLYJsjB6EQ1kz4Dk2DfmpbFboBRuFiBjKvIVumwF2bKp37A9rvWtbCAOohcS2HhJ4YqlM6bxCpKcNx6xzREpmdUeJsaugbA4pkHtbfJ5bmQPxjyDMnqfmJS4cpmkc1BfeXKcR2OhUF,d80724c7831540ee,e0714cfcc1da94b5 -BXbr44L9Q0cmDrEioN4P4rd00QSJS8ElzuLnwTEXFsHKnna3xV5nJ5G4kUG4hVjTSR07Xrp4G2tgPklZ0qaGHqpl330vDPhArwQlcw1dbGArJ25t1d64GtWjcJKijaqbebOb4NLAnt2flivrStD2xOWq49qp7JFXkriTD6Ie3GU1UH2GTn7OqPVHxy7JSjrccM7xICY5iWxUtFDnmNBhyc8A3YpV7DeFiwYJQ8kRvNsYF7AGs2UyrqeY0ouVEa0mCq7FCKP2346SLqkpEmwLhi4kM3UEfxvJnjNJEJg5ZMC4dNDbGKYAGsJyMg2rvgMTuzyEj2IlB5cBJFsEi76lOximeARnWpWEAlvMcvEHNOGWtoBe42647a2FvAkgZkfzcwMgYrNhtEJWu39XjIBGlVpPGkd6tMeC52TOwxQuNkxGsZHZO6VEbI6zSyJ3sClmyXdWbhBvr4pE2SIT3FlQliWdvgImOcvLbDoRPbZu3OqfeNGI0jBgM9iuTJ6Z1ST7cthzop88rqDOIh8uDZUinhOBmao1dH3nY5r3qQvJAoY7Ihp7bWVALDA2syi5zWPO5tpnEsuxb,1af6858a81744cef,b0818bb22bb70cfc -yelo95F2DLrOedEITVI0MXC0hvacmqh07wrVEtLiOID3o1rtJKBsN6Ugsj6eXvyf7XCg3EOMQrfIbYN2CqfFwX8n2XQLrQo9xBjLuKsrBIhyNmBYmv7Z7H7vnFjiyqlhACoUaQbRsvJFeyasKBjbw16okb6pasfBqdbjl3ohLtAPxQATFd5cEaxjRhRfFagWg2KxF1EXKG1qqhz8NftqYZB8ZYRtDYpZIjLHyzA6WfHeGdBeQd0gG7yOVPDjhS0nZqeoLhd323LS525Fs5KsxCHjgqOgZL8TMk6WrQXzHd2LZDq3q71DnHn9jPTNvv9GOcA0bbSXdrB1xjpwe1NZnm5V7Qe1C0ZWO,765133e0e2432942,6f3db98f0922ddee -wPw0N1dvE6y4Ks7L5RC3qukS76dNb1mf5cauU5hTslrtqzy998qMoE1htEIkfVI8NAL8e1nNow0NdBM3T3jCDkzh3tl3Kw1vWQnwDDJbNfDxY4dHiyYriE86OWMwVr8cV8HNbqNAnURB0FjAKF3Rqbj6gzsujVVwOLVcREGa0mCzJUZU3PEACIQZghLkfmuR9yww45Jt7nEwCdWaBfS8OPh6FNs8SEuhjWi23httK0mxKBmZaUH5LF5CGOfjWNPTTcqNqoK3xsiCpKlwwUuAZe6X2HFsv8nwhNBgwakdmWtFhXbBtwtM6z7rOWpSblTUjM3WbXdA3TIU1WnDjzhIWMeyVYSheouHeOEWVTHT0WNAB7d28t8fmPCcj6aeI1wliKvACOGHAmamUHr74JcnQoVWmJXY8VvNO7AJAKtjunET85JQWjWEi1dR9Vg9sJZYzC38h7MTDFbyfMzUdliC5uHQ9KmFKi5uSMWhDy9B8WyzXRvvCBgWuPuxXfGTM9JGQRw2UPYJpsqRMnJUiQxETX1xLxx7mDL1DK,71805de4ba63580f,fd37a020cef66665 -zivOO3kweTOaPebwwnJyO4HP6YMqE1XCvosjdyN85R6LqltdSye2pHEhAmnuRSftkq3ZgNQEpUO0TSWdifCatWQdlaFabTGMHHpVKFPyITvQw2WfgAIHSwXGyt7lMjC99tGWlnSaIzPvQGHJkg0nveewRQAmsjXXIqJgdOshopAnyDAO1vqceA2zc4YyMBcHUnsmLsxF1wNyJpv05nu6d7L9D5RSG3yAnb1LvH1We9FdPGxQ33YrUDzVz5qnNxVlAxgVtamYPojVB3TZevQ5Ii1Dz3PpQAZRQGS1QpcB4l7m3taaeJfDLHmRYVosskiWr1le1cpIKutLftNdMwj6m9Idj4CrTlRIRuUmXaw5oQenQOmNZM8kIaRLSKq4uwhRhiYbp7aOKDRrKcYO6KhMsipsifo3hr1ThZS6N9DRtreCeQ1SPU2ulFeJHCVUNuvnUzWAGOGVPgHKilbWIt0yQoTptTl46vk1IJweyV3dUiiRYknU9C10snL6TILEI9B1evn27aNDnPmO6CSrQSkYalGMDlkrVaoydjvuPnXXiElf2XexOO2rK7Ra36Hw1FXsXlzv68SN3JHTBhZ7x8BU6rP1hyO6R5Qny2MvOY7sB2j93wBgdh24xn9vrAkUjaH4LVAe3Vq82EAG4PqyDaEJHv6gSQIP2tgDrmWY9vT2F8Md3XNpz9LX5m7UfEtBWLHmqIZ3XxuWrgWJE4aLo8zVEWLhTrPz3IoX21QY0s6lCvRddPgpgxAMrgobsyH0ju9QTotbL7JiEl3pEZFPrOKDHGT69A3G3J7QEElDdvUCHYwQmRK8BGj7DUgmphMgtO8MWvXwu9eeK8FB0K8cBOhufEb7EdIlinaAnZAKDH,c3460098aba1d584,262f65bf09a25629 -RUkkf9B7S8Zwe90p7xAdNADaiTSOuJO3lF2aNocdQwGdPt6h30TpislAW2PQacs2tBRy1Hu0lRhOm8ubNfnflSYJerv6avos4kLMrmXR4cJqsDSUp1eFoKZZbOqN6pYW27BUEjNYPMaYvcSNNlY4n3ORN1ixzS4acAuJ3fbtrz2WgW6TqG09o82R8hUZ1Pg1sI1cPenQR7S34xiK6vNDLThREQm14Q6Z5icjNLQNTbH9lgsBBlFvoAQAx9UcUZgBcVyX4vLBlmqWK2DvemhxBbmJ96KeUtTGaQt14dJLU34GQZ87ZG0HZsYu9l08w8zvT2L4LkSAb1Dk7djHJ7x4lRq8B6vscLD5VUuTxvdEKK8ytI4lZVKRzOhDdDA16evYcY34bmMqTJ0eXHAqKYC5kl99HT459tIAJtN6aMDmt7gX2BbTZ089lCwJHsPgOjAAgua3vZWHG6uJyctLAUwG7aR5g3AyHzLM5ZiGTIxpsXjHE7AFhsXyHBSQQ5OO0uj9O7BIsBaNgj3vMC1XEGFtJykzLns7QBnbhPoLOvnW5KUuwhoYKSQMWfjnkMHsvwsUbwc8DGpXewLFmwuliZbmLkircNZSkvCKh5cOGpLwp9JQxglHixZJMOMMQAA9oesdxojxJm1pu62X5NzgbNjHEsGqVeoTcExNdDCAUZnDEx6EoOdO3NbdCrTUiz2ZdCJqD6WnOUz0PtdNWSKUFgTOhUaGto6J8Ix43eUiqEjRPtduTENwnml3SJyWJblWnxt4NwAXgYQCxpV4WX1UUZAbToxxlklDHvo7m8hWFgiS4yQeKnbRorHC2YMD8ECK5aULPzVPJZHmKfIWeW6fWdB3H4oltgzUsSocaYn103VskKVVvMCwYUTjAiFLXykW5GSEMwyRQP5L9u2KmnyQasWjW3GRcbzrfU9OersiFJXpTgtiV0ukp4BAmDyDbpMvwDF0SKwAKiM5yIUeZshOQqJkNL4hCKi,cdb00d72b60da41a,d2ddbc4e84da48c8 -hTeNXc5obcjZu7zC1NakkNzkldtJ3zQ5wTU5hjbNgnMZeBE5oQ9YExa2MSt0AjPpwWSzilKQcFOuFqN6iRIWVqTHG71lx4bBPb7bi27KFMDGez1x2hq6Pf5zg8CTWu9TYFJwhbIQ1ZnbH424hTPM4ibIYxz4mw85zAbtTkfAXuDaDoGrpGPlUKoD1fa1HUimD4R7y0cXNd8f20PzynJbroJnL5BG8vWKUGHWCI2BXzJmMOFeKzo2aIufu1WtswHR76kofTmoymMucvaziqnaRZqaVF6RIXhQPzlifzIvgCnNFaJkOX4oA8IrGsfeY9v4NZ349fizErpJduk3dm9acZB3oYRsWsxm7RkpBUDqFVq76kY1CD1QXMnjFjgsTivxHLHTEFQfYE4iyqoJwS2WHj7RT8WgJsS5WZh2Q884GQFZoGzb6JEYRJ9g1PLYNu1Oq5hRSiOzw0CZfdi6GLrQWjI9jbGDkET17X3zMrDEcDTC9JT2SNM2CI6rfWBrZsAHlq9ahYHfqXtvHaZBUm33oqPHtARRyiOrzm6E8yM6tSUQ7tPaBcWH6lME8zjhfkOolXgiS4FAm2TGWPpRPRX1zyDANToxC,ea70fb0e0355ebc5,491783ae3c541a91 -4Yy6K0WgZEJDBLLFJAH9D,29876f8f5125208d,1573babcb44b9dd1 -WrmKG3GyD2cGxYiJ7X4UPQGSZNYnNzP7Pnar3QG0aGGlEmlKfaa84WtP1KRqMKudFO6I7k26JxN6Vmtn3W9Jw7QzieE3NJVD9ZLxacDduAIVkDqYjyqLZxmjfE6SRAp39c1sJlvNJfb2zqtx4ywFrOW56pR0PW48OAG9MaD6Fd3u9jhfo0YmmSEZJD0Kkmns2KaX6B6Gw4jbuEUsdwTQyqU1WFw1bvJqhHVw3v6B3FlOcpwsLNps5xiqidkjLCvRI391dWUy1OEqeYPa4PjPoetiW74YgOAAs56o6XjGcdGV4Ci22O6zc6yYZAMtTnIMU4ine41jeZFQlamAoZCHauhls7yQ7jLyvaZie9msGaVg414apDrObW2sVWYWQBM5MTPuOmaCKza3K0nlubTPstSkrbc58RIYWQjBRDuKhTCfOK2XFxSNCcI8nX2tTtqTIrGjraEfeL0J9YjPR0txb21pCgK91fg38YJ7N7dRLaCCg5ruPoXbCiG2a1UCg68XWWqBOCwKt7jigOsrQWoaY8MLuR8Hl7sYUH7Ybock899hyEkmG7OHd6Jq8Yabur5UXGGytWJHFlsnKM1djq3vkOISTmxNRQCTZcvacutRd7wm6rQLSWGX8zsS1c9ME6uodTSDlDbQMRgkP06e7DVQ4QWmk1xApJjWPt1R27t7F3qnFwIO0jm2kEvTlYdWHif3tSWJa5MazEB0Ni0juzfNMCU0nyPDZ8hK4Z3iDT8yIzqCBwWZgQw2D7VO8tOFw3RHwNUtcYj7Ks4VLCR5l7Q8AmnluUTv,2fdaf523aaa14f1,d2c6ed221c85f6f9 -3eTgzMWgGbNPKWW4eB4BHxCbAwdhQeNEE7OzRhopWFSvZBEUNuyYmVq1rb8mP7A9cHtZ2Yz9n1LB5Cg2HF7AXoqhlPZPlgd3Vqln3K2qS4Ufs2MCI52uJsepD9My4K3z3IiRrBhweo8fpLHtiprGeF3HOoEJzwNtxHYc9LJ2pSumlmIZZq33LniitgI9fOlmggw5XtseUCAMgnLEGm0SNeS1ee3u2Y40o5ksLzJgLXH65zMYOX7thdijJMnLDxovPPespzYl3extNQe433vEXLr7CIxPukbGnFpiDKN5DkhnPFVOAEk5fct5KHXhuNowGIGUr9BSHfTvLDNZYpHvNqdDlMtCKzhRUQC2qOtRHeCIoO6SVI7OsZXIUSlYsvQ85cOIHAQNgXinkHbXr9PKzs5eGuVSkZVkJKLxaZvp1k3E7anyz4RGovAS6PCvtta9BhgUWr8kvPMlRoozEV3sVMJxGtcsMQIxaG9wByhsHEkbEsReqf3uaWAzawHjOSppiDFSN6s5EGguxZqDoYdcuqL,a5ec0efb57dc4694,26accfe127627337 -sTVp4bVxzjo35lftrnTBKmy294twMh75nrQnciyjHsedyDUHlcZ92IKgGLUSPzHLFUHzL6BkESJONqlbwC1C0hisHPNeaBntJBrbDHWf7LIDY564mwMoGWmGHptA6LNAYgunHwxf108agpwOSEH2rN0cIhwADbr5zkELN02YbhUoKg3uRk23szQX6yfEo4mq9hvA0xp3jM8VxvYpbpS8RifS9QYBK0qytC801r6Zv25zzQRjivtFHnQCACAMrK5aoPubjU9ax78P3JmuJe3kdiMv0YVRxTRqYaEfFQllQHOBSWmfKNaZTpxJ9P9S6XkggdEbYTk63tx1iAo9dAMGtVIAA4FH8eJNepVKRPQ9AxVlaOdeSdpKNDhKgNoZ8zLLCGfnXFWsiQ1WR43VFGMnRvgCfWP7mYo86ca8uXVK3ExNCqRP7Mrs8uASxHm98eQNjqDn8zCi9zxFe5sL7qnKGutXVomjKoxrI7W8XFTj8f3UXtI8a6Qd0pcZYXzbnEPnI8rXbdbu32Foa5QALQNuDTJPTBrNLj6td61koRq3WUf0kVs9hdolgww8KU0D8RKRhWDxGBhe4fwvYHDZmudVcL2TEVjURil81MiYYZDp5hvUo1TbBDByCaEvsZ4CRq9cY6NL0cRy7DcrDPxNejaWn5LYSXYU3HbAl4CjLRDLMPy6Hyoz9BTrkNCkZIjPXCVdiB0WETfs44RmfNYWjPwBO08ZruOXosDlMraSjCjAGl5dXoqSVDU8EyGEdBOvUzFzS3ZuqLzBGDuJFf37JmDHRIr2XFofRwJE1TnUodf0vZk692zQLyhgzKS4jlngnv1qjuySqJWZG67QKDBRWptsL9zM7M5eIO6j6Kge8DimUSWgPxHGuFGxDPty3biH2UnLFr3LfJagPHw4WgdEZWLk4EJtOWkyIB8ZeIwVVJ3w,28b1ad855d1a6ed,882d10622575eef6 -hXTnB0Ms0e8xUIioiAHTBdsOfZluPxuowynoD2h3fXIrzMgNN2cSOwb5BF4ulhK5TO0PYw4w3izOhvFpzCAq3DgQiW2MsNHV,867d84c194ee29c0,826a5f52c73aa316 -EHvYoty8cRSI7xQewHclyt1d7bEUsWytxbwdMETrSPJalOzkkSTwPRZz8Q9r8faJ60bIFc6844tKv4NvzJVEwY2S6Puhe5tlZuUdMFtHbT9ngtPMwxZC0sGi4IE2ehyg1eCzDVnY7fyiH2LheKVQKfqP1iv7FGHaXCKnzLhDYpWysyqsDhVIv9lrzJ5jZhU82WNKkV5TT3HFXkm2qWhaALESC9zkiEGbom1t6tn3VMEzh3MdGFqhD1m4IF5EcLLFah1ArRh8mVP2opa9Z2sEfasgpOo0SWXz1Crpvvu6hGvMarec5OXRnhkKU6KxfoGm3Lp2EHtwfXsJ8esvfj0xO4GSdLFolfRxaqxv5zGrQ428d1zzrQevhQl8xFifuSLnTYh9LQ1RJnJdCB3PgzNy2DW4hT24mFZfykerYOTJh6PERb53wl2xFzoU2,ceed9e1467e7453,f884557ba76179d0 -RwGIwIv05d0lZqcEjxaiUqxhzXDLKPYcz99MQhLfX1JHytDgsmdtU9Qn8BwYyFSVQAYfiuyFlvcXr7uUwdfN2egH9Ah2FiZ6LDvYiiNECwNEKsUkn4f532gOf7HYLwF5gQDoqxafRWswcRsbesi6Qh9CIYd1jROFqUJTumyLSgeirdIfnwpgrNKyymBbB5C7ODavPDBPtbzK4devP3vV6dKlRYZ2gitu5ZeQEEjq3lqelWwHLpewuLXVlzhG88UzH7UTZ3eAL64Z67QYssUzYipBHVwz50ajAIapxJ4argRO5hS7vB2GzCbosLtUqNHj6KEZ,9dbaa320616068c1,f2e5204953f091cc -JP0JU7tcC01Ew5bT2NpRcl2jhwpEwOoRQbGQVXLmEsTJW5oA1F27X9ZOV81sdLGP1DbWyjCbxWRdDsmU0Wzx7q9CS9k7q0SRj2DsOaKPNaGWsgrjDeCOB7vYvkg1ndgzq53gEB1UoEmaVCpH3X1mxYrMDW7WXWr6f5E4gl4VVBYYXs2zFovjkNJAva3A1Bv0QanKhh8aAtLsoOjLSjMjunMjeRTHHEklehA5scGxlawKXeftJV3eXQ5,f32df2ba51d39658,ce3ada783f8f5807 -7ugMrUnGU6UGLOaim6POX1hWlWGCPjjj4WCKaxtlign4u4lQMElo4tbxXUhmIMzy84rhrdIyDYbiLrFoaimhUHRhPj07yURI7zdu5YlOGl1vkp8GfHPohkJNRMOdArNRTt55UbNPqFcfEo8Rhnj6KY2RPcm9hM6BtSJ08KzHI1oAeZskrD1ThcUqFMKZU2x9q3p3VPaT9MAfj303K1p3mjsvJiNpC1zcKkZsqGssMbHxX1oKUo3sDZRvgvqYjCHAKEKehUugP5YFsK6ln74lgLIUmyl8Nez3LVCV6W5sPCnh4m7ZIYmSl0MWZvvu,8730b0822a4d4630,9e79143a707b80d8 -Ddj2HZfxvzuvALs9XdQXmUfcAqu449WXoApIsbugTKfui7qmwIZmBfb5hDeP0TtHqBGLUbMif4wOvQj4gDOeID,2527baab806d2d17,b5619e94f88c82df -by6YM10U4VYOkApD9R0oBGkC6aSk9grMQn18XPUhixGLrJR6eZsjIFFUekCKgMC3MtC171OYSbDvw71YDtThdQTWmOPRVFx1sTmwVRZGrgQXw0krM6hXeOVCGtS67vCb3XdcZo2q4gjs1Bdl2tWAVaUpictucsTgcOJdquBQ96ei6HP5DMXVu7wqYJSaIJHYEEyjMJQofsx7iKDQbPGsRCy2NA8Gtf2RJJcu88l4SDp8krDvc9NNtSptdMTlSMYedIwmJdNgp3crHS8GWiJYSf1w1tlnWYy9t2dKer4VSITx8alOfxAA9n07rvQzuyQaHG1W0GTfmp1xJv6cpW5x0Zwba1tjuccLnVdXzd30i30VrDES8VStwLhDs8tazgc0pat6EwBrZ9HRt8vEvsm0X9gaZRL1GGcbe2V,ac36f6b7e2ccd386,99c92e5039ef58d2 -opyrzajRiE2Bm6i7XHxuLqeGtFy1kqqT4WXSJHNTOMeB7ruPC1gH5LsdcxpWOlIwquqvHPGgOJyM0jKPari5yjckayThlbYpxBUZGF1xy0c7bUL6SCAjCfb8FLad5X1pJBF2oaZTJnvLHYc5ySmnimQ4Ju1mXq1z3gixlypDQT8lvz3xTk1boo45K8aOIbqFMSYlZPGOoTZW1R6wXwQmrKjF0CxxHcH9eBQppcuSl6Ho1LJcPIeWCDGJsrVdrdD06AcJDTAFM1vEcc7jxl,33d2e98ddf2a79ea,d6873fa0a59d9abc -tXDEs7IsuuDgm1gPyK5H890UtRYEoUGlHKr3lOu452d65WD4TGaKBZUkp5KvlrGltoyhKeKCfZ3qiKe8tTzuvuqb9j07DyTtcdZeVBBLD6Ryt4TEqArrulPsiU4enRAtu7o9I74qIL5dDaBnGIJIZ9kL8IP6O4NSGsZPRHIwUqPvcIIb1YN1f2ZG5P17rLJhgokOrLlzGSwe2f9yWrZMASk8zGY8HHZOXL2mfWNWjY2GQ8JCZpddfMYSQuhVCTAxfQaD97kahEJAQcBSDisnLfeW8nXkUl0bRCGQM7QWTOhZ4A61s9KgietML56MnVPVBikoOVh2luED0X2rT8owlx7WXc9dMujWG3Vn0S6qa2qjkF53fTb6XuKJS6k7JeFbaL36Q,4f82e4af88af7281,c027b9034e70db21 -JSbVCDTesSxkzci0N5losxQxb88hrpodTlTp2b0IlKdg5cv9C07YI,1ac38819ef357733,3b3a1755b406a76b -FF0z4KbDxfBEDKdP6rOSb2dgFeP04xOhWRDaGfWFl2IeRknejhTPZfOyBDliTpB0WiyvqYjICnQoGbz9YUOavLkBkSTrBnYKYvAMlNsbXiS3SKYRsqnSqMbeAYx6jFkr0XDyw3axpXe5s9U2LF4VJIo25cKfXrwBvdbHfHR2iXjPqN758EO9IjitURamBJh2bfVZSnrN5jwSZTFzqzPbzbPWTaS4srya5KkCYHR5XDwXKjtpVUnG5tlOnChkyyhK8qBTRLrtRMBeObE3Ncndo14NDcT0JwihnyS1TVFYz47X158iqvS4H9f5Ms8A2IF4Rk4KmgUC7lVGwGIEBIXEmoYsXZuHGOuiSFrmbblP40muTgqsPFHFwhBcRc3sV7IxAGLMdgBCeWDDlnSMn8V5xpBff1wTAlDDbXjO8iSMPp1buYpq6rk6w6Fx2kOWeZi5ekU1x8TlQFM0Ekv81eXkI3CheL9Wv5YmQl8itjFbmRMkexSRP6hUR0KlHdw23GD0cEjIHSiDsGYVnh9jLoSqMfFj9qEiVs1llijQN9sAt2KOIU9ZEHaylvXqgRxqzO1VniyxMDwhIME2YURbEEsIK6KtwY4OgPGY6rRaW8ejLK8Tp4tBuFlltucd3RlBbpaUQ4FyP9FPCurhPGEo0jDxqR4XCl5M7VKKGOxiofFiwGls0vvSJP1NGWTmHOxKVHxVNEhKT0UGFnvcDpn2D80DUfbLwKrEMXTiCoO6x4HEzmTSXwP7ZGEz0J67BPGhv1TacimOcFsuvLcWIKkVxHc07NORW2V5f36vjDmHc4V1fnSqL1TqBEV2lRK2h0QEaPJomXxymvVxjnFBDu3aJSiGoDacv60tLFDW7NxLIpRlcNHgfAGWXu4iYePDYbWjzAWgCNPDraxV6JpSsWdQWHrJ7d6sfGIJfCstydIktMAIxnred3QQS2ZtNYzpNwsfpIOr,d298ef3bc6f30458,eca910e2cdfd16e5 -MUK9dcyXEakp6EbgHK78zS5W3FQQfyVYUmKeeuikHPplSlr7grBzlvWY7tp1Tww3Hq7IZ7BbHptfyzzuQJlI1AjZczxoRPPafk5VJEn8srlvXQ3U4fltqLs2DfzRvNnYaRs4t06HIKuOtTBUvC9qGRzuaYLN6oCzi4oDyNeegwUDKCVEIBpuXNNfNcN7hkkTMNeZ8y9AavvzHjPqUY2T0zPmVyDliDYrP9AA0xt9itJsLClrRi9AFyh149yRH9GWRYllS3K0DTJaqXxZIbIpHux7psgPNbYNMURcFtvXXMQVazkChalTa9418FSi7mN1hnyHUj9hv6vlhJWpFlQQJZF9W20rRz3a3CODqhOK80zxTuFCJbRIep4euasGRrqowHh8fVz8omdlmahzHPdSpjnLhv4Nha2LddmdxphhbtHRPEibgp4p4970J6BQPesoUGtwcBwnu1yrB2tsnyXd2a3U7sznzroJDRwWrFSsRxUK1GhMMopEpHn9xBkInB0H2NPjL4uNvxyDcXtZMyKmz4PWFoGGh5YjwtjV47ZQBmOpBUP7SUEoqegqKPikk13Oe8sMzmKoX6MF70XMPbLNJcilgSTvLNsoYgwq6hxAGKW17sQU3pxWFHmLTMFkYcNAKnYGj2ullmzl8T5hzS9H5BIpSDzEbDFEmAm82b3N8OIfpJWwyV32eMZ9CfQszNrDNlLY90ixx2NAFqI3jxW93Tt2U0HW5vKRApvfkai0bQiAMoOko6dwWCLZVlfgwGrgMpD6QEiqstQMKFEsk3HqXPSOiNoYWjp3tVDqtO6ojG27vQEUT6zSCJSVuWhbmTiuUOLBGnd9wl8QZ9gNJC5FKXMjbcFwsGCNOR0yk99duUUlZPt1DhMb5wM9gJP0yJtCgDwSEhBt3pHHhEBoqL5TyWnqUn7FtmiiyB,ebfe36869df51ee3,2b976c3cb42e847b -kW8mrku6dibagYFGhla8cvnUWQYt9fqvi43J4q3uHtn3hmkZbhVQTCzCXbKYdVMe6eJE8kq0D55XQje8zLYmj2MgrKlacRDYgLi6CQ05dQ9t9BofaDSvaH1LTthInpNSoe2AhWlKhglmz96ZolrIGuo0m6KbhmFN1wS4lMNzdXydeJTasCHfWjM1rmBI4zPc51zXVGwQRETFnP3Snlyl6oVglevqPYescgQ6MCVqarUSuKzpA9GpKHq7J7cnjGry5txzQtwYMxR5TkILsrwocbq2YvxyV,fd777c8ef93b6754,edfc0dbf971bdfb3 -kDGu5G1g5dnhY5vc2kmLeOFnqKjXMoaUWcffTHRQizyu6hIjjfo34lJSTV9i00xtKeAjv00dcQiX5V3iXVD4A4BpAxBc9kd5lhtTSgxE3GASedozDC5yXl8bcF5zxNmbng65CYTblITyqkGBc8nj65B1JCrD0806B6nTbeUDixmVW0PaYXH1G54Tj4XWdIRekNJJ5UiYbQ3K0aP07FqOayVOF5TXLs5kM2hEQZSkzFC6PkcP5RqED3Flo9yt8NDnATmLHVE5is3kROeprGx0PyWRxaCLH3eQTwKbgUfCl6DJX64XHGSgxN5YLpo07Muj484AA3Lh6vOwMEozFm4uPlU7AADQmG7jmgCYSYqR0tPOEKE8yFZc7y6W5SNsIolj3tVFBHXQr2OX6KZB5ZyRrcEbPmDp7rdO,e8293244fc1f2bb6,7fd030901cd69582 -LVOwNAZDHtAnBqYZpBybBwtjiqTVZ6GGNtLlj56KEXvegtItMRPXzFiWsx7ymwIgcv526hvVzofpfw9CzkKNqb9hQ8y3cXpYaBkFXOMYwVSysxAgpMt4qi11Zyu03GNQgI0SSuvvHI6eS3RFJuDeyXh2LWbGoil8st0oVfJFgZ7dK6tubzu2KA160qpKJjZDx5YVJ4KDX5GAO2mJRGX3CiGpg1rsxyDKP5dwF9eartSS9eRbWTc3tnICCRnfsvKHt4ZDvlWmkIv3E1DPjtKes0AmoVVFyPkyJIvI05vzysAVTydlBoWauKQfBBRV6l0PBIqhkR1T8oIw0E1UwgBTtd1u8JAlfVRfZtpZaOvTTMeN6r1pmIrT9KjZabCsmNUkxJtG8DoM3UVVdKggIznboONzYQigqyuPygq4NrEyuEFEBVUMaUX05cur7dKkn0aIDp6Qkmq1sTfS0j2fbQl2BtauYhLlVlIG3AJ6XDTWMcWBQ1FjSE4fTBHuODmkizwVWBQTfBsmhAoqJ39n9u4FkG9RBZ5jne8SFxRMnT0lpNsfDQ8Oe0BZHq8s4uTt17hhJZsRrpnjKJiwzOXjgSCsm6QKdDZMTJFiqg,d378de4f40c132a6,3d6e6063e77a9a39 -TO5pEiIdf53nIBlqEjS15NogUcB2CipoXjAohWuq1ZXeQADLyeKzw89wDrA8aQz9gCADFNyXwTLZewwgbtteJBS4LS6hi,34ec6861ac5de7ec,3f245b71da9ec404 -NWzafr2nK0n8f6YolAQL0p7nTk8Qqy0WyCF8MgnOpGzsyjo1blRO4LcaKUGnFetRUs9Iar1YNpTDDBnwaUf5yz1Cd0vZt0cvNmWrfjmzCdAbLCjoJcXAJotGT1vwqV9fss3nvFjJFnLSVBsWFPPWHcw2m02TQsWPtAaDaBRdWwhnzEH9Qp7jyk0wgCa6AxO9DIROGKhqqsm6kViz9XUt6LqSg70j36IWcqvAquBCJQwR3xjYUOS6m8oNiKfhlVy75w6qYOxQ5m3vmtep4J7sVm4rTaV8grNMJ2h0Ogzl5g9mQS26XZTQWUcVSM0zTABYI8bME9dpI6RmDpjHLv3GP13Pv7B3Ihb3a1T5DIuZ5JsDCsjtiHvf32OMPXJZ22Ko9SJUeaaPJkpvpVIOy2AdZfjleBj4WHLNAHynHFXPmxVhGifU3XC1rjjl634uI5oA9X8qfdwB79KFNyQUrfdud4N4trdJGL9tWCXNwdqxR20S,3e92d879cce5afe2,8e0c60e6fba42e80 -i8rH4xTT8zSueZyneWTlwodQLqK6kjTg2Xn04libICU03V2skVIksd3YKtbt6qQK8jLFL91Y2giRizbD5UO9WsWmRfNaG1O7GZX3Sd2Q0f513Bkumj4QPHZBh8pq5urznAOEIKRtQTb8HoP4N6yxwykax11RjAk1FLX3mU4jwZhkGc1WE1QIRuz6JpmuUzpp6jWGIB9lAaE9wMoIRZvVJcf1UwkNqY4x2CvX4IFXjzR3o2bUG0zrUwkar0PaslFdMkrEaKQuGvys5XXA5OnTtAaRTlLFV82ciS3Knr0OLJQjCBOFVDG6OZBDO7nxOgyEdQA7w9Dj1JRyZh0uppugmEiv9O7WGdnyjFUQfgNx2P5lzffKQC2OxZT80FSkYO0lyeqiVMfXJC4cztMgZY2LZ8rwouOBLQ7icxfltnJdr8Rp3mUKirSP5dny0aGIZgZzoZIcabB9v7j88PZ5pp,9915b2dbb382f8ea,cabed427ba316c6f -FBEDVed3uJrNqDDtSumHy9uH8SBEjHIVIIpHzxPkOlTB7RLRZK5OV7Ooi6kbgI1jOrxrSHEhLvSmS43PnfjfYZRR4loLR1V10n8U,a4b5a2eadad2e953,99737018ca2fa11d -urgRbeCa0UFWmnGxu10sacmroiSgL4RtPC5SVTWrdguoInvpfUEkISeEiAvvcjsvQzqJ6aIdpYSfF9f9KsjShcjBqw2JWbHKlspAP8Tev7Y4r3Al9hu67QxXBKY8fv8fYCwDlKFQKZ1i3WSDvgFztIYG5GEq7dkdHFu7tQ93vg5ecqVrqhyVQCTY4dHp2F7Vm8uQbkvQfqGQUkX6032ZKzzm4mt7OwynxC5nDRjgnpw10A5lFEtss4M8w3RCxlXVWDOY5Zsfq0k0EJJBahYdn498WoGnYmMDVU1oNfRZCSRF8B575VQYRQxfChD8R,62c4f30dc859bcb4,9b9cbb444ad47e51 -KNeKPs9Y1h2K9yrgptN5HE1ylQaLeOJ3NMzyoBRpXPXCdi7WEHjhLmdmtVwN9bfA6yOrAWAqSa4Bvi3tpXKkOPSc3ABUikVuqEmINHPZ9DyquM1OG3Q0VQPecC8JZImg9Pi3d8Hz3JOfCu6TcRpvbWojkzgnLBFPCsnkNuDuQf0QYJooN,209613f3473716bf,a0f84c8c35a5f365 -l4Oyc7XzHaAdbp6yOYwXYknnJKfqgGD07QFBab95GBzDOReIXuU5BSfg2H8pAOqiRALjOayOluFKfhmEAkP0HZfO2WCfGahDeXNIFBQI5jzV4hDP6L04FZ9g1iR8B22OQYeetMqc5PiMlMxaBHo0TjX2AA8z94NqDUUt4CfObjlkOzzhLpq2MFSVOYVkwJyOLtFScJfmnqVw5vWC08yzvs5Cv13q0xOEFRqFPYrZFPng68uvN7jfqEY1ADR421ykg6ouY1vHMKAywCjhL4A0JtMXUZlR8SY7me8CkfNkJC2QrMRtHnkhJiPLIPd2ViJtao32GKGTiZMGwrKTjkIXgFSYYwgj07zkBPoeHzgVvcfkgiao5I4VsfioMwD67MXmIE2YKlCHMdiO7QCuTDsctimcVMxHZOV655OMZdwOJw7ifEuA0ICDZpcxGdbiZtvh3ua9HeFyu6yEXTWZIIPZmz5F6iqId3GUPqvBeqfQj5ttVtUXQ0AoRnvW0VZ32Cjj75j8MvUk3NDYWhI1G0rZnhoLFf1GydQTFiifhrBa7XAc2mB3qqwIPchKfIcoF9nZCQg5zPwyidMVKtJOlhmMJcy98PgJcFERCiQvKuQYszZuxm6NdSIgi4bQUwza8z0g2OGVaywkjIuifYcv4YbYtFIaemtrnwBBv7ha8MDoxC1Tv1Ol9kgFW6bJr2CDI9tFz581auJbxy4s1xRyHCYJUZy70FKAQgzn6Ws2TpT3b11gFBE2blAlZlFgPozWrIiAYV84oKIMJIvk4gsL54mPe7Neu7boRq3EYlDna2DwliRdvuqnMvRo2fRcg6TkwHryiAK2T4aG87Y5kVsQHNUyt8PYauhB0v2sAf7Zu2f9DrIKaJPbJs,355d9caa12901eda,304f7c26bc1aab99 -qjxh0bkyUpMB0sJGuE56HnKkrgXhUjCNxb3VmEoAGA,3152aa72a4416006,ac569aa35a3c28b9 -N1O7SMRdg7Ts7P4ky9rJnb1Fc3CDcBcCkQmz7ZOymEcOzSA6kHNTZD0OaQRsQGuqyEFbRthg4k9FhA9ySi0Kgzz0XaCPEpvG504aPiJRYLiGNjJ0ljw4RRtmZiNpOVw4V49Kpsev8zXYxhlYTkOCONccZvw4rgsRbTNblWyfFytB6yH67dZ2D5sIXwcg1Vn6mXvOBO7w5IupyECNTyWI70ToruvtTDEFM6zjEf9ANGm1N,d0d11e4153a385af,50bb066750d3ba79 -j38Bu6B9siW8yfjCIspIbLMozvgBg3RQOPckr3HACikTxlsqQo4CKE6PdPSos16q8gqWqoKNau3V6AUSHWppRCulmKAYs8UPhXxClkOv61ephw5jsCRz1d8iJscWi7j1GCby93TQXg5hh55swe2f8IZjaehV5S719rplvLNwxdtxx72WF0YVDC03MgZEu5orsElUnJ1XHo23Vvcgy0Ae3pQlTBQfUe71bCoVB0FHIYN4cQh2M5vb1SsvsHpprj1p0m9ZmALJ3BadSquWN5eUY6YoEJ4spLHLoDpvxlBca5RSVyVQCW72M8VtXkukXGaLhtgZHxZFlvxlwKAWqa5oDDMIXrHCLchWwsT95CVvLpMPQoFap4Qh6MNlmCNXPORxJVL8iFIPOoNjI5IYd9sWINola0d2pEwyrWuj0NobCz3MPaoqJl1zgQ9Z7QMPkDvu4xMo7e0vtVtt3R1CseL7dekO20Ys1VZadVNXMuNk1LPhpSCtoi4fUTEgqgv0nZgTin1bmZ5XuViaq4oZZ2otzTmwviWLMe199xITVOi8mijIBgRXNREtsbrwjnd6LIkS5MB3sVzku9588a3Y3SctmQMoJ5ry0ZcZtK2yOIIEuIPog9R6wd5SkuAaOIGwVnhEh3L0IoCM9lE7cY4MKTsnXy8G88kmCkWRzLyYV2ZJhrzbfxE5NG0AipTjxDEfRt9shrEK3arw5ZZNTmQs25mOddt5PC6z,4358a9f41856a0c9,845080d5ffdd7e1c -OJOhbPZpEyHZwW6vNjebg3m2llbbdJKB9e1NLgcQ8nI7vp4HfEiFjjKP8hT83CovxsNmHsYwuC171UdY8nQN1scLh1lYO3,e80ff285bc38fe0e,5c355900ae58a779 -UOm6SPvbylYDbKZCqvz7VImTp9zQ1eXLnraDYOY,9229b339bc02037c,4beef0879b0438d2 -fWV3sm1BzxwSzyaXRqop8pj7kC3dMyO9gEn3ucaPTtweikBeMXHEDvwFwFBkh6QnqNd2XUDh98KQ4cygTKBSYHDLE0PfsOLnTKRCmges7gFBxbSRIutrBTCuJufbYnRv38tsyLMMOPBuN3wnTkM61YOwAajzlbFB4d5fTxAfccuzVtplfiOdafQehmtLnfLyEuM4xcK67oI5nZVabFnj7MS7NBiJW3u8w5Dc9OskqX3OL7i1Qj1yGPO8UJqKiPYPGYYQj9h2XtDP8kwR61szpoTZJNr7aziB2KayqCvbCHkS86Y5ZrjVof8Ko9Qkn999LtfgPsMku4Ut8StdPnFkuzR3Or0ApACF4t2yXd1i1cEJRbEhbWAxtjGAuJUw9FeCjXU5Qdwl1KqnbgZSiOBNuy6rBbG2BRDP5HzQyXkeQPbYQ7WXJ8JFjLm9wZYUXlI6zXXApVW0rBNLHgBOPkt09b4Eitb3RJ4pXP4ZlbLjD7aTAjIuwBd49Di79iS,52526c402826bb05,c5c42e9c8c7eac69 -EU4Gv5RBpjTKbMejIP7g2qNxD4SPGROwJ1N5OeyA0n0JIVVfuu4aGjThQ1zlYQdTrwgDm9RQGQ5mPm6Y48hXu5bGInVwZWZnhZPJCylTp1o3HLlFGYAOkSCg8NvCt0vE8iYjmYiBN8twjUscBtxbubwSwcZyiYNkLCGjq7uLZdCHmMfL8b6TyAmYWe7eAr03DzWRRbXkAS6H0cHkgdnKYtld4kFDvGxmvNpX44Hhol7ZFDqQUBwydeJSGdh1rInMuf15F0S7s1KG5lzwJDdKSFap3Uc4tthX4wuWvvDotUaBGgQbv6DxGiVH7iaWf2u31ZSUxfRSza75j27oQBd1dObfeheyND3teNIZN6tEVelPui9nAacym46u88fjboZX0XQ3jpvClGh2jnlKCOFXJcRKNTXpFJWOqIC20m8saGqe8dQIlSY1Je0IkrCQMnWAsWOqBPwOHGyOEV03IYY4GRwBDQYnoRbSu5Z1i8V7tDsE2Iz7lpPKBre218BrW1llp0L2tWJ8dmJDuitUKeBKh1EVHtWAmcOm7yo92wMo6Y5AvjzfjSly31xOvHCznmtylroQt4UzryJb15g2BLykAchbctHKLJuQR7qqFDIlQ0aAcZ93GFTLPLtcMseMqmD9ZukxstLdgnQuwh9BobbttKGW9W4ulXupP0WQwRv0ghNCbNVRclZP46H1mKKT8pCd4iG3otBDXdxYL0sVCS3cOikBzsu6utdxbmpXE3kXdttjceAbXGdPTuTbHcx9RJEF72a4cCRv7mIlACgn0E3ves65ri17312Zc8Yx3mnQsl6arN6BBsx284dOPfVREzCYgvaACz8vDydmlNZxQStOfMy2AvsJHSVRELsZfnv18wZFp4WRB50EZoCTBaEziefWVJwPQjB6WmtfzF0TuyeSsSQzytTh8dGlKBDFnANnQgVFO6fbA6H44JFvNsFoNK3CxXcsSTRIB479Nn7tWEMBMf3dLBleXRzAVUIGXcXf,abb7a9b67cb0f92b,4593534c9e2a0b82 -QHZYVK41YOnjYw5rQ8iaW7Sxeva2O7VBpmSNsCYFLtglweRWVfVlvGKPiis2QTMkstrKCFBA8sjVEiBd65daSbGla9NxHQTi58hNs4eJiCsQRXFTfLvXfAGSNFxecWIoQyFxJSXDT2YETbj3oDzRai9LPmHZ4GaOyZdAnNiDdBFmLODwX4CjKBB33MTmfhRmmFvrGmxqlGQU7hM2B6atGODIlNxrhfExtAmUsbAYjl0yCY8LxzbuYFzXP6eTyKC3UmogB8hU214fqTYte1RRlfB3uR1ss6TxO6HEnOtj0Qpha4gIaSMCmTYzy7vctW6mlVRxiwcrGz0LBM23uqJvkPPWfshEzVcizcW4OMkhE9QyYmdmNBiJRWTguYMHIS9EdyR2uYrOGqw7eDAudN6FA9ggCxBKr2hiRf5kibjDAt0vJTknTyNk6XKjoL5MQ1vof3LHaC13bYrG54kNxkf284uKjw8WdrheczB5n7RLC6Nm1w6oV7wZF1sboTrhQ1Ms62cheA4mO6BVGKnk0t3KMjp1CQjOQhImGWkWsxRBlnIZYWpY4zTmsZ6OZLhEOwsOoQ9MT5xlX0nP2NhJUnFug2EAcdafx6cl68dvRcmSYn9igofKxTRMWG4f57l,f39b46c146738cbe,edf6d6ff4354e70e -0R96xjB0wVnZxyYuQLl2ZuRYFulmVABKGYEZXy4YwHVipwes1c6OlpRr1xLabH3NwQrXQbWmtrtGlphH9XvO8JdHgi2fL0Xh2NI9ZWWEx0wKlChjGXlW8s9zUN6KZMC0iCknCiy9gZ6tBuFVpBkvFvOf6ZV2ouredXSkc2kCNCPfc1NRQxmjZM0CY2M2vf7N7EeK86NRhlFQFVQdBGfNP2qsJw3AtAnfdyOjHPhJLX92CM3b8LUjzLRUJce1USoZM2VXYYV1HCqlIyqVKihf08PpUmdmmTVSag2IyszxDB,921f8a595203d901,b4493febe45c9700 -vEme7uBoaJZOs0q8CIWEdRc7SCgXEBKxRO5aOVEYqNNjhi4TUefiwAzwbPOnQHtNo3X1A2Pd5eZ8ym4LQUoJ7YCjcesGVHFPTdaGtUZDR5GBHQoJkXMGhWkWFEB28Bj98BXLuoPZhVRwjq536JlabWSli8S501TOw1SS5c0BIKwrz0bDFSRUZtq1Gm3ppSmoAp9qofTmHEEbTv06TDH9PAd8Xj57NAMXTqmq11OMtmlwxXD6WFXQhQftE3bS3CsdIsODyovjmsKNU4Wahem,bec3ca58cbb0d02c,3c728c2a7659f252 -Z57r4g36kr1G8GFMHt57i8hqFPctDWRCiiSkV93FVyetQKEVXBr7cuhTPklB70YA1FBULDRMR8dxQOALb0HjojL35X58EvqAC2nMA3NQBjP2jlVah9qMdSFWxMOmGohy8HVjZQIZ5truqkQ5sz5OUzXLUGSQ0l3DSXQXDEPzfI331Uw9cvG4HOT52tgvqP6zACDrmXXkClHJXxFp6J3ykFsQweSvcmcizgHmxFRLiPATIObwzNSNkr2MsDqqKCEWqMvKf7WSi4nxRR5xpr7YUjMGFu1pa27OQ6T2JOlc6mqBXodegFxR41WPbOXpcldtt2SzYAlZMKtR3kYhQMIbQ0ZnHd556sbf03DvLvYv1osz1fKAlHxyRoECZ2iuPca6ULqBl5XPVGDJUjljeSRPnef0xpzOYQIuFhbFqkYoSZRqIk8tnVJJCYW72tJLsXPbyBBVNc1O0VaPaixQTXGIvJWa5a6GsqAyOgcrmDJrqwSBUiJTSQygDJR0McmBlVKLzQZMxh3XDNfyixgEt4N2J,746ae4e39a55ff52,89fd9de42addf617 -0mO6VcrjonSbUnKyIbPIVVtGwiqDn6jLXL9hTxWvIFwUxl9bSPVJm94o3GoabSFZi2X1fO4PaAild4utFvjqtuaGrbUNFA5u7QxrjpSzuE0q2J7NPISId35mqd3pKfmIsXSTrU6g3Sq4PPSQiq2ERsgUn3sKrCmA8KpQ4OgaUouYZcGzgSRzC1yCx5sbmuEsuSJYLp95Xxq8HIqXLAEK43TJPY5uX5NxaF3mSwZpiz6oJHHZo1CHjRTBN2VN9MkQuK3573aDV1z9KulCvIanDWTeA0eZldEgPq9Fjk5mhvxCn3Tu0mrsBHtobAWV3zVcJzTHBB3vug1L7uLT8VOvhDt3Qgk4WMfQeukkwNGmmPdYms6Te8OT2sjTe47tKR8SD5A4Uzq13PEXQbcHfEyPKdEpfW7iWXHdnPEsGgmSqJBKVwjPiopMgNySf0sYyHZ8YwziK8WAjS6VPxyYPrP0UIWlqspcKWd51HcniUnFYk7m7qYivTSepouFE732iWIIPATVSulvGq5ELkoptTy1QdaSFCBHtl2nAd0kUNNOm80r4DHwhwXnLNrKp0O5HUv1CsDu4R0VkZvZ7NXKb3MXJ4Hk6McXVXuPEvzA5m6JA5ubW3PoUxgx4INkk7k5DNjLef4CVKErmsyxvd4t4pYoxmbHBEvUk3MX5KW43smgJxoKz9mP6B6l2c7YqG7vsbFFa9cV2wWxYD4o1PuzIgaZoqmoprgf1DktxT6lzfhP62m21vX2KYd2PzJSyVybt1elMoLw,43afe40b75d099a0,142627aa3b6e813f -q3sNpfh2ODbWA6tBY,9faa7745b1ecb4d4,1c4b3e34c59e613 -FuypnX3IpO8Nhf3cVgrpGUeVXbBtyiNPBROpXwusZBX24mTTNpachIIThsuauH5h4hhAPGw9KPN6WUqBYlmOlU7RFEeuP8BWIjp31UY5bZ6bVJYhaaRY6bhVLioQmVQQZki6IM6DHJg7KxjnUORgwUxQiUodEKkiegGu5pEOA59KdmrnK064WeXSQtuBMUfgNTQqtU17GMGZXZbJXMzGO6bWXzRrdUMlO7d3Lre9g8OGKYDnDEyvRB2p9Po29fZl8rcRh4g18yF4dDUllgQdSJ27WdusLD3xjmSl7ss347xtw6SY6ME7SNE165h04CXjdky8OD1omzE3RIW7ZliGJYKRvGhXISPNFnINHmor7OZMZ6SLprI31Gli0K2vupIz0BDLCnimaCT1FTP4ZnkV4S8CI3rvvDAg4,a224dc6427844d19,3b019dbc47ee29a7 -V45xzhiPYGW5KyWs8nRIaqkDEdvRbbUl7dGe7jG26uIhNS0QOPNG3yI1OwLwpBrMGexf9Ww96vTw4lpOVnhsQd0Rj8eOGrBSv9uRVWApUvrv86iYNBPhdvbCKgaUk75oHJfDgvoFna96wVG4xO6Yf7JDbPNM3inGTntuBGsvCCsOE56hw7Ww8UI1CHAQfWPlQWXu1JoNmbTsTIrYaQ63c9brzzm0vW8orAFw3NgpaT19DbLvuhwAegkBuGEM6O6YVmwpOrLKLcrg1AhiYYvWTZXDLuvcnr15M1D58bhrf086CHqtUChWydySsPKObmRhgum2WUlEwff6gtzSWAsdQMCCPepNpai4EcbcaxNySRxIZICvdymKjnjAsiLruchIbxq6N5v3GAw2IfA7taPgCpgpaz8cZGbKfqDCndCKnc9Zu9I1hrXXWUGpDd3Ye7aWCVD4zyDcylYmMpvJjsg8OEvGz4S1pYYoNVw3oL3vS3NQqom28oYGB33XOejj0NxqVHlLwBc4BFf4ohohp75fRSe9exDHNOsP3Ri0xRjgYpW4SJ1T1KOiPUh8u2NJawJzVFayGGNnV1Je5LWfLqVxtnOVlHGEZZnC4lEclp0k9Aac05jp5LDSLkNRGCmkSRPwZLRjrtgUDdOJLR2ii6G0QadRST59h3keqjhUDS7Tpvd9m9A4W6jyZkevYn44aln6EqSuEni8YyvBrf9I6zeCLYEDPlXyBUSZngx3s7DrGLsi7bV7y5zPiLiX1lDQPvu0B1e831yhMl9bLDekY5P0Mgym,35616b22db9a7895,7456cf8858cc236e -SyEdYY9uGKWuBcgYEH1juo2JUUJPJ2EqAZqrseikGVx1NSAdfCpUrZJAqv65kzSJlwm9AXeCelsyFDPjATV3NA78CjXjgXhgdBQPIiI2pUZgBrwOoeHgIILFkgrpnaZg478a8OmoF4oVhSspYijikq2bWslG0qbW2N16tiXccTqhQH7XstnGghkMNZ3CgXKmoY2rSzciO9Syfo83v3h8OI2XmePBmd8Cw3S1c3nUhPb9jSg3BiLSNzldqb3vF1sdzR6Jkyt7SaAUh2y4mDqp9Ys3zxrGdOzobDr0Sx7Cq01CgQtklkXXhKZPGLPQONxsQ2KMVyzQXAqC6gbbkp4BF2uwpqJivu8y7YzINwEekwYoBPc3zACBcvRQwU32K6ozoJpeJ0wWoSluo0IhSbF9NKdXikYw3PnpU7U03XnDUoPVInMKRGYvBMB741K0O6mgKJzKkSIoo8l8Bub0EMO0JOfH9IV4C0PtvrNSOlTa6a7Oy9OcclqFqkoomenj403BspesFi1FNDDbDfk44OxuYUNsxz0uY1zpLxKGGcZEiKGOdTzVZ2hzVpYq8sS0oxcemVjOwZIpOhhqhTg6Uo0bCyWUSehrsDtBpIIcyP01oASQv6zCXGMtbHiAKA3HOVdbM4BLyFeA4r4LACDtuOdVwZsGfT4LxJ08lrmWTRGogseI6Q408AFt2jyJ9H2aLgVbx3leKiUoVowC2eZvYn7qWO8h7E8ynjDfJR2b6W8Nd9DEwxm0mPWsmrsyAsYWSuTegyt8uzaRFpyXU4pClvSIjho9XvYKPCxh0Vd9X61Wm6QKpRcKk9NDyYZ4eTF6F37XqzFUv3TH4uUgXKCaqFRiXNms5qnxqd4VDduF1gHKMWiRY5,a6fc506bfef84b37,8d4cf9f206bbc66a -Zv6jRiUa1TbavscAxeggvqo2dRdF7bvQ5w5ilClkqmfLGxORnjwROmtKMLop4D5nMECboSDb0e2LuXRfP9QpzgxxPYvMwExDJE00cuPKzDpRerLWNvMWE39qlHt9ooS1XmB8YupxQjZsQ03q1rHOpRiILwTtsKucFtvlTTpzvYt8kLudXsbIMLz6OCprkXIr9mfgG6IitGaeQln3JEl8aUWZ7H7OPBhl2KPY7PkxCJkLiKUPsYR4elh5f4MphA1R485L1uN6yz7ZlUNYoEreDkWmAoZicx1a3gdeDbtERNmBOx4GnVj5B3lEAuiV1Gz0uPOkzTlJ1J0aDtXZjhM0EDxhUzoQ20Ch0FrGtm1VKxGklHn7FD4Y4H7Djfq10YzHYzw0lKLPCclsy7VDKsi5wbT0D0K0qzgcVL1IwXLR6QTMY3PJOs9sllU1BuS1gGsvvzoTp9WGPTuHX6qCTeeF8qAfoQfXmPV9dwz3pNlODdd0sAWrc7CDQCjJqNj3rDyzdPCfKuRlOWN4Xy2RRXn0Dqgrcl8qjalOvIvv7ZEVDzMf5I9loMUoqxwAPbqsPsp30m9g3PtaAol5fD8nYDloi4GttP88PIvl6VZ8UZWp3T1AXi8TGRbGCVJnSfACOWNBNmY1x8pUnnfrP9TVJwoANCrB4pQlMRRpmNqi1hFht2iaRNyCOC4MPbSzQSY86doKuXq9DYFLWBeOGWBb7qyhzh5Brka92eGBrKJouR6yC9gB7kmhcQTNCnIgFOm3IJCohqt2jV6GFFiGgyrJMp9simugAVSWcCQRdjKbzXAC81lnfrlkgHFTp4geC2EW98S2vbC7kk4nnBhzFFbmwzDqwlNxAtVJw,3cf42ec71cf71946,7b9d1804896f547b -ryHMXLkQ4W5WeEHYXXIfw8z9EuXEqgrQx3UQo4BTkFIHXlqkaFnUPautIuuTgVTe1p9t645BxnPVYqPL1p5D6mVoZaX9HzGiOP9FhzQEwRERHP9LqKpURMKKEj4bKWHnE7THA4PdpqZAgghiSCT6U352t0sfBmEMG4kHFhc4ngq8wOTxlF5QTyM5pAIgzfCuZyACoNk7Fu3mzMuzbCsjb0SXB3Iu872FbFjujlywhUZw1Oivi1g3dew1mUhbFAhuECMbUhflyHigeDEnxYlxeMzTg92f3tRjiZUTTTHgR78KNEU0Val622C4baoJeaBnJZRStzeAUpieXxcK6DYHvWqltBjMXQKzoFM8BkHXotZgFkPDXbC4tHJthDxuCWO53HxFM2PUFdw7jQUfgkY165lvy1ncvZQy0niWrTXlF24PKxweRSiTOxWFPXFJnqO0It6WDNeAnThqpSaGXpjLeqLGYN8YhrBBB4pbpZhDL4tm0Ry9xeg8owOTY9IRHoora3rGtULjtQvzeY6FCfncr9Yx5qT2ZppGF63mrIM57PtmU8j3XfP1vgtdNCcuoYiEJzKs9njuixIaMYgasQXuN9Idux5Jl6zt8Ls0vBYAwqIadivHRn673o3HOEkhEgLWFvsKRF4QUAn2MkculFHwxBmzlmAqaAHVrLQf21aKag3J20igUnwrgVwZLj1r5TO28zbxLu6GnTWE9kASuWxPYuVVj2INKdJnoZpMOUzFPg4fsH1qXdOQv2Q8sU,411d61b61332e5f,fe66093545efef0d -qBrE6ALpQK5EzRAzoTDVn29iND12yLECvjjyU4BdPmFCqRDuENFnc8IpCQ50ltOLZkRubLlR4qvfvHIbiYzmLmE13AYZDjbLfNCKgXstNeHTdgqzRI7ALlWqLWKCPFjSAB76FYZ06pzHMVBpUFKFpDqj8THw8fp2Dk3G5fWFVQ42brX17PQZfMO6UYhy8ZBMBq03pmKj2m922dvipOaRJfMgMH7W,aef0b9ad438c63d5,8d5dfe5be7a7e966 -rYcM4cNKZfjXEtzaB2nuOowsNqLgq6Bp2Rp9zuaSMXGCImIZl46YhpMhS8q7WGNXmfzxhIqVJfXWRDofJVR0haYRHseOWxg7OpwEgKP9UPQdNaBiLEN1dxF4ghjtyHZ4s5Lf9yy576C5OlZNlnXXwIeTE3xEi3PD8PIxNnCdp4hUdLVBDL8kgYmSA9r5D86dRQG5JjlWV8Kyexq933W6cXxIkmaZSfxRHzkHqp3NbDVIugYBJHdrHGqF6tSxB4hSAlmTXMCg0u0hv1bWMsTVAEe9W8ao3lGwy05C8KXM3f8c7MlZNZr1EfpyXWG7AnKhYSUyWVbGOfcEQchnI2uTPtYsDXstJOCnJgR22wy0Btr53F84HFjWWnZO4K8mvfhgcr3857hqCYCnUb3VmGWaP0ciuDwjaqUFABi1ANReRFVDNh6fIpuhjykPsnHtOxinRvHt00lJxchLjkCS1OKIzFIGXksWteG92WlqgwxAZPvAtmYcwParfmyQprlVkq7YQroPONCvvfsJO9LGCRBC9YQsZfnPBiz9GtFPXmKpLlZHzS8by9oDEwLMSpodiCCz8QqL8fUDI3MtPt,e152554306a86a25,d2ee1455f7680520 -nYUkHfL,1a5dcb41c6c5af4b,6e6fb2894e712ca0 -ODqNrrC6PexELj9pJheubOaUrA3vCr0JeV71YfzauoJfH8kiqsfVCOV5Cb9RcALM43W2lwX2MmVNQ1906lVf5gmmsslm5aq2BDhtV8jiFOTjxXqNXh9vCRYGmUcQpG1gLmeQ0GmRBYZSUfB5koQvy3PDY8T06SbSbKb9BSgi6YnvE35oVmZRNc5C2pGOyrVC1io64i7fp4ht9NWEHYgwmC1HA7EEVXaUvZj8val3xw2MS82BHyuwlkWyJUs9mzvCK4ui2HbkthRhhtWoauq2w4JaDMpUxWIvEke051ISHIqghwKGN06Qth7PwIxgxrIy81MpSxXX3rSesJMqkIPJabFoHT96UKX1wCX095aaZITRAgZIgmjcZ9wak1CedFmKQcQpXmyLrj4oueRjMBWiktgSyAjgsQ80ac7MyCH51PExBH52q3xn0pp7hzTPEc7GpZ8sAMIYqZsNpslNaLvqfCoVl85AWmW35iMATwQfnVXZJ2rKEQFhO6wFJvLnrF8xcHPFAI213OrPM6stN5elSEZQDzgTh6qbAfcM49GOwwr4W0lCaawOwfXxx3v8nw699O8KLJ1jcVp4F4Fpdiez3UbnzezoUBTwmbI6XOfWJ9qNu7atbrHJKxp45Uhbb12aeUzpIukFCCk2ic7iHlrEAKNGXPl3BSmWw27IlUxsyzcAGFw3Sk1hDEg6LtP9wIpbmC38kKCbN2LV4ShNqNEzIXWnYFqKSZnSDxkKEG02wBHm62NEQmZ31OD3HGkQNDpKSWmXkIbSacYAvdvAGjDIDNmNFN8Eg51gpUbxJ6zUmvfM7LRuXxa1W7JjLNSPXMzxBdrB1hcwTtQ3522RRs7f2OcRcuHhx4A4yIkV9oiLTKaf7W5YSlNgxyPZhPJlINGd,1147ef0905ddc8e0,4b59ebe4145bff8d -RUCkAL6LeZvWjHOKjLIbCtritLKd7evgLQPULvxZp6o6L5V3pgYlz2OT5jgWxLIvrVwoNjEQLoMR6ICzeJX6MFoMO4sztQNjPDjuOf2C7MjC7N4CKX1GTQieSHMJSJKBvNcEcGf9tbZX9h9dtZWlJBmpD8ZddRWteai1iUC1a5ECDB0jtlayMED2lwER7KUFiFDkfo25vzatl5y1Vu4e6GSpCnfU7e6nAMk862OQyOZ8XkiuhkweWUfx6dw4uJRudTNchXFkdXwc8AiG0Sqt36MeRpifKtuuGzo2NNRVfa2V26wsItN4GPFB5FD4L53uscI4syP1iuddsMjzC8WXVLD9pxIbY4AWmkHMjDLG6hvYbgPGCkpBMRotyEO60F8nMIoPPNgNcuWNjZ4xA9a4XighSeOg8SsdUGLHnNH0Pq8QBi6e9RMwguO3ukd9ptPZfK3ek9yaMbTFMkczzw1WcJTKZJBSnM4O77FHZ7rCsaGsDT723Yz5ErT1h70IVhLjZLvEUj2UYu69wQ7BSjt3YVf3v7bsAnx0V1yCl3FU5mPnTMA4juSsFyoiWOOB2YziTGnR7l3pt6PJwH7qx1W2Z2RKwWowm0qjkouJPgyHvKehtWpFYGbZFWjSeGic7ebEjzowrngscnHm1FQL51fpdyk0uKuX0eHxfzhr3ZIDEfvuUofRCf2qKSgCuQqnYCzATjMp7Km9povpiYVsKLnyMf2mkFi7d2BKlRwgiEhwwyoliTLUpco44tRU1Qg4UvEXRKUNiXZcLK4hyrIwSJ74tLU9Ut8twOxbOfYLm6weHUfmL8Wjgsc56GsDdCIXImWw4nCeVPCiMGHqA5NQAMpL11U3EQuONmlhBUMItq,4df4576afa0a91e5,4bf3542b6b8ec8c7 -kBO9JVZLrKvNO9nU9GhLoidHnLX6pfN5wS6frdUT22nrhq4acFXXqjJwGj0MUl7gAewHoxnG5va2rg8qgXaiLZ85SVzyC6ZrEUcpDwFrVFaegbFv9yBZM2p97jxEHiGTKlVhLYqbJzUr0VczEUwihj1YbSPu9d5Tg81JRqsXYZjO9Pgkp8HERmFlMdM9FK3r3swoILsoi37ekPqZRvnG1Bk0cgxRu3FBnAAC17RDKf2yKeNftZjKqfVqP5Oo4tvHSjt2238teGSpmxUy56IMXnRWOGdGQmLX8cF9nFRyPo0aTC9Q0ll7VyVRIP2EsRkLl9PoOi2Z446LgCR8WzwsxbXoRhyJJ0L1nIYxvoFuseYnkYSyodMSXThXV4bB4jLUhuwoEJf0Td4YEAp4i4Mv4PptnmftuiL9LNnOsBTeveGkV1olyp6KFc9ay6TCDNCJrJrTsnLmeNRLFQPpUExRj3lmD1x4F1JixXH923Pslt2CYuQP5xkYTmZiKBWZrHBgHHMK8IBE424Jwy6GixeWsb1KgxPBzzZklFPJYp7gtOyEe7srsmXF8TFHJxFEGGePr3DSHwVdj61jChjJBUd42CzVDW1YRAihzisbxQ32Y5nY6tkNRxUmiiYylMzmPktyXxHQekl8e89R8RzoIzy5OBOitY8fbD78mKNcMLvgMc4loUg22EZ1MKBoXXQGyrUlsdGYCR89W16eyReFrtyxRNkOiHjrDg1q8Jx6YuUZEZOytObIhHOkcyNQceAtookIBsaCjOfktD66T5LvexmKQvIWaiwwgdWaLNs2CJGPjsCBwbnyCtiHMZYLX12nt8TNo5HewGa02UidZsEZhHyEeh8ZrqXD5HQ718TWHI029MBK82NSV,cc1bc28ce6855105,802d37e5017ce5ff -IrgyPqRizFdJIQes3KSM9OQUtzjqPnXxnLWuTEi5cI2T7l1wVEiR6082rKzIJyeFTZH9w38o1QaBD5OJOj7AcnKbRF6BK7vAxL1gQDvcwU4jKGzgWaVUxH4henACANbqRKxtNDB95sTAwIQUXUZjQrz6Jd7vmuWgGabJ5jZTPjZcHsDvUDOoYN60BdIG2ESQAsuiPCNba8A2q26Zkuo7c8mIdrcPkpUphvfNl9EUdagHHJXf0m6E5qEFeINSBvvxte3OvWn0iw24FcyILAlY1CcaqsrpvxELmQl3fqGYeKj54M63dlUljw0F7aY5W7pSp3XZc926kAVEhUshM5TpnZzCXB4UCWeSeGFXPA85SorymqME50qPNpngyHSjVmDzgldir4eBB95InerVBaQ8DBUK6xjRXbxHL13zuH8GT5W8JGXaWkYfNrkk8IwwfVQNBoAYTM5kJ341fxBGisHGLJfuYtJxiouCLLRF6HGFJd1K7JeXXDUToveWZ0CskpcLBLeJe4c8fWO3r9hz7JxjUQIXAHaipUoHGLIHL8YnvX6PXROO6Pj,d4d6b66a9e342fb6,a14ca7b7a0609ba2 -y9XXfhUnXcQqVPw7JyhNufBwP3bzC6R9jxm1xEwEXJ2ktIxcZBXpOIza9ASxmLoVPuAypkX2Ma3Wega4i7wmMCZo82OXsS1aFhtwrq1wxCgKUYEf3tTVusNcfOqmnwfEiVu1iVkSGBrrODYCGjGSWyxnavq8u6jd8IIS9ZzflbhdjUapYa4TKSWlrqsWplNjwIgQXjsDiWFaaLzh2BUWnfijJA5KxAdjeryGJx5MJ981Dp998JpGjGMwcQMKAUP4Oi2xQpouPBv1vlW8IyRA02yF04WKrURauDe8N2B0EB5W2kGW8zyXE4xqIPr8vgd4K91tVmC1nNrEo1ABUpEpC0BVivz6M5biECYNGDa5ahgd66xw1ZLm5AIA7vVhR76MvHHXAssQsEqnHc3dwvecpgYabV2G28Eh4MqDFvmbD1I55Qe3iyfw0MDA7dYRq4tVocLhsf3TfesyY0aWQUqHh7lWJsLJhJNz2uMDgAQvevgFiAq5tNGkNvVfYqbt7PKO5sAFyu1q0O6cVyahucjJf4ZTftrhddZbpj7COIQvwPO6l1AVMfcJcCOfkP3ApA9r0Je71X2eSxcnHCqshQ3OOweOAaD016rXY3taqLaPd93UR7ykBCSJFH6T2sFC8OQGKIwiy2NRu7uf7AAosPBaylAyvJHGRQtio6V3GwHm27lAsNAwD4if490Ld1LehnNL6eMtDspkm7,1368def5925dd3c5,1afaf0867f4b84c1 -D5ehGgAUsHNr9K0VAUebQ9A3D0DeeEliYDysFz8INhZaIrV6RZ2NrmXe1Ufjs7vIU4IXJVnT51JKEDKpGiTVzJOYP4vjjlh9bPwLn66SUzGGqlkBTcQn35j62g3pRaDL0xAfQ6whK8EaaaEkoNaUH6xqC5asc89NGb7Zli2DcnLKJiOBpkfJ0HO6Nr9wMnGlOkwGT4DQL077YFxFYT1mT1ZU8NhfhTPw9Bo83otW2MPciSJjd0VMDxS5JeTi3f2ft5NJsBzLhgjMiJcaX3ZFsyIQhKxAruNU3,513bb633ea5c62e5,4c67b96e84d86974 -7KTMePOX8GmK4A8sK6Q6jb9rjyPzCNTq6jUxdTyX4nd0NU56CGWnjaIRItvExoBW286Pe1rowVriU7YrU2KoWQmRPMqGOhiTB96O4GBXO9pUE89GXj3tV0krGpVgI0XvKpGw6V5d7eszPaRN2o5K4VUQev8sTooea6NhIhHfB5a9rujycjYfOXgXHYHP1pwXFqTt2AKAWvuqeIRzQmYsKlOyEpjUfg7G8O5riGky65d6jYTIrWbM0u6XHFzqywWFl6v4wCkPoKgPNEaztv9TlHMlFIRfvQt5aXaelNfJ4ENINv21Y9qpNGpLxUHf94Aq9W64whZN06M6QXN4AgL6LxTQayRJf6nBUB8taKokZy1q5LihcGgJ2bSNRMYGeDlmdJkVgkU9sIKI78WEEIhnrGK3eIRORgkBCPXbOEJSrZyXGhp2nqVgUjsImshsFTHh9ON6B7Nql,feca9b9ff615419d,3cc65d657022ad74 -QYIcarOcZERdBLbvvTRjP2Vgfdlu0Z2Wv2IpTFYfC4XdzhjTPFMogKcSP2uSogj9nzCzWLTsmJUrjGJvyw8F5saV42ppzagbWmdo6eqDLtuaCO6alujpZyj8MuAp4uE6cIxeG4v1tJCgO80rF0h7p8ArB7UMvl8kutFFMFTvlWKZ3UDujtECIllcCCK3b3PgX0DIqJ7MMz80OTokpvhIwS30WPOZ7thKD1JmhBIMORCRHHk95D7TMCnVsAK1irwNBFMd5D6lDv9oRjJ0f0g47nmFyub18aV90GSaDqCAl4yucMkr7vrvh9ChXdjWdbWZFVLJUBotiKjOYO68Yl0ctJjEskYy48UGXxpR1hIyNMAAOoaPZW6yguLfHX63Kfn1QlECCt6Uh7DjQ6eEDpLY7FlI8ReHjpYypRl7pWaOlZWoc9oGsJgQa5aweFHOD1S1OYUrwZdwAmrfUW4OYB5JZkXEty8b4lXJhoc3fojbPzkPlclnYO04YddC5ktaXq94CTFashl921ZcRl6GJUwg5VM3uHk8ajdpMond7pFzXDxBILyWCICJYd6Uf8CGaWKUGiHllS0hai1MplvlYV26oaBaMYQUff15dIbHprAlh2akM4FlUFzTcnSi3wmCiiDHhJ6g2rvVgSiuoa2xBfae1JRr9tKHHqYqFK9ByA2uXQqgFFBIqXYXd7Aj0PrM4u9sqwLNNkky2zQGh1W,b555a8e37a739175,2543404b711ed273 -qS0q75sgK2ySMew6Wfksoq96Ym8DxPeAfPjeJkt4NhFHhi6v7o43L00VF3cUru4HZZFiAQAC0fDVlVm4JE3ONmwyt4fipMMaws1QLUE36jUSIqf3394yyigcs1bIEjJYeR8TWr4mOnFm4pue7aK8qcN1eHEhTfARZbUg3X0FEgDP37h9GVu3mKekoqx7DI9CJOeGvpEtKztMkVlyAUGIuZMzFXm2cmG0gmPmxRNxIKYPTwFNfFIirNGiALHCZpfImiHYu0ZJMznJrREtK21JQPqtxzY6v8dqfxnXZzLJEvKgNgzui92Ex8wCXHy8kjZnJoKliEL,9a6229ecd9675ed4,2775622396df7b00 -APS3nO9OjkEX5qcIbn6jJCSpJiBgpTsoD2k45w7TAt3P77ZWbSrwJ3xZLAeJVPxhvzNGfDJFFF5HDTXS6jmPafOaoylHepu9XQlZKJwayuYJ1HSU5fmhwfM1MyuV0HTQnziPKe7EWR288BlstfS0l1AHYJ1bciJfwH07BRRybpSa5a1IWmMziYcodb0cgcyaO8PbDCcrqMsNGEhoVp9quOQt5QqCDyJb,3bccb6fb3282632b,11e58cd7ad4268bc -WuCdsZjrcqdKQdimUPmZJz5DXTn16le8YNEL7m1XBwRVDbwNI1AzPXnc2NObdbkbkEUQ6SAbqyU4u2uualyyHt8TfUDAvlm6q5pXlUhHZCABDG3KJBjcz8rxM2JYVCa6eJrFyv4o5aC077IVFMYRrb03kSxEpNWo0djyvcWcGLYHfRD3pBl0CurmMVbVOKWzd1JPRHIcsTPnTVybzCD6AeCrMARFnEfzgsp9MERbPeTyYVG8kaQIhctw8Pz7DtVGtH3fpH5QkkoElIIACGhwjJpJWkKItG21CpOlWM58XNZQ5Z6grADS2ThqyNRlhirCbC5Cx6nANCXTckm24gXuM67eYPsNPlq9fn6FrBX51BB8gyd4NBgW2vjNVLoSV6fCl1abnEtzK50DicHGbfRsVzfaB5ipkktiBskJXBBG1497PJFQJcwga2OynGc6RmolTPfJ71lpPyOm4q6htW9tv4eKrdN99ww8YJgvPTe8DGB1eKgmYWwiRn1rE3vOV9ywc5qOdeChcsoiXUdiHcU7wEGGFDSt5KhhBwbrmBXoNCxFwzQBVPcKzO8jk4krDAoIJ3Vf8KFakE0zcUrJuVkg1CfMFVU2ynkuVfi0H8DeD8gmjZPUpWot5FVcVXktRMoS7NTjqMcZbi5O2ddO6ivnDBBiTqhoygdkF7UQHalYQ7WAiQa9izz8vMdv9SH2hrAHEhocdRTklW1duXkIRFKoq2tt37XeYDeDeJKPmCWj2P0DUNfXjXJVcKnu4omvAo93FZbII6QqTRTmqoSFHXo30hVa8t9c6gUvMz1iJZyaGdQV4KPjnowig2WEt7QQNO3ibCjys1scEpyDZKER6s8tAWZDRfnrEbmp1ffw6VdcLip3YU0D0WTQTSZcrFRM5S4OJhHHwnAPI2SdnVWn0YwSTMqcu,b40f98693208473e,46e9bbd1bbb83363 diff --git a/vendor/github.com/go-faster/city/_testdata/data.json b/vendor/github.com/go-faster/city/_testdata/data.json deleted file mode 100644 index 1d7677aa..00000000 --- a/vendor/github.com/go-faster/city/_testdata/data.json +++ /dev/null @@ -1,1262 +0,0 @@ -{ - "Seed": { - "Low": 5577006791947779410, - "High": 8674665223082153551 - }, - "Entries": [ - { - "Input": "Moscow", - "City32": 431367057, - "City64": 5992710078453357409, - "City128": { - "Low": 10019773792274861915, - "High": 12276543986707912152 - }, - "City128Seed": { - "Low": 13396466470330251720, - "High": 5508504338941663328 - }, - "ClickHouse64": 12507901496292878638, - "ClickHouse128": { - "Low": 3377444358654451565, - "High": 2499202049363713365 - }, - "ClickHouse128Seed": { - "Low": 568168482305327346, - "High": 1719721512326527886 - } - }, - { - "Input": "ClickHouse", - "City32": 1586074392, - "City64": 4321509792407916471, - "City128": { - "Low": 9486725109875734340, - "High": 16384911740144003974 - }, - "City128Seed": { - "Low": 3162881111231059478, - "High": 242154728339077522 - }, - "ClickHouse64": 12904064065176299341, - "ClickHouse128": { - "Low": 3964518429637719570, - "High": 8562533408163042306 - }, - "ClickHouse128Seed": { - "Low": 11747148340984707200, - "High": 5004447335901390541 - } - }, - { - "Input": "", - "City32": 3696677242, - "City64": 11160318154034397263, - "City128": { - "Low": 4463240938071824939, - "High": 4374473821787594281 - }, - "City128Seed": { - "Low": 1935026918320664179, - "High": 61008715075980643 - }, - "ClickHouse64": 11160318154034397263, - "ClickHouse128": { - "Low": 4463240938071824939, - "High": 4374473821787594281 - }, - "ClickHouse128Seed": { - "Low": 1935026918320664179, - "High": 61008715075980643 - } - }, - { - "Input": "a", - "City32": 1016544589, - "City64": 12917804110809363939, - "City128": { - "Low": 7969074168056553668, - "High": 5955762262185338209 - }, - "City128Seed": { - "Low": 1400159176211212734, - "High": 7006252670599176803 - }, - "ClickHouse64": 2603192927274642682, - "ClickHouse128": { - "Low": 15163964786936388304, - "High": 18266194243813403894 - }, - "ClickHouse128Seed": { - "Low": 13217532337516305979, - "High": 1008127206705474693 - } - }, - { - "Input": "ab", - "City32": 1098068221, - "City64": 12289600257749001502, - "City128": { - "Low": 1434454701921568952, - "High": 14977791492677394990 - }, - "City128Seed": { - "Low": 2966951454887751226, - "High": 6042003622446212611 - }, - "ClickHouse64": 1725057946192985918, - "ClickHouse128": { - "Low": 12124403134182352952, - "High": 15690918305607184567 - }, - "ClickHouse128Seed": { - "Low": 18137244581640236126, - "High": 6054456767937016215 - } - }, - { - "Input": "abc", - "City32": 795041479, - "City64": 2640714258260161385, - "City128": { - "Low": 4143508125394299908, - "High": 11566915719555882565 - }, - "City128Seed": { - "Low": 5546025195476126621, - "High": 300167305778777761 - }, - "ClickHouse64": 4220206313085259313, - "ClickHouse128": { - "Low": 10380781289832139006, - "High": 1416689273191665022 - }, - "ClickHouse128Seed": { - "Low": 6600600954358357539, - "High": 4743764779043705706 - } - }, - { - "Input": "abcd", - "City32": 2562006677, - "City64": 1897425971756105985, - "City128": { - "Low": 13319140115757694594, - "High": 650444106621073625 - }, - "City128Seed": { - "Low": 17178203873417712244, - "High": 3336035505985400967 - }, - "ClickHouse64": 17823623939509273229, - "ClickHouse128": { - "Low": 15137505341054233748, - "High": 14767571255030181100 - }, - "ClickHouse128Seed": { - "Low": 15458233570287844165, - "High": 10874336093089746093 - } - }, - { - "Input": "abcde", - "City32": 2750637740, - "City64": 13992479962126222548, - "City128": { - "Low": 10668970051761944655, - "High": 17831839097762972641 - }, - "City128Seed": { - "Low": 7975962826736918869, - "High": 15630740011956937235 - }, - "ClickHouse64": 10649408139150141320, - "ClickHouse128": { - "Low": 9414485032960459596, - "High": 14709035636812719000 - }, - "ClickHouse128Seed": { - "Low": 5847158233341230782, - "High": 7961910190340331137 - } - }, - { - "Input": "abcdef", - "City32": 260127396, - "City64": 14062832464964076237, - "City128": { - "Low": 8033370924408288235, - "High": 9054869399155703984 - }, - "City128Seed": { - "Low": 16252882215651111084, - "High": 16281023255203441355 - }, - "ClickHouse64": 18226839071476555706, - "ClickHouse128": { - "Low": 8111314733931880642, - "High": 6673974175531983573 - }, - "ClickHouse128Seed": { - "Low": 9917700338070043528, - "High": 14460308921024715958 - } - }, - { - "Input": "abcdefg", - "City32": 568243927, - "City64": 4341691227789030229, - "City128": { - "Low": 11411464479028692339, - "High": 14967103466825869657 - }, - "City128Seed": { - "Low": 12508134884942962827, - "High": 6863945294244523105 - }, - "ClickHouse64": 9365486912795408122, - "ClickHouse128": { - "Low": 6752956416143810332, - "High": 14163614211583527179 - }, - "ClickHouse128Seed": { - "Low": 10660279888702515142, - "High": 8412579963838460174 - } - }, - { - "Input": "abcdefgh", - "City32": 4252944569, - "City64": 18368443631171807497, - "City128": { - "Low": 6985830856738084079, - "High": 6264954680145817547 - }, - "City128Seed": { - "Low": 599243959736057765, - "High": 7617370314539711527 - }, - "ClickHouse64": 4864636163090995991, - "ClickHouse128": { - "Low": 5450273043562147764, - "High": 18090582611594380852 - }, - "ClickHouse128Seed": { - "Low": 9854692397719424074, - "High": 4241976427614969063 - } - }, - { - "Input": "abcdefghi", - "City32": 1872288902, - "City64": 3687479239766293058, - "City128": { - "Low": 8890062993969196433, - "High": 7037508719533800860 - }, - "City128Seed": { - "Low": 13838229045843743197, - "High": 6355279803720300117 - }, - "ClickHouse64": 7406163328168016081, - "ClickHouse128": { - "Low": 13097897060372010631, - "High": 18038557244115978387 - }, - "ClickHouse128Seed": { - "Low": 14921651653417540907, - "High": 4325066116193311443 - } - }, - { - "Input": "0123456789", - "City32": 2537671194, - "City64": 12467408821976941803, - "City128": { - "Low": 14944365093319411317, - "High": 8028990795869858245 - }, - "City128Seed": { - "Low": 4135233689678050158, - "High": 14292642417673547990 - }, - "ClickHouse64": 12631666426400459317, - "ClickHouse128": { - "Low": 14515581804035899301, - "High": 2781397614462516649 - }, - "ClickHouse128Seed": { - "Low": 14274644166387490967, - "High": 17936016335134578406 - } - }, - { - "Input": "0123456789 ", - "City32": 3390544809, - "City64": 4536462058872409207, - "City128": { - "Low": 14422655756510523550, - "High": 10807170490693841681 - }, - "City128Seed": { - "Low": 13460238696312406241, - "High": 14581636626186431312 - }, - "ClickHouse64": 4510811903646916973, - "ClickHouse128": { - "Low": 5044271118502291767, - "High": 2524955506903539452 - }, - "ClickHouse128Seed": { - "Low": 2430388293984791025, - "High": 15140868548079466020 - } - }, - { - "Input": "0123456789-0", - "City32": 4174149928, - "City64": 5289550228011338897, - "City128": { - "Low": 3693401906109609355, - "High": 16132609523982559933 - }, - "City128Seed": { - "Low": 9532254578070461842, - "High": 4941811860950821770 - }, - "ClickHouse64": 11745345441536878567, - "ClickHouse128": { - "Low": 9131605731435243666, - "High": 8787875700370564002 - }, - "ClickHouse128Seed": { - "Low": 12100873890967083096, - "High": 10635169672829915710 - } - }, - { - "Input": "0123456789~01", - "City32": 449308148, - "City64": 15572264021237804044, - "City128": { - "Low": 6003158511865826907, - "High": 3737564584554176412 - }, - "City128Seed": { - "Low": 9643021165563036625, - "High": 9512026419363204349 - }, - "ClickHouse64": 870179535238924845, - "ClickHouse128": { - "Low": 9589757001657349743, - "High": 13331779877298589970 - }, - "ClickHouse128Seed": { - "Low": 9128218908004110350, - "High": 2619188771085606852 - } - }, - { - "Input": "0123456789#012", - "City32": 3454629345, - "City64": 6747982827503355638, - "City128": { - "Low": 5763709159022012033, - "High": 5196006665423943320 - }, - "City128Seed": { - "Low": 10039373043883223877, - "High": 5163840641189738397 - }, - "ClickHouse64": 10733516691078016323, - "ClickHouse128": { - "Low": 2061992899476626284, - "High": 9554017049967394074 - }, - "ClickHouse128Seed": { - "Low": 12876435802543189428, - "High": 18302256517868786149 - } - }, - { - "Input": "0123456789@0123", - "City32": 3910001282, - "City64": 6008341632059963068, - "City128": { - "Low": 10279453844029536256, - "High": 2877882647449872029 - }, - "City128Seed": { - "Low": 3927165613843697680, - "High": 17405345318156560082 - }, - "ClickHouse64": 5014980926110993296, - "ClickHouse128": { - "Low": 4226269686736976323, - "High": 5069520701909446915 - }, - "ClickHouse128Seed": { - "Low": 9487039182666900838, - "High": 9261137871475871095 - } - }, - { - "Input": "0123456789'01234", - "City32": 2257095711, - "City64": 4792908552545140580, - "City128": { - "Low": 13501142762230597207, - "High": 7062831230494719979 - }, - "City128Seed": { - "Low": 12378113031751840032, - "High": 17183492847139963738 - }, - "ClickHouse64": 342587571233817010, - "ClickHouse128": { - "Low": 5376997234998077898, - "High": 10566044557984082456 - }, - "ClickHouse128Seed": { - "Low": 3479676595728104980, - "High": 6809670944765885942 - } - }, - { - "Input": "0123456789=012345", - "City32": 2706011940, - "City64": 5091109848033402427, - "City128": { - "Low": 1765766646833811366, - "High": 12051273517542422384 - }, - "City128Seed": { - "Low": 12785887590699192351, - "High": 4081098352252701601 - }, - "ClickHouse64": 9851079735554060767, - "ClickHouse128": { - "Low": 624285883343621191, - "High": 8956332536468243975 - }, - "ClickHouse128Seed": { - "Low": 12785887590699192351, - "High": 4081098352252701601 - } - }, - { - "Input": "0123456789+0123456", - "City32": 3921085037, - "City64": 11865776521063717196, - "City128": { - "Low": 13289712651245365241, - "High": 15168162835762199023 - }, - "City128Seed": { - "Low": 12349267569130584790, - "High": 2814253378211005042 - }, - "ClickHouse64": 5773761936480509791, - "ClickHouse128": { - "Low": 16695864222237453375, - "High": 13870199499492916551 - }, - "ClickHouse128Seed": { - "Low": 12349267569130584790, - "High": 2814253378211005042 - } - }, - { - "Input": "0123456789*01234567", - "City32": 1436288216, - "City64": 14923940956839318037, - "City128": { - "Low": 14427993897349513082, - "High": 8822259841034806555 - }, - "City128Seed": { - "Low": 13566851651084859020, - "High": 14268550325409499922 - }, - "ClickHouse64": 2062097475356277865, - "ClickHouse128": { - "Low": 12149229310290560347, - "High": 8324728103061300 - }, - "ClickHouse128Seed": { - "Low": 13566851651084859020, - "High": 14268550325409499922 - } - }, - { - "Input": "0123456789\u0026012345678", - "City32": 2744390090, - "City64": 553367757547595004, - "City128": { - "Low": 9157163523314904644, - "High": 7450964159509581364 - }, - "City128Seed": { - "Low": 18273776522954695091, - "High": 9290471827519053323 - }, - "ClickHouse64": 3631961974025564808, - "ClickHouse128": { - "Low": 15864714011363128807, - "High": 14791165821937113924 - }, - "ClickHouse128Seed": { - "Low": 18273776522954695091, - "High": 9290471827519053323 - } - }, - { - "Input": "0123456789^0123456789", - "City32": 2729133335, - "City64": 16049908292956105681, - "City128": { - "Low": 3610933135361606132, - "High": 14171968471499035780 - }, - "City128Seed": { - "Low": 2797525655316092226, - "High": 5968123281241573382 - }, - "ClickHouse64": 9695149554465931411, - "ClickHouse128": { - "Low": 15763356469259115904, - "High": 17034853217782965881 - }, - "ClickHouse128Seed": { - "Low": 2797525655316092226, - "High": 5968123281241573382 - } - }, - { - "Input": "0123456789%0123456789£", - "City32": 2909187230, - "City64": 5601653899545901032, - "City128": { - "Low": 7962544162379928918, - "High": 746916849896426328 - }, - "City128Seed": { - "Low": 16600321598579969136, - "High": 17173066250112817686 - }, - "ClickHouse64": 16395530686949663467, - "ClickHouse128": { - "Low": 17588020885154525590, - "High": 17748006011810928901 - }, - "ClickHouse128Seed": { - "Low": 16600321598579969136, - "High": 17173066250112817686 - } - }, - { - "Input": "0123456789$0123456789!0", - "City32": 3861773724, - "City64": 15532175715466358378, - "City128": { - "Low": 16795709482798739833, - "High": 4519591268767170108 - }, - "City128Seed": { - "Low": 14026279332704891529, - "High": 9180856307156703776 - }, - "ClickHouse64": 5583302547385282329, - "ClickHouse128": { - "Low": 5558050013456622826, - "High": 9815888199424230554 - }, - "ClickHouse128Seed": { - "Low": 14026279332704891529, - "High": 9180856307156703776 - } - }, - { - "Input": "size: a.out: bad magic", - "City32": 3507392003, - "City64": 9283954595969990072, - "City128": { - "Low": 1345271854579481199, - "High": 2770399054099358643 - }, - "City128Seed": { - "Low": 12408208737420565519, - "High": 3405226454683422015 - }, - "ClickHouse64": 50265519040903215, - "ClickHouse128": { - "Low": 18153091936184608554, - "High": 14295249992360344248 - }, - "ClickHouse128Seed": { - "Low": 12408208737420565519, - "High": 3405226454683422015 - } - }, - { - "Input": "Nepal premier won't resign.", - "City32": 4256981495, - "City64": 10282703717779097465, - "City128": { - "Low": 11981530587919579776, - "High": 14249603174773263794 - }, - "City128Seed": { - "Low": 4051447877476147132, - "High": 10578696136104733238 - }, - "ClickHouse64": 2758531837809990903, - "ClickHouse128": { - "Low": 7453362807235106578, - "High": 10968532034493255540 - }, - "ClickHouse128Seed": { - "Low": 4051447877476147132, - "High": 10578696136104733238 - } - }, - { - "Input": "C is as portable as Stonehedge!!", - "City32": 3518948724, - "City64": 13350068567456998420, - "City128": { - "Low": 2180301073154366071, - "High": 618951093331176254 - }, - "City128Seed": { - "Low": 116362807437870375, - "High": 698206839111187466 - }, - "ClickHouse64": 8484165492542029813, - "ClickHouse128": { - "Low": 4713802179786725992, - "High": 16559183759426220143 - }, - "ClickHouse128Seed": { - "Low": 116362807437870375, - "High": 698206839111187466 - } - }, - { - "Input": "Discard medicine more than two years old.", - "City32": 1057971048, - "City64": 14637730629324758636, - "City128": { - "Low": 14323956728075046893, - "High": 10303342857365697077 - }, - "City128Seed": { - "Low": 5926057719386518751, - "High": 5883941503897891971 - }, - "ClickHouse64": 7167111705706377561, - "ClickHouse128": { - "Low": 17100540181678511821, - "High": 14516600393780501222 - }, - "ClickHouse128Seed": { - "Low": 5926057719386518751, - "High": 5883941503897891971 - } - }, - { - "Input": "I wouldn't marry him with a ten foot pole.", - "City32": 2530799898, - "City64": 18142860887665219312, - "City128": { - "Low": 16900625814905586193, - "High": 16302962471182084499 - }, - "City128Seed": { - "Low": 13455389572057652442, - "High": 12676394210126329085 - }, - "ClickHouse64": 9555326654470078682, - "ClickHouse128": { - "Low": 10472938205269449350, - "High": 1680970999901096477 - }, - "ClickHouse128Seed": { - "Low": 13455389572057652442, - "High": 12676394210126329085 - } - }, - { - "Input": "If the enemy is within range, then so are you.", - "City32": 3501065226, - "City64": 17911410438186840238, - "City128": { - "Low": 6167029722808524288, - "High": 14798455976575164321 - }, - "City128Seed": { - "Low": 10369972700887415199, - "High": 9236974185214846521 - }, - "ClickHouse64": 18100256812616293767, - "ClickHouse128": { - "Low": 133426820351620853, - "High": 13499957205779794967 - }, - "ClickHouse128Seed": { - "Low": 10369972700887415199, - "High": 9236974185214846521 - } - }, - { - "Input": "The major problem is with sendmail. -Mark Horton", - "City32": 157569722, - "City64": 18098739481239317989, - "City128": { - "Low": 4743226681022166756, - "High": 14214665363906268667 - }, - "City128Seed": { - "Low": 15285832006964529364, - "High": 8946779561215487164 - }, - "ClickHouse64": 6113083948763379553, - "ClickHouse128": { - "Low": 10016869154748627446, - "High": 15375495703408606501 - }, - "ClickHouse128Seed": { - "Low": 15285832006964529364, - "High": 8946779561215487164 - } - }, - { - "Input": "How can you write a big system without C++? -Paul Glick", - "City32": 2405378429, - "City64": 749291162957442504, - "City128": { - "Low": 10958369456055860403, - "High": 14239663389869316885 - }, - "City128Seed": { - "Low": 16293038340474093629, - "High": 5046329602178592353 - }, - "ClickHouse64": 6237945311650045625, - "ClickHouse128": { - "Low": 17554648324305308321, - "High": 15970109859030977686 - }, - "ClickHouse128Seed": { - "Low": 16293038340474093629, - "High": 5046329602178592353 - } - }, - { - "Input": "He who has a shady past knows that nice guys finish last.", - "City32": 1308756331, - "City64": 12773272487727932308, - "City128": { - "Low": 2827967514863011179, - "High": 12137961880067556918 - }, - "City128Seed": { - "Low": 1618584177890338681, - "High": 7692179231749118013 - }, - "ClickHouse64": 5881143248985027108, - "ClickHouse128": { - "Low": 16986997577771433243, - "High": 11575454934117215543 - }, - "ClickHouse128Seed": { - "Low": 1618584177890338681, - "High": 7692179231749118013 - } - }, - { - "Input": "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave", - "City32": 1598063825, - "City64": 17447573211648233347, - "City128": { - "Low": 5193728322932930136, - "High": 8315808240122436918 - }, - "City128Seed": { - "Low": 493553442229101054, - "High": 17022247975424937906 - }, - "ClickHouse64": 17241272464062950471, - "ClickHouse128": { - "Low": 17381921775399257709, - "High": 9492523054659953786 - }, - "ClickHouse128Seed": { - "Low": 493553442229101054, - "High": 17022247975424937906 - } - }, - { - "Input": "His money is twice tainted: 'taint yours and 'taint mine.", - "City32": 317615806, - "City64": 13860510713913349705, - "City128": { - "Low": 16185146595480326780, - "High": 17015401319849236038 - }, - "City128Seed": { - "Low": 17619985641870144822, - "High": 17562113001629793159 - }, - "ClickHouse64": 3171291129933422128, - "ClickHouse128": { - "Low": 5132622071024137889, - "High": 17963481264634437175 - }, - "ClickHouse128Seed": { - "Low": 17619985641870144822, - "High": 17562113001629793159 - } - }, - { - "Input": "The days of the digital watch are numbered. -Tom Stoppard", - "City32": 3844681619, - "City64": 17500208954721178989, - "City128": { - "Low": 14757460113087850494, - "High": 10331888883348011295 - }, - "City128Seed": { - "Low": 2301414823397359937, - "High": 17049037887102958097 - }, - "ClickHouse64": 10176971017375701784, - "ClickHouse128": { - "Low": 5276445359578238019, - "High": 3125500923501439530 - }, - "ClickHouse128Seed": { - "Low": 2301414823397359937, - "High": 17049037887102958097 - } - }, - { - "Input": "For every action there is an equal and opposite government program.", - "City32": 3300028065, - "City64": 17925857084733277335, - "City128": { - "Low": 4477605944974842917, - "High": 6686874442343478863 - }, - "City128Seed": { - "Low": 12819270835010133372, - "High": 13619377119526745439 - }, - "ClickHouse64": 15417296343442759947, - "ClickHouse128": { - "Low": 8159663689782685251, - "High": 5300800888114925128 - }, - "ClickHouse128Seed": { - "Low": 12819270835010133372, - "High": 13619377119526745439 - } - }, - { - "Input": "You remind me of a TV show, but that's all right: I watch it anyway.", - "City32": 2741039484, - "City64": 3238539480550029839, - "City128": { - "Low": 15564174535996278620, - "High": 13215320424975362198 - }, - "City128Seed": { - "Low": 2022138833546455130, - "High": 2531757673095573549 - }, - "ClickHouse64": 4266387439628799592, - "ClickHouse128": { - "Low": 18335492873395227390, - "High": 2667437297135991813 - }, - "ClickHouse128Seed": { - "Low": 2022138833546455130, - "High": 2531757673095573549 - } - }, - { - "Input": "It's well we cannot hear the screams/That we create in others' dreams.", - "City32": 692054856, - "City64": 15172153012307172858, - "City128": { - "Low": 1189672716042796327, - "High": 3403354538628189761 - }, - "City128Seed": { - "Low": 9169921690981628519, - "High": 6480392904083726364 - }, - "ClickHouse64": 15559714866293990128, - "ClickHouse128": { - "Low": 5855705637943324017, - "High": 12364061065010858999 - }, - "ClickHouse128Seed": { - "Low": 9169921690981628519, - "High": 6480392904083726364 - } - }, - { - "Input": "Give me a rock, paper and scissors and I will move the world. CCFestoon", - "City32": 1752517648, - "City64": 17399428652093956601, - "City128": { - "Low": 2079284227713321727, - "High": 2944023020554257207 - }, - "City128Seed": { - "Low": 5203258229714618739, - "High": 8564560395228980633 - }, - "ClickHouse64": 918380186659093353, - "ClickHouse128": { - "Low": 14732236451004011055, - "High": 4324668585637671116 - }, - "ClickHouse128Seed": { - "Low": 5203258229714618739, - "High": 8564560395228980633 - } - }, - { - "Input": "It's a tiny change to the code and not completely disgusting. - Bob Manchek", - "City32": 2278862467, - "City64": 6928626454709594388, - "City128": { - "Low": 12376110963306160882, - "High": 1149447028796037550 - }, - "City128Seed": { - "Low": 11452973915677342183, - "High": 3550708038227708783 - }, - "ClickHouse64": 9411844461811906051, - "ClickHouse128": { - "Low": 6084801553430540176, - "High": 11297466570154729305 - }, - "ClickHouse128Seed": { - "Low": 11452973915677342183, - "High": 3550708038227708783 - } - }, - { - "Input": "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977", - "City32": 1245548766, - "City64": 14156572111887213399, - "City128": { - "Low": 3547689611939963773, - "High": 352412539875473798 - }, - "City128Seed": { - "Low": 15532645007301689041, - "High": 5699972195609356665 - }, - "ClickHouse64": 3783629113178694861, - "ClickHouse128": { - "Low": 8781435428258980073, - "High": 16244111399632244224 - }, - "ClickHouse128Seed": { - "Low": 15532645007301689041, - "High": 5699972195609356665 - } - }, - { - "Input": "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley", - "City32": 690100832, - "City64": 1686264634911748486, - "City128": { - "Low": 9890796143636688770, - "High": 14819942077093428433 - }, - "City128Seed": { - "Low": 5044051242799634426, - "High": 15748472499127526836 - }, - "ClickHouse64": 6551603257315194044, - "ClickHouse128": { - "Low": 11501772505812601437, - "High": 4717818413439733863 - }, - "ClickHouse128Seed": { - "Low": 5044051242799634426, - "High": 15748472499127526836 - } - }, - { - "Input": "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule", - "City32": 2205048114, - "City64": 8130438665348453365, - "City128": { - "Low": 8204438510737850165, - "High": 18389267343627278416 - }, - "City128Seed": { - "Low": 16595094829861910529, - "High": 6838303732999132125 - }, - "ClickHouse64": 2974938966899249022, - "ClickHouse128": { - "Low": 7700392045108955753, - "High": 2925538868447122654 - }, - "ClickHouse128Seed": { - "Low": 1863972280396719366, - "High": 9157617392947605544 - } - }, - { - "Input": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", - "City32": 3403419501, - "City64": 5309349425077012460, - "City128": { - "Low": 2311150269084127084, - "High": 16671388968946027466 - }, - "City128Seed": { - "Low": 14023773754950110810, - "High": 15953067525758124872 - }, - "ClickHouse64": 5005829707294311127, - "ClickHouse128": { - "Low": 1094330655266133783, - "High": 14354420013925076183 - }, - "ClickHouse128Seed": { - "Low": 15583653857129052776, - "High": 8170114626718433132 - } - }, - { - "Input": "Anj lRpP.goh*j*AcuNShBnbkNZ+HuuKrgkQZXIFmCEUhFB%FTyqkYpz_fjm@tSix!xhErMvBh.+$vdzzP *xPFlCQtvO(se=@n(ox$Fwphj ^$%tVbKv?UaZzvoCtdQm+*jn*SvKj_RqAol!Y?kRhhVkEZ#M^a)yH%%-(hQaGZxOLQj=kHk@P-Np.IAJis-FlsYuEyP", - "City32": 3455980892, - "City64": 12329288824191864498, - "City128": { - "Low": 14924260978314091794, - "High": 199209500917736932 - }, - "City128Seed": { - "Low": 17471239889489304064, - "High": 11413437389712639115 - }, - "ClickHouse64": 1806991548799798990, - "ClickHouse128": { - "Low": 9991928335763527278, - "High": 9943747019497616234 - }, - "ClickHouse128Seed": { - "Low": 1336384004467077937, - "High": 17591406366307480973 - } - }, - { - "Input": "ilrg)QRZPQ", - "City32": 4124728996, - "City64": 2302212067639460797, - "City128": { - "Low": 9973750434165696234, - "High": 9219481510906933430 - }, - "City128Seed": { - "Low": 6806077154596870677, - "High": 15867465420740414714 - }, - "ClickHouse64": 1481793775145840474, - "ClickHouse128": { - "Low": 14868341796132072894, - "High": 15589457705282644011 - }, - "ClickHouse128Seed": { - "Low": 2592810698026030684, - "High": 16930898606069945064 - } - }, - { - "Input": ",RVU(KFMtumnFIJ", - "City32": 2783712726, - "City64": 350522703217383896, - "City128": { - "Low": 10351961775840891986, - "High": 16740239293439759896 - }, - "City128Seed": { - "Low": 4600512636867581565, - "High": 17493533692235572545 - }, - "ClickHouse64": 18429690245096591555, - "ClickHouse128": { - "Low": 12669515727173899101, - "High": 9368109536426551273 - }, - "ClickHouse128Seed": { - "Low": 5464936815862341237, - "High": 6406788864034962376 - } - }, - { - "Input": "P+KV#CoHadTEcTJl#IvXwMwiD%JqQoLA(_s_OAU$qkv(-msg_@.ZhVz$FLxUZAyWkuZQf?Nh?+IbY+Uo(@%a(EW_nh(zlzqaensNhTUwR#vqQCNRrQcX*ssj*agyd +r_BAdVdpMTkEvZWVqWSF!Brm*j_sWU.OwnlSRRZ@nN,TsKZlK)Dk.QVSJH", - "City32": 698640112, - "City64": 14755248863261294565, - "City128": { - "Low": 14350455725169727621, - "High": 17402460960897450466 - }, - "City128Seed": { - "Low": 2527196243419791556, - "High": 3479058664757123837 - }, - "ClickHouse64": 8912191930370128835, - "ClickHouse128": { - "Low": 6092040975282313701, - "High": 3258229015626463200 - }, - "ClickHouse128Seed": { - "Low": 3687302935795212105, - "High": 10988937907583256601 - } - }, - { - "Input": "PQTr^#b-e!R#ysE$(+D=MTB,mE%fJXM$rBbSkWIMzs W_YiEmCk,tD,vwNthgOy#bxcBTkRo$QrI)RKeLFYySmY=E)?m?Mbv%AO^kQ*DsP)u^LP+(U_QI)qy^^a!ejc-EXuOrwpbrvGxGVBrDE_qahnlQvhkBcAh@vb-WIKhGscATS .NPhP =x!yI", - "City32": 934044943, - "City64": 1761171816838911985, - "City128": { - "Low": 13313819601465295041, - "High": 15469535967676905700 - }, - "City128Seed": { - "Low": 17523302842842747715, - "High": 14065098026458552937 - }, - "ClickHouse64": 11548566765750632392, - "ClickHouse128": { - "Low": 5860772921707063635, - "High": 885576976069993412 - }, - "ClickHouse128Seed": { - "Low": 8715321472388972391, - "High": 830927941107161549 - } - }, - { - "Input": "TjXg*RsDwmYrG#P#Szjtv.jSQ.cSgaKnb?X^,sWB_)b=@hS!DJt)KvX+b@YSahLtyIlG@TaRE^mzbZifmnGBhhL@DinCeUG,Hh+XX)$YoCx?@DfqJ@tMzShUcZ", - "City32": 502949642, - "City64": 6125387249390855292, - "City128": { - "Low": 1967969290047781624, - "High": 4581379416590133807 - }, - "City128Seed": { - "Low": 16787990795536330771, - "High": 11041930018039790359 - }, - "ClickHouse64": 8545334793957001611, - "ClickHouse128": { - "Low": 8837605784817871926, - "High": 13747196132616268921 - }, - "ClickHouse128Seed": { - "Low": 16787990795536330771, - "High": 11041930018039790359 - } - }, - { - "Input": "sZNhSS_wbZRyxPUG*PoDWnYx.j.zfbitrw).RaubdiKH+Mnkd^Mb+YgNgREyKf?=#@NH", - "City32": 1567801837, - "City64": 14391835876820600478, - "City128": { - "Low": 17604553291554186082, - "High": 2134002456328291193 - }, - "City128Seed": { - "Low": 5238695213702044393, - "High": 13620123017012141284 - }, - "ClickHouse64": 4515928171636108397, - "ClickHouse128": { - "Low": 9751617232078799873, - "High": 6308534615140274791 - }, - "ClickHouse128Seed": { - "Low": 5238695213702044393, - "High": 13620123017012141284 - } - }, - { - "Input": ".U+U(D_% y#wO=O,mPkbpj w_dp,HsX%-)ZMNEFK?BPQX*DX)p.UQMBMLgI?^%z$=fUH*pnAT?o*mVJFfdz(.wjFsDTgqp_* GCVR.Xhavj-BtTK X?S+NNpTh!A@A?Td_tAyGHTlc*J_lo!KUiLybsanTU@?vm,yvSeIGk(Xrbl@V=Knc!UZ", - "City32": 1283448383, - "City64": 9637455337848845955, - "City128": { - "Low": 17042986483076167414, - "High": 15305792403223768604 - }, - "City128Seed": { - "Low": 1422869030462094907, - "High": 3368325400639706656 - }, - "ClickHouse64": 4052263652260448419, - "ClickHouse128": { - "Low": 11964304483576550465, - "High": 14286032838748707858 - }, - "ClickHouse128Seed": { - "Low": 8015255481831788381, - "High": 4875702607097673535 - } - }, - { - "Input": "ph?EV?FkC-DA+ $Twgr=J!_z!Da%d*UbZUgjjHOO%Vyu@fk oR-CX@vUhy.^w^-dKDIoli#(,gFcT,xQFNUyfglex eXzz^ukFim_WqkqVdy=LRNlk.dVDzhKoviaAhcl$lZXidm^mtErugajq", - "City32": 516429072, - "City64": 7429231230607263930, - "City128": { - "Low": 6276507861415164767, - "High": 7853465464810892448 - }, - "City128Seed": { - "Low": 6628466428325006308, - "High": 17579407271801774446 - }, - "ClickHouse64": 25228093145735692, - "ClickHouse128": { - "Low": 1727768636662756674, - "High": 16298946358691807970 - }, - "ClickHouse128Seed": { - "Low": 17832817817036612634, - "High": 11609541559657480528 - } - }, - { - "Input": "Z=JsEurqIVm+Ki#Gi#kubWth@f(wWQYXPpsxisq_F*qVTGLhVIvLWB$IAUUDqPI-Yp(*dD,_Vrr,LOUaWAp*.NE-ry?mRcm I-YOOi%xeP=coW!*x_WZvG,g_GwKFaiaaBHVU-%DW^FfiOyF.Oh)Eqi+m)^JsSnhsIlpWqa(BV_mVLowV%@FzSOGIkcwwzZC^@,LGi", - "City32": 4172669370, - "City64": 4961671881386476261, - "City128": { - "Low": 14819843007708067963, - "High": 2712692876572478980 - }, - "City128Seed": { - "Low": 227115690684222068, - "High": 15973676532921400187 - }, - "ClickHouse64": 16443597820201492581, - "ClickHouse128": { - "Low": 4024495065587983269, - "High": 5735333729924990192 - }, - "ClickHouse128Seed": { - "Low": 18292823935382723418, - "High": 3757719590843420989 - } - } - ] -} diff --git a/vendor/github.com/goccy/go-json/.golangci.yml b/vendor/github.com/goccy/go-json/.golangci.yml index 57ae5a52..977accaa 100644 --- a/vendor/github.com/goccy/go-json/.golangci.yml +++ b/vendor/github.com/goccy/go-json/.golangci.yml @@ -56,6 +56,9 @@ linters: - cyclop - containedctx - revive + - nosnakecase + - exhaustruct + - depguard issues: exclude-rules: diff --git a/vendor/github.com/goccy/go-json/Makefile b/vendor/github.com/goccy/go-json/Makefile index 5bbfc4c9..c030577d 100644 --- a/vendor/github.com/goccy/go-json/Makefile +++ b/vendor/github.com/goccy/go-json/Makefile @@ -30,7 +30,7 @@ golangci-lint: | $(BIN_DIR) GOLANGCI_LINT_TMP_DIR=$$(mktemp -d); \ cd $$GOLANGCI_LINT_TMP_DIR; \ go mod init tmp; \ - GOBIN=$(BIN_DIR) go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.48.0; \ + GOBIN=$(BIN_DIR) go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.54.2; \ rm -rf $$GOLANGCI_LINT_TMP_DIR; \ } diff --git a/vendor/github.com/goccy/go-json/encode.go b/vendor/github.com/goccy/go-json/encode.go index 4bd899f3..c5173825 100644 --- a/vendor/github.com/goccy/go-json/encode.go +++ b/vendor/github.com/goccy/go-json/encode.go @@ -52,7 +52,7 @@ func (e *Encoder) EncodeContext(ctx context.Context, v interface{}, optFuncs ... rctx.Option.Flag |= encoder.ContextOption rctx.Option.Context = ctx - err := e.encodeWithOption(rctx, v, optFuncs...) + err := e.encodeWithOption(rctx, v, optFuncs...) //nolint: contextcheck encoder.ReleaseRuntimeContext(rctx) return err @@ -120,7 +120,7 @@ func marshalContext(ctx context.Context, v interface{}, optFuncs ...EncodeOption optFunc(rctx.Option) } - buf, err := encode(rctx, v) + buf, err := encode(rctx, v) //nolint: contextcheck if err != nil { encoder.ReleaseRuntimeContext(rctx) return nil, err diff --git a/vendor/github.com/goccy/go-json/internal/decoder/compile.go b/vendor/github.com/goccy/go-json/internal/decoder/compile.go index fab64376..8ad50936 100644 --- a/vendor/github.com/goccy/go-json/internal/decoder/compile.go +++ b/vendor/github.com/goccy/go-json/internal/decoder/compile.go @@ -5,6 +5,7 @@ import ( "fmt" "reflect" "strings" + "sync" "sync/atomic" "unicode" "unsafe" @@ -17,22 +18,27 @@ var ( typeAddr *runtime.TypeAddr cachedDecoderMap unsafe.Pointer // map[uintptr]decoder cachedDecoder []Decoder + initOnce sync.Once ) -func init() { - typeAddr = runtime.AnalyzeTypeAddr() - if typeAddr == nil { - typeAddr = &runtime.TypeAddr{} - } - cachedDecoder = make([]Decoder, typeAddr.AddrRange>>typeAddr.AddrShift+1) +func initDecoder() { + initOnce.Do(func() { + typeAddr = runtime.AnalyzeTypeAddr() + if typeAddr == nil { + typeAddr = &runtime.TypeAddr{} + } + cachedDecoder = make([]Decoder, typeAddr.AddrRange>>typeAddr.AddrShift+1) + }) } func loadDecoderMap() map[uintptr]Decoder { + initDecoder() p := atomic.LoadPointer(&cachedDecoderMap) return *(*map[uintptr]Decoder)(unsafe.Pointer(&p)) } func storeDecoder(typ uintptr, dec Decoder, m map[uintptr]Decoder) { + initDecoder() newDecoderMap := make(map[uintptr]Decoder, len(m)+1) newDecoderMap[typ] = dec diff --git a/vendor/github.com/goccy/go-json/internal/decoder/compile_norace.go b/vendor/github.com/goccy/go-json/internal/decoder/compile_norace.go index eb7e2b13..025ca85b 100644 --- a/vendor/github.com/goccy/go-json/internal/decoder/compile_norace.go +++ b/vendor/github.com/goccy/go-json/internal/decoder/compile_norace.go @@ -10,6 +10,7 @@ import ( ) func CompileToGetDecoder(typ *runtime.Type) (Decoder, error) { + initDecoder() typeptr := uintptr(unsafe.Pointer(typ)) if typeptr > typeAddr.MaxTypeAddr { return compileToGetDecoderSlowPath(typeptr, typ) diff --git a/vendor/github.com/goccy/go-json/internal/decoder/compile_race.go b/vendor/github.com/goccy/go-json/internal/decoder/compile_race.go index 49cdda4a..023b817c 100644 --- a/vendor/github.com/goccy/go-json/internal/decoder/compile_race.go +++ b/vendor/github.com/goccy/go-json/internal/decoder/compile_race.go @@ -13,6 +13,7 @@ import ( var decMu sync.RWMutex func CompileToGetDecoder(typ *runtime.Type) (Decoder, error) { + initDecoder() typeptr := uintptr(unsafe.Pointer(typ)) if typeptr > typeAddr.MaxTypeAddr { return compileToGetDecoderSlowPath(typeptr, typ) diff --git a/vendor/github.com/goccy/go-json/internal/decoder/ptr.go b/vendor/github.com/goccy/go-json/internal/decoder/ptr.go index de12e105..ae229946 100644 --- a/vendor/github.com/goccy/go-json/internal/decoder/ptr.go +++ b/vendor/github.com/goccy/go-json/internal/decoder/ptr.go @@ -85,6 +85,7 @@ func (d *ptrDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.P } c, err := d.dec.Decode(ctx, cursor, depth, newptr) if err != nil { + *(*unsafe.Pointer)(p) = nil return 0, err } cursor = c diff --git a/vendor/github.com/goccy/go-json/internal/decoder/unmarshal_text.go b/vendor/github.com/goccy/go-json/internal/decoder/unmarshal_text.go index 6d37993f..d711d0f8 100644 --- a/vendor/github.com/goccy/go-json/internal/decoder/unmarshal_text.go +++ b/vendor/github.com/goccy/go-json/internal/decoder/unmarshal_text.go @@ -147,7 +147,7 @@ func (d *unmarshalTextDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int return nil, 0, fmt.Errorf("json: unmarshal text decoder does not support decode path") } -func unquoteBytes(s []byte) (t []byte, ok bool) { +func unquoteBytes(s []byte) (t []byte, ok bool) { //nolint: nonamedreturns length := len(s) if length < 2 || s[0] != '"' || s[length-1] != '"' { return diff --git a/vendor/github.com/goccy/go-json/internal/encoder/compact.go b/vendor/github.com/goccy/go-json/internal/encoder/compact.go index 0eb9545d..e287a6c0 100644 --- a/vendor/github.com/goccy/go-json/internal/encoder/compact.go +++ b/vendor/github.com/goccy/go-json/internal/encoder/compact.go @@ -213,8 +213,8 @@ func compactString(dst, src []byte, cursor int64, escape bool) ([]byte, int64, e dst = append(dst, src[start:cursor]...) dst = append(dst, `\u202`...) dst = append(dst, hex[src[cursor+2]&0xF]) - cursor += 2 start = cursor + 3 + cursor += 2 } } switch c { diff --git a/vendor/github.com/goccy/go-json/internal/encoder/compiler.go b/vendor/github.com/goccy/go-json/internal/encoder/compiler.go index 3ae39ba8..b1076368 100644 --- a/vendor/github.com/goccy/go-json/internal/encoder/compiler.go +++ b/vendor/github.com/goccy/go-json/internal/encoder/compiler.go @@ -5,6 +5,7 @@ import ( "encoding" "encoding/json" "reflect" + "sync" "sync/atomic" "unsafe" @@ -24,14 +25,17 @@ var ( cachedOpcodeSets []*OpcodeSet cachedOpcodeMap unsafe.Pointer // map[uintptr]*OpcodeSet typeAddr *runtime.TypeAddr + initEncoderOnce sync.Once ) -func init() { - typeAddr = runtime.AnalyzeTypeAddr() - if typeAddr == nil { - typeAddr = &runtime.TypeAddr{} - } - cachedOpcodeSets = make([]*OpcodeSet, typeAddr.AddrRange>>typeAddr.AddrShift+1) +func initEncoder() { + initEncoderOnce.Do(func() { + typeAddr = runtime.AnalyzeTypeAddr() + if typeAddr == nil { + typeAddr = &runtime.TypeAddr{} + } + cachedOpcodeSets = make([]*OpcodeSet, typeAddr.AddrRange>>typeAddr.AddrShift+1) + }) } func loadOpcodeMap() map[uintptr]*OpcodeSet { @@ -480,7 +484,7 @@ func (c *Compiler) mapCode(typ *runtime.Type) (*MapCode, error) { func (c *Compiler) listElemCode(typ *runtime.Type) (Code, error) { switch { - case c.isPtrMarshalJSONType(typ): + case c.implementsMarshalJSONType(typ) || c.implementsMarshalJSONType(runtime.PtrTo(typ)): return c.marshalJSONCode(typ) case !typ.Implements(marshalTextType) && runtime.PtrTo(typ).Implements(marshalTextType): return c.marshalTextCode(typ) diff --git a/vendor/github.com/goccy/go-json/internal/encoder/compiler_norace.go b/vendor/github.com/goccy/go-json/internal/encoder/compiler_norace.go index 20c93cbf..b6f45a49 100644 --- a/vendor/github.com/goccy/go-json/internal/encoder/compiler_norace.go +++ b/vendor/github.com/goccy/go-json/internal/encoder/compiler_norace.go @@ -4,6 +4,7 @@ package encoder func CompileToGetCodeSet(ctx *RuntimeContext, typeptr uintptr) (*OpcodeSet, error) { + initEncoder() if typeptr > typeAddr.MaxTypeAddr || typeptr < typeAddr.BaseTypeAddr { codeSet, err := compileToGetCodeSetSlowPath(typeptr) if err != nil { diff --git a/vendor/github.com/goccy/go-json/internal/encoder/compiler_race.go b/vendor/github.com/goccy/go-json/internal/encoder/compiler_race.go index 13ba23fd..47b482f7 100644 --- a/vendor/github.com/goccy/go-json/internal/encoder/compiler_race.go +++ b/vendor/github.com/goccy/go-json/internal/encoder/compiler_race.go @@ -10,6 +10,7 @@ import ( var setsMu sync.RWMutex func CompileToGetCodeSet(ctx *RuntimeContext, typeptr uintptr) (*OpcodeSet, error) { + initEncoder() if typeptr > typeAddr.MaxTypeAddr || typeptr < typeAddr.BaseTypeAddr { codeSet, err := compileToGetCodeSetSlowPath(typeptr) if err != nil { diff --git a/vendor/github.com/goccy/go-json/internal/encoder/encoder.go b/vendor/github.com/goccy/go-json/internal/encoder/encoder.go index 14eb6a0d..b436f5b2 100644 --- a/vendor/github.com/goccy/go-json/internal/encoder/encoder.go +++ b/vendor/github.com/goccy/go-json/internal/encoder/encoder.go @@ -406,6 +406,11 @@ func AppendMarshalJSON(ctx *RuntimeContext, code *Opcode, b []byte, v interface{ rv = newV } } + + if rv.Kind() == reflect.Ptr && rv.IsNil() { + return AppendNull(ctx, b), nil + } + v = rv.Interface() var bb []byte if (code.Flags & MarshalerContextFlags) != 0 { diff --git a/vendor/github.com/goccy/go-json/internal/encoder/int.go b/vendor/github.com/goccy/go-json/internal/encoder/int.go index 85f07960..8b5febea 100644 --- a/vendor/github.com/goccy/go-json/internal/encoder/int.go +++ b/vendor/github.com/goccy/go-json/internal/encoder/int.go @@ -1,3 +1,27 @@ +// This files's processing codes are inspired by https://github.com/segmentio/encoding. +// The license notation is as follows. +// +// # MIT License +// +// Copyright (c) 2019 Segment.io, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. package encoder import ( diff --git a/vendor/github.com/goccy/go-json/internal/encoder/string.go b/vendor/github.com/goccy/go-json/internal/encoder/string.go index e4152b27..4abb8416 100644 --- a/vendor/github.com/goccy/go-json/internal/encoder/string.go +++ b/vendor/github.com/goccy/go-json/internal/encoder/string.go @@ -1,3 +1,27 @@ +// This files's string processing codes are inspired by https://github.com/segmentio/encoding. +// The license notation is as follows. +// +// # MIT License +// +// Copyright (c) 2019 Segment.io, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. package encoder import ( diff --git a/vendor/github.com/goccy/go-json/internal/runtime/rtype.go b/vendor/github.com/goccy/go-json/internal/runtime/rtype.go index 4db10deb..37cfe35a 100644 --- a/vendor/github.com/goccy/go-json/internal/runtime/rtype.go +++ b/vendor/github.com/goccy/go-json/internal/runtime/rtype.go @@ -252,7 +252,6 @@ func IfaceIndir(*Type) bool //go:noescape func RType2Type(t *Type) reflect.Type -//go:nolint structcheck type emptyInterface struct { _ *Type ptr unsafe.Pointer diff --git a/vendor/github.com/goccy/go-json/json.go b/vendor/github.com/goccy/go-json/json.go index 413cb20b..fb18065a 100644 --- a/vendor/github.com/goccy/go-json/json.go +++ b/vendor/github.com/goccy/go-json/json.go @@ -89,31 +89,31 @@ type UnmarshalerContext interface { // // Examples of struct field tags and their meanings: // -// // Field appears in JSON as key "myName". -// Field int `json:"myName"` +// // Field appears in JSON as key "myName". +// Field int `json:"myName"` // -// // Field appears in JSON as key "myName" and -// // the field is omitted from the object if its value is empty, -// // as defined above. -// Field int `json:"myName,omitempty"` +// // Field appears in JSON as key "myName" and +// // the field is omitted from the object if its value is empty, +// // as defined above. +// Field int `json:"myName,omitempty"` // -// // Field appears in JSON as key "Field" (the default), but -// // the field is skipped if empty. -// // Note the leading comma. -// Field int `json:",omitempty"` +// // Field appears in JSON as key "Field" (the default), but +// // the field is skipped if empty. +// // Note the leading comma. +// Field int `json:",omitempty"` // -// // Field is ignored by this package. -// Field int `json:"-"` +// // Field is ignored by this package. +// Field int `json:"-"` // -// // Field appears in JSON as key "-". -// Field int `json:"-,"` +// // Field appears in JSON as key "-". +// Field int `json:"-,"` // // The "string" option signals that a field is stored as JSON inside a // JSON-encoded string. It applies only to fields of string, floating point, // integer, or boolean types. This extra level of encoding is sometimes used // when communicating with JavaScript programs: // -// Int64String int64 `json:",string"` +// Int64String int64 `json:",string"` // // The key name will be used if it's a non-empty string consisting of // only Unicode letters, digits, and ASCII punctuation except quotation @@ -166,7 +166,6 @@ type UnmarshalerContext interface { // JSON cannot represent cyclic data structures and Marshal does not // handle them. Passing cyclic structures to Marshal will result in // an infinite recursion. -// func Marshal(v interface{}) ([]byte, error) { return MarshalWithOption(v) } @@ -264,14 +263,13 @@ func MarshalIndentWithOption(v interface{}, prefix, indent string, optFuncs ...E // // The JSON null value unmarshals into an interface, map, pointer, or slice // by setting that Go value to nil. Because null is often used in JSON to mean -// ``not present,'' unmarshaling a JSON null into any other Go type has no effect +// “not present,” unmarshaling a JSON null into any other Go type has no effect // on the value and produces no error. // // When unmarshaling quoted strings, invalid UTF-8 or // invalid UTF-16 surrogate pairs are not treated as an error. // Instead, they are replaced by the Unicode replacement // character U+FFFD. -// func Unmarshal(data []byte, v interface{}) error { return unmarshal(data, v) } @@ -299,7 +297,6 @@ func UnmarshalNoEscape(data []byte, v interface{}, optFuncs ...DecodeOptionFunc) // Number, for JSON numbers // string, for JSON string literals // nil, for JSON null -// type Token = json.Token // A Number represents a JSON number literal. diff --git a/vendor/github.com/form3tech-oss/jwt-go/.gitignore b/vendor/github.com/golang-jwt/jwt/v5/.gitignore similarity index 95% rename from vendor/github.com/form3tech-oss/jwt-go/.gitignore rename to vendor/github.com/golang-jwt/jwt/v5/.gitignore index c0e81a8d..09573e01 100644 --- a/vendor/github.com/form3tech-oss/jwt-go/.gitignore +++ b/vendor/github.com/golang-jwt/jwt/v5/.gitignore @@ -2,4 +2,3 @@ bin .idea/ - diff --git a/vendor/github.com/form3tech-oss/jwt-go/LICENSE b/vendor/github.com/golang-jwt/jwt/v5/LICENSE similarity index 96% rename from vendor/github.com/form3tech-oss/jwt-go/LICENSE rename to vendor/github.com/golang-jwt/jwt/v5/LICENSE index df83a9c2..35dbc252 100644 --- a/vendor/github.com/form3tech-oss/jwt-go/LICENSE +++ b/vendor/github.com/golang-jwt/jwt/v5/LICENSE @@ -1,4 +1,5 @@ Copyright (c) 2012 Dave Grijalva +Copyright (c) 2021 golang-jwt maintainers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/vendor/github.com/golang-jwt/jwt/v5/MIGRATION_GUIDE.md b/vendor/github.com/golang-jwt/jwt/v5/MIGRATION_GUIDE.md new file mode 100644 index 00000000..ff9c57e1 --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v5/MIGRATION_GUIDE.md @@ -0,0 +1,195 @@ +# Migration Guide (v5.0.0) + +Version `v5` contains a major rework of core functionalities in the `jwt-go` +library. This includes support for several validation options as well as a +re-design of the `Claims` interface. Lastly, we reworked how errors work under +the hood, which should provide a better overall developer experience. + +Starting from [v5.0.0](https://github.com/golang-jwt/jwt/releases/tag/v5.0.0), +the import path will be: + + "github.com/golang-jwt/jwt/v5" + +For most users, changing the import path *should* suffice. However, since we +intentionally changed and cleaned some of the public API, existing programs +might need to be updated. The following sections describe significant changes +and corresponding updates for existing programs. + +## Parsing and Validation Options + +Under the hood, a new `Validator` struct takes care of validating the claims. A +long awaited feature has been the option to fine-tune the validation of tokens. +This is now possible with several `ParserOption` functions that can be appended +to most `Parse` functions, such as `ParseWithClaims`. The most important options +and changes are: + * Added `WithLeeway` to support specifying the leeway that is allowed when + validating time-based claims, such as `exp` or `nbf`. + * Changed default behavior to not check the `iat` claim. Usage of this claim + is OPTIONAL according to the JWT RFC. The claim itself is also purely + informational according to the RFC, so a strict validation failure is not + recommended. If you want to check for sensible values in these claims, + please use the `WithIssuedAt` parser option. + * Added `WithAudience`, `WithSubject` and `WithIssuer` to support checking for + expected `aud`, `sub` and `iss`. + * Added `WithStrictDecoding` and `WithPaddingAllowed` options to allow + previously global settings to enable base64 strict encoding and the parsing + of base64 strings with padding. The latter is strictly speaking against the + standard, but unfortunately some of the major identity providers issue some + of these incorrect tokens. Both options are disabled by default. + +## Changes to the `Claims` interface + +### Complete Restructuring + +Previously, the claims interface was satisfied with an implementation of a +`Valid() error` function. This had several issues: + * The different claim types (struct claims, map claims, etc.) then contained + similar (but not 100 % identical) code of how this validation was done. This + lead to a lot of (almost) duplicate code and was hard to maintain + * It was not really semantically close to what a "claim" (or a set of claims) + really is; which is a list of defined key/value pairs with a certain + semantic meaning. + +Since all the validation functionality is now extracted into the validator, all +`VerifyXXX` and `Valid` functions have been removed from the `Claims` interface. +Instead, the interface now represents a list of getters to retrieve values with +a specific meaning. This allows us to completely decouple the validation logic +with the underlying storage representation of the claim, which could be a +struct, a map or even something stored in a database. + +```go +type Claims interface { + GetExpirationTime() (*NumericDate, error) + GetIssuedAt() (*NumericDate, error) + GetNotBefore() (*NumericDate, error) + GetIssuer() (string, error) + GetSubject() (string, error) + GetAudience() (ClaimStrings, error) +} +``` + +Users that previously directly called the `Valid` function on their claims, +e.g., to perform validation independently of parsing/verifying a token, can now +use the `jwt.NewValidator` function to create a `Validator` independently of the +`Parser`. + +```go +var v = jwt.NewValidator(jwt.WithLeeway(5*time.Second)) +v.Validate(myClaims) +``` + +### Supported Claim Types and Removal of `StandardClaims` + +The two standard claim types supported by this library, `MapClaims` and +`RegisteredClaims` both implement the necessary functions of this interface. The +old `StandardClaims` struct, which has already been deprecated in `v4` is now +removed. + +Users using custom claims, in most cases, will not experience any changes in the +behavior as long as they embedded `RegisteredClaims`. If they created a new +claim type from scratch, they now need to implemented the proper getter +functions. + +### Migrating Application Specific Logic of the old `Valid` + +Previously, users could override the `Valid` method in a custom claim, for +example to extend the validation with application-specific claims. However, this +was always very dangerous, since once could easily disable the standard +validation and signature checking. + +In order to avoid that, while still supporting the use-case, a new +`ClaimsValidator` interface has been introduced. This interface consists of the +`Validate() error` function. If the validator sees, that a `Claims` struct +implements this interface, the errors returned to the `Validate` function will +be *appended* to the regular standard validation. It is not possible to disable +the standard validation anymore (even only by accident). + +Usage examples can be found in [example_test.go](./example_test.go), to build +claims structs like the following. + +```go +// MyCustomClaims includes all registered claims, plus Foo. +type MyCustomClaims struct { + Foo string `json:"foo"` + jwt.RegisteredClaims +} + +// Validate can be used to execute additional application-specific claims +// validation. +func (m MyCustomClaims) Validate() error { + if m.Foo != "bar" { + return errors.New("must be foobar") + } + + return nil +} +``` + +## Changes to the `Token` and `Parser` struct + +The previously global functions `DecodeSegment` and `EncodeSegment` were moved +to the `Parser` and `Token` struct respectively. This will allow us in the +future to configure the behavior of these two based on options supplied on the +parser or the token (creation). This also removes two previously global +variables and moves them to parser options `WithStrictDecoding` and +`WithPaddingAllowed`. + +In order to do that, we had to adjust the way signing methods work. Previously +they were given a base64 encoded signature in `Verify` and were expected to +return a base64 encoded version of the signature in `Sign`, both as a `string`. +However, this made it necessary to have `DecodeSegment` and `EncodeSegment` +global and was a less than perfect design because we were repeating +encoding/decoding steps for all signing methods. Now, `Sign` and `Verify` +operate on a decoded signature as a `[]byte`, which feels more natural for a +cryptographic operation anyway. Lastly, `Parse` and `SignedString` take care of +the final encoding/decoding part. + +In addition to that, we also changed the `Signature` field on `Token` from a +`string` to `[]byte` and this is also now populated with the decoded form. This +is also more consistent, because the other parts of the JWT, mainly `Header` and +`Claims` were already stored in decoded form in `Token`. Only the signature was +stored in base64 encoded form, which was redundant with the information in the +`Raw` field, which contains the complete token as base64. + +```go +type Token struct { + Raw string // Raw contains the raw token + Method SigningMethod // Method is the signing method used or to be used + Header map[string]interface{} // Header is the first segment of the token in decoded form + Claims Claims // Claims is the second segment of the token in decoded form + Signature []byte // Signature is the third segment of the token in decoded form + Valid bool // Valid specifies if the token is valid +} +``` + +Most (if not all) of these changes should not impact the normal usage of this +library. Only users directly accessing the `Signature` field as well as +developers of custom signing methods should be affected. + +# Migration Guide (v4.0.0) + +Starting from [v4.0.0](https://github.com/golang-jwt/jwt/releases/tag/v4.0.0), +the import path will be: + + "github.com/golang-jwt/jwt/v4" + +The `/v4` version will be backwards compatible with existing `v3.x.y` tags in +this repo, as well as `github.com/dgrijalva/jwt-go`. For most users this should +be a drop-in replacement, if you're having troubles migrating, please open an +issue. + +You can replace all occurrences of `github.com/dgrijalva/jwt-go` or +`github.com/golang-jwt/jwt` with `github.com/golang-jwt/jwt/v4`, either manually +or by using tools such as `sed` or `gofmt`. + +And then you'd typically run: + +``` +go get github.com/golang-jwt/jwt/v4 +go mod tidy +``` + +# Older releases (before v3.2.0) + +The original migration guide for older releases can be found at +https://github.com/dgrijalva/jwt-go/blob/master/MIGRATION_GUIDE.md. diff --git a/vendor/github.com/golang-jwt/jwt/v5/README.md b/vendor/github.com/golang-jwt/jwt/v5/README.md new file mode 100644 index 00000000..0bb636f2 --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v5/README.md @@ -0,0 +1,167 @@ +# jwt-go + +[![build](https://github.com/golang-jwt/jwt/actions/workflows/build.yml/badge.svg)](https://github.com/golang-jwt/jwt/actions/workflows/build.yml) +[![Go +Reference](https://pkg.go.dev/badge/github.com/golang-jwt/jwt/v5.svg)](https://pkg.go.dev/github.com/golang-jwt/jwt/v5) +[![Coverage Status](https://coveralls.io/repos/github/golang-jwt/jwt/badge.svg?branch=main)](https://coveralls.io/github/golang-jwt/jwt?branch=main) + +A [go](http://www.golang.org) (or 'golang' for search engine friendliness) +implementation of [JSON Web +Tokens](https://datatracker.ietf.org/doc/html/rfc7519). + +Starting with [v4.0.0](https://github.com/golang-jwt/jwt/releases/tag/v4.0.0) +this project adds Go module support, but maintains backward compatibility with +older `v3.x.y` tags and upstream `github.com/dgrijalva/jwt-go`. See the +[`MIGRATION_GUIDE.md`](./MIGRATION_GUIDE.md) for more information. Version +v5.0.0 introduces major improvements to the validation of tokens, but is not +entirely backward compatible. + +> After the original author of the library suggested migrating the maintenance +> of `jwt-go`, a dedicated team of open source maintainers decided to clone the +> existing library into this repository. See +> [dgrijalva/jwt-go#462](https://github.com/dgrijalva/jwt-go/issues/462) for a +> detailed discussion on this topic. + + +**SECURITY NOTICE:** Some older versions of Go have a security issue in the +crypto/elliptic. The recommendation is to upgrade to at least 1.15 See issue +[dgrijalva/jwt-go#216](https://github.com/dgrijalva/jwt-go/issues/216) for more +detail. + +**SECURITY NOTICE:** It's important that you [validate the `alg` presented is +what you +expect](https://auth0.com/blog/critical-vulnerabilities-in-json-web-token-libraries/). +This library attempts to make it easy to do the right thing by requiring key +types to match the expected alg, but you should take the extra step to verify it in +your usage. See the examples provided. + +### Supported Go versions + +Our support of Go versions is aligned with Go's [version release +policy](https://golang.org/doc/devel/release#policy). So we will support a major +version of Go until there are two newer major releases. We no longer support +building jwt-go with unsupported Go versions, as these contain security +vulnerabilities that will not be fixed. + +## What the heck is a JWT? + +JWT.io has [a great introduction](https://jwt.io/introduction) to JSON Web +Tokens. + +In short, it's a signed JSON object that does something useful (for example, +authentication). It's commonly used for `Bearer` tokens in Oauth 2. A token is +made of three parts, separated by `.`'s. The first two parts are JSON objects, +that have been [base64url](https://datatracker.ietf.org/doc/html/rfc4648) +encoded. The last part is the signature, encoded the same way. + +The first part is called the header. It contains the necessary information for +verifying the last part, the signature. For example, which encryption method +was used for signing and what key was used. + +The part in the middle is the interesting bit. It's called the Claims and +contains the actual stuff you care about. Refer to [RFC +7519](https://datatracker.ietf.org/doc/html/rfc7519) for information about +reserved keys and the proper way to add your own. + +## What's in the box? + +This library supports the parsing and verification as well as the generation and +signing of JWTs. Current supported signing algorithms are HMAC SHA, RSA, +RSA-PSS, and ECDSA, though hooks are present for adding your own. + +## Installation Guidelines + +1. To install the jwt package, you first need to have + [Go](https://go.dev/doc/install) installed, then you can use the command + below to add `jwt-go` as a dependency in your Go program. + +```sh +go get -u github.com/golang-jwt/jwt/v5 +``` + +2. Import it in your code: + +```go +import "github.com/golang-jwt/jwt/v5" +``` + +## Usage + +A detailed usage guide, including how to sign and verify tokens can be found on +our [documentation website](https://golang-jwt.github.io/jwt/usage/create/). + +## Examples + +See [the project documentation](https://pkg.go.dev/github.com/golang-jwt/jwt/v5) +for examples of usage: + +* [Simple example of parsing and validating a + token](https://pkg.go.dev/github.com/golang-jwt/jwt/v5#example-Parse-Hmac) +* [Simple example of building and signing a + token](https://pkg.go.dev/github.com/golang-jwt/jwt/v5#example-New-Hmac) +* [Directory of + Examples](https://pkg.go.dev/github.com/golang-jwt/jwt/v5#pkg-examples) + +## Compliance + +This library was last reviewed to comply with [RFC +7519](https://datatracker.ietf.org/doc/html/rfc7519) dated May 2015 with a few +notable differences: + +* In order to protect against accidental use of [Unsecured + JWTs](https://datatracker.ietf.org/doc/html/rfc7519#section-6), tokens using + `alg=none` will only be accepted if the constant + `jwt.UnsafeAllowNoneSignatureType` is provided as the key. + +## Project Status & Versioning + +This library is considered production ready. Feedback and feature requests are +appreciated. The API should be considered stable. There should be very few +backward-incompatible changes outside of major version updates (and only with +good reason). + +This project uses [Semantic Versioning 2.0.0](http://semver.org). Accepted pull +requests will land on `main`. Periodically, versions will be tagged from +`main`. You can find all the releases on [the project releases +page](https://github.com/golang-jwt/jwt/releases). + +**BREAKING CHANGES:** A full list of breaking changes is available in +`VERSION_HISTORY.md`. See [`MIGRATION_GUIDE.md`](./MIGRATION_GUIDE.md) for more information on updating +your code. + +## Extensions + +This library publishes all the necessary components for adding your own signing +methods or key functions. Simply implement the `SigningMethod` interface and +register a factory method using `RegisterSigningMethod` or provide a +`jwt.Keyfunc`. + +A common use case would be integrating with different 3rd party signature +providers, like key management services from various cloud providers or Hardware +Security Modules (HSMs) or to implement additional standards. + +| Extension | Purpose | Repo | +| --------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------ | +| GCP | Integrates with multiple Google Cloud Platform signing tools (AppEngine, IAM API, Cloud KMS) | https://github.com/someone1/gcp-jwt-go | +| AWS | Integrates with AWS Key Management Service, KMS | https://github.com/matelang/jwt-go-aws-kms | +| JWKS | Provides support for JWKS ([RFC 7517](https://datatracker.ietf.org/doc/html/rfc7517)) as a `jwt.Keyfunc` | https://github.com/MicahParks/keyfunc | + +*Disclaimer*: Unless otherwise specified, these integrations are maintained by +third parties and should not be considered as a primary offer by any of the +mentioned cloud providers + +## More + +Go package documentation can be found [on +pkg.go.dev](https://pkg.go.dev/github.com/golang-jwt/jwt/v5). Additional +documentation can be found on [our project +page](https://golang-jwt.github.io/jwt/). + +The command line utility included in this project (cmd/jwt) provides a +straightforward example of token creation and parsing as well as a useful tool +for debugging your own integration. You'll also find several implementation +examples in the documentation. + +[golang-jwt](https://github.com/orgs/golang-jwt) incorporates a modified version +of the JWT logo, which is distributed under the terms of the [MIT +License](https://github.com/jsonwebtoken/jsonwebtoken.github.io/blob/master/LICENSE.txt). diff --git a/vendor/github.com/golang-jwt/jwt/v5/SECURITY.md b/vendor/github.com/golang-jwt/jwt/v5/SECURITY.md new file mode 100644 index 00000000..2740597f --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v5/SECURITY.md @@ -0,0 +1,19 @@ +# Security Policy + +## Supported Versions + +As of November 2024 (and until this document is updated), the latest version `v5` is supported. In critical cases, we might supply back-ported patches for `v4`. + +## Reporting a Vulnerability + +If you think you found a vulnerability, and even if you are not sure, please report it a [GitHub Security Advisory](https://github.com/golang-jwt/jwt/security/advisories/new). Please try be explicit, describe steps to reproduce the security issue with code example(s). + +You will receive a response within a timely manner. If the issue is confirmed, we will do our best to release a patch as soon as possible given the complexity of the problem. + +## Public Discussions + +Please avoid publicly discussing a potential security vulnerability. + +Let's take this offline and find a solution first, this limits the potential impact as much as possible. + +We appreciate your help! diff --git a/vendor/github.com/form3tech-oss/jwt-go/VERSION_HISTORY.md b/vendor/github.com/golang-jwt/jwt/v5/VERSION_HISTORY.md similarity index 81% rename from vendor/github.com/form3tech-oss/jwt-go/VERSION_HISTORY.md rename to vendor/github.com/golang-jwt/jwt/v5/VERSION_HISTORY.md index 63702983..b5039e49 100644 --- a/vendor/github.com/form3tech-oss/jwt-go/VERSION_HISTORY.md +++ b/vendor/github.com/golang-jwt/jwt/v5/VERSION_HISTORY.md @@ -1,4 +1,23 @@ -## `jwt-go` Version History +# `jwt-go` Version History + +The following version history is kept for historic purposes. To retrieve the current changes of each version, please refer to the change-log of the specific release versions on https://github.com/golang-jwt/jwt/releases. + +## 4.0.0 + +* Introduces support for Go modules. The `v4` version will be backwards compatible with `v3.x.y`. + +## 3.2.2 + +* Starting from this release, we are adopting the policy to support the most 2 recent versions of Go currently available. By the time of this release, this is Go 1.15 and 1.16 ([#28](https://github.com/golang-jwt/jwt/pull/28)). +* Fixed a potential issue that could occur when the verification of `exp`, `iat` or `nbf` was not required and contained invalid contents, i.e. non-numeric/date. Thanks for @thaJeztah for making us aware of that and @giorgos-f3 for originally reporting it to the formtech fork ([#40](https://github.com/golang-jwt/jwt/pull/40)). +* Added support for EdDSA / ED25519 ([#36](https://github.com/golang-jwt/jwt/pull/36)). +* Optimized allocations ([#33](https://github.com/golang-jwt/jwt/pull/33)). + +## 3.2.1 + +* **Import Path Change**: See MIGRATION_GUIDE.md for tips on updating your code + * Changed the import path from `github.com/dgrijalva/jwt-go` to `github.com/golang-jwt/jwt` +* Fixed type confusing issue between `string` and `[]string` in `VerifyAudience` ([#12](https://github.com/golang-jwt/jwt/pull/12)). This fixes CVE-2020-26160 #### 3.2.0 @@ -100,19 +119,19 @@ It is likely the only integration change required here will be to change `func(t * Refactored the RSA implementation to be easier to read * Exposed helper methods `ParseRSAPrivateKeyFromPEM` and `ParseRSAPublicKeyFromPEM` -#### 1.0.2 +## 1.0.2 * Fixed bug in parsing public keys from certificates * Added more tests around the parsing of keys for RS256 * Code refactoring in RS256 implementation. No functional changes -#### 1.0.1 +## 1.0.1 * Fixed panic if RS256 signing method was passed an invalid key -#### 1.0.0 +## 1.0.0 * First versioned release * API stabilized * Supports creating, signing, parsing, and validating JWT tokens -* Supports RS256 and HS256 signing methods \ No newline at end of file +* Supports RS256 and HS256 signing methods diff --git a/vendor/github.com/golang-jwt/jwt/v5/claims.go b/vendor/github.com/golang-jwt/jwt/v5/claims.go new file mode 100644 index 00000000..d50ff3da --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v5/claims.go @@ -0,0 +1,16 @@ +package jwt + +// Claims represent any form of a JWT Claims Set according to +// https://datatracker.ietf.org/doc/html/rfc7519#section-4. In order to have a +// common basis for validation, it is required that an implementation is able to +// supply at least the claim names provided in +// https://datatracker.ietf.org/doc/html/rfc7519#section-4.1 namely `exp`, +// `iat`, `nbf`, `iss`, `sub` and `aud`. +type Claims interface { + GetExpirationTime() (*NumericDate, error) + GetIssuedAt() (*NumericDate, error) + GetNotBefore() (*NumericDate, error) + GetIssuer() (string, error) + GetSubject() (string, error) + GetAudience() (ClaimStrings, error) +} diff --git a/vendor/github.com/form3tech-oss/jwt-go/doc.go b/vendor/github.com/golang-jwt/jwt/v5/doc.go similarity index 100% rename from vendor/github.com/form3tech-oss/jwt-go/doc.go rename to vendor/github.com/golang-jwt/jwt/v5/doc.go diff --git a/vendor/github.com/form3tech-oss/jwt-go/ecdsa.go b/vendor/github.com/golang-jwt/jwt/v5/ecdsa.go similarity index 68% rename from vendor/github.com/form3tech-oss/jwt-go/ecdsa.go rename to vendor/github.com/golang-jwt/jwt/v5/ecdsa.go index f9773812..c929e4a0 100644 --- a/vendor/github.com/form3tech-oss/jwt-go/ecdsa.go +++ b/vendor/github.com/golang-jwt/jwt/v5/ecdsa.go @@ -13,7 +13,7 @@ var ( ErrECDSAVerification = errors.New("crypto/ecdsa: verification error") ) -// Implements the ECDSA family of signing methods signing methods +// SigningMethodECDSA implements the ECDSA family of signing methods. // Expects *ecdsa.PrivateKey for signing and *ecdsa.PublicKey for verification type SigningMethodECDSA struct { Name string @@ -53,24 +53,16 @@ func (m *SigningMethodECDSA) Alg() string { return m.Name } -// Implements the Verify method from SigningMethod +// Verify implements token verification for the SigningMethod. // For this verify method, key must be an ecdsa.PublicKey struct -func (m *SigningMethodECDSA) Verify(signingString, signature string, key interface{}) error { - var err error - - // Decode the signature - var sig []byte - if sig, err = DecodeSegment(signature); err != nil { - return err - } - +func (m *SigningMethodECDSA) Verify(signingString string, sig []byte, key interface{}) error { // Get the key var ecdsaKey *ecdsa.PublicKey switch k := key.(type) { case *ecdsa.PublicKey: ecdsaKey = k default: - return ErrInvalidKeyType + return newError("ECDSA verify expects *ecdsa.PublicKey", ErrInvalidKeyType) } if len(sig) != 2*m.KeySize { @@ -88,28 +80,28 @@ func (m *SigningMethodECDSA) Verify(signingString, signature string, key interfa hasher.Write([]byte(signingString)) // Verify the signature - if verifystatus := ecdsa.Verify(ecdsaKey, hasher.Sum(nil), r, s); verifystatus == true { + if verifystatus := ecdsa.Verify(ecdsaKey, hasher.Sum(nil), r, s); verifystatus { return nil - } else { - return ErrECDSAVerification } + + return ErrECDSAVerification } -// Implements the Sign method from SigningMethod +// Sign implements token signing for the SigningMethod. // For this signing method, key must be an ecdsa.PrivateKey struct -func (m *SigningMethodECDSA) Sign(signingString string, key interface{}) (string, error) { +func (m *SigningMethodECDSA) Sign(signingString string, key interface{}) ([]byte, error) { // Get the key var ecdsaKey *ecdsa.PrivateKey switch k := key.(type) { case *ecdsa.PrivateKey: ecdsaKey = k default: - return "", ErrInvalidKeyType + return nil, newError("ECDSA sign expects *ecdsa.PrivateKey", ErrInvalidKeyType) } // Create the hasher if !m.Hash.Available() { - return "", ErrHashUnavailable + return nil, ErrHashUnavailable } hasher := m.Hash.New() @@ -120,7 +112,7 @@ func (m *SigningMethodECDSA) Sign(signingString string, key interface{}) (string curveBits := ecdsaKey.Curve.Params().BitSize if m.CurveBits != curveBits { - return "", ErrInvalidKey + return nil, ErrInvalidKey } keyBytes := curveBits / 8 @@ -128,21 +120,15 @@ func (m *SigningMethodECDSA) Sign(signingString string, key interface{}) (string keyBytes += 1 } - // We serialize the outpus (r and s) into big-endian byte arrays and pad - // them with zeros on the left to make sure the sizes work out. Both arrays - // must be keyBytes long, and the output must be 2*keyBytes long. - rBytes := r.Bytes() - rBytesPadded := make([]byte, keyBytes) - copy(rBytesPadded[keyBytes-len(rBytes):], rBytes) - - sBytes := s.Bytes() - sBytesPadded := make([]byte, keyBytes) - copy(sBytesPadded[keyBytes-len(sBytes):], sBytes) - - out := append(rBytesPadded, sBytesPadded...) + // We serialize the outputs (r and s) into big-endian byte arrays + // padded with zeros on the left to make sure the sizes work out. + // Output must be 2*keyBytes long. + out := make([]byte, 2*keyBytes) + r.FillBytes(out[0:keyBytes]) // r is assigned to the first half of output. + s.FillBytes(out[keyBytes:]) // s is assigned to the second half of output. - return EncodeSegment(out), nil + return out, nil } else { - return "", err + return nil, err } } diff --git a/vendor/github.com/form3tech-oss/jwt-go/ecdsa_utils.go b/vendor/github.com/golang-jwt/jwt/v5/ecdsa_utils.go similarity index 81% rename from vendor/github.com/form3tech-oss/jwt-go/ecdsa_utils.go rename to vendor/github.com/golang-jwt/jwt/v5/ecdsa_utils.go index db9f4be7..5700636d 100644 --- a/vendor/github.com/form3tech-oss/jwt-go/ecdsa_utils.go +++ b/vendor/github.com/golang-jwt/jwt/v5/ecdsa_utils.go @@ -8,11 +8,11 @@ import ( ) var ( - ErrNotECPublicKey = errors.New("Key is not a valid ECDSA public key") - ErrNotECPrivateKey = errors.New("Key is not a valid ECDSA private key") + ErrNotECPublicKey = errors.New("key is not a valid ECDSA public key") + ErrNotECPrivateKey = errors.New("key is not a valid ECDSA private key") ) -// Parse PEM encoded Elliptic Curve Private Key Structure +// ParseECPrivateKeyFromPEM parses a PEM encoded Elliptic Curve Private Key Structure func ParseECPrivateKeyFromPEM(key []byte) (*ecdsa.PrivateKey, error) { var err error @@ -39,7 +39,7 @@ func ParseECPrivateKeyFromPEM(key []byte) (*ecdsa.PrivateKey, error) { return pkey, nil } -// Parse PEM encoded PKCS1 or PKCS8 public key +// ParseECPublicKeyFromPEM parses a PEM encoded PKCS1 or PKCS8 public key func ParseECPublicKeyFromPEM(key []byte) (*ecdsa.PublicKey, error) { var err error diff --git a/vendor/github.com/golang-jwt/jwt/v5/ed25519.go b/vendor/github.com/golang-jwt/jwt/v5/ed25519.go new file mode 100644 index 00000000..c2138119 --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v5/ed25519.go @@ -0,0 +1,79 @@ +package jwt + +import ( + "crypto" + "crypto/ed25519" + "crypto/rand" + "errors" +) + +var ( + ErrEd25519Verification = errors.New("ed25519: verification error") +) + +// SigningMethodEd25519 implements the EdDSA family. +// Expects ed25519.PrivateKey for signing and ed25519.PublicKey for verification +type SigningMethodEd25519 struct{} + +// Specific instance for EdDSA +var ( + SigningMethodEdDSA *SigningMethodEd25519 +) + +func init() { + SigningMethodEdDSA = &SigningMethodEd25519{} + RegisterSigningMethod(SigningMethodEdDSA.Alg(), func() SigningMethod { + return SigningMethodEdDSA + }) +} + +func (m *SigningMethodEd25519) Alg() string { + return "EdDSA" +} + +// Verify implements token verification for the SigningMethod. +// For this verify method, key must be an ed25519.PublicKey +func (m *SigningMethodEd25519) Verify(signingString string, sig []byte, key interface{}) error { + var ed25519Key ed25519.PublicKey + var ok bool + + if ed25519Key, ok = key.(ed25519.PublicKey); !ok { + return newError("Ed25519 verify expects ed25519.PublicKey", ErrInvalidKeyType) + } + + if len(ed25519Key) != ed25519.PublicKeySize { + return ErrInvalidKey + } + + // Verify the signature + if !ed25519.Verify(ed25519Key, []byte(signingString), sig) { + return ErrEd25519Verification + } + + return nil +} + +// Sign implements token signing for the SigningMethod. +// For this signing method, key must be an ed25519.PrivateKey +func (m *SigningMethodEd25519) Sign(signingString string, key interface{}) ([]byte, error) { + var ed25519Key crypto.Signer + var ok bool + + if ed25519Key, ok = key.(crypto.Signer); !ok { + return nil, newError("Ed25519 sign expects crypto.Signer", ErrInvalidKeyType) + } + + if _, ok := ed25519Key.Public().(ed25519.PublicKey); !ok { + return nil, ErrInvalidKey + } + + // Sign the string and return the result. ed25519 performs a two-pass hash + // as part of its algorithm. Therefore, we need to pass a non-prehashed + // message into the Sign function, as indicated by crypto.Hash(0) + sig, err := ed25519Key.Sign(rand.Reader, []byte(signingString), crypto.Hash(0)) + if err != nil { + return nil, err + } + + return sig, nil +} diff --git a/vendor/github.com/golang-jwt/jwt/v5/ed25519_utils.go b/vendor/github.com/golang-jwt/jwt/v5/ed25519_utils.go new file mode 100644 index 00000000..cdb5e68e --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v5/ed25519_utils.go @@ -0,0 +1,64 @@ +package jwt + +import ( + "crypto" + "crypto/ed25519" + "crypto/x509" + "encoding/pem" + "errors" +) + +var ( + ErrNotEdPrivateKey = errors.New("key is not a valid Ed25519 private key") + ErrNotEdPublicKey = errors.New("key is not a valid Ed25519 public key") +) + +// ParseEdPrivateKeyFromPEM parses a PEM-encoded Edwards curve private key +func ParseEdPrivateKeyFromPEM(key []byte) (crypto.PrivateKey, error) { + var err error + + // Parse PEM block + var block *pem.Block + if block, _ = pem.Decode(key); block == nil { + return nil, ErrKeyMustBePEMEncoded + } + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParsePKCS8PrivateKey(block.Bytes); err != nil { + return nil, err + } + + var pkey ed25519.PrivateKey + var ok bool + if pkey, ok = parsedKey.(ed25519.PrivateKey); !ok { + return nil, ErrNotEdPrivateKey + } + + return pkey, nil +} + +// ParseEdPublicKeyFromPEM parses a PEM-encoded Edwards curve public key +func ParseEdPublicKeyFromPEM(key []byte) (crypto.PublicKey, error) { + var err error + + // Parse PEM block + var block *pem.Block + if block, _ = pem.Decode(key); block == nil { + return nil, ErrKeyMustBePEMEncoded + } + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParsePKIXPublicKey(block.Bytes); err != nil { + return nil, err + } + + var pkey ed25519.PublicKey + var ok bool + if pkey, ok = parsedKey.(ed25519.PublicKey); !ok { + return nil, ErrNotEdPublicKey + } + + return pkey, nil +} diff --git a/vendor/github.com/golang-jwt/jwt/v5/errors.go b/vendor/github.com/golang-jwt/jwt/v5/errors.go new file mode 100644 index 00000000..23bb616d --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v5/errors.go @@ -0,0 +1,49 @@ +package jwt + +import ( + "errors" + "strings" +) + +var ( + ErrInvalidKey = errors.New("key is invalid") + ErrInvalidKeyType = errors.New("key is of invalid type") + ErrHashUnavailable = errors.New("the requested hash function is unavailable") + ErrTokenMalformed = errors.New("token is malformed") + ErrTokenUnverifiable = errors.New("token is unverifiable") + ErrTokenSignatureInvalid = errors.New("token signature is invalid") + ErrTokenRequiredClaimMissing = errors.New("token is missing required claim") + ErrTokenInvalidAudience = errors.New("token has invalid audience") + ErrTokenExpired = errors.New("token is expired") + ErrTokenUsedBeforeIssued = errors.New("token used before issued") + ErrTokenInvalidIssuer = errors.New("token has invalid issuer") + ErrTokenInvalidSubject = errors.New("token has invalid subject") + ErrTokenNotValidYet = errors.New("token is not valid yet") + ErrTokenInvalidId = errors.New("token has invalid id") + ErrTokenInvalidClaims = errors.New("token has invalid claims") + ErrInvalidType = errors.New("invalid type for claim") +) + +// joinedError is an error type that works similar to what [errors.Join] +// produces, with the exception that it has a nice error string; mainly its +// error messages are concatenated using a comma, rather than a newline. +type joinedError struct { + errs []error +} + +func (je joinedError) Error() string { + msg := []string{} + for _, err := range je.errs { + msg = append(msg, err.Error()) + } + + return strings.Join(msg, ", ") +} + +// joinErrors joins together multiple errors. Useful for scenarios where +// multiple errors next to each other occur, e.g., in claims validation. +func joinErrors(errs ...error) error { + return &joinedError{ + errs: errs, + } +} diff --git a/vendor/github.com/golang-jwt/jwt/v5/errors_go1_20.go b/vendor/github.com/golang-jwt/jwt/v5/errors_go1_20.go new file mode 100644 index 00000000..a893d355 --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v5/errors_go1_20.go @@ -0,0 +1,47 @@ +//go:build go1.20 +// +build go1.20 + +package jwt + +import ( + "fmt" +) + +// Unwrap implements the multiple error unwrapping for this error type, which is +// possible in Go 1.20. +func (je joinedError) Unwrap() []error { + return je.errs +} + +// newError creates a new error message with a detailed error message. The +// message will be prefixed with the contents of the supplied error type. +// Additionally, more errors, that provide more context can be supplied which +// will be appended to the message. This makes use of Go 1.20's possibility to +// include more than one %w formatting directive in [fmt.Errorf]. +// +// For example, +// +// newError("no keyfunc was provided", ErrTokenUnverifiable) +// +// will produce the error string +// +// "token is unverifiable: no keyfunc was provided" +func newError(message string, err error, more ...error) error { + var format string + var args []any + if message != "" { + format = "%w: %s" + args = []any{err, message} + } else { + format = "%w" + args = []any{err} + } + + for _, e := range more { + format += ": %w" + args = append(args, e) + } + + err = fmt.Errorf(format, args...) + return err +} diff --git a/vendor/github.com/golang-jwt/jwt/v5/errors_go_other.go b/vendor/github.com/golang-jwt/jwt/v5/errors_go_other.go new file mode 100644 index 00000000..2ad542f0 --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v5/errors_go_other.go @@ -0,0 +1,78 @@ +//go:build !go1.20 +// +build !go1.20 + +package jwt + +import ( + "errors" + "fmt" +) + +// Is implements checking for multiple errors using [errors.Is], since multiple +// error unwrapping is not possible in versions less than Go 1.20. +func (je joinedError) Is(err error) bool { + for _, e := range je.errs { + if errors.Is(e, err) { + return true + } + } + + return false +} + +// wrappedErrors is a workaround for wrapping multiple errors in environments +// where Go 1.20 is not available. It basically uses the already implemented +// functionality of joinedError to handle multiple errors with supplies a +// custom error message that is identical to the one we produce in Go 1.20 using +// multiple %w directives. +type wrappedErrors struct { + msg string + joinedError +} + +// Error returns the stored error string +func (we wrappedErrors) Error() string { + return we.msg +} + +// newError creates a new error message with a detailed error message. The +// message will be prefixed with the contents of the supplied error type. +// Additionally, more errors, that provide more context can be supplied which +// will be appended to the message. Since we cannot use of Go 1.20's possibility +// to include more than one %w formatting directive in [fmt.Errorf], we have to +// emulate that. +// +// For example, +// +// newError("no keyfunc was provided", ErrTokenUnverifiable) +// +// will produce the error string +// +// "token is unverifiable: no keyfunc was provided" +func newError(message string, err error, more ...error) error { + // We cannot wrap multiple errors here with %w, so we have to be a little + // bit creative. Basically, we are using %s instead of %w to produce the + // same error message and then throw the result into a custom error struct. + var format string + var args []any + if message != "" { + format = "%s: %s" + args = []any{err, message} + } else { + format = "%s" + args = []any{err} + } + errs := []error{err} + + for _, e := range more { + format += ": %s" + args = append(args, e) + errs = append(errs, e) + } + + err = &wrappedErrors{ + msg: fmt.Sprintf(format, args...), + joinedError: joinedError{errs: errs}, + } + return err +} diff --git a/vendor/github.com/form3tech-oss/jwt-go/hmac.go b/vendor/github.com/golang-jwt/jwt/v5/hmac.go similarity index 53% rename from vendor/github.com/form3tech-oss/jwt-go/hmac.go rename to vendor/github.com/golang-jwt/jwt/v5/hmac.go index addbe5d4..aca600ce 100644 --- a/vendor/github.com/form3tech-oss/jwt-go/hmac.go +++ b/vendor/github.com/golang-jwt/jwt/v5/hmac.go @@ -6,7 +6,7 @@ import ( "errors" ) -// Implements the HMAC-SHA family of signing methods signing methods +// SigningMethodHMAC implements the HMAC-SHA family of signing methods. // Expects key type of []byte for both signing and validation type SigningMethodHMAC struct { Name string @@ -45,18 +45,21 @@ func (m *SigningMethodHMAC) Alg() string { return m.Name } -// Verify the signature of HSXXX tokens. Returns nil if the signature is valid. -func (m *SigningMethodHMAC) Verify(signingString, signature string, key interface{}) error { +// Verify implements token verification for the SigningMethod. Returns nil if +// the signature is valid. Key must be []byte. +// +// Note it is not advised to provide a []byte which was converted from a 'human +// readable' string using a subset of ASCII characters. To maximize entropy, you +// should ideally be providing a []byte key which was produced from a +// cryptographically random source, e.g. crypto/rand. Additional information +// about this, and why we intentionally are not supporting string as a key can +// be found on our usage guide +// https://golang-jwt.github.io/jwt/usage/signing_methods/#signing-methods-and-key-types. +func (m *SigningMethodHMAC) Verify(signingString string, sig []byte, key interface{}) error { // Verify the key is the right type keyBytes, ok := key.([]byte) if !ok { - return ErrInvalidKeyType - } - - // Decode signature, for comparison - sig, err := DecodeSegment(signature) - if err != nil { - return err + return newError("HMAC verify expects []byte", ErrInvalidKeyType) } // Can we use the specified hashing method? @@ -77,19 +80,25 @@ func (m *SigningMethodHMAC) Verify(signingString, signature string, key interfac return nil } -// Implements the Sign method from SigningMethod for this signing method. -// Key must be []byte -func (m *SigningMethodHMAC) Sign(signingString string, key interface{}) (string, error) { +// Sign implements token signing for the SigningMethod. Key must be []byte. +// +// Note it is not advised to provide a []byte which was converted from a 'human +// readable' string using a subset of ASCII characters. To maximize entropy, you +// should ideally be providing a []byte key which was produced from a +// cryptographically random source, e.g. crypto/rand. Additional information +// about this, and why we intentionally are not supporting string as a key can +// be found on our usage guide https://golang-jwt.github.io/jwt/usage/signing_methods/. +func (m *SigningMethodHMAC) Sign(signingString string, key interface{}) ([]byte, error) { if keyBytes, ok := key.([]byte); ok { if !m.Hash.Available() { - return "", ErrHashUnavailable + return nil, ErrHashUnavailable } hasher := hmac.New(m.Hash.New, keyBytes) hasher.Write([]byte(signingString)) - return EncodeSegment(hasher.Sum(nil)), nil + return hasher.Sum(nil), nil } - return "", ErrInvalidKeyType + return nil, newError("HMAC sign expects []byte", ErrInvalidKeyType) } diff --git a/vendor/github.com/golang-jwt/jwt/v5/map_claims.go b/vendor/github.com/golang-jwt/jwt/v5/map_claims.go new file mode 100644 index 00000000..b2b51a1f --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v5/map_claims.go @@ -0,0 +1,109 @@ +package jwt + +import ( + "encoding/json" + "fmt" +) + +// MapClaims is a claims type that uses the map[string]interface{} for JSON +// decoding. This is the default claims type if you don't supply one +type MapClaims map[string]interface{} + +// GetExpirationTime implements the Claims interface. +func (m MapClaims) GetExpirationTime() (*NumericDate, error) { + return m.parseNumericDate("exp") +} + +// GetNotBefore implements the Claims interface. +func (m MapClaims) GetNotBefore() (*NumericDate, error) { + return m.parseNumericDate("nbf") +} + +// GetIssuedAt implements the Claims interface. +func (m MapClaims) GetIssuedAt() (*NumericDate, error) { + return m.parseNumericDate("iat") +} + +// GetAudience implements the Claims interface. +func (m MapClaims) GetAudience() (ClaimStrings, error) { + return m.parseClaimsString("aud") +} + +// GetIssuer implements the Claims interface. +func (m MapClaims) GetIssuer() (string, error) { + return m.parseString("iss") +} + +// GetSubject implements the Claims interface. +func (m MapClaims) GetSubject() (string, error) { + return m.parseString("sub") +} + +// parseNumericDate tries to parse a key in the map claims type as a number +// date. This will succeed, if the underlying type is either a [float64] or a +// [json.Number]. Otherwise, nil will be returned. +func (m MapClaims) parseNumericDate(key string) (*NumericDate, error) { + v, ok := m[key] + if !ok { + return nil, nil + } + + switch exp := v.(type) { + case float64: + if exp == 0 { + return nil, nil + } + + return newNumericDateFromSeconds(exp), nil + case json.Number: + v, _ := exp.Float64() + + return newNumericDateFromSeconds(v), nil + } + + return nil, newError(fmt.Sprintf("%s is invalid", key), ErrInvalidType) +} + +// parseClaimsString tries to parse a key in the map claims type as a +// [ClaimsStrings] type, which can either be a string or an array of string. +func (m MapClaims) parseClaimsString(key string) (ClaimStrings, error) { + var cs []string + switch v := m[key].(type) { + case string: + cs = append(cs, v) + case []string: + cs = v + case []interface{}: + for _, a := range v { + vs, ok := a.(string) + if !ok { + return nil, newError(fmt.Sprintf("%s is invalid", key), ErrInvalidType) + } + cs = append(cs, vs) + } + } + + return cs, nil +} + +// parseString tries to parse a key in the map claims type as a [string] type. +// If the key does not exist, an empty string is returned. If the key has the +// wrong type, an error is returned. +func (m MapClaims) parseString(key string) (string, error) { + var ( + ok bool + raw interface{} + iss string + ) + raw, ok = m[key] + if !ok { + return "", nil + } + + iss, ok = raw.(string) + if !ok { + return "", newError(fmt.Sprintf("%s is invalid", key), ErrInvalidType) + } + + return iss, nil +} diff --git a/vendor/github.com/form3tech-oss/jwt-go/none.go b/vendor/github.com/golang-jwt/jwt/v5/none.go similarity index 68% rename from vendor/github.com/form3tech-oss/jwt-go/none.go rename to vendor/github.com/golang-jwt/jwt/v5/none.go index f04d189d..685c2ea3 100644 --- a/vendor/github.com/form3tech-oss/jwt-go/none.go +++ b/vendor/github.com/golang-jwt/jwt/v5/none.go @@ -1,6 +1,6 @@ package jwt -// Implements the none signing method. This is required by the spec +// SigningMethodNone implements the none signing method. This is required by the spec // but you probably should never use it. var SigningMethodNone *signingMethodNone @@ -13,7 +13,7 @@ type unsafeNoneMagicConstant string func init() { SigningMethodNone = &signingMethodNone{} - NoneSignatureTypeDisallowedError = NewValidationError("'none' signature type is not allowed", ValidationErrorSignatureInvalid) + NoneSignatureTypeDisallowedError = newError("'none' signature type is not allowed", ErrTokenUnverifiable) RegisterSigningMethod(SigningMethodNone.Alg(), func() SigningMethod { return SigningMethodNone @@ -25,18 +25,15 @@ func (m *signingMethodNone) Alg() string { } // Only allow 'none' alg type if UnsafeAllowNoneSignatureType is specified as the key -func (m *signingMethodNone) Verify(signingString, signature string, key interface{}) (err error) { +func (m *signingMethodNone) Verify(signingString string, sig []byte, key interface{}) (err error) { // Key must be UnsafeAllowNoneSignatureType to prevent accidentally // accepting 'none' signing method if _, ok := key.(unsafeNoneMagicConstant); !ok { return NoneSignatureTypeDisallowedError } // If signing method is none, signature must be an empty string - if signature != "" { - return NewValidationError( - "'none' signing method with non-empty signature", - ValidationErrorSignatureInvalid, - ) + if len(sig) != 0 { + return newError("'none' signing method with non-empty signature", ErrTokenUnverifiable) } // Accept 'none' signing method. @@ -44,9 +41,10 @@ func (m *signingMethodNone) Verify(signingString, signature string, key interfac } // Only allow 'none' signing if UnsafeAllowNoneSignatureType is specified as the key -func (m *signingMethodNone) Sign(signingString string, key interface{}) (string, error) { +func (m *signingMethodNone) Sign(signingString string, key interface{}) ([]byte, error) { if _, ok := key.(unsafeNoneMagicConstant); ok { - return "", nil + return []byte{}, nil } - return "", NoneSignatureTypeDisallowedError + + return nil, NoneSignatureTypeDisallowedError } diff --git a/vendor/github.com/golang-jwt/jwt/v5/parser.go b/vendor/github.com/golang-jwt/jwt/v5/parser.go new file mode 100644 index 00000000..054c7eb6 --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v5/parser.go @@ -0,0 +1,268 @@ +package jwt + +import ( + "bytes" + "encoding/base64" + "encoding/json" + "fmt" + "strings" +) + +const tokenDelimiter = "." + +type Parser struct { + // If populated, only these methods will be considered valid. + validMethods []string + + // Use JSON Number format in JSON decoder. + useJSONNumber bool + + // Skip claims validation during token parsing. + skipClaimsValidation bool + + validator *Validator + + decodeStrict bool + + decodePaddingAllowed bool +} + +// NewParser creates a new Parser with the specified options +func NewParser(options ...ParserOption) *Parser { + p := &Parser{ + validator: &Validator{}, + } + + // Loop through our parsing options and apply them + for _, option := range options { + option(p) + } + + return p +} + +// Parse parses, validates, verifies the signature and returns the parsed token. +// keyFunc will receive the parsed token and should return the key for validating. +func (p *Parser) Parse(tokenString string, keyFunc Keyfunc) (*Token, error) { + return p.ParseWithClaims(tokenString, MapClaims{}, keyFunc) +} + +// ParseWithClaims parses, validates, and verifies like Parse, but supplies a default object implementing the Claims +// interface. This provides default values which can be overridden and allows a caller to use their own type, rather +// than the default MapClaims implementation of Claims. +// +// Note: If you provide a custom claim implementation that embeds one of the standard claims (such as RegisteredClaims), +// make sure that a) you either embed a non-pointer version of the claims or b) if you are using a pointer, allocate the +// proper memory for it before passing in the overall claims, otherwise you might run into a panic. +func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) { + token, parts, err := p.ParseUnverified(tokenString, claims) + if err != nil { + return token, err + } + + // Verify signing method is in the required set + if p.validMethods != nil { + var signingMethodValid = false + var alg = token.Method.Alg() + for _, m := range p.validMethods { + if m == alg { + signingMethodValid = true + break + } + } + if !signingMethodValid { + // signing method is not in the listed set + return token, newError(fmt.Sprintf("signing method %v is invalid", alg), ErrTokenSignatureInvalid) + } + } + + // Decode signature + token.Signature, err = p.DecodeSegment(parts[2]) + if err != nil { + return token, newError("could not base64 decode signature", ErrTokenMalformed, err) + } + text := strings.Join(parts[0:2], ".") + + // Lookup key(s) + if keyFunc == nil { + // keyFunc was not provided. short circuiting validation + return token, newError("no keyfunc was provided", ErrTokenUnverifiable) + } + + got, err := keyFunc(token) + if err != nil { + return token, newError("error while executing keyfunc", ErrTokenUnverifiable, err) + } + + switch have := got.(type) { + case VerificationKeySet: + if len(have.Keys) == 0 { + return token, newError("keyfunc returned empty verification key set", ErrTokenUnverifiable) + } + // Iterate through keys and verify signature, skipping the rest when a match is found. + // Return the last error if no match is found. + for _, key := range have.Keys { + if err = token.Method.Verify(text, token.Signature, key); err == nil { + break + } + } + default: + err = token.Method.Verify(text, token.Signature, have) + } + if err != nil { + return token, newError("", ErrTokenSignatureInvalid, err) + } + + // Validate Claims + if !p.skipClaimsValidation { + // Make sure we have at least a default validator + if p.validator == nil { + p.validator = NewValidator() + } + + if err := p.validator.Validate(claims); err != nil { + return token, newError("", ErrTokenInvalidClaims, err) + } + } + + // No errors so far, token is valid. + token.Valid = true + + return token, nil +} + +// ParseUnverified parses the token but doesn't validate the signature. +// +// WARNING: Don't use this method unless you know what you're doing. +// +// It's only ever useful in cases where you know the signature is valid (since it has already +// been or will be checked elsewhere in the stack) and you want to extract values from it. +func (p *Parser) ParseUnverified(tokenString string, claims Claims) (token *Token, parts []string, err error) { + var ok bool + parts, ok = splitToken(tokenString) + if !ok { + return nil, nil, newError("token contains an invalid number of segments", ErrTokenMalformed) + } + + token = &Token{Raw: tokenString} + + // parse Header + var headerBytes []byte + if headerBytes, err = p.DecodeSegment(parts[0]); err != nil { + return token, parts, newError("could not base64 decode header", ErrTokenMalformed, err) + } + if err = json.Unmarshal(headerBytes, &token.Header); err != nil { + return token, parts, newError("could not JSON decode header", ErrTokenMalformed, err) + } + + // parse Claims + token.Claims = claims + + claimBytes, err := p.DecodeSegment(parts[1]) + if err != nil { + return token, parts, newError("could not base64 decode claim", ErrTokenMalformed, err) + } + + // If `useJSONNumber` is enabled then we must use *json.Decoder to decode + // the claims. However, this comes with a performance penalty so only use + // it if we must and, otherwise, simple use json.Unmarshal. + if !p.useJSONNumber { + // JSON Unmarshal. Special case for map type to avoid weird pointer behavior. + if c, ok := token.Claims.(MapClaims); ok { + err = json.Unmarshal(claimBytes, &c) + } else { + err = json.Unmarshal(claimBytes, &claims) + } + } else { + dec := json.NewDecoder(bytes.NewBuffer(claimBytes)) + dec.UseNumber() + // JSON Decode. Special case for map type to avoid weird pointer behavior. + if c, ok := token.Claims.(MapClaims); ok { + err = dec.Decode(&c) + } else { + err = dec.Decode(&claims) + } + } + if err != nil { + return token, parts, newError("could not JSON decode claim", ErrTokenMalformed, err) + } + + // Lookup signature method + if method, ok := token.Header["alg"].(string); ok { + if token.Method = GetSigningMethod(method); token.Method == nil { + return token, parts, newError("signing method (alg) is unavailable", ErrTokenUnverifiable) + } + } else { + return token, parts, newError("signing method (alg) is unspecified", ErrTokenUnverifiable) + } + + return token, parts, nil +} + +// splitToken splits a token string into three parts: header, claims, and signature. It will only +// return true if the token contains exactly two delimiters and three parts. In all other cases, it +// will return nil parts and false. +func splitToken(token string) ([]string, bool) { + parts := make([]string, 3) + header, remain, ok := strings.Cut(token, tokenDelimiter) + if !ok { + return nil, false + } + parts[0] = header + claims, remain, ok := strings.Cut(remain, tokenDelimiter) + if !ok { + return nil, false + } + parts[1] = claims + // One more cut to ensure the signature is the last part of the token and there are no more + // delimiters. This avoids an issue where malicious input could contain additional delimiters + // causing unecessary overhead parsing tokens. + signature, _, unexpected := strings.Cut(remain, tokenDelimiter) + if unexpected { + return nil, false + } + parts[2] = signature + + return parts, true +} + +// DecodeSegment decodes a JWT specific base64url encoding. This function will +// take into account whether the [Parser] is configured with additional options, +// such as [WithStrictDecoding] or [WithPaddingAllowed]. +func (p *Parser) DecodeSegment(seg string) ([]byte, error) { + encoding := base64.RawURLEncoding + + if p.decodePaddingAllowed { + if l := len(seg) % 4; l > 0 { + seg += strings.Repeat("=", 4-l) + } + encoding = base64.URLEncoding + } + + if p.decodeStrict { + encoding = encoding.Strict() + } + return encoding.DecodeString(seg) +} + +// Parse parses, validates, verifies the signature and returns the parsed token. +// keyFunc will receive the parsed token and should return the cryptographic key +// for verifying the signature. The caller is strongly encouraged to set the +// WithValidMethods option to validate the 'alg' claim in the token matches the +// expected algorithm. For more details about the importance of validating the +// 'alg' claim, see +// https://auth0.com/blog/critical-vulnerabilities-in-json-web-token-libraries/ +func Parse(tokenString string, keyFunc Keyfunc, options ...ParserOption) (*Token, error) { + return NewParser(options...).Parse(tokenString, keyFunc) +} + +// ParseWithClaims is a shortcut for NewParser().ParseWithClaims(). +// +// Note: If you provide a custom claim implementation that embeds one of the +// standard claims (such as RegisteredClaims), make sure that a) you either +// embed a non-pointer version of the claims or b) if you are using a pointer, +// allocate the proper memory for it before passing in the overall claims, +// otherwise you might run into a panic. +func ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc, options ...ParserOption) (*Token, error) { + return NewParser(options...).ParseWithClaims(tokenString, claims, keyFunc) +} diff --git a/vendor/github.com/golang-jwt/jwt/v5/parser_option.go b/vendor/github.com/golang-jwt/jwt/v5/parser_option.go new file mode 100644 index 00000000..88a780fb --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v5/parser_option.go @@ -0,0 +1,128 @@ +package jwt + +import "time" + +// ParserOption is used to implement functional-style options that modify the +// behavior of the parser. To add new options, just create a function (ideally +// beginning with With or Without) that returns an anonymous function that takes +// a *Parser type as input and manipulates its configuration accordingly. +type ParserOption func(*Parser) + +// WithValidMethods is an option to supply algorithm methods that the parser +// will check. Only those methods will be considered valid. It is heavily +// encouraged to use this option in order to prevent attacks such as +// https://auth0.com/blog/critical-vulnerabilities-in-json-web-token-libraries/. +func WithValidMethods(methods []string) ParserOption { + return func(p *Parser) { + p.validMethods = methods + } +} + +// WithJSONNumber is an option to configure the underlying JSON parser with +// UseNumber. +func WithJSONNumber() ParserOption { + return func(p *Parser) { + p.useJSONNumber = true + } +} + +// WithoutClaimsValidation is an option to disable claims validation. This +// option should only be used if you exactly know what you are doing. +func WithoutClaimsValidation() ParserOption { + return func(p *Parser) { + p.skipClaimsValidation = true + } +} + +// WithLeeway returns the ParserOption for specifying the leeway window. +func WithLeeway(leeway time.Duration) ParserOption { + return func(p *Parser) { + p.validator.leeway = leeway + } +} + +// WithTimeFunc returns the ParserOption for specifying the time func. The +// primary use-case for this is testing. If you are looking for a way to account +// for clock-skew, WithLeeway should be used instead. +func WithTimeFunc(f func() time.Time) ParserOption { + return func(p *Parser) { + p.validator.timeFunc = f + } +} + +// WithIssuedAt returns the ParserOption to enable verification +// of issued-at. +func WithIssuedAt() ParserOption { + return func(p *Parser) { + p.validator.verifyIat = true + } +} + +// WithExpirationRequired returns the ParserOption to make exp claim required. +// By default exp claim is optional. +func WithExpirationRequired() ParserOption { + return func(p *Parser) { + p.validator.requireExp = true + } +} + +// WithAudience configures the validator to require the specified audience in +// the `aud` claim. Validation will fail if the audience is not listed in the +// token or the `aud` claim is missing. +// +// NOTE: While the `aud` claim is OPTIONAL in a JWT, the handling of it is +// application-specific. Since this validation API is helping developers in +// writing secure application, we decided to REQUIRE the existence of the claim, +// if an audience is expected. +func WithAudience(aud string) ParserOption { + return func(p *Parser) { + p.validator.expectedAud = aud + } +} + +// WithIssuer configures the validator to require the specified issuer in the +// `iss` claim. Validation will fail if a different issuer is specified in the +// token or the `iss` claim is missing. +// +// NOTE: While the `iss` claim is OPTIONAL in a JWT, the handling of it is +// application-specific. Since this validation API is helping developers in +// writing secure application, we decided to REQUIRE the existence of the claim, +// if an issuer is expected. +func WithIssuer(iss string) ParserOption { + return func(p *Parser) { + p.validator.expectedIss = iss + } +} + +// WithSubject configures the validator to require the specified subject in the +// `sub` claim. Validation will fail if a different subject is specified in the +// token or the `sub` claim is missing. +// +// NOTE: While the `sub` claim is OPTIONAL in a JWT, the handling of it is +// application-specific. Since this validation API is helping developers in +// writing secure application, we decided to REQUIRE the existence of the claim, +// if a subject is expected. +func WithSubject(sub string) ParserOption { + return func(p *Parser) { + p.validator.expectedSub = sub + } +} + +// WithPaddingAllowed will enable the codec used for decoding JWTs to allow +// padding. Note that the JWS RFC7515 states that the tokens will utilize a +// Base64url encoding with no padding. Unfortunately, some implementations of +// JWT are producing non-standard tokens, and thus require support for decoding. +func WithPaddingAllowed() ParserOption { + return func(p *Parser) { + p.decodePaddingAllowed = true + } +} + +// WithStrictDecoding will switch the codec used for decoding JWTs into strict +// mode. In this mode, the decoder requires that trailing padding bits are zero, +// as described in RFC 4648 section 3.5. +func WithStrictDecoding() ParserOption { + return func(p *Parser) { + p.decodeStrict = true + } +} diff --git a/vendor/github.com/golang-jwt/jwt/v5/registered_claims.go b/vendor/github.com/golang-jwt/jwt/v5/registered_claims.go new file mode 100644 index 00000000..77951a53 --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v5/registered_claims.go @@ -0,0 +1,63 @@ +package jwt + +// RegisteredClaims are a structured version of the JWT Claims Set, +// restricted to Registered Claim Names, as referenced at +// https://datatracker.ietf.org/doc/html/rfc7519#section-4.1 +// +// This type can be used on its own, but then additional private and +// public claims embedded in the JWT will not be parsed. The typical use-case +// therefore is to embedded this in a user-defined claim type. +// +// See examples for how to use this with your own claim types. +type RegisteredClaims struct { + // the `iss` (Issuer) claim. See https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.1 + Issuer string `json:"iss,omitempty"` + + // the `sub` (Subject) claim. See https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.2 + Subject string `json:"sub,omitempty"` + + // the `aud` (Audience) claim. See https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.3 + Audience ClaimStrings `json:"aud,omitempty"` + + // the `exp` (Expiration Time) claim. See https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.4 + ExpiresAt *NumericDate `json:"exp,omitempty"` + + // the `nbf` (Not Before) claim. See https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.5 + NotBefore *NumericDate `json:"nbf,omitempty"` + + // the `iat` (Issued At) claim. See https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.6 + IssuedAt *NumericDate `json:"iat,omitempty"` + + // the `jti` (JWT ID) claim. See https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.7 + ID string `json:"jti,omitempty"` +} + +// GetExpirationTime implements the Claims interface. +func (c RegisteredClaims) GetExpirationTime() (*NumericDate, error) { + return c.ExpiresAt, nil +} + +// GetNotBefore implements the Claims interface. +func (c RegisteredClaims) GetNotBefore() (*NumericDate, error) { + return c.NotBefore, nil +} + +// GetIssuedAt implements the Claims interface. +func (c RegisteredClaims) GetIssuedAt() (*NumericDate, error) { + return c.IssuedAt, nil +} + +// GetAudience implements the Claims interface. +func (c RegisteredClaims) GetAudience() (ClaimStrings, error) { + return c.Audience, nil +} + +// GetIssuer implements the Claims interface. +func (c RegisteredClaims) GetIssuer() (string, error) { + return c.Issuer, nil +} + +// GetSubject implements the Claims interface. +func (c RegisteredClaims) GetSubject() (string, error) { + return c.Subject, nil +} diff --git a/vendor/github.com/form3tech-oss/jwt-go/rsa.go b/vendor/github.com/golang-jwt/jwt/v5/rsa.go similarity index 77% rename from vendor/github.com/form3tech-oss/jwt-go/rsa.go rename to vendor/github.com/golang-jwt/jwt/v5/rsa.go index e4caf1ca..83cbee6a 100644 --- a/vendor/github.com/form3tech-oss/jwt-go/rsa.go +++ b/vendor/github.com/golang-jwt/jwt/v5/rsa.go @@ -6,7 +6,7 @@ import ( "crypto/rsa" ) -// Implements the RSA family of signing methods signing methods +// SigningMethodRSA implements the RSA family of signing methods. // Expects *rsa.PrivateKey for signing and *rsa.PublicKey for validation type SigningMethodRSA struct { Name string @@ -44,22 +44,14 @@ func (m *SigningMethodRSA) Alg() string { return m.Name } -// Implements the Verify method from SigningMethod +// Verify implements token verification for the SigningMethod // For this signing method, must be an *rsa.PublicKey structure. -func (m *SigningMethodRSA) Verify(signingString, signature string, key interface{}) error { - var err error - - // Decode the signature - var sig []byte - if sig, err = DecodeSegment(signature); err != nil { - return err - } - +func (m *SigningMethodRSA) Verify(signingString string, sig []byte, key interface{}) error { var rsaKey *rsa.PublicKey var ok bool if rsaKey, ok = key.(*rsa.PublicKey); !ok { - return ErrInvalidKeyType + return newError("RSA verify expects *rsa.PublicKey", ErrInvalidKeyType) } // Create hasher @@ -73,20 +65,20 @@ func (m *SigningMethodRSA) Verify(signingString, signature string, key interface return rsa.VerifyPKCS1v15(rsaKey, m.Hash, hasher.Sum(nil), sig) } -// Implements the Sign method from SigningMethod +// Sign implements token signing for the SigningMethod // For this signing method, must be an *rsa.PrivateKey structure. -func (m *SigningMethodRSA) Sign(signingString string, key interface{}) (string, error) { +func (m *SigningMethodRSA) Sign(signingString string, key interface{}) ([]byte, error) { var rsaKey *rsa.PrivateKey var ok bool // Validate type of key if rsaKey, ok = key.(*rsa.PrivateKey); !ok { - return "", ErrInvalidKey + return nil, newError("RSA sign expects *rsa.PrivateKey", ErrInvalidKeyType) } // Create the hasher if !m.Hash.Available() { - return "", ErrHashUnavailable + return nil, ErrHashUnavailable } hasher := m.Hash.New() @@ -94,8 +86,8 @@ func (m *SigningMethodRSA) Sign(signingString string, key interface{}) (string, // Sign the string and return the encoded bytes if sigBytes, err := rsa.SignPKCS1v15(rand.Reader, rsaKey, m.Hash, hasher.Sum(nil)); err == nil { - return EncodeSegment(sigBytes), nil + return sigBytes, nil } else { - return "", err + return nil, err } } diff --git a/vendor/github.com/form3tech-oss/jwt-go/rsa_pss.go b/vendor/github.com/golang-jwt/jwt/v5/rsa_pss.go similarity index 83% rename from vendor/github.com/form3tech-oss/jwt-go/rsa_pss.go rename to vendor/github.com/golang-jwt/jwt/v5/rsa_pss.go index c0147086..28c386ec 100644 --- a/vendor/github.com/form3tech-oss/jwt-go/rsa_pss.go +++ b/vendor/github.com/golang-jwt/jwt/v5/rsa_pss.go @@ -1,3 +1,4 @@ +//go:build go1.4 // +build go1.4 package jwt @@ -8,7 +9,7 @@ import ( "crypto/rsa" ) -// Implements the RSAPSS family of signing methods signing methods +// SigningMethodRSAPSS implements the RSAPSS family of signing methods signing methods type SigningMethodRSAPSS struct { *SigningMethodRSA Options *rsa.PSSOptions @@ -79,23 +80,15 @@ func init() { }) } -// Implements the Verify method from SigningMethod +// Verify implements token verification for the SigningMethod. // For this verify method, key must be an rsa.PublicKey struct -func (m *SigningMethodRSAPSS) Verify(signingString, signature string, key interface{}) error { - var err error - - // Decode the signature - var sig []byte - if sig, err = DecodeSegment(signature); err != nil { - return err - } - +func (m *SigningMethodRSAPSS) Verify(signingString string, sig []byte, key interface{}) error { var rsaKey *rsa.PublicKey switch k := key.(type) { case *rsa.PublicKey: rsaKey = k default: - return ErrInvalidKey + return newError("RSA-PSS verify expects *rsa.PublicKey", ErrInvalidKeyType) } // Create hasher @@ -113,21 +106,21 @@ func (m *SigningMethodRSAPSS) Verify(signingString, signature string, key interf return rsa.VerifyPSS(rsaKey, m.Hash, hasher.Sum(nil), sig, opts) } -// Implements the Sign method from SigningMethod +// Sign implements token signing for the SigningMethod. // For this signing method, key must be an rsa.PrivateKey struct -func (m *SigningMethodRSAPSS) Sign(signingString string, key interface{}) (string, error) { +func (m *SigningMethodRSAPSS) Sign(signingString string, key interface{}) ([]byte, error) { var rsaKey *rsa.PrivateKey switch k := key.(type) { case *rsa.PrivateKey: rsaKey = k default: - return "", ErrInvalidKeyType + return nil, newError("RSA-PSS sign expects *rsa.PrivateKey", ErrInvalidKeyType) } // Create the hasher if !m.Hash.Available() { - return "", ErrHashUnavailable + return nil, ErrHashUnavailable } hasher := m.Hash.New() @@ -135,8 +128,8 @@ func (m *SigningMethodRSAPSS) Sign(signingString string, key interface{}) (strin // Sign the string and return the encoded bytes if sigBytes, err := rsa.SignPSS(rand.Reader, rsaKey, m.Hash, hasher.Sum(nil), m.Options); err == nil { - return EncodeSegment(sigBytes), nil + return sigBytes, nil } else { - return "", err + return nil, err } } diff --git a/vendor/github.com/form3tech-oss/jwt-go/rsa_utils.go b/vendor/github.com/golang-jwt/jwt/v5/rsa_utils.go similarity index 69% rename from vendor/github.com/form3tech-oss/jwt-go/rsa_utils.go rename to vendor/github.com/golang-jwt/jwt/v5/rsa_utils.go index 14c78c29..b3aeebbe 100644 --- a/vendor/github.com/form3tech-oss/jwt-go/rsa_utils.go +++ b/vendor/github.com/golang-jwt/jwt/v5/rsa_utils.go @@ -8,12 +8,12 @@ import ( ) var ( - ErrKeyMustBePEMEncoded = errors.New("Invalid Key: Key must be a PEM encoded PKCS1 or PKCS8 key") - ErrNotRSAPrivateKey = errors.New("Key is not a valid RSA private key") - ErrNotRSAPublicKey = errors.New("Key is not a valid RSA public key") + ErrKeyMustBePEMEncoded = errors.New("invalid key: Key must be a PEM encoded PKCS1 or PKCS8 key") + ErrNotRSAPrivateKey = errors.New("key is not a valid RSA private key") + ErrNotRSAPublicKey = errors.New("key is not a valid RSA public key") ) -// Parse PEM encoded PKCS1 or PKCS8 private key +// ParseRSAPrivateKeyFromPEM parses a PEM encoded PKCS1 or PKCS8 private key func ParseRSAPrivateKeyFromPEM(key []byte) (*rsa.PrivateKey, error) { var err error @@ -39,7 +39,11 @@ func ParseRSAPrivateKeyFromPEM(key []byte) (*rsa.PrivateKey, error) { return pkey, nil } -// Parse PEM encoded PKCS1 or PKCS8 private key protected with password +// ParseRSAPrivateKeyFromPEMWithPassword parses a PEM encoded PKCS1 or PKCS8 private key protected with password +// +// Deprecated: This function is deprecated and should not be used anymore. It uses the deprecated x509.DecryptPEMBlock +// function, which was deprecated since RFC 1423 is regarded insecure by design. Unfortunately, there is no alternative +// in the Go standard library for now. See https://github.com/golang/go/issues/8860. func ParseRSAPrivateKeyFromPEMWithPassword(key []byte, password string) (*rsa.PrivateKey, error) { var err error @@ -71,7 +75,7 @@ func ParseRSAPrivateKeyFromPEMWithPassword(key []byte, password string) (*rsa.Pr return pkey, nil } -// Parse PEM encoded PKCS1 or PKCS8 public key +// ParseRSAPublicKeyFromPEM parses a certificate or a PEM encoded PKCS1 or PKIX public key func ParseRSAPublicKeyFromPEM(key []byte) (*rsa.PublicKey, error) { var err error @@ -87,7 +91,9 @@ func ParseRSAPublicKeyFromPEM(key []byte) (*rsa.PublicKey, error) { if cert, err := x509.ParseCertificate(block.Bytes); err == nil { parsedKey = cert.PublicKey } else { - return nil, err + if parsedKey, err = x509.ParsePKCS1PublicKey(block.Bytes); err != nil { + return nil, err + } } } diff --git a/vendor/github.com/golang-jwt/jwt/v5/signing_method.go b/vendor/github.com/golang-jwt/jwt/v5/signing_method.go new file mode 100644 index 00000000..0d73631c --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v5/signing_method.go @@ -0,0 +1,49 @@ +package jwt + +import ( + "sync" +) + +var signingMethods = map[string]func() SigningMethod{} +var signingMethodLock = new(sync.RWMutex) + +// SigningMethod can be used add new methods for signing or verifying tokens. It +// takes a decoded signature as an input in the Verify function and produces a +// signature in Sign. The signature is then usually base64 encoded as part of a +// JWT. +type SigningMethod interface { + Verify(signingString string, sig []byte, key interface{}) error // Returns nil if signature is valid + Sign(signingString string, key interface{}) ([]byte, error) // Returns signature or error + Alg() string // returns the alg identifier for this method (example: 'HS256') +} + +// RegisterSigningMethod registers the "alg" name and a factory function for signing method. +// This is typically done during init() in the method's implementation +func RegisterSigningMethod(alg string, f func() SigningMethod) { + signingMethodLock.Lock() + defer signingMethodLock.Unlock() + + signingMethods[alg] = f +} + +// GetSigningMethod retrieves a signing method from an "alg" string +func GetSigningMethod(alg string) (method SigningMethod) { + signingMethodLock.RLock() + defer signingMethodLock.RUnlock() + + if methodF, ok := signingMethods[alg]; ok { + method = methodF() + } + return +} + +// GetAlgorithms returns a list of registered "alg" names +func GetAlgorithms() (algs []string) { + signingMethodLock.RLock() + defer signingMethodLock.RUnlock() + + for alg := range signingMethods { + algs = append(algs, alg) + } + return +} diff --git a/vendor/github.com/golang-jwt/jwt/v5/staticcheck.conf b/vendor/github.com/golang-jwt/jwt/v5/staticcheck.conf new file mode 100644 index 00000000..53745d51 --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v5/staticcheck.conf @@ -0,0 +1 @@ +checks = ["all", "-ST1000", "-ST1003", "-ST1016", "-ST1023"] diff --git a/vendor/github.com/golang-jwt/jwt/v5/token.go b/vendor/github.com/golang-jwt/jwt/v5/token.go new file mode 100644 index 00000000..9c7f4ab0 --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v5/token.go @@ -0,0 +1,100 @@ +package jwt + +import ( + "crypto" + "encoding/base64" + "encoding/json" +) + +// Keyfunc will be used by the Parse methods as a callback function to supply +// the key for verification. The function receives the parsed, but unverified +// Token. This allows you to use properties in the Header of the token (such as +// `kid`) to identify which key to use. +// +// The returned interface{} may be a single key or a VerificationKeySet containing +// multiple keys. +type Keyfunc func(*Token) (interface{}, error) + +// VerificationKey represents a public or secret key for verifying a token's signature. +type VerificationKey interface { + crypto.PublicKey | []uint8 +} + +// VerificationKeySet is a set of public or secret keys. It is used by the parser to verify a token. +type VerificationKeySet struct { + Keys []VerificationKey +} + +// Token represents a JWT Token. Different fields will be used depending on +// whether you're creating or parsing/verifying a token. +type Token struct { + Raw string // Raw contains the raw token. Populated when you [Parse] a token + Method SigningMethod // Method is the signing method used or to be used + Header map[string]interface{} // Header is the first segment of the token in decoded form + Claims Claims // Claims is the second segment of the token in decoded form + Signature []byte // Signature is the third segment of the token in decoded form. Populated when you Parse a token + Valid bool // Valid specifies if the token is valid. Populated when you Parse/Verify a token +} + +// New creates a new [Token] with the specified signing method and an empty map +// of claims. Additional options can be specified, but are currently unused. +func New(method SigningMethod, opts ...TokenOption) *Token { + return NewWithClaims(method, MapClaims{}, opts...) +} + +// NewWithClaims creates a new [Token] with the specified signing method and +// claims. Additional options can be specified, but are currently unused. +func NewWithClaims(method SigningMethod, claims Claims, opts ...TokenOption) *Token { + return &Token{ + Header: map[string]interface{}{ + "typ": "JWT", + "alg": method.Alg(), + }, + Claims: claims, + Method: method, + } +} + +// SignedString creates and returns a complete, signed JWT. The token is signed +// using the SigningMethod specified in the token. Please refer to +// https://golang-jwt.github.io/jwt/usage/signing_methods/#signing-methods-and-key-types +// for an overview of the different signing methods and their respective key +// types. +func (t *Token) SignedString(key interface{}) (string, error) { + sstr, err := t.SigningString() + if err != nil { + return "", err + } + + sig, err := t.Method.Sign(sstr, key) + if err != nil { + return "", err + } + + return sstr + "." + t.EncodeSegment(sig), nil +} + +// SigningString generates the signing string. This is the most expensive part +// of the whole deal. Unless you need this for something special, just go +// straight for the SignedString. +func (t *Token) SigningString() (string, error) { + h, err := json.Marshal(t.Header) + if err != nil { + return "", err + } + + c, err := json.Marshal(t.Claims) + if err != nil { + return "", err + } + + return t.EncodeSegment(h) + "." + t.EncodeSegment(c), nil +} + +// EncodeSegment encodes a JWT specific base64url encoding with padding +// stripped. In the future, this function might take into account a +// [TokenOption]. Therefore, this function exists as a method of [Token], rather +// than a global function. +func (*Token) EncodeSegment(seg []byte) string { + return base64.RawURLEncoding.EncodeToString(seg) +} diff --git a/vendor/github.com/golang-jwt/jwt/v5/token_option.go b/vendor/github.com/golang-jwt/jwt/v5/token_option.go new file mode 100644 index 00000000..b4ae3bad --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v5/token_option.go @@ -0,0 +1,5 @@ +package jwt + +// TokenOption is a reserved type, which provides some forward compatibility, +// if we ever want to introduce token creation-related options. +type TokenOption func(*Token) diff --git a/vendor/github.com/golang-jwt/jwt/v5/types.go b/vendor/github.com/golang-jwt/jwt/v5/types.go new file mode 100644 index 00000000..b2655a9e --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v5/types.go @@ -0,0 +1,149 @@ +package jwt + +import ( + "encoding/json" + "fmt" + "math" + "strconv" + "time" +) + +// TimePrecision sets the precision of times and dates within this library. This +// has an influence on the precision of times when comparing expiry or other +// related time fields. Furthermore, it is also the precision of times when +// serializing. +// +// For backwards compatibility the default precision is set to seconds, so that +// no fractional timestamps are generated. +var TimePrecision = time.Second + +// MarshalSingleStringAsArray modifies the behavior of the ClaimStrings type, +// especially its MarshalJSON function. +// +// If it is set to true (the default), it will always serialize the type as an +// array of strings, even if it just contains one element, defaulting to the +// behavior of the underlying []string. If it is set to false, it will serialize +// to a single string, if it contains one element. Otherwise, it will serialize +// to an array of strings. +var MarshalSingleStringAsArray = true + +// NumericDate represents a JSON numeric date value, as referenced at +// https://datatracker.ietf.org/doc/html/rfc7519#section-2. +type NumericDate struct { + time.Time +} + +// NewNumericDate constructs a new *NumericDate from a standard library time.Time struct. +// It will truncate the timestamp according to the precision specified in TimePrecision. +func NewNumericDate(t time.Time) *NumericDate { + return &NumericDate{t.Truncate(TimePrecision)} +} + +// newNumericDateFromSeconds creates a new *NumericDate out of a float64 representing a +// UNIX epoch with the float fraction representing non-integer seconds. +func newNumericDateFromSeconds(f float64) *NumericDate { + round, frac := math.Modf(f) + return NewNumericDate(time.Unix(int64(round), int64(frac*1e9))) +} + +// MarshalJSON is an implementation of the json.RawMessage interface and serializes the UNIX epoch +// represented in NumericDate to a byte array, using the precision specified in TimePrecision. +func (date NumericDate) MarshalJSON() (b []byte, err error) { + var prec int + if TimePrecision < time.Second { + prec = int(math.Log10(float64(time.Second) / float64(TimePrecision))) + } + truncatedDate := date.Truncate(TimePrecision) + + // For very large timestamps, UnixNano would overflow an int64, but this + // function requires nanosecond level precision, so we have to use the + // following technique to get round the issue: + // + // 1. Take the normal unix timestamp to form the whole number part of the + // output, + // 2. Take the result of the Nanosecond function, which returns the offset + // within the second of the particular unix time instance, to form the + // decimal part of the output + // 3. Concatenate them to produce the final result + seconds := strconv.FormatInt(truncatedDate.Unix(), 10) + nanosecondsOffset := strconv.FormatFloat(float64(truncatedDate.Nanosecond())/float64(time.Second), 'f', prec, 64) + + output := append([]byte(seconds), []byte(nanosecondsOffset)[1:]...) + + return output, nil +} + +// UnmarshalJSON is an implementation of the json.RawMessage interface and +// deserializes a [NumericDate] from a JSON representation, i.e. a +// [json.Number]. This number represents an UNIX epoch with either integer or +// non-integer seconds. +func (date *NumericDate) UnmarshalJSON(b []byte) (err error) { + var ( + number json.Number + f float64 + ) + + if err = json.Unmarshal(b, &number); err != nil { + return fmt.Errorf("could not parse NumericData: %w", err) + } + + if f, err = number.Float64(); err != nil { + return fmt.Errorf("could not convert json number value to float: %w", err) + } + + n := newNumericDateFromSeconds(f) + *date = *n + + return nil +} + +// ClaimStrings is basically just a slice of strings, but it can be either +// serialized from a string array or just a string. This type is necessary, +// since the "aud" claim can either be a single string or an array. +type ClaimStrings []string + +func (s *ClaimStrings) UnmarshalJSON(data []byte) (err error) { + var value interface{} + + if err = json.Unmarshal(data, &value); err != nil { + return err + } + + var aud []string + + switch v := value.(type) { + case string: + aud = append(aud, v) + case []string: + aud = ClaimStrings(v) + case []interface{}: + for _, vv := range v { + vs, ok := vv.(string) + if !ok { + return ErrInvalidType + } + aud = append(aud, vs) + } + case nil: + return nil + default: + return ErrInvalidType + } + + *s = aud + + return +} + +func (s ClaimStrings) MarshalJSON() (b []byte, err error) { + // This handles a special case in the JWT RFC. If the string array, e.g. + // used by the "aud" field, only contains one element, it MAY be serialized + // as a single string. This may or may not be desired based on the ecosystem + // of other JWT library used, so we make it configurable by the variable + // MarshalSingleStringAsArray. + if len(s) == 1 && !MarshalSingleStringAsArray { + return json.Marshal(s[0]) + } + + return json.Marshal([]string(s)) +} diff --git a/vendor/github.com/golang-jwt/jwt/v5/validator.go b/vendor/github.com/golang-jwt/jwt/v5/validator.go new file mode 100644 index 00000000..008ecd87 --- /dev/null +++ b/vendor/github.com/golang-jwt/jwt/v5/validator.go @@ -0,0 +1,316 @@ +package jwt + +import ( + "crypto/subtle" + "fmt" + "time" +) + +// ClaimsValidator is an interface that can be implemented by custom claims who +// wish to execute any additional claims validation based on +// application-specific logic. The Validate function is then executed in +// addition to the regular claims validation and any error returned is appended +// to the final validation result. +// +// type MyCustomClaims struct { +// Foo string `json:"foo"` +// jwt.RegisteredClaims +// } +// +// func (m MyCustomClaims) Validate() error { +// if m.Foo != "bar" { +// return errors.New("must be foobar") +// } +// return nil +// } +type ClaimsValidator interface { + Claims + Validate() error +} + +// Validator is the core of the new Validation API. It is automatically used by +// a [Parser] during parsing and can be modified with various parser options. +// +// The [NewValidator] function should be used to create an instance of this +// struct. +type Validator struct { + // leeway is an optional leeway that can be provided to account for clock skew. + leeway time.Duration + + // timeFunc is used to supply the current time that is needed for + // validation. If unspecified, this defaults to time.Now. + timeFunc func() time.Time + + // requireExp specifies whether the exp claim is required + requireExp bool + + // verifyIat specifies whether the iat (Issued At) claim will be verified. + // According to https://www.rfc-editor.org/rfc/rfc7519#section-4.1.6 this + // only specifies the age of the token, but no validation check is + // necessary. However, if wanted, it can be checked if the iat is + // unrealistic, i.e., in the future. + verifyIat bool + + // expectedAud contains the audience this token expects. Supplying an empty + // string will disable aud checking. + expectedAud string + + // expectedIss contains the issuer this token expects. Supplying an empty + // string will disable iss checking. + expectedIss string + + // expectedSub contains the subject this token expects. Supplying an empty + // string will disable sub checking. + expectedSub string +} + +// NewValidator can be used to create a stand-alone validator with the supplied +// options. This validator can then be used to validate already parsed claims. +// +// Note: Under normal circumstances, explicitly creating a validator is not +// needed and can potentially be dangerous; instead functions of the [Parser] +// class should be used. +// +// The [Validator] is only checking the *validity* of the claims, such as its +// expiration time, but it does NOT perform *signature verification* of the +// token. +func NewValidator(opts ...ParserOption) *Validator { + p := NewParser(opts...) + return p.validator +} + +// Validate validates the given claims. It will also perform any custom +// validation if claims implements the [ClaimsValidator] interface. +// +// Note: It will NOT perform any *signature verification* on the token that +// contains the claims and expects that the [Claim] was already successfully +// verified. +func (v *Validator) Validate(claims Claims) error { + var ( + now time.Time + errs []error = make([]error, 0, 6) + err error + ) + + // Check, if we have a time func + if v.timeFunc != nil { + now = v.timeFunc() + } else { + now = time.Now() + } + + // We always need to check the expiration time, but usage of the claim + // itself is OPTIONAL by default. requireExp overrides this behavior + // and makes the exp claim mandatory. + if err = v.verifyExpiresAt(claims, now, v.requireExp); err != nil { + errs = append(errs, err) + } + + // We always need to check not-before, but usage of the claim itself is + // OPTIONAL. + if err = v.verifyNotBefore(claims, now, false); err != nil { + errs = append(errs, err) + } + + // Check issued-at if the option is enabled + if v.verifyIat { + if err = v.verifyIssuedAt(claims, now, false); err != nil { + errs = append(errs, err) + } + } + + // If we have an expected audience, we also require the audience claim + if v.expectedAud != "" { + if err = v.verifyAudience(claims, v.expectedAud, true); err != nil { + errs = append(errs, err) + } + } + + // If we have an expected issuer, we also require the issuer claim + if v.expectedIss != "" { + if err = v.verifyIssuer(claims, v.expectedIss, true); err != nil { + errs = append(errs, err) + } + } + + // If we have an expected subject, we also require the subject claim + if v.expectedSub != "" { + if err = v.verifySubject(claims, v.expectedSub, true); err != nil { + errs = append(errs, err) + } + } + + // Finally, we want to give the claim itself some possibility to do some + // additional custom validation based on a custom Validate function. + cvt, ok := claims.(ClaimsValidator) + if ok { + if err := cvt.Validate(); err != nil { + errs = append(errs, err) + } + } + + if len(errs) == 0 { + return nil + } + + return joinErrors(errs...) +} + +// verifyExpiresAt compares the exp claim in claims against cmp. This function +// will succeed if cmp < exp. Additional leeway is taken into account. +// +// If exp is not set, it will succeed if the claim is not required, +// otherwise ErrTokenRequiredClaimMissing will be returned. +// +// Additionally, if any error occurs while retrieving the claim, e.g., when its +// the wrong type, an ErrTokenUnverifiable error will be returned. +func (v *Validator) verifyExpiresAt(claims Claims, cmp time.Time, required bool) error { + exp, err := claims.GetExpirationTime() + if err != nil { + return err + } + + if exp == nil { + return errorIfRequired(required, "exp") + } + + return errorIfFalse(cmp.Before((exp.Time).Add(+v.leeway)), ErrTokenExpired) +} + +// verifyIssuedAt compares the iat claim in claims against cmp. This function +// will succeed if cmp >= iat. Additional leeway is taken into account. +// +// If iat is not set, it will succeed if the claim is not required, +// otherwise ErrTokenRequiredClaimMissing will be returned. +// +// Additionally, if any error occurs while retrieving the claim, e.g., when its +// the wrong type, an ErrTokenUnverifiable error will be returned. +func (v *Validator) verifyIssuedAt(claims Claims, cmp time.Time, required bool) error { + iat, err := claims.GetIssuedAt() + if err != nil { + return err + } + + if iat == nil { + return errorIfRequired(required, "iat") + } + + return errorIfFalse(!cmp.Before(iat.Add(-v.leeway)), ErrTokenUsedBeforeIssued) +} + +// verifyNotBefore compares the nbf claim in claims against cmp. This function +// will return true if cmp >= nbf. Additional leeway is taken into account. +// +// If nbf is not set, it will succeed if the claim is not required, +// otherwise ErrTokenRequiredClaimMissing will be returned. +// +// Additionally, if any error occurs while retrieving the claim, e.g., when its +// the wrong type, an ErrTokenUnverifiable error will be returned. +func (v *Validator) verifyNotBefore(claims Claims, cmp time.Time, required bool) error { + nbf, err := claims.GetNotBefore() + if err != nil { + return err + } + + if nbf == nil { + return errorIfRequired(required, "nbf") + } + + return errorIfFalse(!cmp.Before(nbf.Add(-v.leeway)), ErrTokenNotValidYet) +} + +// verifyAudience compares the aud claim against cmp. +// +// If aud is not set or an empty list, it will succeed if the claim is not required, +// otherwise ErrTokenRequiredClaimMissing will be returned. +// +// Additionally, if any error occurs while retrieving the claim, e.g., when its +// the wrong type, an ErrTokenUnverifiable error will be returned. +func (v *Validator) verifyAudience(claims Claims, cmp string, required bool) error { + aud, err := claims.GetAudience() + if err != nil { + return err + } + + if len(aud) == 0 { + return errorIfRequired(required, "aud") + } + + // use a var here to keep constant time compare when looping over a number of claims + result := false + + var stringClaims string + for _, a := range aud { + if subtle.ConstantTimeCompare([]byte(a), []byte(cmp)) != 0 { + result = true + } + stringClaims = stringClaims + a + } + + // case where "" is sent in one or many aud claims + if stringClaims == "" { + return errorIfRequired(required, "aud") + } + + return errorIfFalse(result, ErrTokenInvalidAudience) +} + +// verifyIssuer compares the iss claim in claims against cmp. +// +// If iss is not set, it will succeed if the claim is not required, +// otherwise ErrTokenRequiredClaimMissing will be returned. +// +// Additionally, if any error occurs while retrieving the claim, e.g., when its +// the wrong type, an ErrTokenUnverifiable error will be returned. +func (v *Validator) verifyIssuer(claims Claims, cmp string, required bool) error { + iss, err := claims.GetIssuer() + if err != nil { + return err + } + + if iss == "" { + return errorIfRequired(required, "iss") + } + + return errorIfFalse(iss == cmp, ErrTokenInvalidIssuer) +} + +// verifySubject compares the sub claim against cmp. +// +// If sub is not set, it will succeed if the claim is not required, +// otherwise ErrTokenRequiredClaimMissing will be returned. +// +// Additionally, if any error occurs while retrieving the claim, e.g., when its +// the wrong type, an ErrTokenUnverifiable error will be returned. +func (v *Validator) verifySubject(claims Claims, cmp string, required bool) error { + sub, err := claims.GetSubject() + if err != nil { + return err + } + + if sub == "" { + return errorIfRequired(required, "sub") + } + + return errorIfFalse(sub == cmp, ErrTokenInvalidSubject) +} + +// errorIfFalse returns the error specified in err, if the value is true. +// Otherwise, nil is returned. +func errorIfFalse(value bool, err error) error { + if value { + return nil + } else { + return err + } +} + +// errorIfRequired returns an ErrTokenRequiredClaimMissing error if required is +// true. Otherwise, nil is returned. +func errorIfRequired(required bool, claim string) error { + if required { + return newError(fmt.Sprintf("%s claim is required", claim), ErrTokenRequiredClaimMissing) + } else { + return nil + } +} diff --git a/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/client_intermediate_cert.der b/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/client_intermediate_cert.der deleted file mode 100644 index 958f3cfa..00000000 Binary files a/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/client_intermediate_cert.der and /dev/null differ diff --git a/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/client_leaf_cert.der b/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/client_leaf_cert.der deleted file mode 100644 index d2817641..00000000 Binary files a/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/client_leaf_cert.der and /dev/null differ diff --git a/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/client_root_cert.der b/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/client_root_cert.der deleted file mode 100644 index d8c3710c..00000000 Binary files a/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/client_root_cert.der and /dev/null differ diff --git a/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/server_intermediate_cert.der b/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/server_intermediate_cert.der deleted file mode 100644 index dae619c0..00000000 Binary files a/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/server_intermediate_cert.der and /dev/null differ diff --git a/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/server_leaf_cert.der b/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/server_leaf_cert.der deleted file mode 100644 index ce7f8d31..00000000 Binary files a/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/server_leaf_cert.der and /dev/null differ diff --git a/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/server_root_cert.der b/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/server_root_cert.der deleted file mode 100644 index 04b0d736..00000000 Binary files a/vendor/github.com/google/s2a-go/internal/v2/certverifier/testdata/server_root_cert.der and /dev/null differ diff --git a/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/client_cert.der b/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/client_cert.der deleted file mode 100644 index d8c3710c..00000000 Binary files a/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/client_cert.der and /dev/null differ diff --git a/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/client_cert.pem b/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/client_cert.pem deleted file mode 100644 index 493a5a26..00000000 --- a/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/client_cert.pem +++ /dev/null @@ -1,24 +0,0 @@ ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIUKXNlBRVe6UepjQUijIFPZBd/4qYwDQYJKoZIhvcNAQEL -BQAwgYcxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJU3Vubnl2 -YWxlMRAwDgYDVQQKDAdDb21wYW55MREwDwYDVQQLDAhEaXZpc2lvbjEWMBQGA1UE -AwwNczJhX3Rlc3RfY2VydDEaMBgGCSqGSIb3DQEJARYLeHl6QHh5ei5jb20wHhcN -MjIwNTMxMjAwMzE1WhcNNDIwNTI2MjAwMzE1WjCBhzELMAkGA1UEBhMCVVMxCzAJ -BgNVBAgMAkNBMRIwEAYDVQQHDAlTdW5ueXZhbGUxEDAOBgNVBAoMB0NvbXBhbnkx -ETAPBgNVBAsMCERpdmlzaW9uMRYwFAYDVQQDDA1zMmFfdGVzdF9jZXJ0MRowGAYJ -KoZIhvcNAQkBFgt4eXpAeHl6LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAOOFuIucH7XXfohGxKd3uR/ihUA/LdduR9I8kfpUEbq5BOt8xZe5/Yn9 -a1ozEHVW6cOAbHbnwAR8tkSgZ/t42QIA2k77HWU1Jh2xiEIsJivo3imm4/kZWuR0 -OqPh7MhzxpR/hvNwpI5mJsAVBWFMa5KtecFZLnyZtwHylrRN1QXzuLrOxuKFufK3 -RKbTABScn5RbZL976H/jgfSeXrbt242NrIoBnVe6fRbekbq2DQ6zFArbQMUgHjHK -P0UqBgdr1QmHfi9KytFyx9BTP3gXWnWIu+bY7/v7qKJMHFwGETo+dCLWYevJL316 -HnLfhApDMfP8U+Yv/y1N/YvgaSOSlEcCAwEAAaNTMFEwHQYDVR0OBBYEFKhAU4nu -0h/lrnggbIGvx4ej0WklMB8GA1UdIwQYMBaAFKhAU4nu0h/lrnggbIGvx4ej0Wkl -MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAE/6NghzQ5fu6yR6 -EHKbj/YMrFdT7aGn5n2sAf7wJ33LIhiFHkpWBsVlm7rDtZtwhe891ZK/P60anlg9 -/P0Ua53tSRVRmCvTnEbXWOVMN4is6MsR7BlmzUxl4AtIn7jbeifEwRL7B4xDYmdA -QrQnsqoz45dLgS5xK4WDqXATP09Q91xQDuhud/b+A4jrvgwFASmL7rMIZbp4f1JQ -nlnl/9VoTBQBvJiWkDUtQDMpRLtauddEkv4AGz75p5IspXWD6cOemuh2iQec11xD -X20rs2WZbAcAiUa3nmy8OKYw435vmpj8gp39WYbX/Yx9TymrFFbVY92wYn+quTco -pKklVz0= ------END CERTIFICATE----- diff --git a/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/client_key.pem b/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/client_key.pem deleted file mode 100644 index 55a7f10c..00000000 --- a/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/client_key.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEogIBAAKCAQEA44W4i5wftdd+iEbEp3e5H+KFQD8t125H0jyR+lQRurkE63zF -l7n9if1rWjMQdVbpw4BsdufABHy2RKBn+3jZAgDaTvsdZTUmHbGIQiwmK+jeKabj -+Rla5HQ6o+HsyHPGlH+G83CkjmYmwBUFYUxrkq15wVkufJm3AfKWtE3VBfO4us7G -4oW58rdEptMAFJyflFtkv3vof+OB9J5etu3bjY2sigGdV7p9Ft6RurYNDrMUCttA -xSAeMco/RSoGB2vVCYd+L0rK0XLH0FM/eBdadYi75tjv+/uookwcXAYROj50ItZh -68kvfXoect+ECkMx8/xT5i//LU39i+BpI5KURwIDAQABAoIBABgyjo/6iLzUMFbZ -/+w3pW6orrdIgN2akvTfED9pVYFgUA+jc3hRhY95bkNnjuaL2cy7Cc4Tk65mfRQL -Y0OxdJLr+EvSFSxAXM9npDA1ddHRsF8JqtFBSxNk8R+g1Yf0GDiO35Fgd3/ViWWA -VtQkRoSRApP3oiQKTRZd8H04keFR+PvmDk/Lq11l3Kc24A1PevKIPX1oI990ggw9 -9i4uSV+cnuMxmcI9xxJtgwdDFdjr39l2arLOHr4s6LGoV2IOdXHNlv5xRqWUZ0FH -MDHowkLgwDrdSTnNeaVNkce14Gqx+bd4hNaLCdKXMpedBTEmrut3f3hdV1kKjaKt -aqRYr8ECgYEA/YDGZY2jvFoHHBywlqmEMFrrCvQGH51m5R1Ntpkzr+Rh3YCmrpvq -xgwJXING0PUw3dz+xrH5lJICrfNE5Kt3fPu1rAEy+13mYsNowghtUq2Rtu0Hsjjx -2E3Bf8vEB6RNBMmGkUpTTIAroGF5tpJoRvfnWax+k4pFdrKYFtyZdNcCgYEA5cNv -EPltvOobjTXlUmtVP3n27KZN2aXexTcagLzRxE9CV4cYySENl3KuOMmccaZpIl6z -aHk6BT4X+M0LqElNUczrInfVqI+SGAFLGy7W6CJaqSr6cpyFUP/fosKpm6wKGgLq -udHfpvz5rckhKd8kJxFLvhGOK9yN5qpzih0gfhECgYAJfwRvk3G5wYmYpP58dlcs -VIuPenqsPoI3PPTHTU/hW+XKnWIhElgmGRdUrto9Q6IT/Y5RtSMLTLjq+Tzwb/fm -56rziYv2XJsfwgAvnI8z1Kqrto9ePsHYf3krJ1/thVsZPc9bq/QY3ohD1sLvcuaT -GgBBnLOVJU3a12/ZE2RwOwKBgF0csWMAoj8/5IB6if+3ral2xOGsl7oPZVMo/J2V -Z7EVqb4M6rd/pKFugTpUQgkwtkSOekhpcGD1hAN5HTNK2YG/+L5UMAsKe9sskwJm -HgOfAHy0BSDzW3ey6i9skg2bT9Cww+0gJ3Hl7U1HSCBO5LjMYpSZSrNtwzfqdb5Q -BX3xAoGARZdR28Ej3+/+0+fz47Yu2h4z0EI/EbrudLOWY936jIeAVwHckI3+BuqH -qR4poj1gfbnMxNuI9UzIXzjEmGewx9kDZ7IYnvloZKqoVQODO5GlKF2ja6IcMNlh -GCNdD6PSAS6HcmalmWo9sj+1YMkrl+GJikKZqVBHrHNwMGAG67w= ------END RSA PRIVATE KEY----- diff --git a/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/server_cert.der b/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/server_cert.der deleted file mode 100644 index 04b0d736..00000000 Binary files a/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/server_cert.der and /dev/null differ diff --git a/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/server_cert.pem b/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/server_cert.pem deleted file mode 100644 index 0f98322c..00000000 --- a/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/server_cert.pem +++ /dev/null @@ -1,24 +0,0 @@ ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIUKCoDuLtiZXvhsBY2RoDm0ugizJ8wDQYJKoZIhvcNAQEL -BQAwgYcxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJU3Vubnl2 -YWxlMRAwDgYDVQQKDAdDb21wYW55MREwDwYDVQQLDAhEaXZpc2lvbjEWMBQGA1UE -AwwNczJhX3Rlc3RfY2VydDEaMBgGCSqGSIb3DQEJARYLeHl6QHh5ei5jb20wHhcN -MjIwNTMxMjAwODI1WhcNNDIwNTI2MjAwODI1WjCBhzELMAkGA1UEBhMCVVMxCzAJ -BgNVBAgMAkNBMRIwEAYDVQQHDAlTdW5ueXZhbGUxEDAOBgNVBAoMB0NvbXBhbnkx -ETAPBgNVBAsMCERpdmlzaW9uMRYwFAYDVQQDDA1zMmFfdGVzdF9jZXJ0MRowGAYJ -KoZIhvcNAQkBFgt4eXpAeHl6LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAKK1++PXQ+M3hjYH/v0K4UEYl5ljzpNM1i52eQM+gFooojT87PDSaphT -fs0PXy/PTAjHBEvPhWpOpmQXfJNYzjwcCvg66hbqkv++/VTZiFLAsHagzkEz+FRJ -qT5Eq7G5FLyw1izX1uxyPN7tAEWEEg7eqsiaXD3Cq8+TYN9cjirPeF7RZF8yFCYE -xqvbo+Yc6RL6xw19iXVTfctRgQe581KQuIY5/LXo3dWDEilFdsADAe8XAEcO64es -Ow0g1UvXLnpXSE151kXBFb3sKH/ZjCecDYMCIMEb4sWLSblkSxJ5sNSmXIG4wtr2 -Qnii7CXZgnVYraQE/Jyh+NMQANuoSdMCAwEAAaNTMFEwHQYDVR0OBBYEFAyQQQuM -ab+YUQqjK8dVVOoHVFmXMB8GA1UdIwQYMBaAFAyQQQuMab+YUQqjK8dVVOoHVFmX -MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBADj0vQ6ykWhicoqR -e6VZMwlEJV7/DSvWWKBd9MUjfKye0A4565ya5lmnzP3DiD3nqGe3miqmLsXKDs+X -POqlPXTWIamP7D4MJ32XtSLwZB4ru+I+Ao/P/VngPepoRPQoBnzHe7jww0rokqxl -AZERjlbTUwUAy/BPWPSzSJZ2j0tcs6ZLDNyYzpK4ao8R9/1VmQ92Tcp3feJs1QTg -odRQc3om/AkWOwsll+oyX0UbJeHkFHiLanUPXbdh+/BkSvZJ8ynL+feSDdaurPe+ -PSfnqLtQft9/neecGRdEaQzzzSFVQUVQzTdK1Q7hA7b55b2HvIa3ktDiks+sJsYN -Dhm6uZM= ------END CERTIFICATE----- diff --git a/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/server_key.pem b/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/server_key.pem deleted file mode 100644 index 81afea78..00000000 --- a/vendor/github.com/google/s2a-go/internal/v2/remotesigner/testdata/server_key.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAorX749dD4zeGNgf+/QrhQRiXmWPOk0zWLnZ5Az6AWiiiNPzs -8NJqmFN+zQ9fL89MCMcES8+Fak6mZBd8k1jOPBwK+DrqFuqS/779VNmIUsCwdqDO -QTP4VEmpPkSrsbkUvLDWLNfW7HI83u0ARYQSDt6qyJpcPcKrz5Ng31yOKs94XtFk -XzIUJgTGq9uj5hzpEvrHDX2JdVN9y1GBB7nzUpC4hjn8tejd1YMSKUV2wAMB7xcA -Rw7rh6w7DSDVS9cueldITXnWRcEVvewof9mMJ5wNgwIgwRvixYtJuWRLEnmw1KZc -gbjC2vZCeKLsJdmCdVitpAT8nKH40xAA26hJ0wIDAQABAoIBACaNR+lsD8G+XiZf -LqN1+HkcAo9tfnyYMAdCOtnx7SdviT9Uzi8hK/B7mAeuJLeHPlS2EuaDfPD7QaFl -jza6S+MiIdc+3kgfvESsVAnOoOY6kZUJ9NSuI6CU82y1iJjLaYZrv9NQMLRFPPb0 -4KOX709mosB1EnXvshW0rbc+jtDFhrm1SxMt+k9TuzmMxjbOeW4LOLXPgU8X1T3Q -Xy0hMZZtcgBs9wFIo8yCtmOixax9pnFE8rRltgDxTodn9LLdz1FieyntNgDksZ0P -nt4kV7Mqly7ELaea+Foaj244mKsesic2e3GhAlMRLun/VSunSf7mOCxfpITB8dp1 -drDhOYECgYEA19151dVxRcviuovN6Dar+QszMTnU8pDJ8BjLFjXjP/hNBBwMTHDE -duMuWk2qnwZqMooI/shxrF/ufmTgS0CFrh2+ANBZu27vWConJNXcyNtdigI4wt50 -L0Y2qcZn2mg67qFXHwoR3QNwrwnPwEjRXA09at9CSRZzcwDQ0ETXhYsCgYEAwPaG -06QdK8Zyly7TTzZJwxzv9uGiqzodmGtX6NEKjgij2JaCxHpukqZBJoqa0jKeK1cm -eNVkOvT5ff9TMzarSHQLr3pZen2/oVLb5gaFkbcJt/klv9Fd+ZRilHY3i6QwS6pD -uMiPOWS4DrLHDRVoVlAZTDjT1RVwwTs+P2NhJdkCgYEAsriXysbxBYyMp05gqEW7 -lHIFbFgpSrs9th+Q5U6wW6JEgYaHWDJ1NslY80MiZI93FWjbkbZ7BvBWESeL3EIL -a+EMErht0pVCbIhZ6FF4foPAqia0wAJVx14mm+G80kNBp5jE/NnleEsE3KcO7nBb -hg8gLn+x7bk81JZ0TDrzBYkCgYEAuQKluv47SeF3tSScTfKLPpvcKCWmxe1uutkQ -7JShPhVioyOMNb39jnYBOWbjkm4d4QgqRuiytSR0oi3QI+Ziy5EYMyNn713qAk9j -r2TJZDDPDKnBW+zt4YI4EohWMXk3JRUW4XDKggjjwJQA7bZ812TtHHvP/xoThfG7 -eSNb3eECgYBw6ssgCtMrdvQiEmjKVX/9yI38mvC2kSGyzbrQnGUfgqRGomRpeZuD -B5E3kysA4td5pT5lvcLgSW0TbOz+YbiriXjwOihPIelCvc9gE2eOUI71/byUWPFz -7u5F/xQ4NaGr5suLF+lBC6h7pSbM4El9lIHQAQadpuEdzHqrw+hs3g== ------END RSA PRIVATE KEY----- diff --git a/vendor/github.com/google/s2a-go/internal/v2/testdata/client_cert.pem b/vendor/github.com/google/s2a-go/internal/v2/testdata/client_cert.pem deleted file mode 100644 index 493a5a26..00000000 --- a/vendor/github.com/google/s2a-go/internal/v2/testdata/client_cert.pem +++ /dev/null @@ -1,24 +0,0 @@ ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIUKXNlBRVe6UepjQUijIFPZBd/4qYwDQYJKoZIhvcNAQEL -BQAwgYcxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJU3Vubnl2 -YWxlMRAwDgYDVQQKDAdDb21wYW55MREwDwYDVQQLDAhEaXZpc2lvbjEWMBQGA1UE -AwwNczJhX3Rlc3RfY2VydDEaMBgGCSqGSIb3DQEJARYLeHl6QHh5ei5jb20wHhcN -MjIwNTMxMjAwMzE1WhcNNDIwNTI2MjAwMzE1WjCBhzELMAkGA1UEBhMCVVMxCzAJ -BgNVBAgMAkNBMRIwEAYDVQQHDAlTdW5ueXZhbGUxEDAOBgNVBAoMB0NvbXBhbnkx -ETAPBgNVBAsMCERpdmlzaW9uMRYwFAYDVQQDDA1zMmFfdGVzdF9jZXJ0MRowGAYJ -KoZIhvcNAQkBFgt4eXpAeHl6LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAOOFuIucH7XXfohGxKd3uR/ihUA/LdduR9I8kfpUEbq5BOt8xZe5/Yn9 -a1ozEHVW6cOAbHbnwAR8tkSgZ/t42QIA2k77HWU1Jh2xiEIsJivo3imm4/kZWuR0 -OqPh7MhzxpR/hvNwpI5mJsAVBWFMa5KtecFZLnyZtwHylrRN1QXzuLrOxuKFufK3 -RKbTABScn5RbZL976H/jgfSeXrbt242NrIoBnVe6fRbekbq2DQ6zFArbQMUgHjHK -P0UqBgdr1QmHfi9KytFyx9BTP3gXWnWIu+bY7/v7qKJMHFwGETo+dCLWYevJL316 -HnLfhApDMfP8U+Yv/y1N/YvgaSOSlEcCAwEAAaNTMFEwHQYDVR0OBBYEFKhAU4nu -0h/lrnggbIGvx4ej0WklMB8GA1UdIwQYMBaAFKhAU4nu0h/lrnggbIGvx4ej0Wkl -MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAE/6NghzQ5fu6yR6 -EHKbj/YMrFdT7aGn5n2sAf7wJ33LIhiFHkpWBsVlm7rDtZtwhe891ZK/P60anlg9 -/P0Ua53tSRVRmCvTnEbXWOVMN4is6MsR7BlmzUxl4AtIn7jbeifEwRL7B4xDYmdA -QrQnsqoz45dLgS5xK4WDqXATP09Q91xQDuhud/b+A4jrvgwFASmL7rMIZbp4f1JQ -nlnl/9VoTBQBvJiWkDUtQDMpRLtauddEkv4AGz75p5IspXWD6cOemuh2iQec11xD -X20rs2WZbAcAiUa3nmy8OKYw435vmpj8gp39WYbX/Yx9TymrFFbVY92wYn+quTco -pKklVz0= ------END CERTIFICATE----- diff --git a/vendor/github.com/google/s2a-go/internal/v2/testdata/client_key.pem b/vendor/github.com/google/s2a-go/internal/v2/testdata/client_key.pem deleted file mode 100644 index 55a7f10c..00000000 --- a/vendor/github.com/google/s2a-go/internal/v2/testdata/client_key.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEogIBAAKCAQEA44W4i5wftdd+iEbEp3e5H+KFQD8t125H0jyR+lQRurkE63zF -l7n9if1rWjMQdVbpw4BsdufABHy2RKBn+3jZAgDaTvsdZTUmHbGIQiwmK+jeKabj -+Rla5HQ6o+HsyHPGlH+G83CkjmYmwBUFYUxrkq15wVkufJm3AfKWtE3VBfO4us7G -4oW58rdEptMAFJyflFtkv3vof+OB9J5etu3bjY2sigGdV7p9Ft6RurYNDrMUCttA -xSAeMco/RSoGB2vVCYd+L0rK0XLH0FM/eBdadYi75tjv+/uookwcXAYROj50ItZh -68kvfXoect+ECkMx8/xT5i//LU39i+BpI5KURwIDAQABAoIBABgyjo/6iLzUMFbZ -/+w3pW6orrdIgN2akvTfED9pVYFgUA+jc3hRhY95bkNnjuaL2cy7Cc4Tk65mfRQL -Y0OxdJLr+EvSFSxAXM9npDA1ddHRsF8JqtFBSxNk8R+g1Yf0GDiO35Fgd3/ViWWA -VtQkRoSRApP3oiQKTRZd8H04keFR+PvmDk/Lq11l3Kc24A1PevKIPX1oI990ggw9 -9i4uSV+cnuMxmcI9xxJtgwdDFdjr39l2arLOHr4s6LGoV2IOdXHNlv5xRqWUZ0FH -MDHowkLgwDrdSTnNeaVNkce14Gqx+bd4hNaLCdKXMpedBTEmrut3f3hdV1kKjaKt -aqRYr8ECgYEA/YDGZY2jvFoHHBywlqmEMFrrCvQGH51m5R1Ntpkzr+Rh3YCmrpvq -xgwJXING0PUw3dz+xrH5lJICrfNE5Kt3fPu1rAEy+13mYsNowghtUq2Rtu0Hsjjx -2E3Bf8vEB6RNBMmGkUpTTIAroGF5tpJoRvfnWax+k4pFdrKYFtyZdNcCgYEA5cNv -EPltvOobjTXlUmtVP3n27KZN2aXexTcagLzRxE9CV4cYySENl3KuOMmccaZpIl6z -aHk6BT4X+M0LqElNUczrInfVqI+SGAFLGy7W6CJaqSr6cpyFUP/fosKpm6wKGgLq -udHfpvz5rckhKd8kJxFLvhGOK9yN5qpzih0gfhECgYAJfwRvk3G5wYmYpP58dlcs -VIuPenqsPoI3PPTHTU/hW+XKnWIhElgmGRdUrto9Q6IT/Y5RtSMLTLjq+Tzwb/fm -56rziYv2XJsfwgAvnI8z1Kqrto9ePsHYf3krJ1/thVsZPc9bq/QY3ohD1sLvcuaT -GgBBnLOVJU3a12/ZE2RwOwKBgF0csWMAoj8/5IB6if+3ral2xOGsl7oPZVMo/J2V -Z7EVqb4M6rd/pKFugTpUQgkwtkSOekhpcGD1hAN5HTNK2YG/+L5UMAsKe9sskwJm -HgOfAHy0BSDzW3ey6i9skg2bT9Cww+0gJ3Hl7U1HSCBO5LjMYpSZSrNtwzfqdb5Q -BX3xAoGARZdR28Ej3+/+0+fz47Yu2h4z0EI/EbrudLOWY936jIeAVwHckI3+BuqH -qR4poj1gfbnMxNuI9UzIXzjEmGewx9kDZ7IYnvloZKqoVQODO5GlKF2ja6IcMNlh -GCNdD6PSAS6HcmalmWo9sj+1YMkrl+GJikKZqVBHrHNwMGAG67w= ------END RSA PRIVATE KEY----- diff --git a/vendor/github.com/google/s2a-go/internal/v2/testdata/server_cert.pem b/vendor/github.com/google/s2a-go/internal/v2/testdata/server_cert.pem deleted file mode 100644 index 0f98322c..00000000 --- a/vendor/github.com/google/s2a-go/internal/v2/testdata/server_cert.pem +++ /dev/null @@ -1,24 +0,0 @@ ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIUKCoDuLtiZXvhsBY2RoDm0ugizJ8wDQYJKoZIhvcNAQEL -BQAwgYcxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJU3Vubnl2 -YWxlMRAwDgYDVQQKDAdDb21wYW55MREwDwYDVQQLDAhEaXZpc2lvbjEWMBQGA1UE -AwwNczJhX3Rlc3RfY2VydDEaMBgGCSqGSIb3DQEJARYLeHl6QHh5ei5jb20wHhcN -MjIwNTMxMjAwODI1WhcNNDIwNTI2MjAwODI1WjCBhzELMAkGA1UEBhMCVVMxCzAJ -BgNVBAgMAkNBMRIwEAYDVQQHDAlTdW5ueXZhbGUxEDAOBgNVBAoMB0NvbXBhbnkx -ETAPBgNVBAsMCERpdmlzaW9uMRYwFAYDVQQDDA1zMmFfdGVzdF9jZXJ0MRowGAYJ -KoZIhvcNAQkBFgt4eXpAeHl6LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAKK1++PXQ+M3hjYH/v0K4UEYl5ljzpNM1i52eQM+gFooojT87PDSaphT -fs0PXy/PTAjHBEvPhWpOpmQXfJNYzjwcCvg66hbqkv++/VTZiFLAsHagzkEz+FRJ -qT5Eq7G5FLyw1izX1uxyPN7tAEWEEg7eqsiaXD3Cq8+TYN9cjirPeF7RZF8yFCYE -xqvbo+Yc6RL6xw19iXVTfctRgQe581KQuIY5/LXo3dWDEilFdsADAe8XAEcO64es -Ow0g1UvXLnpXSE151kXBFb3sKH/ZjCecDYMCIMEb4sWLSblkSxJ5sNSmXIG4wtr2 -Qnii7CXZgnVYraQE/Jyh+NMQANuoSdMCAwEAAaNTMFEwHQYDVR0OBBYEFAyQQQuM -ab+YUQqjK8dVVOoHVFmXMB8GA1UdIwQYMBaAFAyQQQuMab+YUQqjK8dVVOoHVFmX -MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBADj0vQ6ykWhicoqR -e6VZMwlEJV7/DSvWWKBd9MUjfKye0A4565ya5lmnzP3DiD3nqGe3miqmLsXKDs+X -POqlPXTWIamP7D4MJ32XtSLwZB4ru+I+Ao/P/VngPepoRPQoBnzHe7jww0rokqxl -AZERjlbTUwUAy/BPWPSzSJZ2j0tcs6ZLDNyYzpK4ao8R9/1VmQ92Tcp3feJs1QTg -odRQc3om/AkWOwsll+oyX0UbJeHkFHiLanUPXbdh+/BkSvZJ8ynL+feSDdaurPe+ -PSfnqLtQft9/neecGRdEaQzzzSFVQUVQzTdK1Q7hA7b55b2HvIa3ktDiks+sJsYN -Dhm6uZM= ------END CERTIFICATE----- diff --git a/vendor/github.com/google/s2a-go/internal/v2/testdata/server_key.pem b/vendor/github.com/google/s2a-go/internal/v2/testdata/server_key.pem deleted file mode 100644 index 81afea78..00000000 --- a/vendor/github.com/google/s2a-go/internal/v2/testdata/server_key.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAorX749dD4zeGNgf+/QrhQRiXmWPOk0zWLnZ5Az6AWiiiNPzs -8NJqmFN+zQ9fL89MCMcES8+Fak6mZBd8k1jOPBwK+DrqFuqS/779VNmIUsCwdqDO -QTP4VEmpPkSrsbkUvLDWLNfW7HI83u0ARYQSDt6qyJpcPcKrz5Ng31yOKs94XtFk -XzIUJgTGq9uj5hzpEvrHDX2JdVN9y1GBB7nzUpC4hjn8tejd1YMSKUV2wAMB7xcA -Rw7rh6w7DSDVS9cueldITXnWRcEVvewof9mMJ5wNgwIgwRvixYtJuWRLEnmw1KZc -gbjC2vZCeKLsJdmCdVitpAT8nKH40xAA26hJ0wIDAQABAoIBACaNR+lsD8G+XiZf -LqN1+HkcAo9tfnyYMAdCOtnx7SdviT9Uzi8hK/B7mAeuJLeHPlS2EuaDfPD7QaFl -jza6S+MiIdc+3kgfvESsVAnOoOY6kZUJ9NSuI6CU82y1iJjLaYZrv9NQMLRFPPb0 -4KOX709mosB1EnXvshW0rbc+jtDFhrm1SxMt+k9TuzmMxjbOeW4LOLXPgU8X1T3Q -Xy0hMZZtcgBs9wFIo8yCtmOixax9pnFE8rRltgDxTodn9LLdz1FieyntNgDksZ0P -nt4kV7Mqly7ELaea+Foaj244mKsesic2e3GhAlMRLun/VSunSf7mOCxfpITB8dp1 -drDhOYECgYEA19151dVxRcviuovN6Dar+QszMTnU8pDJ8BjLFjXjP/hNBBwMTHDE -duMuWk2qnwZqMooI/shxrF/ufmTgS0CFrh2+ANBZu27vWConJNXcyNtdigI4wt50 -L0Y2qcZn2mg67qFXHwoR3QNwrwnPwEjRXA09at9CSRZzcwDQ0ETXhYsCgYEAwPaG -06QdK8Zyly7TTzZJwxzv9uGiqzodmGtX6NEKjgij2JaCxHpukqZBJoqa0jKeK1cm -eNVkOvT5ff9TMzarSHQLr3pZen2/oVLb5gaFkbcJt/klv9Fd+ZRilHY3i6QwS6pD -uMiPOWS4DrLHDRVoVlAZTDjT1RVwwTs+P2NhJdkCgYEAsriXysbxBYyMp05gqEW7 -lHIFbFgpSrs9th+Q5U6wW6JEgYaHWDJ1NslY80MiZI93FWjbkbZ7BvBWESeL3EIL -a+EMErht0pVCbIhZ6FF4foPAqia0wAJVx14mm+G80kNBp5jE/NnleEsE3KcO7nBb -hg8gLn+x7bk81JZ0TDrzBYkCgYEAuQKluv47SeF3tSScTfKLPpvcKCWmxe1uutkQ -7JShPhVioyOMNb39jnYBOWbjkm4d4QgqRuiytSR0oi3QI+Ziy5EYMyNn713qAk9j -r2TJZDDPDKnBW+zt4YI4EohWMXk3JRUW4XDKggjjwJQA7bZ812TtHHvP/xoThfG7 -eSNb3eECgYBw6ssgCtMrdvQiEmjKVX/9yI38mvC2kSGyzbrQnGUfgqRGomRpeZuD -B5E3kysA4td5pT5lvcLgSW0TbOz+YbiriXjwOihPIelCvc9gE2eOUI71/byUWPFz -7u5F/xQ4NaGr5suLF+lBC6h7pSbM4El9lIHQAQadpuEdzHqrw+hs3g== ------END RSA PRIVATE KEY----- diff --git a/vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/testdata/client_cert.pem b/vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/testdata/client_cert.pem deleted file mode 100644 index 493a5a26..00000000 --- a/vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/testdata/client_cert.pem +++ /dev/null @@ -1,24 +0,0 @@ ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIUKXNlBRVe6UepjQUijIFPZBd/4qYwDQYJKoZIhvcNAQEL -BQAwgYcxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJU3Vubnl2 -YWxlMRAwDgYDVQQKDAdDb21wYW55MREwDwYDVQQLDAhEaXZpc2lvbjEWMBQGA1UE -AwwNczJhX3Rlc3RfY2VydDEaMBgGCSqGSIb3DQEJARYLeHl6QHh5ei5jb20wHhcN -MjIwNTMxMjAwMzE1WhcNNDIwNTI2MjAwMzE1WjCBhzELMAkGA1UEBhMCVVMxCzAJ -BgNVBAgMAkNBMRIwEAYDVQQHDAlTdW5ueXZhbGUxEDAOBgNVBAoMB0NvbXBhbnkx -ETAPBgNVBAsMCERpdmlzaW9uMRYwFAYDVQQDDA1zMmFfdGVzdF9jZXJ0MRowGAYJ -KoZIhvcNAQkBFgt4eXpAeHl6LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAOOFuIucH7XXfohGxKd3uR/ihUA/LdduR9I8kfpUEbq5BOt8xZe5/Yn9 -a1ozEHVW6cOAbHbnwAR8tkSgZ/t42QIA2k77HWU1Jh2xiEIsJivo3imm4/kZWuR0 -OqPh7MhzxpR/hvNwpI5mJsAVBWFMa5KtecFZLnyZtwHylrRN1QXzuLrOxuKFufK3 -RKbTABScn5RbZL976H/jgfSeXrbt242NrIoBnVe6fRbekbq2DQ6zFArbQMUgHjHK -P0UqBgdr1QmHfi9KytFyx9BTP3gXWnWIu+bY7/v7qKJMHFwGETo+dCLWYevJL316 -HnLfhApDMfP8U+Yv/y1N/YvgaSOSlEcCAwEAAaNTMFEwHQYDVR0OBBYEFKhAU4nu -0h/lrnggbIGvx4ej0WklMB8GA1UdIwQYMBaAFKhAU4nu0h/lrnggbIGvx4ej0Wkl -MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAE/6NghzQ5fu6yR6 -EHKbj/YMrFdT7aGn5n2sAf7wJ33LIhiFHkpWBsVlm7rDtZtwhe891ZK/P60anlg9 -/P0Ua53tSRVRmCvTnEbXWOVMN4is6MsR7BlmzUxl4AtIn7jbeifEwRL7B4xDYmdA -QrQnsqoz45dLgS5xK4WDqXATP09Q91xQDuhud/b+A4jrvgwFASmL7rMIZbp4f1JQ -nlnl/9VoTBQBvJiWkDUtQDMpRLtauddEkv4AGz75p5IspXWD6cOemuh2iQec11xD -X20rs2WZbAcAiUa3nmy8OKYw435vmpj8gp39WYbX/Yx9TymrFFbVY92wYn+quTco -pKklVz0= ------END CERTIFICATE----- diff --git a/vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/testdata/client_key.pem b/vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/testdata/client_key.pem deleted file mode 100644 index 55a7f10c..00000000 --- a/vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/testdata/client_key.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEogIBAAKCAQEA44W4i5wftdd+iEbEp3e5H+KFQD8t125H0jyR+lQRurkE63zF -l7n9if1rWjMQdVbpw4BsdufABHy2RKBn+3jZAgDaTvsdZTUmHbGIQiwmK+jeKabj -+Rla5HQ6o+HsyHPGlH+G83CkjmYmwBUFYUxrkq15wVkufJm3AfKWtE3VBfO4us7G -4oW58rdEptMAFJyflFtkv3vof+OB9J5etu3bjY2sigGdV7p9Ft6RurYNDrMUCttA -xSAeMco/RSoGB2vVCYd+L0rK0XLH0FM/eBdadYi75tjv+/uookwcXAYROj50ItZh -68kvfXoect+ECkMx8/xT5i//LU39i+BpI5KURwIDAQABAoIBABgyjo/6iLzUMFbZ -/+w3pW6orrdIgN2akvTfED9pVYFgUA+jc3hRhY95bkNnjuaL2cy7Cc4Tk65mfRQL -Y0OxdJLr+EvSFSxAXM9npDA1ddHRsF8JqtFBSxNk8R+g1Yf0GDiO35Fgd3/ViWWA -VtQkRoSRApP3oiQKTRZd8H04keFR+PvmDk/Lq11l3Kc24A1PevKIPX1oI990ggw9 -9i4uSV+cnuMxmcI9xxJtgwdDFdjr39l2arLOHr4s6LGoV2IOdXHNlv5xRqWUZ0FH -MDHowkLgwDrdSTnNeaVNkce14Gqx+bd4hNaLCdKXMpedBTEmrut3f3hdV1kKjaKt -aqRYr8ECgYEA/YDGZY2jvFoHHBywlqmEMFrrCvQGH51m5R1Ntpkzr+Rh3YCmrpvq -xgwJXING0PUw3dz+xrH5lJICrfNE5Kt3fPu1rAEy+13mYsNowghtUq2Rtu0Hsjjx -2E3Bf8vEB6RNBMmGkUpTTIAroGF5tpJoRvfnWax+k4pFdrKYFtyZdNcCgYEA5cNv -EPltvOobjTXlUmtVP3n27KZN2aXexTcagLzRxE9CV4cYySENl3KuOMmccaZpIl6z -aHk6BT4X+M0LqElNUczrInfVqI+SGAFLGy7W6CJaqSr6cpyFUP/fosKpm6wKGgLq -udHfpvz5rckhKd8kJxFLvhGOK9yN5qpzih0gfhECgYAJfwRvk3G5wYmYpP58dlcs -VIuPenqsPoI3PPTHTU/hW+XKnWIhElgmGRdUrto9Q6IT/Y5RtSMLTLjq+Tzwb/fm -56rziYv2XJsfwgAvnI8z1Kqrto9ePsHYf3krJ1/thVsZPc9bq/QY3ohD1sLvcuaT -GgBBnLOVJU3a12/ZE2RwOwKBgF0csWMAoj8/5IB6if+3ral2xOGsl7oPZVMo/J2V -Z7EVqb4M6rd/pKFugTpUQgkwtkSOekhpcGD1hAN5HTNK2YG/+L5UMAsKe9sskwJm -HgOfAHy0BSDzW3ey6i9skg2bT9Cww+0gJ3Hl7U1HSCBO5LjMYpSZSrNtwzfqdb5Q -BX3xAoGARZdR28Ej3+/+0+fz47Yu2h4z0EI/EbrudLOWY936jIeAVwHckI3+BuqH -qR4poj1gfbnMxNuI9UzIXzjEmGewx9kDZ7IYnvloZKqoVQODO5GlKF2ja6IcMNlh -GCNdD6PSAS6HcmalmWo9sj+1YMkrl+GJikKZqVBHrHNwMGAG67w= ------END RSA PRIVATE KEY----- diff --git a/vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/testdata/server_cert.pem b/vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/testdata/server_cert.pem deleted file mode 100644 index 0f98322c..00000000 --- a/vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/testdata/server_cert.pem +++ /dev/null @@ -1,24 +0,0 @@ ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIUKCoDuLtiZXvhsBY2RoDm0ugizJ8wDQYJKoZIhvcNAQEL -BQAwgYcxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJU3Vubnl2 -YWxlMRAwDgYDVQQKDAdDb21wYW55MREwDwYDVQQLDAhEaXZpc2lvbjEWMBQGA1UE -AwwNczJhX3Rlc3RfY2VydDEaMBgGCSqGSIb3DQEJARYLeHl6QHh5ei5jb20wHhcN -MjIwNTMxMjAwODI1WhcNNDIwNTI2MjAwODI1WjCBhzELMAkGA1UEBhMCVVMxCzAJ -BgNVBAgMAkNBMRIwEAYDVQQHDAlTdW5ueXZhbGUxEDAOBgNVBAoMB0NvbXBhbnkx -ETAPBgNVBAsMCERpdmlzaW9uMRYwFAYDVQQDDA1zMmFfdGVzdF9jZXJ0MRowGAYJ -KoZIhvcNAQkBFgt4eXpAeHl6LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAKK1++PXQ+M3hjYH/v0K4UEYl5ljzpNM1i52eQM+gFooojT87PDSaphT -fs0PXy/PTAjHBEvPhWpOpmQXfJNYzjwcCvg66hbqkv++/VTZiFLAsHagzkEz+FRJ -qT5Eq7G5FLyw1izX1uxyPN7tAEWEEg7eqsiaXD3Cq8+TYN9cjirPeF7RZF8yFCYE -xqvbo+Yc6RL6xw19iXVTfctRgQe581KQuIY5/LXo3dWDEilFdsADAe8XAEcO64es -Ow0g1UvXLnpXSE151kXBFb3sKH/ZjCecDYMCIMEb4sWLSblkSxJ5sNSmXIG4wtr2 -Qnii7CXZgnVYraQE/Jyh+NMQANuoSdMCAwEAAaNTMFEwHQYDVR0OBBYEFAyQQQuM -ab+YUQqjK8dVVOoHVFmXMB8GA1UdIwQYMBaAFAyQQQuMab+YUQqjK8dVVOoHVFmX -MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBADj0vQ6ykWhicoqR -e6VZMwlEJV7/DSvWWKBd9MUjfKye0A4565ya5lmnzP3DiD3nqGe3miqmLsXKDs+X -POqlPXTWIamP7D4MJ32XtSLwZB4ru+I+Ao/P/VngPepoRPQoBnzHe7jww0rokqxl -AZERjlbTUwUAy/BPWPSzSJZ2j0tcs6ZLDNyYzpK4ao8R9/1VmQ92Tcp3feJs1QTg -odRQc3om/AkWOwsll+oyX0UbJeHkFHiLanUPXbdh+/BkSvZJ8ynL+feSDdaurPe+ -PSfnqLtQft9/neecGRdEaQzzzSFVQUVQzTdK1Q7hA7b55b2HvIa3ktDiks+sJsYN -Dhm6uZM= ------END CERTIFICATE----- diff --git a/vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/testdata/server_key.pem b/vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/testdata/server_key.pem deleted file mode 100644 index 81afea78..00000000 --- a/vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/testdata/server_key.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAorX749dD4zeGNgf+/QrhQRiXmWPOk0zWLnZ5Az6AWiiiNPzs -8NJqmFN+zQ9fL89MCMcES8+Fak6mZBd8k1jOPBwK+DrqFuqS/779VNmIUsCwdqDO -QTP4VEmpPkSrsbkUvLDWLNfW7HI83u0ARYQSDt6qyJpcPcKrz5Ng31yOKs94XtFk -XzIUJgTGq9uj5hzpEvrHDX2JdVN9y1GBB7nzUpC4hjn8tejd1YMSKUV2wAMB7xcA -Rw7rh6w7DSDVS9cueldITXnWRcEVvewof9mMJ5wNgwIgwRvixYtJuWRLEnmw1KZc -gbjC2vZCeKLsJdmCdVitpAT8nKH40xAA26hJ0wIDAQABAoIBACaNR+lsD8G+XiZf -LqN1+HkcAo9tfnyYMAdCOtnx7SdviT9Uzi8hK/B7mAeuJLeHPlS2EuaDfPD7QaFl -jza6S+MiIdc+3kgfvESsVAnOoOY6kZUJ9NSuI6CU82y1iJjLaYZrv9NQMLRFPPb0 -4KOX709mosB1EnXvshW0rbc+jtDFhrm1SxMt+k9TuzmMxjbOeW4LOLXPgU8X1T3Q -Xy0hMZZtcgBs9wFIo8yCtmOixax9pnFE8rRltgDxTodn9LLdz1FieyntNgDksZ0P -nt4kV7Mqly7ELaea+Foaj244mKsesic2e3GhAlMRLun/VSunSf7mOCxfpITB8dp1 -drDhOYECgYEA19151dVxRcviuovN6Dar+QszMTnU8pDJ8BjLFjXjP/hNBBwMTHDE -duMuWk2qnwZqMooI/shxrF/ufmTgS0CFrh2+ANBZu27vWConJNXcyNtdigI4wt50 -L0Y2qcZn2mg67qFXHwoR3QNwrwnPwEjRXA09at9CSRZzcwDQ0ETXhYsCgYEAwPaG -06QdK8Zyly7TTzZJwxzv9uGiqzodmGtX6NEKjgij2JaCxHpukqZBJoqa0jKeK1cm -eNVkOvT5ff9TMzarSHQLr3pZen2/oVLb5gaFkbcJt/klv9Fd+ZRilHY3i6QwS6pD -uMiPOWS4DrLHDRVoVlAZTDjT1RVwwTs+P2NhJdkCgYEAsriXysbxBYyMp05gqEW7 -lHIFbFgpSrs9th+Q5U6wW6JEgYaHWDJ1NslY80MiZI93FWjbkbZ7BvBWESeL3EIL -a+EMErht0pVCbIhZ6FF4foPAqia0wAJVx14mm+G80kNBp5jE/NnleEsE3KcO7nBb -hg8gLn+x7bk81JZ0TDrzBYkCgYEAuQKluv47SeF3tSScTfKLPpvcKCWmxe1uutkQ -7JShPhVioyOMNb39jnYBOWbjkm4d4QgqRuiytSR0oi3QI+Ziy5EYMyNn713qAk9j -r2TJZDDPDKnBW+zt4YI4EohWMXk3JRUW4XDKggjjwJQA7bZ812TtHHvP/xoThfG7 -eSNb3eECgYBw6ssgCtMrdvQiEmjKVX/9yI38mvC2kSGyzbrQnGUfgqRGomRpeZuD -B5E3kysA4td5pT5lvcLgSW0TbOz+YbiriXjwOihPIelCvc9gE2eOUI71/byUWPFz -7u5F/xQ4NaGr5suLF+lBC6h7pSbM4El9lIHQAQadpuEdzHqrw+hs3g== ------END RSA PRIVATE KEY----- diff --git a/vendor/github.com/google/s2a-go/testdata/client_cert.pem b/vendor/github.com/google/s2a-go/testdata/client_cert.pem deleted file mode 100644 index 493a5a26..00000000 --- a/vendor/github.com/google/s2a-go/testdata/client_cert.pem +++ /dev/null @@ -1,24 +0,0 @@ ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIUKXNlBRVe6UepjQUijIFPZBd/4qYwDQYJKoZIhvcNAQEL -BQAwgYcxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJU3Vubnl2 -YWxlMRAwDgYDVQQKDAdDb21wYW55MREwDwYDVQQLDAhEaXZpc2lvbjEWMBQGA1UE -AwwNczJhX3Rlc3RfY2VydDEaMBgGCSqGSIb3DQEJARYLeHl6QHh5ei5jb20wHhcN -MjIwNTMxMjAwMzE1WhcNNDIwNTI2MjAwMzE1WjCBhzELMAkGA1UEBhMCVVMxCzAJ -BgNVBAgMAkNBMRIwEAYDVQQHDAlTdW5ueXZhbGUxEDAOBgNVBAoMB0NvbXBhbnkx -ETAPBgNVBAsMCERpdmlzaW9uMRYwFAYDVQQDDA1zMmFfdGVzdF9jZXJ0MRowGAYJ -KoZIhvcNAQkBFgt4eXpAeHl6LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAOOFuIucH7XXfohGxKd3uR/ihUA/LdduR9I8kfpUEbq5BOt8xZe5/Yn9 -a1ozEHVW6cOAbHbnwAR8tkSgZ/t42QIA2k77HWU1Jh2xiEIsJivo3imm4/kZWuR0 -OqPh7MhzxpR/hvNwpI5mJsAVBWFMa5KtecFZLnyZtwHylrRN1QXzuLrOxuKFufK3 -RKbTABScn5RbZL976H/jgfSeXrbt242NrIoBnVe6fRbekbq2DQ6zFArbQMUgHjHK -P0UqBgdr1QmHfi9KytFyx9BTP3gXWnWIu+bY7/v7qKJMHFwGETo+dCLWYevJL316 -HnLfhApDMfP8U+Yv/y1N/YvgaSOSlEcCAwEAAaNTMFEwHQYDVR0OBBYEFKhAU4nu -0h/lrnggbIGvx4ej0WklMB8GA1UdIwQYMBaAFKhAU4nu0h/lrnggbIGvx4ej0Wkl -MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAE/6NghzQ5fu6yR6 -EHKbj/YMrFdT7aGn5n2sAf7wJ33LIhiFHkpWBsVlm7rDtZtwhe891ZK/P60anlg9 -/P0Ua53tSRVRmCvTnEbXWOVMN4is6MsR7BlmzUxl4AtIn7jbeifEwRL7B4xDYmdA -QrQnsqoz45dLgS5xK4WDqXATP09Q91xQDuhud/b+A4jrvgwFASmL7rMIZbp4f1JQ -nlnl/9VoTBQBvJiWkDUtQDMpRLtauddEkv4AGz75p5IspXWD6cOemuh2iQec11xD -X20rs2WZbAcAiUa3nmy8OKYw435vmpj8gp39WYbX/Yx9TymrFFbVY92wYn+quTco -pKklVz0= ------END CERTIFICATE----- diff --git a/vendor/github.com/google/s2a-go/testdata/client_key.pem b/vendor/github.com/google/s2a-go/testdata/client_key.pem deleted file mode 100644 index 55a7f10c..00000000 --- a/vendor/github.com/google/s2a-go/testdata/client_key.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEogIBAAKCAQEA44W4i5wftdd+iEbEp3e5H+KFQD8t125H0jyR+lQRurkE63zF -l7n9if1rWjMQdVbpw4BsdufABHy2RKBn+3jZAgDaTvsdZTUmHbGIQiwmK+jeKabj -+Rla5HQ6o+HsyHPGlH+G83CkjmYmwBUFYUxrkq15wVkufJm3AfKWtE3VBfO4us7G -4oW58rdEptMAFJyflFtkv3vof+OB9J5etu3bjY2sigGdV7p9Ft6RurYNDrMUCttA -xSAeMco/RSoGB2vVCYd+L0rK0XLH0FM/eBdadYi75tjv+/uookwcXAYROj50ItZh -68kvfXoect+ECkMx8/xT5i//LU39i+BpI5KURwIDAQABAoIBABgyjo/6iLzUMFbZ -/+w3pW6orrdIgN2akvTfED9pVYFgUA+jc3hRhY95bkNnjuaL2cy7Cc4Tk65mfRQL -Y0OxdJLr+EvSFSxAXM9npDA1ddHRsF8JqtFBSxNk8R+g1Yf0GDiO35Fgd3/ViWWA -VtQkRoSRApP3oiQKTRZd8H04keFR+PvmDk/Lq11l3Kc24A1PevKIPX1oI990ggw9 -9i4uSV+cnuMxmcI9xxJtgwdDFdjr39l2arLOHr4s6LGoV2IOdXHNlv5xRqWUZ0FH -MDHowkLgwDrdSTnNeaVNkce14Gqx+bd4hNaLCdKXMpedBTEmrut3f3hdV1kKjaKt -aqRYr8ECgYEA/YDGZY2jvFoHHBywlqmEMFrrCvQGH51m5R1Ntpkzr+Rh3YCmrpvq -xgwJXING0PUw3dz+xrH5lJICrfNE5Kt3fPu1rAEy+13mYsNowghtUq2Rtu0Hsjjx -2E3Bf8vEB6RNBMmGkUpTTIAroGF5tpJoRvfnWax+k4pFdrKYFtyZdNcCgYEA5cNv -EPltvOobjTXlUmtVP3n27KZN2aXexTcagLzRxE9CV4cYySENl3KuOMmccaZpIl6z -aHk6BT4X+M0LqElNUczrInfVqI+SGAFLGy7W6CJaqSr6cpyFUP/fosKpm6wKGgLq -udHfpvz5rckhKd8kJxFLvhGOK9yN5qpzih0gfhECgYAJfwRvk3G5wYmYpP58dlcs -VIuPenqsPoI3PPTHTU/hW+XKnWIhElgmGRdUrto9Q6IT/Y5RtSMLTLjq+Tzwb/fm -56rziYv2XJsfwgAvnI8z1Kqrto9ePsHYf3krJ1/thVsZPc9bq/QY3ohD1sLvcuaT -GgBBnLOVJU3a12/ZE2RwOwKBgF0csWMAoj8/5IB6if+3ral2xOGsl7oPZVMo/J2V -Z7EVqb4M6rd/pKFugTpUQgkwtkSOekhpcGD1hAN5HTNK2YG/+L5UMAsKe9sskwJm -HgOfAHy0BSDzW3ey6i9skg2bT9Cww+0gJ3Hl7U1HSCBO5LjMYpSZSrNtwzfqdb5Q -BX3xAoGARZdR28Ej3+/+0+fz47Yu2h4z0EI/EbrudLOWY936jIeAVwHckI3+BuqH -qR4poj1gfbnMxNuI9UzIXzjEmGewx9kDZ7IYnvloZKqoVQODO5GlKF2ja6IcMNlh -GCNdD6PSAS6HcmalmWo9sj+1YMkrl+GJikKZqVBHrHNwMGAG67w= ------END RSA PRIVATE KEY----- diff --git a/vendor/github.com/google/s2a-go/testdata/mds_client_cert.pem b/vendor/github.com/google/s2a-go/testdata/mds_client_cert.pem deleted file mode 100644 index 60c4cf06..00000000 --- a/vendor/github.com/google/s2a-go/testdata/mds_client_cert.pem +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDCDCCAfACFFlYsYCFit01ZpYmfjxpo7/6wMEbMA0GCSqGSIb3DQEBCwUAMEgx -CzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEPMA0GA1UECgwGR29vZ2xlMRswGQYD -VQQDDBJ0ZXN0LXMyYS1tdGxzLXJvb3QwHhcNMjMwODIyMTY0NTE4WhcNNDMwODIy -MTY0NTE4WjA5MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExHTAbBgNVBAMMFHRl -c3QtczJhLW10bHMtY2xpZW50MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAqrQQMyxNtmdCB+uY3szgRsfPrKC+TV9Fusnd8PfaCVuGTGcSBKM018nV2TDn -3IYFQ1HgLpGwGwOFDBb3y0o9i2/l2VJySriX1GSNX6nDmVasQlO1wuOLCP7/LRmO -7b6Kise5W0IFhYaptKyWnekn2pS0tAjimqpfn2w0U6FDGtQUqg/trQQmGtTSJHjb -A+OFd0EFC18KGP8Q+jOMaMkJRmpeEiAPyHPDoMhqQNT26RApv9j2Uzo4SuXzHH6T -cAdm1+zG+EXY/UZKX9oDkSbwIJvN+gCmNyORLalJ12gsGYOCjMd8K0mlXBqrmmbO -VHVbUm9062lhE7x59AA8DK4DoQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQCPOvtL -dq2hxFHlIy0YUK8jp/DtwJZPwzx1id5FtWwd0CxBS1StIgmkHMxtkJGz1iyQLplI -je+Msd4sTsb5zZi/8kGKehi8Wj4lghp4oP30cpob41OvM68M9RC/wSOVk9igSww+ -l3zof6wKRIswsi5VHrL16ruIVVoDlyFbKr8yk+cp9OPOV8hNNN7ewY9xC8OgnTt8 -YtdaLe6uTplKBLW+j3GtshigRhyfkGJyPFYL4LAeDJCHlC1qmBnkyP0ijMp6vneM -E8TLavnMTMcpihWTWpyKeRkO6HDRsP4AofQAp7VAiAdSOplga+w2qgrVICV+m8MK -BTq2PBvc59T6OFLq ------END CERTIFICATE----- diff --git a/vendor/github.com/google/s2a-go/testdata/mds_client_key.pem b/vendor/github.com/google/s2a-go/testdata/mds_client_key.pem deleted file mode 100644 index 9d112d1e..00000000 --- a/vendor/github.com/google/s2a-go/testdata/mds_client_key.pem +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCqtBAzLE22Z0IH -65jezOBGx8+soL5NX0W6yd3w99oJW4ZMZxIEozTXydXZMOfchgVDUeAukbAbA4UM -FvfLSj2Lb+XZUnJKuJfUZI1fqcOZVqxCU7XC44sI/v8tGY7tvoqKx7lbQgWFhqm0 -rJad6SfalLS0COKaql+fbDRToUMa1BSqD+2tBCYa1NIkeNsD44V3QQULXwoY/xD6 -M4xoyQlGal4SIA/Ic8OgyGpA1PbpECm/2PZTOjhK5fMcfpNwB2bX7Mb4Rdj9Rkpf -2gORJvAgm836AKY3I5EtqUnXaCwZg4KMx3wrSaVcGquaZs5UdVtSb3TraWETvHn0 -ADwMrgOhAgMBAAECggEAUccupZ1ZY4OHTi0PkNk8rpwFwTFGyeFVEf2ofkr24RnA -NnUAXEllxOUUNlcoFOz9s3kTeavg3qgqgpa0QmdAIb9LMXg+ec6CKkW7trMpGho8 -LxBUWNfSoU4sKEqAvyPT0lWJVo9D/up6/avbAi6TIbOw+Djzel4ZrlHTpabxc3WT -EilXzn4q54b3MzxCQeQjcnzTieW4Q5semG2kLiXFToHIY2di01P/O8awUjgrD+uW -/Cb6H49MnHm9VPkqea1iwZeMQd6Gh5FrC7RezsBjdB1JBcfsv6PFt2ySInjB8SF+ -XR5Gr3Cc5sh9s0LfprZ9Dq0rlSWmwasPMI1COK6SswKBgQDczgeWd3erQ1JX9LEI -wollawqC9y7uJhEsw1hrPqA3uqZYiLUc7Nmi4laZ12mcGoXNDS3R3XmD58qGmGaU -lxEVTb8KDVWBgw450VoBKzSMQnCP6zn4nZxTYxeqMKjDGf6TRB6TZc843qsG3eRC -k91yxrCQ/0HV6PT48C+lieDzLwKBgQDF6aNKiyrswr457undBnM1H8q/Y6xC5ZlK -UtiQdhuyBnicvz0U8WPxBY/8gha0OXWuSnBqq/z77iFVNv/zT6p9K7kM7nBGd8cB -8KO6FNbyaHWFrhCI5zNzRTH4oha0hfvUOoti09vqavCtWD4L+D/63ba1wNLKPO9o -4gWbCnUCLwKBgQC/vus372csgrnvR761LLrEJ8BpGt7WUJh5luoht7DKtHvgRleB -Vu1oVcV+s2Iy/ZVUDC3OIdZ0hcWKPK5YOxfKuEk+IXYvke+4peTTPwHTC59UW6Fs -FPK8N0FFuhvT0a8RlAY5WiAp8rPysp6WcnHMSl7qi8BQUozp4Sp/RsziYQKBgBXv -r4mzoy5a53rEYGd/L4XT4EUWZyGDEVqLlDVu4eL5lKTLDZokp08vrqXuRVX0iHap -CYzJQ2EpI8iuL/BoBB2bmwcz5n3pCMXORld5t9lmeqA2it6hwbIlGUTVsm6P6zm6 -w3hQwy9YaxTLkxUAjxbfPEEo/jQsTNzzMGve3NlBAoGAbgJExpDyMDnaD2Vi5eyr -63b54BsqeLHqxJmADifyRCj7G1SJMm3zMKkNNOS0vsXgoiId973STFf1XQiojiv8 -Slbxyv5rczcY0n3LOuQYcM5OzsjzpNFZsT2dDnMfNRUF3rx3Geu/FuJ9scF1b00r -fVMrcL3jSf/W1Xh4TgtyoU8= ------END PRIVATE KEY----- diff --git a/vendor/github.com/google/s2a-go/testdata/mds_root_cert.pem b/vendor/github.com/google/s2a-go/testdata/mds_root_cert.pem deleted file mode 100644 index 44e436f6..00000000 --- a/vendor/github.com/google/s2a-go/testdata/mds_root_cert.pem +++ /dev/null @@ -1,21 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDcTCCAlmgAwIBAgIUDUkgI+2FZtuUHyUUi0ZBH7JvN00wDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMQ8wDQYDVQQKDAZHb29nbGUx -GzAZBgNVBAMMEnRlc3QtczJhLW10bHMtcm9vdDAeFw0yMzA4MjEyMTI5MTVaFw00 -MzA4MjEyMTI5MTVaMEgxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEPMA0GA1UE -CgwGR29vZ2xlMRswGQYDVQQDDBJ0ZXN0LXMyYS1tdGxzLXJvb3QwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCbFEQfpvla27bATedrN4BAWsI9GSwSnJLW -QWzXcnAk6cKxQBAhnaKHRxHY8ttLhNTtxQeub894CLzJvHE/0xDhuMzjtCCCZ7i2 -r08tKZ1KcEzPJCPNlxlzAXPA45XU3LRlbGvju/PBPhm6n1hCEKTNI/KETJ5DEaYg -Cf2LcXVsl/zW20MwDZ+e2w/9a2a6n6DdpW1ekOR550hXAUOIxvmXRBeYeGLFvp1n -rQgZBhRaxP03UB+PQD2oMi/4mfsS96uGCXdzzX8qV46O8m132HUbnA/wagIwboEe -d7Bx237dERDyHw5GFnll7orgA0FOtoEufXdeQxWVvTjO0+PVPgsvAgMBAAGjUzBR -MB0GA1UdDgQWBBRyMtg/yutV8hw8vOq0i8x0eBQi7DAfBgNVHSMEGDAWgBRyMtg/ -yutV8hw8vOq0i8x0eBQi7DAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUA -A4IBAQArN/gdqWMxd5Rvq2eJMTp6I4RepJOT7Go4sMsRsy1caJqqcoS2EvREDZMN -XNEBcyQBB5kYd6TCcZGoLnEtWYXQ4jjEiXG1g7/+rWxyqw0ZYuP7FWzuHg3Uor/x -fApbEKwptP5ywVc+33h4qreGcqXkVCCn+sAcstGgrqubdGZW2T5gazUMyammOOuN -9IWL1PbvXmgEKD+80NUIrk09zanYyrElGdU/zw/kUbZ3Jf6WUBtJGhTzRQ1qZeKa -VnpCbLoG3vObEB8mxDUAlIzwAtfvw4U32BVIZA8xrocz6OOoAnSW1bTlo3EOIo/G -MTV7jmY9TBPtfhRuO/cG650+F+cw ------END CERTIFICATE----- diff --git a/vendor/github.com/google/s2a-go/testdata/mds_server_cert.pem b/vendor/github.com/google/s2a-go/testdata/mds_server_cert.pem deleted file mode 100644 index 68c60613..00000000 --- a/vendor/github.com/google/s2a-go/testdata/mds_server_cert.pem +++ /dev/null @@ -1,21 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDbjCCAlagAwIBAgIUbexZ5sZl86Al9dsI2PkOgtqKnkgwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMQ8wDQYDVQQKDAZHb29nbGUx -GzAZBgNVBAMMEnRlc3QtczJhLW10bHMtcm9vdDAeFw0yMzA4MjIwMDMyMDRaFw00 -MzA4MjIwMDMyMDRaMDkxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEdMBsGA1UE -AwwUdGVzdC1zMmEtbXRscy1zZXJ2ZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQCMEzybsGPqfh92GLwy43mt8kQDF3ztr8y06RwU1hVnY7QqYK4obpvh -HkJVnTz9gwNBF3n5nUalqRzactlf2PCydN9oSYNCO8svVmo7vw1CleKAKFAiV5Qn -H76QlqD15oJreh7nSM8R4qj5KukIHvt0cN0gD6CJQzIURDtsKJwkW3yQjYyT/FAK -GYtFrB6buDn3Eg3Hsw6z7uj7CzLBsSl7BIGrQILbpbI9nFNT3rUTUhXZKY/3UtJA -Ob66AjTmMbD16RGYZR4JsPx6CstheifJ6YSI79r5KgD37zX0jMXFWimvb2SmZmFe -LoohtC8K7uTyjm/dROx6nHXdDt5TQYXHAgMBAAGjXzBdMBsGA1UdEQQUMBKHEAAA -AAAAAAAAAAAAAAAAAAAwHQYDVR0OBBYEFI3i2+tIk6YYn0MIxC0q93jk1VsUMB8G -A1UdIwQYMBaAFHIy2D/K61XyHDy86rSLzHR4FCLsMA0GCSqGSIb3DQEBCwUAA4IB -AQAUhk+s/lrIAULBbU7E22C8f93AzTxE1mhyHGNlfPPJP3t1Dl+h4X4WkFpkz5gT -EcNXB//Vvoq99HbEK5/92sxsIPexKdJBdcggeHXIgLDkOrEZEb0Nnh9eaAuU2QDn -JW44hMB+aF6mEaJvOHE6DRkQw3hwFYFisFKKHtlQ3TyOhw5CHGzSExPZusdSFNIe -2E7V/0QzGPJEFnEFUNe9N8nTH2P385Paoi+5+Iizlp/nztVXfzv0Cj/i+qGgtDUs -HB+gBU2wxMw8eYyuNzACH70wqGR1Parj8/JoyYhx0S4+Gjzy3JH3CcAMaxyfH/dI -4Wcvfz/isxgmH1UqIt3oc6ad ------END CERTIFICATE----- diff --git a/vendor/github.com/google/s2a-go/testdata/mds_server_key.pem b/vendor/github.com/google/s2a-go/testdata/mds_server_key.pem deleted file mode 100644 index b14ad0f7..00000000 --- a/vendor/github.com/google/s2a-go/testdata/mds_server_key.pem +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCMEzybsGPqfh92 -GLwy43mt8kQDF3ztr8y06RwU1hVnY7QqYK4obpvhHkJVnTz9gwNBF3n5nUalqRza -ctlf2PCydN9oSYNCO8svVmo7vw1CleKAKFAiV5QnH76QlqD15oJreh7nSM8R4qj5 -KukIHvt0cN0gD6CJQzIURDtsKJwkW3yQjYyT/FAKGYtFrB6buDn3Eg3Hsw6z7uj7 -CzLBsSl7BIGrQILbpbI9nFNT3rUTUhXZKY/3UtJAOb66AjTmMbD16RGYZR4JsPx6 -CstheifJ6YSI79r5KgD37zX0jMXFWimvb2SmZmFeLoohtC8K7uTyjm/dROx6nHXd -Dt5TQYXHAgMBAAECggEAIB5zGdIG/yh/Z1GBqfuOFaxFGx5iJ5BVlLAVH9P9IXFz -yPnVRXEjbinFlSMSbqEBeIX9EpcVMXxHIPIP1RIGEy2IYr3kiqXyT771ahDDZh6/ -Spqz0UQatSPqyvW3H9uE0Uc12dvQm23JSCUmPRX5m7gbhDQBIChXzdzdcU4Yi59V -4xmJUvbsAcLw5CBM6kwV+1NGVH9+3mUdhrr9M6B6+sVB/xnaqMGEDfQGiwL8U7EY -QOuc46KXu3Pd/qCdVLn60IrdjSzDJKeC5UZZ+ejNAo+DfbtOovBj3qu3OCUg4XVy -0CDBJ1sTdLvUfF4Gb+crjPsd+qBbXcjVfqdadwhsoQKBgQDBF1Pys/NitW8okJwp -2fiDIASP3TiI+MthWHGyuoZGPvmXQ3H6iuLSm8c/iYI2WPTf53Xff1VcFm1GmQms -GCsYM8Ax94zCeO6Ei1sYYxwcBloEZfOeV37MPA4pjJF4Lt+n5nveNxP+lrsjksJz -wToSEgWPDT1b/xcdt4/5j9J85wKBgQC5tiLx+33mwH4DoaFRmSl0+VuSNYFw6DTQ -SQ+kWqWGH4NENc9wf4Dj2VUZQhpXNhXVSxj+aP2d/ck1NrTJAWqYEXCDtFQOGSa2 -cGPRr+Fhy5NIEaEvR7IXcMBZzx3koYmWVBHricyrXs5FvHrT3N14mGDUG8n24U3f -R799bau0IQKBgQC97UM+lHCPJCWNggiJRgSifcje9VtZp1btjoBvq/bNe74nYkjn -htsrC91Fiu1Qpdlfr50K1IXSyaB886VG6JLjAGxI+dUzqJ38M9LLvxj0G+9JKjsi -AbAQFfZcOg8QZxLJZPVsE0MQhZTXndC06VhEVAOxvPUg214Sde8hK61/+wKBgCRw -O10VhnePT2pw/VEgZ0T/ZFtEylgYB7zSiRIrgwzVBBGPKVueePC8BPmGwdpYz2Hh -cU8B1Ll6QU+Co2hJMdwSl+wPpup5PuJPHRbYlrV0lzpt0x2OyL/WrLcyb2Ab3f40 -EqwPhqwdVwXR3JvTW1U9OMqFhVQ+kuP7lPQMX8NhAoGBAJOgZ7Tokipc4Mi68Olw -SCaOPvjjy4sW2rTRuKyjc1wTAzy7SJ3vXHfGkkN99nTLJFwAyJhWUpnRdwAXGi+x -gyOa95ImsEfRSwEjbluWfF8/P0IU8GR+ZTqT4NnNCOsi8T/xst4Szd1ECJNnnZDe -1ChfPP1AH+/75MJCvu6wQBQv ------END PRIVATE KEY----- diff --git a/vendor/github.com/google/s2a-go/testdata/self_signed_cert.pem b/vendor/github.com/google/s2a-go/testdata/self_signed_cert.pem deleted file mode 100644 index ad1bad59..00000000 --- a/vendor/github.com/google/s2a-go/testdata/self_signed_cert.pem +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDITCCAgkCFBS8mLoytMpMWBwpAtnRaq3eIKnsMA0GCSqGSIb3DQEBCwUAME0x -CzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTENMAsGA1UECgwEVGVzdDEiMCAGA1UE -AwwZdGVzdC1zMmEtbXRscy1zZWxmLXNpZ25lZDAeFw0yMzA4MjIyMTE2MDFaFw00 -MzA4MjIyMTE2MDFaME0xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTENMAsGA1UE -CgwEVGVzdDEiMCAGA1UEAwwZdGVzdC1zMmEtbXRscy1zZWxmLXNpZ25lZDCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKFFPsYasKZeCFLEXl3RpE/ZOXFe -2lhutIalSpZvCmso+mQGoZ4cHK7At+kDjBi5CrnXkYcw7quQAhHgU0frhWdj7tsW -HUUtq7T8eaGWKBnVD9fl+MjtAl1BmhXwV9qRBbj4EesSKGDSGpKf66dOtzw83JbB -cU7XlPAH1c1zo2GXC1himcZ+SVGHVrOjn4NmeFs8g94/Dke8dWkHwv5YTMVugFK4 -5KxKgSOKkr4ka7PCBzgxCnW4wYSZNRHcxrqkiArO2HAQq0ACr7u+fVDYH//9mP2Z -ADo/zch7O5yhkiNbjXJIRrptDWEuVYMRloYDhT773h7bV/Q0Wo0NQGtasJ8CAwEA -ATANBgkqhkiG9w0BAQsFAAOCAQEAPjbH0TMyegF/MDvglkc0sXr6DqlmTxDCZZmG -lYPZ5Xy062+rxIHghMARbvO4BxepiG37KsP2agvOldm4TtU8nQ8LyswmSIFm4BQ+ -XQWwdsWyYyd8l0d5sXAdaN6AXwy50fvqCepmEqyreMY6dtLzlwo9gVCBFB7QuAPt -Nc14phpEUZt/KPNuY6cUlB7bz3tmnFbwxUrWj1p0KBEYsr7+KEVZxR+z0wtlU7S9 -ZBrmUvx0fq5Ef7JWtHW0w4ofg1op742sdYl+53C26GZ76ts4MmqVz2/94DScgRaU -gT0GLVuuCZXRDVeTXqTb4mditRCfzFPe9cCegYhGhSqBs8yh5A== ------END CERTIFICATE----- diff --git a/vendor/github.com/google/s2a-go/testdata/self_signed_key.pem b/vendor/github.com/google/s2a-go/testdata/self_signed_key.pem deleted file mode 100644 index bcf08e4f..00000000 --- a/vendor/github.com/google/s2a-go/testdata/self_signed_key.pem +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQChRT7GGrCmXghS -xF5d0aRP2TlxXtpYbrSGpUqWbwprKPpkBqGeHByuwLfpA4wYuQq515GHMO6rkAIR -4FNH64VnY+7bFh1FLau0/HmhligZ1Q/X5fjI7QJdQZoV8FfakQW4+BHrEihg0hqS -n+unTrc8PNyWwXFO15TwB9XNc6NhlwtYYpnGfklRh1azo5+DZnhbPIPePw5HvHVp -B8L+WEzFboBSuOSsSoEjipK+JGuzwgc4MQp1uMGEmTUR3Ma6pIgKzthwEKtAAq+7 -vn1Q2B///Zj9mQA6P83IezucoZIjW41ySEa6bQ1hLlWDEZaGA4U++94e21f0NFqN -DUBrWrCfAgMBAAECggEAR8e8YwyqJ8KezcgdgIC5M9kp2i4v3UCZFX0or8CI0J2S -pUbWVLuKgLXCpfIwPyjNf15Vpei/spkMcsx4BQDthdFTFSzIpmvni0z9DlD5VFYj -ESOJElV7wepbHPy2/c+izmuL/ic81aturGiFyRgeMq+cN3WuaztFTXkPTrzzsZGF -p/Mx3gqm7Hoc3d2xlv+8L5GjCtEJPlQgZJV+s3ennBjOAd8CC7d9qJetE3Er46pn -r5jedV3bQRZYBzmooYNHjbAs26++wYac/jTE0/U6nKS17eWq4BQZUtlMXUw5N81B -7LKn7C03rj2KCn+Nf5uin9ALmoy888LXCDdvL/NZkQKBgQDduv1Heu+tOZuNYUdQ -Hswmd8sVNAAWGZxdxixHMv58zrgbLFXSX6K89X2l5Sj9XON8TH46MuSFdjSwwWw5 -fBrhVEhA5srcqpvVWIBE05yqPpt0s1NQktMWJKELWlG8jOhVKwM5OYDpdxtwehpz -1g70XJz+nF/LTV8RdTK+OWDDpQKBgQC6MhdbGHUz/56dY3gZpE5TXnN2hkNbZCgk -emr6z85VHhQflZbedhCzB9PUnZnCKWOGQHQdxRTtRfd46LVboZqCdYO1ZNQv6toP -ysS7dTpZZFy7CpQaW0Y6/jS65jW6xIDKR1W40vgltZ3sfpG37JaowpzWdw2WuOnw -Bg0rcJAf8wKBgQCqE+p/z97UwuF8eufWnyj9QNo382E1koOMspv4KTdnyLETtthF -vDH6O1wbykG8xmmASLRyM+NyNA+KnXNETNvZh2q8zctBpGRQK8iIAsGjHM7ln0AD -B/x+ea5GJQuZU4RK/+lDFca6TjBwAFkWDVX/PqL18kDQkxKfM4SuwRhmOQKBgDGh -eoJIsa0LnP787Z2AI3Srf4F/ZmLs/ppCm1OBotEjdF+64v0nYWonUvqgi8SqfaHi -elEZIGvis4ViGj1zhRjzNAlc+AZRxpBhDzGcnNIJI4Kj3jhsTfsZmXqcNIQ1LtM8 -Uogyi/yZPaA1WKg7Aym2vlGYaGHdplXZdxc2KOSrAoGABRkD9l2OVcwK7RyNgFxo -mjxx0tfUdDBhHIi2igih1FiHpeP9E+4/kE/K7PnU9DoDrL1jW1MTpXaYV4seOylk -k9z/9QfcRa9ePD2N4FqbHWSYp5n3aLoIcGq/9jyjTwayZbbIhWO+vNuHE9wIvecZ -8x3gNkxJRb4NaLIoNzAhCoo= ------END PRIVATE KEY----- diff --git a/vendor/github.com/google/s2a-go/testdata/server_cert.pem b/vendor/github.com/google/s2a-go/testdata/server_cert.pem deleted file mode 100644 index 0f98322c..00000000 --- a/vendor/github.com/google/s2a-go/testdata/server_cert.pem +++ /dev/null @@ -1,24 +0,0 @@ ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIUKCoDuLtiZXvhsBY2RoDm0ugizJ8wDQYJKoZIhvcNAQEL -BQAwgYcxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJU3Vubnl2 -YWxlMRAwDgYDVQQKDAdDb21wYW55MREwDwYDVQQLDAhEaXZpc2lvbjEWMBQGA1UE -AwwNczJhX3Rlc3RfY2VydDEaMBgGCSqGSIb3DQEJARYLeHl6QHh5ei5jb20wHhcN -MjIwNTMxMjAwODI1WhcNNDIwNTI2MjAwODI1WjCBhzELMAkGA1UEBhMCVVMxCzAJ -BgNVBAgMAkNBMRIwEAYDVQQHDAlTdW5ueXZhbGUxEDAOBgNVBAoMB0NvbXBhbnkx -ETAPBgNVBAsMCERpdmlzaW9uMRYwFAYDVQQDDA1zMmFfdGVzdF9jZXJ0MRowGAYJ -KoZIhvcNAQkBFgt4eXpAeHl6LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAKK1++PXQ+M3hjYH/v0K4UEYl5ljzpNM1i52eQM+gFooojT87PDSaphT -fs0PXy/PTAjHBEvPhWpOpmQXfJNYzjwcCvg66hbqkv++/VTZiFLAsHagzkEz+FRJ -qT5Eq7G5FLyw1izX1uxyPN7tAEWEEg7eqsiaXD3Cq8+TYN9cjirPeF7RZF8yFCYE -xqvbo+Yc6RL6xw19iXVTfctRgQe581KQuIY5/LXo3dWDEilFdsADAe8XAEcO64es -Ow0g1UvXLnpXSE151kXBFb3sKH/ZjCecDYMCIMEb4sWLSblkSxJ5sNSmXIG4wtr2 -Qnii7CXZgnVYraQE/Jyh+NMQANuoSdMCAwEAAaNTMFEwHQYDVR0OBBYEFAyQQQuM -ab+YUQqjK8dVVOoHVFmXMB8GA1UdIwQYMBaAFAyQQQuMab+YUQqjK8dVVOoHVFmX -MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBADj0vQ6ykWhicoqR -e6VZMwlEJV7/DSvWWKBd9MUjfKye0A4565ya5lmnzP3DiD3nqGe3miqmLsXKDs+X -POqlPXTWIamP7D4MJ32XtSLwZB4ru+I+Ao/P/VngPepoRPQoBnzHe7jww0rokqxl -AZERjlbTUwUAy/BPWPSzSJZ2j0tcs6ZLDNyYzpK4ao8R9/1VmQ92Tcp3feJs1QTg -odRQc3om/AkWOwsll+oyX0UbJeHkFHiLanUPXbdh+/BkSvZJ8ynL+feSDdaurPe+ -PSfnqLtQft9/neecGRdEaQzzzSFVQUVQzTdK1Q7hA7b55b2HvIa3ktDiks+sJsYN -Dhm6uZM= ------END CERTIFICATE----- diff --git a/vendor/github.com/google/s2a-go/testdata/server_key.pem b/vendor/github.com/google/s2a-go/testdata/server_key.pem deleted file mode 100644 index 81afea78..00000000 --- a/vendor/github.com/google/s2a-go/testdata/server_key.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAorX749dD4zeGNgf+/QrhQRiXmWPOk0zWLnZ5Az6AWiiiNPzs -8NJqmFN+zQ9fL89MCMcES8+Fak6mZBd8k1jOPBwK+DrqFuqS/779VNmIUsCwdqDO -QTP4VEmpPkSrsbkUvLDWLNfW7HI83u0ARYQSDt6qyJpcPcKrz5Ng31yOKs94XtFk -XzIUJgTGq9uj5hzpEvrHDX2JdVN9y1GBB7nzUpC4hjn8tejd1YMSKUV2wAMB7xcA -Rw7rh6w7DSDVS9cueldITXnWRcEVvewof9mMJ5wNgwIgwRvixYtJuWRLEnmw1KZc -gbjC2vZCeKLsJdmCdVitpAT8nKH40xAA26hJ0wIDAQABAoIBACaNR+lsD8G+XiZf -LqN1+HkcAo9tfnyYMAdCOtnx7SdviT9Uzi8hK/B7mAeuJLeHPlS2EuaDfPD7QaFl -jza6S+MiIdc+3kgfvESsVAnOoOY6kZUJ9NSuI6CU82y1iJjLaYZrv9NQMLRFPPb0 -4KOX709mosB1EnXvshW0rbc+jtDFhrm1SxMt+k9TuzmMxjbOeW4LOLXPgU8X1T3Q -Xy0hMZZtcgBs9wFIo8yCtmOixax9pnFE8rRltgDxTodn9LLdz1FieyntNgDksZ0P -nt4kV7Mqly7ELaea+Foaj244mKsesic2e3GhAlMRLun/VSunSf7mOCxfpITB8dp1 -drDhOYECgYEA19151dVxRcviuovN6Dar+QszMTnU8pDJ8BjLFjXjP/hNBBwMTHDE -duMuWk2qnwZqMooI/shxrF/ufmTgS0CFrh2+ANBZu27vWConJNXcyNtdigI4wt50 -L0Y2qcZn2mg67qFXHwoR3QNwrwnPwEjRXA09at9CSRZzcwDQ0ETXhYsCgYEAwPaG -06QdK8Zyly7TTzZJwxzv9uGiqzodmGtX6NEKjgij2JaCxHpukqZBJoqa0jKeK1cm -eNVkOvT5ff9TMzarSHQLr3pZen2/oVLb5gaFkbcJt/klv9Fd+ZRilHY3i6QwS6pD -uMiPOWS4DrLHDRVoVlAZTDjT1RVwwTs+P2NhJdkCgYEAsriXysbxBYyMp05gqEW7 -lHIFbFgpSrs9th+Q5U6wW6JEgYaHWDJ1NslY80MiZI93FWjbkbZ7BvBWESeL3EIL -a+EMErht0pVCbIhZ6FF4foPAqia0wAJVx14mm+G80kNBp5jE/NnleEsE3KcO7nBb -hg8gLn+x7bk81JZ0TDrzBYkCgYEAuQKluv47SeF3tSScTfKLPpvcKCWmxe1uutkQ -7JShPhVioyOMNb39jnYBOWbjkm4d4QgqRuiytSR0oi3QI+Ziy5EYMyNn713qAk9j -r2TJZDDPDKnBW+zt4YI4EohWMXk3JRUW4XDKggjjwJQA7bZ812TtHHvP/xoThfG7 -eSNb3eECgYBw6ssgCtMrdvQiEmjKVX/9yI38mvC2kSGyzbrQnGUfgqRGomRpeZuD -B5E3kysA4td5pT5lvcLgSW0TbOz+YbiriXjwOihPIelCvc9gE2eOUI71/byUWPFz -7u5F/xQ4NaGr5suLF+lBC6h7pSbM4El9lIHQAQadpuEdzHqrw+hs3g== ------END RSA PRIVATE KEY----- diff --git a/vendor/github.com/klauspost/compress/.goreleaser.yml b/vendor/github.com/klauspost/compress/.goreleaser.yml index a2295380..4528059c 100644 --- a/vendor/github.com/klauspost/compress/.goreleaser.yml +++ b/vendor/github.com/klauspost/compress/.goreleaser.yml @@ -1,5 +1,5 @@ -# This is an example goreleaser.yaml file with some sane defaults. -# Make sure to check the documentation at http://goreleaser.com +version: 2 + before: hooks: - ./gen.sh @@ -99,7 +99,7 @@ archives: checksum: name_template: 'checksums.txt' snapshot: - name_template: "{{ .Tag }}-next" + version_template: "{{ .Tag }}-next" changelog: sort: asc filters: diff --git a/vendor/github.com/klauspost/compress/README.md b/vendor/github.com/klauspost/compress/README.md index 05c7359e..de264c85 100644 --- a/vendor/github.com/klauspost/compress/README.md +++ b/vendor/github.com/klauspost/compress/README.md @@ -16,6 +16,27 @@ This package provides various compression algorithms. # changelog +* Sep 23rd, 2024 - [1.17.10](https://github.com/klauspost/compress/releases/tag/v1.17.10) + * gzhttp: Add TransportAlwaysDecompress option. https://github.com/klauspost/compress/pull/978 + * gzhttp: Add supported decompress request body by @mirecl in https://github.com/klauspost/compress/pull/1002 + * s2: Add EncodeBuffer buffer recycling callback https://github.com/klauspost/compress/pull/982 + * zstd: Improve memory usage on small streaming encodes https://github.com/klauspost/compress/pull/1007 + * flate: read data written with partial flush by @vajexal in https://github.com/klauspost/compress/pull/996 + +* Jun 12th, 2024 - [1.17.9](https://github.com/klauspost/compress/releases/tag/v1.17.9) + * s2: Reduce ReadFrom temporary allocations https://github.com/klauspost/compress/pull/949 + * flate, zstd: Shave some bytes off amd64 matchLen by @greatroar in https://github.com/klauspost/compress/pull/963 + * Upgrade zip/zlib to 1.22.4 upstream https://github.com/klauspost/compress/pull/970 https://github.com/klauspost/compress/pull/971 + * zstd: BuildDict fails with RLE table https://github.com/klauspost/compress/pull/951 + +* Apr 9th, 2024 - [1.17.8](https://github.com/klauspost/compress/releases/tag/v1.17.8) + * zstd: Reject blocks where reserved values are not 0 https://github.com/klauspost/compress/pull/885 + * zstd: Add RLE detection+encoding https://github.com/klauspost/compress/pull/938 + +* Feb 21st, 2024 - [1.17.7](https://github.com/klauspost/compress/releases/tag/v1.17.7) + * s2: Add AsyncFlush method: Complete the block without flushing by @Jille in https://github.com/klauspost/compress/pull/927 + * s2: Fix literal+repeat exceeds dst crash https://github.com/klauspost/compress/pull/930 + * Feb 5th, 2024 - [1.17.6](https://github.com/klauspost/compress/releases/tag/v1.17.6) * zstd: Fix incorrect repeat coding in best mode https://github.com/klauspost/compress/pull/923 * s2: Fix DecodeConcurrent deadlock on errors https://github.com/klauspost/compress/pull/925 @@ -81,7 +102,7 @@ https://github.com/klauspost/compress/pull/919 https://github.com/klauspost/comp * zstd: Various minor improvements by @greatroar in https://github.com/klauspost/compress/pull/788 https://github.com/klauspost/compress/pull/794 https://github.com/klauspost/compress/pull/795 * s2: Fix huge block overflow https://github.com/klauspost/compress/pull/779 * s2: Allow CustomEncoder fallback https://github.com/klauspost/compress/pull/780 - * gzhttp: Suppport ResponseWriter Unwrap() in gzhttp handler by @jgimenez in https://github.com/klauspost/compress/pull/799 + * gzhttp: Support ResponseWriter Unwrap() in gzhttp handler by @jgimenez in https://github.com/klauspost/compress/pull/799 * Mar 13, 2023 - [v1.16.1](https://github.com/klauspost/compress/releases/tag/v1.16.1) * zstd: Speed up + improve best encoder by @greatroar in https://github.com/klauspost/compress/pull/776 @@ -136,7 +157,7 @@ https://github.com/klauspost/compress/pull/919 https://github.com/klauspost/comp * zstd: Add [WithDecodeAllCapLimit](https://pkg.go.dev/github.com/klauspost/compress@v1.15.10/zstd#WithDecodeAllCapLimit) https://github.com/klauspost/compress/pull/649 * Add Go 1.19 - deprecate Go 1.16 https://github.com/klauspost/compress/pull/651 * flate: Improve level 5+6 compression https://github.com/klauspost/compress/pull/656 - * zstd: Improve "better" compresssion https://github.com/klauspost/compress/pull/657 + * zstd: Improve "better" compression https://github.com/klauspost/compress/pull/657 * s2: Improve "best" compression https://github.com/klauspost/compress/pull/658 * s2: Improve "better" compression. https://github.com/klauspost/compress/pull/635 * s2: Slightly faster non-assembly decompression https://github.com/klauspost/compress/pull/646 @@ -339,7 +360,7 @@ While the release has been extensively tested, it is recommended to testing when * s2: Fix binaries. * Feb 25, 2021 (v1.11.8) - * s2: Fixed occational out-of-bounds write on amd64. Upgrade recommended. + * s2: Fixed occasional out-of-bounds write on amd64. Upgrade recommended. * s2: Add AMD64 assembly for better mode. 25-50% faster. [#315](https://github.com/klauspost/compress/pull/315) * s2: Less upfront decoder allocation. [#322](https://github.com/klauspost/compress/pull/322) * zstd: Faster "compression" of incompressible data. [#314](https://github.com/klauspost/compress/pull/314) @@ -518,7 +539,7 @@ While the release has been extensively tested, it is recommended to testing when * Feb 19, 2016: Faster bit writer, level -2 is 15% faster, level 1 is 4% faster. * Feb 19, 2016: Handle small payloads faster in level 1-3. * Feb 19, 2016: Added faster level 2 + 3 compression modes. -* Feb 19, 2016: [Rebalanced compression levels](https://blog.klauspost.com/rebalancing-deflate-compression-levels/), so there is a more even progresssion in terms of compression. New default level is 5. +* Feb 19, 2016: [Rebalanced compression levels](https://blog.klauspost.com/rebalancing-deflate-compression-levels/), so there is a more even progression in terms of compression. New default level is 5. * Feb 14, 2016: Snappy: Merge upstream changes. * Feb 14, 2016: Snappy: Fix aggressive skipping. * Feb 14, 2016: Snappy: Update benchmark. diff --git a/vendor/github.com/klauspost/compress/fse/decompress.go b/vendor/github.com/klauspost/compress/fse/decompress.go index cc05d0f7..0c7dd4ff 100644 --- a/vendor/github.com/klauspost/compress/fse/decompress.go +++ b/vendor/github.com/klauspost/compress/fse/decompress.go @@ -15,7 +15,7 @@ const ( // It is possible, but by no way guaranteed that corrupt data will // return an error. // It is up to the caller to verify integrity of the returned data. -// Use a predefined Scrach to set maximum acceptable output size. +// Use a predefined Scratch to set maximum acceptable output size. func Decompress(b []byte, s *Scratch) ([]byte, error) { s, err := s.prepare(b) if err != nil { diff --git a/vendor/github.com/klauspost/compress/huff0/decompress.go b/vendor/github.com/klauspost/compress/huff0/decompress.go index 54bd08b2..0f56b02d 100644 --- a/vendor/github.com/klauspost/compress/huff0/decompress.go +++ b/vendor/github.com/klauspost/compress/huff0/decompress.go @@ -1136,7 +1136,7 @@ func (s *Scratch) matches(ct cTable, w io.Writer) { errs++ } if errs > 0 { - fmt.Fprintf(w, "%d errros in base, stopping\n", errs) + fmt.Fprintf(w, "%d errors in base, stopping\n", errs) continue } // Ensure that all combinations are covered. @@ -1152,7 +1152,7 @@ func (s *Scratch) matches(ct cTable, w io.Writer) { errs++ } if errs > 20 { - fmt.Fprintf(w, "%d errros, stopping\n", errs) + fmt.Fprintf(w, "%d errors, stopping\n", errs) break } } diff --git a/vendor/github.com/klauspost/compress/zstd/blockdec.go b/vendor/github.com/klauspost/compress/zstd/blockdec.go index 03744fbc..9c28840c 100644 --- a/vendor/github.com/klauspost/compress/zstd/blockdec.go +++ b/vendor/github.com/klauspost/compress/zstd/blockdec.go @@ -598,7 +598,9 @@ func (b *blockDec) prepareSequences(in []byte, hist *history) (err error) { printf("RLE set to 0x%x, code: %v", symb, v) } case compModeFSE: - println("Reading table for", tableIndex(i)) + if debugDecoder { + println("Reading table for", tableIndex(i)) + } if seq.fse == nil || seq.fse.preDefined { seq.fse = fseDecoderPool.Get().(*fseDecoder) } diff --git a/vendor/github.com/klauspost/compress/zstd/enc_better.go b/vendor/github.com/klauspost/compress/zstd/enc_better.go index a4f5bf91..84a79fde 100644 --- a/vendor/github.com/klauspost/compress/zstd/enc_better.go +++ b/vendor/github.com/klauspost/compress/zstd/enc_better.go @@ -179,9 +179,9 @@ encodeLoop: if repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>(repOff*8)) { // Consider history as well. var seq seq - lenght := 4 + e.matchlen(s+4+repOff, repIndex+4, src) + length := 4 + e.matchlen(s+4+repOff, repIndex+4, src) - seq.matchLen = uint32(lenght - zstdMinMatch) + seq.matchLen = uint32(length - zstdMinMatch) // We might be able to match backwards. // Extend as long as we can. @@ -210,12 +210,12 @@ encodeLoop: // Index match start+1 (long) -> s - 1 index0 := s + repOff - s += lenght + repOff + s += length + repOff nextEmit = s if s >= sLimit { if debugEncoder { - println("repeat ended", s, lenght) + println("repeat ended", s, length) } break encodeLoop @@ -241,9 +241,9 @@ encodeLoop: if false && repIndex >= 0 && load6432(src, repIndex) == load6432(src, s+repOff) { // Consider history as well. var seq seq - lenght := 8 + e.matchlen(s+8+repOff2, repIndex+8, src) + length := 8 + e.matchlen(s+8+repOff2, repIndex+8, src) - seq.matchLen = uint32(lenght - zstdMinMatch) + seq.matchLen = uint32(length - zstdMinMatch) // We might be able to match backwards. // Extend as long as we can. @@ -270,11 +270,11 @@ encodeLoop: } blk.sequences = append(blk.sequences, seq) - s += lenght + repOff2 + s += length + repOff2 nextEmit = s if s >= sLimit { if debugEncoder { - println("repeat ended", s, lenght) + println("repeat ended", s, length) } break encodeLoop @@ -708,9 +708,9 @@ encodeLoop: if repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>(repOff*8)) { // Consider history as well. var seq seq - lenght := 4 + e.matchlen(s+4+repOff, repIndex+4, src) + length := 4 + e.matchlen(s+4+repOff, repIndex+4, src) - seq.matchLen = uint32(lenght - zstdMinMatch) + seq.matchLen = uint32(length - zstdMinMatch) // We might be able to match backwards. // Extend as long as we can. @@ -738,12 +738,12 @@ encodeLoop: blk.sequences = append(blk.sequences, seq) // Index match start+1 (long) -> s - 1 - s += lenght + repOff + s += length + repOff nextEmit = s if s >= sLimit { if debugEncoder { - println("repeat ended", s, lenght) + println("repeat ended", s, length) } break encodeLoop @@ -772,9 +772,9 @@ encodeLoop: if false && repIndex >= 0 && load6432(src, repIndex) == load6432(src, s+repOff) { // Consider history as well. var seq seq - lenght := 8 + e.matchlen(s+8+repOff2, repIndex+8, src) + length := 8 + e.matchlen(s+8+repOff2, repIndex+8, src) - seq.matchLen = uint32(lenght - zstdMinMatch) + seq.matchLen = uint32(length - zstdMinMatch) // We might be able to match backwards. // Extend as long as we can. @@ -801,11 +801,11 @@ encodeLoop: } blk.sequences = append(blk.sequences, seq) - s += lenght + repOff2 + s += length + repOff2 nextEmit = s if s >= sLimit { if debugEncoder { - println("repeat ended", s, lenght) + println("repeat ended", s, length) } break encodeLoop diff --git a/vendor/github.com/klauspost/compress/zstd/enc_dfast.go b/vendor/github.com/klauspost/compress/zstd/enc_dfast.go index a154c18f..d36be7bd 100644 --- a/vendor/github.com/klauspost/compress/zstd/enc_dfast.go +++ b/vendor/github.com/klauspost/compress/zstd/enc_dfast.go @@ -138,9 +138,9 @@ encodeLoop: if repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>(repOff*8)) { // Consider history as well. var seq seq - lenght := 4 + e.matchlen(s+4+repOff, repIndex+4, src) + length := 4 + e.matchlen(s+4+repOff, repIndex+4, src) - seq.matchLen = uint32(lenght - zstdMinMatch) + seq.matchLen = uint32(length - zstdMinMatch) // We might be able to match backwards. // Extend as long as we can. @@ -166,11 +166,11 @@ encodeLoop: println("repeat sequence", seq, "next s:", s) } blk.sequences = append(blk.sequences, seq) - s += lenght + repOff + s += length + repOff nextEmit = s if s >= sLimit { if debugEncoder { - println("repeat ended", s, lenght) + println("repeat ended", s, length) } break encodeLoop @@ -798,9 +798,9 @@ encodeLoop: if repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>(repOff*8)) { // Consider history as well. var seq seq - lenght := 4 + e.matchlen(s+4+repOff, repIndex+4, src) + length := 4 + e.matchlen(s+4+repOff, repIndex+4, src) - seq.matchLen = uint32(lenght - zstdMinMatch) + seq.matchLen = uint32(length - zstdMinMatch) // We might be able to match backwards. // Extend as long as we can. @@ -826,11 +826,11 @@ encodeLoop: println("repeat sequence", seq, "next s:", s) } blk.sequences = append(blk.sequences, seq) - s += lenght + repOff + s += length + repOff nextEmit = s if s >= sLimit { if debugEncoder { - println("repeat ended", s, lenght) + println("repeat ended", s, length) } break encodeLoop diff --git a/vendor/github.com/klauspost/compress/zstd/encoder.go b/vendor/github.com/klauspost/compress/zstd/encoder.go index 72af7ef0..8f8223cd 100644 --- a/vendor/github.com/klauspost/compress/zstd/encoder.go +++ b/vendor/github.com/klauspost/compress/zstd/encoder.go @@ -6,6 +6,7 @@ package zstd import ( "crypto/rand" + "errors" "fmt" "io" "math" @@ -149,6 +150,9 @@ func (e *Encoder) ResetContentSize(w io.Writer, size int64) { // and write CRC if requested. func (e *Encoder) Write(p []byte) (n int, err error) { s := &e.state + if s.eofWritten { + return 0, ErrEncoderClosed + } for len(p) > 0 { if len(p)+len(s.filling) < e.o.blockSize { if e.o.crc { @@ -202,7 +206,7 @@ func (e *Encoder) nextBlock(final bool) error { return nil } if final && len(s.filling) > 0 { - s.current = e.EncodeAll(s.filling, s.current[:0]) + s.current = e.encodeAll(s.encoder, s.filling, s.current[:0]) var n2 int n2, s.err = s.w.Write(s.current) if s.err != nil { @@ -288,6 +292,9 @@ func (e *Encoder) nextBlock(final bool) error { s.filling, s.current, s.previous = s.previous[:0], s.filling, s.current s.nInput += int64(len(s.current)) s.wg.Add(1) + if final { + s.eofWritten = true + } go func(src []byte) { if debugEncoder { println("Adding block,", len(src), "bytes, final:", final) @@ -303,9 +310,6 @@ func (e *Encoder) nextBlock(final bool) error { blk := enc.Block() enc.Encode(blk, src) blk.last = final - if final { - s.eofWritten = true - } // Wait for pending writes. s.wWg.Wait() if s.writeErr != nil { @@ -401,12 +405,20 @@ func (e *Encoder) Flush() error { if len(s.filling) > 0 { err := e.nextBlock(false) if err != nil { + // Ignore Flush after Close. + if errors.Is(s.err, ErrEncoderClosed) { + return nil + } return err } } s.wg.Wait() s.wWg.Wait() if s.err != nil { + // Ignore Flush after Close. + if errors.Is(s.err, ErrEncoderClosed) { + return nil + } return s.err } return s.writeErr @@ -422,6 +434,9 @@ func (e *Encoder) Close() error { } err := e.nextBlock(true) if err != nil { + if errors.Is(s.err, ErrEncoderClosed) { + return nil + } return err } if s.frameContentSize > 0 { @@ -459,6 +474,11 @@ func (e *Encoder) Close() error { } _, s.err = s.w.Write(frame) } + if s.err == nil { + s.err = ErrEncoderClosed + return nil + } + return s.err } @@ -469,6 +489,15 @@ func (e *Encoder) Close() error { // Data compressed with EncodeAll can be decoded with the Decoder, // using either a stream or DecodeAll. func (e *Encoder) EncodeAll(src, dst []byte) []byte { + e.init.Do(e.initialize) + enc := <-e.encoders + defer func() { + e.encoders <- enc + }() + return e.encodeAll(enc, src, dst) +} + +func (e *Encoder) encodeAll(enc encoder, src, dst []byte) []byte { if len(src) == 0 { if e.o.fullZero { // Add frame header. @@ -491,13 +520,7 @@ func (e *Encoder) EncodeAll(src, dst []byte) []byte { } return dst } - e.init.Do(e.initialize) - enc := <-e.encoders - defer func() { - // Release encoder reference to last block. - // If a non-single block is needed the encoder will reset again. - e.encoders <- enc - }() + // Use single segments when above minimum window and below window size. single := len(src) <= e.o.windowSize && len(src) > MinWindowSize if e.o.single != nil { diff --git a/vendor/github.com/klauspost/compress/zstd/framedec.go b/vendor/github.com/klauspost/compress/zstd/framedec.go index 53e160f7..e47af66e 100644 --- a/vendor/github.com/klauspost/compress/zstd/framedec.go +++ b/vendor/github.com/klauspost/compress/zstd/framedec.go @@ -146,7 +146,9 @@ func (d *frameDec) reset(br byteBuffer) error { } return err } - printf("raw: %x, mantissa: %d, exponent: %d\n", wd, wd&7, wd>>3) + if debugDecoder { + printf("raw: %x, mantissa: %d, exponent: %d\n", wd, wd&7, wd>>3) + } windowLog := 10 + (wd >> 3) windowBase := uint64(1) << windowLog windowAdd := (windowBase / 8) * uint64(wd&0x7) diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go index 8adabd82..c59f17e0 100644 --- a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go @@ -146,7 +146,7 @@ func (s *sequenceDecs) decodeSyncSimple(hist []byte) (bool, error) { return true, fmt.Errorf("output bigger than max block size (%d)", maxBlockSize) default: - return true, fmt.Errorf("sequenceDecs_decode returned erronous code %d", errCode) + return true, fmt.Errorf("sequenceDecs_decode returned erroneous code %d", errCode) } s.seqSize += ctx.litRemain @@ -292,7 +292,7 @@ func (s *sequenceDecs) decode(seqs []seqVals) error { return io.ErrUnexpectedEOF } - return fmt.Errorf("sequenceDecs_decode_amd64 returned erronous code %d", errCode) + return fmt.Errorf("sequenceDecs_decode_amd64 returned erroneous code %d", errCode) } if ctx.litRemain < 0 { diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s index 5b06174b..f5591fa1 100644 --- a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s @@ -1814,7 +1814,7 @@ TEXT ·sequenceDecs_decodeSync_amd64(SB), $64-32 MOVQ 40(SP), AX ADDQ AX, 48(SP) - // Calculate poiter to s.out[cap(s.out)] (a past-end pointer) + // Calculate pointer to s.out[cap(s.out)] (a past-end pointer) ADDQ R10, 32(SP) // outBase += outPosition @@ -2376,7 +2376,7 @@ TEXT ·sequenceDecs_decodeSync_bmi2(SB), $64-32 MOVQ 40(SP), CX ADDQ CX, 48(SP) - // Calculate poiter to s.out[cap(s.out)] (a past-end pointer) + // Calculate pointer to s.out[cap(s.out)] (a past-end pointer) ADDQ R9, 32(SP) // outBase += outPosition @@ -2896,7 +2896,7 @@ TEXT ·sequenceDecs_decodeSync_safe_amd64(SB), $64-32 MOVQ 40(SP), AX ADDQ AX, 48(SP) - // Calculate poiter to s.out[cap(s.out)] (a past-end pointer) + // Calculate pointer to s.out[cap(s.out)] (a past-end pointer) ADDQ R10, 32(SP) // outBase += outPosition @@ -3560,7 +3560,7 @@ TEXT ·sequenceDecs_decodeSync_safe_bmi2(SB), $64-32 MOVQ 40(SP), CX ADDQ CX, 48(SP) - // Calculate poiter to s.out[cap(s.out)] (a past-end pointer) + // Calculate pointer to s.out[cap(s.out)] (a past-end pointer) ADDQ R9, 32(SP) // outBase += outPosition diff --git a/vendor/github.com/klauspost/compress/zstd/zstd.go b/vendor/github.com/klauspost/compress/zstd/zstd.go index 4be7cc73..066bef2a 100644 --- a/vendor/github.com/klauspost/compress/zstd/zstd.go +++ b/vendor/github.com/klauspost/compress/zstd/zstd.go @@ -88,6 +88,10 @@ var ( // Close has been called. ErrDecoderClosed = errors.New("decoder used after Close") + // ErrEncoderClosed will be returned if the Encoder was used after + // Close has been called. + ErrEncoderClosed = errors.New("encoder used after Close") + // ErrDecoderNilInput is returned when a nil Reader was provided // and an operation other than Reset/DecodeAll/Close was attempted. ErrDecoderNilInput = errors.New("nil input provided as reader") diff --git a/vendor/github.com/klauspost/cpuid/v2/README.md b/vendor/github.com/klauspost/cpuid/v2/README.md index 30f8d296..f06ba51c 100644 --- a/vendor/github.com/klauspost/cpuid/v2/README.md +++ b/vendor/github.com/klauspost/cpuid/v2/README.md @@ -281,6 +281,7 @@ Exit Code 1 | AMXBF16 | Tile computational operations on BFLOAT16 numbers | | AMXINT8 | Tile computational operations on 8-bit integers | | AMXFP16 | Tile computational operations on FP16 numbers | +| AMXFP8 | Tile computational operations on FP8 numbers | | AMXTILE | Tile architecture | | APX_F | Intel APX | | AVX | AVX functions | @@ -310,6 +311,7 @@ Exit Code 1 | AVXSLOW | Indicates the CPU performs 2 128 bit operations instead of one | | AVXVNNI | AVX (VEX encoded) VNNI neural network instructions | | AVXVNNIINT8 | AVX-VNNI-INT8 instructions | +| AVXVNNIINT16 | AVX-VNNI-INT16 instructions | | BHI_CTRL | Branch History Injection and Intra-mode Branch Target Injection / CVE-2022-0001, CVE-2022-0002 / INTEL-SA-00598 | | BMI1 | Bit Manipulation Instruction Set 1 | | BMI2 | Bit Manipulation Instruction Set 2 | diff --git a/vendor/github.com/klauspost/cpuid/v2/cpuid.go b/vendor/github.com/klauspost/cpuid/v2/cpuid.go index 15b76033..db99eb62 100644 --- a/vendor/github.com/klauspost/cpuid/v2/cpuid.go +++ b/vendor/github.com/klauspost/cpuid/v2/cpuid.go @@ -55,6 +55,12 @@ const ( Qualcomm Marvell + QEMU + QNX + ACRN + SRE + Apple + lastVendor ) @@ -67,195 +73,202 @@ const ( // Keep index -1 as unknown UNKNOWN = -1 - // Add features - ADX FeatureID = iota // Intel ADX (Multi-Precision Add-Carry Instruction Extensions) - AESNI // Advanced Encryption Standard New Instructions - AMD3DNOW // AMD 3DNOW - AMD3DNOWEXT // AMD 3DNowExt - AMXBF16 // Tile computational operations on BFLOAT16 numbers - AMXFP16 // Tile computational operations on FP16 numbers - AMXINT8 // Tile computational operations on 8-bit integers - AMXTILE // Tile architecture - APX_F // Intel APX - AVX // AVX functions - AVX10 // If set the Intel AVX10 Converged Vector ISA is supported - AVX10_128 // If set indicates that AVX10 128-bit vector support is present - AVX10_256 // If set indicates that AVX10 256-bit vector support is present - AVX10_512 // If set indicates that AVX10 512-bit vector support is present - AVX2 // AVX2 functions - AVX512BF16 // AVX-512 BFLOAT16 Instructions - AVX512BITALG // AVX-512 Bit Algorithms - AVX512BW // AVX-512 Byte and Word Instructions - AVX512CD // AVX-512 Conflict Detection Instructions - AVX512DQ // AVX-512 Doubleword and Quadword Instructions - AVX512ER // AVX-512 Exponential and Reciprocal Instructions - AVX512F // AVX-512 Foundation - AVX512FP16 // AVX-512 FP16 Instructions - AVX512IFMA // AVX-512 Integer Fused Multiply-Add Instructions - AVX512PF // AVX-512 Prefetch Instructions - AVX512VBMI // AVX-512 Vector Bit Manipulation Instructions - AVX512VBMI2 // AVX-512 Vector Bit Manipulation Instructions, Version 2 - AVX512VL // AVX-512 Vector Length Extensions - AVX512VNNI // AVX-512 Vector Neural Network Instructions - AVX512VP2INTERSECT // AVX-512 Intersect for D/Q - AVX512VPOPCNTDQ // AVX-512 Vector Population Count Doubleword and Quadword - AVXIFMA // AVX-IFMA instructions - AVXNECONVERT // AVX-NE-CONVERT instructions - AVXSLOW // Indicates the CPU performs 2 128 bit operations instead of one - AVXVNNI // AVX (VEX encoded) VNNI neural network instructions - AVXVNNIINT8 // AVX-VNNI-INT8 instructions - BHI_CTRL // Branch History Injection and Intra-mode Branch Target Injection / CVE-2022-0001, CVE-2022-0002 / INTEL-SA-00598 - BMI1 // Bit Manipulation Instruction Set 1 - BMI2 // Bit Manipulation Instruction Set 2 - CETIBT // Intel CET Indirect Branch Tracking - CETSS // Intel CET Shadow Stack - CLDEMOTE // Cache Line Demote - CLMUL // Carry-less Multiplication - CLZERO // CLZERO instruction supported - CMOV // i686 CMOV - CMPCCXADD // CMPCCXADD instructions - CMPSB_SCADBS_SHORT // Fast short CMPSB and SCASB - CMPXCHG8 // CMPXCHG8 instruction - CPBOOST // Core Performance Boost - CPPC // AMD: Collaborative Processor Performance Control - CX16 // CMPXCHG16B Instruction - EFER_LMSLE_UNS // AMD: =Core::X86::Msr::EFER[LMSLE] is not supported, and MBZ - ENQCMD // Enqueue Command - ERMS // Enhanced REP MOVSB/STOSB - F16C // Half-precision floating-point conversion - FLUSH_L1D // Flush L1D cache - FMA3 // Intel FMA 3. Does not imply AVX. - FMA4 // Bulldozer FMA4 functions - FP128 // AMD: When set, the internal FP/SIMD execution datapath is no more than 128-bits wide - FP256 // AMD: When set, the internal FP/SIMD execution datapath is no more than 256-bits wide - FSRM // Fast Short Rep Mov - FXSR // FXSAVE, FXRESTOR instructions, CR4 bit 9 - FXSROPT // FXSAVE/FXRSTOR optimizations - GFNI // Galois Field New Instructions. May require other features (AVX, AVX512VL,AVX512F) based on usage. - HLE // Hardware Lock Elision - HRESET // If set CPU supports history reset and the IA32_HRESET_ENABLE MSR - HTT // Hyperthreading (enabled) - HWA // Hardware assert supported. Indicates support for MSRC001_10 - HYBRID_CPU // This part has CPUs of more than one type. - HYPERVISOR // This bit has been reserved by Intel & AMD for use by hypervisors - IA32_ARCH_CAP // IA32_ARCH_CAPABILITIES MSR (Intel) - IA32_CORE_CAP // IA32_CORE_CAPABILITIES MSR - IBPB // Indirect Branch Restricted Speculation (IBRS) and Indirect Branch Predictor Barrier (IBPB) - IBRS // AMD: Indirect Branch Restricted Speculation - IBRS_PREFERRED // AMD: IBRS is preferred over software solution - IBRS_PROVIDES_SMP // AMD: IBRS provides Same Mode Protection - IBS // Instruction Based Sampling (AMD) - IBSBRNTRGT // Instruction Based Sampling Feature (AMD) - IBSFETCHSAM // Instruction Based Sampling Feature (AMD) - IBSFFV // Instruction Based Sampling Feature (AMD) - IBSOPCNT // Instruction Based Sampling Feature (AMD) - IBSOPCNTEXT // Instruction Based Sampling Feature (AMD) - IBSOPSAM // Instruction Based Sampling Feature (AMD) - IBSRDWROPCNT // Instruction Based Sampling Feature (AMD) - IBSRIPINVALIDCHK // Instruction Based Sampling Feature (AMD) - IBS_FETCH_CTLX // AMD: IBS fetch control extended MSR supported - IBS_OPDATA4 // AMD: IBS op data 4 MSR supported - IBS_OPFUSE // AMD: Indicates support for IbsOpFuse - IBS_PREVENTHOST // Disallowing IBS use by the host supported - IBS_ZEN4 // AMD: Fetch and Op IBS support IBS extensions added with Zen4 - IDPRED_CTRL // IPRED_DIS - INT_WBINVD // WBINVD/WBNOINVD are interruptible. - INVLPGB // NVLPGB and TLBSYNC instruction supported - KEYLOCKER // Key locker - KEYLOCKERW // Key locker wide - LAHF // LAHF/SAHF in long mode - LAM // If set, CPU supports Linear Address Masking - LBRVIRT // LBR virtualization - LZCNT // LZCNT instruction - MCAOVERFLOW // MCA overflow recovery support. - MCDT_NO // Processor do not exhibit MXCSR Configuration Dependent Timing behavior and do not need to mitigate it. - MCOMMIT // MCOMMIT instruction supported - MD_CLEAR // VERW clears CPU buffers - MMX // standard MMX - MMXEXT // SSE integer functions or AMD MMX ext - MOVBE // MOVBE instruction (big-endian) - MOVDIR64B // Move 64 Bytes as Direct Store - MOVDIRI // Move Doubleword as Direct Store - MOVSB_ZL // Fast Zero-Length MOVSB - MOVU // AMD: MOVU SSE instructions are more efficient and should be preferred to SSE MOVL/MOVH. MOVUPS is more efficient than MOVLPS/MOVHPS. MOVUPD is more efficient than MOVLPD/MOVHPD - MPX // Intel MPX (Memory Protection Extensions) - MSRIRC // Instruction Retired Counter MSR available - MSRLIST // Read/Write List of Model Specific Registers - MSR_PAGEFLUSH // Page Flush MSR available - NRIPS // Indicates support for NRIP save on VMEXIT - NX // NX (No-Execute) bit - OSXSAVE // XSAVE enabled by OS - PCONFIG // PCONFIG for Intel Multi-Key Total Memory Encryption - POPCNT // POPCNT instruction - PPIN // AMD: Protected Processor Inventory Number support. Indicates that Protected Processor Inventory Number (PPIN) capability can be enabled - PREFETCHI // PREFETCHIT0/1 instructions - PSFD // Predictive Store Forward Disable - RDPRU // RDPRU instruction supported - RDRAND // RDRAND instruction is available - RDSEED // RDSEED instruction is available - RDTSCP // RDTSCP Instruction - RRSBA_CTRL // Restricted RSB Alternate - RTM // Restricted Transactional Memory - RTM_ALWAYS_ABORT // Indicates that the loaded microcode is forcing RTM abort. - SERIALIZE // Serialize Instruction Execution - SEV // AMD Secure Encrypted Virtualization supported - SEV_64BIT // AMD SEV guest execution only allowed from a 64-bit host - SEV_ALTERNATIVE // AMD SEV Alternate Injection supported - SEV_DEBUGSWAP // Full debug state swap supported for SEV-ES guests - SEV_ES // AMD SEV Encrypted State supported - SEV_RESTRICTED // AMD SEV Restricted Injection supported - SEV_SNP // AMD SEV Secure Nested Paging supported - SGX // Software Guard Extensions - SGXLC // Software Guard Extensions Launch Control - SHA // Intel SHA Extensions - SME // AMD Secure Memory Encryption supported - SME_COHERENT // AMD Hardware cache coherency across encryption domains enforced - SPEC_CTRL_SSBD // Speculative Store Bypass Disable - SRBDS_CTRL // SRBDS mitigation MSR available - SSE // SSE functions - SSE2 // P4 SSE functions - SSE3 // Prescott SSE3 functions - SSE4 // Penryn SSE4.1 functions - SSE42 // Nehalem SSE4.2 functions - SSE4A // AMD Barcelona microarchitecture SSE4a instructions - SSSE3 // Conroe SSSE3 functions - STIBP // Single Thread Indirect Branch Predictors - STIBP_ALWAYSON // AMD: Single Thread Indirect Branch Prediction Mode has Enhanced Performance and may be left Always On - STOSB_SHORT // Fast short STOSB - SUCCOR // Software uncorrectable error containment and recovery capability. - SVM // AMD Secure Virtual Machine - SVMDA // Indicates support for the SVM decode assists. - SVMFBASID // SVM, Indicates that TLB flush events, including CR3 writes and CR4.PGE toggles, flush only the current ASID's TLB entries. Also indicates support for the extended VMCBTLB_Control - SVML // AMD SVM lock. Indicates support for SVM-Lock. - SVMNP // AMD SVM nested paging - SVMPF // SVM pause intercept filter. Indicates support for the pause intercept filter - SVMPFT // SVM PAUSE filter threshold. Indicates support for the PAUSE filter cycle count threshold - SYSCALL // System-Call Extension (SCE): SYSCALL and SYSRET instructions. - SYSEE // SYSENTER and SYSEXIT instructions - TBM // AMD Trailing Bit Manipulation - TDX_GUEST // Intel Trust Domain Extensions Guest - TLB_FLUSH_NESTED // AMD: Flushing includes all the nested translations for guest translations - TME // Intel Total Memory Encryption. The following MSRs are supported: IA32_TME_CAPABILITY, IA32_TME_ACTIVATE, IA32_TME_EXCLUDE_MASK, and IA32_TME_EXCLUDE_BASE. - TOPEXT // TopologyExtensions: topology extensions support. Indicates support for CPUID Fn8000_001D_EAX_x[N:0]-CPUID Fn8000_001E_EDX. - TSCRATEMSR // MSR based TSC rate control. Indicates support for MSR TSC ratio MSRC000_0104 - TSXLDTRK // Intel TSX Suspend Load Address Tracking - VAES // Vector AES. AVX(512) versions requires additional checks. - VMCBCLEAN // VMCB clean bits. Indicates support for VMCB clean bits. - VMPL // AMD VM Permission Levels supported - VMSA_REGPROT // AMD VMSA Register Protection supported - VMX // Virtual Machine Extensions - VPCLMULQDQ // Carry-Less Multiplication Quadword. Requires AVX for 3 register versions. - VTE // AMD Virtual Transparent Encryption supported - WAITPKG // TPAUSE, UMONITOR, UMWAIT - WBNOINVD // Write Back and Do Not Invalidate Cache - WRMSRNS // Non-Serializing Write to Model Specific Register - X87 // FPU - XGETBV1 // Supports XGETBV with ECX = 1 - XOP // Bulldozer XOP functions - XSAVE // XSAVE, XRESTOR, XSETBV, XGETBV - XSAVEC // Supports XSAVEC and the compacted form of XRSTOR. - XSAVEOPT // XSAVEOPT available - XSAVES // Supports XSAVES/XRSTORS and IA32_XSS + // x86 features + ADX FeatureID = iota // Intel ADX (Multi-Precision Add-Carry Instruction Extensions) + AESNI // Advanced Encryption Standard New Instructions + AMD3DNOW // AMD 3DNOW + AMD3DNOWEXT // AMD 3DNowExt + AMXBF16 // Tile computational operations on BFLOAT16 numbers + AMXFP16 // Tile computational operations on FP16 numbers + AMXINT8 // Tile computational operations on 8-bit integers + AMXFP8 // Tile computational operations on FP8 numbers + AMXTILE // Tile architecture + APX_F // Intel APX + AVX // AVX functions + AVX10 // If set the Intel AVX10 Converged Vector ISA is supported + AVX10_128 // If set indicates that AVX10 128-bit vector support is present + AVX10_256 // If set indicates that AVX10 256-bit vector support is present + AVX10_512 // If set indicates that AVX10 512-bit vector support is present + AVX2 // AVX2 functions + AVX512BF16 // AVX-512 BFLOAT16 Instructions + AVX512BITALG // AVX-512 Bit Algorithms + AVX512BW // AVX-512 Byte and Word Instructions + AVX512CD // AVX-512 Conflict Detection Instructions + AVX512DQ // AVX-512 Doubleword and Quadword Instructions + AVX512ER // AVX-512 Exponential and Reciprocal Instructions + AVX512F // AVX-512 Foundation + AVX512FP16 // AVX-512 FP16 Instructions + AVX512IFMA // AVX-512 Integer Fused Multiply-Add Instructions + AVX512PF // AVX-512 Prefetch Instructions + AVX512VBMI // AVX-512 Vector Bit Manipulation Instructions + AVX512VBMI2 // AVX-512 Vector Bit Manipulation Instructions, Version 2 + AVX512VL // AVX-512 Vector Length Extensions + AVX512VNNI // AVX-512 Vector Neural Network Instructions + AVX512VP2INTERSECT // AVX-512 Intersect for D/Q + AVX512VPOPCNTDQ // AVX-512 Vector Population Count Doubleword and Quadword + AVXIFMA // AVX-IFMA instructions + AVXNECONVERT // AVX-NE-CONVERT instructions + AVXSLOW // Indicates the CPU performs 2 128 bit operations instead of one + AVXVNNI // AVX (VEX encoded) VNNI neural network instructions + AVXVNNIINT8 // AVX-VNNI-INT8 instructions + AVXVNNIINT16 // AVX-VNNI-INT16 instructions + BHI_CTRL // Branch History Injection and Intra-mode Branch Target Injection / CVE-2022-0001, CVE-2022-0002 / INTEL-SA-00598 + BMI1 // Bit Manipulation Instruction Set 1 + BMI2 // Bit Manipulation Instruction Set 2 + CETIBT // Intel CET Indirect Branch Tracking + CETSS // Intel CET Shadow Stack + CLDEMOTE // Cache Line Demote + CLMUL // Carry-less Multiplication + CLZERO // CLZERO instruction supported + CMOV // i686 CMOV + CMPCCXADD // CMPCCXADD instructions + CMPSB_SCADBS_SHORT // Fast short CMPSB and SCASB + CMPXCHG8 // CMPXCHG8 instruction + CPBOOST // Core Performance Boost + CPPC // AMD: Collaborative Processor Performance Control + CX16 // CMPXCHG16B Instruction + EFER_LMSLE_UNS // AMD: =Core::X86::Msr::EFER[LMSLE] is not supported, and MBZ + ENQCMD // Enqueue Command + ERMS // Enhanced REP MOVSB/STOSB + F16C // Half-precision floating-point conversion + FLUSH_L1D // Flush L1D cache + FMA3 // Intel FMA 3. Does not imply AVX. + FMA4 // Bulldozer FMA4 functions + FP128 // AMD: When set, the internal FP/SIMD execution datapath is no more than 128-bits wide + FP256 // AMD: When set, the internal FP/SIMD execution datapath is no more than 256-bits wide + FSRM // Fast Short Rep Mov + FXSR // FXSAVE, FXRESTOR instructions, CR4 bit 9 + FXSROPT // FXSAVE/FXRSTOR optimizations + GFNI // Galois Field New Instructions. May require other features (AVX, AVX512VL,AVX512F) based on usage. + HLE // Hardware Lock Elision + HRESET // If set CPU supports history reset and the IA32_HRESET_ENABLE MSR + HTT // Hyperthreading (enabled) + HWA // Hardware assert supported. Indicates support for MSRC001_10 + HYBRID_CPU // This part has CPUs of more than one type. + HYPERVISOR // This bit has been reserved by Intel & AMD for use by hypervisors + IA32_ARCH_CAP // IA32_ARCH_CAPABILITIES MSR (Intel) + IA32_CORE_CAP // IA32_CORE_CAPABILITIES MSR + IBPB // Indirect Branch Restricted Speculation (IBRS) and Indirect Branch Predictor Barrier (IBPB) + IBPB_BRTYPE // Indicates that MSR 49h (PRED_CMD) bit 0 (IBPB) flushes all branch type predictions from the CPU branch predictor + IBRS // AMD: Indirect Branch Restricted Speculation + IBRS_PREFERRED // AMD: IBRS is preferred over software solution + IBRS_PROVIDES_SMP // AMD: IBRS provides Same Mode Protection + IBS // Instruction Based Sampling (AMD) + IBSBRNTRGT // Instruction Based Sampling Feature (AMD) + IBSFETCHSAM // Instruction Based Sampling Feature (AMD) + IBSFFV // Instruction Based Sampling Feature (AMD) + IBSOPCNT // Instruction Based Sampling Feature (AMD) + IBSOPCNTEXT // Instruction Based Sampling Feature (AMD) + IBSOPSAM // Instruction Based Sampling Feature (AMD) + IBSRDWROPCNT // Instruction Based Sampling Feature (AMD) + IBSRIPINVALIDCHK // Instruction Based Sampling Feature (AMD) + IBS_FETCH_CTLX // AMD: IBS fetch control extended MSR supported + IBS_OPDATA4 // AMD: IBS op data 4 MSR supported + IBS_OPFUSE // AMD: Indicates support for IbsOpFuse + IBS_PREVENTHOST // Disallowing IBS use by the host supported + IBS_ZEN4 // AMD: Fetch and Op IBS support IBS extensions added with Zen4 + IDPRED_CTRL // IPRED_DIS + INT_WBINVD // WBINVD/WBNOINVD are interruptible. + INVLPGB // NVLPGB and TLBSYNC instruction supported + KEYLOCKER // Key locker + KEYLOCKERW // Key locker wide + LAHF // LAHF/SAHF in long mode + LAM // If set, CPU supports Linear Address Masking + LBRVIRT // LBR virtualization + LZCNT // LZCNT instruction + MCAOVERFLOW // MCA overflow recovery support. + MCDT_NO // Processor do not exhibit MXCSR Configuration Dependent Timing behavior and do not need to mitigate it. + MCOMMIT // MCOMMIT instruction supported + MD_CLEAR // VERW clears CPU buffers + MMX // standard MMX + MMXEXT // SSE integer functions or AMD MMX ext + MOVBE // MOVBE instruction (big-endian) + MOVDIR64B // Move 64 Bytes as Direct Store + MOVDIRI // Move Doubleword as Direct Store + MOVSB_ZL // Fast Zero-Length MOVSB + MOVU // AMD: MOVU SSE instructions are more efficient and should be preferred to SSE MOVL/MOVH. MOVUPS is more efficient than MOVLPS/MOVHPS. MOVUPD is more efficient than MOVLPD/MOVHPD + MPX // Intel MPX (Memory Protection Extensions) + MSRIRC // Instruction Retired Counter MSR available + MSRLIST // Read/Write List of Model Specific Registers + MSR_PAGEFLUSH // Page Flush MSR available + NRIPS // Indicates support for NRIP save on VMEXIT + NX // NX (No-Execute) bit + OSXSAVE // XSAVE enabled by OS + PCONFIG // PCONFIG for Intel Multi-Key Total Memory Encryption + POPCNT // POPCNT instruction + PPIN // AMD: Protected Processor Inventory Number support. Indicates that Protected Processor Inventory Number (PPIN) capability can be enabled + PREFETCHI // PREFETCHIT0/1 instructions + PSFD // Predictive Store Forward Disable + RDPRU // RDPRU instruction supported + RDRAND // RDRAND instruction is available + RDSEED // RDSEED instruction is available + RDTSCP // RDTSCP Instruction + RRSBA_CTRL // Restricted RSB Alternate + RTM // Restricted Transactional Memory + RTM_ALWAYS_ABORT // Indicates that the loaded microcode is forcing RTM abort. + SBPB // Indicates support for the Selective Branch Predictor Barrier + SERIALIZE // Serialize Instruction Execution + SEV // AMD Secure Encrypted Virtualization supported + SEV_64BIT // AMD SEV guest execution only allowed from a 64-bit host + SEV_ALTERNATIVE // AMD SEV Alternate Injection supported + SEV_DEBUGSWAP // Full debug state swap supported for SEV-ES guests + SEV_ES // AMD SEV Encrypted State supported + SEV_RESTRICTED // AMD SEV Restricted Injection supported + SEV_SNP // AMD SEV Secure Nested Paging supported + SGX // Software Guard Extensions + SGXLC // Software Guard Extensions Launch Control + SHA // Intel SHA Extensions + SME // AMD Secure Memory Encryption supported + SME_COHERENT // AMD Hardware cache coherency across encryption domains enforced + SPEC_CTRL_SSBD // Speculative Store Bypass Disable + SRBDS_CTRL // SRBDS mitigation MSR available + SRSO_MSR_FIX // Indicates that software may use MSR BP_CFG[BpSpecReduce] to mitigate SRSO. + SRSO_NO // Indicates the CPU is not subject to the SRSO vulnerability + SRSO_USER_KERNEL_NO // Indicates the CPU is not subject to the SRSO vulnerability across user/kernel boundaries + SSE // SSE functions + SSE2 // P4 SSE functions + SSE3 // Prescott SSE3 functions + SSE4 // Penryn SSE4.1 functions + SSE42 // Nehalem SSE4.2 functions + SSE4A // AMD Barcelona microarchitecture SSE4a instructions + SSSE3 // Conroe SSSE3 functions + STIBP // Single Thread Indirect Branch Predictors + STIBP_ALWAYSON // AMD: Single Thread Indirect Branch Prediction Mode has Enhanced Performance and may be left Always On + STOSB_SHORT // Fast short STOSB + SUCCOR // Software uncorrectable error containment and recovery capability. + SVM // AMD Secure Virtual Machine + SVMDA // Indicates support for the SVM decode assists. + SVMFBASID // SVM, Indicates that TLB flush events, including CR3 writes and CR4.PGE toggles, flush only the current ASID's TLB entries. Also indicates support for the extended VMCBTLB_Control + SVML // AMD SVM lock. Indicates support for SVM-Lock. + SVMNP // AMD SVM nested paging + SVMPF // SVM pause intercept filter. Indicates support for the pause intercept filter + SVMPFT // SVM PAUSE filter threshold. Indicates support for the PAUSE filter cycle count threshold + SYSCALL // System-Call Extension (SCE): SYSCALL and SYSRET instructions. + SYSEE // SYSENTER and SYSEXIT instructions + TBM // AMD Trailing Bit Manipulation + TDX_GUEST // Intel Trust Domain Extensions Guest + TLB_FLUSH_NESTED // AMD: Flushing includes all the nested translations for guest translations + TME // Intel Total Memory Encryption. The following MSRs are supported: IA32_TME_CAPABILITY, IA32_TME_ACTIVATE, IA32_TME_EXCLUDE_MASK, and IA32_TME_EXCLUDE_BASE. + TOPEXT // TopologyExtensions: topology extensions support. Indicates support for CPUID Fn8000_001D_EAX_x[N:0]-CPUID Fn8000_001E_EDX. + TSCRATEMSR // MSR based TSC rate control. Indicates support for MSR TSC ratio MSRC000_0104 + TSXLDTRK // Intel TSX Suspend Load Address Tracking + VAES // Vector AES. AVX(512) versions requires additional checks. + VMCBCLEAN // VMCB clean bits. Indicates support for VMCB clean bits. + VMPL // AMD VM Permission Levels supported + VMSA_REGPROT // AMD VMSA Register Protection supported + VMX // Virtual Machine Extensions + VPCLMULQDQ // Carry-Less Multiplication Quadword. Requires AVX for 3 register versions. + VTE // AMD Virtual Transparent Encryption supported + WAITPKG // TPAUSE, UMONITOR, UMWAIT + WBNOINVD // Write Back and Do Not Invalidate Cache + WRMSRNS // Non-Serializing Write to Model Specific Register + X87 // FPU + XGETBV1 // Supports XGETBV with ECX = 1 + XOP // Bulldozer XOP functions + XSAVE // XSAVE, XRESTOR, XSETBV, XGETBV + XSAVEC // Supports XSAVEC and the compacted form of XRSTOR. + XSAVEOPT // XSAVEOPT available + XSAVES // Supports XSAVES/XRSTORS and IA32_XSS // ARM features: AESARM // AES instructions @@ -290,29 +303,33 @@ const ( // CPUInfo contains information about the detected system CPU. type CPUInfo struct { - BrandName string // Brand name reported by the CPU - VendorID Vendor // Comparable CPU vendor ID - VendorString string // Raw vendor string. - featureSet flagSet // Features of the CPU - PhysicalCores int // Number of physical processor cores in your CPU. Will be 0 if undetectable. - ThreadsPerCore int // Number of threads per physical core. Will be 1 if undetectable. - LogicalCores int // Number of physical cores times threads that can run on each core through the use of hyperthreading. Will be 0 if undetectable. - Family int // CPU family number - Model int // CPU model number - Stepping int // CPU stepping info - CacheLine int // Cache line size in bytes. Will be 0 if undetectable. - Hz int64 // Clock speed, if known, 0 otherwise. Will attempt to contain base clock speed. - BoostFreq int64 // Max clock speed, if known, 0 otherwise - Cache struct { + BrandName string // Brand name reported by the CPU + VendorID Vendor // Comparable CPU vendor ID + VendorString string // Raw vendor string. + HypervisorVendorID Vendor // Hypervisor vendor + HypervisorVendorString string // Raw hypervisor vendor string + featureSet flagSet // Features of the CPU + PhysicalCores int // Number of physical processor cores in your CPU. Will be 0 if undetectable. + ThreadsPerCore int // Number of threads per physical core. Will be 1 if undetectable. + LogicalCores int // Number of physical cores times threads that can run on each core through the use of hyperthreading. Will be 0 if undetectable. + Family int // CPU family number + Model int // CPU model number + Stepping int // CPU stepping info + CacheLine int // Cache line size in bytes. Will be 0 if undetectable. + Hz int64 // Clock speed, if known, 0 otherwise. Will attempt to contain base clock speed. + BoostFreq int64 // Max clock speed, if known, 0 otherwise + Cache struct { L1I int // L1 Instruction Cache (per core or shared). Will be -1 if undetected L1D int // L1 Data Cache (per core or shared). Will be -1 if undetected L2 int // L2 Cache (per core or shared). Will be -1 if undetected L3 int // L3 Cache (per core, per ccx or shared). Will be -1 if undetected } - SGX SGXSupport - AVX10Level uint8 - maxFunc uint32 - maxExFunc uint32 + SGX SGXSupport + AMDMemEncryption AMDMemEncryptionSupport + AVX10Level uint8 + + maxFunc uint32 + maxExFunc uint32 } var cpuid func(op uint32) (eax, ebx, ecx, edx uint32) @@ -496,7 +513,7 @@ func (c CPUInfo) FeatureSet() []string { // Uses the RDTSCP instruction. The value 0 is returned // if the CPU does not support the instruction. func (c CPUInfo) RTCounter() uint64 { - if !c.Supports(RDTSCP) { + if !c.Has(RDTSCP) { return 0 } a, _, _, d := rdtscpAsm() @@ -508,13 +525,22 @@ func (c CPUInfo) RTCounter() uint64 { // about the current cpu/core the code is running on. // If the RDTSCP instruction isn't supported on the CPU, the value 0 is returned. func (c CPUInfo) Ia32TscAux() uint32 { - if !c.Supports(RDTSCP) { + if !c.Has(RDTSCP) { return 0 } _, _, ecx, _ := rdtscpAsm() return ecx } +// SveLengths returns arm SVE vector and predicate lengths. +// Will return 0, 0 if SVE is not enabled or otherwise unable to detect. +func (c CPUInfo) SveLengths() (vl, pl uint64) { + if !c.Has(SVE) { + return 0, 0 + } + return getVectorLength() +} + // LogicalCPU will return the Logical CPU the code is currently executing on. // This is likely to change when the OS re-schedules the running thread // to another CPU. @@ -774,11 +800,16 @@ func threadsPerCore() int { _, b, _, _ := cpuidex(0xb, 0) if b&0xffff == 0 { if vend == AMD { - // Workaround for AMD returning 0, assume 2 if >= Zen 2 - // It will be more correct than not. + // if >= Zen 2 0x8000001e EBX 15-8 bits means threads per core. + // The number of threads per core is ThreadsPerCore+1 + // See PPR for AMD Family 17h Models 00h-0Fh (page 82) fam, _, _ := familyModel() _, _, _, d := cpuid(1) if (d&(1<<28)) != 0 && fam >= 23 { + if maxExtendedFunction() >= 0x8000001e { + _, b, _, _ := cpuid(0x8000001e) + return int((b>>8)&0xff) + 1 + } return 2 } } @@ -870,7 +901,9 @@ var vendorMapping = map[string]Vendor{ "GenuineTMx86": Transmeta, "Geode by NSC": NSC, "VIA VIA VIA ": VIA, - "KVMKVMKVMKVM": KVM, + "KVMKVMKVM": KVM, + "Linux KVM Hv": KVM, + "TCGTCGTCGTCG": QEMU, "Microsoft Hv": MSVM, "VMwareVMware": VMware, "XenVMMXenVMM": XenHVM, @@ -880,6 +913,10 @@ var vendorMapping = map[string]Vendor{ "SiS SiS SiS ": SiS, "RiseRiseRise": SiS, "Genuine RDC": RDC, + "QNXQVMBSQG": QNX, + "ACRNACRNACRN": ACRN, + "SRESRESRESRE": SRE, + "Apple VZ": Apple, } func vendorID() (Vendor, string) { @@ -892,6 +929,17 @@ func vendorID() (Vendor, string) { return vend, v } +func hypervisorVendorID() (Vendor, string) { + // https://lwn.net/Articles/301888/ + _, b, c, d := cpuid(0x40000000) + v := string(valAsString(b, c, d)) + vend, ok := vendorMapping[v] + if !ok { + return VendorUnknown, v + } + return vend, v +} + func cacheLine() int { if maxFunctionID() < 0x1 { return 0 @@ -1079,6 +1127,32 @@ func hasSGX(available, lc bool) (rval SGXSupport) { return } +type AMDMemEncryptionSupport struct { + Available bool + CBitPossition uint32 + NumVMPL uint32 + PhysAddrReduction uint32 + NumEntryptedGuests uint32 + MinSevNoEsAsid uint32 +} + +func hasAMDMemEncryption(available bool) (rval AMDMemEncryptionSupport) { + rval.Available = available + if !available { + return + } + + _, b, c, d := cpuidex(0x8000001f, 0) + + rval.CBitPossition = b & 0x3f + rval.PhysAddrReduction = (b >> 6) & 0x3F + rval.NumVMPL = (b >> 12) & 0xf + rval.NumEntryptedGuests = c + rval.MinSevNoEsAsid = d + + return +} + func support() flagSet { var fs flagSet mfi := maxFunctionID() @@ -1210,6 +1284,7 @@ func support() flagSet { // CPUID.(EAX=7, ECX=1).EDX fs.setIf(edx1&(1<<4) != 0, AVXVNNIINT8) fs.setIf(edx1&(1<<5) != 0, AVXNECONVERT) + fs.setIf(edx1&(1<<10) != 0, AVXVNNIINT16) fs.setIf(edx1&(1<<14) != 0, PREFETCHI) fs.setIf(edx1&(1<<19) != 0, AVX10) fs.setIf(edx1&(1<<21) != 0, APX_F) @@ -1237,6 +1312,7 @@ func support() flagSet { fs.setIf(ebx&(1<<31) != 0, AVX512VL) // ecx fs.setIf(ecx&(1<<1) != 0, AVX512VBMI) + fs.setIf(ecx&(1<<3) != 0, AMXFP8) fs.setIf(ecx&(1<<6) != 0, AVX512VBMI2) fs.setIf(ecx&(1<<11) != 0, AVX512VNNI) fs.setIf(ecx&(1<<12) != 0, AVX512BITALG) @@ -1418,6 +1494,15 @@ func support() flagSet { fs.setIf((a>>24)&1 == 1, VMSA_REGPROT) } + if maxExtendedFunction() >= 0x80000021 && vend == AMD { + a, _, _, _ := cpuid(0x80000021) + fs.setIf((a>>31)&1 == 1, SRSO_MSR_FIX) + fs.setIf((a>>30)&1 == 1, SRSO_USER_KERNEL_NO) + fs.setIf((a>>29)&1 == 1, SRSO_NO) + fs.setIf((a>>28)&1 == 1, IBPB_BRTYPE) + fs.setIf((a>>27)&1 == 1, SBPB) + } + if mfi >= 0x20 { // Microsoft has decided to purposefully hide the information // of the guest TEE when VMs are being created using Hyper-V. diff --git a/vendor/github.com/klauspost/cpuid/v2/cpuid_arm64.s b/vendor/github.com/klauspost/cpuid/v2/cpuid_arm64.s index b31d6aec..b196f78e 100644 --- a/vendor/github.com/klauspost/cpuid/v2/cpuid_arm64.s +++ b/vendor/github.com/klauspost/cpuid/v2/cpuid_arm64.s @@ -24,3 +24,13 @@ TEXT ·getInstAttributes(SB), 7, $0 MOVD R1, instAttrReg1+8(FP) RET +TEXT ·getVectorLength(SB), 7, $0 + WORD $0xd2800002 // mov x2, #0 + WORD $0x04225022 // addvl x2, x2, #1 + WORD $0xd37df042 // lsl x2, x2, #3 + WORD $0xd2800003 // mov x3, #0 + WORD $0x04635023 // addpl x3, x3, #1 + WORD $0xd37df063 // lsl x3, x3, #3 + MOVD R2, vl+0(FP) + MOVD R3, pl+8(FP) + RET diff --git a/vendor/github.com/klauspost/cpuid/v2/detect_arm64.go b/vendor/github.com/klauspost/cpuid/v2/detect_arm64.go index 9a53504a..566743d2 100644 --- a/vendor/github.com/klauspost/cpuid/v2/detect_arm64.go +++ b/vendor/github.com/klauspost/cpuid/v2/detect_arm64.go @@ -10,6 +10,7 @@ import "runtime" func getMidr() (midr uint64) func getProcFeatures() (procFeatures uint64) func getInstAttributes() (instAttrReg0, instAttrReg1 uint64) +func getVectorLength() (vl, pl uint64) func initCPU() { cpuid = func(uint32) (a, b, c, d uint32) { return 0, 0, 0, 0 } @@ -24,7 +25,7 @@ func addInfo(c *CPUInfo, safe bool) { detectOS(c) // ARM64 disabled since it may crash if interrupt is not intercepted by OS. - if safe && !c.Supports(ARMCPUID) && runtime.GOOS != "freebsd" { + if safe && !c.Has(ARMCPUID) && runtime.GOOS != "freebsd" { return } midr := getMidr() diff --git a/vendor/github.com/klauspost/cpuid/v2/detect_ref.go b/vendor/github.com/klauspost/cpuid/v2/detect_ref.go index 9636c2bc..574f9389 100644 --- a/vendor/github.com/klauspost/cpuid/v2/detect_ref.go +++ b/vendor/github.com/klauspost/cpuid/v2/detect_ref.go @@ -10,6 +10,8 @@ func initCPU() { cpuidex = func(x, y uint32) (a, b, c, d uint32) { return 0, 0, 0, 0 } xgetbv = func(uint32) (a, b uint32) { return 0, 0 } rdtscpAsm = func() (a, b, c, d uint32) { return 0, 0, 0, 0 } + } func addInfo(info *CPUInfo, safe bool) {} +func getVectorLength() (vl, pl uint64) { return 0, 0 } diff --git a/vendor/github.com/klauspost/cpuid/v2/detect_x86.go b/vendor/github.com/klauspost/cpuid/v2/detect_x86.go index c7dfa125..f924c9d8 100644 --- a/vendor/github.com/klauspost/cpuid/v2/detect_x86.go +++ b/vendor/github.com/klauspost/cpuid/v2/detect_x86.go @@ -27,11 +27,15 @@ func addInfo(c *CPUInfo, safe bool) { c.Family, c.Model, c.Stepping = familyModel() c.featureSet = support() c.SGX = hasSGX(c.featureSet.inSet(SGX), c.featureSet.inSet(SGXLC)) + c.AMDMemEncryption = hasAMDMemEncryption(c.featureSet.inSet(SME) || c.featureSet.inSet(SEV)) c.ThreadsPerCore = threadsPerCore() c.LogicalCores = logicalCores() c.PhysicalCores = physicalCores() c.VendorID, c.VendorString = vendorID() + c.HypervisorVendorID, c.HypervisorVendorString = hypervisorVendorID() c.AVX10Level = c.supportAVX10() c.cacheSize() c.frequencies() } + +func getVectorLength() (vl, pl uint64) { return 0, 0 } diff --git a/vendor/github.com/klauspost/cpuid/v2/featureid_string.go b/vendor/github.com/klauspost/cpuid/v2/featureid_string.go index 43bd05f5..e7f874a7 100644 --- a/vendor/github.com/klauspost/cpuid/v2/featureid_string.go +++ b/vendor/github.com/klauspost/cpuid/v2/featureid_string.go @@ -15,218 +15,225 @@ func _() { _ = x[AMXBF16-5] _ = x[AMXFP16-6] _ = x[AMXINT8-7] - _ = x[AMXTILE-8] - _ = x[APX_F-9] - _ = x[AVX-10] - _ = x[AVX10-11] - _ = x[AVX10_128-12] - _ = x[AVX10_256-13] - _ = x[AVX10_512-14] - _ = x[AVX2-15] - _ = x[AVX512BF16-16] - _ = x[AVX512BITALG-17] - _ = x[AVX512BW-18] - _ = x[AVX512CD-19] - _ = x[AVX512DQ-20] - _ = x[AVX512ER-21] - _ = x[AVX512F-22] - _ = x[AVX512FP16-23] - _ = x[AVX512IFMA-24] - _ = x[AVX512PF-25] - _ = x[AVX512VBMI-26] - _ = x[AVX512VBMI2-27] - _ = x[AVX512VL-28] - _ = x[AVX512VNNI-29] - _ = x[AVX512VP2INTERSECT-30] - _ = x[AVX512VPOPCNTDQ-31] - _ = x[AVXIFMA-32] - _ = x[AVXNECONVERT-33] - _ = x[AVXSLOW-34] - _ = x[AVXVNNI-35] - _ = x[AVXVNNIINT8-36] - _ = x[BHI_CTRL-37] - _ = x[BMI1-38] - _ = x[BMI2-39] - _ = x[CETIBT-40] - _ = x[CETSS-41] - _ = x[CLDEMOTE-42] - _ = x[CLMUL-43] - _ = x[CLZERO-44] - _ = x[CMOV-45] - _ = x[CMPCCXADD-46] - _ = x[CMPSB_SCADBS_SHORT-47] - _ = x[CMPXCHG8-48] - _ = x[CPBOOST-49] - _ = x[CPPC-50] - _ = x[CX16-51] - _ = x[EFER_LMSLE_UNS-52] - _ = x[ENQCMD-53] - _ = x[ERMS-54] - _ = x[F16C-55] - _ = x[FLUSH_L1D-56] - _ = x[FMA3-57] - _ = x[FMA4-58] - _ = x[FP128-59] - _ = x[FP256-60] - _ = x[FSRM-61] - _ = x[FXSR-62] - _ = x[FXSROPT-63] - _ = x[GFNI-64] - _ = x[HLE-65] - _ = x[HRESET-66] - _ = x[HTT-67] - _ = x[HWA-68] - _ = x[HYBRID_CPU-69] - _ = x[HYPERVISOR-70] - _ = x[IA32_ARCH_CAP-71] - _ = x[IA32_CORE_CAP-72] - _ = x[IBPB-73] - _ = x[IBRS-74] - _ = x[IBRS_PREFERRED-75] - _ = x[IBRS_PROVIDES_SMP-76] - _ = x[IBS-77] - _ = x[IBSBRNTRGT-78] - _ = x[IBSFETCHSAM-79] - _ = x[IBSFFV-80] - _ = x[IBSOPCNT-81] - _ = x[IBSOPCNTEXT-82] - _ = x[IBSOPSAM-83] - _ = x[IBSRDWROPCNT-84] - _ = x[IBSRIPINVALIDCHK-85] - _ = x[IBS_FETCH_CTLX-86] - _ = x[IBS_OPDATA4-87] - _ = x[IBS_OPFUSE-88] - _ = x[IBS_PREVENTHOST-89] - _ = x[IBS_ZEN4-90] - _ = x[IDPRED_CTRL-91] - _ = x[INT_WBINVD-92] - _ = x[INVLPGB-93] - _ = x[KEYLOCKER-94] - _ = x[KEYLOCKERW-95] - _ = x[LAHF-96] - _ = x[LAM-97] - _ = x[LBRVIRT-98] - _ = x[LZCNT-99] - _ = x[MCAOVERFLOW-100] - _ = x[MCDT_NO-101] - _ = x[MCOMMIT-102] - _ = x[MD_CLEAR-103] - _ = x[MMX-104] - _ = x[MMXEXT-105] - _ = x[MOVBE-106] - _ = x[MOVDIR64B-107] - _ = x[MOVDIRI-108] - _ = x[MOVSB_ZL-109] - _ = x[MOVU-110] - _ = x[MPX-111] - _ = x[MSRIRC-112] - _ = x[MSRLIST-113] - _ = x[MSR_PAGEFLUSH-114] - _ = x[NRIPS-115] - _ = x[NX-116] - _ = x[OSXSAVE-117] - _ = x[PCONFIG-118] - _ = x[POPCNT-119] - _ = x[PPIN-120] - _ = x[PREFETCHI-121] - _ = x[PSFD-122] - _ = x[RDPRU-123] - _ = x[RDRAND-124] - _ = x[RDSEED-125] - _ = x[RDTSCP-126] - _ = x[RRSBA_CTRL-127] - _ = x[RTM-128] - _ = x[RTM_ALWAYS_ABORT-129] - _ = x[SERIALIZE-130] - _ = x[SEV-131] - _ = x[SEV_64BIT-132] - _ = x[SEV_ALTERNATIVE-133] - _ = x[SEV_DEBUGSWAP-134] - _ = x[SEV_ES-135] - _ = x[SEV_RESTRICTED-136] - _ = x[SEV_SNP-137] - _ = x[SGX-138] - _ = x[SGXLC-139] - _ = x[SHA-140] - _ = x[SME-141] - _ = x[SME_COHERENT-142] - _ = x[SPEC_CTRL_SSBD-143] - _ = x[SRBDS_CTRL-144] - _ = x[SSE-145] - _ = x[SSE2-146] - _ = x[SSE3-147] - _ = x[SSE4-148] - _ = x[SSE42-149] - _ = x[SSE4A-150] - _ = x[SSSE3-151] - _ = x[STIBP-152] - _ = x[STIBP_ALWAYSON-153] - _ = x[STOSB_SHORT-154] - _ = x[SUCCOR-155] - _ = x[SVM-156] - _ = x[SVMDA-157] - _ = x[SVMFBASID-158] - _ = x[SVML-159] - _ = x[SVMNP-160] - _ = x[SVMPF-161] - _ = x[SVMPFT-162] - _ = x[SYSCALL-163] - _ = x[SYSEE-164] - _ = x[TBM-165] - _ = x[TDX_GUEST-166] - _ = x[TLB_FLUSH_NESTED-167] - _ = x[TME-168] - _ = x[TOPEXT-169] - _ = x[TSCRATEMSR-170] - _ = x[TSXLDTRK-171] - _ = x[VAES-172] - _ = x[VMCBCLEAN-173] - _ = x[VMPL-174] - _ = x[VMSA_REGPROT-175] - _ = x[VMX-176] - _ = x[VPCLMULQDQ-177] - _ = x[VTE-178] - _ = x[WAITPKG-179] - _ = x[WBNOINVD-180] - _ = x[WRMSRNS-181] - _ = x[X87-182] - _ = x[XGETBV1-183] - _ = x[XOP-184] - _ = x[XSAVE-185] - _ = x[XSAVEC-186] - _ = x[XSAVEOPT-187] - _ = x[XSAVES-188] - _ = x[AESARM-189] - _ = x[ARMCPUID-190] - _ = x[ASIMD-191] - _ = x[ASIMDDP-192] - _ = x[ASIMDHP-193] - _ = x[ASIMDRDM-194] - _ = x[ATOMICS-195] - _ = x[CRC32-196] - _ = x[DCPOP-197] - _ = x[EVTSTRM-198] - _ = x[FCMA-199] - _ = x[FP-200] - _ = x[FPHP-201] - _ = x[GPA-202] - _ = x[JSCVT-203] - _ = x[LRCPC-204] - _ = x[PMULL-205] - _ = x[SHA1-206] - _ = x[SHA2-207] - _ = x[SHA3-208] - _ = x[SHA512-209] - _ = x[SM3-210] - _ = x[SM4-211] - _ = x[SVE-212] - _ = x[lastID-213] + _ = x[AMXFP8-8] + _ = x[AMXTILE-9] + _ = x[APX_F-10] + _ = x[AVX-11] + _ = x[AVX10-12] + _ = x[AVX10_128-13] + _ = x[AVX10_256-14] + _ = x[AVX10_512-15] + _ = x[AVX2-16] + _ = x[AVX512BF16-17] + _ = x[AVX512BITALG-18] + _ = x[AVX512BW-19] + _ = x[AVX512CD-20] + _ = x[AVX512DQ-21] + _ = x[AVX512ER-22] + _ = x[AVX512F-23] + _ = x[AVX512FP16-24] + _ = x[AVX512IFMA-25] + _ = x[AVX512PF-26] + _ = x[AVX512VBMI-27] + _ = x[AVX512VBMI2-28] + _ = x[AVX512VL-29] + _ = x[AVX512VNNI-30] + _ = x[AVX512VP2INTERSECT-31] + _ = x[AVX512VPOPCNTDQ-32] + _ = x[AVXIFMA-33] + _ = x[AVXNECONVERT-34] + _ = x[AVXSLOW-35] + _ = x[AVXVNNI-36] + _ = x[AVXVNNIINT8-37] + _ = x[AVXVNNIINT16-38] + _ = x[BHI_CTRL-39] + _ = x[BMI1-40] + _ = x[BMI2-41] + _ = x[CETIBT-42] + _ = x[CETSS-43] + _ = x[CLDEMOTE-44] + _ = x[CLMUL-45] + _ = x[CLZERO-46] + _ = x[CMOV-47] + _ = x[CMPCCXADD-48] + _ = x[CMPSB_SCADBS_SHORT-49] + _ = x[CMPXCHG8-50] + _ = x[CPBOOST-51] + _ = x[CPPC-52] + _ = x[CX16-53] + _ = x[EFER_LMSLE_UNS-54] + _ = x[ENQCMD-55] + _ = x[ERMS-56] + _ = x[F16C-57] + _ = x[FLUSH_L1D-58] + _ = x[FMA3-59] + _ = x[FMA4-60] + _ = x[FP128-61] + _ = x[FP256-62] + _ = x[FSRM-63] + _ = x[FXSR-64] + _ = x[FXSROPT-65] + _ = x[GFNI-66] + _ = x[HLE-67] + _ = x[HRESET-68] + _ = x[HTT-69] + _ = x[HWA-70] + _ = x[HYBRID_CPU-71] + _ = x[HYPERVISOR-72] + _ = x[IA32_ARCH_CAP-73] + _ = x[IA32_CORE_CAP-74] + _ = x[IBPB-75] + _ = x[IBPB_BRTYPE-76] + _ = x[IBRS-77] + _ = x[IBRS_PREFERRED-78] + _ = x[IBRS_PROVIDES_SMP-79] + _ = x[IBS-80] + _ = x[IBSBRNTRGT-81] + _ = x[IBSFETCHSAM-82] + _ = x[IBSFFV-83] + _ = x[IBSOPCNT-84] + _ = x[IBSOPCNTEXT-85] + _ = x[IBSOPSAM-86] + _ = x[IBSRDWROPCNT-87] + _ = x[IBSRIPINVALIDCHK-88] + _ = x[IBS_FETCH_CTLX-89] + _ = x[IBS_OPDATA4-90] + _ = x[IBS_OPFUSE-91] + _ = x[IBS_PREVENTHOST-92] + _ = x[IBS_ZEN4-93] + _ = x[IDPRED_CTRL-94] + _ = x[INT_WBINVD-95] + _ = x[INVLPGB-96] + _ = x[KEYLOCKER-97] + _ = x[KEYLOCKERW-98] + _ = x[LAHF-99] + _ = x[LAM-100] + _ = x[LBRVIRT-101] + _ = x[LZCNT-102] + _ = x[MCAOVERFLOW-103] + _ = x[MCDT_NO-104] + _ = x[MCOMMIT-105] + _ = x[MD_CLEAR-106] + _ = x[MMX-107] + _ = x[MMXEXT-108] + _ = x[MOVBE-109] + _ = x[MOVDIR64B-110] + _ = x[MOVDIRI-111] + _ = x[MOVSB_ZL-112] + _ = x[MOVU-113] + _ = x[MPX-114] + _ = x[MSRIRC-115] + _ = x[MSRLIST-116] + _ = x[MSR_PAGEFLUSH-117] + _ = x[NRIPS-118] + _ = x[NX-119] + _ = x[OSXSAVE-120] + _ = x[PCONFIG-121] + _ = x[POPCNT-122] + _ = x[PPIN-123] + _ = x[PREFETCHI-124] + _ = x[PSFD-125] + _ = x[RDPRU-126] + _ = x[RDRAND-127] + _ = x[RDSEED-128] + _ = x[RDTSCP-129] + _ = x[RRSBA_CTRL-130] + _ = x[RTM-131] + _ = x[RTM_ALWAYS_ABORT-132] + _ = x[SBPB-133] + _ = x[SERIALIZE-134] + _ = x[SEV-135] + _ = x[SEV_64BIT-136] + _ = x[SEV_ALTERNATIVE-137] + _ = x[SEV_DEBUGSWAP-138] + _ = x[SEV_ES-139] + _ = x[SEV_RESTRICTED-140] + _ = x[SEV_SNP-141] + _ = x[SGX-142] + _ = x[SGXLC-143] + _ = x[SHA-144] + _ = x[SME-145] + _ = x[SME_COHERENT-146] + _ = x[SPEC_CTRL_SSBD-147] + _ = x[SRBDS_CTRL-148] + _ = x[SRSO_MSR_FIX-149] + _ = x[SRSO_NO-150] + _ = x[SRSO_USER_KERNEL_NO-151] + _ = x[SSE-152] + _ = x[SSE2-153] + _ = x[SSE3-154] + _ = x[SSE4-155] + _ = x[SSE42-156] + _ = x[SSE4A-157] + _ = x[SSSE3-158] + _ = x[STIBP-159] + _ = x[STIBP_ALWAYSON-160] + _ = x[STOSB_SHORT-161] + _ = x[SUCCOR-162] + _ = x[SVM-163] + _ = x[SVMDA-164] + _ = x[SVMFBASID-165] + _ = x[SVML-166] + _ = x[SVMNP-167] + _ = x[SVMPF-168] + _ = x[SVMPFT-169] + _ = x[SYSCALL-170] + _ = x[SYSEE-171] + _ = x[TBM-172] + _ = x[TDX_GUEST-173] + _ = x[TLB_FLUSH_NESTED-174] + _ = x[TME-175] + _ = x[TOPEXT-176] + _ = x[TSCRATEMSR-177] + _ = x[TSXLDTRK-178] + _ = x[VAES-179] + _ = x[VMCBCLEAN-180] + _ = x[VMPL-181] + _ = x[VMSA_REGPROT-182] + _ = x[VMX-183] + _ = x[VPCLMULQDQ-184] + _ = x[VTE-185] + _ = x[WAITPKG-186] + _ = x[WBNOINVD-187] + _ = x[WRMSRNS-188] + _ = x[X87-189] + _ = x[XGETBV1-190] + _ = x[XOP-191] + _ = x[XSAVE-192] + _ = x[XSAVEC-193] + _ = x[XSAVEOPT-194] + _ = x[XSAVES-195] + _ = x[AESARM-196] + _ = x[ARMCPUID-197] + _ = x[ASIMD-198] + _ = x[ASIMDDP-199] + _ = x[ASIMDHP-200] + _ = x[ASIMDRDM-201] + _ = x[ATOMICS-202] + _ = x[CRC32-203] + _ = x[DCPOP-204] + _ = x[EVTSTRM-205] + _ = x[FCMA-206] + _ = x[FP-207] + _ = x[FPHP-208] + _ = x[GPA-209] + _ = x[JSCVT-210] + _ = x[LRCPC-211] + _ = x[PMULL-212] + _ = x[SHA1-213] + _ = x[SHA2-214] + _ = x[SHA3-215] + _ = x[SHA512-216] + _ = x[SM3-217] + _ = x[SM4-218] + _ = x[SVE-219] + _ = x[lastID-220] _ = x[firstID-0] } -const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXFP16AMXINT8AMXTILEAPX_FAVXAVX10AVX10_128AVX10_256AVX10_512AVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXIFMAAVXNECONVERTAVXSLOWAVXVNNIAVXVNNIINT8BHI_CTRLBMI1BMI2CETIBTCETSSCLDEMOTECLMULCLZEROCMOVCMPCCXADDCMPSB_SCADBS_SHORTCMPXCHG8CPBOOSTCPPCCX16EFER_LMSLE_UNSENQCMDERMSF16CFLUSH_L1DFMA3FMA4FP128FP256FSRMFXSRFXSROPTGFNIHLEHRESETHTTHWAHYBRID_CPUHYPERVISORIA32_ARCH_CAPIA32_CORE_CAPIBPBIBRSIBRS_PREFERREDIBRS_PROVIDES_SMPIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKIBS_FETCH_CTLXIBS_OPDATA4IBS_OPFUSEIBS_PREVENTHOSTIBS_ZEN4IDPRED_CTRLINT_WBINVDINVLPGBKEYLOCKERKEYLOCKERWLAHFLAMLBRVIRTLZCNTMCAOVERFLOWMCDT_NOMCOMMITMD_CLEARMMXMMXEXTMOVBEMOVDIR64BMOVDIRIMOVSB_ZLMOVUMPXMSRIRCMSRLISTMSR_PAGEFLUSHNRIPSNXOSXSAVEPCONFIGPOPCNTPPINPREFETCHIPSFDRDPRURDRANDRDSEEDRDTSCPRRSBA_CTRLRTMRTM_ALWAYS_ABORTSERIALIZESEVSEV_64BITSEV_ALTERNATIVESEV_DEBUGSWAPSEV_ESSEV_RESTRICTEDSEV_SNPSGXSGXLCSHASMESME_COHERENTSPEC_CTRL_SSBDSRBDS_CTRLSSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSTIBP_ALWAYSONSTOSB_SHORTSUCCORSVMSVMDASVMFBASIDSVMLSVMNPSVMPFSVMPFTSYSCALLSYSEETBMTDX_GUESTTLB_FLUSH_NESTEDTMETOPEXTTSCRATEMSRTSXLDTRKVAESVMCBCLEANVMPLVMSA_REGPROTVMXVPCLMULQDQVTEWAITPKGWBNOINVDWRMSRNSX87XGETBV1XOPXSAVEXSAVECXSAVEOPTXSAVESAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFPFPHPGPAJSCVTLRCPCPMULLSHA1SHA2SHA3SHA512SM3SM4SVElastID" +const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXFP16AMXINT8AMXFP8AMXTILEAPX_FAVXAVX10AVX10_128AVX10_256AVX10_512AVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXIFMAAVXNECONVERTAVXSLOWAVXVNNIAVXVNNIINT8AVXVNNIINT16BHI_CTRLBMI1BMI2CETIBTCETSSCLDEMOTECLMULCLZEROCMOVCMPCCXADDCMPSB_SCADBS_SHORTCMPXCHG8CPBOOSTCPPCCX16EFER_LMSLE_UNSENQCMDERMSF16CFLUSH_L1DFMA3FMA4FP128FP256FSRMFXSRFXSROPTGFNIHLEHRESETHTTHWAHYBRID_CPUHYPERVISORIA32_ARCH_CAPIA32_CORE_CAPIBPBIBPB_BRTYPEIBRSIBRS_PREFERREDIBRS_PROVIDES_SMPIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKIBS_FETCH_CTLXIBS_OPDATA4IBS_OPFUSEIBS_PREVENTHOSTIBS_ZEN4IDPRED_CTRLINT_WBINVDINVLPGBKEYLOCKERKEYLOCKERWLAHFLAMLBRVIRTLZCNTMCAOVERFLOWMCDT_NOMCOMMITMD_CLEARMMXMMXEXTMOVBEMOVDIR64BMOVDIRIMOVSB_ZLMOVUMPXMSRIRCMSRLISTMSR_PAGEFLUSHNRIPSNXOSXSAVEPCONFIGPOPCNTPPINPREFETCHIPSFDRDPRURDRANDRDSEEDRDTSCPRRSBA_CTRLRTMRTM_ALWAYS_ABORTSBPBSERIALIZESEVSEV_64BITSEV_ALTERNATIVESEV_DEBUGSWAPSEV_ESSEV_RESTRICTEDSEV_SNPSGXSGXLCSHASMESME_COHERENTSPEC_CTRL_SSBDSRBDS_CTRLSRSO_MSR_FIXSRSO_NOSRSO_USER_KERNEL_NOSSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSTIBP_ALWAYSONSTOSB_SHORTSUCCORSVMSVMDASVMFBASIDSVMLSVMNPSVMPFSVMPFTSYSCALLSYSEETBMTDX_GUESTTLB_FLUSH_NESTEDTMETOPEXTTSCRATEMSRTSXLDTRKVAESVMCBCLEANVMPLVMSA_REGPROTVMXVPCLMULQDQVTEWAITPKGWBNOINVDWRMSRNSX87XGETBV1XOPXSAVEXSAVECXSAVEOPTXSAVESAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFPFPHPGPAJSCVTLRCPCPMULLSHA1SHA2SHA3SHA512SM3SM4SVElastID" -var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 62, 67, 70, 75, 84, 93, 102, 106, 116, 128, 136, 144, 152, 160, 167, 177, 187, 195, 205, 216, 224, 234, 252, 267, 274, 286, 293, 300, 311, 319, 323, 327, 333, 338, 346, 351, 357, 361, 370, 388, 396, 403, 407, 411, 425, 431, 435, 439, 448, 452, 456, 461, 466, 470, 474, 481, 485, 488, 494, 497, 500, 510, 520, 533, 546, 550, 554, 568, 585, 588, 598, 609, 615, 623, 634, 642, 654, 670, 684, 695, 705, 720, 728, 739, 749, 756, 765, 775, 779, 782, 789, 794, 805, 812, 819, 827, 830, 836, 841, 850, 857, 865, 869, 872, 878, 885, 898, 903, 905, 912, 919, 925, 929, 938, 942, 947, 953, 959, 965, 975, 978, 994, 1003, 1006, 1015, 1030, 1043, 1049, 1063, 1070, 1073, 1078, 1081, 1084, 1096, 1110, 1120, 1123, 1127, 1131, 1135, 1140, 1145, 1150, 1155, 1169, 1180, 1186, 1189, 1194, 1203, 1207, 1212, 1217, 1223, 1230, 1235, 1238, 1247, 1263, 1266, 1272, 1282, 1290, 1294, 1303, 1307, 1319, 1322, 1332, 1335, 1342, 1350, 1357, 1360, 1367, 1370, 1375, 1381, 1389, 1395, 1401, 1409, 1414, 1421, 1428, 1436, 1443, 1448, 1453, 1460, 1464, 1466, 1470, 1473, 1478, 1483, 1488, 1492, 1496, 1500, 1506, 1509, 1512, 1515, 1521} +var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 61, 68, 73, 76, 81, 90, 99, 108, 112, 122, 134, 142, 150, 158, 166, 173, 183, 193, 201, 211, 222, 230, 240, 258, 273, 280, 292, 299, 306, 317, 329, 337, 341, 345, 351, 356, 364, 369, 375, 379, 388, 406, 414, 421, 425, 429, 443, 449, 453, 457, 466, 470, 474, 479, 484, 488, 492, 499, 503, 506, 512, 515, 518, 528, 538, 551, 564, 568, 579, 583, 597, 614, 617, 627, 638, 644, 652, 663, 671, 683, 699, 713, 724, 734, 749, 757, 768, 778, 785, 794, 804, 808, 811, 818, 823, 834, 841, 848, 856, 859, 865, 870, 879, 886, 894, 898, 901, 907, 914, 927, 932, 934, 941, 948, 954, 958, 967, 971, 976, 982, 988, 994, 1004, 1007, 1023, 1027, 1036, 1039, 1048, 1063, 1076, 1082, 1096, 1103, 1106, 1111, 1114, 1117, 1129, 1143, 1153, 1165, 1172, 1191, 1194, 1198, 1202, 1206, 1211, 1216, 1221, 1226, 1240, 1251, 1257, 1260, 1265, 1274, 1278, 1283, 1288, 1294, 1301, 1306, 1309, 1318, 1334, 1337, 1343, 1353, 1361, 1365, 1374, 1378, 1390, 1393, 1403, 1406, 1413, 1421, 1428, 1431, 1438, 1441, 1446, 1452, 1460, 1466, 1472, 1480, 1485, 1492, 1499, 1507, 1514, 1519, 1524, 1531, 1535, 1537, 1541, 1544, 1549, 1554, 1559, 1563, 1567, 1571, 1577, 1580, 1583, 1586, 1592} func (i FeatureID) String() string { if i < 0 || i >= FeatureID(len(_FeatureID_index)-1) { @@ -264,12 +271,17 @@ func _() { _ = x[AMCC-23] _ = x[Qualcomm-24] _ = x[Marvell-25] - _ = x[lastVendor-26] + _ = x[QEMU-26] + _ = x[QNX-27] + _ = x[ACRN-28] + _ = x[SRE-29] + _ = x[Apple-30] + _ = x[lastVendor-31] } -const _Vendor_name = "VendorUnknownIntelAMDVIATransmetaNSCKVMMSVMVMwareXenHVMBhyveHygonSiSRDCAmpereARMBroadcomCaviumDECFujitsuInfineonMotorolaNVIDIAAMCCQualcommMarvelllastVendor" +const _Vendor_name = "VendorUnknownIntelAMDVIATransmetaNSCKVMMSVMVMwareXenHVMBhyveHygonSiSRDCAmpereARMBroadcomCaviumDECFujitsuInfineonMotorolaNVIDIAAMCCQualcommMarvellQEMUQNXACRNSREApplelastVendor" -var _Vendor_index = [...]uint8{0, 13, 18, 21, 24, 33, 36, 39, 43, 49, 55, 60, 65, 68, 71, 77, 80, 88, 94, 97, 104, 112, 120, 126, 130, 138, 145, 155} +var _Vendor_index = [...]uint8{0, 13, 18, 21, 24, 33, 36, 39, 43, 49, 55, 60, 65, 68, 71, 77, 80, 88, 94, 97, 104, 112, 120, 126, 130, 138, 145, 149, 152, 156, 159, 164, 174} func (i Vendor) String() string { if i < 0 || i >= Vendor(len(_Vendor_index)-1) { diff --git a/vendor/github.com/pierrec/lz4/v4/internal/lz4stream/block.go b/vendor/github.com/pierrec/lz4/v4/internal/lz4stream/block.go index e9646546..04aaca84 100644 --- a/vendor/github.com/pierrec/lz4/v4/internal/lz4stream/block.go +++ b/vendor/github.com/pierrec/lz4/v4/internal/lz4stream/block.go @@ -246,7 +246,7 @@ func (b *FrameDataBlock) Compress(f *Frame, src []byte, level lz4block.Compressi b.src = src // keep track of the source for content checksum if f.Descriptor.Flags.BlockChecksum() { - b.Checksum = xxh32.ChecksumZero(src) + b.Checksum = xxh32.ChecksumZero(b.Data) } return b } @@ -328,7 +328,7 @@ func (b *FrameDataBlock) Uncompress(f *Frame, dst, dict []byte, sum bool) ([]byt dst = dst[:n] } if f.Descriptor.Flags.BlockChecksum() { - if c := xxh32.ChecksumZero(dst); c != b.Checksum { + if c := xxh32.ChecksumZero(b.data); c != b.Checksum { err := fmt.Errorf("%w: got %x; expected %x", lz4errors.ErrInvalidBlockChecksum, c, b.Checksum) return nil, err } diff --git a/vendor/github.com/shopspring/decimal/.travis.yml b/vendor/github.com/shopspring/decimal/.travis.yml deleted file mode 100644 index 6326d40f..00000000 --- a/vendor/github.com/shopspring/decimal/.travis.yml +++ /dev/null @@ -1,19 +0,0 @@ -language: go - -arch: - - amd64 - - ppc64le - -go: - - 1.7.x - - 1.14.x - - 1.15.x - - 1.16.x - - 1.17.x - - tip - -install: - - go build . - -script: - - go test -v diff --git a/vendor/github.com/shopspring/decimal/CHANGELOG.md b/vendor/github.com/shopspring/decimal/CHANGELOG.md index aea61154..432d0fd4 100644 --- a/vendor/github.com/shopspring/decimal/CHANGELOG.md +++ b/vendor/github.com/shopspring/decimal/CHANGELOG.md @@ -1,3 +1,30 @@ +## Decimal v1.4.0 +#### BREAKING +- Drop support for Go version older than 1.10 [#361](https://github.com/shopspring/decimal/pull/361) + +#### FEATURES +- Add implementation of natural logarithm [#339](https://github.com/shopspring/decimal/pull/339) [#357](https://github.com/shopspring/decimal/pull/357) +- Add improved implementation of power operation [#358](https://github.com/shopspring/decimal/pull/358) +- Add Compare method which forwards calls to Cmp [#346](https://github.com/shopspring/decimal/pull/346) +- Add NewFromBigRat constructor [#288](https://github.com/shopspring/decimal/pull/288) +- Add NewFromUint64 constructor [#352](https://github.com/shopspring/decimal/pull/352) + +#### ENHANCEMENTS +- Migrate to Github Actions [#245](https://github.com/shopspring/decimal/pull/245) [#340](https://github.com/shopspring/decimal/pull/340) +- Fix examples for RoundDown, RoundFloor, RoundUp, and RoundCeil [#285](https://github.com/shopspring/decimal/pull/285) [#328](https://github.com/shopspring/decimal/pull/328) [#341](https://github.com/shopspring/decimal/pull/341) +- Use Godoc standard to mark deprecated Equals and StringScaled methods [#342](https://github.com/shopspring/decimal/pull/342) +- Removed unnecessary min function for RescalePair method [#265](https://github.com/shopspring/decimal/pull/265) +- Avoid reallocation of initial slice in MarshalBinary (GobEncode) [#355](https://github.com/shopspring/decimal/pull/355) +- Optimize NumDigits method [#301](https://github.com/shopspring/decimal/pull/301) [#356](https://github.com/shopspring/decimal/pull/356) +- Optimize BigInt method [#359](https://github.com/shopspring/decimal/pull/359) +- Support scanning uint64 [#131](https://github.com/shopspring/decimal/pull/131) [#364](https://github.com/shopspring/decimal/pull/364) +- Add docs section with alternative libraries [#363](https://github.com/shopspring/decimal/pull/363) + +#### BUGFIXES +- Fix incorrect calculation of decimal modulo [#258](https://github.com/shopspring/decimal/pull/258) [#317](https://github.com/shopspring/decimal/pull/317) +- Allocate new(big.Int) in Copy method to deeply clone it [#278](https://github.com/shopspring/decimal/pull/278) +- Fix overflow edge case in QuoRem method [#322](https://github.com/shopspring/decimal/pull/322) + ## Decimal v1.3.1 #### ENHANCEMENTS diff --git a/vendor/github.com/shopspring/decimal/README.md b/vendor/github.com/shopspring/decimal/README.md index 2e35df06..318c9df5 100644 --- a/vendor/github.com/shopspring/decimal/README.md +++ b/vendor/github.com/shopspring/decimal/README.md @@ -1,6 +1,8 @@ # decimal -[![Build Status](https://app.travis-ci.com/shopspring/decimal.svg?branch=master)](https://app.travis-ci.com/shopspring/decimal) [![GoDoc](https://godoc.org/github.com/shopspring/decimal?status.svg)](https://godoc.org/github.com/shopspring/decimal) [![Go Report Card](https://goreportcard.com/badge/github.com/shopspring/decimal)](https://goreportcard.com/report/github.com/shopspring/decimal) +[![ci](https://github.com/shopspring/decimal/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/shopspring/decimal/actions/workflows/ci.yml) +[![GoDoc](https://godoc.org/github.com/shopspring/decimal?status.svg)](https://godoc.org/github.com/shopspring/decimal) +[![Go Report Card](https://goreportcard.com/badge/github.com/shopspring/decimal)](https://goreportcard.com/report/github.com/shopspring/decimal) Arbitrary-precision fixed-point decimal numbers in go. @@ -20,7 +22,12 @@ Run `go get github.com/shopspring/decimal` ## Requirements -Decimal library requires Go version `>=1.7` +Decimal library requires Go version `>=1.10` + +## Documentation + +http://godoc.org/github.com/shopspring/decimal + ## Usage @@ -57,14 +64,16 @@ func main() { } ``` -## Documentation - -http://godoc.org/github.com/shopspring/decimal +## Alternative libraries -## Production Usage +When working with decimal numbers, you might face problems this library is not perfectly suited for. +Fortunately, thanks to the wonderful community we have a dozen other libraries that you can choose from. +Explore other alternatives to find the one that best fits your needs :) -* [Spring](https://shopspring.com/), since August 14, 2014. -* If you are using this in production, please let us know! +* [cockroachdb/apd](https://github.com/cockroachdb/apd) - arbitrary precision, mutable and rich API similar to `big.Int`, more performant than this library +* [alpacahq/alpacadecimal](https://github.com/alpacahq/alpacadecimal) - high performance, low precision (12 digits), fully compatible API with this library +* [govalues/decimal](https://github.com/govalues/decimal) - high performance, zero-allocation, low precision (19 digits) +* [greatcloak/decimal](https://github.com/greatcloak/decimal) - fork focusing on billing and e-commerce web application related use cases, includes out-of-the-box BSON marshaling support ## FAQ diff --git a/vendor/github.com/shopspring/decimal/const.go b/vendor/github.com/shopspring/decimal/const.go new file mode 100644 index 00000000..e5d6fa87 --- /dev/null +++ b/vendor/github.com/shopspring/decimal/const.go @@ -0,0 +1,63 @@ +package decimal + +import ( + "strings" +) + +const ( + strLn10 = "2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286248633409525465082806756666287369098781689482907208325554680843799894826233198528393505308965377732628846163366222287698219886746543667474404243274365155048934314939391479619404400222105101714174800368808401264708068556774321622835522011480466371565912137345074785694768346361679210180644507064800027750268491674655058685693567342067058113642922455440575892572420824131469568901675894025677631135691929203337658714166023010570308963457207544037084746994016826928280848118428931484852494864487192780967627127577539702766860595249671667418348570442250719796500471495105049221477656763693866297697952211071826454973477266242570942932258279850258550978526538320760672631716430950599508780752371033310119785754733154142180842754386359177811705430982748238504564801909561029929182431823752535770975053956518769751037497088869218020518933950723853920514463419726528728696511086257149219884997874887377134568620916705849807828059751193854445009978131146915934666241071846692310107598438319191292230792503747298650929009880391941702654416816335727555703151596113564846546190897042819763365836983716328982174407366009162177850541779276367731145041782137660111010731042397832521894898817597921798666394319523936855916447118246753245630912528778330963604262982153040874560927760726641354787576616262926568298704957954913954918049209069438580790032763017941503117866862092408537949861264933479354871737451675809537088281067452440105892444976479686075120275724181874989395971643105518848195288330746699317814634930000321200327765654130472621883970596794457943468343218395304414844803701305753674262153675579814770458031413637793236291560128185336498466942261465206459942072917119370602444929358037007718981097362533224548366988505528285966192805098447175198503666680874970496982273220244823343097169111136813588418696549323714996941979687803008850408979618598756579894836445212043698216415292987811742973332588607915912510967187510929248475023930572665446276200923068791518135803477701295593646298412366497023355174586195564772461857717369368404676577047874319780573853271810933883496338813069945569399346101090745616033312247949360455361849123333063704751724871276379140924398331810164737823379692265637682071706935846394531616949411701841938119405416449466111274712819705817783293841742231409930022911502362192186723337268385688273533371925103412930705632544426611429765388301822384091026198582888433587455960453004548370789052578473166283701953392231047527564998119228742789713715713228319641003422124210082180679525276689858180956119208391760721080919923461516952599099473782780648128058792731993893453415320185969711021407542282796298237068941764740642225757212455392526179373652434440560595336591539160312524480149313234572453879524389036839236450507881731359711238145323701508413491122324390927681724749607955799151363982881058285740538000653371655553014196332241918087621018204919492651483892" +) + +var ( + ln10 = newConstApproximation(strLn10) +) + +type constApproximation struct { + exact Decimal + approximations []Decimal +} + +func newConstApproximation(value string) constApproximation { + parts := strings.Split(value, ".") + coeff, fractional := parts[0], parts[1] + + coeffLen := len(coeff) + maxPrecision := len(fractional) + + var approximations []Decimal + for p := 1; p < maxPrecision; p *= 2 { + r := RequireFromString(value[:coeffLen+p]) + approximations = append(approximations, r) + } + + return constApproximation{ + RequireFromString(value), + approximations, + } +} + +// Returns the smallest approximation available that's at least as precise +// as the passed precision (places after decimal point), i.e. Floor[ log2(precision) ] + 1 +func (c constApproximation) withPrecision(precision int32) Decimal { + i := 0 + + if precision >= 1 { + i++ + } + + for precision >= 16 { + precision /= 16 + i += 4 + } + + for precision >= 2 { + precision /= 2 + i++ + } + + if i >= len(c.approximations) { + return c.exact + } + + return c.approximations[i] +} diff --git a/vendor/github.com/shopspring/decimal/decimal.go b/vendor/github.com/shopspring/decimal/decimal.go index 84405ec1..a37a2301 100644 --- a/vendor/github.com/shopspring/decimal/decimal.go +++ b/vendor/github.com/shopspring/decimal/decimal.go @@ -4,14 +4,14 @@ // // The best way to create a new Decimal is to use decimal.NewFromString, ex: // -// n, err := decimal.NewFromString("-123.4567") -// n.String() // output: "-123.4567" +// n, err := decimal.NewFromString("-123.4567") +// n.String() // output: "-123.4567" // // To use Decimal as part of a struct: // -// type Struct struct { -// Number Decimal -// } +// type StructName struct { +// Number Decimal +// } // // Note: This can "only" represent numbers with a maximum of 2^31 digits after the decimal point. package decimal @@ -32,18 +32,31 @@ import ( // // Example: // -// d1 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(3)) -// d1.String() // output: "0.6666666666666667" -// d2 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(30000)) -// d2.String() // output: "0.0000666666666667" -// d3 := decimal.NewFromFloat(20000).Div(decimal.NewFromFloat(3)) -// d3.String() // output: "6666.6666666666666667" -// decimal.DivisionPrecision = 3 -// d4 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(3)) -// d4.String() // output: "0.667" -// +// d1 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(3)) +// d1.String() // output: "0.6666666666666667" +// d2 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(30000)) +// d2.String() // output: "0.0000666666666667" +// d3 := decimal.NewFromFloat(20000).Div(decimal.NewFromFloat(3)) +// d3.String() // output: "6666.6666666666666667" +// decimal.DivisionPrecision = 3 +// d4 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(3)) +// d4.String() // output: "0.667" var DivisionPrecision = 16 +// PowPrecisionNegativeExponent specifies the maximum precision of the result (digits after decimal point) +// when calculating decimal power. Only used for cases where the exponent is a negative number. +// This constant applies to Pow, PowInt32 and PowBigInt methods, PowWithPrecision method is not constrained by it. +// +// Example: +// +// d1, err := decimal.NewFromFloat(15.2).PowInt32(-2) +// d1.String() // output: "0.0043282548476454" +// +// decimal.PowPrecisionNegativeExponent = 24 +// d2, err := decimal.NewFromFloat(15.2).PowInt32(-2) +// d2.String() // output: "0.004328254847645429362881" +var PowPrecisionNegativeExponent = 16 + // MarshalJSONWithoutQuotes should be set to true if you want the decimal to // be JSON marshaled as a number, instead of as a string. // WARNING: this is dangerous for decimals with many digits, since many JSON @@ -91,12 +104,12 @@ func New(value int64, exp int32) Decimal { } } -// NewFromInt converts a int64 to Decimal. +// NewFromInt converts an int64 to Decimal. // // Example: // -// NewFromInt(123).String() // output: "123" -// NewFromInt(-10).String() // output: "-10" +// NewFromInt(123).String() // output: "123" +// NewFromInt(-10).String() // output: "-10" func NewFromInt(value int64) Decimal { return Decimal{ value: big.NewInt(value), @@ -104,12 +117,12 @@ func NewFromInt(value int64) Decimal { } } -// NewFromInt32 converts a int32 to Decimal. +// NewFromInt32 converts an int32 to Decimal. // // Example: // -// NewFromInt(123).String() // output: "123" -// NewFromInt(-10).String() // output: "-10" +// NewFromInt(123).String() // output: "123" +// NewFromInt(-10).String() // output: "-10" func NewFromInt32(value int32) Decimal { return Decimal{ value: big.NewInt(int64(value)), @@ -117,6 +130,18 @@ func NewFromInt32(value int32) Decimal { } } +// NewFromUint64 converts an uint64 to Decimal. +// +// Example: +// +// NewFromUint64(123).String() // output: "123" +func NewFromUint64(value uint64) Decimal { + return Decimal{ + value: new(big.Int).SetUint64(value), + exp: 0, + } +} + // NewFromBigInt returns a new Decimal from a big.Int, value * 10 ^ exp func NewFromBigInt(value *big.Int, exp int32) Decimal { return Decimal{ @@ -125,15 +150,33 @@ func NewFromBigInt(value *big.Int, exp int32) Decimal { } } +// NewFromBigRat returns a new Decimal from a big.Rat. The numerator and +// denominator are divided and rounded to the given precision. +// +// Example: +// +// d1 := NewFromBigRat(big.NewRat(0, 1), 0) // output: "0" +// d2 := NewFromBigRat(big.NewRat(4, 5), 1) // output: "0.8" +// d3 := NewFromBigRat(big.NewRat(1000, 3), 3) // output: "333.333" +// d4 := NewFromBigRat(big.NewRat(2, 7), 4) // output: "0.2857" +func NewFromBigRat(value *big.Rat, precision int32) Decimal { + return Decimal{ + value: new(big.Int).Set(value.Num()), + exp: 0, + }.DivRound(Decimal{ + value: new(big.Int).Set(value.Denom()), + exp: 0, + }, precision) +} + // NewFromString returns a new Decimal from a string representation. // Trailing zeroes are not trimmed. // // Example: // -// d, err := NewFromString("-123.45") -// d2, err := NewFromString(".0001") -// d3, err := NewFromString("1.47000") -// +// d, err := NewFromString("-123.45") +// d2, err := NewFromString(".0001") +// d3, err := NewFromString("1.47000") func NewFromString(value string) (Decimal, error) { originalInput := value var intString string @@ -211,15 +254,14 @@ func NewFromString(value string) (Decimal, error) { // // Example: // -// r := regexp.MustCompile("[$,]") -// d1, err := NewFromFormattedString("$5,125.99", r) +// r := regexp.MustCompile("[$,]") +// d1, err := NewFromFormattedString("$5,125.99", r) // -// r2 := regexp.MustCompile("[_]") -// d2, err := NewFromFormattedString("1_000_000", r2) -// -// r3 := regexp.MustCompile("[USD\\s]") -// d3, err := NewFromFormattedString("5000 USD", r3) +// r2 := regexp.MustCompile("[_]") +// d2, err := NewFromFormattedString("1_000_000", r2) // +// r3 := regexp.MustCompile("[USD\\s]") +// d3, err := NewFromFormattedString("5000 USD", r3) func NewFromFormattedString(value string, replRegexp *regexp.Regexp) (Decimal, error) { parsedValue := replRegexp.ReplaceAllString(value, "") d, err := NewFromString(parsedValue) @@ -230,13 +272,12 @@ func NewFromFormattedString(value string, replRegexp *regexp.Regexp) (Decimal, e } // RequireFromString returns a new Decimal from a string representation -// or panics if NewFromString would have returned an error. +// or panics if NewFromString had returned an error. // // Example: // -// d := RequireFromString("-123.45") -// d2 := RequireFromString(".0001") -// +// d := RequireFromString("-123.45") +// d2 := RequireFromString(".0001") func RequireFromString(value string) Decimal { dec, err := NewFromString(value) if err != nil { @@ -332,8 +373,7 @@ func newFromFloat(val float64, bits uint64, flt *floatInfo) Decimal { // // Example: // -// NewFromFloatWithExponent(123.456, -2).String() // output: "123.46" -// +// NewFromFloatWithExponent(123.456, -2).String() // output: "123.46" func NewFromFloatWithExponent(value float64, exp int32) Decimal { if math.IsNaN(value) || math.IsInf(value, 0) { panic(fmt.Sprintf("Cannot create a Decimal from %v", value)) @@ -418,7 +458,7 @@ func NewFromFloatWithExponent(value float64, exp int32) Decimal { func (d Decimal) Copy() Decimal { d.ensureInitialized() return Decimal{ - value: &(*d.value), + value: new(big.Int).Set(d.value), exp: d.exp, } } @@ -430,7 +470,7 @@ func (d Decimal) Copy() Decimal { // // Example: // -// d := New(12345, -4) +// d := New(12345, -4) // d2 := d.rescale(-1) // d3 := d2.rescale(-4) // println(d1) @@ -442,7 +482,6 @@ func (d Decimal) Copy() Decimal { // 1.2345 // 1.2 // 1.2000 -// func (d Decimal) rescale(exp int32) Decimal { d.ensureInitialized() @@ -552,11 +591,13 @@ func (d Decimal) Div(d2 Decimal) Decimal { return d.DivRound(d2, int32(DivisionPrecision)) } -// QuoRem does divsion with remainder +// QuoRem does division with remainder // d.QuoRem(d2,precision) returns quotient q and remainder r such that -// d = d2 * q + r, q an integer multiple of 10^(-precision) -// 0 <= r < abs(d2) * 10 ^(-precision) if d>=0 -// 0 >= r > -abs(d2) * 10 ^(-precision) if d<0 +// +// d = d2 * q + r, q an integer multiple of 10^(-precision) +// 0 <= r < abs(d2) * 10 ^(-precision) if d>=0 +// 0 >= r > -abs(d2) * 10 ^(-precision) if d<0 +// // Note that precision<0 is allowed as input. func (d Decimal) QuoRem(d2 Decimal, precision int32) (Decimal, Decimal) { d.ensureInitialized() @@ -565,7 +606,7 @@ func (d Decimal) QuoRem(d2 Decimal, precision int32) (Decimal, Decimal) { panic("decimal division by 0") } scale := -precision - e := int64(d.exp - d2.exp - scale) + e := int64(d.exp) - int64(d2.exp) - int64(scale) if e > math.MaxInt32 || e < math.MinInt32 { panic("overflow in decimal QuoRem") } @@ -599,8 +640,10 @@ func (d Decimal) QuoRem(d2 Decimal, precision int32) (Decimal, Decimal) { // DivRound divides and rounds to a given precision // i.e. to an integer multiple of 10^(-precision) -// for a positive quotient digit 5 is rounded up, away from 0 -// if the quotient is negative then digit 5 is rounded down, away from 0 +// +// for a positive quotient digit 5 is rounded up, away from 0 +// if the quotient is negative then digit 5 is rounded down, away from 0 +// // Note that precision<0 is allowed as input. func (d Decimal) DivRound(d2 Decimal, precision int32) Decimal { // QuoRem already checks initialization @@ -628,24 +671,278 @@ func (d Decimal) DivRound(d2 Decimal, precision int32) Decimal { // Mod returns d % d2. func (d Decimal) Mod(d2 Decimal) Decimal { - quo := d.Div(d2).Truncate(0) - return d.Sub(d2.Mul(quo)) + _, r := d.QuoRem(d2, 0) + return r } -// Pow returns d to the power d2 +// Pow returns d to the power of d2. +// When exponent is negative the returned decimal will have maximum precision of PowPrecisionNegativeExponent places after decimal point. +// +// Pow returns 0 (zero-value of Decimal) instead of error for power operation edge cases, to handle those edge cases use PowWithPrecision +// Edge cases not handled by Pow: +// - 0 ** 0 => undefined value +// - 0 ** y, where y < 0 => infinity +// - x ** y, where x < 0 and y is non-integer decimal => imaginary value +// +// Example: +// +// d1 := decimal.NewFromFloat(4.0) +// d2 := decimal.NewFromFloat(4.0) +// res1 := d1.Pow(d2) +// res1.String() // output: "256" +// +// d3 := decimal.NewFromFloat(5.0) +// d4 := decimal.NewFromFloat(5.73) +// res2 := d3.Pow(d4) +// res2.String() // output: "10118.08037125" func (d Decimal) Pow(d2 Decimal) Decimal { - var temp Decimal - if d2.IntPart() == 0 { - return NewFromFloat(1) + baseSign := d.Sign() + expSign := d2.Sign() + + if baseSign == 0 { + if expSign == 0 { + return Decimal{} + } + if expSign == 1 { + return Decimal{zeroInt, 0} + } + if expSign == -1 { + return Decimal{} + } + } + + if expSign == 0 { + return Decimal{oneInt, 0} + } + + // TODO: optimize extraction of fractional part + one := Decimal{oneInt, 0} + expIntPart, expFracPart := d2.QuoRem(one, 0) + + if baseSign == -1 && !expFracPart.IsZero() { + return Decimal{} + } + + intPartPow, _ := d.PowBigInt(expIntPart.value) + + // if exponent is an integer we don't need to calculate d1**frac(d2) + if expFracPart.value.Sign() == 0 { + return intPartPow + } + + // TODO: optimize NumDigits for more performant precision adjustment + digitsBase := d.NumDigits() + digitsExponent := d2.NumDigits() + + precision := digitsBase + + if digitsExponent > precision { + precision += digitsExponent + } + + precision += 6 + + // Calculate x ** frac(y), where + // x ** frac(y) = exp(ln(x ** frac(y)) = exp(ln(x) * frac(y)) + fracPartPow, err := d.Abs().Ln(-d.exp + int32(precision)) + if err != nil { + return Decimal{} + } + + fracPartPow = fracPartPow.Mul(expFracPart) + + fracPartPow, err = fracPartPow.ExpTaylor(-d.exp + int32(precision)) + if err != nil { + return Decimal{} + } + + // Join integer and fractional part, + // base ** (expBase + expFrac) = base ** expBase * base ** expFrac + res := intPartPow.Mul(fracPartPow) + + return res +} + +// PowWithPrecision returns d to the power of d2. +// Precision parameter specifies minimum precision of the result (digits after decimal point). +// Returned decimal is not rounded to 'precision' places after decimal point. +// +// PowWithPrecision returns error when: +// - 0 ** 0 => undefined value +// - 0 ** y, where y < 0 => infinity +// - x ** y, where x < 0 and y is non-integer decimal => imaginary value +// +// Example: +// +// d1 := decimal.NewFromFloat(4.0) +// d2 := decimal.NewFromFloat(4.0) +// res1, err := d1.PowWithPrecision(d2, 2) +// res1.String() // output: "256" +// +// d3 := decimal.NewFromFloat(5.0) +// d4 := decimal.NewFromFloat(5.73) +// res2, err := d3.PowWithPrecision(d4, 5) +// res2.String() // output: "10118.080371595015625" +// +// d5 := decimal.NewFromFloat(-3.0) +// d6 := decimal.NewFromFloat(-6.0) +// res3, err := d5.PowWithPrecision(d6, 10) +// res3.String() // output: "0.0013717421" +func (d Decimal) PowWithPrecision(d2 Decimal, precision int32) (Decimal, error) { + baseSign := d.Sign() + expSign := d2.Sign() + + if baseSign == 0 { + if expSign == 0 { + return Decimal{}, fmt.Errorf("cannot represent undefined value of 0**0") + } + if expSign == 1 { + return Decimal{zeroInt, 0}, nil + } + if expSign == -1 { + return Decimal{}, fmt.Errorf("cannot represent infinity value of 0 ** y, where y < 0") + } + } + + if expSign == 0 { + return Decimal{oneInt, 0}, nil + } + + // TODO: optimize extraction of fractional part + one := Decimal{oneInt, 0} + expIntPart, expFracPart := d2.QuoRem(one, 0) + + if baseSign == -1 && !expFracPart.IsZero() { + return Decimal{}, fmt.Errorf("cannot represent imaginary value of x ** y, where x < 0 and y is non-integer decimal") + } + + intPartPow, _ := d.powBigIntWithPrecision(expIntPart.value, precision) + + // if exponent is an integer we don't need to calculate d1**frac(d2) + if expFracPart.value.Sign() == 0 { + return intPartPow, nil + } + + // TODO: optimize NumDigits for more performant precision adjustment + digitsBase := d.NumDigits() + digitsExponent := d2.NumDigits() + + if int32(digitsBase) > precision { + precision = int32(digitsBase) + } + if int32(digitsExponent) > precision { + precision += int32(digitsExponent) + } + // increase precision by 10 to compensate for errors in further calculations + precision += 10 + + // Calculate x ** frac(y), where + // x ** frac(y) = exp(ln(x ** frac(y)) = exp(ln(x) * frac(y)) + fracPartPow, err := d.Abs().Ln(precision) + if err != nil { + return Decimal{}, err + } + + fracPartPow = fracPartPow.Mul(expFracPart) + + fracPartPow, err = fracPartPow.ExpTaylor(precision) + if err != nil { + return Decimal{}, err + } + + // Join integer and fractional part, + // base ** (expBase + expFrac) = base ** expBase * base ** expFrac + res := intPartPow.Mul(fracPartPow) + + return res, nil +} + +// PowInt32 returns d to the power of exp, where exp is int32. +// Only returns error when d and exp is 0, thus result is undefined. +// +// When exponent is negative the returned decimal will have maximum precision of PowPrecisionNegativeExponent places after decimal point. +// +// Example: +// +// d1, err := decimal.NewFromFloat(4.0).PowInt32(4) +// d1.String() // output: "256" +// +// d2, err := decimal.NewFromFloat(3.13).PowInt32(5) +// d2.String() // output: "300.4150512793" +func (d Decimal) PowInt32(exp int32) (Decimal, error) { + if d.IsZero() && exp == 0 { + return Decimal{}, fmt.Errorf("cannot represent undefined value of 0**0") + } + + isExpNeg := exp < 0 + exp = abs(exp) + + n, result := d, New(1, 0) + + for exp > 0 { + if exp%2 == 1 { + result = result.Mul(n) + } + exp /= 2 + + if exp > 0 { + n = n.Mul(n) + } + } + + if isExpNeg { + return New(1, 0).DivRound(result, int32(PowPrecisionNegativeExponent)), nil + } + + return result, nil +} + +// PowBigInt returns d to the power of exp, where exp is big.Int. +// Only returns error when d and exp is 0, thus result is undefined. +// +// When exponent is negative the returned decimal will have maximum precision of PowPrecisionNegativeExponent places after decimal point. +// +// Example: +// +// d1, err := decimal.NewFromFloat(3.0).PowBigInt(big.NewInt(3)) +// d1.String() // output: "27" +// +// d2, err := decimal.NewFromFloat(629.25).PowBigInt(big.NewInt(5)) +// d2.String() // output: "98654323103449.5673828125" +func (d Decimal) PowBigInt(exp *big.Int) (Decimal, error) { + return d.powBigIntWithPrecision(exp, int32(PowPrecisionNegativeExponent)) +} + +func (d Decimal) powBigIntWithPrecision(exp *big.Int, precision int32) (Decimal, error) { + if d.IsZero() && exp.Sign() == 0 { + return Decimal{}, fmt.Errorf("cannot represent undefined value of 0**0") } - temp = d.Pow(d2.Div(NewFromFloat(2))) - if d2.IntPart()%2 == 0 { - return temp.Mul(temp) + + tmpExp := new(big.Int).Set(exp) + isExpNeg := exp.Sign() < 0 + + if isExpNeg { + tmpExp.Abs(tmpExp) + } + + n, result := d, New(1, 0) + + for tmpExp.Sign() > 0 { + if tmpExp.Bit(0) == 1 { + result = result.Mul(n) + } + tmpExp.Rsh(tmpExp, 1) + + if tmpExp.Sign() > 0 { + n = n.Mul(n) + } } - if d2.IntPart() > 0 { - return temp.Mul(temp).Mul(d) + + if isExpNeg { + return New(1, 0).DivRound(result, precision), nil } - return temp.Mul(temp).Div(d) + + return result, nil } // ExpHullAbrham calculates the natural exponent of decimal (e to the power of d) using Hull-Abraham algorithm. @@ -655,9 +952,8 @@ func (d Decimal) Pow(d2 Decimal) Decimal { // // Example: // -// NewFromFloat(26.1).ExpHullAbrham(2).String() // output: "220000000000" -// NewFromFloat(26.1).ExpHullAbrham(20).String() // output: "216314672147.05767284" -// +// NewFromFloat(26.1).ExpHullAbrham(2).String() // output: "220000000000" +// NewFromFloat(26.1).ExpHullAbrham(20).String() // output: "216314672147.05767284" func (d Decimal) ExpHullAbrham(overallPrecision uint32) (Decimal, error) { // Algorithm based on Variable precision exponential function. // ACM Transactions on Mathematical Software by T. E. Hull & A. Abrham. @@ -747,15 +1043,14 @@ func (d Decimal) ExpHullAbrham(overallPrecision uint32) (Decimal, error) { // // Example: // -// d, err := NewFromFloat(26.1).ExpTaylor(2).String() -// d.String() // output: "216314672147.06" -// -// NewFromFloat(26.1).ExpTaylor(20).String() -// d.String() // output: "216314672147.05767284062928674083" +// d, err := NewFromFloat(26.1).ExpTaylor(2).String() +// d.String() // output: "216314672147.06" // -// NewFromFloat(26.1).ExpTaylor(-10).String() -// d.String() // output: "220000000000" +// NewFromFloat(26.1).ExpTaylor(20).String() +// d.String() // output: "216314672147.05767284062928674083" // +// NewFromFloat(26.1).ExpTaylor(-10).String() +// d.String() // output: "220000000000" func (d Decimal) ExpTaylor(precision int32) (Decimal, error) { // Note(mwoss): Implementation can be optimized by exclusively using big.Int API only if d.IsZero() { @@ -812,14 +1107,162 @@ func (d Decimal) ExpTaylor(precision int32) (Decimal, error) { return result, nil } +// Ln calculates natural logarithm of d. +// Precision argument specifies how precise the result must be (number of digits after decimal point). +// Negative precision is allowed. +// +// Example: +// +// d1, err := NewFromFloat(13.3).Ln(2) +// d1.String() // output: "2.59" +// +// d2, err := NewFromFloat(579.161).Ln(10) +// d2.String() // output: "6.3615805046" +func (d Decimal) Ln(precision int32) (Decimal, error) { + // Algorithm based on The Use of Iteration Methods for Approximating the Natural Logarithm, + // James F. Epperson, The American Mathematical Monthly, Vol. 96, No. 9, November 1989, pp. 831-835. + if d.IsNegative() { + return Decimal{}, fmt.Errorf("cannot calculate natural logarithm for negative decimals") + } + + if d.IsZero() { + return Decimal{}, fmt.Errorf("cannot represent natural logarithm of 0, result: -infinity") + } + + calcPrecision := precision + 2 + z := d.Copy() + + var comp1, comp3, comp2, comp4, reduceAdjust Decimal + comp1 = z.Sub(Decimal{oneInt, 0}) + comp3 = Decimal{oneInt, -1} + + // for decimal in range [0.9, 1.1] where ln(d) is close to 0 + usePowerSeries := false + + if comp1.Abs().Cmp(comp3) <= 0 { + usePowerSeries = true + } else { + // reduce input decimal to range [0.1, 1) + expDelta := int32(z.NumDigits()) + z.exp + z.exp -= expDelta + + // Input decimal was reduced by factor of 10^expDelta, thus we will need to add + // ln(10^expDelta) = expDelta * ln(10) + // to the result to compensate that + ln10 := ln10.withPrecision(calcPrecision) + reduceAdjust = NewFromInt32(expDelta) + reduceAdjust = reduceAdjust.Mul(ln10) + + comp1 = z.Sub(Decimal{oneInt, 0}) + + if comp1.Abs().Cmp(comp3) <= 0 { + usePowerSeries = true + } else { + // initial estimate using floats + zFloat := z.InexactFloat64() + comp1 = NewFromFloat(math.Log(zFloat)) + } + } + + epsilon := Decimal{oneInt, -calcPrecision} + + if usePowerSeries { + // Power Series - https://en.wikipedia.org/wiki/Logarithm#Power_series + // Calculating n-th term of formula: ln(z+1) = 2 sum [ 1 / (2n+1) * (z / (z+2))^(2n+1) ] + // until the difference between current and next term is smaller than epsilon. + // Coverage quite fast for decimals close to 1.0 + + // z + 2 + comp2 = comp1.Add(Decimal{twoInt, 0}) + // z / (z + 2) + comp3 = comp1.DivRound(comp2, calcPrecision) + // 2 * (z / (z + 2)) + comp1 = comp3.Add(comp3) + comp2 = comp1.Copy() + + for n := 1; ; n++ { + // 2 * (z / (z+2))^(2n+1) + comp2 = comp2.Mul(comp3).Mul(comp3) + + // 1 / (2n+1) * 2 * (z / (z+2))^(2n+1) + comp4 = NewFromInt(int64(2*n + 1)) + comp4 = comp2.DivRound(comp4, calcPrecision) + + // comp1 = 2 sum [ 1 / (2n+1) * (z / (z+2))^(2n+1) ] + comp1 = comp1.Add(comp4) + + if comp4.Abs().Cmp(epsilon) <= 0 { + break + } + } + } else { + // Halley's Iteration. + // Calculating n-th term of formula: a_(n+1) = a_n - 2 * (exp(a_n) - z) / (exp(a_n) + z), + // until the difference between current and next term is smaller than epsilon + var prevStep Decimal + maxIters := calcPrecision*2 + 10 + + for i := int32(0); i < maxIters; i++ { + // exp(a_n) + comp3, _ = comp1.ExpTaylor(calcPrecision) + // exp(a_n) - z + comp2 = comp3.Sub(z) + // 2 * (exp(a_n) - z) + comp2 = comp2.Add(comp2) + // exp(a_n) + z + comp4 = comp3.Add(z) + // 2 * (exp(a_n) - z) / (exp(a_n) + z) + comp3 = comp2.DivRound(comp4, calcPrecision) + // comp1 = a_(n+1) = a_n - 2 * (exp(a_n) - z) / (exp(a_n) + z) + comp1 = comp1.Sub(comp3) + + if prevStep.Add(comp3).IsZero() { + // If iteration steps oscillate we should return early and prevent an infinity loop + // NOTE(mwoss): This should be quite a rare case, returning error is not necessary + break + } + + if comp3.Abs().Cmp(epsilon) <= 0 { + break + } + + prevStep = comp3 + } + } + + comp1 = comp1.Add(reduceAdjust) + + return comp1.Round(precision), nil +} + // NumDigits returns the number of digits of the decimal coefficient (d.Value) -// Note: Current implementation is extremely slow for large decimals and/or decimals with large fractional part func (d Decimal) NumDigits() int { - // Note(mwoss): It can be optimized, unnecessary cast of big.Int to string - if d.IsNegative() { - return len(d.value.String()) - 1 + if d.value == nil { + return 1 + } + + if d.value.IsInt64() { + i64 := d.value.Int64() + // restrict fast path to integers with exact conversion to float64 + if i64 <= (1<<53) && i64 >= -(1<<53) { + if i64 == 0 { + return 1 + } + return int(math.Log10(math.Abs(float64(i64)))) + 1 + } + } + + estimatedNumDigits := int(float64(d.value.BitLen()) / math.Log2(10)) + + // estimatedNumDigits (lg10) may be off by 1, need to verify + digitsBigInt := big.NewInt(int64(estimatedNumDigits)) + errorCorrectionUnit := digitsBigInt.Exp(tenInt, digitsBigInt, nil) + + if d.value.CmpAbs(errorCorrectionUnit) >= 0 { + return estimatedNumDigits + 1 } - return len(d.value.String()) + + return estimatedNumDigits } // IsInteger returns true when decimal can be represented as an integer value, otherwise, it returns false. @@ -851,10 +1294,9 @@ func abs(n int32) int32 { // Cmp compares the numbers represented by d and d2 and returns: // -// -1 if d < d2 -// 0 if d == d2 -// +1 if d > d2 -// +// -1 if d < d2 +// 0 if d == d2 +// +1 if d > d2 func (d Decimal) Cmp(d2 Decimal) int { d.ensureInitialized() d2.ensureInitialized() @@ -868,12 +1310,21 @@ func (d Decimal) Cmp(d2 Decimal) int { return rd.value.Cmp(rd2.value) } +// Compare compares the numbers represented by d and d2 and returns: +// +// -1 if d < d2 +// 0 if d == d2 +// +1 if d > d2 +func (d Decimal) Compare(d2 Decimal) int { + return d.Cmp(d2) +} + // Equal returns whether the numbers represented by d and d2 are equal. func (d Decimal) Equal(d2 Decimal) bool { return d.Cmp(d2) == 0 } -// Equals is deprecated, please use Equal method instead +// Deprecated: Equals is deprecated, please use Equal method instead. func (d Decimal) Equals(d2 Decimal) bool { return d.Equal(d2) } @@ -905,7 +1356,6 @@ func (d Decimal) LessThanOrEqual(d2 Decimal) bool { // -1 if d < 0 // 0 if d == 0 // +1 if d > 0 -// func (d Decimal) Sign() int { if d.value == nil { return 0 @@ -968,9 +1418,7 @@ func (d Decimal) IntPart() int64 { // BigInt returns integer component of the decimal as a BigInt. func (d Decimal) BigInt() *big.Int { scaledD := d.rescale(0) - i := &big.Int{} - i.SetString(scaledD.String(), 10) - return i + return scaledD.value } // BigFloat returns decimal as BigFloat. @@ -1014,13 +1462,12 @@ func (d Decimal) InexactFloat64() float64 { // // Example: // -// d := New(-12345, -3) -// println(d.String()) +// d := New(-12345, -3) +// println(d.String()) // // Output: // -// -12.345 -// +// -12.345 func (d Decimal) String() string { return d.string(true) } @@ -1030,14 +1477,13 @@ func (d Decimal) String() string { // // Example: // -// NewFromFloat(0).StringFixed(2) // output: "0.00" -// NewFromFloat(0).StringFixed(0) // output: "0" -// NewFromFloat(5.45).StringFixed(0) // output: "5" -// NewFromFloat(5.45).StringFixed(1) // output: "5.5" -// NewFromFloat(5.45).StringFixed(2) // output: "5.45" -// NewFromFloat(5.45).StringFixed(3) // output: "5.450" -// NewFromFloat(545).StringFixed(-1) // output: "550" -// +// NewFromFloat(0).StringFixed(2) // output: "0.00" +// NewFromFloat(0).StringFixed(0) // output: "0" +// NewFromFloat(5.45).StringFixed(0) // output: "5" +// NewFromFloat(5.45).StringFixed(1) // output: "5.5" +// NewFromFloat(5.45).StringFixed(2) // output: "5.45" +// NewFromFloat(5.45).StringFixed(3) // output: "5.450" +// NewFromFloat(545).StringFixed(-1) // output: "550" func (d Decimal) StringFixed(places int32) string { rounded := d.Round(places) return rounded.string(false) @@ -1048,14 +1494,13 @@ func (d Decimal) StringFixed(places int32) string { // // Example: // -// NewFromFloat(0).StringFixedBank(2) // output: "0.00" -// NewFromFloat(0).StringFixedBank(0) // output: "0" -// NewFromFloat(5.45).StringFixedBank(0) // output: "5" -// NewFromFloat(5.45).StringFixedBank(1) // output: "5.4" -// NewFromFloat(5.45).StringFixedBank(2) // output: "5.45" -// NewFromFloat(5.45).StringFixedBank(3) // output: "5.450" -// NewFromFloat(545).StringFixedBank(-1) // output: "540" -// +// NewFromFloat(0).StringFixedBank(2) // output: "0.00" +// NewFromFloat(0).StringFixedBank(0) // output: "0" +// NewFromFloat(5.45).StringFixedBank(0) // output: "5" +// NewFromFloat(5.45).StringFixedBank(1) // output: "5.4" +// NewFromFloat(5.45).StringFixedBank(2) // output: "5.45" +// NewFromFloat(5.45).StringFixedBank(3) // output: "5.450" +// NewFromFloat(545).StringFixedBank(-1) // output: "540" func (d Decimal) StringFixedBank(places int32) string { rounded := d.RoundBank(places) return rounded.string(false) @@ -1073,9 +1518,8 @@ func (d Decimal) StringFixedCash(interval uint8) string { // // Example: // -// NewFromFloat(5.45).Round(1).String() // output: "5.5" -// NewFromFloat(545).Round(-1).String() // output: "550" -// +// NewFromFloat(5.45).Round(1).String() // output: "5.5" +// NewFromFloat(545).Round(-1).String() // output: "550" func (d Decimal) Round(places int32) Decimal { if d.exp == -places { return d @@ -1104,11 +1548,10 @@ func (d Decimal) Round(places int32) Decimal { // // Example: // -// NewFromFloat(545).RoundCeil(-2).String() // output: "600" -// NewFromFloat(500).RoundCeil(-2).String() // output: "500" -// NewFromFloat(1.1001).RoundCeil(2).String() // output: "1.11" -// NewFromFloat(-1.454).RoundCeil(1).String() // output: "-1.5" -// +// NewFromFloat(545).RoundCeil(-2).String() // output: "600" +// NewFromFloat(500).RoundCeil(-2).String() // output: "500" +// NewFromFloat(1.1001).RoundCeil(2).String() // output: "1.11" +// NewFromFloat(-1.454).RoundCeil(1).String() // output: "-1.4" func (d Decimal) RoundCeil(places int32) Decimal { if d.exp >= -places { return d @@ -1130,11 +1573,10 @@ func (d Decimal) RoundCeil(places int32) Decimal { // // Example: // -// NewFromFloat(545).RoundFloor(-2).String() // output: "500" -// NewFromFloat(-500).RoundFloor(-2).String() // output: "-500" -// NewFromFloat(1.1001).RoundFloor(2).String() // output: "1.1" -// NewFromFloat(-1.454).RoundFloor(1).String() // output: "-1.4" -// +// NewFromFloat(545).RoundFloor(-2).String() // output: "500" +// NewFromFloat(-500).RoundFloor(-2).String() // output: "-500" +// NewFromFloat(1.1001).RoundFloor(2).String() // output: "1.1" +// NewFromFloat(-1.454).RoundFloor(1).String() // output: "-1.5" func (d Decimal) RoundFloor(places int32) Decimal { if d.exp >= -places { return d @@ -1156,11 +1598,10 @@ func (d Decimal) RoundFloor(places int32) Decimal { // // Example: // -// NewFromFloat(545).RoundUp(-2).String() // output: "600" -// NewFromFloat(500).RoundUp(-2).String() // output: "500" -// NewFromFloat(1.1001).RoundUp(2).String() // output: "1.11" -// NewFromFloat(-1.454).RoundUp(1).String() // output: "-1.4" -// +// NewFromFloat(545).RoundUp(-2).String() // output: "600" +// NewFromFloat(500).RoundUp(-2).String() // output: "500" +// NewFromFloat(1.1001).RoundUp(2).String() // output: "1.11" +// NewFromFloat(-1.454).RoundUp(1).String() // output: "-1.5" func (d Decimal) RoundUp(places int32) Decimal { if d.exp >= -places { return d @@ -1184,11 +1625,10 @@ func (d Decimal) RoundUp(places int32) Decimal { // // Example: // -// NewFromFloat(545).RoundDown(-2).String() // output: "500" -// NewFromFloat(-500).RoundDown(-2).String() // output: "-500" -// NewFromFloat(1.1001).RoundDown(2).String() // output: "1.1" -// NewFromFloat(-1.454).RoundDown(1).String() // output: "-1.5" -// +// NewFromFloat(545).RoundDown(-2).String() // output: "500" +// NewFromFloat(-500).RoundDown(-2).String() // output: "-500" +// NewFromFloat(1.1001).RoundDown(2).String() // output: "1.1" +// NewFromFloat(-1.454).RoundDown(1).String() // output: "-1.4" func (d Decimal) RoundDown(places int32) Decimal { if d.exp >= -places { return d @@ -1209,13 +1649,12 @@ func (d Decimal) RoundDown(places int32) Decimal { // // Examples: // -// NewFromFloat(5.45).RoundBank(1).String() // output: "5.4" -// NewFromFloat(545).RoundBank(-1).String() // output: "540" -// NewFromFloat(5.46).RoundBank(1).String() // output: "5.5" -// NewFromFloat(546).RoundBank(-1).String() // output: "550" -// NewFromFloat(5.55).RoundBank(1).String() // output: "5.6" -// NewFromFloat(555).RoundBank(-1).String() // output: "560" -// +// NewFromFloat(5.45).RoundBank(1).String() // output: "5.4" +// NewFromFloat(545).RoundBank(-1).String() // output: "540" +// NewFromFloat(5.46).RoundBank(1).String() // output: "5.5" +// NewFromFloat(546).RoundBank(-1).String() // output: "550" +// NewFromFloat(5.55).RoundBank(1).String() // output: "5.6" +// NewFromFloat(555).RoundBank(-1).String() // output: "560" func (d Decimal) RoundBank(places int32) Decimal { round := d.Round(places) @@ -1237,11 +1676,13 @@ func (d Decimal) RoundBank(places int32) Decimal { // interval. The amount payable for a cash transaction is rounded to the nearest // multiple of the minimum currency unit available. The following intervals are // available: 5, 10, 25, 50 and 100; any other number throws a panic. -// 5: 5 cent rounding 3.43 => 3.45 -// 10: 10 cent rounding 3.45 => 3.50 (5 gets rounded up) -// 25: 25 cent rounding 3.41 => 3.50 -// 50: 50 cent rounding 3.75 => 4.00 -// 100: 100 cent rounding 3.50 => 4.00 +// +// 5: 5 cent rounding 3.43 => 3.45 +// 10: 10 cent rounding 3.45 => 3.50 (5 gets rounded up) +// 25: 25 cent rounding 3.41 => 3.50 +// 50: 50 cent rounding 3.75 => 4.00 +// 100: 100 cent rounding 3.50 => 4.00 +// // For more details: https://en.wikipedia.org/wiki/Cash_rounding func (d Decimal) RoundCash(interval uint8) Decimal { var iVal *big.Int @@ -1310,8 +1751,7 @@ func (d Decimal) Ceil() Decimal { // // Example: // -// decimal.NewFromString("123.456").Truncate(2).String() // "123.45" -// +// decimal.NewFromString("123.456").Truncate(2).String() // "123.45" func (d Decimal) Truncate(precision int32) Decimal { d.ensureInitialized() if precision >= 0 && -precision > d.exp { @@ -1373,19 +1813,18 @@ func (d *Decimal) UnmarshalBinary(data []byte) error { // MarshalBinary implements the encoding.BinaryMarshaler interface. func (d Decimal) MarshalBinary() (data []byte, err error) { - // Write the exponent first since it's a fixed size - v1 := make([]byte, 4) - binary.BigEndian.PutUint32(v1, uint32(d.exp)) - - // Add the value - var v2 []byte - if v2, err = d.value.GobEncode(); err != nil { - return + // exp is written first, but encode value first to know output size + var valueData []byte + if valueData, err = d.value.GobEncode(); err != nil { + return nil, err } + // Write the exponent in front, since it's a fixed size + expData := make([]byte, 4, len(valueData)+4) + binary.BigEndian.PutUint32(expData, uint32(d.exp)) + // Return the byte array - data = append(v1, v2...) - return + return append(expData, valueData...), nil } // Scan implements the sql.Scanner interface for database deserialization. @@ -1408,6 +1847,11 @@ func (d *Decimal) Scan(value interface{}) error { *d = New(v, 0) return nil + case uint64: + // while clickhouse may send 0 in db as uint64 + *d = NewFromUint64(v) + return nil + default: // default is trying to interpret value stored as string str, err := unquoteIfQuoted(v) @@ -1455,7 +1899,8 @@ func (d *Decimal) GobDecode(data []byte) error { } // StringScaled first scales the decimal then calls .String() on it. -// NOTE: buggy, unintuitive, and DEPRECATED! Use StringFixed instead. +// +// Deprecated: buggy and unintuitive. Use StringFixed instead. func (d Decimal) StringScaled(exp int32) string { return d.rescale(exp).String() } @@ -1515,7 +1960,7 @@ func (d *Decimal) ensureInitialized() { // // To call this function with an array, you must do: // -// Min(arr[0], arr[1:]...) +// Min(arr[0], arr[1:]...) // // This makes it harder to accidentally call Min with 0 arguments. func Min(first Decimal, rest ...Decimal) Decimal { @@ -1532,7 +1977,7 @@ func Min(first Decimal, rest ...Decimal) Decimal { // // To call this function with an array, you must do: // -// Max(arr[0], arr[1:]...) +// Max(arr[0], arr[1:]...) // // This makes it harder to accidentally call Max with 0 arguments. func Max(first Decimal, rest ...Decimal) Decimal { @@ -1567,22 +2012,13 @@ func RescalePair(d1 Decimal, d2 Decimal) (Decimal, Decimal) { d1.ensureInitialized() d2.ensureInitialized() - if d1.exp == d2.exp { - return d1, d2 + if d1.exp < d2.exp { + return d1, d2.rescale(d1.exp) + } else if d1.exp > d2.exp { + return d1.rescale(d2.exp), d2 } - baseScale := min(d1.exp, d2.exp) - if baseScale != d1.exp { - return d1.rescale(baseScale), d2 - } - return d1, d2.rescale(baseScale) -} - -func min(x, y int32) int32 { - if x >= y { - return y - } - return x + return d1, d2 } func unquoteIfQuoted(value interface{}) (string, error) { @@ -1594,8 +2030,7 @@ func unquoteIfQuoted(value interface{}) (string, error) { case []byte: bytes = v default: - return "", fmt.Errorf("could not convert value '%+v' to byte array of type '%T'", - value, value) + return "", fmt.Errorf("could not convert value '%+v' to byte array of type '%T'", value, value) } // If the amount is quoted, strip the quotes diff --git a/vendor/github.com/snowflakedb/gosnowflake/.DS_Store b/vendor/github.com/snowflakedb/gosnowflake/.DS_Store new file mode 100644 index 00000000..25b33bd2 Binary files /dev/null and b/vendor/github.com/snowflakedb/gosnowflake/.DS_Store differ diff --git a/vendor/github.com/snowflakedb/gosnowflake/.gitignore b/vendor/github.com/snowflakedb/gosnowflake/.gitignore index c8fad7b2..04e2c639 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/.gitignore +++ b/vendor/github.com/snowflakedb/gosnowflake/.gitignore @@ -1,4 +1,5 @@ .idea/ +.vscode/ parameters*.json parameters*.bat *.p8 @@ -11,6 +12,8 @@ wss-golang-agent.config wss-unified-agent.jar whitesource/ *.swp +cp.out +__debug_bin* # exclude vendor vendor diff --git a/vendor/github.com/snowflakedb/gosnowflake/.golangci.yml b/vendor/github.com/snowflakedb/gosnowflake/.golangci.yml new file mode 100644 index 00000000..4dfb106c --- /dev/null +++ b/vendor/github.com/snowflakedb/gosnowflake/.golangci.yml @@ -0,0 +1,10 @@ +run: + tests: true + +issues: + exclude-rules: + # we own this driver so we need to test this functions + - path: statement_test.go + text: "Drivers should implement StmtExecContext instead" + - path: statement_test.go + text: "Drivers should implement StmtQueryContext instead" \ No newline at end of file diff --git a/vendor/github.com/snowflakedb/gosnowflake/Jenkinsfile b/vendor/github.com/snowflakedb/gosnowflake/Jenkinsfile new file mode 100644 index 00000000..3a13898c --- /dev/null +++ b/vendor/github.com/snowflakedb/gosnowflake/Jenkinsfile @@ -0,0 +1,72 @@ +import groovy.json.JsonOutput + + +timestamps { + node('regular-memory-node') { + stage('checkout') { + scmInfo = checkout scm + println("${scmInfo}") + env.GIT_BRANCH = scmInfo.GIT_BRANCH + env.GIT_COMMIT = scmInfo.GIT_COMMIT + } + params = [ + string(name: 'svn_revision', value: 'bptp-stable'), + string(name: 'branch', value: 'main'), + string(name: 'client_git_commit', value: scmInfo.GIT_COMMIT), + string(name: 'client_git_branch', value: scmInfo.GIT_BRANCH), + string(name: 'TARGET_DOCKER_TEST_IMAGE', value: 'go-chainguard-go1_24'), + string(name: 'parent_job', value: env.JOB_NAME), + string(name: 'parent_build_number', value: env.BUILD_NUMBER) + ] + parallel( + 'Test': { + stage('Test') { + build job: 'RT-LanguageGo-PC', parameters: params + } + }, + 'Test Authentication': { + stage('Test Authentication') { + withCredentials([ + string(credentialsId: 'a791118f-a1ea-46cd-b876-56da1b9bc71c', variable: 'NEXUS_PASSWORD'), + string(credentialsId: 'sfctest0-parameters-secret', variable: 'PARAMETERS_SECRET') + ]) { + sh '''\ + |#!/bin/bash -e + |$WORKSPACE/ci/test_authentication.sh + '''.stripMargin() + } + } + } + ) + } +} + + +pipeline { + agent { label 'regular-memory-node' } + options { timestamps() } + environment { + COMMIT_SHA_LONG = sh(returnStdout: true, script: "echo \$(git rev-parse " + "HEAD)").trim() + + // environment variables for semgrep_agent (for findings / analytics page) + // remove .git at the end + // remove SCM URL + .git at the end + + BASELINE_BRANCH = "${env.CHANGE_TARGET}" + + SF_ENABLE_EXPERIMENTAL_AUTHENTICATION = true + } + stages { + stage('Checkout') { + steps { + checkout scm + } + } + } +} + +def wgetUpdateGithub(String state, String folder, String targetUrl, String seconds) { + def ghURL = "https://api.github.com/repos/snowflakedb/gosnowflake/statuses/$COMMIT_SHA_LONG" + def data = JsonOutput.toJson([state: "${state}", context: "jenkins/${folder}",target_url: "${targetUrl}"]) + sh "wget ${ghURL} --spider -q --header='Authorization: token $GIT_PASSWORD' --post-data='${data}'" +} diff --git a/vendor/github.com/snowflakedb/gosnowflake/Makefile b/vendor/github.com/snowflakedb/gosnowflake/Makefile index 21da7631..d600e8cb 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/Makefile +++ b/vendor/github.com/snowflakedb/gosnowflake/Makefile @@ -13,10 +13,10 @@ test_setup: test_teardown python3 ci/scripts/hang_webserver.py 12345 & test_teardown: - kill -9 $$(ps -ewf | grep hang_webserver | grep -v grep | awk '{print $$2}') || true + kill -9 $$(ps -ef | grep hang_webserver | grep -v grep | awk '{print $$1}') || true test: deps test_setup - ./ci/scripts/test_component.sh + ./ci/scripts/execute_tests.sh ## Run Coverage tests cov: diff --git a/vendor/github.com/snowflakedb/gosnowflake/README.md b/vendor/github.com/snowflakedb/gosnowflake/README.md index 5056d80d..bb2acdc5 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/README.md +++ b/vendor/github.com/snowflakedb/gosnowflake/README.md @@ -1,3 +1,7 @@ +## Support + +For official support and urgent, production-impacting issues, please [contact Snowflake Support](https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge). + # Go Snowflake Driver @@ -21,7 +25,7 @@ The following software packages are required to use the Go Snowflake Driver. ## Go -The latest driver requires the [Go language](https://golang.org/) 1.19 or higher. The supported operating systems are Linux, Mac OS, and Windows, but you may run the driver on other platforms if the Go language works correctly on those platforms. +The latest driver requires the [Go language](https://golang.org/) 1.22 or higher. The supported operating systems are Linux, Mac OS, and Windows, but you may run the driver on other platforms if the Go language works correctly on those platforms. # Installation @@ -43,18 +47,22 @@ go get -u github.com/snowflakedb/gosnowflake For detailed documentation and basic usage examples, please see the documentation at [godoc.org](https://godoc.org/github.com/snowflakedb/gosnowflake/). +## Note + +This driver currently does not support GCP regional endpoints. Please ensure that any workloads using through this driver do not require support for regional endpoints on GCP. If you have questions about this, please contact Snowflake Support. + # Sample Programs -Snowflake provides a set of sample programs to test with. Set the environment variable ``$GOPATH`` to the top directory of your workspace, e.g., ``~/go`` and make certain to +Snowflake provides a set of sample programs to test with. Set the environment variable ``$GOPATH`` to the top directory of your workspace, e.g., ``~/go`` and make certain to include ``$GOPATH/bin`` in the environment variable ``$PATH``. Run the ``make`` command to build all sample programs. -``` +```sh make install ``` In the following example, the program ``select1.go`` is built and installed in ``$GOPATH/bin`` and can be run from the command line: -``` +```sh SNOWFLAKE_TEST_ACCOUNT= \ SNOWFLAKE_TEST_USER= \ SNOWFLAKE_TEST_PASSWORD= \ @@ -71,7 +79,7 @@ The developer notes are hosted with the source code on [GitHub](https://github.c Set the Snowflake connection info in ``parameters.json``: -``` +```json { "testconnection": { "SNOWFLAKE_TEST_USER": "", @@ -80,22 +88,61 @@ Set the Snowflake connection info in ``parameters.json``: "SNOWFLAKE_TEST_WAREHOUSE": "", "SNOWFLAKE_TEST_DATABASE": "", "SNOWFLAKE_TEST_SCHEMA": "", - "SNOWFLAKE_TEST_ROLE": "" + "SNOWFLAKE_TEST_ROLE": "", + "SNOWFLAKE_TEST_DEBUG": "false" } } ``` Install [jq](https://stedolan.github.io/jq) so that the parameters can get parsed correctly, and run ``make test`` in your Go development environment: -``` +```sh make test ``` -## Capturing Code Coverage +### Setting debug mode during tests +This is for debugging Large SQL statements (greater than 300 characters). If you want to enable debug mode, set `SNOWFLAKE_TEST_DEBUG` to `true` in `parameters.json`, or export it in your shell instance. + +## customizing Logging Tags -Configure your testing environment as described above and run ``make cov``. The coverage percentage will be printed on the console when the testing completes. +If you would like to ensure that certain tags are always present in the logs, `RegisterClientLogContextHook` can be used in your init function. See example below. +```go +import "github.com/snowflakedb/gosnowflake" +func init() { + // each time the logger is used, the logs will contain a REQUEST_ID field with requestID the value extracted + // from the context + gosnowflake.RegisterClientLogContextHook("REQUEST_ID", func(ctx context.Context) interface{} { + return requestIdFromContext(ctx) + }) +} ``` + +## Setting Log Level +If you want to change the log level, `SetLogLevel` can be used in your init function like this: +```go +import "github.com/snowflakedb/gosnowflake" + +func init() { + // The following line changes the log level to debug + _ = gosnowflake.GetLogger().SetLogLevel("debug") +} +``` +The following is a list of options you can pass in to set the level from least to most verbose: +- `"OFF"` +- `"error"` +- `"warn"` +- `"print"` +- `"trace"` +- `"debug"` +- `"info"` + + +## Capturing Code Coverage + +Configure your testing environment as described above and run ``make cov``. The coverage percentage will be printed on the console when the testing completes. + +```sh make cov ``` @@ -103,7 +150,7 @@ For more detailed analysis, results are printed to ``coverage.txt`` in the proje To read the coverage report, run: -``` +```sh go tool cover -html=coverage.txt ``` @@ -111,8 +158,13 @@ go tool cover -html=coverage.txt You may use your preferred editor to edit the driver code. Make certain to run ``make fmt lint`` before submitting any pull request to Snowflake. This command formats your source code according to the standard Go style and detects any coding style issues. -## Support +## Runaway `dbus-daemon` processes on certain OS +This only affects certain Linux distributions, one of them is confirmed to be RHEL. Due to a bug in one of the dependencies (`keyring`), +on the affected OS, each invocation of a program depending on gosnowflake (or any other program depending on the same `keyring`), +will generate a new instance of `dbus-daemon` fork which can, due to not being cleaned up, eventually fill the fd limits. -For official support, contact Snowflake support at: -[https://support.snowflake.net/](https://support.snowflake.net/). +Until we replace the offending dependency with one which doesn't have the bug, a workaround needs to be applied, which can be: +* cleaning up the runaway processes periodically +* setting envvar `DBUS_SESSION_BUS_ADDRESS=$XDG_RUNTIME_DIR/bus` (if that socket exists, or create it) or even `DBUS_SESSION_BUS_ADDRESS=/dev/null` +Details in [issue 773](https://github.com/snowflakedb/gosnowflake/issues/773) diff --git a/vendor/github.com/snowflakedb/gosnowflake/SECURITY.md b/vendor/github.com/snowflakedb/gosnowflake/SECURITY.md new file mode 100644 index 00000000..3cb816d6 --- /dev/null +++ b/vendor/github.com/snowflakedb/gosnowflake/SECURITY.md @@ -0,0 +1,5 @@ +# Security Policy + +Please refer to the Snowflake [HackerOne program](https://hackerone.com/snowflake?type=team) for our security policies and for reporting any security vulnerabilities. + +For other security related questions and concerns, please contact the Snowflake security team at security@snowflake.com diff --git a/vendor/github.com/snowflakedb/gosnowflake/arrow_chunk.go b/vendor/github.com/snowflakedb/gosnowflake/arrow_chunk.go index 1532c3ee..1a94916a 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/arrow_chunk.go +++ b/vendor/github.com/snowflakedb/gosnowflake/arrow_chunk.go @@ -1,15 +1,14 @@ -// Copyright (c) 2020-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( "bytes" + "context" "encoding/base64" "time" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/ipc" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/ipc" + "github.com/apache/arrow-go/v18/arrow/memory" ) type arrowResultChunk struct { @@ -19,7 +18,8 @@ type arrowResultChunk struct { allocator memory.Allocator } -func (arc *arrowResultChunk) decodeArrowChunk(rowType []execResponseRowType, highPrec bool) ([]chunkRowType, error) { +func (arc *arrowResultChunk) decodeArrowChunk(ctx context.Context, rowType []execResponseRowType, highPrec bool, params map[string]*string) ([]chunkRowType, error) { + defer arc.reader.Release() logger.Debug("Arrow Decoder") var chunkRows []chunkRowType @@ -28,6 +28,7 @@ func (arc *arrowResultChunk) decodeArrowChunk(rowType []execResponseRowType, hig start := len(chunkRows) numRows := int(record.NumRows()) + logger.Debugf("rows in current record: %v", numRows) columns := record.Columns() chunkRows = append(chunkRows, make([]chunkRowType, numRows)...) for i := start; i < start+numRows; i++ { @@ -36,7 +37,7 @@ func (arc *arrowResultChunk) decodeArrowChunk(rowType []execResponseRowType, hig for colIdx, col := range columns { values := make([]snowflakeValue, numRows) - if err := arrowToValue(values, rowType[colIdx], col, arc.loc, highPrec); err != nil { + if err := arrowToValues(ctx, values, rowType[colIdx], col, arc.loc, highPrec, params); err != nil { return nil, err } diff --git a/vendor/github.com/snowflakedb/gosnowflake/async.go b/vendor/github.com/snowflakedb/gosnowflake/async.go index e5d7e523..46b53322 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/async.go +++ b/vendor/github.com/snowflakedb/gosnowflake/async.go @@ -1,5 +1,3 @@ -// Copyright (c) 2021-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -30,13 +28,22 @@ func (sr *snowflakeRestful) processAsync( rows.queryID = respd.Data.QueryID rows.status = QueryStatusInProgress rows.errChannel = make(chan error) + rows.ctx = ctx respd.Data.AsyncRows = rows default: return respd, nil } // spawn goroutine to retrieve asynchronous results - go sr.getAsync(ctx, headers, sr.getFullURL(respd.Data.GetResultURL, nil), timeout, res, rows, cfg) + go GoroutineWrapper( + ctx, + func() { + err := sr.getAsync(ctx, headers, sr.getFullURL(respd.Data.GetResultURL, nil), timeout, res, rows, cfg) + if err != nil { + logger.Errorf("error while calling getAsync. %v", err) + } + }, + ) return respd, nil } @@ -64,45 +71,12 @@ func (sr *snowflakeRestful) getAsync( token, _, _ := sr.TokenAccessor.GetTokens() headers[headerAuthorizationKey] = fmt.Sprintf(headerSnowflakeToken, token) - var err error - var respd execResponse - retry := 0 - retryPattern := []int32{1, 1, 2, 3, 4, 8, 10} - - for { - resp, err := sr.FuncGet(ctx, sr, URL, headers, timeout) - if err != nil { - logger.WithContext(ctx).Errorf("failed to get response. err: %v", err) - sfError.Message = err.Error() - errChannel <- sfError - return err - } - defer resp.Body.Close() - - respd = execResponse{} // reset the response - err = json.NewDecoder(resp.Body).Decode(&respd) - if err != nil { - logger.WithContext(ctx).Errorf("failed to decode JSON. err: %v", err) - sfError.Message = err.Error() - errChannel <- sfError - return err - } - if respd.Code != queryInProgressAsyncCode { - // If the query takes longer than 45 seconds to complete the results are not returned. - // If the query is still in progress after 45 seconds, retry the request to the /results endpoint. - // For all other scenarios continue processing results response - break - } else { - // Sleep before retrying get result request. Exponential backoff up to 5 seconds. - // Once 5 second backoff is reached it will keep retrying with this sleeptime. - sleepTime := time.Millisecond * time.Duration(500*retryPattern[retry]) - logger.WithContext(ctx).Infof("Query execution still in progress. Sleep for %v ms", sleepTime) - time.Sleep(sleepTime) - } - if retry < len(retryPattern)-1 { - retry++ - } - + respd, err := getQueryResultWithRetriesForAsyncMode(ctx, sr, URL, headers, timeout) + if err != nil { + logger.WithContext(ctx).Errorf("error: %v", err) + sfError.Message = err.Error() + errChannel <- sfError + return err } sc := &snowflakeConn{rest: sr, cfg: cfg, queryContextCache: (&queryContextCache{}).init(), currentTimeProvider: defaultTimeProvider} @@ -134,7 +108,6 @@ func (sr *snowflakeRestful) getAsync( if isMultiStmt(&respd.Data) { if err = sc.handleMultiQuery(ctx, respd.Data, rows); err != nil { rows.errChannel <- err - close(rows.errChannel) return err } } else { @@ -142,9 +115,9 @@ func (sr *snowflakeRestful) getAsync( } if err = rows.ChunkDownloader.start(); err != nil { rows.errChannel <- err - close(rows.errChannel) return err } + rows.format = resultFormat(respd.Data.QueryResultFormat) rows.errChannel <- nil // mark query status complete } } else { @@ -166,3 +139,79 @@ func (sr *snowflakeRestful) getAsync( } return nil } + +func getQueryResultWithRetriesForAsyncMode( + ctx context.Context, + sr *snowflakeRestful, + URL *url.URL, + headers map[string]string, + timeout time.Duration) (*execResponse, error) { + var respd *execResponse + retry := 0 + retryPattern := []int32{1, 1, 2, 3, 4, 8, 10} + retryPatternIndex := 0 + retryCountForSessionRenewal := 0 + + for { + logger.WithContext(ctx).Debugf("Retry count for get query result request in async mode: %v", retry) + + resp, err := sr.FuncGet(ctx, sr, URL, headers, timeout) + if err != nil { + logger.WithContext(ctx).Errorf("failed to get response. err: %v", err) + return respd, err + } + defer resp.Body.Close() + + respd = &execResponse{} // reset the response + err = json.NewDecoder(resp.Body).Decode(&respd) + if err != nil { + logger.WithContext(ctx).Errorf("failed to decode JSON. err: %v", err) + return respd, err + } + if respd.Code == sessionExpiredCode { + // Update the session token in the header and retry + token, _, _ := sr.TokenAccessor.GetTokens() + if token != "" && headers[headerAuthorizationKey] != fmt.Sprintf(headerSnowflakeToken, token) { + headers[headerAuthorizationKey] = fmt.Sprintf(headerSnowflakeToken, token) + logger.WithContext(ctx).Info("Session token has been updated.") + retry++ + continue + } + + // Renew the session token + if err = sr.renewExpiredSessionToken(ctx, timeout, token); err != nil { + logger.WithContext(ctx).Errorf("failed to renew session token. err: %v", err) + return respd, err + } + retryCountForSessionRenewal++ + + // If this is the first response, go back to retry the query + // since it failed due to session expiration + logger.WithContext(ctx).Infof("retry count for session renewal: %v", retryCountForSessionRenewal) + if retryCountForSessionRenewal < 2 { + retry++ + continue + } else { + logger.WithContext(ctx).Errorf("failed to get query result with the renewed session token. err: %v", err) + return respd, err + } + } else if respd.Code != queryInProgressAsyncCode { + // If the query takes longer than 45 seconds to complete the results are not returned. + // If the query is still in progress after 45 seconds, retry the request to the /results endpoint. + // For all other scenarios continue processing results response + break + } else { + // Sleep before retrying get result request. Exponential backoff up to 5 seconds. + // Once 5 second backoff is reached it will keep retrying with this sleeptime. + sleepTime := time.Millisecond * time.Duration(500*retryPattern[retryPatternIndex]) + logger.WithContext(ctx).Infof("Query execution still in progress. Response code: %v, message: %v Sleep for %v ms", respd.Code, respd.Message, sleepTime) + time.Sleep(sleepTime) + retry++ + + if retryPatternIndex < len(retryPattern)-1 { + retryPatternIndex++ + } + } + } + return respd, nil +} diff --git a/vendor/github.com/snowflakedb/gosnowflake/auth.go b/vendor/github.com/snowflakedb/gosnowflake/auth.go index 9493459f..1edda0f4 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/auth.go +++ b/vendor/github.com/snowflakedb/gosnowflake/auth.go @@ -1,5 +1,3 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -8,16 +6,19 @@ import ( "crypto/x509" "encoding/base64" "encoding/json" + "errors" "fmt" "io" "net/http" "net/url" + "os" "runtime" + "slices" "strconv" "strings" "time" - "github.com/form3tech-oss/jwt-go" + "github.com/golang-jwt/jwt/v5" ) const ( @@ -25,8 +26,6 @@ const ( ) const ( - idToken = "ID_TOKEN" - mfaToken = "MFATOKEN" clientStoreTemporaryCredential = "CLIENT_STORE_TEMPORARY_CREDENTIAL" clientRequestMfaToken = "CLIENT_REQUEST_MFA_TOKEN" idTokenAuthenticator = "ID_TOKEN" @@ -50,8 +49,24 @@ const ( AuthTypeTokenAccessor // AuthTypeUsernamePasswordMFA is to use username and password with mfa AuthTypeUsernamePasswordMFA + // AuthTypePat is to use programmatic access token + AuthTypePat + // AuthTypeOAuthAuthorizationCode is to use browser-based OAuth2 flow + AuthTypeOAuthAuthorizationCode + // AuthTypeOAuthClientCredentials is to use non-interactive OAuth2 flow + AuthTypeOAuthClientCredentials ) +func (authType AuthType) isOauthNativeFlow() bool { + return authType == AuthTypeOAuthAuthorizationCode || authType == AuthTypeOAuthClientCredentials +} + +var refreshOAuthTokenErrorCodes = []string{ + strconv.Itoa(ErrMissingAccessATokenButRefreshTokenPresent), + invalidOAuthAccessTokenCode, + expiredOAuthAccessTokenCode, +} + func determineAuthenticatorType(cfg *Config, value string) error { upperCaseValue := strings.ToUpper(value) lowerCaseValue := strings.ToLower(value) @@ -73,6 +88,15 @@ func determineAuthenticatorType(cfg *Config, value string) error { } else if upperCaseValue == AuthTypeTokenAccessor.String() { cfg.Authenticator = AuthTypeTokenAccessor return nil + } else if upperCaseValue == AuthTypePat.String() && experimentalAuthEnabled() { + cfg.Authenticator = AuthTypePat + return nil + } else if upperCaseValue == AuthTypeOAuthAuthorizationCode.String() && experimentalAuthEnabled() { + cfg.Authenticator = AuthTypeOAuthAuthorizationCode + return nil + } else if upperCaseValue == AuthTypeOAuthClientCredentials.String() && experimentalAuthEnabled() { + cfg.Authenticator = AuthTypeOAuthClientCredentials + return nil } else { // possibly Okta case oktaURLString, err := url.QueryUnescape(lowerCaseValue) @@ -93,7 +117,7 @@ func determineAuthenticatorType(cfg *Config, value string) error { } } - if oktaURL.Scheme != "https" || !strings.HasSuffix(oktaURL.Host, "okta.com") { + if oktaURL.Scheme != "https" { return &SnowflakeError{ Number: ErrCodeFailedToParseAuthenticator, Message: errMsgFailedToParseAuthenticator, @@ -122,6 +146,12 @@ func (authType AuthType) String() string { return "TOKENACCESSOR" case AuthTypeUsernamePasswordMFA: return "USERNAME_PASSWORD_MFA" + case AuthTypePat: + return "PROGRAMMATIC_ACCESS_TOKEN" + case AuthTypeOAuthAuthorizationCode: + return "OAUTH_AUTHORIZATION_CODE" + case AuthTypeOAuthClientCredentials: + return "OAUTH_CLIENT_CREDENTIALS" default: return "UNKNOWN" } @@ -147,7 +177,9 @@ type authRequestClientEnvironment struct { Os string `json:"OS"` OsVersion string `json:"OS_VERSION"` OCSPMode string `json:"OCSP_MODE"` + GoVersion string `json:"GO_VERSION"` } + type authRequestData struct { ClientAppID string `json:"CLIENT_APP_ID"` ClientAppVersion string `json:"CLIENT_APP_VERSION"` @@ -164,6 +196,7 @@ type authRequestData struct { BrowserModeRedirectPort string `json:"BROWSER_MODE_REDIRECT_PORT,omitempty"` ProofKey string `json:"PROOF_KEY,omitempty"` Token string `json:"TOKEN,omitempty"` + OauthType string `json:"OAUTH_TYPE,omitempty"` } type authRequest struct { Data authRequestData `json:"data"` @@ -221,11 +254,11 @@ func postAuth( bodyCreator bodyCreatorType, timeout time.Duration) ( data *authResponse, err error) { - params.Add(requestIDKey, getOrGenerateRequestIDFromContext(ctx).String()) - params.Add(requestGUIDKey, NewUUID().String()) + params.Set(requestIDKey, getOrGenerateRequestIDFromContext(ctx).String()) + params.Set(requestGUIDKey, NewUUID().String()) fullURL := sr.getFullURL(loginRequestPath, params) - logger.Infof("full URL: %v", fullURL) + logger.WithContext(ctx).Infof("full URL: %v", fullURL) resp, err := sr.FuncAuthPost(ctx, client, fullURL, headers, bodyCreator, timeout, sr.MaxRetryCount) if err != nil { return nil, err @@ -235,7 +268,7 @@ func postAuth( var respd authResponse err = json.NewDecoder(resp.Body).Decode(&respd) if err != nil { - logger.Errorf("failed to decode JSON. err: %v", err) + logger.WithContext(ctx).Errorf("failed to decode JSON. err: %v", err) return nil, err } return &respd, nil @@ -260,11 +293,11 @@ func postAuth( } b, err := io.ReadAll(resp.Body) if err != nil { - logger.Errorf("failed to extract HTTP response body. err: %v", err) + logger.WithContext(ctx).Errorf("failed to extract HTTP response body. err: %v", err) return nil, err } - logger.Infof("HTTP: %v, URL: %v, Body: %v", resp.StatusCode, fullURL, b) - logger.Infof("Header: %v", resp.Header) + logger.WithContext(ctx).Infof("HTTP: %v, URL: %v, Body: %v", resp.StatusCode, fullURL, b) + logger.WithContext(ctx).Infof("Header: %v", resp.Header) return nil, &SnowflakeError{ Number: ErrFailedToAuth, SQLState: SQLStateConnectionRejected, @@ -293,7 +326,7 @@ func authenticate( proofKey []byte, ) (resp *authResponseMain, err error) { if sc.cfg.Authenticator == AuthTypeTokenAccessor { - logger.Info("Bypass authentication using existing token from token accessor") + logger.WithContext(ctx).Info("Bypass authentication using existing token from token accessor") sessionInfo := authResponseSessionInfo{ DatabaseName: sc.cfg.Database, SchemaName: sc.cfg.Schema, @@ -315,6 +348,7 @@ func authenticate( Os: operatingSystem, OsVersion: platform, OCSPMode: sc.cfg.ocspMode(), + GoVersion: runtime.Version(), } sessionParameters := make(map[string]interface{}) @@ -350,7 +384,7 @@ func authenticate( params.Add("roleName", sc.cfg.Role) } - logger.WithContext(sc.ctx).Infof("PARAMS for Auth: %v, %v, %v, %v, %v, %v", + logger.WithContext(ctx).Infof("PARAMS for Auth: %v, %v, %v, %v, %v, %v", params, sc.rest.Protocol, sc.rest.Host, sc.rest.Port, sc.rest.LoginTimeout, sc.cfg.Authenticator.String()) respd, err := sc.rest.FuncPostAuth(ctx, sc.rest, sc.rest.getClientFor(sc.cfg.Authenticator), params, headers, bodyCreator, sc.rest.LoginTimeout) @@ -358,17 +392,19 @@ func authenticate( return nil, err } if !respd.Success { - logger.Errorln("Authentication FAILED") + logger.WithContext(ctx).Errorln("Authentication FAILED") sc.rest.TokenAccessor.SetTokens("", "", -1) if sessionParameters[clientRequestMfaToken] == true { - deleteCredential(sc, mfaToken) + credentialsStorage.deleteCredential(newMfaTokenSpec(sc.cfg.Host, sc.cfg.User)) } - if sessionParameters[clientStoreTemporaryCredential] == true { - deleteCredential(sc, idToken) + if sessionParameters[clientStoreTemporaryCredential] == true && sc.cfg.Authenticator == AuthTypeExternalBrowser { + credentialsStorage.deleteCredential(newIDTokenSpec(sc.cfg.Host, sc.cfg.User)) + } + if sessionParameters[clientStoreTemporaryCredential] == true && sc.cfg.Authenticator.isOauthNativeFlow() { + credentialsStorage.deleteCredential(newOAuthAccessTokenSpec(sc.cfg.OauthTokenRequestURL, sc.cfg.User)) } code, err := strconv.Atoi(respd.Code) if err != nil { - code = -1 return nil, err } return nil, (&SnowflakeError{ @@ -377,15 +413,15 @@ func authenticate( Message: respd.Message, }).exceptionTelemetry(sc) } - logger.Info("Authentication SUCCESS") + logger.WithContext(ctx).Info("Authentication SUCCESS") sc.rest.TokenAccessor.SetTokens(respd.Data.Token, respd.Data.MasterToken, respd.Data.SessionID) if sessionParameters[clientRequestMfaToken] == true { token := respd.Data.MfaToken - setCredential(sc, mfaToken, token) + credentialsStorage.setCredential(newMfaTokenSpec(sc.cfg.Host, sc.cfg.User), token) } if sessionParameters[clientStoreTemporaryCredential] == true { token := respd.Data.IDToken - setCredential(sc, idToken, token) + credentialsStorage.setCredential(newIDTokenSpec(sc.cfg.Host, sc.cfg.User), token) } return &respd.Data, nil } @@ -418,6 +454,18 @@ func createRequestBody(sc *snowflakeConn, sessionParameters map[string]interface requestMain.Authenticator = AuthTypeOAuth.String() requestMain.Token = sc.cfg.Token case AuthTypeOkta: + samlResponse, err := authenticateBySAML( + sc.ctx, + sc.rest, + sc.cfg.OktaURL, + sc.cfg.Application, + sc.cfg.Account, + sc.cfg.User, + sc.cfg.Password, + sc.cfg.DisableSamlURLCheck) + if err != nil { + return nil, err + } requestMain.RawSAMLResponse = string(samlResponse) case AuthTypeJwt: requestMain.Authenticator = AuthTypeJwt.String() @@ -427,8 +475,16 @@ func createRequestBody(sc *snowflakeConn, sessionParameters map[string]interface return nil, err } requestMain.Token = jwtTokenString + case AuthTypePat: + if !experimentalAuthEnabled() { + return nil, errors.New("programmatic access tokens are not ready to use") + } + logger.WithContext(sc.ctx).Info("Programmatic access token") + requestMain.Authenticator = AuthTypePat.String() + requestMain.LoginName = sc.cfg.User + requestMain.Token = sc.cfg.Token case AuthTypeSnowflake: - logger.Info("Username and password") + logger.WithContext(sc.ctx).Debug("Username and password") requestMain.LoginName = sc.cfg.User requestMain.Password = sc.cfg.Password switch { @@ -439,12 +495,50 @@ func createRequestBody(sc *snowflakeConn, sessionParameters map[string]interface requestMain.ExtAuthnDuoMethod = "passcode" } case AuthTypeUsernamePasswordMFA: - logger.Info("Username and password MFA") + logger.WithContext(sc.ctx).Debug("Username and password MFA") requestMain.LoginName = sc.cfg.User requestMain.Password = sc.cfg.Password - if sc.cfg.MfaToken != "" { + switch { + case sc.cfg.MfaToken != "": requestMain.Token = sc.cfg.MfaToken + case sc.cfg.PasscodeInPassword: + requestMain.ExtAuthnDuoMethod = "passcode" + case sc.cfg.Passcode != "": + requestMain.Passcode = sc.cfg.Passcode + requestMain.ExtAuthnDuoMethod = "passcode" + } + case AuthTypeOAuthAuthorizationCode: + if !experimentalAuthEnabled() { + return nil, errors.New("OAuth2 is not ready to use") + } + logger.WithContext(sc.ctx).Debug("OAuth authorization code") + oauthClient, err := newOauthClient(sc.ctx, sc.cfg) + if err != nil { + return nil, err } + token, err := oauthClient.authenticateByOAuthAuthorizationCode() + if err != nil { + return nil, err + } + requestMain.LoginName = sc.cfg.User + requestMain.Token = token + requestMain.OauthType = "OAUTH_AUTHORIZATION_CODE" + case AuthTypeOAuthClientCredentials: + if !experimentalAuthEnabled() { + return nil, errors.New("OAuth2 is not ready to use") + } + logger.WithContext(sc.ctx).Debug("OAuth client credentials") + oauthClient, err := newOauthClient(sc.ctx, sc.cfg) + if err != nil { + return nil, err + } + token, err := oauthClient.authenticateByOAuthClientCredentials() + if err != nil { + return nil, err + } + requestMain.LoginName = sc.cfg.User + requestMain.Token = token + requestMain.OauthType = "OAUTH_CLIENT_CREDENTIALS" } authRequest := authRequest{ @@ -459,23 +553,28 @@ func createRequestBody(sc *snowflakeConn, sessionParameters map[string]interface // Generate a JWT token in string given the configuration func prepareJWTToken(config *Config) (string, error) { + if config.PrivateKey == nil { + return "", errors.New("trying to use keypair authentication, but PrivateKey was not provided in the driver config") + } + logger.Debug("preparing JWT for keypair authentication") pubBytes, err := x509.MarshalPKIXPublicKey(config.PrivateKey.Public()) if err != nil { return "", err } hash := sha256.Sum256(pubBytes) - accountName := strings.ToUpper(config.Account) + accountName := extractAccountName(config.Account) userName := strings.ToUpper(config.User) issueAtTime := time.Now().UTC() - token := jwt.NewWithClaims(jwt.SigningMethodRS256, jwt.MapClaims{ + jwtClaims := jwt.MapClaims{ "iss": fmt.Sprintf("%s.%s.%s", accountName, userName, "SHA256:"+base64.StdEncoding.EncodeToString(hash[:])), "sub": fmt.Sprintf("%s.%s", accountName, userName), "iat": issueAtTime.Unix(), "nbf": time.Date(2015, 10, 10, 12, 0, 0, 0, time.UTC).Unix(), "exp": issueAtTime.Add(config.JWTExpireTimeout).Unix(), - }) + } + token := jwt.NewWithClaims(jwt.SigningMethodRS256, jwtClaims) tokenString, err := token.SignedString(config.PrivateKey) @@ -483,6 +582,7 @@ func prepareJWTToken(config *Config) (string, error) { return "", err } + logger.Debugf("successfully generated JWT with following claims: %v", jwtClaims) return tokenString, err } @@ -494,12 +594,16 @@ func authenticateWithConfig(sc *snowflakeConn) error { var err error //var consentCacheIdToken = true - if sc.cfg.Authenticator == AuthTypeExternalBrowser { + if sc.cfg.Authenticator == AuthTypeExternalBrowser || sc.cfg.Authenticator == AuthTypeOAuthAuthorizationCode || sc.cfg.Authenticator == AuthTypeOAuthClientCredentials { if (runtime.GOOS == "windows" || runtime.GOOS == "darwin") && sc.cfg.ClientStoreTemporaryCredential == configBoolNotSet { sc.cfg.ClientStoreTemporaryCredential = ConfigBoolTrue } - if sc.cfg.ClientStoreTemporaryCredential == ConfigBoolTrue { - fillCachedIDToken(sc) + if sc.cfg.Authenticator == AuthTypeExternalBrowser && sc.cfg.ClientStoreTemporaryCredential == ConfigBoolTrue { + sc.cfg.IDToken = credentialsStorage.getCredential(newIDTokenSpec(sc.cfg.Host, sc.cfg.User)) + } + // Disable console login by default + if sc.cfg.DisableConsoleLogin == configBoolNotSet { + sc.cfg.DisableConsoleLogin = ConfigBoolTrue } } @@ -508,11 +612,11 @@ func authenticateWithConfig(sc *snowflakeConn) error { sc.cfg.ClientRequestMfaToken = ConfigBoolTrue } if sc.cfg.ClientRequestMfaToken == ConfigBoolTrue { - fillCachedMfaToken(sc) + sc.cfg.MfaToken = credentialsStorage.getCredential(newMfaTokenSpec(sc.cfg.Host, sc.cfg.User)) } } - logger.Infof("Authenticating via %v", sc.cfg.Authenticator.String()) + logger.WithContext(sc.ctx).Infof("Authenticating via %v", sc.cfg.Authenticator.String()) switch sc.cfg.Authenticator { case AuthTypeExternalBrowser: if sc.cfg.IDToken == "" { @@ -524,25 +628,13 @@ func authenticateWithConfig(sc *snowflakeConn) error { sc.cfg.Account, sc.cfg.User, sc.cfg.Password, - sc.cfg.ExternalBrowserTimeout) + sc.cfg.ExternalBrowserTimeout, + sc.cfg.DisableConsoleLogin) if err != nil { sc.cleanup() return err } } - case AuthTypeOkta: - samlResponse, err = authenticateBySAML( - sc.ctx, - sc.rest, - sc.cfg.OktaURL, - sc.cfg.Application, - sc.cfg.Account, - sc.cfg.User, - sc.cfg.Password) - if err != nil { - sc.cleanup() - return err - } } authData, err = authenticate( sc.ctx, @@ -550,18 +642,37 @@ func authenticateWithConfig(sc *snowflakeConn) error { samlResponse, proofKey) if err != nil { - sc.cleanup() - return err + var se *SnowflakeError + if errors.As(err, &se) && slices.Contains(refreshOAuthTokenErrorCodes, strconv.Itoa(se.Number)) { + credentialsStorage.deleteCredential(newOAuthAccessTokenSpec(sc.cfg.OauthTokenRequestURL, sc.cfg.User)) + + if sc.cfg.Authenticator == AuthTypeOAuthAuthorizationCode { + var oauthClient *oauthClient + if oauthClient, err = newOauthClient(sc.ctx, sc.cfg); err != nil { + logger.Warnf("failed to create oauth client. %v", err) + } else { + if err = oauthClient.refreshToken(); err != nil { + logger.Warnf("cannot refresh token. %v", err) + credentialsStorage.deleteCredential(newOAuthRefreshTokenSpec(sc.cfg.OauthTokenRequestURL, sc.cfg.User)) + } + } + } + + // if refreshing succeeds for authorization code, we will take a token from cache + // if it fails, we will just run the full flow + authData, err = authenticate(sc.ctx, sc, nil, nil) + } + if err != nil { + sc.cleanup() + return err + } } sc.populateSessionParameters(authData.Parameters) sc.ctx = context.WithValue(sc.ctx, SFSessionIDKey, authData.SessionID) return nil } -func fillCachedIDToken(sc *snowflakeConn) { - getCredential(sc, idToken) -} - -func fillCachedMfaToken(sc *snowflakeConn) { - getCredential(sc, mfaToken) +func experimentalAuthEnabled() bool { + val, ok := os.LookupEnv("SF_ENABLE_EXPERIMENTAL_AUTHENTICATION") + return ok && strings.EqualFold(val, "true") } diff --git a/vendor/github.com/snowflakedb/gosnowflake/auth_oauth.go b/vendor/github.com/snowflakedb/gosnowflake/auth_oauth.go new file mode 100644 index 00000000..04531267 --- /dev/null +++ b/vendor/github.com/snowflakedb/gosnowflake/auth_oauth.go @@ -0,0 +1,416 @@ +package gosnowflake + +import ( + "bufio" + "bytes" + "cmp" + "context" + "encoding/json" + "errors" + "fmt" + "golang.org/x/oauth2" + "golang.org/x/oauth2/clientcredentials" + "html" + "io" + "net" + "net/http" + "net/url" + "strconv" + "strings" + "time" +) + +const ( + oauthSuccessHTML = ` +OAuth for Snowflake + +OAuth authentication completed successfully. +` +) + +var defaultAuthorizationCodeProviderFactory = func() authorizationCodeProvider { + return &browserBasedAuthorizationCodeProvider{} +} + +type oauthClient struct { + ctx context.Context + cfg *Config + client *http.Client + + port int + redirectURITemplate string + + authorizationCodeProviderFactory func() authorizationCodeProvider +} + +func newOauthClient(ctx context.Context, cfg *Config) (*oauthClient, error) { + port := 0 + if cfg.OauthRedirectURI != "" { + logger.Debugf("Using oauthRedirectUri from config: %v", cfg.OauthRedirectURI) + uri, err := url.Parse(cfg.OauthRedirectURI) + if err != nil { + return nil, err + } + portStr := uri.Port() + if portStr != "" { + if port, err = strconv.Atoi(portStr); err != nil { + return nil, err + } + } + } + + redirectURITemplate := "" + if cfg.OauthRedirectURI == "" { + redirectURITemplate = "http://127.0.0.1:%v/" + } + logger.Debugf("Redirect URI template: %v, port: %v", redirectURITemplate, port) + + client := &http.Client{ + Transport: getTransport(cfg), + } + return &oauthClient{ + ctx: context.WithValue(ctx, oauth2.HTTPClient, client), + cfg: cfg, + client: client, + port: port, + redirectURITemplate: redirectURITemplate, + authorizationCodeProviderFactory: defaultAuthorizationCodeProviderFactory, + }, nil +} + +type oauthBrowserResult struct { + accessToken string + refreshToken string + err error +} + +func (oauthClient *oauthClient) authenticateByOAuthAuthorizationCode() (string, error) { + accessTokenSpec := oauthClient.accessTokenSpec() + if oauthClient.cfg.ClientStoreTemporaryCredential == ConfigBoolTrue { + if accessToken := credentialsStorage.getCredential(accessTokenSpec); accessToken != "" { + logger.Debugf("Access token retrieved from cache") + return accessToken, nil + } + if refreshToken := credentialsStorage.getCredential(oauthClient.refreshTokenSpec()); refreshToken != "" { + return "", &SnowflakeError{Number: ErrMissingAccessATokenButRefreshTokenPresent} + } + } + logger.Debugf("Access token not present in cache, running full auth code flow") + + resultChan := make(chan oauthBrowserResult, 1) + tcpListener, callbackPort, err := oauthClient.setupListener() + if err != nil { + return "", err + } + defer func() { + logger.Debug("Closing tcp listener") + if err := tcpListener.Close(); err != nil { + logger.Warnf("error while closing TCP listener. %v", err) + } + }() + go GoroutineWrapper(oauthClient.ctx, func() { + resultChan <- oauthClient.doAuthenticateByOAuthAuthorizationCode(tcpListener, callbackPort) + }) + select { + case <-time.After(oauthClient.cfg.ExternalBrowserTimeout): + return "", errors.New("authentication via browser timed out") + case result := <-resultChan: + if oauthClient.cfg.ClientStoreTemporaryCredential == ConfigBoolTrue { + logger.Debug("saving oauth access token in cache") + credentialsStorage.setCredential(oauthClient.accessTokenSpec(), result.accessToken) + credentialsStorage.setCredential(oauthClient.refreshTokenSpec(), result.refreshToken) + } + return result.accessToken, result.err + } +} + +func (oauthClient *oauthClient) doAuthenticateByOAuthAuthorizationCode(tcpListener *net.TCPListener, callbackPort int) oauthBrowserResult { + authCodeProvider := oauthClient.authorizationCodeProviderFactory() + + successChan := make(chan []byte) + errChan := make(chan error) + responseBodyChan := make(chan string, 2) + closeListenerChan := make(chan bool, 2) + + defer func() { + closeListenerChan <- true + close(successChan) + close(errChan) + close(responseBodyChan) + close(closeListenerChan) + }() + + logger.Debugf("opening socket on port %v", callbackPort) + defer func(tcpListener *net.TCPListener) { + <-closeListenerChan + }(tcpListener) + + go handleOAuthSocket(tcpListener, successChan, errChan, responseBodyChan, closeListenerChan) + + oauth2cfg := oauthClient.buildAuthorizationCodeConfig(callbackPort) + codeVerifier := authCodeProvider.createCodeVerifier() + state := authCodeProvider.createState() + authorizationURL := oauth2cfg.AuthCodeURL(state, oauth2.S256ChallengeOption(codeVerifier)) + if err := authCodeProvider.run(authorizationURL); err != nil { + responseBodyChan <- err.Error() + closeListenerChan <- true + return oauthBrowserResult{"", "", err} + } + + err := <-errChan + if err != nil { + responseBodyChan <- err.Error() + return oauthBrowserResult{"", "", err} + } + codeReqBytes := <-successChan + + codeReq, err := http.ReadRequest(bufio.NewReader(bytes.NewReader(codeReqBytes))) + if err != nil { + responseBodyChan <- err.Error() + return oauthBrowserResult{"", "", err} + } + logger.Debugf("Received authorization code from %v", oauthClient.authorizationURL()) + tokenResponse, err := oauthClient.exchangeAccessToken(codeReq, state, oauth2cfg, codeVerifier, responseBodyChan) + if err != nil { + return oauthBrowserResult{"", "", err} + } + logger.Debugf("Received token from %v", oauthClient.tokenURL()) + return oauthBrowserResult{tokenResponse.AccessToken, tokenResponse.RefreshToken, err} +} + +func (oauthClient *oauthClient) setupListener() (*net.TCPListener, int, error) { + tcpListener, err := createLocalTCPListener(oauthClient.port) + if err != nil { + return nil, 0, err + } + callbackPort := tcpListener.Addr().(*net.TCPAddr).Port + logger.Debugf("oauthClient.port: %v, callbackPort: %v", oauthClient.port, callbackPort) + return tcpListener, callbackPort, nil +} + +func (oauthClient *oauthClient) exchangeAccessToken(codeReq *http.Request, state string, oauth2cfg *oauth2.Config, codeVerifier string, responseBodyChan chan string) (*oauth2.Token, error) { + queryParams := codeReq.URL.Query() + errorMsg := queryParams.Get("error") + if errorMsg != "" { + errorDesc := queryParams.Get("error_description") + errMsg := fmt.Sprintf("error while getting authentication from oauth: %v. Details: %v", errorMsg, errorDesc) + responseBodyChan <- html.EscapeString(errMsg) + return nil, errors.New(errMsg) + } + + receivedState := queryParams.Get("state") + if state != receivedState { + errMsg := "invalid oauth state received" + responseBodyChan <- errMsg + return nil, errors.New(errMsg) + } + + code := queryParams.Get("code") + token, err := oauth2cfg.Exchange(oauthClient.ctx, code, oauth2.VerifierOption(codeVerifier)) + if err != nil { + responseBodyChan <- err.Error() + return nil, err + } + responseBodyChan <- oauthSuccessHTML + return token, nil +} + +func (oauthClient *oauthClient) buildAuthorizationCodeConfig(callbackPort int) *oauth2.Config { + return &oauth2.Config{ + ClientID: oauthClient.cfg.OauthClientID, + ClientSecret: oauthClient.cfg.OauthClientSecret, + RedirectURL: oauthClient.buildRedirectURI(callbackPort), + Scopes: oauthClient.buildScopes(), + Endpoint: oauth2.Endpoint{ + AuthURL: oauthClient.authorizationURL(), + TokenURL: oauthClient.tokenURL(), + AuthStyle: oauth2.AuthStyleInHeader, + }, + } +} + +func (oauthClient *oauthClient) authorizationURL() string { + return cmp.Or(oauthClient.cfg.OauthAuthorizationURL, oauthClient.defaultAuthorizationURL()) +} + +func (oauthClient *oauthClient) defaultAuthorizationURL() string { + return fmt.Sprintf("%v://%v:%v/oauth/authorize", oauthClient.cfg.Protocol, oauthClient.cfg.Host, oauthClient.cfg.Port) +} + +func (oauthClient *oauthClient) tokenURL() string { + return cmp.Or(oauthClient.cfg.OauthTokenRequestURL, oauthClient.defaultTokenURL()) +} + +func (oauthClient *oauthClient) defaultTokenURL() string { + return fmt.Sprintf("%v://%v:%v/oauth/token-request", oauthClient.cfg.Protocol, oauthClient.cfg.Host, oauthClient.cfg.Port) +} + +func (oauthClient *oauthClient) buildRedirectURI(port int) string { + if oauthClient.cfg.OauthRedirectURI != "" { + return oauthClient.cfg.OauthRedirectURI + } + return fmt.Sprintf(oauthClient.redirectURITemplate, port) +} + +func (oauthClient *oauthClient) buildScopes() []string { + if oauthClient.cfg.OauthScope == "" { + return []string{"session:role:" + oauthClient.cfg.Role} + } + scopes := strings.Split(oauthClient.cfg.OauthScope, " ") + for i, scope := range scopes { + scopes[i] = strings.TrimSpace(scope) + } + return scopes +} + +func handleOAuthSocket(tcpListener *net.TCPListener, successChan chan []byte, errChan chan error, responseBodyChan chan string, closeListenerChan chan bool) { + conn, err := tcpListener.AcceptTCP() + if err != nil { + logger.Warnf("error creating socket. %v", err) + return + } + defer conn.Close() + var buf [bufSize]byte + codeResp := bytes.NewBuffer(nil) + for { + readBytes, err := conn.Read(buf[:]) + if err == io.EOF { + break + } + if err != nil { + errChan <- err + return + } + codeResp.Write(buf[0:readBytes]) + if readBytes < bufSize { + break + } + } + + errChan <- nil + successChan <- codeResp.Bytes() + + responseBody := <-responseBodyChan + respToBrowser, err := buildResponse(responseBody) + if err != nil { + logger.Warnf("cannot create response to browser. %v", err) + } + _, err = conn.Write(respToBrowser.Bytes()) + if err != nil { + logger.Warnf("cannot write response to browser. %v", err) + } + closeListenerChan <- true +} + +type authorizationCodeProvider interface { + run(authorizationURL string) error + createState() string + createCodeVerifier() string +} + +type browserBasedAuthorizationCodeProvider struct { +} + +func (provider *browserBasedAuthorizationCodeProvider) run(authorizationURL string) error { + return openBrowser(authorizationURL) +} + +func (provider *browserBasedAuthorizationCodeProvider) createState() string { + return NewUUID().String() +} + +func (provider *browserBasedAuthorizationCodeProvider) createCodeVerifier() string { + return oauth2.GenerateVerifier() +} + +func (oauthClient *oauthClient) authenticateByOAuthClientCredentials() (string, error) { + accessTokenSpec := oauthClient.accessTokenSpec() + if oauthClient.cfg.ClientStoreTemporaryCredential == ConfigBoolTrue { + if accessToken := credentialsStorage.getCredential(accessTokenSpec); accessToken != "" { + return accessToken, nil + } + } + oauth2Cfg, err := oauthClient.buildClientCredentialsConfig() + if err != nil { + return "", err + } + token, err := oauth2Cfg.Token(oauthClient.ctx) + if err != nil { + return "", err + } + if oauthClient.cfg.ClientStoreTemporaryCredential == ConfigBoolTrue { + credentialsStorage.setCredential(accessTokenSpec, token.AccessToken) + } + return token.AccessToken, nil +} + +func (oauthClient *oauthClient) buildClientCredentialsConfig() (*clientcredentials.Config, error) { + if oauthClient.cfg.OauthTokenRequestURL == "" { + return nil, errors.New("client credentials flow requires tokenRequestURL") + } + return &clientcredentials.Config{ + ClientID: oauthClient.cfg.OauthClientID, + ClientSecret: oauthClient.cfg.OauthClientSecret, + TokenURL: oauthClient.cfg.OauthTokenRequestURL, + Scopes: oauthClient.buildScopes(), + }, nil +} + +func (oauthClient *oauthClient) refreshToken() error { + if oauthClient.cfg.ClientStoreTemporaryCredential != ConfigBoolTrue { + logger.Debug("credentials storage is disabled, cannot use refresh tokens") + return nil + } + refreshTokenSpec := newOAuthRefreshTokenSpec(oauthClient.cfg.OauthTokenRequestURL, oauthClient.cfg.User) + refreshToken := credentialsStorage.getCredential(refreshTokenSpec) + if refreshToken == "" { + logger.Debug("no refresh token in cache, full flow must be run") + return nil + } + body := url.Values{} + body.Add("grant_type", "refresh_token") + body.Add("refresh_token", refreshToken) + body.Add("scope", strings.Join(oauthClient.buildScopes(), " ")) + req, err := http.NewRequest("POST", oauthClient.tokenURL(), strings.NewReader(body.Encode())) + if err != nil { + return err + } + req.SetBasicAuth(oauthClient.cfg.OauthClientID, oauthClient.cfg.OauthClientSecret) + req.Header.Add("Content-Type", "application/x-www-form-urlencoded") + resp, err := oauthClient.client.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + if resp.StatusCode != 200 { + respBody, err := io.ReadAll(resp.Body) + if err != nil { + return err + } + credentialsStorage.deleteCredential(refreshTokenSpec) + return errors.New(string(respBody)) + } + var tokenResponse tokenExchangeResponseBody + if err = json.NewDecoder(resp.Body).Decode(&tokenResponse); err != nil { + return err + } + accessTokenSpec := oauthClient.accessTokenSpec() + credentialsStorage.setCredential(accessTokenSpec, tokenResponse.AccessToken) + if tokenResponse.RefreshToken != "" { + credentialsStorage.setCredential(refreshTokenSpec, tokenResponse.RefreshToken) + } + return nil +} + +type tokenExchangeResponseBody struct { + AccessToken string `json:"access_token,omitempty"` + RefreshToken string `json:"refresh_token"` +} + +func (oauthClient *oauthClient) accessTokenSpec() *secureTokenSpec { + return newOAuthAccessTokenSpec(oauthClient.tokenURL(), oauthClient.cfg.User) +} + +func (oauthClient *oauthClient) refreshTokenSpec() *secureTokenSpec { + return newOAuthRefreshTokenSpec(oauthClient.tokenURL(), oauthClient.cfg.User) +} diff --git a/vendor/github.com/snowflakedb/gosnowflake/authexternalbrowser.go b/vendor/github.com/snowflakedb/gosnowflake/authexternalbrowser.go index 373173f5..d553485b 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/authexternalbrowser.go +++ b/vendor/github.com/snowflakedb/gosnowflake/authexternalbrowser.go @@ -1,10 +1,9 @@ -// Copyright (c) 2019-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( "bytes" "context" + "encoding/base64" "encoding/json" "errors" "fmt" @@ -21,22 +20,19 @@ import ( ) const ( - successHTML = ` + samlSuccessHTML = ` SAML Response for Snowflake Your identity was confirmed and propagated to Snowflake %v. You can close this window now and go back where you started from. ` -) -const ( bufSize = 8192 ) // Builds a response to show to the user after successfully // getting a response from Snowflake. -func buildResponse(application string) bytes.Buffer { - body := fmt.Sprintf(successHTML, application) +func buildResponse(body string) (bytes.Buffer, error) { t := &http.Response{ Status: "200 OK", StatusCode: 200, @@ -49,16 +45,28 @@ func buildResponse(application string) bytes.Buffer { Header: make(http.Header), } var b bytes.Buffer - t.Write(&b) - return b + err := t.Write(&b) + return b, err } // This opens a socket that listens on all available unicast // and any anycast IP addresses locally. By specifying "0", we are // able to bind to a free port. -func createLocalTCPListener() (*net.TCPListener, error) { - l, err := net.Listen("tcp", "localhost:0") +func createLocalTCPListener(port int) (*net.TCPListener, error) { + logger.Debugf("creating local TCP listener on port %v", port) + allAddressesListener, err := net.Listen("tcp", fmt.Sprintf("0.0.0.0:%v", port)) if err != nil { + logger.Warnf("error while setting up 0.0.0.0 listener: %v", err) + return nil, err + } + logger.Debug("Closing 0.0.0.0 tcp listener") + if err := allAddressesListener.Close(); err != nil { + logger.Debug("error while closing TCP listener. %v", err) + } + + l, err := net.Listen("tcp", fmt.Sprintf("localhost:%v", port)) + if err != nil { + logger.Warnf("error while setting up listener: %v", err) return nil, err } @@ -70,13 +78,21 @@ func createLocalTCPListener() (*net.TCPListener, error) { return tcpListener, nil } -// Opens a browser window (or new tab) with the configured IDP Url. +// Opens a browser window (or new tab) with the configured login Url. // This can / will fail if running inside a shell with no display, ie // ssh'ing into a box attempting to authenticate via external browser. -func openBrowser(idpURL string) error { - err := browser.OpenURL(idpURL) +func openBrowser(browserURL string) error { + parsedURL, err := url.ParseRequestURI(browserURL) + if err != nil { + logger.Errorf("error parsing url %v, err: %v", browserURL, err) + return err + } + if parsedURL.Scheme != "http" && parsedURL.Scheme != "https" { + return fmt.Errorf("invalid browser URL: %v", browserURL) + } + err = browser.OpenURL(browserURL) if err != nil { - logger.Infof("failed to open a browser. err: %v", err) + logger.Errorf("failed to open a browser. err: %v", err) return err } return nil @@ -91,6 +107,7 @@ func getIdpURLProofKey( authenticator string, application string, account string, + user string, callbackPort int) (string, string, error) { headers := make(map[string]string) @@ -108,6 +125,7 @@ func getIdpURLProofKey( ClientAppID: clientType, ClientAppVersion: SnowflakeGoDriverVersion, AccountName: account, + LoginName: user, ClientEnvironment: clientEnvironment, Authenticator: authenticator, BrowserModeRedirectPort: strconv.Itoa(callbackPort), @@ -128,11 +146,10 @@ func getIdpURLProofKey( return "", "", err } if !respd.Success { - logger.Errorln("Authentication FAILED") + logger.WithContext(ctx).Errorln("Authentication FAILED") sr.TokenAccessor.SetTokens("", "", -1) code, err := strconv.Atoi(respd.Code) if err != nil { - code = -1 return "", "", err } return "", "", &SnowflakeError{ @@ -144,6 +161,24 @@ func getIdpURLProofKey( return respd.Data.SSOURL, respd.Data.ProofKey, nil } +// Gets the login URL for multiple SAML +func getLoginURL(sr *snowflakeRestful, user string, callbackPort int) (string, string, error) { + proofKey := generateProofKey() + + params := &url.Values{} + params.Add("login_name", user) + params.Add("browser_mode_redirect_port", strconv.Itoa(callbackPort)) + params.Add("proof_key", proofKey) + url := sr.getFullURL(consoleLoginRequestPath, params) + + return url.String(), proofKey, nil +} + +func generateProofKey() string { + randomness := getSecureRandom(32) + return base64.StdEncoding.WithPadding(base64.StdPadding).EncodeToString(randomness) +} + // The response returned from Snowflake looks like so: // GET /?token=encodedSamlToken // Host: localhost:54001 @@ -187,11 +222,15 @@ func authenticateByExternalBrowser( user string, password string, externalBrowserTimeout time.Duration, + disableConsoleLogin ConfigBool, ) ([]byte, []byte, error) { resultChan := make(chan authenticateByExternalBrowserResult, 1) - go func() { - resultChan <- doAuthenticateByExternalBrowser(ctx, sr, authenticator, application, account, user, password) - }() + go GoroutineWrapper( + ctx, + func() { + resultChan <- doAuthenticateByExternalBrowser(ctx, sr, authenticator, application, account, user, password, disableConsoleLogin) + }, + ) select { case <-time.After(externalBrowserTimeout): return nil, nil, errors.New("authentication timed out") @@ -204,7 +243,7 @@ func authenticateByExternalBrowser( // - the golang snowflake driver communicates to Snowflake that the user wishes to // authenticate via external browser // - snowflake sends back the IDP Url configured at the Snowflake side for the -// provided account +// provided account, or use the multiple SAML way via console login // - the default browser is opened to that URL // - user authenticates at the IDP, and is redirected to Snowflake // - Snowflake directs the user back to the driver @@ -217,21 +256,31 @@ func doAuthenticateByExternalBrowser( account string, user string, password string, + disableConsoleLogin ConfigBool, ) authenticateByExternalBrowserResult { - l, err := createLocalTCPListener() + l, err := createLocalTCPListener(0) if err != nil { return authenticateByExternalBrowserResult{nil, nil, err} } defer l.Close() callbackPort := l.Addr().(*net.TCPAddr).Port - idpURL, proofKey, err := getIdpURLProofKey( - ctx, sr, authenticator, application, account, callbackPort) + + var loginURL string + var proofKey string + if disableConsoleLogin == ConfigBoolTrue { + // Gets the IDP URL and Proof Key from Snowflake + loginURL, proofKey, err = getIdpURLProofKey(ctx, sr, authenticator, application, account, user, callbackPort) + } else { + // Multiple SAML way to do authentication via console login + loginURL, proofKey, err = getLoginURL(sr, user, callbackPort) + } + if err != nil { return authenticateByExternalBrowserResult{nil, nil, err} } - if err = openBrowser(idpURL); err != nil { + if err = openBrowser(loginURL); err != nil { return authenticateByExternalBrowserResult{nil, nil, err} } @@ -255,7 +304,7 @@ func doAuthenticateByExternalBrowser( n, err := c.Read(b) if err != nil { if err != io.EOF { - logger.Infof("error reading from socket. err: %v", err) + logger.WithContext(ctx).Infof("error reading from socket. err: %v", err) errAccept = &SnowflakeError{ Number: ErrFailedToGetExternalBrowserResponse, SQLState: SQLStateConnectionRejected, @@ -276,10 +325,18 @@ func doAuthenticateByExternalBrowser( buf.Grow(bufSize) } if encodedSamlResponse != "" { - httpResponse := buildResponse(application) - c.Write(httpResponse.Bytes()) + body := fmt.Sprintf(samlSuccessHTML, application) + httpResponse, err := buildResponse(body) + if err != nil && errAccept == nil { + errAccept = err + } + if _, err = c.Write(httpResponse.Bytes()); err != nil && errAccept == nil { + errAccept = err + } + } + if err := c.Close(); err != nil { + logger.Warnf("error while closing browser connection. %v", err) } - c.Close() encodedSamlResponseChan <- encodedSamlResponse errChan <- errAccept }(conn) diff --git a/vendor/github.com/snowflakedb/gosnowflake/authokta.go b/vendor/github.com/snowflakedb/gosnowflake/authokta.go index 818753af..8ef97c78 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/authokta.go +++ b/vendor/github.com/snowflakedb/gosnowflake/authokta.go @@ -1,5 +1,3 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -59,6 +57,7 @@ func authenticateBySAML( account string, user string, password string, + disableSamlURLCheck ConfigBool, ) (samlResponse []byte, err error) { logger.WithContext(ctx).Info("step 1: query GS to obtain IDP token and SSO url") headers := make(map[string]string) @@ -92,11 +91,10 @@ func authenticateBySAML( return nil, err } if !respd.Success { - logger.Errorln("Authentication FAILED") + logger.WithContext(ctx).Errorln("Authentication FAILED") sr.TokenAccessor.SetTokens("", "", -1) code, err := strconv.Atoi(respd.Code) if err != nil { - code = -1 return nil, err } return nil, &SnowflakeError{ @@ -152,20 +150,22 @@ func authenticateBySAML( if err != nil { return nil, err } - logger.WithContext(ctx).Info("step 5: validate post_back_url matches Snowflake URL") - tgtURL, err := postBackURL(bd) - if err != nil { - return nil, err - } + if disableSamlURLCheck == ConfigBoolFalse { + logger.WithContext(ctx).Info("step 5: validate post_back_url matches Snowflake URL") + tgtURL, err := postBackURL(bd) + if err != nil { + return nil, err + } - fullURL := sr.getURL() - logger.WithContext(ctx).Infof("tgtURL: %v, origURL: %v", tgtURL, fullURL) - if !isPrefixEqual(tgtURL, fullURL) { - return nil, &SnowflakeError{ - Number: ErrCodeSSOURLNotMatch, - SQLState: SQLStateConnectionRejected, - Message: errMsgSSOURLNotMatch, - MessageArgs: []interface{}{tgtURL, fullURL}, + fullURL := sr.getURL() + logger.WithContext(ctx).Infof("tgtURL: %v, origURL: %v", tgtURL, fullURL) + if !isPrefixEqual(tgtURL, fullURL) { + return nil, &SnowflakeError{ + Number: ErrCodeSSOURLNotMatch, + SQLState: SQLStateConnectionRejected, + Message: errMsgSSOURLNotMatch, + MessageArgs: []interface{}{tgtURL, fullURL}, + } } } return bd, nil @@ -212,10 +212,10 @@ func postAuthSAML( data *authResponse, err error) { params := &url.Values{} - params.Add(requestIDKey, getOrGenerateRequestIDFromContext(ctx).String()) + params.Set(requestIDKey, getOrGenerateRequestIDFromContext(ctx).String()) fullURL := sr.getFullURL(authenticatorRequestPath, params) - logger.Infof("fullURL: %v", fullURL) + logger.WithContext(ctx).Infof("fullURL: %v", fullURL) resp, err := sr.FuncPost(ctx, sr, fullURL, headers, body, timeout, defaultTimeProvider, nil) if err != nil { return nil, err @@ -269,7 +269,7 @@ func postAuthOKTA( fullURL string, timeout time.Duration) ( data *authOKTAResponse, err error) { - logger.Infof("fullURL: %v", fullURL) + logger.WithContext(ctx).Infof("fullURL: %v", fullURL) targetURL, err := url.Parse(fullURL) if err != nil { return nil, err @@ -290,7 +290,7 @@ func postAuthOKTA( } _, err = io.ReadAll(resp.Body) if err != nil { - logger.Errorf("failed to extract HTTP response body. err: %v", err) + logger.WithContext(ctx).Errorf("failed to extract HTTP response body. err: %v", err) return nil, err } logger.WithContext(ctx).Infof("HTTP: %v, URL: %v", resp.StatusCode, fullURL) diff --git a/vendor/github.com/snowflakedb/gosnowflake/azure_storage_client.go b/vendor/github.com/snowflakedb/gosnowflake/azure_storage_client.go index dce7f8d3..4772546b 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/azure_storage_client.go +++ b/vendor/github.com/snowflakedb/gosnowflake/azure_storage_client.go @@ -1,8 +1,7 @@ -// Copyright (c) 2021-2023 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( + "cmp" "context" "encoding/json" "errors" @@ -23,6 +22,7 @@ import ( ) type snowflakeAzureClient struct { + cfg *Config } type azureLocation struct { @@ -34,6 +34,7 @@ type azureAPI interface { UploadStream(ctx context.Context, body io.Reader, o *azblob.UploadStreamOptions) (azblob.UploadStreamResponse, error) UploadFile(ctx context.Context, file *os.File, o *azblob.UploadFileOptions) (azblob.UploadFileResponse, error) DownloadFile(ctx context.Context, file *os.File, o *blob.DownloadFileOptions) (int64, error) + DownloadStream(ctx context.Context, o *blob.DownloadStreamOptions) (azblob.DownloadStreamResponse, error) GetProperties(ctx context.Context, o *blob.GetPropertiesOptions) (blob.GetPropertiesResponse, error) } @@ -50,7 +51,7 @@ func (util *snowflakeAzureClient) createClient(info *execResponseStageInfo, _ bo RetryDelay: 2 * time.Second, }, Transport: &http.Client{ - Transport: SnowflakeTransport, + Transport: getTransport(util.cfg), }, }, }) @@ -72,7 +73,7 @@ func (util *snowflakeAzureClient) getFileHeader(meta *fileMetadata, filename str return nil, err } path := azureLoc.path + strings.TrimLeft(filename, "/") - containerClient, err := container.NewClientWithNoCredential(client.URL(), &container.ClientOptions{}) + containerClient, err := createContainerClient(client.URL(), util.cfg) if err != nil { return nil, &SnowflakeError{ Message: "failed to create container client", @@ -84,9 +85,11 @@ func (util *snowflakeAzureClient) getFileHeader(meta *fileMetadata, filename str if meta.mockAzureClient != nil { blobClient = meta.mockAzureClient } - resp, err := blobClient.GetProperties(context.Background(), &blob.GetPropertiesOptions{ - AccessConditions: &blob.AccessConditions{}, - CPKInfo: &blob.CPKInfo{}, + resp, err := withCloudStorageTimeout(util.cfg, func(ctx context.Context) (blob.GetPropertiesResponse, error) { + return blobClient.GetProperties(ctx, &blob.GetPropertiesOptions{ + AccessConditions: &blob.AccessConditions{}, + CPKInfo: &blob.CPKInfo{}, + }) }) if err != nil { var se *azcore.ResponseError @@ -104,17 +107,17 @@ func (util *snowflakeAzureClient) getFileHeader(meta *fileMetadata, filename str } meta.resStatus = uploaded - metadata := resp.Metadata + metadata := withLowerKeys(resp.Metadata) var encData encryptionData - _, ok = metadata["Encryptiondata"] + _, ok = metadata["encryptiondata"] if ok { - if err = json.Unmarshal([]byte(*metadata["Encryptiondata"]), &encData); err != nil { + if err = json.Unmarshal([]byte(*metadata["encryptiondata"]), &encData); err != nil { return nil, err } } - matdesc, ok := metadata["Matdesc"] + matdesc, ok := metadata["matdesc"] if !ok { // matdesc is not in response, use empty string matdesc = new(string) @@ -125,7 +128,7 @@ func (util *snowflakeAzureClient) getFileHeader(meta *fileMetadata, filename str *matdesc, } - digest, ok := metadata["Sfcdigest"] + digest, ok := metadata["sfcdigest"] if !ok { // sfcdigest is not in response, use empty string digest = new(string) @@ -141,25 +144,24 @@ func (util *snowflakeAzureClient) getFileHeader(meta *fileMetadata, filename str func (util *snowflakeAzureClient) uploadFile( dataFile string, meta *fileMetadata, - encryptMeta *encryptMetadata, maxConcurrency int, multiPartThreshold int64) error { azureMeta := map[string]*string{ "sfcdigest": &meta.sha256Digest, } - if encryptMeta != nil { + if meta.encryptMeta != nil { ed := &encryptionData{ EncryptionMode: "FullBlob", WrappedContentKey: contentKey{ "symmKey1", - encryptMeta.key, + meta.encryptMeta.key, "AES_CBC_256", }, EncryptionAgent: encryptionAgent{ "1.0", "AES_CBC_128", }, - ContentEncryptionIV: encryptMeta.iv, + ContentEncryptionIV: meta.encryptMeta.iv, KeyWrappingMetadata: keyMetadata{ "Java 5.3.0", }, @@ -170,7 +172,7 @@ func (util *snowflakeAzureClient) uploadFile( } encryptionMetadata := string(metadata) azureMeta["encryptiondata"] = &encryptionMetadata - azureMeta["matdesc"] = &encryptMeta.matdesc + azureMeta["matdesc"] = &meta.encryptMeta.matdesc } azureLoc, err := util.extractContainerNameAndPath(meta.stageInfo.Location) @@ -184,7 +186,8 @@ func (util *snowflakeAzureClient) uploadFile( Message: "failed to cast to azure client", } } - containerClient, err := container.NewClientWithNoCredential(client.URL(), &container.ClientOptions{}) + containerClient, err := createContainerClient(client.URL(), util.cfg) + if err != nil { return &SnowflakeError{ Message: "failed to create container client", @@ -197,13 +200,12 @@ func (util *snowflakeAzureClient) uploadFile( blobClient = meta.mockAzureClient } if meta.srcStream != nil { - uploadSrc := meta.srcStream - if meta.realSrcStream != nil { - uploadSrc = meta.realSrcStream - } - _, err = blobClient.UploadStream(context.Background(), uploadSrc, &azblob.UploadStreamOptions{ - BlockSize: int64(uploadSrc.Len()), - Metadata: azureMeta, + uploadSrc := cmp.Or(meta.realSrcStream, meta.srcStream) + _, err = withCloudStorageTimeout(util.cfg, func(ctx context.Context) (azblob.UploadStreamResponse, error) { + return blobClient.UploadStream(ctx, uploadSrc, &azblob.UploadStreamOptions{ + BlockSize: int64(uploadSrc.Len()), + Metadata: azureMeta, + }) }) } else { var f *os.File @@ -226,7 +228,9 @@ func (util *snowflakeAzureClient) uploadFile( if meta.options.putAzureCallback != nil { blobOptions.Progress = meta.options.putAzureCallback.call } - _, err = blobClient.UploadFile(context.Background(), f, blobOptions) + _, err = withCloudStorageTimeout(util.cfg, func(ctx context.Context) (azblob.UploadFileResponse, error) { + return blobClient.UploadFile(ctx, f, blobOptions) + }) } if err != nil { var se *azcore.ResponseError @@ -264,7 +268,7 @@ func (util *snowflakeAzureClient) nativeDownloadFile( Message: "failed to cast to azure client", } } - containerClient, err := container.NewClientWithNoCredential(client.URL(), &container.ClientOptions{}) + containerClient, err := createContainerClient(client.URL(), util.cfg) if err != nil { return &SnowflakeError{ Message: "failed to create container client", @@ -276,16 +280,33 @@ func (util *snowflakeAzureClient) nativeDownloadFile( if meta.mockAzureClient != nil { blobClient = meta.mockAzureClient } - f, err := os.OpenFile(fullDstFileName, os.O_CREATE|os.O_WRONLY, readWriteFileMode) - if err != nil { - return err - } - defer f.Close() - _, err = blobClient.DownloadFile( - context.Background(), f, &azblob.DownloadFileOptions{ - Concurrency: uint16(maxConcurrency)}) - if err != nil { - return err + if meta.options.GetFileToStream { + blobDownloadResponse, err := withCloudStorageTimeout(util.cfg, func(ctx context.Context) (azblob.DownloadStreamResponse, error) { + return blobClient.DownloadStream(ctx, &azblob.DownloadStreamOptions{}) + }) + if err != nil { + return err + } + retryReader := blobDownloadResponse.NewRetryReader(context.Background(), &azblob.RetryReaderOptions{}) + defer retryReader.Close() + _, err = meta.dstStream.ReadFrom(retryReader) + if err != nil { + return err + } + } else { + f, err := os.OpenFile(fullDstFileName, os.O_CREATE|os.O_WRONLY, readWriteFileMode) + if err != nil { + return err + } + defer f.Close() + _, err = withCloudStorageTimeout(util.cfg, func(ctx context.Context) (any, error) { + return blobClient.DownloadFile( + ctx, f, &azblob.DownloadFileOptions{ + Concurrency: uint16(maxConcurrency)}) + }) + if err != nil { + return err + } } meta.resStatus = downloaded return nil @@ -321,3 +342,11 @@ func (util *snowflakeAzureClient) detectAzureTokenExpireError(resp *http.Respons return strings.Contains(errStr, "Signature not valid in the specified time frame") || strings.Contains(errStr, "Server failed to authenticate the request") } + +func createContainerClient(clientURL string, cfg *Config) (*container.Client, error) { + return container.NewClientWithNoCredential(clientURL, &container.ClientOptions{ClientOptions: azcore.ClientOptions{ + Transport: &http.Client{ + Transport: getTransport(cfg), + }, + }}) +} diff --git a/vendor/github.com/snowflakedb/gosnowflake/bind_uploader.go b/vendor/github.com/snowflakedb/gosnowflake/bind_uploader.go index 74029095..d2cb5a5a 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/bind_uploader.go +++ b/vendor/github.com/snowflakedb/gosnowflake/bind_uploader.go @@ -1,5 +1,3 @@ -// Copyright (c) 2021-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -30,6 +28,18 @@ type bindUploader struct { arrayBindStage string } +type bindingSchema struct { + Typ string `json:"type"` + Nullable bool `json:"nullable"` + Fields []fieldMetadata `json:"fields"` +} + +type bindingValue struct { + value *string + format string + schema *bindingSchema +} + func (bu *bindUploader) upload(bindings []driver.NamedValue) (*execResponse, error) { bindingRows, err := bu.buildRowsAsBytes(bindings) if err != nil { @@ -106,7 +116,7 @@ func (bu *bindUploader) createStageIfNeeded() error { return (&SnowflakeError{ Number: code, SQLState: data.Data.SQLState, - Message: err.Error(), + Message: data.Message, QueryID: data.Data.QueryID, }).exceptionTelemetry(bu.sc) } @@ -124,7 +134,10 @@ func (bu *bindUploader) buildRowsAsBytes(columns []driver.NamedValue) ([][]byte, }).exceptionTelemetry(bu.sc) } - _, column := snowflakeArrayToString(&columns[0], true) + _, column, err := snowflakeArrayToString(&columns[0], true) + if err != nil { + return nil, err + } numRows := len(column) csvRows := make([][]byte, 0) rows := make([][]interface{}, 0) @@ -140,7 +153,10 @@ func (bu *bindUploader) buildRowsAsBytes(columns []driver.NamedValue) ([][]byte, } } for colIdx := 1; colIdx < numColumns; colIdx++ { - _, column = snowflakeArrayToString(&columns[colIdx], true) + _, column, err = snowflakeArrayToString(&columns[colIdx], true) + if err != nil { + return nil, err + } iNumRows := len(column) if iNumRows != numRows { return nil, (&SnowflakeError{ @@ -175,7 +191,7 @@ func (bu *bindUploader) createCSVRecord(data []interface{}) []byte { if ok { b.WriteString(escapeForCSV(value)) } else if !reflect.ValueOf(data[i]).IsNil() { - logger.Debugf("Cannot convert value to string in createCSVRecord. value: %v", data[i]) + logger.WithContext(bu.ctx).Debugf("Cannot convert value to string in createCSVRecord. value: %v", data[i]) } } b.WriteString("\n") @@ -189,7 +205,10 @@ func (sc *snowflakeConn) processBindings( requestID UUID, req *execRequest) error { arrayBindThreshold := sc.getArrayBindStageThreshold() - numBinds := arrayBindValueCount(bindings) + numBinds, err := arrayBindValueCount(bindings) + if err != nil { + return err + } if 0 < arrayBindThreshold && arrayBindThreshold <= numBinds && !describeOnly && isArrayBind(bindings) { uploader := bindUploader{ sc: sc, @@ -203,8 +222,7 @@ func (sc *snowflakeConn) processBindings( req.Bindings = nil req.BindStage = uploader.stagePath } else { - var err error - req.Bindings, err = getBindValues(bindings) + req.Bindings, err = getBindValues(bindings, sc.cfg.Params) if err != nil { return err } @@ -213,7 +231,7 @@ func (sc *snowflakeConn) processBindings( return nil } -func getBindValues(bindings []driver.NamedValue) (map[string]execBindParameter, error) { +func getBindValues(bindings []driver.NamedValue, params map[string]*string) (map[string]execBindParameter, error) { tsmode := timestampNtzType idx := 1 var err error @@ -231,21 +249,32 @@ func getBindValues(bindings []driver.NamedValue) (map[string]execBindParameter, } } else { var val interface{} + var bv bindingValue if t == sliceType { // retrieve array binding data - t, val = snowflakeArrayToString(&binding, false) + t, val, err = snowflakeArrayToString(&binding, false) + if err != nil { + return nil, err + } } else { - val, err = valueToString(binding.Value, tsmode) + bv, err = valueToString(binding.Value, tsmode, params) + val = bv.value if err != nil { return nil, err } } if t == nullType || t == unSupportedType { t = textType // if null or not supported, pass to GS as text + } else if t == nilObjectType || t == mapType || t == nilMapType { + t = objectType + } else if t == nilArrayType { + t = arrayType } bindValues[bindingName(binding, idx)] = execBindParameter{ - Type: t.String(), - Value: val, + Type: t.String(), + Value: val, + Format: bv.format, + Schema: bv.schema, } idx++ } @@ -260,12 +289,16 @@ func bindingName(nv driver.NamedValue, idx int) string { return strconv.Itoa(idx) } -func arrayBindValueCount(bindValues []driver.NamedValue) int { +func arrayBindValueCount(bindValues []driver.NamedValue) (int, error) { if !isArrayBind(bindValues) { - return 0 + return 0, nil } - _, arr := snowflakeArrayToString(&bindValues[0], false) - return len(bindValues) * len(arr) + _, arr, err := snowflakeArrayToString(&bindValues[0], false) + if err != nil { + return 0, err + } + + return len(bindValues) * len(arr), nil } func isArrayBind(bindings []driver.NamedValue) bool { @@ -322,3 +355,21 @@ func supportedNullBind(nv *driver.NamedValue) bool { } return false } + +func supportedStructuredObjectWriterBind(nv *driver.NamedValue) bool { + if _, ok := nv.Value.(StructuredObjectWriter); ok { + return true + } + _, ok := nv.Value.(reflect.Type) + return ok +} + +func supportedStructuredArrayBind(nv *driver.NamedValue) bool { + typ := reflect.TypeOf(nv.Value) + return typ != nil && (typ.Kind() == reflect.Array || typ.Kind() == reflect.Slice) +} + +func supportedStructuredMapBind(nv *driver.NamedValue) bool { + typ := reflect.TypeOf(nv.Value) + return typ != nil && (typ.Kind() == reflect.Map || typ == reflect.TypeOf(NilMapTypes{})) +} diff --git a/vendor/github.com/snowflakedb/gosnowflake/cacert.go b/vendor/github.com/snowflakedb/gosnowflake/cacert.go index 04b356eb..c1b784aa 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/cacert.go +++ b/vendor/github.com/snowflakedb/gosnowflake/cacert.go @@ -1,5 +1,3 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake // caRootPEM includes a snapshot of root CAs downloaded from https://curl.haxx.se/ca/cacert.pem diff --git a/vendor/github.com/snowflakedb/gosnowflake/chunk.go b/vendor/github.com/snowflakedb/gosnowflake/chunk.go index 4708f628..e6390923 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/chunk.go +++ b/vendor/github.com/snowflakedb/gosnowflake/chunk.go @@ -1,5 +1,3 @@ -// Copyright (c) 2018-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( diff --git a/vendor/github.com/snowflakedb/gosnowflake/chunk_downloader.go b/vendor/github.com/snowflakedb/gosnowflake/chunk_downloader.go index b68f9ece..d64124b5 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/chunk_downloader.go +++ b/vendor/github.com/snowflakedb/gosnowflake/chunk_downloader.go @@ -1,5 +1,3 @@ -// Copyright (c) 2021-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -7,6 +5,7 @@ import ( "compress/gzip" "context" "encoding/json" + "errors" "fmt" "io" "math/rand" @@ -17,9 +16,9 @@ import ( "sync" "time" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/ipc" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/ipc" + "github.com/apache/arrow-go/v18/arrow/memory" ) type chunkDownloader interface { @@ -92,7 +91,7 @@ func (scd *snowflakeChunkDownloader) nextResultSet() error { } func (scd *snowflakeChunkDownloader) start() error { - if usesArrowBatches(scd.ctx) { + if usesArrowBatches(scd.ctx) && scd.getQueryResultFormat() == arrowFormat { return scd.startArrowBatches() } scd.CurrentChunkSize = len(scd.RowSet.JSON) // cache the size @@ -103,18 +102,18 @@ func (scd *snowflakeChunkDownloader) start() error { populateJSONRowSet(scd.CurrentChunk, scd.RowSet.JSON) if scd.getQueryResultFormat() == arrowFormat && scd.RowSet.RowSetBase64 != "" { - // if the rowsetbase64 retrieved from the server is empty, move on to downloading chunks - var err error - var loc *time.Location - if scd.sc != nil && scd.sc.cfg != nil { - loc = getCurrentLocation(scd.sc.cfg.Params) + params, err := scd.getConfigParams() + if err != nil { + return err } + // if the rowsetbase64 retrieved from the server is empty, move on to downloading chunks + loc := getCurrentLocation(params) firstArrowChunk, err := buildFirstArrowChunk(scd.RowSet.RowSetBase64, loc, scd.pool) if err != nil { return err } higherPrecision := higherPrecisionEnabled(scd.ctx) - scd.CurrentChunk, err = firstArrowChunk.decodeArrowChunk(scd.RowSet.RowType, higherPrecision) + scd.CurrentChunk, err = firstArrowChunk.decodeArrowChunk(scd.ctx, scd.RowSet.RowType, higherPrecision, params) scd.CurrentChunkSize = firstArrowChunk.rowCount if err != nil { return err @@ -124,8 +123,8 @@ func (scd *snowflakeChunkDownloader) start() error { // start downloading chunks if exists chunkMetaLen := len(scd.ChunkMetas) if chunkMetaLen > 0 { - logger.Debugf("MaxChunkDownloadWorkers: %v", MaxChunkDownloadWorkers) - logger.Debugf("chunks: %v, total bytes: %d", chunkMetaLen, scd.totalUncompressedSize()) + logger.WithContext(scd.ctx).Debugf("MaxChunkDownloadWorkers: %v", MaxChunkDownloadWorkers) + logger.WithContext(scd.ctx).Debugf("chunks: %v, total bytes: %d", chunkMetaLen, scd.totalUncompressedSize()) scd.ChunksMutex = &sync.Mutex{} scd.DoneDownloadCond = sync.NewCond(scd.ChunksMutex) scd.Chunks = make(map[int][]chunkRowType) @@ -133,7 +132,7 @@ func (scd *snowflakeChunkDownloader) start() error { scd.ChunksError = make(chan *chunkError, MaxChunkDownloadWorkers) for i := 0; i < chunkMetaLen; i++ { chunk := scd.ChunkMetas[i] - logger.Debugf("add chunk to channel ChunksChan: %v, URL: %v, RowCount: %v, UncompressedSize: %v, ChunkResultFormat: %v", + logger.WithContext(scd.ctx).Debugf("add chunk to channel ChunksChan: %v, URL: %v, RowCount: %v, UncompressedSize: %v, ChunkResultFormat: %v", i+1, chunk.URL, chunk.RowCount, chunk.UncompressedSize, scd.QueryResultFormat) scd.ChunksChan <- i } @@ -147,11 +146,16 @@ func (scd *snowflakeChunkDownloader) start() error { func (scd *snowflakeChunkDownloader) schedule() { select { case nextIdx := <-scd.ChunksChan: - logger.Infof("schedule chunk: %v", nextIdx+1) - go scd.FuncDownload(scd.ctx, scd, nextIdx) + logger.WithContext(scd.ctx).Infof("schedule chunk: %v", nextIdx+1) + go GoroutineWrapper( + scd.ctx, + func() { + scd.FuncDownload(scd.ctx, scd, nextIdx) + }, + ) default: // no more download - logger.Info("no more download") + logger.WithContext(scd.ctx).Info("no more download") } } @@ -162,17 +166,22 @@ func (scd *snowflakeChunkDownloader) checkErrorRetry() (err error) { errc.Error != context.Canceled && errc.Error != context.DeadlineExceeded { // add the index to the chunks channel so that the download will be retried. - go scd.FuncDownload(scd.ctx, scd, errc.Index) + go GoroutineWrapper( + scd.ctx, + func() { + scd.FuncDownload(scd.ctx, scd, errc.Index) + }, + ) scd.ChunksErrorCounter++ - logger.Warningf("chunk idx: %v, err: %v. retrying (%v/%v)...", + logger.WithContext(scd.ctx).Warningf("chunk idx: %v, err: %v. retrying (%v/%v)...", errc.Index, errc.Error, scd.ChunksErrorCounter, maxChunkDownloaderErrorCounter) } else { scd.ChunksFinalErrors = append(scd.ChunksFinalErrors, errc) - logger.Warningf("chunk idx: %v, err: %v. no further retry", errc.Index, errc.Error) + logger.WithContext(scd.ctx).Warningf("chunk idx: %v, err: %v. no further retry", errc.Index, errc.Error) return errc.Error } default: - logger.Info("no error is detected.") + logger.WithContext(scd.ctx).Info("no error is detected.") } return nil } @@ -195,7 +204,7 @@ func (scd *snowflakeChunkDownloader) next() (chunkRowType, error) { } for scd.Chunks[scd.CurrentChunkIndex] == nil { - logger.Debugf("waiting for chunk idx: %v/%v", + logger.WithContext(scd.ctx).Debugf("waiting for chunk idx: %v/%v", scd.CurrentChunkIndex+1, len(scd.ChunkMetas)) if err := scd.checkErrorRetry(); err != nil { @@ -207,7 +216,7 @@ func (scd *snowflakeChunkDownloader) next() (chunkRowType, error) { // 1) one chunk download finishes or 2) an error occurs. scd.DoneDownloadCond.Wait() } - logger.Debugf("ready: chunk %v", scd.CurrentChunkIndex+1) + logger.WithContext(scd.ctx).Debugf("ready: chunk %v", scd.CurrentChunkIndex+1) scd.CurrentChunk = scd.Chunks[scd.CurrentChunkIndex] scd.ChunksMutex.Unlock() scd.CurrentChunkSize = len(scd.CurrentChunk) @@ -216,7 +225,7 @@ func (scd *snowflakeChunkDownloader) next() (chunkRowType, error) { scd.schedule() } - logger.Debugf("no more data") + logger.WithContext(scd.ctx).Debugf("no more data") if len(scd.ChunkMetas) > 0 { close(scd.ChunksError) close(scd.ChunksChan) @@ -249,12 +258,19 @@ func (scd *snowflakeChunkDownloader) getRowType() []execResponseRowType { } func (scd *snowflakeChunkDownloader) getArrowBatches() []*ArrowBatch { - if scd.FirstBatch.rec == nil { + if scd.FirstBatch == nil || scd.FirstBatch.rec == nil { return scd.ArrowBatches } return append([]*ArrowBatch{scd.FirstBatch}, scd.ArrowBatches...) } +func (scd *snowflakeChunkDownloader) getConfigParams() (map[string]*string, error) { + if scd.sc == nil || scd.sc.cfg == nil { + return map[string]*string{}, errors.New("failed to retrieve connection") + } + return scd.sc.cfg.Params, nil +} + func getChunk( ctx context.Context, sc *snowflakeConn, @@ -271,32 +287,33 @@ func getChunk( } func (scd *snowflakeChunkDownloader) startArrowBatches() error { - if scd.RowSet.RowSetBase64 == "" { - return nil - } - var err error - chunkMetaLen := len(scd.ChunkMetas) var loc *time.Location - if scd.sc != nil && scd.sc.cfg != nil { - loc = getCurrentLocation(scd.sc.cfg.Params) - } - firstArrowChunk, err := buildFirstArrowChunk(scd.RowSet.RowSetBase64, loc, scd.pool) + params, err := scd.getConfigParams() if err != nil { return err } - scd.FirstBatch = &ArrowBatch{ - idx: 0, - scd: scd, - funcDownloadHelper: scd.FuncDownloadHelper, - loc: loc, - } - // decode first chunk if possible - if firstArrowChunk.allocator != nil { - scd.FirstBatch.rec, err = firstArrowChunk.decodeArrowBatch(scd) + loc = getCurrentLocation(params) + if scd.RowSet.RowSetBase64 != "" { + var err error + firstArrowChunk, err := buildFirstArrowChunk(scd.RowSet.RowSetBase64, loc, scd.pool) if err != nil { return err } + scd.FirstBatch = &ArrowBatch{ + idx: 0, + scd: scd, + funcDownloadHelper: scd.FuncDownloadHelper, + loc: loc, + } + // decode first chunk if possible + if firstArrowChunk.allocator != nil { + scd.FirstBatch.rec, err = firstArrowChunk.decodeArrowBatch(scd) + if err != nil { + return err + } + } } + chunkMetaLen := len(scd.ChunkMetas) scd.ArrowBatches = make([]*ArrowBatch, chunkMetaLen) for i := range scd.ArrowBatches { scd.ArrowBatches[i] = &ArrowBatch{ @@ -343,11 +360,11 @@ func (r *largeResultSetReader) Read(p []byte) (n int, err error) { } func downloadChunk(ctx context.Context, scd *snowflakeChunkDownloader, idx int) { - logger.Infof("download start chunk: %v", idx+1) + logger.WithContext(ctx).Infof("download start chunk: %v", idx+1) defer scd.DoneDownloadCond.Broadcast() if err := scd.FuncDownloadHelper(ctx, scd, idx); err != nil { - logger.Errorf( + logger.WithContext(ctx).Errorf( "failed to extract HTTP response body. URL: %v, err: %v", scd.ChunkMetas[idx].URL, err) scd.ChunksError <- &chunkError{Index: idx, Error: err} } else if scd.ctx.Err() == context.Canceled || scd.ctx.Err() == context.DeadlineExceeded { @@ -358,9 +375,9 @@ func downloadChunk(ctx context.Context, scd *snowflakeChunkDownloader, idx int) func downloadChunkHelper(ctx context.Context, scd *snowflakeChunkDownloader, idx int) error { headers := make(map[string]string) if len(scd.ChunkHeader) > 0 { - logger.Debug("chunk header is provided.") + logger.WithContext(ctx).Debug("chunk header is provided.") for k, v := range scd.ChunkHeader { - logger.Debugf("adding header: %v, value: %v", k, v) + logger.WithContext(ctx).Debugf("adding header: %v, value: %v", k, v) headers[k] = v } @@ -375,14 +392,14 @@ func downloadChunkHelper(ctx context.Context, scd *snowflakeChunkDownloader, idx } bufStream := bufio.NewReader(resp.Body) defer resp.Body.Close() - logger.Debugf("response returned chunk: %v for URL: %v", idx+1, scd.ChunkMetas[idx].URL) + logger.WithContext(ctx).Debugf("response returned chunk: %v for URL: %v", idx+1, scd.ChunkMetas[idx].URL) if resp.StatusCode != http.StatusOK { b, err := io.ReadAll(bufStream) if err != nil { return err } - logger.Infof("HTTP: %v, URL: %v, Body: %v", resp.StatusCode, scd.ChunkMetas[idx].URL, b) - logger.Infof("Header: %v", resp.Header) + logger.WithContext(ctx).Infof("HTTP: %v, URL: %v, Body: %v", resp.StatusCode, scd.ChunkMetas[idx].URL, b) + logger.WithContext(ctx).Infof("Header: %v", resp.Header) return &SnowflakeError{ Number: ErrFailedToGetChunk, SQLState: SQLStateConnectionFailure, @@ -390,10 +407,10 @@ func downloadChunkHelper(ctx context.Context, scd *snowflakeChunkDownloader, idx MessageArgs: []interface{}{idx}, } } - return decodeChunk(scd, idx, bufStream) + return decodeChunk(ctx, scd, idx, bufStream) } -func decodeChunk(scd *snowflakeChunkDownloader, idx int, bufStream *bufio.Reader) (err error) { +func decodeChunk(ctx context.Context, scd *snowflakeChunkDownloader, idx int, bufStream *bufio.Reader) (err error) { gzipMagic, err := bufStream.Peek(2) if err != nil { return err @@ -441,9 +458,11 @@ func decodeChunk(scd *snowflakeChunkDownloader, idx int, bufStream *bufio.Reader return err } var loc *time.Location - if scd.sc != nil && scd.sc.cfg != nil { - loc = getCurrentLocation(scd.sc.cfg.Params) + params, err := scd.getConfigParams() + if err != nil { + return err } + loc = getCurrentLocation(params) arc := arrowResultChunk{ ipcReader, 0, @@ -459,12 +478,12 @@ func decodeChunk(scd *snowflakeChunkDownloader, idx int, bufStream *bufio.Reader return nil } highPrec := higherPrecisionEnabled(scd.ctx) - respd, err = arc.decodeArrowChunk(scd.RowSet.RowType, highPrec) + respd, err = arc.decodeArrowChunk(ctx, scd.RowSet.RowType, highPrec, params) if err != nil { return err } } - logger.Debugf( + logger.WithContext(scd.ctx).Debugf( "decoded %d rows w/ %d bytes in %s (chunk %v)", scd.ChunkMetas[idx].RowCount, scd.ChunkMetas[idx].UncompressedSize, @@ -509,55 +528,58 @@ func (scd *streamChunkDownloader) nextResultSet() error { } func (scd *streamChunkDownloader) start() error { - go func() { - readErr := io.EOF - - logger.WithContext(scd.ctx).Infof( - "start downloading. downloader id: %v, %v/%v rows, %v chunks", - scd.id, len(scd.RowSet.RowType), scd.Total, len(scd.ChunkMetas)) - t := time.Now() - - defer func() { - if readErr == io.EOF { - logger.WithContext(scd.ctx).Infof("downloading done. downloader id: %v", scd.id) - } else { - logger.WithContext(scd.ctx).Debugf("downloading error. downloader id: %v", scd.id) - } - scd.readErr = readErr - close(scd.rowStream) - - if r := recover(); r != nil { - if err, ok := r.(error); ok { - readErr = err + go GoroutineWrapper( + scd.ctx, + func() { + readErr := io.EOF + + logger.WithContext(scd.ctx).Infof( + "start downloading. downloader id: %v, %v/%v rows, %v chunks", + scd.id, len(scd.RowSet.RowType), scd.Total, len(scd.ChunkMetas)) + t := time.Now() + + defer func() { + if readErr == io.EOF { + logger.WithContext(scd.ctx).Infof("downloading done. downloader id: %v", scd.id) } else { - readErr = fmt.Errorf("%v", r) + logger.WithContext(scd.ctx).Debugf("downloading error. downloader id: %v", scd.id) + } + scd.readErr = readErr + close(scd.rowStream) + + if r := recover(); r != nil { + if err, ok := r.(error); ok { + readErr = err + } else { + readErr = fmt.Errorf("%v", r) + } } + }() + + logger.WithContext(scd.ctx).Infof("sending initial set of rows in %vms", time.Since(t).Microseconds()) + t = time.Now() + for _, row := range scd.RowSet.JSON { + scd.rowStream <- row } - }() - - logger.WithContext(scd.ctx).Infof("sending initial set of rows in %vms", time.Since(t).Microseconds()) - t = time.Now() - for _, row := range scd.RowSet.JSON { - scd.rowStream <- row - } - scd.RowSet.JSON = nil - - // Download and parse one chunk at a time. The fetcher will send each - // parsed row to the row stream. When an error occurs, the fetcher will - // stop writing to the row stream so we can stop processing immediately - for i, chunk := range scd.ChunkMetas { - logger.WithContext(scd.ctx).Infof("starting chunk fetch %d (%d rows)", i, chunk.RowCount) - if err := scd.fetcher.fetch(chunk.URL, scd.rowStream); err != nil { - logger.WithContext(scd.ctx).Debugf( - "failed chunk fetch %d: %#v, downloader id: %v, %v/%v rows, %v chunks", - i, err, scd.id, len(scd.RowSet.RowType), scd.Total, len(scd.ChunkMetas)) - readErr = fmt.Errorf("chunk fetch: %w", err) - break + scd.RowSet.JSON = nil + + // Download and parse one chunk at a time. The fetcher will send each + // parsed row to the row stream. When an error occurs, the fetcher will + // stop writing to the row stream so we can stop processing immediately + for i, chunk := range scd.ChunkMetas { + logger.WithContext(scd.ctx).Infof("starting chunk fetch %d (%d rows)", i, chunk.RowCount) + if err := scd.fetcher.fetch(chunk.URL, scd.rowStream); err != nil { + logger.WithContext(scd.ctx).Debugf( + "failed chunk fetch %d: %#v, downloader id: %v, %v/%v rows, %v chunks", + i, err, scd.id, len(scd.RowSet.RowType), scd.Total, len(scd.ChunkMetas)) + readErr = fmt.Errorf("chunk fetch: %w", err) + break + } + logger.WithContext(scd.ctx).Infof("fetched chunk %d (%d rows) in %vms", i, chunk.RowCount, time.Since(t).Microseconds()) + t = time.Now() } - logger.WithContext(scd.ctx).Infof("fetched chunk %d (%d rows) in %vms", i, chunk.RowCount, time.Since(t).Microseconds()) - t = time.Now() - } - }() + }, + ) return nil } diff --git a/vendor/github.com/snowflakedb/gosnowflake/client.go b/vendor/github.com/snowflakedb/gosnowflake/client.go index 14f0e5f1..f3e48f21 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/client.go +++ b/vendor/github.com/snowflakedb/gosnowflake/client.go @@ -1,5 +1,3 @@ -// Copyright (c) 2021-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( diff --git a/vendor/github.com/snowflakedb/gosnowflake/client_configuration.go b/vendor/github.com/snowflakedb/gosnowflake/client_configuration.go index a7271812..2a4d5a4c 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/client_configuration.go +++ b/vendor/github.com/snowflakedb/gosnowflake/client_configuration.go @@ -1,5 +1,3 @@ -// Copyright (c) 2023 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -8,6 +6,7 @@ import ( "fmt" "os" "path" + "path/filepath" "strings" ) @@ -26,39 +25,47 @@ const ( clientConfEnvName = "SF_CLIENT_CONFIG_FILE" ) -func getClientConfig(filePathFromConnectionString string) (*ClientConfig, error) { - configPredefinedFilePaths := clientConfigPredefinedDirs() - filePath := findClientConfigFilePath(filePathFromConnectionString, configPredefinedFilePaths) +func getClientConfig(filePathFromConnectionString string) (*ClientConfig, string, error) { + configPredefinedDirPaths := clientConfigPredefinedDirs() + filePath, err := findClientConfigFilePath(filePathFromConnectionString, configPredefinedDirPaths) + if err != nil { + return nil, "", err + } if filePath == "" { // we did not find a config file - return nil, nil + return nil, "", nil } - return parseClientConfiguration(filePath) + config, err := parseClientConfiguration(filePath) + return config, filePath, err } -func findClientConfigFilePath(filePathFromConnectionString string, configPredefinedDirs []string) string { +func findClientConfigFilePath(filePathFromConnectionString string, configPredefinedDirs []string) (string, error) { if filePathFromConnectionString != "" { - return filePathFromConnectionString + logger.Infof("Using client configuration path from a connection string: %s", filePathFromConnectionString) + return filePathFromConnectionString, nil } envConfigFilePath := os.Getenv(clientConfEnvName) if envConfigFilePath != "" { - return envConfigFilePath + logger.Infof("Using client configuration path from an environment variable: %s", envConfigFilePath) + return envConfigFilePath, nil } return searchForConfigFile(configPredefinedDirs) } -func searchForConfigFile(directories []string) string { +func searchForConfigFile(directories []string) (string, error) { for _, dir := range directories { filePath := path.Join(dir, defaultConfigName) exists, err := existsFile(filePath) if err != nil { - logger.Errorf("Error while searching for the client config in %s directory: %s", dir, err) - continue + return "", fmt.Errorf("error while searching for client config in directory: %s, err: %s", dir, err) } if exists { - return filePath + logger.Infof("Using client configuration from a default directory: %s", filePath) + return filePath, nil } + logger.Debugf("No client config found in directory: %s", dir) } - return "" + logger.Info("No client config file found in default directories") + return "", nil } func existsFile(filePath string) (bool, error) { @@ -73,12 +80,23 @@ func existsFile(filePath string) (bool, error) { } func clientConfigPredefinedDirs() []string { + var predefinedDirs []string + exeFile, err := os.Executable() + if err != nil { + logger.Warnf("Unable to access the application directory for client configuration search, err: %v", err) + } else { + predefinedDirs = append(predefinedDirs, filepath.Dir(exeFile)) + } homeDir, err := os.UserHomeDir() if err != nil { - logger.Warnf("Home dir could not be determined: %w", err) - return []string{".", os.TempDir()} + logger.Warnf("Unable to access Home directory for client configuration search, err: %v", err) + } else { + predefinedDirs = append(predefinedDirs, homeDir) } - return []string{".", homeDir, os.TempDir()} + if predefinedDirs == nil { + return []string{} + } + return predefinedDirs } // ClientConfig config root @@ -96,7 +114,9 @@ func parseClientConfiguration(filePath string) (*ClientConfig, error) { if filePath == "" { return nil, nil } - fileContents, err := os.ReadFile(filePath) + // Check if group (5th LSB) or others (2nd LSB) have a write permission to the file + expectedPerm := os.FileMode(1<<4 | 1<<1) + fileContents, err := getFileContents(filePath, expectedPerm) if err != nil { return nil, parsingClientConfigError(err) } @@ -105,6 +125,12 @@ func parseClientConfiguration(filePath string) (*ClientConfig, error) { if err != nil { return nil, parsingClientConfigError(err) } + unknownValues := getUnknownValues(fileContents) + if len(unknownValues) > 0 { + for val := range unknownValues { + logger.Warnf("Unknown configuration entry: %s with value: %s", val, unknownValues[val]) + } + } err = validateClientConfiguration(&clientConfig) if err != nil { return nil, parsingClientConfigError(err) @@ -112,6 +138,25 @@ func parseClientConfiguration(filePath string) (*ClientConfig, error) { return &clientConfig, nil } +func getUnknownValues(fileContents []byte) map[string]interface{} { + var values map[string]interface{} + err := json.Unmarshal(fileContents, &values) + if err != nil { + return nil + } + if values["common"] == nil { + return nil + } + commonValues := values["common"].(map[string]interface{}) + lowercaseCommonValues := make(map[string]interface{}, len(commonValues)) + for k, v := range commonValues { + lowercaseCommonValues[strings.ToLower(k)] = v + } + delete(lowercaseCommonValues, "log_level") + delete(lowercaseCommonValues, "log_path") + return lowercaseCommonValues +} + func parsingClientConfigError(err error) error { return fmt.Errorf("parsing client config failed: %w", err) } @@ -129,9 +174,9 @@ func validateClientConfiguration(clientConfig *ClientConfig) error { func validateLogLevel(clientConfig ClientConfig) error { var logLevel = clientConfig.Common.LogLevel if logLevel != "" { - _, error := toLogLevel(logLevel) - if error != nil { - return error + _, err := toLogLevel(logLevel) + if err != nil { + return err } } return nil diff --git a/vendor/github.com/snowflakedb/gosnowflake/connection.go b/vendor/github.com/snowflakedb/gosnowflake/connection.go index 72829062..0bc427d2 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/connection.go +++ b/vendor/github.com/snowflakedb/gosnowflake/connection.go @@ -1,5 +1,3 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -14,15 +12,13 @@ import ( "io" "net/http" "net/url" - "os" "regexp" "strconv" - "strings" "sync" "sync/atomic" "time" - "github.com/apache/arrow/go/v14/arrow/ipc" + "github.com/apache/arrow-go/v18/arrow/ipc" ) const ( @@ -67,8 +63,9 @@ const ( executionTypeStatement string = "statement" ) -const privateLinkSuffix = "privatelink.snowflakecomputing.com" - +// snowflakeConn manages its own context. +// External cancellation should not be supported because the connection +// may be reused after the original query/request has completed. type snowflakeConn struct { ctx context.Context cfg *Config @@ -98,7 +95,7 @@ func (sc *snowflakeConn) exec( queryContext, err := buildQueryContext(sc.queryContextCache) if err != nil { - logger.Errorf("error while building query context: %v", err) + logger.WithContext(ctx).Errorf("error while building query context: %v", err) } req := execRequest{ SQLText: query, @@ -163,21 +160,32 @@ func (sc *snowflakeConn) exec( if !sc.cfg.DisableQueryContextCache && data.Data.QueryContext != nil { queryContext, err := extractQueryContext(data) if err != nil { - logger.Errorf("error while decoding query context: ", err) + logger.WithContext(ctx).Errorf("error while decoding query context: %v", err) } else { sc.queryContextCache.add(sc, queryContext.Entries...) } } // handle PUT/GET commands + fileTransferChan := make(chan error, 1) if isFileTransfer(query) { - data, err = sc.processFileTransfer(ctx, data, query, isInternal) - if err != nil { - return nil, err + go func() { + data, err = sc.processFileTransfer(ctx, data, query, isInternal) + fileTransferChan <- err + }() + + select { + case <-ctx.Done(): + logger.WithContext(ctx).Info("File transfer has been cancelled") + return nil, ctx.Err() + case err := <-fileTransferChan: + if err != nil { + return nil, err + } } } - logger.WithContext(ctx).Info("Exec/Query SUCCESS") + logger.WithContext(ctx).Infof("Exec/Query SUCCESS with total=%v, returned=%v", data.Data.Total, data.Data.Returned) if data.Data.FinalDatabaseName != "" { sc.cfg.Database = data.Data.FinalDatabaseName } @@ -248,8 +256,9 @@ func (sc *snowflakeConn) BeginTx( return nil, driver.ErrBadConn } isDesc := isDescribeOnly(ctx) + isInternal := isInternal(ctx) if _, err := sc.exec(ctx, "BEGIN", false, /* noResult */ - false /* isInternal */, isDesc, nil); err != nil { + isInternal, isDesc, nil); err != nil { return nil, err } return &snowflakeTx{sc, ctx}, nil @@ -257,6 +266,7 @@ func (sc *snowflakeConn) BeginTx( func (sc *snowflakeConn) cleanup() { // must flush log buffer while the process is running. + logger.WithContext(sc.ctx).Debugln("Snowflake connection closing.") if sc.rest != nil && sc.rest.Client != nil { sc.rest.Client.CloseIdleConnections() } @@ -266,13 +276,16 @@ func (sc *snowflakeConn) cleanup() { func (sc *snowflakeConn) Close() (err error) { logger.WithContext(sc.ctx).Infoln("Close") - sc.telemetry.sendBatch() + if err := sc.telemetry.sendBatch(); err != nil { + logger.WithContext(sc.ctx).Warnf("error while sending telemetry. %v", err) + } sc.stopHeartBeat() defer sc.cleanup() if sc.cfg != nil && !sc.cfg.KeepSessionAlive { - if err = sc.rest.FuncCloseSession(sc.ctx, sc.rest, sc.rest.RequestTimeout); err != nil { - logger.Error(err) + // we have to replace context with background, otherwise we can use a one that is cancelled or timed out + if err = sc.rest.FuncCloseSession(context.Background(), sc.rest, sc.rest.RequestTimeout); err != nil { + logger.WithContext(sc.ctx).Error(err) } } return nil @@ -304,9 +317,9 @@ func (sc *snowflakeConn) ExecContext( } noResult := isAsyncMode(ctx) isDesc := isDescribeOnly(ctx) - // TODO handle isInternal + isInternal := isInternal(ctx) ctx = setResultType(ctx, execResultType) - data, err := sc.exec(ctx, query, noResult, false /* isInternal */, isDesc, args) + data, err := sc.exec(ctx, query, noResult, isInternal, isDesc, args) if err != nil { logger.WithContext(ctx).Infof("error: %v", err) if data != nil { @@ -350,7 +363,7 @@ func (sc *snowflakeConn) ExecContext( } return driver.ResultNoRows, nil } - logger.Debug("DDL") + logger.WithContext(ctx).Debug("DDL") if isStatementContext(ctx) { return &snowflakeResultNoRows{queryID: data.Data.QueryID}, nil } @@ -393,8 +406,8 @@ func (sc *snowflakeConn) queryContextInternal( noResult := isAsyncMode(ctx) isDesc := isDescribeOnly(ctx) ctx = setResultType(ctx, queryResultType) - // TODO: handle isInternal - data, err := sc.exec(ctx, query, noResult, false /* isInternal */, isDesc, args) + isInternal := isInternal(ctx) + data, err := sc.exec(ctx, query, noResult, isInternal, isDesc, args) if err != nil { logger.WithContext(ctx).Errorf("error: %v", err) if data != nil { @@ -420,6 +433,8 @@ func (sc *snowflakeConn) queryContextInternal( rows := new(snowflakeRows) rows.sc = sc rows.queryID = data.Data.QueryID + rows.ctx = ctx + rows.format = resultFormat(data.Data.QueryResultFormat) if isMultiStmt(&data.Data) { // handleMultiQuery is responsible to fill rows with childResults @@ -459,9 +474,9 @@ func (sc *snowflakeConn) Ping(ctx context.Context) error { } noResult := isAsyncMode(ctx) isDesc := isDescribeOnly(ctx) - // TODO: handle isInternal + isInternal := isInternal(ctx) ctx = setResultType(ctx, execResultType) - _, err := sc.exec(ctx, "SELECT 1", noResult, false, /* isInternal */ + _, err := sc.exec(ctx, "SELECT 1", noResult, isInternal, isDesc, []driver.NamedValue{}) return err } @@ -469,7 +484,7 @@ func (sc *snowflakeConn) Ping(ctx context.Context) error { // CheckNamedValue determines which types are handled by this driver aside from // the instances captured by driver.Value func (sc *snowflakeConn) CheckNamedValue(nv *driver.NamedValue) error { - if supportedNullBind(nv) || supportedArrayBind(nv) { + if supportedNullBind(nv) || supportedArrayBind(nv) || supportedStructuredObjectWriterBind(nv) || supportedStructuredArrayBind(nv) || supportedStructuredMapBind(nv) { return nil } return driver.ErrSkip @@ -502,7 +517,8 @@ func (sc *snowflakeConn) QueryArrowStream(ctx context.Context, query string, bin ctx = WithArrowBatches(context.WithValue(ctx, asyncMode, false)) ctx = setResultType(ctx, queryResultType) isDesc := isDescribeOnly(ctx) - data, err := sc.exec(ctx, query, false, false /* isinternal */, isDesc, bindings) + isInternal := isInternal(ctx) + data, err := sc.exec(ctx, query, false, isInternal, isDesc, bindings) if err != nil { logger.WithContext(ctx).Errorf("error: %v", err) if data != nil { @@ -570,7 +586,7 @@ func (w *wrapReader) Close() error { func (asb *ArrowStreamBatch) downloadChunkStreamHelper(ctx context.Context) error { headers := make(map[string]string) if len(asb.scd.ChunkHeader) > 0 { - logger.Debug("chunk header is provided") + logger.WithContext(ctx).Debug("chunk header is provided") for k, v := range asb.scd.ChunkHeader { logger.Debugf("adding header: %v, value: %v", k, v) @@ -585,7 +601,7 @@ func (asb *ArrowStreamBatch) downloadChunkStreamHelper(ctx context.Context) erro if err != nil { return err } - logger.Debugf("response returned chunk: %v for URL: %v", asb.idx+1, asb.scd.ChunkMetas[asb.idx].URL) + logger.WithContext(ctx).Debugf("response returned chunk: %v for URL: %v", asb.idx+1, asb.scd.ChunkMetas[asb.idx].URL) if resp.StatusCode != http.StatusOK { defer resp.Body.Close() b, err := io.ReadAll(resp.Body) @@ -593,8 +609,8 @@ func (asb *ArrowStreamBatch) downloadChunkStreamHelper(ctx context.Context) erro return err } - logger.Infof("HTTP: %v, URL: %v, Body: %v", resp.StatusCode, asb.scd.ChunkMetas[asb.idx].URL, b) - logger.Infof("Header: %v", resp.Header) + logger.WithContext(ctx).Infof("HTTP: %v, URL: %v, Body: %v", resp.StatusCode, asb.scd.ChunkMetas[asb.idx].URL, b) + logger.WithContext(ctx).Infof("Header: %v", resp.Header) return &SnowflakeError{ Number: ErrFailedToGetChunk, SQLState: SQLStateConnectionFailure, @@ -671,7 +687,7 @@ type snowflakeArrowStreamChunkDownloader struct { } func (scd *snowflakeArrowStreamChunkDownloader) Location() *time.Location { - if scd.sc != nil { + if scd.sc != nil && scd.sc.cfg != nil { return getCurrentLocation(scd.sc.cfg.Params) } return nil @@ -686,9 +702,9 @@ func (scd *snowflakeArrowStreamChunkDownloader) JSONData() [][]*string { // the server might have had an empty first batch, check if we can decode // that first batch, if not we skip it. -func (scd *snowflakeArrowStreamChunkDownloader) maybeFirstBatch() []byte { +func (scd *snowflakeArrowStreamChunkDownloader) maybeFirstBatch() ([]byte, error) { if scd.RowSet.RowSetBase64 == "" { - return nil + return nil, nil } // first batch @@ -696,17 +712,19 @@ func (scd *snowflakeArrowStreamChunkDownloader) maybeFirstBatch() []byte { if err != nil { // match logic in buildFirstArrowChunk // assume there's no first chunk if we can't decode the base64 string - return nil + logger.Warnf("skipping first batch as it is not a valid base64 response. %v", err) + return nil, err } // verify it's a valid ipc stream, otherwise skip it rr, err := ipc.NewReader(bytes.NewReader(rowSetBytes)) if err != nil { - return nil + logger.Warnf("skipping first batch as it is not a valid IPC stream. %v", err) + return nil, err } rr.Release() - return rowSetBytes + return rowSetBytes, nil } func (scd *snowflakeArrowStreamChunkDownloader) GetBatches() (out []ArrowStreamBatch, err error) { @@ -715,7 +733,10 @@ func (scd *snowflakeArrowStreamChunkDownloader) GetBatches() (out []ArrowStreamB out = make([]ArrowStreamBatch, chunkMetaLen, chunkMetaLen+1) toFill := out - rowSetBytes := scd.maybeFirstBatch() + rowSetBytes, err := scd.maybeFirstBatch() + if err != nil { + return nil, err + } // if there was no first batch in the response from the server, // skip it and move on. toFill == out // otherwise expand out by one to account for the first batch @@ -739,16 +760,20 @@ func (scd *snowflakeArrowStreamChunkDownloader) GetBatches() (out []ArrowStreamB Loc: loc, scd: scd, } + logger.Debugf("batch %v, numrows: %v", i, toFill[i].numrows) totalCounted += int64(scd.ChunkMetas[i].RowCount) } if len(rowSetBytes) > 0 { // if we had a first batch, fill in the numrows out[0].numrows = scd.Total - totalCounted + logger.Debugf("first batch, numrows: %v", out[0].numrows) } return } +// buildSnowflakeConn creates a new snowflakeConn. +// The provided context is used only for establishing the initial connection. func buildSnowflakeConn(ctx context.Context, config Config) (*snowflakeConn, error) { sc := &snowflakeConn{ SequenceCounter: 0, @@ -757,16 +782,15 @@ func buildSnowflakeConn(ctx context.Context, config Config) (*snowflakeConn, err queryContextCache: (&queryContextCache{}).init(), currentTimeProvider: defaultTimeProvider, } - // Easy logging is temporarily disabled - //err := initEasyLogging(config.ClientConfigFile) - //if err != nil { - // return nil, err - //} + err := initEasyLogging(config.ClientConfigFile) + if err != nil { + return nil, err + } var st http.RoundTripper = SnowflakeTransport if sc.cfg.Transporter == nil { - if sc.cfg.InsecureMode { + if sc.cfg.DisableOCSPChecks || sc.cfg.InsecureMode { // no revocation check with OCSP. Think twice when you want to enable this option. - st = snowflakeInsecureTransport + st = snowflakeNoOcspTransport } else { // set OCSP fail open mode ocspResponseCacheLock.Lock() @@ -777,14 +801,8 @@ func buildSnowflakeConn(ctx context.Context, config Config) (*snowflakeConn, err // use the custom transport st = sc.cfg.Transporter } - if strings.HasSuffix(sc.cfg.Host, privateLinkSuffix) { - if err := sc.setupOCSPPrivatelink(sc.cfg.Application, sc.cfg.Host); err != nil { - return nil, err - } - } else { - if _, set := os.LookupEnv(cacheServerURLEnv); set { - os.Unsetenv(cacheServerURLEnv) - } + if err = setupOCSPEnvVars(ctx, sc.cfg.Host); err != nil { + return nil, err } var tokenAccessor TokenAccessor if sc.cfg.TokenAccessor != nil { @@ -838,3 +856,21 @@ func buildSnowflakeConn(ctx context.Context, config Config) (*snowflakeConn, err return sc, nil } + +func getTransport(cfg *Config) http.RoundTripper { + if cfg == nil { + logger.Debug("getTransport: got nil Config, will perform OCSP validation for cloud storage") + return SnowflakeTransport + } + // if user configured a custom Transporter, prioritize that + if cfg.Transporter != nil { + logger.Debug("getTransport: using Transporter configured by the user") + return cfg.Transporter + } + if cfg.DisableOCSPChecks || cfg.InsecureMode { + logger.Debug("getTransport: skipping OCSP validation for cloud storage") + return snowflakeNoOcspTransport + } + logger.Debug("getTransport: will perform OCSP validation for cloud storage") + return SnowflakeTransport +} diff --git a/vendor/github.com/snowflakedb/gosnowflake/connection_configuration.go b/vendor/github.com/snowflakedb/gosnowflake/connection_configuration.go new file mode 100644 index 00000000..ee337ce6 --- /dev/null +++ b/vendor/github.com/snowflakedb/gosnowflake/connection_configuration.go @@ -0,0 +1,346 @@ +package gosnowflake + +import ( + "encoding/base64" + "errors" + "os" + path "path/filepath" + "strconv" + "strings" + "time" + + toml "github.com/BurntSushi/toml" +) + +const ( + snowflakeConnectionName = "SNOWFLAKE_DEFAULT_CONNECTION_NAME" + snowflakeHome = "SNOWFLAKE_HOME" + defaultTokenPath = "/snowflake/session/token" +) + +// LoadConnectionConfig returns connection configs loaded from the toml file. +// By default, SNOWFLAKE_HOME(toml file path) is os.snowflakeHome/.snowflake +// and SNOWFLAKE_DEFAULT_CONNECTION_NAME(DSN) is 'default' +func loadConnectionConfig() (*Config, error) { + cfg := &Config{ + Params: make(map[string]*string), + Authenticator: AuthTypeSnowflake, // Default to snowflake + } + dsn := getConnectionDSN(os.Getenv(snowflakeConnectionName)) + snowflakeConfigDir, err := getTomlFilePath(os.Getenv(snowflakeHome)) + if err != nil { + return nil, err + } + tomlFilePath := path.Join(snowflakeConfigDir, "connections.toml") + err = validateFilePermission(tomlFilePath) + if err != nil { + return nil, err + } + tomlInfo := make(map[string]interface{}) + _, err = toml.DecodeFile(tomlFilePath, &tomlInfo) + if err != nil { + return nil, err + } + dsnMap, exist := tomlInfo[dsn] + if !exist { + return nil, &SnowflakeError{ + Number: ErrCodeFailedToFindDSNInToml, + Message: errMsgFailedToFindDSNInTomlFile, + } + } + connectionConfig, ok := dsnMap.(map[string]interface{}) + if !ok { + return nil, err + } + err = parseToml(cfg, connectionConfig) + if err != nil { + return nil, err + } + err = fillMissingConfigParameters(cfg) + if err != nil { + return nil, err + } + return cfg, err +} + +func parseToml(cfg *Config, connectionMap map[string]interface{}) error { + for key, value := range connectionMap { + if err := handleSingleParam(cfg, key, value); err != nil { + return err + } + } + if shouldReadTokenFromFile(cfg) { + v, err := readToken("") + if err != nil { + return err + } + cfg.Token = v + } + return nil +} + +func handleSingleParam(cfg *Config, key string, value interface{}) error { + var err error + var v, tokenPath string + switch strings.ToLower(key) { + case "user", "username": + cfg.User, err = parseString(value) + case "password": + cfg.Password, err = parseString(value) + case "host": + cfg.Host, err = parseString(value) + case "account": + cfg.Account, err = parseString(value) + case "warehouse": + cfg.Warehouse, err = parseString(value) + case "database": + cfg.Database, err = parseString(value) + case "schema": + cfg.Schema, err = parseString(value) + case "role": + cfg.Role, err = parseString(value) + case "region": + cfg.Region, err = parseString(value) + case "protocol": + cfg.Protocol, err = parseString(value) + case "passcode": + cfg.Passcode, err = parseString(value) + case "port": + cfg.Port, err = parseInt(value) + case "passcodeinpassword": + cfg.PasscodeInPassword, err = parseBool(value) + case "clienttimeout": + cfg.ClientTimeout, err = parseDuration(value) + case "jwtclienttimeout": + cfg.JWTClientTimeout, err = parseDuration(value) + case "logintimeout": + cfg.LoginTimeout, err = parseDuration(value) + case "requesttimeout": + cfg.RequestTimeout, err = parseDuration(value) + case "jwttimeout": + cfg.JWTExpireTimeout, err = parseDuration(value) + case "externalbrowsertimeout": + cfg.ExternalBrowserTimeout, err = parseDuration(value) + case "maxretrycount": + cfg.MaxRetryCount, err = parseInt(value) + case "application": + cfg.Application, err = parseString(value) + case "authenticator": + v, err = parseString(value) + if err = checkParsingError(err, key, value); err != nil { + return err + } + err = determineAuthenticatorType(cfg, v) + case "disableocspchecks": + cfg.DisableOCSPChecks, err = parseBool(value) + case "insecuremode": + logInsecureModeDeprecationInfo() + cfg.InsecureMode, err = parseBool(value) + case "ocspfailopen": + var vv ConfigBool + vv, err = parseConfigBool(value) + if err := checkParsingError(err, key, value); err != nil { + return err + } + cfg.OCSPFailOpen = OCSPFailOpenMode(vv) + case "token": + cfg.Token, err = parseString(value) + case "privatekey": + v, err = parseString(value) + if err = checkParsingError(err, key, value); err != nil { + return err + } + block, decodeErr := base64.URLEncoding.DecodeString(v) + if decodeErr != nil { + return &SnowflakeError{ + Number: ErrCodePrivateKeyParseError, + Message: "Base64 decode failed", + } + } + cfg.PrivateKey, err = parsePKCS8PrivateKey(block) + case "validatedefaultparameters": + cfg.ValidateDefaultParameters, err = parseConfigBool(value) + case "clientrequestmfatoken": + cfg.ClientRequestMfaToken, err = parseConfigBool(value) + case "clientstoretemporarycredential": + cfg.ClientStoreTemporaryCredential, err = parseConfigBool(value) + case "tracing": + cfg.Tracing, err = parseString(value) + case "tmpdirpath": + cfg.TmpDirPath, err = parseString(value) + case "disablequerycontextcache": + cfg.DisableQueryContextCache, err = parseBool(value) + case "includeretryreason": + cfg.IncludeRetryReason, err = parseConfigBool(value) + case "clientconfigfile": + cfg.ClientConfigFile, err = parseString(value) + case "disableconsolelogin": + cfg.DisableConsoleLogin, err = parseConfigBool(value) + case "disablesamlurlcheck": + cfg.DisableSamlURLCheck, err = parseConfigBool(value) + case "oauth_authorization_url": + cfg.OauthAuthorizationURL, err = parseString(value) + case "oauth_client_id": + cfg.OauthClientID, err = parseString(value) + case "oauth_client_secret": + cfg.OauthClientSecret, err = parseString(value) + case "oauth_token_request_url": + cfg.OauthTokenRequestURL, err = parseString(value) + case "oauth_redirect_uri": + cfg.OauthRedirectURI, err = parseString(value) + case "oauth_scope": + cfg.OauthScope, err = parseString(value) + + case "token_file_path": + tokenPath, err = parseString(value) + if err = checkParsingError(err, key, value); err != nil { + return err + } + v, err := readToken(tokenPath) + if err != nil { + return err + } + cfg.Token = v + default: + param, err := parseString(value) + if err = checkParsingError(err, key, value); err != nil { + return err + } + cfg.Params[urlDecodeIfNeeded(key)] = ¶m + } + return checkParsingError(err, key, value) +} + +func checkParsingError(err error, key string, value interface{}) error { + if err != nil { + err = &SnowflakeError{ + Number: ErrCodeTomlFileParsingFailed, + Message: errMsgFailedToParseTomlFile, + MessageArgs: []interface{}{key, value}, + } + return err + } + return nil +} + +func parseInt(i interface{}) (int, error) { + v, ok := i.(string) + if !ok { + num, ok := i.(int) + if !ok { + return 0, errors.New("failed to parse the value to integer") + } + return num, nil + } + return strconv.Atoi(v) +} + +func parseBool(i interface{}) (bool, error) { + v, ok := i.(string) + if !ok { + vv, ok := i.(bool) + if !ok { + return false, errors.New("failed to parse the value to boolean") + } + return vv, nil + } + return strconv.ParseBool(v) +} + +func parseConfigBool(i interface{}) (ConfigBool, error) { + vv, err := parseBool(i) + if err != nil { + return ConfigBoolFalse, err + } + if vv { + return ConfigBoolTrue, nil + } + return ConfigBoolFalse, nil +} + +func parseDuration(i interface{}) (time.Duration, error) { + v, ok := i.(string) + if !ok { + num, err := parseInt(i) + if err != nil { + return time.Duration(0), err + } + t := int64(num) + return time.Duration(t * int64(time.Second)), nil + } + return parseTimeout(v) +} + +func readToken(tokenPath string) (string, error) { + if tokenPath == "" { + tokenPath = defaultTokenPath + } + if !path.IsAbs(tokenPath) { + var err error + tokenPath, err = path.Abs(tokenPath) + if err != nil { + return "", err + } + } + err := validateFilePermission(tokenPath) + if err != nil { + return "", err + } + token, err := os.ReadFile(tokenPath) + if err != nil { + return "", err + } + return string(token), nil +} + +func parseString(i interface{}) (string, error) { + v, ok := i.(string) + if !ok { + return "", errors.New("failed to convert the value to string") + } + return v, nil +} + +func getTomlFilePath(filePath string) (string, error) { + if len(filePath) == 0 { + homeDir, err := os.UserHomeDir() + if err != nil { + return "", err + } + filePath = path.Join(homeDir, ".snowflake") + } + absDir, err := path.Abs(filePath) + if err != nil { + return "", err + } + return absDir, nil +} + +func getConnectionDSN(dsn string) string { + if len(dsn) != 0 { + return dsn + } + return "default" +} + +func validateFilePermission(filePath string) error { + if isWindows { + return nil + } + fileInfo, err := os.Stat(filePath) + if err != nil { + return err + } + if permission := fileInfo.Mode().Perm(); permission != os.FileMode(0600) { + return &SnowflakeError{ + Number: ErrCodeInvalidFilePermission, + Message: errMsgInvalidPermissionToTomlFile, + MessageArgs: []interface{}{permission}, + } + } + return nil +} + +func shouldReadTokenFromFile(cfg *Config) bool { + return cfg != nil && cfg.Authenticator == AuthTypeOAuth && len(cfg.Token) == 0 +} diff --git a/vendor/github.com/snowflakedb/gosnowflake/connection_util.go b/vendor/github.com/snowflakedb/gosnowflake/connection_util.go index 54390522..1f348823 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/connection_util.go +++ b/vendor/github.com/snowflakedb/gosnowflake/connection_util.go @@ -1,13 +1,13 @@ -// Copyright (c) 2021-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( "bytes" "context" + "errors" "fmt" "io" "os" + "runtime" "strconv" "strings" "time" @@ -65,6 +65,7 @@ func (sc *snowflakeConn) connectionTelemetry(cfg *Config) { sourceKey: telemetrySource, driverTypeKey: "Go", driverVersionKey: SnowflakeGoDriverVersion, + golangVersionKey: runtime.Version(), }, Timestamp: time.Now().UnixNano() / int64(time.Millisecond), } @@ -73,8 +74,12 @@ func (sc *snowflakeConn) connectionTelemetry(cfg *Config) { data.Message[k] = *v } paramsMutex.Unlock() - sc.telemetry.addLog(data) - sc.telemetry.sendBatch() + if err := sc.telemetry.addLog(data); err != nil { + logger.WithContext(sc.ctx).Warn(err) + } + if err := sc.telemetry.sendBatch(); err != nil { + logger.WithContext(sc.ctx).Warn(err) + } } // processFileTransfer creates a snowflakeFileTransferAgent object to process @@ -85,13 +90,22 @@ func (sc *snowflakeConn) processFileTransfer( query string, isInternal bool) ( *execResponse, error) { + options := &SnowflakeFileTransferOptions{ + RaisePutGetError: true, + } sfa := snowflakeFileTransferAgent{ - sc: sc, - data: &data.Data, - command: query, - options: new(SnowflakeFileTransferOptions), + ctx: ctx, + sc: sc, + data: &data.Data, + command: query, + options: options, + streamBuffer: new(bytes.Buffer), + } + fs, err := getFileStream(ctx) + if err != nil { + return nil, err } - if fs := getFileStream(ctx); fs != nil { + if fs != nil { sfa.sourceStream = fs if isInternal { sfa.data.AutoCompress = false @@ -106,22 +120,30 @@ func (sc *snowflakeConn) processFileTransfer( if err := sfa.execute(); err != nil { return nil, err } - data, err := sfa.result() + data, err = sfa.result() if err != nil { return nil, err } + if sfa.options.GetFileToStream { + if err := writeFileStream(ctx, sfa.streamBuffer); err != nil { + return nil, err + } + } return data, nil } -func getFileStream(ctx context.Context) *bytes.Buffer { +func getFileStream(ctx context.Context) (*bytes.Buffer, error) { s := ctx.Value(fileStreamFile) + if s == nil { + return nil, nil + } r, ok := s.(io.Reader) if !ok { - return nil + return nil, errors.New("incorrect io.Reader") } buf := new(bytes.Buffer) - buf.ReadFrom(r) - return buf + _, err := buf.ReadFrom(r) + return buf, err } func getFileTransferOptions(ctx context.Context) *SnowflakeFileTransferOptions { @@ -136,9 +158,22 @@ func getFileTransferOptions(ctx context.Context) *SnowflakeFileTransferOptions { return o } +func writeFileStream(ctx context.Context, streamBuf *bytes.Buffer) error { + s := ctx.Value(fileGetStream) + w, ok := s.(io.Writer) + if !ok { + return errors.New("expected an io.Writer") + } + _, err := streamBuf.WriteTo(w) + if err != nil { + return err + } + return nil +} + func (sc *snowflakeConn) populateSessionParameters(parameters []nameValueParameter) { // other session parameters (not all) - logger.WithContext(sc.ctx).Infof("params: %#v", parameters) + logger.WithContext(sc.ctx).Tracef("params: %#v", parameters) for _, param := range parameters { v := "" switch param.Value.(type) { @@ -159,7 +194,7 @@ func (sc *snowflakeConn) populateSessionParameters(parameters []nameValueParamet v = vv } } - logger.Debugf("parameter. name: %v, value: %v", param.Name, v) + logger.WithContext(sc.ctx).Debugf("parameter. name: %v, value: %v", param.Name, v) paramsMutex.Lock() sc.cfg.Params[strings.ToLower(param.Name)] = &v paramsMutex.Unlock() @@ -184,6 +219,15 @@ func isDescribeOnly(ctx context.Context) bool { return ok && d } +func isInternal(ctx context.Context) bool { + v := ctx.Value(internalQuery) + if v == nil { + return false + } + d, ok := v.(bool) + return ok && d +} + func setResultType(ctx context.Context, resType resultType) context.Context { return context.WithValue(ctx, snowflakeResultType, resType) } @@ -286,20 +330,55 @@ func populateChunkDownloader( } } -func (sc *snowflakeConn) setupOCSPPrivatelink(app string, host string) error { - ocspCacheServer := fmt.Sprintf("http://ocsp.%v/ocsp_response_cache.json", host) - logger.Debugf("OCSP Cache Server for Privatelink: %v\n", ocspCacheServer) +func setupOCSPEnvVars(ctx context.Context, host string) error { + host = strings.ToLower(host) + + // only set OCSP envs if not already set + if val, set := os.LookupEnv(cacheServerURLEnv); set { + logger.WithContext(ctx).Debugf("OCSP Cache Server already set by user for %v: %v\n", host, val) + return nil + } + if isPrivateLink(host) { + if err := setupOCSPPrivatelink(ctx, host); err != nil { + return err + } + } else if !strings.HasSuffix(host, defaultDomain) { + ocspCacheServer := fmt.Sprintf("http://ocsp.%v/%v", host, cacheFileBaseName) + logger.WithContext(ctx).Debugf("OCSP Cache Server for %v: %v\n", host, ocspCacheServer) + if err := os.Setenv(cacheServerURLEnv, ocspCacheServer); err != nil { + return err + } + } else { + if _, set := os.LookupEnv(cacheServerURLEnv); set { + os.Unsetenv(cacheServerURLEnv) + } + } + return nil +} + +func setupOCSPPrivatelink(ctx context.Context, host string) error { + ocspCacheServer := fmt.Sprintf("http://ocsp.%v/%v", host, cacheFileBaseName) + logger.WithContext(ctx).Debugf("OCSP Cache Server for Privatelink: %v\n", ocspCacheServer) if err := os.Setenv(cacheServerURLEnv, ocspCacheServer); err != nil { return err } ocspRetryHostTemplate := fmt.Sprintf("http://ocsp.%v/retry/", host) + "%v/%v" - logger.Debugf("OCSP Retry URL for Privatelink: %v\n", ocspRetryHostTemplate) + logger.WithContext(ctx).Debugf("OCSP Retry URL for Privatelink: %v\n", ocspRetryHostTemplate) if err := os.Setenv(ocspRetryURLEnv, ocspRetryHostTemplate); err != nil { return err } return nil } +/** + * We can only tell if private link is enabled for certain hosts when the hostname contains the subdomain + * 'privatelink.snowflakecomputing.' but we don't have a good way of telling if a private link connection is + * expected for internal stages for example. + */ +func isPrivateLink(host string) bool { + return strings.Contains(strings.ToLower(host), ".privatelink.snowflakecomputing.") +} + func isStatementContext(ctx context.Context) bool { v := ctx.Value(executionType) return v == executionTypeStatement diff --git a/vendor/github.com/snowflakedb/gosnowflake/connector.go b/vendor/github.com/snowflakedb/gosnowflake/connector.go index dbaf361d..3c0df1bc 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/connector.go +++ b/vendor/github.com/snowflakedb/gosnowflake/connector.go @@ -1,5 +1,3 @@ -// Copyright (c) 2020-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -20,7 +18,7 @@ type Connector struct { } // NewConnector creates a new connector with the given SnowflakeDriver and Config. -func NewConnector(driver InternalSnowflakeDriver, config Config) Connector { +func NewConnector(driver InternalSnowflakeDriver, config Config) driver.Connector { return Connector{driver, config} } diff --git a/vendor/github.com/snowflakedb/gosnowflake/converter.go b/vendor/github.com/snowflakedb/gosnowflake/converter.go index ee6aec7d..692e9747 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/converter.go +++ b/vendor/github.com/snowflakedb/gosnowflake/converter.go @@ -1,31 +1,38 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( + "bytes" "context" "database/sql" "database/sql/driver" "encoding/hex" + "encoding/json" + "errors" "fmt" "math" "math/big" "reflect" + "regexp" "strconv" "strings" "time" + "unicode/utf8" - "github.com/apache/arrow/go/v14/arrow" - "github.com/apache/arrow/go/v14/arrow/array" - "github.com/apache/arrow/go/v14/arrow/compute" - "github.com/apache/arrow/go/v14/arrow/decimal128" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow" + "github.com/apache/arrow-go/v18/arrow/array" + "github.com/apache/arrow-go/v18/arrow/compute" + "github.com/apache/arrow-go/v18/arrow/decimal128" + "github.com/apache/arrow-go/v18/arrow/memory" ) const format = "2006-01-02 15:04:05.999999999" +const numberDefaultPrecision = 38 +const jsonFormatStr = "json" type timezoneType int +var errNativeArrowWithoutProperContext = errors.New("structured types must be enabled to use with native arrow") + const ( // TimestampNTZType denotes a NTZ timezoneType for array binds TimestampNTZType timezoneType = iota @@ -39,6 +46,21 @@ const ( TimeType ) +type snowflakeArrowBatchesTimestampOption int + +const ( + // UseNanosecondTimestamp uses arrow.Timestamp in nanosecond precision, could cause ErrTooHighTimestampPrecision if arrow.Timestamp cannot fit original timestamp values. + UseNanosecondTimestamp snowflakeArrowBatchesTimestampOption = iota + // UseMicrosecondTimestamp uses arrow.Timestamp in microsecond precision + UseMicrosecondTimestamp + // UseMillisecondTimestamp uses arrow.Timestamp in millisecond precision + UseMillisecondTimestamp + // UseSecondTimestamp uses arrow.Timestamp in second precision + UseSecondTimestamp + // UseOriginalTimestamp uses original timestamp struct returned by Snowflake. It can be used in case arrow.Timestamp cannot fit original timestamp values. + UseOriginalTimestamp +) + type interfaceArrayBinding struct { hasTimezone bool tzType timezoneType @@ -56,8 +78,18 @@ func isInterfaceArrayBinding(t interface{}) bool { } } +func isJSONFormatType(tsmode snowflakeType) bool { + return tsmode == objectType || tsmode == arrayType || tsmode == sliceType +} + // goTypeToSnowflake translates Go data type to Snowflake data type. func goTypeToSnowflake(v driver.Value, tsmode snowflakeType) snowflakeType { + if isJSONFormatType(tsmode) { + return tsmode + } + if v == nil { + return nullType + } switch t := v.(type) { case int64, sql.NullInt64: return fixedType @@ -75,7 +107,7 @@ func goTypeToSnowflake(v driver.Value, tsmode snowflakeType) snowflakeType { return nullType // invalid byte array. won't take as BINARY } if len(t) != 1 { - return unSupportedType + return arrayType } if _, err := dataTypeMode(t); err != nil { return unSupportedType @@ -87,11 +119,28 @@ func goTypeToSnowflake(v driver.Value, tsmode snowflakeType) snowflakeType { if supportedArrayBind(&driver.NamedValue{Value: v}) { return sliceType } + // structured objects + if _, ok := v.(StructuredObjectWriter); ok { + return objectType + } else if _, ok := v.(reflect.Type); ok && tsmode == nilObjectType { + return nilObjectType + } + // structured arrays + if reflect.TypeOf(v).Kind() == reflect.Slice || (reflect.TypeOf(v).Kind() == reflect.Pointer && reflect.ValueOf(v).Elem().Kind() == reflect.Slice) { + return arrayType + } else if tsmode == nilArrayType { + return nilArrayType + } else if tsmode == nilMapType { + return nilMapType + } else if reflect.TypeOf(v).Kind() == reflect.Map || (reflect.TypeOf(v).Kind() == reflect.Pointer && reflect.ValueOf(v).Elem().Kind() == reflect.Map) { + return mapType + } return unSupportedType } // snowflakeTypeToGo translates Snowflake data type to Go data type. -func snowflakeTypeToGo(dbtype snowflakeType, scale int64) reflect.Type { +func snowflakeTypeToGo(ctx context.Context, dbtype snowflakeType, scale int64, fields []fieldMetadata) reflect.Type { + structuredTypesEnabled := structuredTypesEnabled(ctx) switch dbtype { case fixedType: if scale == 0 { @@ -100,7 +149,7 @@ func snowflakeTypeToGo(dbtype snowflakeType, scale int64) reflect.Type { return reflect.TypeOf(float64(0)) case realType: return reflect.TypeOf(float64(0)) - case textType, variantType, objectType, arrayType: + case textType, variantType: return reflect.TypeOf("") case dateType, timeType, timestampLtzType, timestampNtzType, timestampTzType: return reflect.TypeOf(time.Now()) @@ -108,106 +157,756 @@ func snowflakeTypeToGo(dbtype snowflakeType, scale int64) reflect.Type { return reflect.TypeOf([]byte{}) case booleanType: return reflect.TypeOf(true) + case objectType: + if len(fields) > 0 && structuredTypesEnabled { + return reflect.TypeOf(ObjectType{}) + } + return reflect.TypeOf("") + case arrayType: + if len(fields) == 0 || !structuredTypesEnabled { + return reflect.TypeOf("") + } + if len(fields) != 1 { + logger.WithContext(ctx).Warn("Unexpected fields number: " + strconv.Itoa(len(fields))) + return reflect.TypeOf("") + } + switch getSnowflakeType(fields[0].Type) { + case fixedType: + if fields[0].Scale == 0 && higherPrecisionEnabled(ctx) { + return reflect.TypeOf([]*big.Int{}) + } else if fields[0].Scale == 0 && !higherPrecisionEnabled(ctx) { + return reflect.TypeOf([]int64{}) + } else if fields[0].Scale != 0 && higherPrecisionEnabled(ctx) { + return reflect.TypeOf([]*big.Float{}) + } + return reflect.TypeOf([]float64{}) + case realType: + return reflect.TypeOf([]float64{}) + case textType: + return reflect.TypeOf([]string{}) + case dateType, timeType, timestampLtzType, timestampNtzType, timestampTzType: + return reflect.TypeOf([]time.Time{}) + case booleanType: + return reflect.TypeOf([]bool{}) + case binaryType: + return reflect.TypeOf([][]byte{}) + case objectType: + return reflect.TypeOf([]ObjectType{}) + } + return nil + case mapType: + if !structuredTypesEnabled { + return reflect.TypeOf("") + } + switch getSnowflakeType(fields[0].Type) { + case textType: + return snowflakeTypeToGoForMaps[string](ctx, fields[1]) + case fixedType: + return snowflakeTypeToGoForMaps[int64](ctx, fields[1]) + } + return reflect.TypeOf(map[any]any{}) + } + logger.WithContext(ctx).Errorf("unsupported dbtype is specified. %v", dbtype) + return reflect.TypeOf("") +} + +func snowflakeTypeToGoForMaps[K comparable](ctx context.Context, valueMetadata fieldMetadata) reflect.Type { + switch getSnowflakeType(valueMetadata.Type) { + case textType: + return reflect.TypeOf(map[K]string{}) + case fixedType: + if higherPrecisionEnabled(ctx) && valueMetadata.Scale == 0 { + return reflect.TypeOf(map[K]*big.Int{}) + } else if higherPrecisionEnabled(ctx) && valueMetadata.Scale != 0 { + return reflect.TypeOf(map[K]*big.Float{}) + } else if !higherPrecisionEnabled(ctx) && valueMetadata.Scale == 0 { + return reflect.TypeOf(map[K]int64{}) + } else { + return reflect.TypeOf(map[K]float64{}) + } + case realType: + return reflect.TypeOf(map[K]float64{}) + case booleanType: + return reflect.TypeOf(map[K]bool{}) + case binaryType: + return reflect.TypeOf(map[K][]byte{}) + case timeType, dateType, timestampTzType, timestampNtzType, timestampLtzType: + return reflect.TypeOf(map[K]time.Time{}) } - logger.Errorf("unsupported dbtype is specified. %v", dbtype) + logger.WithContext(ctx).Errorf("unsupported dbtype is specified for map value") return reflect.TypeOf("") } // valueToString converts arbitrary golang type to a string. This is mainly used in binding data with placeholders // in queries. -func valueToString(v driver.Value, tsmode snowflakeType) (*string, error) { +func valueToString(v driver.Value, tsmode snowflakeType, params map[string]*string) (bindingValue, error) { logger.Debugf("TYPE: %v, %v", reflect.TypeOf(v), reflect.ValueOf(v)) + isJSONFormat := isJSONFormatType(tsmode) if v == nil { - return nil, nil + if isJSONFormat { + return bindingValue{nil, jsonFormatStr, nil}, nil + } + return bindingValue{nil, "", nil}, nil + } + v1 := reflect.Indirect(reflect.ValueOf(v)) + + if valuer, ok := v.(driver.Valuer); ok { // check for driver.Valuer satisfaction and honor that first + if value, err := valuer.Value(); err == nil && value != nil { + // if the output value is a valid string, return that + if strVal, ok := value.(string); ok { + if isJSONFormat { + return bindingValue{&strVal, jsonFormatStr, nil}, nil + } + return bindingValue{&strVal, "", nil}, nil + } + } } - v1 := reflect.ValueOf(v) + switch v1.Kind() { case reflect.Bool: s := strconv.FormatBool(v1.Bool()) - return &s, nil + return bindingValue{&s, "", nil}, nil case reflect.Int64: s := strconv.FormatInt(v1.Int(), 10) - return &s, nil + return bindingValue{&s, "", nil}, nil case reflect.Float64: s := strconv.FormatFloat(v1.Float(), 'g', -1, 32) - return &s, nil + return bindingValue{&s, "", nil}, nil case reflect.String: s := v1.String() - return &s, nil - case reflect.Slice, reflect.Map: - if v1.IsNil() { - return nil, nil + if isJSONFormat { + return bindingValue{&s, jsonFormatStr, nil}, nil } - if bd, ok := v.([]byte); ok { - if tsmode == binaryType { - s := hex.EncodeToString(bd) - return &s, nil + return bindingValue{&s, "", nil}, nil + case reflect.Slice, reflect.Array: + return arrayToString(v, tsmode, params) + case reflect.Map: + return mapToString(v, tsmode, params) + case reflect.Struct: + return structValueToString(v, tsmode, params) + } + + return bindingValue{}, fmt.Errorf("unsupported type: %v", v1.Kind()) +} + +// isUUIDImplementer checks if a value is a UUID that satisfies RFC 4122 +func isUUIDImplementer(v reflect.Value) bool { + rt := v.Type() + + // Check if the type is an array of 16 bytes + if v.Kind() == reflect.Array && rt.Elem().Kind() == reflect.Uint8 && rt.Len() == 16 { + // Check if the type implements fmt.Stringer + vInt := v.Interface() + if stringer, ok := vInt.(fmt.Stringer); ok { + uuidStr := stringer.String() + + rfc4122Regex := `^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$` + matched, err := regexp.MatchString(rfc4122Regex, uuidStr) + if err != nil { + return false + } + + if matched { + // parse the UUID and ensure it is the same as the original string + u := ParseUUID(uuidStr) + return u.String() == uuidStr } } - // TODO: is this good enough? - s := v1.String() - return &s, nil - case reflect.Struct: - switch typedVal := v.(type) { - case time.Time: - return timeTypeValueToString(typedVal, tsmode) - case sql.NullTime: - if !typedVal.Valid { - return nil, nil + } + return false +} + +func arrayToString(v driver.Value, tsmode snowflakeType, params map[string]*string) (bindingValue, error) { + v1 := reflect.Indirect(reflect.ValueOf(v)) + if v1.Kind() == reflect.Slice && v1.IsNil() { + return bindingValue{nil, jsonFormatStr, nil}, nil + } + if bd, ok := v.([][]byte); ok && tsmode == binaryType { + schema := bindingSchema{ + Typ: "array", + Nullable: true, + Fields: []fieldMetadata{ + { + Type: "binary", + Nullable: true, + }, + }, + } + if len(bd) == 0 { + res := "[]" + return bindingValue{value: &res, format: jsonFormatStr, schema: &schema}, nil + } + s := "" + for _, b := range bd { + s += "\"" + hex.EncodeToString(b) + "\"," + } + s = "[" + s[:len(s)-1] + "]" + return bindingValue{&s, jsonFormatStr, &schema}, nil + } else if times, ok := v.([]time.Time); ok { + typ := driverTypeToSnowflake[tsmode] + sfFormat, err := dateTimeInputFormatByType(typ, params) + if err != nil { + return bindingValue{nil, "", nil}, err + } + goFormat, err := snowflakeFormatToGoFormat(sfFormat) + if err != nil { + return bindingValue{nil, "", nil}, err + } + arr := make([]string, len(times)) + for idx, t := range times { + arr[idx] = t.Format(goFormat) + } + res, err := json.Marshal(v) + if err != nil { + return bindingValue{nil, jsonFormatStr, &bindingSchema{ + Typ: "array", + Nullable: true, + Fields: []fieldMetadata{ + { + Type: typ, + Nullable: true, + }, + }, + }}, err + } + resString := string(res) + return bindingValue{&resString, jsonFormatStr, nil}, nil + } else if isArrayOfStructs(v) { + stringEntries := make([]string, v1.Len()) + sowcForSingleElement, err := buildSowcFromType(params, reflect.TypeOf(v).Elem()) + if err != nil { + return bindingValue{}, err + } + for i := 0; i < v1.Len(); i++ { + potentialSow := v1.Index(i) + if sow, ok := potentialSow.Interface().(StructuredObjectWriter); ok { + bv, err := structValueToString(sow, tsmode, params) + if err != nil { + return bindingValue{nil, jsonFormatStr, nil}, err + } + stringEntries[i] = *bv.value } - return timeTypeValueToString(typedVal.Time, tsmode) - case sql.NullBool: - if !typedVal.Valid { - return nil, nil + } + value := "[" + strings.Join(stringEntries, ",") + "]" + arraySchema := &bindingSchema{ + Typ: "array", + Nullable: true, + Fields: []fieldMetadata{ + { + Type: "OBJECT", + Nullable: true, + Fields: sowcForSingleElement.toFields(), + }, + }, + } + return bindingValue{&value, jsonFormatStr, arraySchema}, nil + } else if reflect.ValueOf(v).Len() == 0 { + value := "[]" + return bindingValue{&value, jsonFormatStr, nil}, nil + } else if barr, ok := v.([]byte); ok { + if tsmode == binaryType { + res := hex.EncodeToString(barr) + return bindingValue{&res, jsonFormatStr, nil}, nil + } + schemaForBytes := bindingSchema{ + Typ: "array", + Nullable: true, + Fields: []fieldMetadata{ + { + Type: "FIXED", + Nullable: true, + }, + }, + } + if len(barr) == 0 { + res := "[]" + return bindingValue{&res, jsonFormatStr, &schemaForBytes}, nil + } + res := "[" + for _, b := range barr { + res += fmt.Sprint(b) + "," + } + res = res[0:len(res)-1] + "]" + return bindingValue{&res, jsonFormatStr, &schemaForBytes}, nil + } else if isUUIDImplementer(v1) { // special case for UUIDs (snowflake type and other implementers) + stringer := v.(fmt.Stringer) // we don't need to validate if it's a fmt.Stringer because we already checked if it's a UUID type with a stringer + value := stringer.String() + return bindingValue{&value, "", nil}, nil + } else if isSliceOfSlices(v) { + return bindingValue{}, errors.New("array of arrays is not supported") + } + res, err := json.Marshal(v) + if err != nil { + return bindingValue{nil, jsonFormatStr, nil}, err + } + resString := string(res) + return bindingValue{&resString, jsonFormatStr, nil}, nil +} + +func mapToString(v driver.Value, tsmode snowflakeType, params map[string]*string) (bindingValue, error) { + var err error + valOf := reflect.Indirect(reflect.ValueOf(v)) + if valOf.IsNil() { + return bindingValue{nil, "", nil}, nil + } + typOf := reflect.TypeOf(v) + var jsonBytes []byte + if tsmode == binaryType { + m := make(map[string]*string, valOf.Len()) + iter := valOf.MapRange() + for iter.Next() { + val := iter.Value().Interface().([]byte) + if val != nil { + s := hex.EncodeToString(val) + m[stringOrIntToString(iter.Key())] = &s + } else { + m[stringOrIntToString(iter.Key())] = nil } - s := strconv.FormatBool(typedVal.Bool) - return &s, nil - case sql.NullInt64: - if !typedVal.Valid { - return nil, nil + } + jsonBytes, err = json.Marshal(m) + if err != nil { + return bindingValue{}, err + } + } else if typOf.Elem().AssignableTo(reflect.TypeOf(time.Time{})) || typOf.Elem().AssignableTo(reflect.TypeOf(sql.NullTime{})) { + m := make(map[string]*string, valOf.Len()) + iter := valOf.MapRange() + for iter.Next() { + val, valid, err := toNullableTime(iter.Value().Interface()) + if err != nil { + return bindingValue{}, err } - s := strconv.FormatInt(typedVal.Int64, 10) - return &s, nil - case sql.NullFloat64: - if !typedVal.Valid { - return nil, nil + if !valid { + m[stringOrIntToString(iter.Key())] = nil + } else { + typ := driverTypeToSnowflake[tsmode] + s, err := timeToString(val, typ, params) + if err != nil { + return bindingValue{}, err + } + m[stringOrIntToString(iter.Key())] = &s } - s := strconv.FormatFloat(typedVal.Float64, 'g', -1, 32) - return &s, nil - case sql.NullString: - if !typedVal.Valid { - return nil, nil + } + jsonBytes, err = json.Marshal(m) + if err != nil { + return bindingValue{}, err + } + } else if typOf.Elem().AssignableTo(reflect.TypeOf(sql.NullString{})) { + m := make(map[string]*string, valOf.Len()) + iter := valOf.MapRange() + for iter.Next() { + val := iter.Value().Interface().(sql.NullString) + if val.Valid { + m[stringOrIntToString(iter.Key())] = &val.String + } else { + m[stringOrIntToString(iter.Key())] = nil + } + } + jsonBytes, err = json.Marshal(m) + if err != nil { + return bindingValue{}, err + } + } else if typOf.Elem().AssignableTo(reflect.TypeOf(sql.NullByte{})) || typOf.Elem().AssignableTo(reflect.TypeOf(sql.NullInt16{})) || typOf.Elem().AssignableTo(reflect.TypeOf(sql.NullInt32{})) || typOf.Elem().AssignableTo(reflect.TypeOf(sql.NullInt64{})) { + m := make(map[string]*int64, valOf.Len()) + iter := valOf.MapRange() + for iter.Next() { + val, valid := toNullableInt64(iter.Value().Interface()) + if valid { + m[stringOrIntToString(iter.Key())] = &val + } else { + m[stringOrIntToString(iter.Key())] = nil + } + } + jsonBytes, err = json.Marshal(m) + if err != nil { + return bindingValue{}, err + } + } else if typOf.Elem().AssignableTo(reflect.TypeOf(sql.NullFloat64{})) { + m := make(map[string]*float64, valOf.Len()) + iter := valOf.MapRange() + for iter.Next() { + val := iter.Value().Interface().(sql.NullFloat64) + if val.Valid { + m[stringOrIntToString(iter.Key())] = &val.Float64 + } else { + m[stringOrIntToString(iter.Key())] = nil + } + } + jsonBytes, err = json.Marshal(m) + if err != nil { + return bindingValue{}, err + } + } else if typOf.Elem().AssignableTo(reflect.TypeOf(sql.NullBool{})) { + m := make(map[string]*bool, valOf.Len()) + iter := valOf.MapRange() + for iter.Next() { + val := iter.Value().Interface().(sql.NullBool) + if val.Valid { + m[stringOrIntToString(iter.Key())] = &val.Bool + } else { + m[stringOrIntToString(iter.Key())] = nil + } + } + jsonBytes, err = json.Marshal(m) + if err != nil { + return bindingValue{}, err + } + } else if typOf.Elem().AssignableTo(structuredObjectWriterType) { + m := make(map[string]map[string]any, valOf.Len()) + iter := valOf.MapRange() + var valueMetadata *fieldMetadata + for iter.Next() { + sowc := structuredObjectWriterContext{} + sowc.init(params) + if iter.Value().IsNil() { + m[stringOrIntToString(iter.Key())] = nil + continue + } + err = iter.Value().Interface().(StructuredObjectWriter).Write(&sowc) + if err != nil { + return bindingValue{}, nil + } + m[stringOrIntToString(iter.Key())] = sowc.values + if valueMetadata == nil { + valueMetadata = &fieldMetadata{ + Type: "OBJECT", + Nullable: true, + Fields: sowc.toFields(), + } + } + } + if valueMetadata == nil { + sowcFromValueType, err := buildSowcFromType(params, typOf.Elem()) + if err != nil { + return bindingValue{}, err + } + valueMetadata = &fieldMetadata{ + Type: "OBJECT", + Nullable: true, + Fields: sowcFromValueType.toFields(), + } + } + jsonBytes, err = json.Marshal(m) + if err != nil { + return bindingValue{}, err + } + jsonString := string(jsonBytes) + keyMetadata, err := goTypeToFieldMetadata(typOf.Key(), textType, params) + if err != nil { + return bindingValue{}, err + } + schema := bindingSchema{ + Typ: "MAP", + Fields: []fieldMetadata{keyMetadata, *valueMetadata}, + } + return bindingValue{&jsonString, jsonFormatStr, &schema}, nil + } else { + jsonBytes, err = json.Marshal(v) + if err != nil { + return bindingValue{}, err + } + } + jsonString := string(jsonBytes) + keyMetadata, err := goTypeToFieldMetadata(typOf.Key(), textType, params) + if err != nil { + return bindingValue{}, err + } + valueMetadata, err := goTypeToFieldMetadata(typOf.Elem(), tsmode, params) + if err != nil { + return bindingValue{}, err + } + schema := bindingSchema{ + Typ: "MAP", + Fields: []fieldMetadata{keyMetadata, valueMetadata}, + } + return bindingValue{&jsonString, jsonFormatStr, &schema}, nil +} + +func toNullableInt64(val any) (int64, bool) { + switch v := val.(type) { + case sql.NullByte: + return int64(v.Byte), v.Valid + case sql.NullInt16: + return int64(v.Int16), v.Valid + case sql.NullInt32: + return int64(v.Int32), v.Valid + case sql.NullInt64: + return v.Int64, v.Valid + } + // should never happen, the list above is exhaustive + panic("Only byte, int16, int32 or int64 are supported") +} + +func toNullableTime(val any) (time.Time, bool, error) { + switch v := val.(type) { + case time.Time: + return v, true, nil + case sql.NullTime: + return v.Time, v.Valid, nil + } + return time.Now(), false, fmt.Errorf("cannot use %T as time", val) +} + +func stringOrIntToString(v reflect.Value) string { + if v.CanInt() { + return strconv.Itoa(int(v.Int())) + } + return v.String() +} + +func goTypeToFieldMetadata(typ reflect.Type, tsmode snowflakeType, params map[string]*string) (fieldMetadata, error) { + if tsmode == binaryType { + return fieldMetadata{ + Type: "BINARY", + Nullable: true, + }, nil + } + if typ.Kind() == reflect.Pointer { + typ = typ.Elem() + } + switch typ.Kind() { + case reflect.String: + return fieldMetadata{ + Type: "TEXT", + Nullable: true, + }, nil + case reflect.Bool: + return fieldMetadata{ + Type: "BOOLEAN", + Nullable: true, + }, nil + case reflect.Int, reflect.Int8, reflect.Uint8, reflect.Int16, reflect.Int32, reflect.Int64: + return fieldMetadata{ + Type: "FIXED", + Precision: numberDefaultPrecision, + Nullable: true, + }, nil + case reflect.Float32, reflect.Float64: + return fieldMetadata{ + Type: "REAL", + Nullable: true, + }, nil + case reflect.Struct: + if typ.AssignableTo(reflect.TypeOf(sql.NullString{})) { + return fieldMetadata{ + Type: "TEXT", + Nullable: true, + }, nil + } else if typ.AssignableTo(reflect.TypeOf(sql.NullBool{})) { + return fieldMetadata{ + Type: "BOOLEAN", + Nullable: true, + }, nil + } else if typ.AssignableTo(reflect.TypeOf(sql.NullByte{})) || typ.AssignableTo(reflect.TypeOf(sql.NullInt16{})) || typ.AssignableTo(reflect.TypeOf(sql.NullInt32{})) || typ.AssignableTo(reflect.TypeOf(sql.NullInt64{})) { + return fieldMetadata{ + Type: "FIXED", + Precision: numberDefaultPrecision, + Nullable: true, + }, nil + } else if typ.AssignableTo(reflect.TypeOf(sql.NullFloat64{})) { + return fieldMetadata{ + Type: "REAL", + Nullable: true, + }, nil + } else if tsmode == dateType { + return fieldMetadata{ + Type: "DATE", + Nullable: true, + }, nil + } else if tsmode == timeType { + return fieldMetadata{ + Type: "TIME", + Nullable: true, + }, nil + } else if tsmode == timestampTzType { + return fieldMetadata{ + Type: "TIMESTAMP_TZ", + Nullable: true, + }, nil + } else if tsmode == timestampNtzType { + return fieldMetadata{ + Type: "TIMESTAMP_NTZ", + Nullable: true, + }, nil + } else if tsmode == timestampLtzType { + return fieldMetadata{ + Type: "TIMESTAMP_LTZ", + Nullable: true, + }, nil + } else if typ.AssignableTo(structuredObjectWriterType) || tsmode == nilObjectType { + sowc, err := buildSowcFromType(params, typ) + if err != nil { + return fieldMetadata{}, err + } + return fieldMetadata{ + Type: "OBJECT", + Nullable: true, + Fields: sowc.toFields(), + }, nil + } else if tsmode == nilArrayType || tsmode == nilMapType { + sowc, err := buildSowcFromType(params, typ) + if err != nil { + return fieldMetadata{}, err } - return &typedVal.String, nil + return fieldMetadata{ + Type: "OBJECT", + Nullable: true, + Fields: sowc.toFields(), + }, nil + } + case reflect.Slice: + metadata, err := goTypeToFieldMetadata(typ.Elem(), tsmode, params) + if err != nil { + return fieldMetadata{}, err + } + return fieldMetadata{ + Type: "ARRAY", + Nullable: true, + Fields: []fieldMetadata{metadata}, + }, nil + case reflect.Map: + keyMetadata, err := goTypeToFieldMetadata(typ.Key(), tsmode, params) + if err != nil { + return fieldMetadata{}, err + } + valueMetadata, err := goTypeToFieldMetadata(typ.Elem(), tsmode, params) + if err != nil { + return fieldMetadata{}, err + } + return fieldMetadata{ + Type: "MAP", + Nullable: true, + Fields: []fieldMetadata{keyMetadata, valueMetadata}, + }, nil + } + return fieldMetadata{}, fmt.Errorf("cannot build field metadata for %v (mode %v)", typ.Kind().String(), tsmode.String()) +} + +func isSliceOfSlices(v any) bool { + typ := reflect.TypeOf(v) + return typ.Kind() == reflect.Slice && typ.Elem().Kind() == reflect.Slice +} + +func isArrayOfStructs(v any) bool { + return reflect.TypeOf(v).Elem().Kind() == reflect.Struct || (reflect.TypeOf(v).Elem().Kind() == reflect.Pointer && reflect.TypeOf(v).Elem().Elem().Kind() == reflect.Struct) +} + +func structValueToString(v driver.Value, tsmode snowflakeType, params map[string]*string) (bindingValue, error) { + switch typedVal := v.(type) { + case time.Time: + return timeTypeValueToString(typedVal, tsmode) + case sql.NullTime: + if !typedVal.Valid { + return bindingValue{nil, "", nil}, nil + } + return timeTypeValueToString(typedVal.Time, tsmode) + case sql.NullBool: + if !typedVal.Valid { + return bindingValue{nil, "", nil}, nil + } + s := strconv.FormatBool(typedVal.Bool) + return bindingValue{&s, "", nil}, nil + case sql.NullInt64: + if !typedVal.Valid { + return bindingValue{nil, "", nil}, nil + } + s := strconv.FormatInt(typedVal.Int64, 10) + return bindingValue{&s, "", nil}, nil + case sql.NullFloat64: + if !typedVal.Valid { + return bindingValue{nil, "", nil}, nil + } + s := strconv.FormatFloat(typedVal.Float64, 'g', -1, 32) + return bindingValue{&s, "", nil}, nil + case sql.NullString: + fmt := "" + if isJSONFormatType(tsmode) { + fmt = jsonFormatStr + } + if !typedVal.Valid { + return bindingValue{nil, fmt, nil}, nil + } + return bindingValue{&typedVal.String, fmt, nil}, nil + } + if sow, ok := v.(StructuredObjectWriter); ok { + sowc := &structuredObjectWriterContext{} + sowc.init(params) + err := sow.Write(sowc) + if err != nil { + return bindingValue{nil, "", nil}, err + } + jsonBytes, err := json.Marshal(sowc.values) + if err != nil { + return bindingValue{nil, "", nil}, err } + jsonString := string(jsonBytes) + schema := bindingSchema{ + Typ: "object", + Nullable: true, + Fields: sowc.toFields(), + } + return bindingValue{&jsonString, jsonFormatStr, &schema}, nil + } else if typ, ok := v.(reflect.Type); ok && tsmode == nilArrayType { + metadata, err := goTypeToFieldMetadata(typ, tsmode, params) + if err != nil { + return bindingValue{}, err + } + schema := bindingSchema{ + Typ: "ARRAY", + Nullable: true, + Fields: []fieldMetadata{ + metadata, + }, + } + return bindingValue{nil, jsonFormatStr, &schema}, nil + } else if types, ok := v.(NilMapTypes); ok && tsmode == nilMapType { + keyMetadata, err := goTypeToFieldMetadata(types.Key, tsmode, params) + if err != nil { + return bindingValue{}, err + } + valueMetadata, err := goTypeToFieldMetadata(types.Value, tsmode, params) + if err != nil { + return bindingValue{}, err + } + schema := bindingSchema{ + Typ: "map", + Nullable: true, + Fields: []fieldMetadata{keyMetadata, valueMetadata}, + } + return bindingValue{nil, jsonFormatStr, &schema}, nil + } else if typ, ok := v.(reflect.Type); ok && tsmode == nilObjectType { + metadata, err := goTypeToFieldMetadata(typ, tsmode, params) + if err != nil { + return bindingValue{}, err + } + schema := bindingSchema{ + Typ: "object", + Nullable: true, + Fields: metadata.Fields, + } + return bindingValue{nil, jsonFormatStr, &schema}, nil } - return nil, fmt.Errorf("unsupported type: %v", v1.Kind()) + return bindingValue{}, fmt.Errorf("unknown binding for type %T and mode %v", v, tsmode) } -func timeTypeValueToString(tm time.Time, tsmode snowflakeType) (*string, error) { +func timeTypeValueToString(tm time.Time, tsmode snowflakeType) (bindingValue, error) { switch tsmode { case dateType: _, offset := tm.Zone() tm = tm.Add(time.Second * time.Duration(offset)) s := strconv.FormatInt(tm.Unix()*1000, 10) - return &s, nil + return bindingValue{&s, "", nil}, nil case timeType: s := fmt.Sprintf("%d", (tm.Hour()*3600+tm.Minute()*60+tm.Second())*1e9+tm.Nanosecond()) - return &s, nil - case timestampNtzType, timestampLtzType: - unixTime, _ := new(big.Int).SetString(fmt.Sprintf("%d", tm.Unix()), 10) - m, _ := new(big.Int).SetString(strconv.FormatInt(1e9, 10), 10) - unixTime.Mul(unixTime, m) - tmNanos, _ := new(big.Int).SetString(fmt.Sprintf("%d", tm.Nanosecond()), 10) - s := unixTime.Add(unixTime, tmNanos).String() - return &s, nil - case timestampTzType: - _, offset := tm.Zone() - s := fmt.Sprintf("%v %v", tm.UnixNano(), offset/60+1440) - return &s, nil + return bindingValue{&s, "", nil}, nil + case timestampNtzType, timestampLtzType, timestampTzType: + s, err := convertTimeToTimeStamp(tm, tsmode) + if err != nil { + return bindingValue{nil, "", nil}, err + } + return bindingValue{&s, "", nil}, nil } - return nil, fmt.Errorf("unsupported time type: %v", tsmode) + return bindingValue{nil, "", nil}, fmt.Errorf("unsupported time type: %v", tsmode) } // extractTimestamp extracts the internal timestamp data to epoch time in seconds and milliseconds @@ -243,20 +942,33 @@ func extractTimestamp(srcValue *string) (sec int64, nsec int64, err error) { // stringToValue converts a pointer of string data to an arbitrary golang variable // This is mainly used in fetching data. -func stringToValue( - dest *driver.Value, - srcColumnMeta execResponseRowType, - srcValue *string, - loc *time.Location, -) error { +func stringToValue(ctx context.Context, dest *driver.Value, srcColumnMeta execResponseRowType, srcValue *string, loc *time.Location, params map[string]*string) error { if srcValue == nil { logger.Debugf("snowflake data type: %v, raw value: nil", srcColumnMeta.Type) *dest = nil return nil } + structuredTypesEnabled := structuredTypesEnabled(ctx) logger.Debugf("snowflake data type: %v, raw value: %v", srcColumnMeta.Type, *srcValue) switch srcColumnMeta.Type { - case "text", "fixed", "real", "variant", "object": + case "object": + if len(srcColumnMeta.Fields) == 0 || !structuredTypesEnabled { + // semistructured type without schema + *dest = *srcValue + return nil + } + m := make(map[string]any) + decoder := decoderWithNumbersAsStrings(srcValue) + if err := decoder.Decode(&m); err != nil { + return err + } + v, err := buildStructuredTypeRecursive(ctx, m, srcColumnMeta.Fields, params) + if err != nil { + return err + } + *dest = v + return nil + case "text", "fixed", "real", "variant": *dest = *srcValue return nil case "date": @@ -329,29 +1041,383 @@ func stringToValue( } *dest = b return nil + case "array": + if len(srcColumnMeta.Fields) == 0 || !structuredTypesEnabled { + *dest = *srcValue + return nil + } + if len(srcColumnMeta.Fields) > 1 { + return errors.New("got more than one field for array") + } + var arr []any + decoder := decoderWithNumbersAsStrings(srcValue) + if err := decoder.Decode(&arr); err != nil { + return err + } + v, err := buildStructuredArray(ctx, srcColumnMeta.Fields[0], arr, params) + if err != nil { + return err + } + *dest = v + return nil + case "map": + var err error + *dest, err = jsonToMap(ctx, srcColumnMeta.Fields[0], srcColumnMeta.Fields[1], *srcValue, params) + return err } *dest = *srcValue return nil } -var decimalShift = new(big.Int).Exp(big.NewInt(2), big.NewInt(64), nil) - -func intToBigFloat(val int64, scale int64) *big.Float { - f := new(big.Float).SetInt64(val) - s := new(big.Float).SetInt(new(big.Int).Exp(big.NewInt(10), big.NewInt(scale), nil)) - return new(big.Float).Quo(f, s) -} - -func decimalToBigInt(num decimal128.Num) *big.Int { - high := new(big.Int).SetInt64(num.HighBits()) - low := new(big.Int).SetUint64(num.LowBits()) - return new(big.Int).Add(new(big.Int).Mul(high, decimalShift), low) +func jsonToMap(ctx context.Context, keyMetadata, valueMetadata fieldMetadata, srcValue string, params map[string]*string) (snowflakeValue, error) { + structuredTypesEnabled := structuredTypesEnabled(ctx) + if !structuredTypesEnabled { + return srcValue, nil + } + switch keyMetadata.Type { + case "text": + var m map[string]any + decoder := decoderWithNumbersAsStrings(&srcValue) + err := decoder.Decode(&m) + if err != nil { + return nil, err + } + // returning snowflakeValue of complex types does not work with generics + if valueMetadata.Type == "object" { + res := make(map[string]*structuredType) + for k, v := range m { + if v == nil || reflect.ValueOf(v).IsNil() { + res[k] = nil + } else { + res[k] = buildStructuredTypeFromMap(v.(map[string]any), valueMetadata.Fields, params) + } + } + return res, nil + } + return jsonToMapWithKeyType[string](ctx, valueMetadata, m, params) + case "fixed": + var m map[int64]any + decoder := decoderWithNumbersAsStrings(&srcValue) + err := decoder.Decode(&m) + if err != nil { + return nil, err + } + if valueMetadata.Type == "object" { + res := make(map[int64]*structuredType) + for k, v := range m { + res[k] = buildStructuredTypeFromMap(v.(map[string]any), valueMetadata.Fields, params) + } + return res, nil + } + return jsonToMapWithKeyType[int64](ctx, valueMetadata, m, params) + default: + return nil, fmt.Errorf("unsupported map key type: %v", keyMetadata.Type) + } } -func decimalToBigFloat(num decimal128.Num, scale int64) *big.Float { - f := new(big.Float).SetInt(decimalToBigInt(num)) - s := new(big.Float).SetInt(new(big.Int).Exp(big.NewInt(10), big.NewInt(scale), nil)) - return new(big.Float).Quo(f, s) +func jsonToMapWithKeyType[K comparable](ctx context.Context, valueMetadata fieldMetadata, m map[K]any, params map[string]*string) (snowflakeValue, error) { + mapValuesNullableEnabled := mapValuesNullableEnabled(ctx) + switch valueMetadata.Type { + case "text": + return buildMapValues[K, sql.NullString, string](mapValuesNullableEnabled, m, func(v any) (string, error) { + return v.(string), nil + }, func(v any) (sql.NullString, error) { + return sql.NullString{Valid: v != nil, String: ifNotNullOrDefault(v, "")}, nil + }, false) + case "boolean": + return buildMapValues[K, sql.NullBool, bool](mapValuesNullableEnabled, m, func(v any) (bool, error) { + return v.(bool), nil + }, func(v any) (sql.NullBool, error) { + return sql.NullBool{Valid: v != nil, Bool: ifNotNullOrDefault(v, false)}, nil + }, false) + case "fixed": + if valueMetadata.Scale == 0 { + return buildMapValues[K, sql.NullInt64, int64](mapValuesNullableEnabled, m, func(v any) (int64, error) { + return strconv.ParseInt(string(v.(json.Number)), 10, 64) + }, func(v any) (sql.NullInt64, error) { + if v != nil { + i64, err := strconv.ParseInt(string(v.(json.Number)), 10, 64) + if err != nil { + return sql.NullInt64{}, err + } + return sql.NullInt64{Valid: true, Int64: i64}, nil + } + return sql.NullInt64{Valid: false}, nil + }, false) + } + return buildMapValues[K, sql.NullFloat64, float64](mapValuesNullableEnabled, m, func(v any) (float64, error) { + return strconv.ParseFloat(string(v.(json.Number)), 64) + }, func(v any) (sql.NullFloat64, error) { + if v != nil { + f64, err := strconv.ParseFloat(string(v.(json.Number)), 64) + if err != nil { + return sql.NullFloat64{}, err + } + return sql.NullFloat64{Valid: true, Float64: f64}, nil + } + return sql.NullFloat64{Valid: false}, nil + }, false) + case "real": + return buildMapValues[K, sql.NullFloat64, float64](mapValuesNullableEnabled, m, func(v any) (float64, error) { + return strconv.ParseFloat(string(v.(json.Number)), 64) + }, func(v any) (sql.NullFloat64, error) { + if v != nil { + f64, err := strconv.ParseFloat(string(v.(json.Number)), 64) + if err != nil { + return sql.NullFloat64{}, err + } + return sql.NullFloat64{Valid: true, Float64: f64}, nil + } + return sql.NullFloat64{Valid: false}, nil + }, false) + case "binary": + return buildMapValues[K, []byte, []byte](mapValuesNullableEnabled, m, func(v any) ([]byte, error) { + if v == nil { + return nil, nil + } + return hex.DecodeString(v.(string)) + }, func(v any) ([]byte, error) { + if v == nil { + return nil, nil + } + return hex.DecodeString(v.(string)) + }, true) + case "date", "time", "timestamp_tz", "timestamp_ltz", "timestamp_ntz": + return buildMapValues[K, sql.NullTime, time.Time](mapValuesNullableEnabled, m, func(v any) (time.Time, error) { + sfFormat, err := dateTimeOutputFormatByType(valueMetadata.Type, params) + if err != nil { + return time.Time{}, err + } + goFormat, err := snowflakeFormatToGoFormat(sfFormat) + if err != nil { + return time.Time{}, err + } + return time.Parse(goFormat, v.(string)) + }, func(v any) (sql.NullTime, error) { + if v == nil { + return sql.NullTime{Valid: false}, nil + } + sfFormat, err := dateTimeOutputFormatByType(valueMetadata.Type, params) + if err != nil { + return sql.NullTime{}, err + } + goFormat, err := snowflakeFormatToGoFormat(sfFormat) + if err != nil { + return sql.NullTime{}, err + } + time, err := time.Parse(goFormat, v.(string)) + if err != nil { + return sql.NullTime{}, err + } + return sql.NullTime{Valid: true, Time: time}, nil + }, false) + case "array": + arrayMetadata := valueMetadata.Fields[0] + switch arrayMetadata.Type { + case "text": + return buildArrayFromMap[K, string](ctx, arrayMetadata, m, params) + case "fixed": + if arrayMetadata.Scale == 0 { + return buildArrayFromMap[K, int64](ctx, arrayMetadata, m, params) + } + return buildArrayFromMap[K, float64](ctx, arrayMetadata, m, params) + case "real": + return buildArrayFromMap[K, float64](ctx, arrayMetadata, m, params) + case "binary": + return buildArrayFromMap[K, []byte](ctx, arrayMetadata, m, params) + case "boolean": + return buildArrayFromMap[K, bool](ctx, arrayMetadata, m, params) + case "date", "time", "timestamp_ltz", "timestamp_tz", "timestamp_ntz": + return buildArrayFromMap[K, time.Time](ctx, arrayMetadata, m, params) + } + } + return nil, fmt.Errorf("unsupported map value type: %v", valueMetadata.Type) +} + +func buildArrayFromMap[K comparable, V any](ctx context.Context, valueMetadata fieldMetadata, m map[K]any, params map[string]*string) (snowflakeValue, error) { + res := make(map[K][]V) + for k, v := range m { + if v == nil { + res[k] = nil + } else { + structuredArray, err := buildStructuredArray(ctx, valueMetadata, v.([]any), params) + if err != nil { + return nil, err + } + res[k] = structuredArray.([]V) + } + } + return res, nil +} + +func buildStructuredTypeFromMap(values map[string]any, fieldMetadata []fieldMetadata, params map[string]*string) *structuredType { + return &structuredType{ + values: values, + params: params, + fieldMetadata: fieldMetadata, + } +} + +func ifNotNullOrDefault[T any](t any, def T) T { + if t == nil { + return def + } + return t.(T) +} + +func buildMapValues[K comparable, Vnullable any, VnotNullable any](mapValuesNullableEnabled bool, m map[K]any, buildNotNullable func(v any) (VnotNullable, error), buildNullable func(v any) (Vnullable, error), nullableByDefault bool) (snowflakeValue, error) { + var err error + if mapValuesNullableEnabled { + result := make(map[K]Vnullable, len(m)) + for k, v := range m { + if result[k], err = buildNullable(v); err != nil { + return nil, err + } + } + return result, nil + } + result := make(map[K]VnotNullable, len(m)) + for k, v := range m { + if v == nil && !nullableByDefault { + return nil, errNullValueInMap() + } + if result[k], err = buildNotNullable(v); err != nil { + return nil, err + } + } + return result, nil +} + +func buildStructuredArray(ctx context.Context, fieldMetadata fieldMetadata, srcValue []any, params map[string]*string) (any, error) { + switch fieldMetadata.Type { + case "text": + return copyArrayAndConvert[string](srcValue, func(input any) (string, error) { + return input.(string), nil + }) + case "fixed": + if fieldMetadata.Scale == 0 { + return copyArrayAndConvert[int64](srcValue, func(input any) (int64, error) { + return strconv.ParseInt(string(input.(json.Number)), 10, 64) + }) + } + return copyArrayAndConvert[float64](srcValue, func(input any) (float64, error) { + return strconv.ParseFloat(string(input.(json.Number)), 64) + }) + case "real": + return copyArrayAndConvert[float64](srcValue, func(input any) (float64, error) { + return strconv.ParseFloat(string(input.(json.Number)), 64) + }) + case "time", "date", "timestamp_ltz", "timestamp_ntz", "timestamp_tz": + return copyArrayAndConvert[time.Time](srcValue, func(input any) (time.Time, error) { + sfFormat, err := dateTimeOutputFormatByType(fieldMetadata.Type, params) + if err != nil { + return time.Time{}, err + } + goFormat, err := snowflakeFormatToGoFormat(sfFormat) + if err != nil { + return time.Time{}, err + } + return time.Parse(goFormat, input.(string)) + }) + case "boolean": + return copyArrayAndConvert[bool](srcValue, func(input any) (bool, error) { + return input.(bool), nil + }) + case "binary": + return copyArrayAndConvert[[]byte](srcValue, func(input any) ([]byte, error) { + return hex.DecodeString(input.(string)) + }) + case "object": + return copyArrayAndConvert[*structuredType](srcValue, func(input any) (*structuredType, error) { + return buildStructuredTypeRecursive(ctx, input.(map[string]any), fieldMetadata.Fields, params) + }) + case "array": + switch fieldMetadata.Fields[0].Type { + case "text": + return buildStructuredArrayRecursive[string](ctx, fieldMetadata.Fields[0], srcValue, params) + case "fixed": + if fieldMetadata.Fields[0].Scale == 0 { + return buildStructuredArrayRecursive[int64](ctx, fieldMetadata.Fields[0], srcValue, params) + } + return buildStructuredArrayRecursive[float64](ctx, fieldMetadata.Fields[0], srcValue, params) + case "real": + return buildStructuredArrayRecursive[float64](ctx, fieldMetadata.Fields[0], srcValue, params) + case "boolean": + return buildStructuredArrayRecursive[bool](ctx, fieldMetadata.Fields[0], srcValue, params) + case "binary": + return buildStructuredArrayRecursive[[]byte](ctx, fieldMetadata.Fields[0], srcValue, params) + case "date", "time", "timestamp_ltz", "timestamp_ntz", "timestamp_tz": + return buildStructuredArrayRecursive[time.Time](ctx, fieldMetadata.Fields[0], srcValue, params) + } + } + return srcValue, nil +} + +func buildStructuredArrayRecursive[T any](ctx context.Context, fieldMetadata fieldMetadata, srcValue []any, params map[string]*string) ([][]T, error) { + arr := make([][]T, len(srcValue)) + for i, v := range srcValue { + structuredArray, err := buildStructuredArray(ctx, fieldMetadata, v.([]any), params) + if err != nil { + return nil, err + } + arr[i] = structuredArray.([]T) + } + return arr, nil +} + +func copyArrayAndConvert[T any](input []any, convertFunc func(input any) (T, error)) ([]T, error) { + var err error + output := make([]T, len(input)) + for i, s := range input { + if output[i], err = convertFunc(s); err != nil { + return nil, err + } + } + return output, nil +} + +func buildStructuredTypeRecursive(ctx context.Context, m map[string]any, fields []fieldMetadata, params map[string]*string) (*structuredType, error) { + var err error + for _, fm := range fields { + if fm.Type == "array" && m[fm.Name] != nil { + if m[fm.Name], err = buildStructuredArray(ctx, fm.Fields[0], m[fm.Name].([]any), params); err != nil { + return nil, err + } + } else if fm.Type == "map" && m[fm.Name] != nil { + if m[fm.Name], err = jsonToMapWithKeyType(ctx, fm.Fields[1], m[fm.Name].(map[string]any), params); err != nil { + return nil, err + } + } else if fm.Type == "object" && m[fm.Name] != nil { + if m[fm.Name], err = buildStructuredTypeRecursive(ctx, m[fm.Name].(map[string]any), fm.Fields, params); err != nil { + return nil, err + } + } + } + return &structuredType{ + values: m, + fieldMetadata: fields, + params: params, + }, nil +} + +var decimalShift = new(big.Int).Exp(big.NewInt(2), big.NewInt(64), nil) + +func intToBigFloat(val int64, scale int64) *big.Float { + f := new(big.Float).SetInt64(val) + s := new(big.Float).SetInt(new(big.Int).Exp(big.NewInt(10), big.NewInt(scale), nil)) + return new(big.Float).Quo(f, s) +} + +func decimalToBigInt(num decimal128.Num) *big.Int { + high := new(big.Int).SetInt64(num.HighBits()) + low := new(big.Int).SetUint64(num.LowBits()) + return new(big.Int).Add(new(big.Int).Mul(high, decimalShift), low) +} + +func decimalToBigFloat(num decimal128.Num, scale int64) *big.Float { + f := new(big.Float).SetInt(decimalToBigInt(num)) + s := new(big.Float).SetInt(new(big.Int).Exp(big.NewInt(10), big.NewInt(scale), nil)) + return new(big.Float).Quo(f, s) } // ArrowSnowflakeTimestampToTime converts original timestamp returned by Snowflake to time.Time @@ -429,190 +1495,959 @@ func extractFraction(value int64, scale int) int64 { // Arrow Interface (Column) converter. This is called when Arrow chunks are // downloaded to convert to the corresponding row type. -func arrowToValue( +func arrowToValues( + ctx context.Context, destcol []snowflakeValue, srcColumnMeta execResponseRowType, srcValue arrow.Array, loc *time.Location, - higherPrecision bool) error { + higherPrecision bool, + params map[string]*string) error { - var err error if len(destcol) != srcValue.Len() { - err = fmt.Errorf("array interface length mismatch") + return fmt.Errorf("array interface length mismatch") } logger.Debugf("snowflake data type: %v, arrow data type: %v", srcColumnMeta.Type, srcValue.DataType()) + var err error snowflakeType := getSnowflakeType(srcColumnMeta.Type) + for i := range destcol { + if destcol[i], err = arrowToValue(ctx, i, srcColumnMeta.toFieldMetadata(), srcValue, loc, higherPrecision, params, snowflakeType); err != nil { + return err + } + } + return nil +} + +func arrowToValue(ctx context.Context, rowIdx int, srcColumnMeta fieldMetadata, srcValue arrow.Array, loc *time.Location, higherPrecision bool, params map[string]*string, snowflakeType snowflakeType) (snowflakeValue, error) { + structuredTypesEnabled := structuredTypesEnabled(ctx) switch snowflakeType { case fixedType: // Snowflake data types that are fixed-point numbers will fall into this category // e.g. NUMBER, DECIMAL/NUMERIC, INT/INTEGER - switch data := srcValue.(type) { + switch numericValue := srcValue.(type) { case *array.Decimal128: - for i, num := range data.Values() { - if !srcValue.IsNull(i) { - if srcColumnMeta.Scale == 0 { - if higherPrecision { - destcol[i] = num.BigInt() - } else { - destcol[i] = num.ToString(0) + return arrowDecimal128ToValue(numericValue, rowIdx, higherPrecision, int(srcColumnMeta.Scale)), nil + case *array.Int64: + return arrowInt64ToValue(numericValue, rowIdx, higherPrecision, int(srcColumnMeta.Scale)), nil + case *array.Int32: + return arrowInt32ToValue(numericValue, rowIdx, higherPrecision, int(srcColumnMeta.Scale)), nil + case *array.Int16: + return arrowInt16ToValue(numericValue, rowIdx, higherPrecision, int(srcColumnMeta.Scale)), nil + case *array.Int8: + return arrowInt8ToValue(numericValue, rowIdx, higherPrecision, int(srcColumnMeta.Scale)), nil + } + return nil, fmt.Errorf("unsupported data type") + case booleanType: + return arrowBoolToValue(srcValue.(*array.Boolean), rowIdx), nil + case realType: + // Snowflake data types that are floating-point numbers will fall in this category + // e.g. FLOAT/REAL/DOUBLE + return arrowRealToValue(srcValue.(*array.Float64), rowIdx), nil + case textType, variantType: + strings := srcValue.(*array.String) + if !srcValue.IsNull(rowIdx) { + return strings.Value(rowIdx), nil + } + return nil, nil + case arrayType: + if len(srcColumnMeta.Fields) == 0 || !structuredTypesEnabled { + // semistructured type without schema + strings := srcValue.(*array.String) + if !srcValue.IsNull(rowIdx) { + return strings.Value(rowIdx), nil + } + return nil, nil + } + strings, ok := srcValue.(*array.String) + if ok { + // structured array as json + if !srcValue.IsNull(rowIdx) { + val := strings.Value(rowIdx) + var arr []any + decoder := decoderWithNumbersAsStrings(&val) + if err := decoder.Decode(&arr); err != nil { + return nil, err + } + return buildStructuredArray(ctx, srcColumnMeta.Fields[0], arr, params) + } + return nil, nil + } + if !structuredTypesEnabled { + return nil, errNativeArrowWithoutProperContext + } + return buildListFromNativeArrow(ctx, rowIdx, srcColumnMeta.Fields[0], srcValue, loc, higherPrecision, params) + case objectType: + if len(srcColumnMeta.Fields) == 0 || !structuredTypesEnabled { + // semistructured type without schema + strings := srcValue.(*array.String) + if !srcValue.IsNull(rowIdx) { + return strings.Value(rowIdx), nil + } + return nil, nil + } + strings, ok := srcValue.(*array.String) + if ok { + // structured objects as json + if !srcValue.IsNull(rowIdx) { + m := make(map[string]any) + value := strings.Value(rowIdx) + decoder := decoderWithNumbersAsStrings(&value) + if err := decoder.Decode(&m); err != nil { + return nil, err + } + return buildStructuredTypeRecursive(ctx, m, srcColumnMeta.Fields, params) + } + return nil, nil + } + // structured objects as native arrow + if !structuredTypesEnabled { + return nil, errNativeArrowWithoutProperContext + } + if srcValue.IsNull(rowIdx) { + return nil, nil + } + structs := srcValue.(*array.Struct) + return arrowToStructuredType(ctx, structs, srcColumnMeta.Fields, loc, rowIdx, higherPrecision, params) + case mapType: + if srcValue.IsNull(rowIdx) { + return nil, nil + } + strings, ok := srcValue.(*array.String) + if ok { + // structured map as json + if !srcValue.IsNull(rowIdx) { + return jsonToMap(ctx, srcColumnMeta.Fields[0], srcColumnMeta.Fields[1], strings.Value(rowIdx), params) + } + } else { + // structured map as native arrow + if !structuredTypesEnabled { + return nil, errNativeArrowWithoutProperContext + } + return buildMapFromNativeArrow(ctx, rowIdx, srcColumnMeta.Fields[0], srcColumnMeta.Fields[1], srcValue, loc, higherPrecision, params) + } + case binaryType: + return arrowBinaryToValue(srcValue.(*array.Binary), rowIdx), nil + case dateType: + return arrowDateToValue(srcValue.(*array.Date32), rowIdx), nil + case timeType: + return arrowTimeToValue(srcValue, rowIdx, int(srcColumnMeta.Scale)), nil + case timestampNtzType, timestampLtzType, timestampTzType: + v := arrowSnowflakeTimestampToTime(srcValue, snowflakeType, int(srcColumnMeta.Scale), rowIdx, loc) + if v != nil { + return *v, nil + } + return nil, nil + } + + return nil, fmt.Errorf("unsupported data type") +} + +func buildMapFromNativeArrow(ctx context.Context, rowIdx int, keyMetadata, valueMetadata fieldMetadata, srcValue arrow.Array, loc *time.Location, higherPrecision bool, params map[string]*string) (snowflakeValue, error) { + arrowMap := srcValue.(*array.Map) + if arrowMap.IsNull(rowIdx) { + return nil, nil + } + keys := arrowMap.Keys() + items := arrowMap.Items() + offsets := arrowMap.Offsets() + switch keyMetadata.Type { + case "text": + keyFunc := func(j int) (string, error) { + return keys.(*array.String).Value(j), nil + } + return buildStructuredMapFromArrow(ctx, rowIdx, valueMetadata, offsets, keyFunc, items, higherPrecision, loc, params) + case "fixed": + keyFunc := func(j int) (int64, error) { + k, err := extractInt64(keys, int(j)) + if err != nil { + return 0, err + } + return k, nil + } + return buildStructuredMapFromArrow(ctx, rowIdx, valueMetadata, offsets, keyFunc, items, higherPrecision, loc, params) + } + return nil, nil +} + +func buildListFromNativeArrow(ctx context.Context, rowIdx int, fieldMetadata fieldMetadata, srcValue arrow.Array, loc *time.Location, higherPrecision bool, params map[string]*string) (snowflakeValue, error) { + list := srcValue.(*array.List) + if list.IsNull(rowIdx) { + return nil, nil + } + values := list.ListValues() + offsets := list.Offsets() + snowflakeType := getSnowflakeType(fieldMetadata.Type) + switch snowflakeType { + case fixedType: + switch typedValues := values.(type) { + case *array.Decimal128: + if higherPrecision && fieldMetadata.Scale == 0 { + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (*big.Int, error) { + bigInt := arrowDecimal128ToValue(typedValues, j, higherPrecision, fieldMetadata.Scale) + if bigInt == nil { + return nil, nil + } + return bigInt.(*big.Int), nil + + }) + } else if higherPrecision && fieldMetadata.Scale != 0 { + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (*big.Float, error) { + bigFloat := arrowDecimal128ToValue(typedValues, j, higherPrecision, fieldMetadata.Scale) + if bigFloat == nil { + return nil, nil + } + return bigFloat.(*big.Float), nil + + }) + + } else if !higherPrecision && fieldMetadata.Scale == 0 { + if arrayValuesNullableEnabled(ctx) { + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (sql.NullInt64, error) { + v := arrowDecimal128ToValue(typedValues, j, higherPrecision, fieldMetadata.Scale) + if v == nil { + return sql.NullInt64{Valid: false}, nil } - } else { - f := decimalToBigFloat(num, srcColumnMeta.Scale) - if higherPrecision { - destcol[i] = f - } else { - destcol[i] = fmt.Sprintf("%.*f", srcColumnMeta.Scale, f) + val, err := strconv.ParseInt(v.(string), 10, 64) + if err != nil { + return sql.NullInt64{Valid: false}, err } + return sql.NullInt64{Valid: true, Int64: val}, nil + + }) + } + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (int64, error) { + v := arrowDecimal128ToValue(typedValues, j, higherPrecision, fieldMetadata.Scale) + if v == nil { + return 0, errNullValueInArray() } + return strconv.ParseInt(v.(string), 10, 64) + }) + } else { + if arrayValuesNullableEnabled(ctx) { + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (sql.NullFloat64, error) { + v := arrowDecimal128ToValue(typedValues, j, higherPrecision, fieldMetadata.Scale) + if v == nil { + return sql.NullFloat64{Valid: false}, nil + } + val, err := strconv.ParseFloat(v.(string), 64) + if err != nil { + return sql.NullFloat64{Valid: false}, err + } + return sql.NullFloat64{Valid: true, Float64: val}, nil + + }) } + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (float64, error) { + v := arrowDecimal128ToValue(typedValues, j, higherPrecision, fieldMetadata.Scale) + if v == nil { + return 0, errNullValueInArray() + } + return strconv.ParseFloat(v.(string), 64) + }) + } case *array.Int64: - for i, val := range data.Int64Values() { - if !srcValue.IsNull(i) { - if srcColumnMeta.Scale == 0 { - if higherPrecision { - destcol[i] = val - } else { - destcol[i] = fmt.Sprintf("%d", val) - } - } else { - if higherPrecision { - f := intToBigFloat(val, srcColumnMeta.Scale) - destcol[i] = f - } else { - destcol[i] = fmt.Sprintf("%.*f", srcColumnMeta.Scale, float64(val)/math.Pow10(int(srcColumnMeta.Scale))) - } + if arrayValuesNullableEnabled(ctx) { + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (sql.NullInt64, error) { + resInt := arrowInt64ToValue(typedValues, j, higherPrecision, fieldMetadata.Scale) + if resInt == nil { + return sql.NullInt64{Valid: false}, nil } - } + return sql.NullInt64{Valid: true, Int64: resInt.(int64)}, nil + }) } + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (int64, error) { + resInt := arrowInt64ToValue(typedValues, j, higherPrecision, fieldMetadata.Scale) + if resInt == nil { + return 0, errNullValueInArray() + } + return resInt.(int64), nil + }) + case *array.Int32: - for i, val := range data.Int32Values() { - if !srcValue.IsNull(i) { - if srcColumnMeta.Scale == 0 { - if higherPrecision { - destcol[i] = int64(val) - } else { - destcol[i] = fmt.Sprintf("%d", val) - } - } else { - if higherPrecision { - f := intToBigFloat(int64(val), srcColumnMeta.Scale) - destcol[i] = f - } else { - destcol[i] = fmt.Sprintf("%.*f", srcColumnMeta.Scale, float64(val)/math.Pow10(int(srcColumnMeta.Scale))) - } + if arrayValuesNullableEnabled(ctx) { + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (sql.NullInt32, error) { + resInt := arrowInt32ToValue(typedValues, j, higherPrecision, fieldMetadata.Scale) + if resInt == nil { + return sql.NullInt32{Valid: false}, nil } - } + return sql.NullInt32{Valid: true, Int32: resInt.(int32)}, nil + + }) } + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (int32, error) { + resInt := arrowInt32ToValue(typedValues, j, higherPrecision, fieldMetadata.Scale) + if resInt == nil { + return 0, errNullValueInArray() + } + return resInt.(int32), nil + }) case *array.Int16: - for i, val := range data.Int16Values() { - if !srcValue.IsNull(i) { - if srcColumnMeta.Scale == 0 { - if higherPrecision { - destcol[i] = int64(val) - } else { - destcol[i] = fmt.Sprintf("%d", val) - } - } else { - if higherPrecision { - f := intToBigFloat(int64(val), srcColumnMeta.Scale) - destcol[i] = f - } else { - destcol[i] = fmt.Sprintf("%.*f", srcColumnMeta.Scale, float64(val)/math.Pow10(int(srcColumnMeta.Scale))) - } + if arrayValuesNullableEnabled(ctx) { + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (sql.NullInt16, error) { + resInt := arrowInt16ToValue(typedValues, j, higherPrecision, fieldMetadata.Scale) + if resInt == nil { + return sql.NullInt16{Valid: false}, nil } - } + return sql.NullInt16{Valid: true, Int16: resInt.(int16)}, nil + + }) } + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (int16, error) { + resInt := arrowInt16ToValue(typedValues, j, higherPrecision, fieldMetadata.Scale) + if resInt == nil { + return 0, errNullValueInArray() + } + return resInt.(int16), nil + }) + case *array.Int8: - for i, val := range data.Int8Values() { - if !srcValue.IsNull(i) { - if srcColumnMeta.Scale == 0 { - if higherPrecision { - destcol[i] = int64(val) - } else { - destcol[i] = fmt.Sprintf("%d", val) - } - } else { - if higherPrecision { - f := intToBigFloat(int64(val), srcColumnMeta.Scale) - destcol[i] = f - } else { - destcol[i] = fmt.Sprintf("%.*f", srcColumnMeta.Scale, float64(val)/math.Pow10(int(srcColumnMeta.Scale))) - } + if arrayValuesNullableEnabled(ctx) { + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (sql.NullByte, error) { + resInt := arrowInt8ToValue(typedValues, j, higherPrecision, fieldMetadata.Scale) + if resInt == nil { + return sql.NullByte{Valid: false}, nil + } + return sql.NullByte{Valid: true, Byte: resInt.(byte)}, nil + }) + } + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (int8, error) { + resInt := arrowInt8ToValue(typedValues, j, higherPrecision, fieldMetadata.Scale) + if resInt == nil { + return 0, errNullValueInArray() + } + return resInt.(int8), nil + }) + } + case realType: + if arrayValuesNullableEnabled(ctx) { + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (sql.NullFloat64, error) { + resFloat := arrowRealToValue(values.(*array.Float64), j) + if resFloat == nil { + return sql.NullFloat64{Valid: false}, nil + } + return sql.NullFloat64{Valid: true, Float64: resFloat.(float64)}, nil + }) + } + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (float64, error) { + resFloat := arrowRealToValue(values.(*array.Float64), j) + if resFloat == nil { + return 0, errNullValueInArray() + } + return resFloat.(float64), nil + }) + case textType: + if arrayValuesNullableEnabled(ctx) { + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (sql.NullString, error) { + resString := arrowStringToValue(values.(*array.String), j) + if resString == nil { + return sql.NullString{Valid: false}, nil + } + return sql.NullString{Valid: true, String: resString.(string)}, nil + }) + } + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (string, error) { + resString := arrowStringToValue(values.(*array.String), j) + if resString == nil { + return "", errNullValueInArray() + } + return resString.(string), nil + }) + case booleanType: + if arrayValuesNullableEnabled(ctx) { + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (sql.NullBool, error) { + resBool := arrowBoolToValue(values.(*array.Boolean), j) + if resBool == nil { + return sql.NullBool{Valid: false}, nil + } + return sql.NullBool{Valid: true, Bool: resBool.(bool)}, nil + }) + } + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (bool, error) { + resBool := arrowBoolToValue(values.(*array.Boolean), j) + if resBool == nil { + return false, errNullValueInArray() + } + return resBool.(bool), nil + + }) + + case binaryType: + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) ([]byte, error) { + res := arrowBinaryToValue(values.(*array.Binary), j) + if res == nil { + return nil, nil + } + return res.([]byte), nil + + }) + case dateType: + if arrayValuesNullableEnabled(ctx) { + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (sql.NullTime, error) { + v := arrowDateToValue(values.(*array.Date32), j) + if v == nil { + return sql.NullTime{Valid: false}, nil + } + return sql.NullTime{Valid: true, Time: v.(time.Time)}, nil + + }) + } + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (time.Time, error) { + v := arrowDateToValue(values.(*array.Date32), j) + if v == nil { + return time.Time{}, errNullValueInArray() + } + return v.(time.Time), nil + + }) + + case timeType: + if arrayValuesNullableEnabled(ctx) { + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (sql.NullTime, error) { + v := arrowTimeToValue(values, j, fieldMetadata.Scale) + if v == nil { + return sql.NullTime{Valid: false}, nil + } + return sql.NullTime{Valid: true, Time: v.(time.Time)}, nil + + }) + } + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (time.Time, error) { + v := arrowTimeToValue(values, j, fieldMetadata.Scale) + if v == nil { + return time.Time{}, errNullValueInArray() + } + return v.(time.Time), nil + + }) + + case timestampNtzType, timestampLtzType, timestampTzType: + if arrayValuesNullableEnabled(ctx) { + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (sql.NullTime, error) { + ptr := arrowSnowflakeTimestampToTime(values, snowflakeType, fieldMetadata.Scale, j, loc) + if ptr != nil { + return sql.NullTime{Valid: true, Time: *ptr}, nil + } + return sql.NullTime{Valid: false}, nil + }) + } + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (time.Time, error) { + ptr := arrowSnowflakeTimestampToTime(values, snowflakeType, fieldMetadata.Scale, j, loc) + if ptr != nil { + return *ptr, nil + } + return time.Time{}, errNullValueInArray() + }) + case objectType: + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) (*structuredType, error) { + if values.IsNull(j) { + return nil, nil + } + m := make(map[string]any, len(fieldMetadata.Fields)) + for fieldIdx, field := range fieldMetadata.Fields { + m[field.Name] = values.(*array.Struct).Field(fieldIdx).ValueStr(j) + } + return buildStructuredTypeRecursive(ctx, m, fieldMetadata.Fields, params) + }) + case arrayType: + switch fieldMetadata.Fields[0].Type { + case "text": + if arrayValuesNullableEnabled(ctx) { + return buildArrowListRecursive[sql.NullString](ctx, rowIdx, fieldMetadata, offsets, values, loc, higherPrecision, params) + } + return buildArrowListRecursive[string](ctx, rowIdx, fieldMetadata, offsets, values, loc, higherPrecision, params) + case "fixed": + if fieldMetadata.Fields[0].Scale == 0 { + if arrayValuesNullableEnabled(ctx) { + return buildArrowListRecursive[sql.NullInt64](ctx, rowIdx, fieldMetadata, offsets, values, loc, higherPrecision, params) + } + return buildArrowListRecursive[int64](ctx, rowIdx, fieldMetadata, offsets, values, loc, higherPrecision, params) + } + if arrayValuesNullableEnabled(ctx) { + return buildArrowListRecursive[sql.NullFloat64](ctx, rowIdx, fieldMetadata, offsets, values, loc, higherPrecision, params) + } + return buildArrowListRecursive[float64](ctx, rowIdx, fieldMetadata, offsets, values, loc, higherPrecision, params) + case "real": + if arrayValuesNullableEnabled(ctx) { + return buildArrowListRecursive[sql.NullFloat64](ctx, rowIdx, fieldMetadata, offsets, values, loc, higherPrecision, params) + } + return buildArrowListRecursive[float64](ctx, rowIdx, fieldMetadata, offsets, values, loc, higherPrecision, params) + case "boolean": + if arrayValuesNullableEnabled(ctx) { + return buildArrowListRecursive[sql.NullBool](ctx, rowIdx, fieldMetadata, offsets, values, loc, higherPrecision, params) + } + return buildArrowListRecursive[bool](ctx, rowIdx, fieldMetadata, offsets, values, loc, higherPrecision, params) + case "binary": + return buildArrowListRecursive[[]byte](ctx, rowIdx, fieldMetadata, offsets, values, loc, higherPrecision, params) + case "date", "time", "timestamp_ltz", "timestamp_ntz", "timestamp_tz": + if arrayValuesNullableEnabled(ctx) { + return buildArrowListRecursive[sql.NullTime](ctx, rowIdx, fieldMetadata, offsets, values, loc, higherPrecision, params) + } + return buildArrowListRecursive[time.Time](ctx, rowIdx, fieldMetadata, offsets, values, loc, higherPrecision, params) + } + } + return nil, nil +} + +func buildArrowListRecursive[T any](ctx context.Context, rowIdx int, fieldMetadata fieldMetadata, offsets []int32, values arrow.Array, loc *time.Location, higherPrecision bool, params map[string]*string) (snowflakeValue, error) { + return mapStructuredArrayNativeArrowRows(offsets, rowIdx, func(j int) ([]T, error) { + arrowList, err := buildListFromNativeArrow(ctx, j, fieldMetadata.Fields[0], values, loc, higherPrecision, params) + if err != nil { + return nil, err + } + if arrowList == nil { + return nil, nil + } + return arrowList.([]T), nil + + }) +} + +func mapStructuredArrayNativeArrowRows[T any](offsets []int32, rowIdx int, createValueFunc func(j int) (T, error)) (snowflakeValue, error) { + arr := make([]T, offsets[rowIdx+1]-offsets[rowIdx]) + for j := offsets[rowIdx]; j < offsets[rowIdx+1]; j++ { + v, err := createValueFunc(int(j)) + if err != nil { + return nil, err + } + arr[j-offsets[rowIdx]] = v + } + return arr, nil +} + +func extractInt64(values arrow.Array, j int) (int64, error) { + switch typedValues := values.(type) { + case *array.Decimal128: + return int64(typedValues.Value(j).LowBits()), nil + case *array.Int64: + return typedValues.Value(j), nil + case *array.Int32: + return int64(typedValues.Value(j)), nil + case *array.Int16: + return int64(typedValues.Value(j)), nil + case *array.Int8: + return int64(typedValues.Value(j)), nil + } + return 0, fmt.Errorf("unsupported map type: %T", values.DataType().Name()) +} + +func buildStructuredMapFromArrow[K comparable](ctx context.Context, rowIdx int, valueMetadata fieldMetadata, offsets []int32, keyFunc func(j int) (K, error), items arrow.Array, higherPrecision bool, loc *time.Location, params map[string]*string) (snowflakeValue, error) { + mapNullValuesEnabled := mapValuesNullableEnabled(ctx) + switch valueMetadata.Type { + case "text": + if mapNullValuesEnabled { + return mapStructuredMapNativeArrowRows(make(map[K]sql.NullString), offsets, rowIdx, keyFunc, func(j int) (sql.NullString, error) { + if items.IsNull(j) { + return sql.NullString{Valid: false}, nil + } + return sql.NullString{Valid: true, String: items.(*array.String).Value(j)}, nil + }) + } + return mapStructuredMapNativeArrowRows(make(map[K]string), offsets, rowIdx, keyFunc, func(j int) (string, error) { + if items.IsNull(j) { + return "", errNullValueInMap() + } + return items.(*array.String).Value(j), nil + }) + case "boolean": + if mapNullValuesEnabled { + return mapStructuredMapNativeArrowRows(make(map[K]sql.NullBool), offsets, rowIdx, keyFunc, func(j int) (sql.NullBool, error) { + if items.IsNull(j) { + return sql.NullBool{Valid: false}, nil + } + return sql.NullBool{Valid: true, Bool: items.(*array.Boolean).Value(j)}, nil + }) + } + return mapStructuredMapNativeArrowRows(make(map[K]bool), offsets, rowIdx, keyFunc, func(j int) (bool, error) { + if items.IsNull(j) { + return false, errNullValueInMap() + } + return items.(*array.Boolean).Value(j), nil + }) + case "fixed": + if higherPrecision && valueMetadata.Scale == 0 { + return mapStructuredMapNativeArrowRows(make(map[K]*big.Int), offsets, rowIdx, keyFunc, func(j int) (*big.Int, error) { + if items.IsNull(j) { + return nil, nil + } + return mapStructuredMapNativeArrowFixedValue[*big.Int](valueMetadata, j, items, higherPrecision, nil) + }) + } else if higherPrecision && valueMetadata.Scale != 0 { + return mapStructuredMapNativeArrowRows(make(map[K]*big.Float), offsets, rowIdx, keyFunc, func(j int) (*big.Float, error) { + if items.IsNull(j) { + return nil, nil + } + return mapStructuredMapNativeArrowFixedValue[*big.Float](valueMetadata, j, items, higherPrecision, nil) + }) + } else if !higherPrecision && valueMetadata.Scale == 0 { + if mapNullValuesEnabled { + return mapStructuredMapNativeArrowRows(make(map[K]sql.NullInt64), offsets, rowIdx, keyFunc, func(j int) (sql.NullInt64, error) { + if items.IsNull(j) { + return sql.NullInt64{Valid: false}, nil } + s, err := mapStructuredMapNativeArrowFixedValue[string](valueMetadata, j, items, higherPrecision, "") + if err != nil { + return sql.NullInt64{}, err + } + i64, err := strconv.ParseInt(s, 10, 64) + return sql.NullInt64{Valid: true, Int64: i64}, err + }) + } + return mapStructuredMapNativeArrowRows(make(map[K]int64), offsets, rowIdx, keyFunc, func(j int) (int64, error) { + if items.IsNull(j) { + return 0, errNullValueInMap() } + s, err := mapStructuredMapNativeArrowFixedValue[string](valueMetadata, j, items, higherPrecision, "") + if err != nil { + return 0, err + } + return strconv.ParseInt(s, 10, 64) + }) + } else { + if mapNullValuesEnabled { + return mapStructuredMapNativeArrowRows(make(map[K]sql.NullFloat64), offsets, rowIdx, keyFunc, func(j int) (sql.NullFloat64, error) { + if items.IsNull(j) { + return sql.NullFloat64{Valid: false}, nil + } + s, err := mapStructuredMapNativeArrowFixedValue[string](valueMetadata, j, items, higherPrecision, "") + if err != nil { + return sql.NullFloat64{}, err + } + f64, err := strconv.ParseFloat(s, 64) + return sql.NullFloat64{Valid: true, Float64: f64}, err + }) } + return mapStructuredMapNativeArrowRows(make(map[K]float64), offsets, rowIdx, keyFunc, func(j int) (float64, error) { + if items.IsNull(j) { + return 0, errNullValueInMap() + } + s, err := mapStructuredMapNativeArrowFixedValue[string](valueMetadata, j, items, higherPrecision, "") + if err != nil { + return 0, err + } + return strconv.ParseFloat(s, 64) + }) + } + case "real": + if mapNullValuesEnabled { + return mapStructuredMapNativeArrowRows(make(map[K]sql.NullFloat64), offsets, rowIdx, keyFunc, func(j int) (sql.NullFloat64, error) { + if items.IsNull(j) { + return sql.NullFloat64{Valid: false}, nil + } + f64 := items.(*array.Float64).Value(j) + return sql.NullFloat64{Valid: true, Float64: f64}, nil + }) + } + return mapStructuredMapNativeArrowRows(make(map[K]float64), offsets, rowIdx, keyFunc, func(j int) (float64, error) { + if items.IsNull(j) { + return 0, errNullValueInMap() + } + return arrowRealToValue(items.(*array.Float64), j).(float64), nil + }) + case "binary": + return mapStructuredMapNativeArrowRows(make(map[K][]byte), offsets, rowIdx, keyFunc, func(j int) ([]byte, error) { + if items.IsNull(j) { + return nil, nil + } + return arrowBinaryToValue(items.(*array.Binary), j).([]byte), nil + }) + case "date": + return buildTimeFromNativeArrowArray(mapNullValuesEnabled, offsets, rowIdx, keyFunc, items, func(j int) time.Time { + return arrowDateToValue(items.(*array.Date32), j).(time.Time) + }) + case "time": + return buildTimeFromNativeArrowArray(mapNullValuesEnabled, offsets, rowIdx, keyFunc, items, func(j int) time.Time { + return arrowTimeToValue(items, j, valueMetadata.Scale).(time.Time) + }) + case "timestamp_ltz", "timestamp_ntz", "timestamp_tz": + return buildTimeFromNativeArrowArray(mapNullValuesEnabled, offsets, rowIdx, keyFunc, items, func(j int) time.Time { + return *arrowSnowflakeTimestampToTime(items, getSnowflakeType(valueMetadata.Type), valueMetadata.Scale, j, loc) + }) + case "object": + return mapStructuredMapNativeArrowRows(make(map[K]*structuredType), offsets, rowIdx, keyFunc, func(j int) (*structuredType, error) { + if items.IsNull(j) { + return nil, nil + } + var err error + m := make(map[string]any) + for fieldIdx, field := range valueMetadata.Fields { + snowflakeType := getSnowflakeType(field.Type) + m[field.Name], err = arrowToValue(ctx, j, field, items.(*array.Struct).Field(fieldIdx), loc, higherPrecision, params, snowflakeType) + if err != nil { + return nil, err + } + } + return &structuredType{ + values: m, + fieldMetadata: valueMetadata.Fields, + params: params, + }, nil + }) + case "array": + switch valueMetadata.Fields[0].Type { + case "text": + return buildListFromNativeArrowMap[K, string](ctx, rowIdx, valueMetadata, offsets, keyFunc, items, higherPrecision, loc, params) + case "fixed": + if valueMetadata.Fields[0].Scale == 0 { + return buildListFromNativeArrowMap[K, int64](ctx, rowIdx, valueMetadata, offsets, keyFunc, items, higherPrecision, loc, params) + } + return buildListFromNativeArrowMap[K, float64](ctx, rowIdx, valueMetadata, offsets, keyFunc, items, higherPrecision, loc, params) + case "real": + return buildListFromNativeArrowMap[K, float64](ctx, rowIdx, valueMetadata, offsets, keyFunc, items, higherPrecision, loc, params) + case "binary": + return buildListFromNativeArrowMap[K, []byte](ctx, rowIdx, valueMetadata, offsets, keyFunc, items, higherPrecision, loc, params) + case "boolean": + return buildListFromNativeArrowMap[K, bool](ctx, rowIdx, valueMetadata, offsets, keyFunc, items, higherPrecision, loc, params) + case "date", "time", "timestamp_ltz", "timestamp_ntz", "timestamp_tz": + return buildListFromNativeArrowMap[K, time.Time](ctx, rowIdx, valueMetadata, offsets, keyFunc, items, higherPrecision, loc, params) + } + } + return nil, errors.New("Unsupported map value: " + valueMetadata.Type) +} + +func buildListFromNativeArrowMap[K comparable, V any](ctx context.Context, rowIdx int, valueMetadata fieldMetadata, offsets []int32, keyFunc func(j int) (K, error), items arrow.Array, higherPrecision bool, loc *time.Location, params map[string]*string) (snowflakeValue, error) { + return mapStructuredMapNativeArrowRows(make(map[K][]V), offsets, rowIdx, keyFunc, func(j int) ([]V, error) { + if items.IsNull(j) { + return nil, nil } - return err - case booleanType: - boolData := srcValue.(*array.Boolean) - for i := range destcol { - if !srcValue.IsNull(i) { - destcol[i] = boolData.Value(i) + list, err := buildListFromNativeArrow(ctx, j, valueMetadata.Fields[0], items, loc, higherPrecision, params) + return list.([]V), err + }) +} + +func buildTimeFromNativeArrowArray[K comparable](mapNullValuesEnabled bool, offsets []int32, rowIdx int, keyFunc func(j int) (K, error), items arrow.Array, buildTime func(j int) time.Time) (snowflakeValue, error) { + if mapNullValuesEnabled { + return mapStructuredMapNativeArrowRows(make(map[K]sql.NullTime), offsets, rowIdx, keyFunc, func(j int) (sql.NullTime, error) { + if items.IsNull(j) { + return sql.NullTime{Valid: false}, nil } + return sql.NullTime{Valid: true, Time: buildTime(j)}, nil + }) + } + return mapStructuredMapNativeArrowRows(make(map[K]time.Time), offsets, rowIdx, keyFunc, func(j int) (time.Time, error) { + if items.IsNull(j) { + return time.Time{}, errNullValueInMap() } - return err - case realType: - // Snowflake data types that are floating-point numbers will fall in this category - // e.g. FLOAT/REAL/DOUBLE - for i, flt64 := range srcValue.(*array.Float64).Float64Values() { - if !srcValue.IsNull(i) { - destcol[i] = flt64 - } + return buildTime(j), nil + }) +} + +func mapStructuredMapNativeArrowFixedValue[V any](valueMetadata fieldMetadata, j int, items arrow.Array, higherPrecision bool, defaultValue V) (V, error) { + v, err := extractNumberFromArrow(&items, j, higherPrecision, valueMetadata.Scale) + if err != nil { + return defaultValue, err + } + return v.(V), nil +} + +func extractNumberFromArrow(values *arrow.Array, j int, higherPrecision bool, scale int) (snowflakeValue, error) { + switch typedValues := (*values).(type) { + case *array.Decimal128: + return arrowDecimal128ToValue(typedValues, j, higherPrecision, scale), nil + case *array.Int64: + return arrowInt64ToValue(typedValues, j, higherPrecision, scale), nil + case *array.Int32: + return arrowInt32ToValue(typedValues, j, higherPrecision, scale), nil + case *array.Int16: + return arrowInt16ToValue(typedValues, j, higherPrecision, scale), nil + case *array.Int8: + return arrowInt8ToValue(typedValues, j, higherPrecision, scale), nil + } + return 0, fmt.Errorf("unknown number type: %T", values) +} + +func mapStructuredMapNativeArrowRows[K comparable, V any](m map[K]V, offsets []int32, rowIdx int, keyFunc func(j int) (K, error), itemFunc func(j int) (V, error)) (map[K]V, error) { + for j := offsets[rowIdx]; j < offsets[rowIdx+1]; j++ { + k, err := keyFunc(int(j)) + if err != nil { + return nil, err } - return err - case textType, arrayType, variantType, objectType: - strings := srcValue.(*array.String) - for i := range destcol { - if !srcValue.IsNull(i) { - destcol[i] = strings.Value(i) - } + if m[k], err = itemFunc(int(j)); err != nil { + return nil, err } - return err - case binaryType: - binaryData := srcValue.(*array.Binary) - for i := range destcol { - if !srcValue.IsNull(i) { - destcol[i] = binaryData.Value(i) + } + return m, nil +} + +func arrowToStructuredType(ctx context.Context, structs *array.Struct, fieldMetadata []fieldMetadata, loc *time.Location, rowIdx int, higherPrecision bool, params map[string]*string) (*structuredType, error) { + var err error + m := make(map[string]any) + for colIdx := 0; colIdx < structs.NumField(); colIdx++ { + var v any + switch getSnowflakeType(fieldMetadata[colIdx].Type) { + case fixedType: + v = structs.Field(colIdx).ValueStr(rowIdx) + switch typedValues := structs.Field(colIdx).(type) { + case *array.Decimal128: + v = arrowDecimal128ToValue(typedValues, rowIdx, higherPrecision, fieldMetadata[colIdx].Scale) + case *array.Int64: + v = arrowInt64ToValue(typedValues, rowIdx, higherPrecision, fieldMetadata[colIdx].Scale) + case *array.Int32: + v = arrowInt32ToValue(typedValues, rowIdx, higherPrecision, fieldMetadata[colIdx].Scale) + case *array.Int16: + v = arrowInt16ToValue(typedValues, rowIdx, higherPrecision, fieldMetadata[colIdx].Scale) + case *array.Int8: + v = arrowInt8ToValue(typedValues, rowIdx, higherPrecision, fieldMetadata[colIdx].Scale) } - } - return err - case dateType: - for i, date32 := range srcValue.(*array.Date32).Date32Values() { - if !srcValue.IsNull(i) { - t0 := time.Unix(int64(date32)*86400, 0).UTC() - destcol[i] = t0 + case booleanType: + v = arrowBoolToValue(structs.Field(colIdx).(*array.Boolean), rowIdx) + case realType: + v = arrowRealToValue(structs.Field(colIdx).(*array.Float64), rowIdx) + case binaryType: + v = arrowBinaryToValue(structs.Field(colIdx).(*array.Binary), rowIdx) + case dateType: + v = arrowDateToValue(structs.Field(colIdx).(*array.Date32), rowIdx) + case timeType: + v = arrowTimeToValue(structs.Field(colIdx), rowIdx, fieldMetadata[colIdx].Scale) + case textType: + v = arrowStringToValue(structs.Field(colIdx).(*array.String), rowIdx) + case timestampLtzType, timestampTzType, timestampNtzType: + ptr := arrowSnowflakeTimestampToTime(structs.Field(colIdx), getSnowflakeType(fieldMetadata[colIdx].Type), fieldMetadata[colIdx].Scale, rowIdx, loc) + if ptr != nil { + v = *ptr } - } - return err - case timeType: - t0 := time.Time{} - if srcValue.DataType().ID() == arrow.INT64 { - for i, i64 := range srcValue.(*array.Int64).Int64Values() { - if !srcValue.IsNull(i) { - destcol[i] = t0.Add(time.Duration(i64 * int64(math.Pow10(9-int(srcColumnMeta.Scale))))) + case objectType: + if !structs.Field(colIdx).IsNull(rowIdx) { + if v, err = arrowToStructuredType(ctx, structs.Field(colIdx).(*array.Struct), fieldMetadata[colIdx].Fields, loc, rowIdx, higherPrecision, params); err != nil { + return nil, err } } - } else { - for i, i32 := range srcValue.(*array.Int32).Int32Values() { - if !srcValue.IsNull(i) { - destcol[i] = t0.Add(time.Duration(int64(i32) * int64(math.Pow10(9-int(srcColumnMeta.Scale))))) + case arrayType: + if !structs.Field(colIdx).IsNull(rowIdx) { + var err error + if v, err = buildListFromNativeArrow(ctx, rowIdx, fieldMetadata[colIdx].Fields[0], structs.Field(colIdx), loc, higherPrecision, params); err != nil { + return nil, err + } + } + case mapType: + if !structs.Field(colIdx).IsNull(rowIdx) { + var err error + if v, err = buildMapFromNativeArrow(ctx, rowIdx, fieldMetadata[colIdx].Fields[0], fieldMetadata[colIdx].Fields[1], structs.Field(colIdx), loc, higherPrecision, params); err != nil { + return nil, err } } } - return err - case timestampNtzType, timestampLtzType, timestampTzType: - for i := range destcol { - var ts = arrowSnowflakeTimestampToTime(srcValue, snowflakeType, int(srcColumnMeta.Scale), i, loc) - if ts != nil { - destcol[i] = *ts + m[fieldMetadata[colIdx].Name] = v + } + return &structuredType{ + values: m, + fieldMetadata: fieldMetadata, + params: params, + }, nil +} + +func arrowStringToValue(srcValue *array.String, rowIdx int) snowflakeValue { + if srcValue.IsNull(rowIdx) { + return nil + } + return srcValue.Value(rowIdx) +} + +func arrowDecimal128ToValue(srcValue *array.Decimal128, rowIdx int, higherPrecision bool, scale int) snowflakeValue { + if !srcValue.IsNull(rowIdx) { + num := srcValue.Value(rowIdx) + if scale == 0 { + if higherPrecision { + return num.BigInt() } + return num.ToString(0) } - return err + f := decimalToBigFloat(num, int64(scale)) + if higherPrecision { + return f + } + return fmt.Sprintf("%.*f", scale, f) + } + return nil +} + +func arrowInt64ToValue(srcValue *array.Int64, rowIdx int, higherPrecision bool, scale int) snowflakeValue { + if !srcValue.IsNull(rowIdx) { + val := srcValue.Value(rowIdx) + return arrowIntToValue(scale, higherPrecision, val) + } + return nil +} + +func arrowInt32ToValue(srcValue *array.Int32, rowIdx int, higherPrecision bool, scale int) snowflakeValue { + if !srcValue.IsNull(rowIdx) { + val := srcValue.Value(rowIdx) + return arrowIntToValue(scale, higherPrecision, int64(val)) } + return nil +} + +func arrowInt16ToValue(srcValue *array.Int16, rowIdx int, higherPrecision bool, scale int) snowflakeValue { + if !srcValue.IsNull(rowIdx) { + val := srcValue.Value(rowIdx) + return arrowIntToValue(scale, higherPrecision, int64(val)) + } + return nil +} + +func arrowInt8ToValue(srcValue *array.Int8, rowIdx int, higherPrecision bool, scale int) snowflakeValue { + if !srcValue.IsNull(rowIdx) { + val := srcValue.Value(rowIdx) + return arrowIntToValue(scale, higherPrecision, int64(val)) + } + return nil +} + +func arrowIntToValue(scale int, higherPrecision bool, val int64) snowflakeValue { + if scale == 0 { + if higherPrecision { + return int64(val) + } + return fmt.Sprintf("%d", val) + } + if higherPrecision { + f := intToBigFloat(int64(val), int64(scale)) + return f + } + return fmt.Sprintf("%.*f", scale, float64(val)/math.Pow10(int(scale))) +} + +func arrowRealToValue(srcValue *array.Float64, rowIdx int) snowflakeValue { + if !srcValue.IsNull(rowIdx) { + return srcValue.Value(rowIdx) + } + return nil +} + +func arrowBoolToValue(srcValue *array.Boolean, rowIdx int) snowflakeValue { + if !srcValue.IsNull(rowIdx) { + return srcValue.Value(rowIdx) + } + return nil +} + +func arrowBinaryToValue(srcValue *array.Binary, rowIdx int) snowflakeValue { + if !srcValue.IsNull(rowIdx) { + return srcValue.Value(rowIdx) + } + return nil +} + +func arrowDateToValue(srcValue *array.Date32, rowID int) snowflakeValue { + if !srcValue.IsNull(rowID) { + return time.Unix(int64(srcValue.Value(rowID))*86400, 0).UTC() + } + return nil +} - return fmt.Errorf("unsupported data type") +func arrowTimeToValue(srcValue arrow.Array, rowIdx int, scale int) snowflakeValue { + t0 := time.Time{} + if srcValue.DataType().ID() == arrow.INT64 { + if !srcValue.IsNull(rowIdx) { + return t0.Add(time.Duration(srcValue.(*array.Int64).Value(rowIdx) * int64(math.Pow10(9-scale)))) + } + } else { + if !srcValue.IsNull(rowIdx) { + return t0.Add(time.Duration(int64(srcValue.(*array.Int32).Value(rowIdx)) * int64(math.Pow10(9-scale)))) + } + } + return nil } type ( @@ -724,7 +2559,7 @@ func Array(a interface{}, typ ...timezoneType) interface{} { // snowflakeArrayToString converts the array binding to snowflake's native // string type. The string value differs whether it's directly bound or // uploaded via stream. -func snowflakeArrayToString(nv *driver.NamedValue, stream bool) (snowflakeType, []*string) { +func snowflakeArrayToString(nv *driver.NamedValue, stream bool) (snowflakeType, []*string, error) { var t snowflakeType var arr []*string switch reflect.TypeOf(nv.Value) { @@ -788,26 +2623,30 @@ func snowflakeArrayToString(nv *driver.NamedValue, stream bool) (snowflakeType, t = timestampNtzType a := nv.Value.(*timestampNtzArray) for _, x := range *a { - v := strconv.FormatInt(x.UnixNano(), 10) + v, err := getTimestampBindValue(x, stream, t) + if err != nil { + return unSupportedType, nil, err + } arr = append(arr, &v) } case reflect.TypeOf(×tampLtzArray{}): t = timestampLtzType a := nv.Value.(*timestampLtzArray) + for _, x := range *a { - v := strconv.FormatInt(x.UnixNano(), 10) + v, err := getTimestampBindValue(x, stream, t) + if err != nil { + return unSupportedType, nil, err + } arr = append(arr, &v) } case reflect.TypeOf(×tampTzArray{}): t = timestampTzType a := nv.Value.(*timestampTzArray) for _, x := range *a { - var v string - if stream { - v = x.Format(format) - } else { - _, offset := x.Zone() - v = fmt.Sprintf("%v %v", x.UnixNano(), offset/60+1440) + v, err := getTimestampBindValue(x, stream, t) + if err != nil { + return unSupportedType, nil, err } arr = append(arr, &v) } @@ -815,9 +2654,14 @@ func snowflakeArrayToString(nv *driver.NamedValue, stream bool) (snowflakeType, t = dateType a := nv.Value.(*dateArray) for _, x := range *a { - _, offset := x.Zone() - x = x.Add(time.Second * time.Duration(offset)) - v := fmt.Sprintf("%d", x.Unix()*1000) + var v string + if stream { + v = x.Format("2006-01-02") + } else { + _, offset := x.Zone() + x = x.Add(time.Second * time.Duration(offset)) + v = fmt.Sprintf("%d", x.Unix()*1000) + } arr = append(arr, &v) } case reflect.TypeOf(&timeArray{}): @@ -826,7 +2670,7 @@ func snowflakeArrayToString(nv *driver.NamedValue, stream bool) (snowflakeType, for _, x := range *a { var v string if stream { - v = x.Format(format[11:19]) + v = fmt.Sprintf("%02d:%02d:%02d.%09d", x.Hour(), x.Minute(), x.Second(), x.Nanosecond()) } else { h, m, s := x.Clock() tm := int64(h)*int64(time.Hour) + int64(m)*int64(time.Minute) + int64(s)*int64(time.Second) + int64(x.Nanosecond()) @@ -850,81 +2694,77 @@ func snowflakeArrayToString(nv *driver.NamedValue, stream bool) (snowflakeType, } } } - return unSupportedType, nil + return unSupportedType, nil, nil } - return t, arr + return t, arr, nil } -func interfaceSliceToString(interfaceSlice reflect.Value, stream bool, tzType ...timezoneType) (snowflakeType, []*string) { +func interfaceSliceToString(interfaceSlice reflect.Value, stream bool, tzType ...timezoneType) (snowflakeType, []*string, error) { var t snowflakeType var arr []*string for i := 0; i < interfaceSlice.Len(); i++ { val := interfaceSlice.Index(i) if val.CanInterface() { - switch val.Interface().(type) { + v := val.Interface() + + switch x := v.(type) { case int: t = fixedType - x := val.Interface().(int) v := strconv.Itoa(x) arr = append(arr, &v) case int32: t = fixedType - x := val.Interface().(int32) v := strconv.Itoa(int(x)) arr = append(arr, &v) case int64: t = fixedType - x := val.Interface().(int64) v := strconv.FormatInt(x, 10) arr = append(arr, &v) case float32: t = realType - x := val.Interface().(float32) v := fmt.Sprintf("%g", x) arr = append(arr, &v) case float64: t = realType - x := val.Interface().(float64) v := fmt.Sprintf("%g", x) arr = append(arr, &v) case bool: t = booleanType - x := val.Interface().(bool) v := strconv.FormatBool(x) arr = append(arr, &v) case string: t = textType - x := val.Interface().(string) arr = append(arr, &x) case []byte: t = binaryType - x := val.Interface().([]byte) v := hex.EncodeToString(x) arr = append(arr, &v) case time.Time: if len(tzType) < 1 { - return unSupportedType, nil + return unSupportedType, nil, nil } - x := val.Interface().(time.Time) switch tzType[0] { case TimestampNTZType: t = timestampNtzType - v := strconv.FormatInt(x.UnixNano(), 10) + v, err := getTimestampBindValue(x, stream, t) + if err != nil { + return unSupportedType, nil, err + } arr = append(arr, &v) case TimestampLTZType: t = timestampLtzType - v := strconv.FormatInt(x.UnixNano(), 10) + v, err := getTimestampBindValue(x, stream, t) + if err != nil { + return unSupportedType, nil, err + } arr = append(arr, &v) case TimestampTZType: t = timestampTzType - var v string - if stream { - v = x.Format(format) - } else { - _, offset := x.Zone() - v = fmt.Sprintf("%v %v", x.UnixNano(), offset/60+1440) + v, err := getTimestampBindValue(x, stream, t) + if err != nil { + return unSupportedType, nil, err } arr = append(arr, &v) case DateType: @@ -945,18 +2785,36 @@ func interfaceSliceToString(interfaceSlice reflect.Value, stream bool, tzType .. } arr = append(arr, &v) default: - return unSupportedType, nil + return unSupportedType, nil, nil + } + case driver.Valuer: // honor each driver's Valuer interface + if value, err := x.Value(); err == nil && value != nil { + // if the output value is a valid string, return that + if strVal, ok := value.(string); ok { + t = textType + arr = append(arr, &strVal) + } + } else if v != nil { + return unSupportedType, nil, nil + } else { + arr = append(arr, nil) } default: if val.Interface() != nil { - return unSupportedType, nil + if isUUIDImplementer(val) { + t = textType + x := v.(fmt.Stringer).String() + arr = append(arr, &x) + continue + } + return unSupportedType, nil, nil } arr = append(arr, nil) } } } - return t, arr + return t, arr, nil } func higherPrecisionEnabled(ctx context.Context) bool { @@ -968,8 +2826,8 @@ func higherPrecisionEnabled(ctx context.Context) bool { return ok && d } -func originalTimestampEnabled(ctx context.Context) bool { - v := ctx.Value(enableOriginalTimestamp) +func arrowBatchesUtf8ValidationEnabled(ctx context.Context) bool { + v := ctx.Value(enableArrowBatchesUtf8Validation) if v == nil { return false } @@ -977,10 +2835,23 @@ func originalTimestampEnabled(ctx context.Context) bool { return ok && d } +func getArrowBatchesTimestampOption(ctx context.Context) snowflakeArrowBatchesTimestampOption { + v := ctx.Value(arrowBatchesTimestampOption) + if v == nil { + return UseNanosecondTimestamp + } + o, ok := v.(snowflakeArrowBatchesTimestampOption) + if !ok { + return UseNanosecondTimestamp + } + return o +} + func arrowToRecord(ctx context.Context, record arrow.Record, pool memory.Allocator, rowType []execResponseRowType, loc *time.Location) (arrow.Record, error) { - useOriginalTimestamp := originalTimestampEnabled(ctx) + arrowBatchesTimestampOption := getArrowBatchesTimestampOption(ctx) + higherPrecisionEnabled := higherPrecisionEnabled(ctx) - s, err := recordToSchema(record.Schema(), rowType, loc, useOriginalTimestamp) + s, err := recordToSchema(record.Schema(), rowType, loc, arrowBatchesTimestampOption, higherPrecisionEnabled) if err != nil { return nil, err } @@ -990,126 +2861,237 @@ func arrowToRecord(ctx context.Context, record arrow.Record, pool memory.Allocat ctxAlloc := compute.WithAllocator(ctx, pool) for i, col := range record.Columns() { - srcColumnMeta := rowType[i] + fieldMetadata := rowType[i].toFieldMetadata() - // TODO: confirm that it is okay to be using higher precision logic for conversions - newCol := col - snowflakeType := getSnowflakeType(srcColumnMeta.Type) - switch snowflakeType { - case fixedType: + newCol, err := arrowToRecordSingleColumn(ctxAlloc, s.Field(i), col, fieldMetadata, higherPrecisionEnabled, arrowBatchesTimestampOption, pool, loc, numRows) + if err != nil { + return nil, err + } + cols = append(cols, newCol) + defer newCol.Release() + } + newRecord := array.NewRecord(s, cols, numRows) + return newRecord, nil +} + +func arrowToRecordSingleColumn(ctx context.Context, field arrow.Field, col arrow.Array, fieldMetadata fieldMetadata, higherPrecisionEnabled bool, timestampOption snowflakeArrowBatchesTimestampOption, pool memory.Allocator, loc *time.Location, numRows int64) (arrow.Array, error) { + var err error + newCol := col + snowflakeType := getSnowflakeType(fieldMetadata.Type) + switch snowflakeType { + case fixedType: + if higherPrecisionEnabled { + // do nothing - return decimal as is + col.Retain() + } else if col.DataType().ID() == arrow.DECIMAL || col.DataType().ID() == arrow.DECIMAL256 { var toType arrow.DataType - if col.DataType().ID() == arrow.DECIMAL || col.DataType().ID() == arrow.DECIMAL256 { - if srcColumnMeta.Scale == 0 { - toType = arrow.PrimitiveTypes.Int64 - } else { - toType = arrow.PrimitiveTypes.Float64 - } - // we're fine truncating so no error for data loss here. - // so we use UnsafeCastOptions. - newCol, err = compute.CastArray(ctxAlloc, col, compute.UnsafeCastOptions(toType)) - if err != nil { - return nil, err - } - defer newCol.Release() - } else if srcColumnMeta.Scale != 0 { - result, err := compute.Divide(ctxAlloc, compute.ArithmeticOptions{NoCheckOverflow: true}, - &compute.ArrayDatum{Value: newCol.Data()}, - compute.NewDatum(math.Pow10(int(srcColumnMeta.Scale)))) - if err != nil { - return nil, err - } - defer result.Release() - newCol = result.(*compute.ArrayDatum).MakeArray() - defer newCol.Release() + if fieldMetadata.Scale == 0 { + toType = arrow.PrimitiveTypes.Int64 + } else { + toType = arrow.PrimitiveTypes.Float64 } - case timeType: - newCol, err = compute.CastArray(ctxAlloc, col, compute.SafeCastOptions(arrow.FixedWidthTypes.Time64ns)) + // we're fine truncating so no error for data loss here. + // so we use UnsafeCastOptions. + newCol, err = compute.CastArray(ctx, col, compute.UnsafeCastOptions(toType)) if err != nil { return nil, err } - defer newCol.Release() - case timestampNtzType, timestampLtzType, timestampTzType: - if useOriginalTimestamp { - // do nothing - return timestamp as is + } else if fieldMetadata.Scale != 0 && col.DataType().ID() != arrow.INT64 { + result, err := compute.Divide(ctx, compute.ArithmeticOptions{NoCheckOverflow: true}, + &compute.ArrayDatum{Value: newCol.Data()}, + compute.NewDatum(math.Pow10(int(fieldMetadata.Scale)))) + if err != nil { + return nil, err + } + defer result.Release() + newCol = result.(*compute.ArrayDatum).MakeArray() + } else if fieldMetadata.Scale != 0 && col.DataType().ID() == arrow.INT64 { + // gosnowflake driver uses compute.Divide() which could bring `integer value not in range: -9007199254740992 to 9007199254740992` error + // if we convert int64 to BigDecimal and then use compute.CastArray to convert BigDecimal to float64, we won't have enough precision. + // e.g 0.1 as (38,19) will result 0.09999999999999999 + values := col.(*array.Int64).Int64Values() + floatValues := make([]float64, len(values)) + for i, val := range values { + floatValues[i], _ = intToBigFloat(val, int64(fieldMetadata.Scale)).Float64() + } + builder := array.NewFloat64Builder(pool) + builder.AppendValues(floatValues, nil) + newCol = builder.NewArray() + builder.Release() + } else { + col.Retain() + } + case timeType: + newCol, err = compute.CastArray(ctx, col, compute.SafeCastOptions(arrow.FixedWidthTypes.Time64ns)) + if err != nil { + return nil, err + } + case timestampNtzType, timestampLtzType, timestampTzType: + if timestampOption == UseOriginalTimestamp { + // do nothing - return timestamp as is + col.Retain() + } else { + var unit arrow.TimeUnit + switch timestampOption { + case UseMicrosecondTimestamp: + unit = arrow.Microsecond + case UseMillisecondTimestamp: + unit = arrow.Millisecond + case UseSecondTimestamp: + unit = arrow.Second + case UseNanosecondTimestamp: + unit = arrow.Nanosecond + } + var tb *array.TimestampBuilder + if snowflakeType == timestampLtzType { + tb = array.NewTimestampBuilder(pool, &arrow.TimestampType{Unit: unit, TimeZone: loc.String()}) } else { - var tb *array.TimestampBuilder - if snowflakeType == timestampLtzType { - tb = array.NewTimestampBuilder(pool, &arrow.TimestampType{Unit: arrow.Nanosecond, TimeZone: loc.String()}) - } else { - tb = array.NewTimestampBuilder(pool, &arrow.TimestampType{Unit: arrow.Nanosecond}) - } - defer tb.Release() + tb = array.NewTimestampBuilder(pool, &arrow.TimestampType{Unit: unit}) + } + defer tb.Release() - for i := 0; i < int(numRows); i++ { - ts := arrowSnowflakeTimestampToTime(col, snowflakeType, int(srcColumnMeta.Scale), i, loc) - if ts != nil { - ar := arrow.Timestamp(ts.UnixNano()) + for i := 0; i < int(numRows); i++ { + ts := arrowSnowflakeTimestampToTime(col, snowflakeType, int(fieldMetadata.Scale), i, loc) + if ts != nil { + var ar arrow.Timestamp + switch timestampOption { + case UseMicrosecondTimestamp: + ar = arrow.Timestamp(ts.UnixMicro()) + case UseMillisecondTimestamp: + ar = arrow.Timestamp(ts.UnixMilli()) + case UseSecondTimestamp: + ar = arrow.Timestamp(ts.Unix()) + case UseNanosecondTimestamp: + ar = arrow.Timestamp(ts.UnixNano()) // in case of overflow in arrow timestamp return error - if ts.Year() != ar.ToTime(arrow.Nanosecond).Year() { + // this could only happen for nanosecond case + if ts.UTC().Year() != ar.ToTime(arrow.Nanosecond).Year() { return nil, &SnowflakeError{ Number: ErrTooHighTimestampPrecision, SQLState: SQLStateInvalidDataTimeFormat, - Message: fmt.Sprintf("Cannot convert timestamp %v in column %v to Arrow.Timestamp data type due to too high precision. Please use context with WithOriginalTimestamp.", ts.UTC(), srcColumnMeta.Name), + Message: fmt.Sprintf("Cannot convert timestamp %v in column %v to Arrow.Timestamp data type due to too high precision. Please use context with WithOriginalTimestamp.", ts.UTC(), fieldMetadata.Name), } } - tb.Append(ar) - } else { - tb.AppendNull() } + tb.Append(ar) + } else { + tb.AppendNull() } + } + newCol = tb.NewArray() + } + case textType: + if stringCol, ok := col.(*array.String); ok { + newCol = arrowStringRecordToColumn(ctx, stringCol, pool, numRows, fieldMetadata) + } + case objectType: + if structCol, ok := col.(*array.Struct); ok { + var internalCols []arrow.Array + for i := 0; i < structCol.NumField(); i++ { + internalCol := structCol.Field(i) + newInternalCol, err := arrowToRecordSingleColumn(ctx, field.Type.(*arrow.StructType).Field(i), internalCol, fieldMetadata.Fields[i], higherPrecisionEnabled, timestampOption, pool, loc, numRows) + if err != nil { + return nil, err + } + internalCols = append(internalCols, newInternalCol) + defer newInternalCol.Release() + } + var fieldNames []string + for _, f := range field.Type.(*arrow.StructType).Fields() { + fieldNames = append(fieldNames, f.Name) + } + nullBitmap := memory.NewBufferBytes(structCol.NullBitmapBytes()) + numberOfNulls := structCol.NullN() + return array.NewStructArrayWithNulls(internalCols, fieldNames, nullBitmap, numberOfNulls, 0) + } else if stringCol, ok := col.(*array.String); ok { + newCol = arrowStringRecordToColumn(ctx, stringCol, pool, numRows, fieldMetadata) + } + case arrayType: + if listCol, ok := col.(*array.List); ok { + newCol, err = arrowToRecordSingleColumn(ctx, field.Type.(*arrow.ListType).ElemField(), listCol.ListValues(), fieldMetadata.Fields[0], higherPrecisionEnabled, timestampOption, pool, loc, numRows) + if err != nil { + return nil, err + } + defer newCol.Release() + newData := array.NewData(arrow.ListOf(newCol.DataType()), listCol.Len(), listCol.Data().Buffers(), []arrow.ArrayData{newCol.Data()}, listCol.NullN(), 0) + defer newData.Release() + return array.NewListData(newData), nil + } else if stringCol, ok := col.(*array.String); ok { + newCol = arrowStringRecordToColumn(ctx, stringCol, pool, numRows, fieldMetadata) + } + case mapType: + if mapCol, ok := col.(*array.Map); ok { + keyCol, err := arrowToRecordSingleColumn(ctx, field.Type.(*arrow.MapType).KeyField(), mapCol.Keys(), fieldMetadata.Fields[0], higherPrecisionEnabled, timestampOption, pool, loc, numRows) + if err != nil { + return nil, err + } + defer keyCol.Release() + valueCol, err := arrowToRecordSingleColumn(ctx, field.Type.(*arrow.MapType).ItemField(), mapCol.Items(), fieldMetadata.Fields[1], higherPrecisionEnabled, timestampOption, pool, loc, numRows) + if err != nil { + return nil, err + } + defer valueCol.Release() - newCol = tb.NewArray() - defer newCol.Release() + structArr, err := array.NewStructArray([]arrow.Array{keyCol, valueCol}, []string{"k", "v"}) + if err != nil { + return nil, err } + defer structArr.Release() + newData := array.NewData(arrow.MapOf(keyCol.DataType(), valueCol.DataType()), mapCol.Len(), mapCol.Data().Buffers(), []arrow.ArrayData{structArr.Data()}, mapCol.NullN(), 0) + defer newData.Release() + return array.NewMapData(newData), nil + } else if stringCol, ok := col.(*array.String); ok { + newCol = arrowStringRecordToColumn(ctx, stringCol, pool, numRows, fieldMetadata) } - cols = append(cols, newCol) + default: + col.Retain() } - return array.NewRecord(s, cols, numRows), nil + return newCol, nil } -func recordToSchema(sc *arrow.Schema, rowType []execResponseRowType, loc *time.Location, useOriginalTimestamp bool) (*arrow.Schema, error) { - var fields []arrow.Field - for i := 0; i < len(sc.Fields()); i++ { - f := sc.Field(i) - srcColumnMeta := rowType[i] - converted := true +// returns n arrow array which will be new and populated if we converted the array to valid utf8 +// or if we didn't covnert it, it will return the original column. +func arrowStringRecordToColumn( + ctx context.Context, + stringCol *array.String, + mem memory.Allocator, + numRows int64, + fieldMetadata fieldMetadata, +) arrow.Array { + if arrowBatchesUtf8ValidationEnabled(ctx) && stringCol.DataType().ID() == arrow.STRING { + tb := array.NewStringBuilder(mem) + defer tb.Release() - var t arrow.DataType - switch getSnowflakeType(srcColumnMeta.Type) { - case fixedType: - switch f.Type.ID() { - case arrow.DECIMAL: - if srcColumnMeta.Scale == 0 { - t = &arrow.Int64Type{} - } else { - t = &arrow.Float64Type{} - } - default: - if srcColumnMeta.Scale != 0 { - t = &arrow.Float64Type{} - } else { - converted = false + for i := 0; i < int(numRows); i++ { + if stringCol.IsValid(i) { + stringValue := stringCol.Value(i) + if !utf8.ValidString(stringValue) { + logger.WithContext(ctx).Error("Invalid UTF-8 characters detected while reading query response, column: ", fieldMetadata.Name) + stringValue = strings.ToValidUTF8(stringValue, "�") } - } - case timeType: - t = &arrow.Time64Type{Unit: arrow.Nanosecond} - case timestampNtzType, timestampTzType: - if useOriginalTimestamp { - // do nothing - return timestamp as is - converted = false + tb.Append(stringValue) } else { - t = &arrow.TimestampType{Unit: arrow.Nanosecond} + tb.AppendNull() } - case timestampLtzType: - if useOriginalTimestamp { - // do nothing - return timestamp as is - converted = false - } else { - t = &arrow.TimestampType{Unit: arrow.Nanosecond, TimeZone: loc.String()} - } - default: - converted = false } + arr := tb.NewArray() + return arr + } + stringCol.Retain() + return stringCol +} + +func recordToSchema(sc *arrow.Schema, rowType []execResponseRowType, loc *time.Location, timestampOption snowflakeArrowBatchesTimestampOption, withHigherPrecision bool) (*arrow.Schema, error) { + fields := recordToSchemaRecursive(sc.Fields(), rowType, loc, timestampOption, withHigherPrecision) + meta := sc.Metadata() + return arrow.NewSchema(fields, &meta), nil +} + +func recordToSchemaRecursive(inFields []arrow.Field, rowType []execResponseRowType, loc *time.Location, timestampOption snowflakeArrowBatchesTimestampOption, withHigherPrecision bool) []arrow.Field { + var outFields []arrow.Field + for i, f := range inFields { + fieldMetadata := rowType[i].toFieldMetadata() + converted, t := recordToSchemaSingleField(fieldMetadata, f, withHigherPrecision, timestampOption, loc) newField := f if converted { @@ -1120,10 +3102,103 @@ func recordToSchema(sc *arrow.Schema, rowType []execResponseRowType, loc *time.L Metadata: f.Metadata, } } - fields = append(fields, newField) + outFields = append(outFields, newField) } - meta := sc.Metadata() - return arrow.NewSchema(fields, &meta), nil + return outFields +} + +func recordToSchemaSingleField(fieldMetadata fieldMetadata, f arrow.Field, withHigherPrecision bool, timestampOption snowflakeArrowBatchesTimestampOption, loc *time.Location) (bool, arrow.DataType) { + t := f.Type + converted := true + switch getSnowflakeType(fieldMetadata.Type) { + case fixedType: + switch f.Type.ID() { + case arrow.DECIMAL: + if withHigherPrecision { + converted = false + } else if fieldMetadata.Scale == 0 { + t = &arrow.Int64Type{} + } else { + t = &arrow.Float64Type{} + } + default: + if withHigherPrecision { + converted = false + } else if fieldMetadata.Scale != 0 { + t = &arrow.Float64Type{} + } else { + converted = false + } + } + case timeType: + t = &arrow.Time64Type{Unit: arrow.Nanosecond} + case timestampNtzType, timestampTzType: + if timestampOption == UseOriginalTimestamp { + // do nothing - return timestamp as is + converted = false + } else if timestampOption == UseMicrosecondTimestamp { + t = &arrow.TimestampType{Unit: arrow.Microsecond} + } else if timestampOption == UseMillisecondTimestamp { + t = &arrow.TimestampType{Unit: arrow.Millisecond} + } else if timestampOption == UseSecondTimestamp { + t = &arrow.TimestampType{Unit: arrow.Second} + } else { + t = &arrow.TimestampType{Unit: arrow.Nanosecond} + } + case timestampLtzType: + if timestampOption == UseOriginalTimestamp { + // do nothing - return timestamp as is + converted = false + } else if timestampOption == UseMicrosecondTimestamp { + t = &arrow.TimestampType{Unit: arrow.Microsecond, TimeZone: loc.String()} + } else if timestampOption == UseMillisecondTimestamp { + t = &arrow.TimestampType{Unit: arrow.Millisecond, TimeZone: loc.String()} + } else if timestampOption == UseSecondTimestamp { + t = &arrow.TimestampType{Unit: arrow.Second, TimeZone: loc.String()} + } else { + t = &arrow.TimestampType{Unit: arrow.Nanosecond, TimeZone: loc.String()} + } + case objectType: + converted = false + if f.Type.ID() == arrow.STRUCT { + var internalFields []arrow.Field + for idx, internalField := range f.Type.(*arrow.StructType).Fields() { + internalConverted, convertedDataType := recordToSchemaSingleField(fieldMetadata.Fields[idx], internalField, withHigherPrecision, timestampOption, loc) + converted = converted || internalConverted + if internalConverted { + newInternalField := arrow.Field{ + Name: internalField.Name, + Type: convertedDataType, + Metadata: internalField.Metadata, + Nullable: internalField.Nullable, + } + internalFields = append(internalFields, newInternalField) + } else { + internalFields = append(internalFields, internalField) + } + } + t = arrow.StructOf(internalFields...) + } + case arrayType: + if _, ok := f.Type.(*arrow.ListType); ok { + converted, dataType := recordToSchemaSingleField(fieldMetadata.Fields[0], f.Type.(*arrow.ListType).ElemField(), withHigherPrecision, timestampOption, loc) + if converted { + t = arrow.ListOf(dataType) + } + } else { + t = f.Type + } + case mapType: + convertedKey, keyDataType := recordToSchemaSingleField(fieldMetadata.Fields[0], f.Type.(*arrow.MapType).KeyField(), withHigherPrecision, timestampOption, loc) + convertedValue, valueDataType := recordToSchemaSingleField(fieldMetadata.Fields[1], f.Type.(*arrow.MapType).ItemField(), withHigherPrecision, timestampOption, loc) + converted = convertedKey || convertedValue + if converted { + t = arrow.MapOf(keyDataType, valueDataType) + } + default: + converted = false + } + return converted, t } // TypedNullTime is required to properly bind the null value with the snowflakeType as the Snowflake functions @@ -1148,3 +3223,32 @@ func convertTzTypeToSnowflakeType(tzType timezoneType) snowflakeType { } return unSupportedType } + +func getTimestampBindValue(x time.Time, stream bool, t snowflakeType) (string, error) { + if stream { + return x.Format(format), nil + } + return convertTimeToTimeStamp(x, t) +} + +func convertTimeToTimeStamp(x time.Time, t snowflakeType) (string, error) { + unixTime, _ := new(big.Int).SetString(fmt.Sprintf("%d", x.Unix()), 10) + m, ok := new(big.Int).SetString(strconv.FormatInt(1e9, 10), 10) + if !ok { + return "", errors.New("failed to parse big int from string: invalid format or unsupported characters") + } + + unixTime.Mul(unixTime, m) + tmNanos, _ := new(big.Int).SetString(fmt.Sprintf("%d", x.Nanosecond()), 10) + if t == timestampTzType { + _, offset := x.Zone() + return fmt.Sprintf("%v %v", unixTime.Add(unixTime, tmNanos), offset/60+1440), nil + } + return unixTime.Add(unixTime, tmNanos).String(), nil +} + +func decoderWithNumbersAsStrings(srcValue *string) *json.Decoder { + decoder := json.NewDecoder(bytes.NewBufferString(*srcValue)) + decoder.UseNumber() + return decoder +} diff --git a/vendor/github.com/snowflakedb/gosnowflake/datatype.go b/vendor/github.com/snowflakedb/gosnowflake/datatype.go index db61a90e..2dacdbd3 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/datatype.go +++ b/vendor/github.com/snowflakedb/gosnowflake/datatype.go @@ -1,5 +1,3 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -23,6 +21,7 @@ const ( timestampTzType objectType arrayType + mapType binaryType timeType booleanType @@ -31,6 +30,9 @@ const ( sliceType changeType unSupportedType + nilObjectType + nilArrayType + nilMapType ) var snowflakeToDriverType = map[string]snowflakeType{ @@ -44,6 +46,7 @@ var snowflakeToDriverType = map[string]snowflakeType{ "TIMESTAMP_TZ": timestampTzType, "OBJECT": objectType, "ARRAY": arrayType, + "MAP": mapType, "BINARY": binaryType, "TIME": timeType, "BOOLEAN": booleanType, @@ -104,6 +107,12 @@ var ( DataTypeTime = []byte{timeType.Byte()} // DataTypeBoolean is a BOOLEAN datatype. DataTypeBoolean = []byte{booleanType.Byte()} + // DataTypeNilObject represents a nil structured object. + DataTypeNilObject = []byte{nilObjectType.Byte()} + // DataTypeNilArray represents a nil structured array. + DataTypeNilArray = []byte{nilArrayType.Byte()} + // DataTypeNilMap represents a nil structured map. + DataTypeNilMap = []byte{nilMapType.Byte()} ) // dataTypeMode returns the subsequent data type in a string representation. @@ -122,6 +131,18 @@ func dataTypeMode(v driver.Value) (tsmode snowflakeType, err error) { tsmode = timestampTzType case bytes.Equal(bd, DataTypeBinary): tsmode = binaryType + case bytes.Equal(bd, DataTypeObject): + tsmode = objectType + case bytes.Equal(bd, DataTypeArray): + tsmode = arrayType + case bytes.Equal(bd, DataTypeVariant): + tsmode = variantType + case bytes.Equal(bd, DataTypeNilObject): + tsmode = nilObjectType + case bytes.Equal(bd, DataTypeNilArray): + tsmode = nilArrayType + case bytes.Equal(bd, DataTypeNilMap): + tsmode = nilMapType default: return nullType, fmt.Errorf(errMsgInvalidByteArray, v) } diff --git a/vendor/github.com/snowflakedb/gosnowflake/datetime.go b/vendor/github.com/snowflakedb/gosnowflake/datetime.go new file mode 100644 index 00000000..9e0369c5 --- /dev/null +++ b/vendor/github.com/snowflakedb/gosnowflake/datetime.go @@ -0,0 +1,148 @@ +package gosnowflake + +import ( + "errors" + "regexp" + "strconv" + "strings" + "time" +) + +var incorrectSecondsFractionRegex = regexp.MustCompile(`[^.,]FF`) +var correctSecondsFractionRegex = regexp.MustCompile(`FF(?P\d?)`) + +type formatReplacement struct { + input string + output string +} + +var formatReplacements = []formatReplacement{ + {input: "YYYY", output: "2006"}, + {input: "YY", output: "06"}, + {input: "MMMM", output: "January"}, + {input: "MM", output: "01"}, + {input: "MON", output: "Jan"}, + {input: "DD", output: "02"}, + {input: "DY", output: "Mon"}, + {input: "HH24", output: "15"}, + {input: "HH12", output: "03"}, + {input: "AM", output: "PM"}, + {input: "MI", output: "04"}, + {input: "SS", output: "05"}, + {input: "TZH", output: "Z07"}, + {input: "TZM", output: "00"}, +} + +func timeToString(t time.Time, dateTimeType string, params map[string]*string) (string, error) { + sfFormat, err := dateTimeInputFormatByType(dateTimeType, params) + if err != nil { + return "", err + } + goFormat, err := snowflakeFormatToGoFormat(sfFormat) + if err != nil { + return "", err + } + return t.Format(goFormat), nil +} + +func snowflakeFormatToGoFormat(sfFormat string) (string, error) { + res := sfFormat + for _, replacement := range formatReplacements { + res = strings.Replace(res, replacement.input, replacement.output, -1) + } + + if incorrectSecondsFractionRegex.MatchString(res) { + return "", errors.New("incorrect second fraction - golang requires fraction to be preceded by comma or decimal point") + } + for { + submatch := correctSecondsFractionRegex.FindStringSubmatch(res) + if submatch == nil { + break + } + fractionNumbers := 9 + if submatch[1] != "" { + var err error + fractionNumbers, err = strconv.Atoi(submatch[1]) + if err != nil { + return "", err + } + } + res = strings.Replace(res, submatch[0], strings.Repeat("0", fractionNumbers), -1) + } + return res, nil +} + +func dateTimeOutputFormatByType(dateTimeType string, params map[string]*string) (string, error) { + paramsMutex.Lock() + defer paramsMutex.Unlock() + var format *string + switch strings.ToLower(dateTimeType) { + case "date": + format = params["date_output_format"] + case "time": + format = params["time_output_format"] + case "timestamp_ltz": + format = params["timestamp_ltz_output_format"] + if format == nil || *format == "" { + format = params["timestamp_output_format"] + } + case "timestamp_tz": + format = params["timestamp_tz_output_format"] + if format == nil || *format == "" { + format = params["timestamp_output_format"] + } + case "timestamp_ntz": + format = params["timestamp_ntz_output_format"] + if format == nil || *format == "" { + format = params["timestamp_output_format"] + } + } + if format != nil { + return *format, nil + } + return "", errors.New("not known output format parameter for " + dateTimeType) +} + +func dateTimeInputFormatByType(dateTimeType string, params map[string]*string) (string, error) { + paramsMutex.Lock() + defer paramsMutex.Unlock() + var format *string + switch strings.ToLower(dateTimeType) { + case "date": + if format = params["date_input_format"]; format == nil || *format == "" { + format = params["date_output_format"] + } + case "time": + if format = params["time_input_format"]; format == nil || *format == "" { + format = params["time_output_format"] + } + case "timestamp_ltz": + if format = params["timestamp_ltz_input_format"]; format == nil || *format == "" { + if format = params["timestamp_input_format"]; format == nil || *format == "" { + if format = params["timestamp_ltz_output_format"]; format == nil || *format == "" { + format = params["timestamp_output_format"] + } + } + } + case "timestamp_tz": + if format = params["timestamp_tz_input_format"]; format == nil || *format == "" { + if format = params["timestamp_input_format"]; format == nil || *format == "" { + if format = params["timestamp_tz_output_format"]; format == nil || *format == "" { + format = params["timestamp_output_format"] + } + } + } + case "timestamp_ntz": + if format = params["timestamp_ntz_input_format"]; format == nil || *format == "" { + if format = params["timestamp_input_format"]; format == nil || *format == "" { + if format = params["timestamp_ntz_output_format"]; format == nil || *format == "" { + format = params["timestamp_output_format"] + } + } + } + } + if format != nil { + return *format, nil + } + return "", errors.New("not known input format parameter for " + dateTimeType) +} diff --git a/vendor/github.com/snowflakedb/gosnowflake/debug.go b/vendor/github.com/snowflakedb/gosnowflake/debug.go index 9fd5efce..c7c0808d 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/debug.go +++ b/vendor/github.com/snowflakedb/gosnowflake/debug.go @@ -1,5 +1,3 @@ -// Copyright (c) 2018-2022 Snowflake Computing Inc. All rights reserved. - //go:build sfdebug // +build sfdebug diff --git a/vendor/github.com/snowflakedb/gosnowflake/doc.go b/vendor/github.com/snowflakedb/gosnowflake/doc.go index caffeeda..a2e725f9 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/doc.go +++ b/vendor/github.com/snowflakedb/gosnowflake/doc.go @@ -90,9 +90,13 @@ The following connection parameters are supported: is 60 seconds. The login request gives up after the timeout length if the HTTP response is success. + - requestTimeout: Specifies the timeout, in seconds, for a query to complete. + 0 (zero) specifies that the driver should wait indefinitely. The default is 0 seconds. + The query request gives up after the timeout length if the HTTP response is success. + - authenticator: Specifies the authenticator to use for authenticating user credentials: - - To use the internal Snowflake authenticator, specify snowflake (Default). + - To use the internal Snowflake authenticator, specify snowflake (Default). If you want to cache your MFA logins, use AuthTypeUsernamePasswordMFA authenticator. - To authenticate through Okta, specify https://.okta.com (URL prefix for Okta). @@ -102,10 +106,12 @@ The following connection parameters are supported: - application: Identifies your application to Snowflake Support. - - insecureMode: false by default. Set to true to bypass the Online + - disableOCSPChecks: false by default. Set to true to bypass the Online Certificate Status Protocol (OCSP) certificate revocation check. IMPORTANT: Change the default value for testing or emergency situations only. + - insecureMode: deprecated. Use disableOCSPChecks instead. + - token: a token that can be used to authenticate. Should be used in conjunction with the "oauth" authenticator. - client_session_keep_alive: Set to true have a heartbeat in the background every hour to keep the connection alive @@ -126,6 +132,8 @@ The following connection parameters are supported: - clientConfigFile: specifies the location of the client configuration json file. In this file you can configure Easy Logging feature. + - disableSamlURLCheck: disables the SAML URL check. Default value is false. + All other parameters are interpreted as session parameters (https://docs.snowflake.com/en/sql-reference/parameters.html). For example, the TIMESTAMP_OUTPUT_FORMAT session parameter can be set by adding: @@ -143,6 +151,32 @@ Session-level parameters can also be set by using the SQL command "ALTER SESSION Alternatively, use OpenWithConfig() function to create a database handle with the specified Config. +# Connection Config + +You can also connect to your warehouse using the connection config. The dbSql library states that when you want to take advantage of driver-specific connection features that aren’t +available in a connection string. Each driver supports its own set of connection properties, often providing ways to customize the connection request specific to the DBMS +For example: + + c := &gosnowflake.Config{ + ~your credentials go here~ + } + connector := gosnowflake.NewConnector(gosnowflake.SnowflakeDriver{}, *c) + db := sql.OpenDB(connector) + +If you are using this method, you dont need to pass a driver name to specify the driver type in which +you are looking to connect. Since the driver name is not needed, you can optionally bypass driver registration +on startup. To do this, set `GOSNOWFLAKE_SKIP_REGISTERATION` in your environment. This is useful you wish to +register multiple verions of the driver. + +Note: `GOSNOWFLAKE_SKIP_REGISTERATION` should not be used if sql.Open() is used as the method +to connect to the server, as sql.Open will require registration so it can map the driver name +to the driver type, which in this case is "snowflake" and SnowflakeDriver{}. + +You can load the connnection configuration with .toml file format. +With two environment variables, `SNOWFLAKE_HOME` (`connections.toml` file directory) and `SNOWFLAKE_DEFAULT_CONNECTION_NAME` (DSN name), +the driver will search the config file and load the connection. You can find how to use this connection way at ./cmd/tomlfileconnection +or Snowflake doc: https://docs.snowflake.com/en/developer-guide/snowflake-cli-v2/connecting/specify-credentials + # Proxy The Go Snowflake Driver honors the environment variables HTTP_PROXY, HTTPS_PROXY and NO_PROXY for the forward proxy setting. @@ -167,6 +201,18 @@ Users can use SetLogger in driver.go to set a customized logger for gosnowflake In order to enable debug logging for the driver, user could use SetLogLevel("debug") in SFLogger interface as shown in demo code at cmd/logger.go. To redirect the logs SFlogger.SetOutput method could do the work. +If you want to define S3 client logging, override S3LoggingMode variable using configuration: https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws#ClientLogMode +Example: + + import ( + sf "github.com/snowflakedb/gosnowflake" + "github.com/aws/aws-sdk-go-v2/aws" + ) + + ... + + sf.S3LoggingMode = aws.LogRequest | aws.LogResponseWithBody | aws.LogRetries + # Query tag A custom query tag can be set in the context. Each query run with this context @@ -216,6 +262,32 @@ For execs: ``` +# Fetch Results by Query ID + +The result of your query can be retrieved by setting the query ID in the WithFetchResultByID context. +``` + + // Get the query ID using raw connection as mentioned above: + err := conn.Raw(func(x any) error { + rows1, err = x.(driver.QueryerContext).QueryContext(ctx, "SELECT 1", nil) + queryID = rows1.(sf.SnowflakeRows).GetQueryID() + return nil + } + + // Update the Context object to specify the query ID + fetchResultByIDCtx = sf.WithFetchResultByID(ctx, queryID) + + // Execute an empty string query + rows2, err := db.QueryContext(fetchResultByIDCtx, "") + + // Retrieve the results as usual + for rows2.Next() { + err = rows2.Scan(...) + ... + } + +``` + # Canceling Query by CtrlC From 0.5.0, a signal handling responsibility has moved to the applications. If you want to cancel a @@ -341,11 +413,13 @@ data types. The columns are: ------------------------------------------------------------------------------------------------------------------- BINARY | []byte | string | []byte ------------------------------------------------------------------------------------------------------------------- - ARRAY | string | string + ARRAY [6] | string / array | string / array ------------------------------------------------------------------------------------------------------------------- - OBJECT | string | string + OBJECT [6] | string / struct | string / struct ------------------------------------------------------------------------------------------------------------------- VARIANT | string | string + ------------------------------------------------------------------------------------------------------------------- + MAP | map | map [1] Converting from a higher precision data type to a lower precision data type via the snowflakeRows.Scan() method can lose low bits (lose precision), lose high bits (completely change the value), or result in error. @@ -362,8 +436,156 @@ data types. The columns are: [5] You cannot directly Scan() into the alternative data types via snowflakeRows.Scan(), but can convert to those data types by using .Float32()/.String()/.Float64() methods. For an example, see below. + [6] Arrays and objects can be either semistructured or structured, see more info in section below. + Note: SQL NULL values are converted to Golang nil values, and vice-versa. +# Semistructured and structured types + +Snowflake supports two flavours of "structured data" - semistructured and structured. +Semistructured types are variants, objects and arrays without schema. +When data is fetched, it's represented as strings and the client is responsible for its interpretation. +Example table definition: + + CREATE TABLE semistructured (v VARIANT, o OBJECT, a ARRAY) + +The data not have any corresponding schema, so values in table may be slightly different. + +Semistuctured variants, objects and arrays are always represented as strings for scanning: + + rows, err := db.Query("SELECT {'a': 'b'}::OBJECT") + // handle error + defer rows.Close() + rows.Next() + var v string + err := rows.Scan(&v) + +When inserting, a marker indicating correct type must be used, for example: + + db.Exec("CREATE TABLE test_object_binding (obj OBJECT)") + db.Exec("INSERT INTO test_object_binding SELECT (?)", DataTypeObject, "{'s': 'some string'}") + +Structured types differentiate from semistructured types by having specific schema. +In all rows of the table, values must conform to this schema. +Example table definition: + + CREATE TABLE structured (o OBJECT(s VARCHAR, i INTEGER), a ARRAY(INTEGER), m MAP(VARCHAR, BOOLEAN)) + +To retrieve structured objects, follow these steps: + +1. Create a struct implementing sql.Scanner interface, example: + +a) + + type simpleObject struct { + s string + i int32 + } + + func (so *simpleObject) Scan(val any) error { + st := val.(StructuredObject) + var err error + if so.s, err = st.GetString("s"); err != nil { + return err + } + if so.i, err = st.GetInt32("i"); err != nil { + return err + } + return nil + } + +b) + + type simpleObject struct { + S string `sf:"otherName"` + I int32 `sf:"i,ignore"` + } + + func (so *simpleObject) Scan(val any) error { + st := val.(StructuredObject) + return st.ScanTo(so) + } + +Automatic scan goes through all fields in a struct and read object fields. +Struct fields have to be public. +Embedded structs have to be pointers. +Matching name is built using struct field name with first letter lowercase. +Additionally, `sf` tag can be added: +- first value is always a name of a field in an SQL object +- additionally `ignore` parameter can be passed to omit this field + +2. Use WithStructuredTypesEnabled context while querying data. +3. Use it in regular scan: + + var res simpleObject + err := rows.Scan(&res) + +See StructuredObject for all available operations including null support, embedding nested structs, etc. + +Retrieving array of simple types works exactly the same like normal values - using Scan function. + +You can use WithMapValuesNullable and WithArrayValuesNullable contexts to handle null values in, respectively, maps +and arrays of simple types in the database. In that case, sql null types will be used: + + ctx := WithArrayValuesNullable(WithStructuredTypesEnabled(context.Background)) + ... + var res []sql.NullBool + err := rows.Scan(&res) + +If you want to scan array of structs, you have to use a helper function ScanArrayOfScanners: + + var res []*simpleObject + err := rows.Scan(ScanArrayOfScanners(&res)) + +Retrieving structured maps is very similar to retrieving arrays: + + var res map[string]*simpleObject + err := rows.Scan(ScanMapOfScanners(&res)) + +To bind structured objects use: + +1. Create a type which implements a StructuredObjectWriter interface, example: + +a) + + type simpleObject struct { + s string + i int32 + } + + func (so *simpleObject) Write(sowc StructuredObjectWriterContext) error { + if err := sowc.WriteString("s", so.s); err != nil { + return err + } + if err := sowc.WriteInt32("i", so.i); err != nil { + return err + } + return nil + } + +b) + + type simpleObject struct { + S string `sf:"otherName"` + I int32 `sf:"i,ignore"` + } + + func (so *simpleObject) Write(sowc StructuredObjectWriterContext) error { + return sowc.WriteAll(so) + } + +2. Use an instance as regular bind. +3. If you need to bind nil value, use special syntax: + + db.Exec('INSERT INTO some_table VALUES ?', sf.DataTypeNilObject, reflect.TypeOf(simpleObject{}) + +Binding structured arrays are like any other parameter. +The only difference is - if you want to insert empty array (not nil but empty), you have to use: + + db.Exec('INSERT INTO some_table VALUES ?', sf.DataTypeEmptyArray, reflect.TypeOf(simpleObject{})) + +# Using higher precision numbers + The following example shows how to retrieve very large values using the math/big package. This example retrieves a large INTEGER value to an interface and then extracts a big.Int value from that interface. If the value fits into an int64, @@ -429,6 +651,107 @@ of the returned value: } } +# Arrow batches + +You can retrieve data in a columnar format similar to the format a server returns, without transposing them to rows. +When working with the arrow columnar format in go driver, ArrowBatch structs are used. These are structs +mostly corresponding to data chunks received from the backend. They allow for access to specific arrow.Record structs. + +An ArrowBatch can exist in a state where the underlying data has not yet been loaded. The data is downloaded and +translated only on demand. Translation options are retrieved from a context.Context interface, which is either +passed from query context or set by the user using WithContext(ctx) method. + +In order to access them you must use `WithArrowBatches` context, similar to the following: + + var rows driver.Rows + err = conn.Raw(func(x interface{}) error { + rows, err = x.(driver.QueryerContext).QueryContext(ctx, query, nil) + return err + }) + + ... + + batches, err := rows.(sf.SnowflakeRows).GetArrowBatches() + + ... // use Arrow records + +This returns []*ArrowBatch. + +ArrowBatch functions: + +GetRowCount(): +Returns the number of rows in the ArrowBatch. Note that this returns 0 if the data has not yet been loaded, +irrespective of it’s actual size. + +WithContext(ctx context.Context): +Sets the context of the ArrowBatch to the one provided. Note that the context will not retroactively apply to data +that has already been downloaded. For example: + + records1, _ := batch.Fetch() + records2, _ := batch.WithContext(ctx).Fetch() + +will produce the same result in records1 and records2, irrespective of the newly provided ctx. Context worth noting are: +-WithArrowBatchesTimestampOption +-WithHigherPrecision +-WithArrowBatchesUtf8Validation +described in more detail later. + +Fetch(): +Returns the underlying records as *[]arrow.Record. When this function is called, the ArrowBatch checks whether +the underlying data has already been loaded, and downloads it if not. + +Limitations: + + 1. For some queries Snowflake may decide to return data in JSON format (examples: `SHOW PARAMETERS` or `ls @stage`). You cannot use JSON with Arrow batches context. See alternative below. + 2. Snowflake handles timestamps in a range which is broader than available space in Arrow timestamp type. Because of that special treatment should be used (see below). + 3. When using numbers, Snowflake chooses the smallest type that covers all values in a batch. So even when your column is NUMBER(38, 0), if all values are 8bits, array.Int8 is used. + +How to handle timestamps in Arrow batches: + +Snowflake returns timestamps natively (from backend to driver) in multiple formats. +The Arrow timestamp is an 8-byte data type, which is insufficient to handle the larger date and time ranges used by Snowflake. +Also, Snowflake supports 0-9 (nanosecond) digit precision for seconds, while Arrow supports only 3 (millisecond), 6 (microsecond), an 9 (nanosecond) precision. +Consequently, Snowflake uses a custom timestamp format in Arrow, which differs on timestamp type and precision. + +If you want to use timestamps in Arrow batches, you have two options: + + 1. The Go driver can reduce timestamp struct into simple Arrow Timestamp, if you set `WithArrowBatchesTimestampOption` to nanosecond, microsecond, millisecond or second. + For nanosecond, some timestamp values might not fit into Arrow timestamp. E.g after year 2262 or before 1677. + 2. You can use native Snowflake values. In that case you will receive complex structs as described above. To transform Snowflake values into the Golang time.Time struct you can use `ArrowSnowflakeTimestampToTime`. + To enable this feature, you must use `WithArrowBatchesTimestampOption` context with value set to`UseOriginalTimestamp`. + +How to handle invalid UTF-8 characters in Arrow batches: + +Snowflake previously allowed users to upload data with invalid UTF-8 characters. Consequently, Arrow records containing string columns in Snowflake could include these invalid UTF-8 characters. +However, according to the Arrow specifications (https://arrow.apache.org/docs/cpp/api/datatype.html +and https://github.com/apache/arrow/blob/a03d957b5b8d0425f9d5b6c98b6ee1efa56a1248/go/arrow/datatype.go#L73-L74), +Arrow string columns should only contain UTF-8 characters. + +To address this issue and prevent potential downstream disruptions, the context WithArrowBatchesUtf8Validation, is introduced. +When enabled, this feature iterates through all values in string columns, identifying and replacing any invalid characters with `�`. +This ensures that Arrow records conform to the UTF-8 standards, preventing validation failures in downstream services like the Rust Arrow library that impose strict validation checks. + +How to handle higher precision in Arrow batches: + +To preserve BigDecimal values within Arrow batches, use WithHigherPrecision. +This offers two main benefits: it helps avoid precision loss and defers the conversion to upstream services. +Alternatively, without this setting, all non-zero scale numbers will be converted to float64, potentially resulting in loss of precision. +Zero-scale numbers (DECIMAL256, DECIMAL128) will be converted to int64, which could lead to overflow. +WHen using NUMBERs with non zero scale, the value is returned as an integer type and a scale is provided in record metadata. +Example. When we have a 123.45 value that comes from NUMBER(9, 4), it will be represented as 1234500 with scale equal to 4. It is a client responsibility to interpret it correctly. +Also - see limitations section above. + +How to handle JSON responses in Arrow batches: + +Due to technical limitations Snowflake backend may return JSON even if client expects Arrow. +In that case Arrow batches are not available and the error with code ErrNonArrowResponseInArrowBatches is returned. +The response is parsed to regular rows. +You can read rows in a way described in transform_batches_to_rows.go example. +This has a very strong limitation though - this is a very low level API (Go driver API), so there are no conversions ready. +All values are returned as strings. +Alternative approach is to rerun a query, but without enabling Arrow batches and use a general Go SQL API instead of driver API. +It can be optimized by using `WithRequestID`, so backend returns results from cache. + # Binding Parameters Binding allows a SQL statement to use a value that is stored in a Golang variable. @@ -478,7 +801,7 @@ binds arrays to the parameters in the INSERT statement. _, err = db.Exec("insert into my_table values (?, ?, ?, ?)", Array(&intArray), Array(&fltArray), Array(&boolArray), Array(&strArray)) If the array contains SQL NULL values, use slice []interface{}, which allows Golang nil values. -This feature is available in version 1.6.12 (and later) of the driver. For exmaple, +This feature is available in version 1.6.12 (and later) of the driver. For example, // Define the arrays containing the data to insert. strArray := make([]interface{}, 3) @@ -506,7 +829,7 @@ This feature is available in version 1.6.12 (and later) of the driver. For exmap } For slices []interface{} containing time.Time values, a binding parameter flag is required for the preceding array variable in the Array() function. -This feature is available in version 1.6.13 (and later) of the driver. For exmaple, +This feature is available in version 1.6.13 (and later) of the driver. For example, _, err = db.Exec("create or replace table my_table(c1 timestamp_ntz, c2 timestamp_ltz)") _, err = db.Exec("insert into my_table values (?,?)", Array(&ntzArray, sf.TimestampNTZType), Array(<zArray, sf.TimestampLTZType)) @@ -917,7 +1240,7 @@ See the following for information on the syntax and supported parameters: - PUT: https://docs.snowflake.com/en/sql-reference/sql/put.html - GET: https://docs.snowflake.com/en/sql-reference/sql/get.html -## Using PUT +Using PUT: The following example shows how to run a PUT command by passing a string to the db.Query() function: @@ -953,7 +1276,7 @@ To send information from a stream (rather than a file) use code similar to the c Note: PUT statements are not supported for multi-statement queries. -## Using GET +Using GET: The following example shows how to run a GET command by passing a string to the db.Query() function: @@ -965,7 +1288,20 @@ an absolute path rather than a relative path. For example: db.Query("GET @~ file:///tmp/my_data_file auto_compress=false overwrite=false") -## Specifying temporary directory for encryption and compression +To download a file into an in-memory stream (rather than a file) use code similar to the code below. + + var streamBuf bytes.Buffer + ctx := WithFileTransferOptions(context.Background(), &SnowflakeFileTransferOptions{GetFileToStream: true}) + ctx = WithFileGetStream(ctx, &streamBuf) + + sql := "get @~/data1.txt.gz file:///tmp/testData" + dbt.mustExecContext(ctx, sql) + // streamBuf is now filled with the stream. Use bytes.NewReader(streamBuf.Bytes()) to read uncompressed stream or + // use gzip.NewReader(&streamBuf) for to read compressed stream. + +Note: GET statements are not supported for multi-statement queries. + +Specifying temporary directory for encryption and compression: Putting and getting requires compression and/or encryption, which is done in the OS temporary directory. If you cannot use default temporary directory for your OS or you want to specify it yourself, you can use "tmpDirPath" DSN parameter. @@ -974,9 +1310,20 @@ Example: u:p@a.r.c.snowflakecomputing.com/db/s?account=a.r.c&tmpDirPath=%2Fother%2Ftmp -## Using custom configuration for PUT/GET +Using custom configuration for PUT/GET: If you want to override some default configuration options, you can use `WithFileTransferOptions` context. There are multiple config parameters including progress bars or compression. + +# Surfacing errors originating from PUT and GET commands + +Default behaviour is to propagate the potential underlying errors encountered during executing calls associated with the PUT or GET commands to the caller, for increased awareness and easier handling or troubleshooting them. + +The behaviour is governed by the `RaisePutGetError` flag on `SnowflakeFileTransferOptions` (default: `true`) + +If you wish to ignore those errors instead, you can set `RaisePutGetError: false`. Example snippet: + + ctx := WithFileTransferOptions(context.Background(), &SnowflakeFileTransferOptions{RaisePutGetError: false}) + db.ExecContext(ctx, "PUT ...") */ package gosnowflake diff --git a/vendor/github.com/snowflakedb/gosnowflake/driver.go b/vendor/github.com/snowflakedb/gosnowflake/driver.go index 6a565be4..c8147a7d 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/driver.go +++ b/vendor/github.com/snowflakedb/gosnowflake/driver.go @@ -1,5 +1,3 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -7,6 +5,7 @@ import ( "database/sql" "database/sql/driver" "os" + "strings" "sync" ) @@ -17,29 +16,55 @@ type SnowflakeDriver struct{} // Open creates a new connection. func (d SnowflakeDriver) Open(dsn string) (driver.Conn, error) { + var cfg *Config + var err error logger.Info("Open") ctx := context.Background() - cfg, err := ParseDSN(dsn) + if dsn == "autoConfig" { + cfg, err = loadConnectionConfig() + } else { + cfg, err = ParseDSN(dsn) + } if err != nil { return nil, err } return d.OpenWithConfig(ctx, *cfg) } +// OpenConnector creates a new connector with parsed DSN. +func (d SnowflakeDriver) OpenConnector(dsn string) (driver.Connector, error) { + cfg, err := ParseDSN(dsn) + if err != nil { + return Connector{}, err + } + return NewConnector(d, *cfg), nil +} + // OpenWithConfig creates a new connection with the given Config. func (d SnowflakeDriver) OpenWithConfig(ctx context.Context, config Config) (driver.Conn, error) { if err := config.Validate(); err != nil { return nil, err } + if config.Params == nil { + config.Params = make(map[string]*string) + } if config.Tracing != "" { - logger.SetLogLevel(config.Tracing) + if err := logger.SetLogLevel(config.Tracing); err != nil { + return nil, err + } } - logger.Info("OpenWithConfig") + logger.WithContext(ctx).Info("OpenWithConfig") sc, err := buildSnowflakeConn(ctx, config) if err != nil { return nil, err } + if strings.HasSuffix(strings.ToLower(config.Host), cnDomain) { + logger.WithContext(ctx).Info("Connecting to CHINA Snowflake domain") + } else { + logger.WithContext(ctx).Info("Connecting to GLOBAL Snowflake domain") + } + if err = authenticateWithConfig(sc); err != nil { return nil, err } @@ -54,13 +79,25 @@ func runningOnGithubAction() bool { return os.Getenv("GITHUB_ACTIONS") != "" } +// GOSNOWFLAKE_SKIP_REGISTERATION is an environment variable which can be set client side to +// bypass dbSql driver registration. This should not be used if sql.Open() is used as the method +// to connect to the server, as sql.Open will require registration so it can map the driver name +// to the driver type, which in this case is "snowflake" and SnowflakeDriver{}. If you wish to call +// into multiple versions of the driver from one client, this is needed because calling register +// twice with the same name on init will cause the driver to panic. +func skipRegistration() bool { + return os.Getenv("GOSNOWFLAKE_SKIP_REGISTERATION") != "" +} + var logger = CreateDefaultLogger() func init() { - sql.Register("snowflake", &SnowflakeDriver{}) - logger.SetLogLevel("error") + if !skipRegistration() { + sql.Register("snowflake", &SnowflakeDriver{}) + } + _ = logger.SetLogLevel("error") if runningOnGithubAction() { - logger.SetLogLevel("fatal") + _ = logger.SetLogLevel("fatal") } paramsMutex = &sync.Mutex{} } diff --git a/vendor/github.com/snowflakedb/gosnowflake/dsn.go b/vendor/github.com/snowflakedb/gosnowflake/dsn.go index 341e8e2b..26cae259 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/dsn.go +++ b/vendor/github.com/snowflakedb/gosnowflake/dsn.go @@ -1,5 +1,3 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -25,8 +23,11 @@ const ( defaultRequestTimeout = 0 * time.Second // Timeout for retry for request EXCLUDING clientTimeout defaultJWTTimeout = 60 * time.Second defaultExternalBrowserTimeout = 120 * time.Second // Timeout for external browser login + defaultCloudStorageTimeout = -1 // Timeout for calling cloud storage. defaultMaxRetryCount = 7 // specifies maximum number of subsequent retries defaultDomain = ".snowflakecomputing.com" + cnDomain = ".snowflakecomputing.cn" + topLevelDomainPrefix = ".snowflakecomputing." // used to extract the domain from host ) // ConfigBool is a type to represent true or false in the Config @@ -51,6 +52,13 @@ type Config struct { Role string // Role Region string // Region + OauthClientID string // Client id for OAuth2 external IdP + OauthClientSecret string // Client secret for OAuth2 external IdP + OauthAuthorizationURL string // Authorization URL of Auth2 external IdP + OauthTokenRequestURL string // Token request URL of Auth2 external IdP + OauthRedirectURI string // Redirect URI registered in IdP. The default is http://127.0.0.1:/ + OauthScope string // Comma separated list of scopes. If empty it is derived from role. + // ValidateDefaultParameters disable the validation checks for Database, Schema, Warehouse and Role // at the time a connection is established ValidateDefaultParameters ConfigBool @@ -75,9 +83,12 @@ type Config struct { ClientTimeout time.Duration // Timeout for network round trip + read out http response JWTClientTimeout time.Duration // Timeout for network round trip + read out http response used when JWT token auth is taking place ExternalBrowserTimeout time.Duration // Timeout for external browser login + CloudStorageTimeout time.Duration // Timeout for a single call to a cloud storage provider MaxRetryCount int // Specifies how many times non-periodic HTTP request can be retried - Application string // application name. + Application string // application name. + DisableOCSPChecks bool // driver doesn't check certificate revocation status + // Deprecated: InsecureMode use DisableOCSPChecks instead InsecureMode bool // driver doesn't check certificate revocation status OCSPFailOpen OCSPFailOpenMode // OCSP Fail Open @@ -105,6 +116,10 @@ type Config struct { IncludeRetryReason ConfigBool // Should retried request contain retry reason ClientConfigFile string // File path to the client configuration json file + + DisableConsoleLogin ConfigBool // Indicates whether console login should be disabled + + DisableSamlURLCheck ConfigBool // Indicates whether the SAML URL check should be disabled } // Validate enables testing if config is correct. @@ -120,7 +135,7 @@ func (c *Config) Validate() error { // ocspMode returns the OCSP mode in string INSECURE, FAIL_OPEN, FAIL_CLOSED func (c *Config) ocspMode() string { - if c.InsecureMode { + if c.DisableOCSPChecks || c.InsecureMode { return ocspModeInsecure } else if c.OCSPFailOpen == ocspFailOpenNotSet || c.OCSPFailOpen == OCSPFailOpenTrue { // by default or set to true @@ -131,27 +146,32 @@ func (c *Config) ocspMode() string { // DSN constructs a DSN for Snowflake db. func DSN(cfg *Config) (dsn string, err error) { + if strings.ToLower(cfg.Region) == "us-west-2" { + cfg.Region = "" + } + // in case account includes region + region, posDot := extractRegionFromAccount(cfg.Account) + if strings.ToLower(region) == "us-west-2" { + region = "" + cfg.Account = cfg.Account[:posDot] + logger.Info("Ignoring default region .us-west-2 in DSN from Account configuration.") + } + if region != "" { + if cfg.Region != "" { + return "", errRegionConflict() + } + cfg.Region = region + cfg.Account = cfg.Account[:posDot] + } hasHost := true if cfg.Host == "" { hasHost = false - if cfg.Region == "us-west-2" { - cfg.Region = "" - } if cfg.Region == "" { cfg.Host = cfg.Account + defaultDomain } else { - cfg.Host = cfg.Account + "." + cfg.Region + defaultDomain + cfg.Host = buildHostFromAccountAndRegion(cfg.Account, cfg.Region) } } - // in case account includes region - posDot := strings.Index(cfg.Account, ".") - if posDot > 0 { - if cfg.Region != "" { - return "", errInvalidRegion() - } - cfg.Region = cfg.Account[posDot+1:] - cfg.Account = cfg.Account[:posDot] - } err = fillMissingConfigParameters(cfg) if err != nil { return "", err @@ -176,6 +196,24 @@ func DSN(cfg *Config) (dsn string, err error) { if cfg.Region != "" { params.Add("region", cfg.Region) } + if cfg.OauthClientID != "" { + params.Add("oauthClientId", cfg.OauthClientID) + } + if cfg.OauthClientSecret != "" { + params.Add("oauthClientSecret", cfg.OauthClientSecret) + } + if cfg.OauthAuthorizationURL != "" { + params.Add("oauthAuthorizationUrl", cfg.OauthAuthorizationURL) + } + if cfg.OauthTokenRequestURL != "" { + params.Add("oauthTokenRequestUrl", cfg.OauthTokenRequestURL) + } + if cfg.OauthRedirectURI != "" { + params.Add("oauthRedirectUri", cfg.OauthRedirectURI) + } + if cfg.OauthScope != "" { + params.Add("oauthScope", cfg.OauthScope) + } if cfg.Authenticator != AuthTypeSnowflake { if cfg.Authenticator == AuthTypeOkta { params.Add("authenticator", strings.ToLower(cfg.OktaURL.String())) @@ -207,6 +245,9 @@ func DSN(cfg *Config) (dsn string, err error) { if cfg.ExternalBrowserTimeout != defaultExternalBrowserTimeout { params.Add("externalBrowserTimeout", strconv.FormatInt(int64(cfg.ExternalBrowserTimeout/time.Second), 10)) } + if cfg.CloudStorageTimeout != defaultCloudStorageTimeout { + params.Add("cloudStorageTimeout", strconv.FormatInt(int64(cfg.CloudStorageTimeout/time.Second), 10)) + } if cfg.MaxRetryCount != defaultMaxRetryCount { params.Add("maxRetryCount", strconv.Itoa(cfg.MaxRetryCount)) } @@ -235,6 +276,9 @@ func DSN(cfg *Config) (dsn string, err error) { if cfg.InsecureMode { params.Add("insecureMode", strconv.FormatBool(cfg.InsecureMode)) } + if cfg.DisableOCSPChecks { + params.Add("disableOCSPChecks", strconv.FormatBool(cfg.DisableOCSPChecks)) + } if cfg.Tracing != "" { params.Add("tracing", cfg.Tracing) } @@ -262,6 +306,12 @@ func DSN(cfg *Config) (dsn string, err error) { if cfg.ClientConfigFile != "" { params.Add("clientConfigFile", cfg.ClientConfigFile) } + if cfg.DisableConsoleLogin != configBoolNotSet { + params.Add("disableConsoleLogin", strconv.FormatBool(cfg.DisableConsoleLogin != ConfigBoolFalse)) + } + if cfg.DisableSamlURLCheck != configBoolNotSet { + params.Add("disableSamlURLCheck", strconv.FormatBool(cfg.DisableSamlURLCheck != ConfigBoolFalse)) + } dsn = fmt.Sprintf("%v:%v@%v:%v", url.QueryEscape(cfg.User), url.QueryEscape(cfg.Password), cfg.Host, cfg.Port) if params.Encode() != "" { @@ -364,7 +414,7 @@ func ParseDSN(dsn string) (cfg *Config, err error) { return } } - if cfg.Account == "" && strings.HasSuffix(cfg.Host, defaultDomain) { + if cfg.Account == "" && hostIncludesTopLevelDomain(cfg.Host) { posDot := strings.Index(cfg.Host, ".") if posDot > 0 { cfg.Account = cfg.Host[:posDot] @@ -418,7 +468,7 @@ func ParseDSN(dsn string) (cfg *Config, err error) { func fillMissingConfigParameters(cfg *Config) error { posDash := strings.LastIndex(cfg.Account, "-") if posDash > 0 { - if strings.Contains(cfg.Host, ".global.") { + if strings.Contains(strings.ToLower(cfg.Host), ".global.") { cfg.Account = cfg.Account[:posDash] } } @@ -433,6 +483,14 @@ func fillMissingConfigParameters(cfg *Config) error { if authRequiresPassword(cfg) && strings.TrimSpace(cfg.Password) == "" { return errEmptyPassword() } + + if authRequiresEitherPasswordOrToken(cfg) && strings.TrimSpace(cfg.Password) == "" && strings.TrimSpace(cfg.Token) == "" { + return errEmptyPasswordAndToken() + } + + if authRequiresClientIDAndSecret(cfg) && (strings.TrimSpace(cfg.OauthClientID) == "" || strings.TrimSpace(cfg.OauthClientSecret) == "") { + return errEmptyOAuthParameters() + } if strings.Trim(cfg.Protocol, " ") == "" { cfg.Protocol = "https" } @@ -443,19 +501,24 @@ func fillMissingConfigParameters(cfg *Config) error { cfg.Region = strings.Trim(cfg.Region, " ") if cfg.Region != "" { // region is specified but not included in Host - i := strings.Index(cfg.Host, defaultDomain) + domain, i := extractDomainFromHost(cfg.Host) if i >= 1 { hostPrefix := cfg.Host[0:i] if !strings.HasSuffix(hostPrefix, cfg.Region) { - cfg.Host = hostPrefix + "." + cfg.Region + defaultDomain + cfg.Host = fmt.Sprintf("%v.%v%v", hostPrefix, cfg.Region, domain) } } } if cfg.Host == "" { if cfg.Region != "" { - cfg.Host = cfg.Account + "." + cfg.Region + defaultDomain + cfg.Host = cfg.Account + "." + cfg.Region + getDomainBasedOnRegion(cfg.Region) } else { - cfg.Host = cfg.Account + defaultDomain + region, _ := extractRegionFromAccount(cfg.Account) + if region != "" { + cfg.Host = cfg.Account + getDomainBasedOnRegion(region) + } else { + cfg.Host = cfg.Account + defaultDomain + } } } if cfg.LoginTimeout == 0 { @@ -476,6 +539,9 @@ func fillMissingConfigParameters(cfg *Config) error { if cfg.ExternalBrowserTimeout == 0 { cfg.ExternalBrowserTimeout = defaultExternalBrowserTimeout } + if cfg.CloudStorageTimeout == 0 { + cfg.CloudStorageTimeout = defaultCloudStorageTimeout + } if cfg.MaxRetryCount == 0 { cfg.MaxRetryCount = defaultMaxRetryCount } @@ -495,7 +561,8 @@ func fillMissingConfigParameters(cfg *Config) error { cfg.IncludeRetryReason = ConfigBoolTrue } - if strings.HasSuffix(cfg.Host, defaultDomain) && len(cfg.Host) == len(defaultDomain) { + domain, _ := extractDomainFromHost(cfg.Host) + if len(cfg.Host) == len(domain) { return &SnowflakeError{ Number: ErrCodeFailedToParseHost, Message: errMsgFailedToParseHost, @@ -505,31 +572,84 @@ func fillMissingConfigParameters(cfg *Config) error { return nil } +func extractDomainFromHost(host string) (domain string, index int) { + i := strings.LastIndex(strings.ToLower(host), topLevelDomainPrefix) + if i >= 1 { + domain = host[i:] + return domain, i + } + return "", i +} + +func getDomainBasedOnRegion(region string) string { + if strings.HasPrefix(strings.ToLower(region), "cn-") { + return cnDomain + } + return defaultDomain +} + +func extractRegionFromAccount(account string) (region string, posDot int) { + posDot = strings.Index(strings.ToLower(account), ".") + if posDot > 0 { + return account[posDot+1:], posDot + } + return "", posDot +} + +func hostIncludesTopLevelDomain(host string) bool { + return strings.Contains(strings.ToLower(host), topLevelDomainPrefix) +} + +func buildHostFromAccountAndRegion(account, region string) string { + return account + "." + region + getDomainBasedOnRegion(region) +} + func authRequiresUser(cfg *Config) bool { return cfg.Authenticator != AuthTypeOAuth && cfg.Authenticator != AuthTypeTokenAccessor && - cfg.Authenticator != AuthTypeExternalBrowser + cfg.Authenticator != AuthTypeExternalBrowser && + cfg.Authenticator != AuthTypePat && + cfg.Authenticator != AuthTypeOAuthAuthorizationCode && + cfg.Authenticator != AuthTypeOAuthClientCredentials } func authRequiresPassword(cfg *Config) bool { return cfg.Authenticator != AuthTypeOAuth && cfg.Authenticator != AuthTypeTokenAccessor && cfg.Authenticator != AuthTypeExternalBrowser && - cfg.Authenticator != AuthTypeJwt + cfg.Authenticator != AuthTypeJwt && + cfg.Authenticator != AuthTypePat && + cfg.Authenticator != AuthTypeOAuthAuthorizationCode && + cfg.Authenticator != AuthTypeOAuthClientCredentials +} + +func authRequiresEitherPasswordOrToken(cfg *Config) bool { + return cfg.Authenticator == AuthTypePat +} + +func authRequiresClientIDAndSecret(cfg *Config) bool { + return cfg.Authenticator == AuthTypeOAuthAuthorizationCode } -// transformAccountToHost transforms host to account name +// transformAccountToHost transforms account to host func transformAccountToHost(cfg *Config) (err error) { - if cfg.Port == 0 && !strings.HasSuffix(cfg.Host, defaultDomain) && cfg.Host != "" { + if cfg.Port == 0 && cfg.Host != "" && !hostIncludesTopLevelDomain(cfg.Host) { // account name is specified instead of host:port cfg.Account = cfg.Host - cfg.Host = cfg.Account + defaultDomain - cfg.Port = 443 - posDot := strings.Index(cfg.Account, ".") - if posDot > 0 { - cfg.Region = cfg.Account[posDot+1:] + region, posDot := extractRegionFromAccount(cfg.Account) + if strings.ToLower(region) == "us-west-2" { + region = "" + cfg.Account = cfg.Account[:posDot] + logger.Info("Ignoring default region .us-west-2 from Account configuration.") + } + if region != "" { + cfg.Region = region cfg.Account = cfg.Account[:posDot] + cfg.Host = buildHostFromAccountAndRegion(cfg.Account, cfg.Region) + } else { + cfg.Host = cfg.Account + defaultDomain } + cfg.Port = 443 } return nil } @@ -585,7 +705,14 @@ func parseParams(cfg *Config, posQuestion int, dsn string) (err error) { // parseDSNParams parses the DSN "query string". Values must be url.QueryEscape'ed func parseDSNParams(cfg *Config, params string) (err error) { logger.Infof("Query String: %v\n", params) - for _, v := range strings.Split(params, "&") { + paramsSlice := strings.Split(params, "&") + insecureModeIdx := findByPrefix(paramsSlice, "insecureMode") + disableOCSPChecksIdx := findByPrefix(paramsSlice, "disableOCSPChecks") + if insecureModeIdx > -1 && disableOCSPChecksIdx > -1 { + logger.Warn("duplicated insecureMode and disableOCSPChecks. disableOCSPChecks takes precedence") + paramsSlice = append(paramsSlice[:insecureModeIdx-1], paramsSlice[insecureModeIdx+1:]...) + } + for _, v := range paramsSlice { param := strings.SplitN(v, "=", 2) if len(param) != 2 { continue @@ -613,6 +740,18 @@ func parseDSNParams(cfg *Config, params string) (err error) { cfg.Protocol = value case "passcode": cfg.Passcode = value + case "oauthClientId": + cfg.OauthClientID = value + case "oauthClientSecret": + cfg.OauthClientSecret = value + case "oauthAuthorizationUrl": + cfg.OauthAuthorizationURL = value + case "oauthTokenRequestUrl": + cfg.OauthTokenRequestURL = value + case "oauthRedirectUri": + cfg.OauthRedirectURI = value + case "oauthScope": + cfg.OauthScope = value case "passcodeInPassword": var vv bool vv, err = strconv.ParseBool(value) @@ -650,6 +789,11 @@ func parseDSNParams(cfg *Config, params string) (err error) { if err != nil { return err } + case "cloudStorageTimeout": + cfg.CloudStorageTimeout, err = parseTimeout(value) + if err != nil { + return err + } case "maxRetryCount": cfg.MaxRetryCount, err = strconv.Atoi(value) if err != nil { @@ -663,12 +807,20 @@ func parseDSNParams(cfg *Config, params string) (err error) { return err } case "insecureMode": + logInsecureModeDeprecationInfo() var vv bool vv, err = strconv.ParseBool(value) if err != nil { return } cfg.InsecureMode = vv + case "disableOCSPChecks": + var vv bool + vv, err = strconv.ParseBool(value) + if err != nil { + return + } + cfg.DisableOCSPChecks = vv case "ocspFailOpen": var vv bool vv, err = strconv.ParseBool(value) @@ -754,16 +906,43 @@ func parseDSNParams(cfg *Config, params string) (err error) { } case "clientConfigFile": cfg.ClientConfigFile = value + case "disableConsoleLogin": + var vv bool + vv, err = strconv.ParseBool(value) + if err != nil { + return + } + if vv { + cfg.DisableConsoleLogin = ConfigBoolTrue + } else { + cfg.DisableConsoleLogin = ConfigBoolFalse + } + case "disableSamlURLCheck": + var vv bool + vv, err = strconv.ParseBool(value) + if err != nil { + return + } + if vv { + cfg.DisableSamlURLCheck = ConfigBoolTrue + } else { + cfg.DisableSamlURLCheck = ConfigBoolFalse + } default: if cfg.Params == nil { cfg.Params = make(map[string]*string) } - cfg.Params[param[0]] = &value + // handle session variables $variable=value + cfg.Params[urlDecodeIfNeeded(param[0])] = &value } } return } +func logInsecureModeDeprecationInfo() { + logger.Warn("insecureMode is deprecated. Use disableOCSPChecks instead.") +} + func parseTimeout(value string) (time.Duration, error) { var vv int64 var err error @@ -783,7 +962,8 @@ type ConfigParam struct { // GetConfigFromEnv is used to parse the environment variable values to specific fields of the Config func GetConfigFromEnv(properties []*ConfigParam) (*Config, error) { - var account, user, password, role, host, portStr, protocol, warehouse, database, schema, region, passcode, application string + var account, user, password, token, role, host, portStr, protocol, warehouse, database, schema, region, passcode, application string + var oauthClientID, oauthClientSecret, oauthAuthorizationURL, oauthTokenRequestURL, oauthRedirectURI, oauthScope string var privateKey *rsa.PrivateKey var err error if len(properties) == 0 || properties == nil { @@ -801,6 +981,8 @@ func GetConfigFromEnv(properties []*ConfigParam) (*Config, error) { user = value case "Password": password = value + case "Token": + token = value case "Role": role = value case "Host": @@ -826,6 +1008,20 @@ func GetConfigFromEnv(properties []*ConfigParam) (*Config, error) { if err != nil { return nil, err } + case "OAuthClientId": + oauthClientID = value + case "OAuthClientSecret": + oauthClientSecret = value + case "OAuthAuthorizationURL": + oauthAuthorizationURL = value + case "OAuthTokenRequestURL": + oauthTokenRequestURL = value + case "OAuthRedirectURI": + oauthRedirectURI = value + case "OAuthScope": + oauthScope = value + default: + return nil, errors.New("unknown property: " + prop.Name) } } @@ -838,20 +1034,28 @@ func GetConfigFromEnv(properties []*ConfigParam) (*Config, error) { } cfg := &Config{ - Account: account, - User: user, - Password: password, - Role: role, - Host: host, - Port: port, - Protocol: protocol, - Warehouse: warehouse, - Database: database, - Schema: schema, - PrivateKey: privateKey, - Region: region, - Passcode: passcode, - Application: application, + Account: account, + User: user, + Password: password, + Token: token, + Role: role, + Host: host, + Port: port, + Protocol: protocol, + Warehouse: warehouse, + Database: database, + Schema: schema, + PrivateKey: privateKey, + Region: region, + Passcode: passcode, + Application: application, + OauthClientID: oauthClientID, + OauthClientSecret: oauthClientSecret, + OauthAuthorizationURL: oauthAuthorizationURL, + OauthTokenRequestURL: oauthTokenRequestURL, + OauthRedirectURI: oauthRedirectURI, + OauthScope: oauthScope, + Params: map[string]*string{}, } return cfg, nil } @@ -875,3 +1079,19 @@ func parsePrivateKeyFromFile(path string) (*rsa.PrivateKey, error) { } return pk, nil } + +func extractAccountName(rawAccount string) string { + posDot := strings.Index(rawAccount, ".") + if posDot > 0 { + return strings.ToUpper(rawAccount[:posDot]) + } + return strings.ToUpper(rawAccount) +} + +func urlDecodeIfNeeded(param string) (decodedParam string) { + unescaped, err := url.QueryUnescape(param) + if err != nil { + return param + } + return unescaped +} diff --git a/vendor/github.com/snowflakedb/gosnowflake/easy_logging.go b/vendor/github.com/snowflakedb/gosnowflake/easy_logging.go index a4d782dc..3e6532a9 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/easy_logging.go +++ b/vendor/github.com/snowflakedb/gosnowflake/easy_logging.go @@ -2,22 +2,27 @@ package gosnowflake import ( "errors" + "fmt" "io" "os" "path" + "runtime" "strings" + "sync" ) type initTrials struct { everTriedToInitialize bool clientConfigFileInput string configureCounter int + mu sync.Mutex } var easyLoggingInitTrials = initTrials{ everTriedToInitialize: false, clientConfigFileInput: "", configureCounter: 0, + mu: sync.Mutex{}, } func (i *initTrials) setInitTrial(clientConfigFileInput string) { @@ -29,36 +34,42 @@ func (i *initTrials) increaseReconfigureCounter() { i.configureCounter++ } -func (i *initTrials) reset() { - i.everTriedToInitialize = false - i.clientConfigFileInput = "" - i.configureCounter = 0 -} - -//lint:ignore U1000 Ignore unused function func initEasyLogging(clientConfigFileInput string) error { + easyLoggingInitTrials.mu.Lock() + defer easyLoggingInitTrials.mu.Unlock() + if !allowedToInitialize(clientConfigFileInput) { + logger.Info("Skipping Easy Logging initialization as it is not allowed to initialize") return nil } - config, err := getClientConfig(clientConfigFileInput) + logger.Infof("Trying to initialize Easy Logging") + config, configPath, err := getClientConfig(clientConfigFileInput) if err != nil { + logger.Errorf("Failed to initialize Easy Logging, err: %s", err) return easyLoggingInitError(err) } if config == nil { + logger.Info("Easy Logging is disabled as no config has been found") easyLoggingInitTrials.setInitTrial(clientConfigFileInput) return nil } var logLevel string logLevel, err = getLogLevel(config.Common.LogLevel) if err != nil { + logger.Errorf("Failed to initialize Easy Logging, err: %s", err) return easyLoggingInitError(err) } var logPath string logPath, err = getLogPath(config.Common.LogPath) if err != nil { + logger.Errorf("Failed to initialize Easy Logging, err: %s", err) return easyLoggingInitError(err) } + logger.Infof("Initializing Easy Logging with logPath=%s and logLevel=%s from file: %s", logPath, logLevel, configPath) err = reconfigureEasyLogging(logLevel, logPath) + if err != nil { + logger.Errorf("Failed to initialize Easy Logging, err: %s", err) + } easyLoggingInitTrials.setInitTrial(clientConfigFileInput) easyLoggingInitTrials.increaseReconfigureCounter() return err @@ -125,8 +136,12 @@ func getLogLevel(logLevel string) (string, error) { func getLogPath(logPath string) (string, error) { logPathOrDefault := logPath if logPath == "" { - logPathOrDefault = os.TempDir() - logger.Warnf("LogPath in client config not found. Using temporary directory as a default value: %s", logPathOrDefault) + homeDir, err := os.UserHomeDir() + if err != nil { + return "", fmt.Errorf("user home directory is not accessible, err: %w", err) + } + logPathOrDefault = homeDir + logger.Warnf("LogPath in client config not found. Using user home directory as a default value: %s", logPathOrDefault) } pathWithGoSubdir := path.Join(logPathOrDefault, "go") exists, err := dirExists(pathWithGoSubdir) @@ -134,14 +149,36 @@ func getLogPath(logPath string) (string, error) { return "", err } if !exists { - err = os.MkdirAll(pathWithGoSubdir, 0755) + err = os.MkdirAll(pathWithGoSubdir, 0700) if err != nil { return "", err } } + logDirPermValid, perm, err := isDirAccessCorrect(pathWithGoSubdir) + if err != nil { + return "", err + } + if !logDirPermValid { + logger.Warnf("Log directory: %s could potentially be accessed by others. Directory chmod: 0%o", pathWithGoSubdir, *perm) + } return pathWithGoSubdir, nil } +func isDirAccessCorrect(dirPath string) (bool, *os.FileMode, error) { + if runtime.GOOS == "windows" { + return true, nil, nil + } + dirStat, err := os.Stat(dirPath) + if err != nil { + return false, nil, err + } + perm := dirStat.Mode().Perm() + if perm != 0700 { + return false, &perm, nil + } + return true, &perm, nil +} + func dirExists(dirPath string) (bool, error) { stat, err := os.Stat(dirPath) if err == nil { diff --git a/vendor/github.com/snowflakedb/gosnowflake/encrypt_util.go b/vendor/github.com/snowflakedb/gosnowflake/encrypt_util.go index 08179891..0958aa93 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/encrypt_util.go +++ b/vendor/github.com/snowflakedb/gosnowflake/encrypt_util.go @@ -1,5 +1,3 @@ -// Copyright (c) 2021-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -15,19 +13,12 @@ import ( "strconv" ) -type snowflakeFileEncryption struct { - QueryStageMasterKey string `json:"queryStageMasterKey,omitempty"` - QueryID string `json:"queryId,omitempty"` - SMKID int64 `json:"smkId,omitempty"` -} +const gcmIvLengthInBytes = 12 -// PUT requests return a single encryptionMaterial object whereas GET requests -// return a slice (array) of encryptionMaterial objects, both under the field -// 'encryptionMaterial' -type encryptionWrapper struct { - snowflakeFileEncryption - EncryptionMaterials []snowflakeFileEncryption -} +var ( + defaultKeyAad = make([]byte, 0) + defaultDataAad = make([]byte, 0) +) // override default behavior for wrapper func (ew *encryptionWrapper) UnmarshalJSON(data []byte) error { @@ -39,15 +30,9 @@ func (ew *encryptionWrapper) UnmarshalJSON(data []byte) error { return json.Unmarshal(data, &ew.snowflakeFileEncryption) } -type encryptMetadata struct { - key string - iv string - matdesc string -} - -// encryptStream encrypts a stream buffer using AES128 block cipher in CBC mode +// encryptStreamCBC encrypts a stream buffer using AES128 block cipher in CBC mode // with PKCS5 padding -func encryptStream( +func encryptStreamCBC( sfe *snowflakeFileEncryption, src io.Reader, out io.Writer, @@ -55,20 +40,20 @@ func encryptStream( if chunkSize == 0 { chunkSize = aes.BlockSize * 4 * 1024 } - decodedKey, err := base64.StdEncoding.DecodeString(sfe.QueryStageMasterKey) + kek, err := base64.StdEncoding.DecodeString(sfe.QueryStageMasterKey) if err != nil { return nil, err } - keySize := len(decodedKey) + keySize := len(kek) fileKey := getSecureRandom(keySize) block, err := aes.NewCipher(fileKey) if err != nil { return nil, err } - ivData := getSecureRandom(block.BlockSize()) + dataIv := getSecureRandom(block.BlockSize()) - mode := cipher.NewCBCEncrypter(block, ivData) + mode := cipher.NewCBCEncrypter(block, dataIv) cipherText := make([]byte, chunkSize) chunk := make([]byte, chunkSize) @@ -88,23 +73,24 @@ func encryptStream( } // make sure only n bytes of chunk is used mode.CryptBlocks(cipherText, chunk[:n]) - out.Write(cipherText[:n]) - } - if err != nil { - return nil, err + if _, err := out.Write(cipherText[:n]); err != nil { + return nil, err + } } // add padding if not yet added if !padded { padding := bytes.Repeat([]byte(string(rune(aes.BlockSize))), aes.BlockSize) mode.CryptBlocks(cipherText, padding) - out.Write(cipherText[:len(padding)]) + if _, err := out.Write(cipherText[:len(padding)]); err != nil { + return nil, err + } } // encrypt key with ECB fileKey = padBytesLength(fileKey, block.BlockSize()) encryptedFileKey := make([]byte, len(fileKey)) - if err = encryptECB(encryptedFileKey, fileKey, decodedKey); err != nil { + if err = encryptECB(encryptedFileKey, fileKey, kek); err != nil { return nil, err } @@ -120,7 +106,7 @@ func encryptStream( } return &encryptMetadata{ base64.StdEncoding.EncodeToString(encryptedFileKey), - base64.StdEncoding.EncodeToString(ivData), + base64.StdEncoding.EncodeToString(dataIv), matDescUnicode, }, nil } @@ -163,12 +149,12 @@ func decryptECB(decrypted []byte, keyBytes []byte, decodedKey []byte) error { return nil } -func encryptFile( +func encryptFileCBC( sfe *snowflakeFileEncryption, filename string, chunkSize int, tmpDir string) ( - *encryptMetadata, string, error) { + meta *encryptMetadata, fileName string, err error) { if chunkSize == 0 { chunkSize = aes.BlockSize * 4 * 1024 } @@ -176,75 +162,123 @@ func encryptFile( if err != nil { return nil, "", err } - defer tmpOutputFile.Close() + defer func() { + if tmpErr := tmpOutputFile.Close(); tmpErr != nil && err == nil { + err = tmpErr + } + }() infile, err := os.OpenFile(filename, os.O_CREATE|os.O_RDONLY, readWriteFileMode) if err != nil { return nil, "", err } - defer infile.Close() + defer func() { + if tmpErr := infile.Close(); tmpErr != nil && err == nil { + err = tmpErr + } + }() - meta, err := encryptStream(sfe, infile, tmpOutputFile, chunkSize) + meta, err = encryptStreamCBC(sfe, infile, tmpOutputFile, chunkSize) if err != nil { return nil, "", err } - return meta, tmpOutputFile.Name(), nil + return meta, tmpOutputFile.Name(), err } -func decryptFile( +func decryptFileKeyECB( metadata *encryptMetadata, - sfe *snowflakeFileEncryption, - filename string, - chunkSize int, - tmpDir string) ( - string, error) { - if chunkSize == 0 { - chunkSize = aes.BlockSize * 4 * 1024 - } + sfe *snowflakeFileEncryption) ([]byte, []byte, error) { decodedKey, err := base64.StdEncoding.DecodeString(sfe.QueryStageMasterKey) if err != nil { - return "", err + return nil, nil, err } keyBytes, err := base64.StdEncoding.DecodeString(metadata.key) // encrypted file key if err != nil { - return "", err + return nil, nil, err } ivBytes, err := base64.StdEncoding.DecodeString(metadata.iv) if err != nil { - return "", err + return nil, nil, err } // decrypt file key decryptedKey := make([]byte, len(keyBytes)) if err = decryptECB(decryptedKey, keyBytes, decodedKey); err != nil { - return "", err + return nil, nil, err } decryptedKey, err = paddingTrim(decryptedKey) if err != nil { - return "", err + return nil, nil, err } - // decrypt file + return decryptedKey, ivBytes, err +} + +func initCBC(decryptedKey []byte, ivBytes []byte) (cipher.BlockMode, error) { block, err := aes.NewCipher(decryptedKey) if err != nil { - return "", err + return nil, err } mode := cipher.NewCBCDecrypter(block, ivBytes) + return mode, err +} + +func decryptFileCBC( + metadata *encryptMetadata, + sfe *snowflakeFileEncryption, + filename string, + chunkSize int, + tmpDir string) (outputFileName string, err error) { tmpOutputFile, err := os.CreateTemp(tmpDir, baseName(filename)+"#") if err != nil { return "", err } - defer tmpOutputFile.Close() + defer func() { + if tmpErr := tmpOutputFile.Close(); tmpErr != nil && err == nil { + err = tmpErr + } + }() infile, err := os.Open(filename) if err != nil { return "", err } - defer infile.Close() + defer func() { + if tmpErr := infile.Close(); tmpErr != nil && err == nil { + err = tmpErr + } + }() + totalFileSize, err := decryptStreamCBC(metadata, sfe, chunkSize, infile, tmpOutputFile) + if err != nil { + return "", err + } + err = tmpOutputFile.Truncate(int64(totalFileSize)) + return tmpOutputFile.Name(), err +} + +// Returns decrypted file size and any error that happened during decryption. +func decryptStreamCBC( + metadata *encryptMetadata, + sfe *snowflakeFileEncryption, + chunkSize int, + src io.Reader, + out io.Writer) (int, error) { + if chunkSize == 0 { + chunkSize = aes.BlockSize * 4 * 1024 + } + decryptedKey, ivBytes, err := decryptFileKeyECB(metadata, sfe) + if err != nil { + return 0, err + } + mode, err := initCBC(decryptedKey, ivBytes) + if err != nil { + return 0, err + } + var totalFileSize int var prevChunk []byte for { chunk := make([]byte, chunkSize) - n, err := infile.Read(chunk) + n, err := src.Read(chunk) if n == 0 || err != nil { break } else if n%aes.BlockSize != 0 { @@ -255,16 +289,168 @@ func decryptFile( totalFileSize += n chunk = chunk[:n] mode.CryptBlocks(chunk, chunk) - tmpOutputFile.Write(chunk) + if _, err = out.Write(chunk); err != nil { + return 0, err + } prevChunk = chunk } if err != nil { - return "", err + return 0, err } if prevChunk != nil { totalFileSize -= paddingOffset(prevChunk) } - tmpOutputFile.Truncate(int64(totalFileSize)) + return totalFileSize, err +} + +func encryptGCM(iv []byte, plaintext []byte, encryptionKey []byte, aad []byte) ([]byte, error) { + aead, err := initGcm(encryptionKey) + if err != nil { + return nil, err + } + return aead.Seal(nil, iv, plaintext, aad), nil +} + +func decryptGCM(iv []byte, ciphertext []byte, encryptionKey []byte, aad []byte) ([]byte, error) { + aead, err := initGcm(encryptionKey) + if err != nil { + return nil, err + } + return aead.Open(nil, iv, ciphertext, aad) +} + +func initGcm(encryptionKey []byte) (cipher.AEAD, error) { + block, err := aes.NewCipher(encryptionKey) + if err != nil { + return nil, err + } + return cipher.NewGCM(block) +} + +func encryptFileGCM( + sfe *snowflakeFileEncryption, + filename string, + tmpDir string) ( + meta *gcmEncryptMetadata, outputFileName string, err error) { + tmpOutputFile, err := os.CreateTemp(tmpDir, baseName(filename)+"#") + if err != nil { + return nil, "", err + } + defer func() { + if tmpErr := tmpOutputFile.Close(); tmpErr != nil && err == nil { + err = tmpErr + } + }() + infile, err := os.OpenFile(filename, os.O_CREATE|os.O_RDONLY, readWriteFileMode) + if err != nil { + return nil, "", err + } + defer func() { + if tmpErr := infile.Close(); tmpErr != nil && err == nil { + err = tmpErr + } + }() + plaintext, err := os.ReadFile(filename) + if err != nil { + return nil, "", err + } + + kek, err := base64.StdEncoding.DecodeString(sfe.QueryStageMasterKey) + if err != nil { + return nil, "", err + } + keySize := len(kek) + fileKey := getSecureRandom(keySize) + keyIv := getSecureRandom(gcmIvLengthInBytes) + encryptedFileKey, err := encryptGCM(keyIv, fileKey, kek, defaultKeyAad) + if err != nil { + return nil, "", err + } + + dataIv := getSecureRandom(gcmIvLengthInBytes) + encryptedData, err := encryptGCM(dataIv, plaintext, fileKey, defaultDataAad) + if err != nil { + return nil, "", err + } + _, err = tmpOutputFile.Write(encryptedData) + if err != nil { + return nil, "", err + } + + matDesc := materialDescriptor{ + strconv.Itoa(int(sfe.SMKID)), + sfe.QueryID, + strconv.Itoa(keySize * 8), + } + + matDescUnicode, err := matdescToUnicode(matDesc) + if err != nil { + return nil, "", err + } + meta = &gcmEncryptMetadata{ + key: base64.StdEncoding.EncodeToString(encryptedFileKey), + keyIv: base64.StdEncoding.EncodeToString(keyIv), + dataIv: base64.StdEncoding.EncodeToString(dataIv), + keyAad: base64.StdEncoding.EncodeToString(defaultKeyAad), + dataAad: base64.StdEncoding.EncodeToString(defaultDataAad), + matdesc: matDescUnicode, + } + return meta, tmpOutputFile.Name(), nil +} + +func decryptFileGCM( + metadata *gcmEncryptMetadata, + sfe *snowflakeFileEncryption, + filename string, + tmpDir string) ( + string, error) { + kek, err := base64.StdEncoding.DecodeString(sfe.QueryStageMasterKey) + if err != nil { + return "", err + } + encryptedFileKey, err := base64.StdEncoding.DecodeString(metadata.key) + if err != nil { + return "", err + } + keyIv, err := base64.StdEncoding.DecodeString(metadata.keyIv) + if err != nil { + return "", err + } + keyAad, err := base64.StdEncoding.DecodeString(metadata.keyAad) + if err != nil { + return "", err + } + dataIv, err := base64.StdEncoding.DecodeString(metadata.dataIv) + if err != nil { + return "", err + } + dataAad, err := base64.StdEncoding.DecodeString(metadata.dataAad) + if err != nil { + return "", err + } + + fileKey, err := decryptGCM(keyIv, encryptedFileKey, kek, keyAad) + if err != nil { + return "", err + } + + ciphertext, err := os.ReadFile(filename) + if err != nil { + return "", err + } + plaintext, err := decryptGCM(dataIv, ciphertext, fileKey, dataAad) + if err != nil { + return "", err + } + + tmpOutputFile, err := os.CreateTemp(tmpDir, baseName(filename)+"#") + if err != nil { + return "", err + } + _, err = tmpOutputFile.Write(plaintext) + if err != nil { + return "", err + } return tmpOutputFile.Name(), nil } @@ -284,7 +470,10 @@ func matdescToUnicode(matdesc materialDescriptor) (string, error) { func getSecureRandom(byteLength int) []byte { token := make([]byte, byteLength) - rand.Read(token) + _, err := rand.Read(token) + if err != nil { + logger.Errorf("cannot init secure random. %v", err) + } return token } @@ -333,3 +522,32 @@ type encryptionData struct { ContentEncryptionIV string `json:"ContentEncryptionIV,omitempty"` KeyWrappingMetadata keyMetadata `json:"KeyWrappingMetadata,omitempty"` } + +type snowflakeFileEncryption struct { + QueryStageMasterKey string `json:"queryStageMasterKey,omitempty"` + QueryID string `json:"queryId,omitempty"` + SMKID int64 `json:"smkId,omitempty"` +} + +// PUT requests return a single encryptionMaterial object whereas GET requests +// return a slice (array) of encryptionMaterial objects, both under the field +// 'encryptionMaterial' +type encryptionWrapper struct { + snowflakeFileEncryption + EncryptionMaterials []snowflakeFileEncryption +} + +type encryptMetadata struct { + key string + iv string + matdesc string +} + +type gcmEncryptMetadata struct { + key string + keyIv string + dataIv string + keyAad string + dataAad string + matdesc string +} diff --git a/vendor/github.com/snowflakedb/gosnowflake/errors.go b/vendor/github.com/snowflakedb/gosnowflake/errors.go index b41ad272..a0b9d9ac 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/errors.go +++ b/vendor/github.com/snowflakedb/gosnowflake/errors.go @@ -1,5 +1,3 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -75,7 +73,7 @@ func (se *SnowflakeError) sendExceptionTelemetry(sc *snowflakeConn, data *teleme func (se *SnowflakeError) exceptionTelemetry(sc *snowflakeConn) *SnowflakeError { data := se.generateTelemetryExceptionData() if err := se.sendExceptionTelemetry(sc, data); err != nil { - logger.Debugf("failed to log to telemetry: %v", data) + logger.WithContext(sc.ctx).Debugf("failed to log to telemetry: %v", data) } return se } @@ -98,18 +96,29 @@ func populateErrorFields(code int, data *execResponse) *SnowflakeError { return err } +// Snowflake Server Error code +const ( + queryNotExecutingCode = "000605" + queryInProgressCode = "333333" + queryInProgressAsyncCode = "333334" + sessionExpiredCode = "390112" + invalidOAuthAccessTokenCode = "390303" + expiredOAuthAccessTokenCode = "390318" +) + +// Driver return errors const ( /* connection */ - // ErrCodeEmptyAccountCode is an error code for the case where a DNS doesn't include account parameter + // ErrCodeEmptyAccountCode is an error code for the case where a DSN doesn't include account parameter ErrCodeEmptyAccountCode = 260000 - // ErrCodeEmptyUsernameCode is an error code for the case where a DNS doesn't include user parameter + // ErrCodeEmptyUsernameCode is an error code for the case where a DSN doesn't include user parameter ErrCodeEmptyUsernameCode = 260001 - // ErrCodeEmptyPasswordCode is an error code for the case where a DNS doesn't include password parameter + // ErrCodeEmptyPasswordCode is an error code for the case where a DSN doesn't include password parameter ErrCodeEmptyPasswordCode = 260002 - // ErrCodeFailedToParseHost is an error code for the case where a DNS includes an invalid host name + // ErrCodeFailedToParseHost is an error code for the case where a DSN includes an invalid host name ErrCodeFailedToParseHost = 260003 - // ErrCodeFailedToParsePort is an error code for the case where a DNS includes an invalid port number + // ErrCodeFailedToParsePort is an error code for the case where a DSN includes an invalid port number ErrCodeFailedToParsePort = 260004 // ErrCodeIdpConnectionError is an error code for the case where a IDP connection failed ErrCodeIdpConnectionError = 260005 @@ -127,6 +136,18 @@ const ( ErrCodeFailedToParseAuthenticator = 260011 // ErrCodeClientConfigFailed is an error code for the case where clientConfigFile is invalid or applying client configuration fails ErrCodeClientConfigFailed = 260012 + // ErrCodeTomlFileParsingFailed is an error code for the case where parsing the toml file is failed because of invalid value. + ErrCodeTomlFileParsingFailed = 260013 + // ErrCodeFailedToFindDSNInToml is an error code for the case where the DSN does not exist in the toml file. + ErrCodeFailedToFindDSNInToml = 260014 + // ErrCodeInvalidFilePermission is an error code for the case where the user does not have 0600 permission to the toml file. + ErrCodeInvalidFilePermission = 260015 + // ErrCodeEmptyPasswordAndToken is an error code for the case where a DSN do includes neither password nor token + ErrCodeEmptyPasswordAndToken = 260016 + // ErrCodeEmptyOAuthParameters is an error code for the case where the client ID or client secret are not provided for OAuth flows. + ErrCodeEmptyOAuthParameters = 260017 + // ErrMissingAccessATokenButRefreshTokenPresent is an error code for the case when access token is not found in cache, but the refresh token is present. + ErrMissingAccessATokenButRefreshTokenPresent = 260018 /* network */ @@ -157,6 +178,8 @@ const ( // ErrFailedToGetChunk is an error code for the case where it failed to get chunk of result set ErrFailedToGetChunk = 262000 + // ErrNonArrowResponseInArrowBatches is an error code for case where ArrowBatches mode is enabled, but response is not Arrow-based + ErrNonArrowResponseInArrowBatches = 262001 /* transaction*/ @@ -213,13 +236,17 @@ const ( // ErrInvalidTimestampTz is an error code for the case where a returned TIMESTAMP_TZ internal value is invalid ErrInvalidTimestampTz = 268000 - // ErrInvalidOffsetStr is an error code for the case where a offset string is invalid. The input string must + // ErrInvalidOffsetStr is an error code for the case where an offset string is invalid. The input string must // consist of sHHMI where one sign character '+'/'-' followed by zero filled hours and minutes ErrInvalidOffsetStr = 268001 // ErrInvalidBinaryHexForm is an error code for the case where a binary data in hex form is invalid. ErrInvalidBinaryHexForm = 268002 // ErrTooHighTimestampPrecision is an error code for the case where cannot convert Snowflake timestamp to arrow.Timestamp ErrTooHighTimestampPrecision = 268003 + // ErrNullValueInArray is an error code for the case where there are null values in an array without arrayValuesNullable set to true + ErrNullValueInArray = 268004 + // ErrNullValueInMap is an error code for the case where there are null values in a map without mapValuesNullable set to true + ErrNullValueInMap = 268005 /* OCSP */ @@ -293,6 +320,12 @@ const ( errMsgQueryStatus = "server ErrorCode=%s, ErrorMessage=%s" errMsgInvalidPadding = "invalid padding on input" errMsgClientConfigFailed = "client configuration failed: %v" + errMsgNullValueInArray = "for handling null values in arrays use WithArrayValuesNullable(ctx)" + errMsgNullValueInMap = "for handling null values in maps use WithMapValuesNullable(ctx)" + errMsgFailedToParseTomlFile = "failed to parse toml file. the params %v occurred error with value %v" + errMsgFailedToFindDSNInTomlFile = "failed to find DSN in toml file." + errMsgInvalidPermissionToTomlFile = "file permissions different than read/write for user. Your Permission: %v" + errMsgNonArrowResponseInArrowBatches = "arrow batches enabled, but the response is not Arrow based" ) // Returned if a DNS doesn't include account parameter. @@ -319,8 +352,23 @@ func errEmptyPassword() *SnowflakeError { } } +func errEmptyPasswordAndToken() *SnowflakeError { + return &SnowflakeError{ + Number: ErrCodeEmptyPasswordAndToken, + Message: "both password and token are empty", + } +} + +// Returned if OAuth is used to authenticate but it is missing required fields. +func errEmptyOAuthParameters() *SnowflakeError { + return &SnowflakeError{ + Number: ErrCodeEmptyOAuthParameters, + Message: "client ID or client secret are empty", + } +} + // Returned if a DSN's implicit region from account parameter and explicit region parameter conflict. -func errInvalidRegion() *SnowflakeError { +func errRegionConflict() *SnowflakeError { return &SnowflakeError{ Number: ErrCodeRegionOverlap, Message: "two regions specified", @@ -344,3 +392,25 @@ func errUnknownError() *SnowflakeError { QueryID: "-1", } } + +func errNullValueInArray() *SnowflakeError { + return &SnowflakeError{ + Number: ErrNullValueInArray, + Message: errMsgNullValueInArray, + } +} + +func errNullValueInMap() *SnowflakeError { + return &SnowflakeError{ + Number: ErrNullValueInMap, + Message: errMsgNullValueInMap, + } +} + +func errNonArrowResponseForArrowBatches(queryID string) *SnowflakeError { + return &SnowflakeError{ + QueryID: queryID, + Number: ErrNonArrowResponseInArrowBatches, + Message: errMsgNonArrowResponseInArrowBatches, + } +} diff --git a/vendor/github.com/snowflakedb/gosnowflake/file_compression_type.go b/vendor/github.com/snowflakedb/gosnowflake/file_compression_type.go index 9b9f4b76..8542408f 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/file_compression_type.go +++ b/vendor/github.com/snowflakedb/gosnowflake/file_compression_type.go @@ -1,5 +1,3 @@ -// Copyright (c) 2021-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( diff --git a/vendor/github.com/snowflakedb/gosnowflake/file_transfer_agent.go b/vendor/github.com/snowflakedb/gosnowflake/file_transfer_agent.go index ae63f9a8..a4a426cf 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/file_transfer_agent.go +++ b/vendor/github.com/snowflakedb/gosnowflake/file_transfer_agent.go @@ -1,11 +1,10 @@ -// Copyright (c) 2021-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake //lint:file-ignore U1000 Ignore all unused code import ( "bytes" + "cmp" "context" "database/sql/driver" "encoding/json" @@ -24,7 +23,6 @@ import ( "time" "github.com/aws/aws-sdk-go-v2/service/s3" - "github.com/aws/smithy-go" "github.com/gabriel-vasile/mimetype" ) @@ -36,7 +34,6 @@ type ( const ( fileProtocol = "file://" dataSizeThreshold int64 = 64 * 1024 * 1024 - injectWaitPut = 0 isWindows = runtime.GOOS == "windows" mb float64 = 1024.0 * 1024.0 ) @@ -46,8 +43,8 @@ const ( downloadCommand commandType = "DOWNLOAD" unknownCommand commandType = "UNKNOWN" - putRegexp string = `(?i)^(?:/\*.*\*/\s*)*put\s+` - getRegexp string = `(?i)^(?:/\*.*\*/\s*)*get\s+` + putRegexp string = `(?i)^(?:/\*.*\*/\s*)*\s*put\s+` + getRegexp string = `(?i)^(?:/\*.*\*/\s*)*\s*get\s+` ) const ( @@ -91,6 +88,9 @@ type SnowflakeFileTransferOptions struct { /* streaming PUT */ compressSourceFromStream bool + /* streaming GET */ + GetFileToStream bool + /* PUT */ putCallback *snowflakeProgressPercentage putAzureCallback *snowflakeProgressPercentage @@ -103,6 +103,7 @@ type SnowflakeFileTransferOptions struct { } type snowflakeFileTransferAgent struct { + ctx context.Context sc *snowflakeConn data *execResponseData command string @@ -124,6 +125,7 @@ type snowflakeFileTransferAgent struct { useAccelerateEndpoint bool presignedURLs []string options *SnowflakeFileTransferOptions + streamBuffer *bytes.Buffer } func (sfa *snowflakeFileTransferAgent) execute() error { @@ -411,6 +413,7 @@ func (sfa *snowflakeFileTransferAgent) initFileMetadata() error { name: baseName(fileName), srcFileName: fileName, dstFileName: dstFileName, + dstStream: new(bytes.Buffer), stageLocationType: sfa.stageLocationType, stageInfo: sfa.stageInfo, localLocation: sfa.localLocation, @@ -465,7 +468,9 @@ func (sfa *snowflakeFileTransferAgent) processFileCompressionType() error { if err != nil { return err } - io.ReadAll(r) // flush out tee buffer + if _, err = io.ReadAll(r); err != nil { // flush out tee buffer + return err + } } else { mtype, err = mimetype.DetectFile(fileName) if err != nil { @@ -585,41 +590,58 @@ func (sfa *snowflakeFileTransferAgent) updateFileMetadataWithPresignedURL() erro return nil } +type s3BucketAccelerateConfigGetter interface { + GetBucketAccelerateConfiguration(ctx context.Context, params *s3.GetBucketAccelerateConfigurationInput, optFns ...func(*s3.Options)) (*s3.GetBucketAccelerateConfigurationOutput, error) +} + +type s3ClientCreator interface { + extractBucketNameAndPath(location string) (*s3Location, error) + createClientWithConfig(info *execResponseStageInfo, useAccelerateEndpoint bool, cfg *Config) (cloudClient, error) +} + +func (sfa *snowflakeFileTransferAgent) transferAccelerateConfigWithUtil(s3Util s3ClientCreator) error { + s3Loc, err := s3Util.extractBucketNameAndPath(sfa.stageInfo.Location) + if err != nil { + return err + } + s3Cli, err := s3Util.createClientWithConfig(sfa.stageInfo, false, sfa.sc.cfg) + if err != nil { + return err + } + client, ok := s3Cli.(s3BucketAccelerateConfigGetter) + if !ok { + return (&SnowflakeError{ + Number: ErrFailedToConvertToS3Client, + SQLState: sfa.data.SQLState, + QueryID: sfa.data.QueryID, + Message: errMsgFailedToConvertToS3Client, + }).exceptionTelemetry(sfa.sc) + } + ret, err := withCloudStorageTimeout(sfa.sc.cfg, func(ctx context.Context) (*s3.GetBucketAccelerateConfigurationOutput, error) { + return client.GetBucketAccelerateConfiguration(ctx, &s3.GetBucketAccelerateConfigurationInput{ + Bucket: &s3Loc.bucketName, + }) + }) + sfa.useAccelerateEndpoint = ret != nil && ret.Status == "Enabled" + if err != nil { + logger.WithContext(sfa.sc.ctx).Warnln("An error occurred when getting accelerate config:", err) + } + return nil +} + +func withCloudStorageTimeout[T any](cfg *Config, f func(ctx context.Context) (T, error)) (T, error) { + if cfg.CloudStorageTimeout > 0 { + ctx, cancelFunc := context.WithTimeout(context.Background(), cfg.CloudStorageTimeout) + defer cancelFunc() + return f(ctx) + } + return f(context.Background()) +} + func (sfa *snowflakeFileTransferAgent) transferAccelerateConfig() error { if sfa.stageLocationType == s3Client { s3Util := new(snowflakeS3Client) - s3Loc, err := s3Util.extractBucketNameAndPath(sfa.stageInfo.Location) - if err != nil { - return err - } - s3Cli, err := s3Util.createClient(sfa.stageInfo, false) - if err != nil { - return err - } - client, ok := s3Cli.(*s3.Client) - if !ok { - return (&SnowflakeError{ - Number: ErrFailedToConvertToS3Client, - SQLState: sfa.data.SQLState, - QueryID: sfa.data.QueryID, - Message: errMsgFailedToConvertToS3Client, - }).exceptionTelemetry(sfa.sc) - } - ret, err := client.GetBucketAccelerateConfiguration(context.Background(), &s3.GetBucketAccelerateConfigurationInput{ - Bucket: &s3Loc.bucketName, - }) - sfa.useAccelerateEndpoint = ret != nil && ret.Status == "Enabled" - if err != nil { - var ae smithy.APIError - if errors.As(err, &ae) { - if ae.ErrorCode() == "AccessDenied" { - return nil - } else if ae.ErrorCode() == "MethodNotAllowed" { - return nil - } - } - return err - } + return sfa.transferAccelerateConfigWithUtil(s3Util) } return nil } @@ -669,7 +691,7 @@ func (sfa *snowflakeFileTransferAgent) upload( largeFileMetadata []*fileMetadata, smallFileMetadata []*fileMetadata) error { client, err := sfa.getStorageClient(sfa.stageLocationType). - createClient(sfa.stageInfo, sfa.useAccelerateEndpoint) + createClient(sfa.stageInfo, sfa.useAccelerateEndpoint, sfa.sc.cfg) if err != nil { return err } @@ -681,13 +703,13 @@ func (sfa *snowflakeFileTransferAgent) upload( } if len(smallFileMetadata) > 0 { - logger.Infof("uploading %v small files", len(smallFileMetadata)) + logger.WithContext(sfa.sc.ctx).Infof("uploading %v small files", len(smallFileMetadata)) if err = sfa.uploadFilesParallel(smallFileMetadata); err != nil { return err } } if len(largeFileMetadata) > 0 { - logger.Infof("uploading %v large files", len(largeFileMetadata)) + logger.WithContext(sfa.sc.ctx).Infof("uploading %v large files", len(largeFileMetadata)) if err = sfa.uploadFilesSequential(largeFileMetadata); err != nil { return err } @@ -698,7 +720,7 @@ func (sfa *snowflakeFileTransferAgent) upload( func (sfa *snowflakeFileTransferAgent) download( fileMetadata []*fileMetadata) error { client, err := sfa.getStorageClient(sfa.stageLocationType). - createClient(sfa.stageInfo, sfa.useAccelerateEndpoint) + createClient(sfa.stageInfo, sfa.useAccelerateEndpoint, sfa.sc.cfg) if err != nil { return err } @@ -787,7 +809,9 @@ func (sfa *snowflakeFileTransferAgent) uploadFilesParallel(fileMetas []*fileMeta for _, result := range retryMeta { if result.resStatus == renewPresignedURL { - sfa.updateFileMetadataWithPresignedURL() + if err = sfa.updateFileMetadataWithPresignedURL(); err != nil { + return err + } break } } @@ -820,15 +844,14 @@ func (sfa *snowflakeFileTransferAgent) uploadFilesSequential(fileMetas []*fileMe } continue } else if res.resStatus == renewPresignedURL { - sfa.updateFileMetadataWithPresignedURL() + if err = sfa.updateFileMetadataWithPresignedURL(); err != nil { + return err + } continue } sfa.results = append(sfa.results, res) idx++ - if injectWaitPut > 0 { - time.Sleep(injectWaitPut) - } } return nil } @@ -843,26 +866,17 @@ func (sfa *snowflakeFileTransferAgent) uploadOneFile(meta *fileMetadata) (*fileM defer os.RemoveAll(tmpDir) // cleanup fileUtil := new(snowflakeFileUtil) - if meta.requireCompress { - if meta.srcStream != nil { - meta.realSrcStream, _, err = fileUtil.compressFileWithGzipFromStream(&meta.srcStream) - } else { - meta.realSrcFileName, _, err = fileUtil.compressFileWithGzip(meta.srcFileName, tmpDir) - } - if err != nil { - return nil, err - } + err = compressDataIfRequired(meta, fileUtil, tmpDir) + if err != nil { + return meta, err } - if meta.srcStream != nil { - if meta.realSrcStream != nil { - meta.sha256Digest, meta.uploadSize, err = fileUtil.getDigestAndSizeForStream(&meta.realSrcStream) - } else { - meta.sha256Digest, meta.uploadSize, err = fileUtil.getDigestAndSizeForStream(&meta.srcStream) - } - } else { - meta.sha256Digest, meta.uploadSize, err = fileUtil.getDigestAndSizeForFile(meta.realSrcFileName) + err = updateUploadSize(meta, fileUtil) + if err != nil { + return meta, err } + + err = encryptDataIfRequired(meta, sfa.stageLocationType) if err != nil { return meta, err } @@ -935,7 +949,9 @@ func (sfa *snowflakeFileTransferAgent) downloadFilesParallel(fileMetas []*fileMe for _, result := range retryMeta { if result.resStatus == renewPresignedURL { - sfa.updateFileMetadataWithPresignedURL() + if err = sfa.updateFileMetadataWithPresignedURL(); err != nil { + return err + } break } } @@ -962,7 +978,7 @@ func (sfa *snowflakeFileTransferAgent) downloadOneFile(meta *fileMetadata) (*fil if !meta.resStatus.isSet() { meta.resStatus = errStatus } - meta.errorDetails = fmt.Errorf(err.Error() + ", file=" + meta.dstFileName) + meta.errorDetails = errors.New(err.Error() + ", file=" + meta.dstFileName) return meta, err } return meta, nil @@ -972,7 +988,9 @@ func (sfa *snowflakeFileTransferAgent) getStorageClient(stageLocationType cloudT if stageLocationType == local { return &localUtil{} } else if stageLocationType == s3Client || stageLocationType == azureClient || stageLocationType == gcsClient { - return &remoteStorageUtil{} + return &remoteStorageUtil{ + cfg: sfa.sc.cfg, + } } return nil } @@ -989,7 +1007,7 @@ func (sfa *snowflakeFileTransferAgent) renewExpiredClient() (cloudClient, error) return nil, err } storageClient := sfa.getStorageClient(sfa.stageLocationType) - return storageClient.createClient(&data.Data.StageInfo, sfa.useAccelerateEndpoint) + return storageClient.createClient(&data.Data.StageInfo, sfa.useAccelerateEndpoint, sfa.sc.cfg) } func (sfa *snowflakeFileTransferAgent) result() (*execResponse, error) { @@ -1193,7 +1211,60 @@ func (spp *snowflakeProgressPercentage) updateProgress(filename string, startTim if status != "" { block := int(math.Round(float64(barLength) * progress)) text := fmt.Sprintf("\r%v(%.2fMB): [%v] %.2f%% %v ", filename, totalSize, strings.Repeat("#", block)+strings.Repeat("-", barLength-block), progress*100, status) - (*outputStream).Write([]byte(text)) + _, err := (*outputStream).Write([]byte(text)) + if err != nil { + logger.Warn("cannot write status of progress. %v", err) + } } return progress == 1.0 } + +func compressDataIfRequired(meta *fileMetadata, fileUtil *snowflakeFileUtil, tmpDir string) error { + var err error + if meta.requireCompress { + if meta.srcStream != nil { + meta.realSrcStream, _, err = fileUtil.compressFileWithGzipFromStream(&meta.srcStream) + } else { + meta.realSrcFileName, _, err = fileUtil.compressFileWithGzip(meta.srcFileName, tmpDir) + } + } + return err +} + +func updateUploadSize(meta *fileMetadata, fileUtil *snowflakeFileUtil) error { + var err error + if meta.srcStream != nil { + if meta.realSrcStream != nil { + meta.sha256Digest, meta.uploadSize, err = fileUtil.getDigestAndSizeForStream(&meta.realSrcStream) + } else { + meta.sha256Digest, meta.uploadSize, err = fileUtil.getDigestAndSizeForStream(&meta.srcStream) + } + } else { + meta.sha256Digest, meta.uploadSize, err = fileUtil.getDigestAndSizeForFile(meta.realSrcFileName) + } + return err +} + +func encryptDataIfRequired(meta *fileMetadata, ct cloudType) error { + if ct != local && meta.encryptionMaterial != nil { + var err error + if meta.srcStream != nil { + var encryptedStream bytes.Buffer + srcStream := cmp.Or(meta.realSrcStream, meta.srcStream) + meta.encryptMeta, err = encryptStreamCBC(meta.encryptionMaterial, srcStream, &encryptedStream, 0) + if err != nil { + return err + } + meta.realSrcStream = &encryptedStream + } else { + var dataFile string + meta.encryptMeta, dataFile, err = encryptFileCBC(meta.encryptionMaterial, meta.realSrcFileName, 0, meta.tmpDir) + if err != nil { + return err + } + meta.realSrcFileName = dataFile + } + } + + return nil +} diff --git a/vendor/github.com/snowflakedb/gosnowflake/file_util.go b/vendor/github.com/snowflakedb/gosnowflake/file_util.go index 13740bb8..497cab10 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/file_util.go +++ b/vendor/github.com/snowflakedb/gosnowflake/file_util.go @@ -1,5 +1,3 @@ -// Copyright (c) 2021-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -31,33 +29,48 @@ func (util *snowflakeFileUtil) compressFileWithGzipFromStream(srcStream **bytes. } var c bytes.Buffer w := gzip.NewWriter(&c) - w.Write(buf) // write buf to gzip writer - w.Close() + if _, err := w.Write(buf); err != nil { // write buf to gzip writer + return nil, -1, err + } + if err := w.Close(); err != nil { + return nil, -1, err + } return &c, c.Len(), nil } -func (util *snowflakeFileUtil) compressFileWithGzip(fileName string, tmpDir string) (string, int64, error) { +func (util *snowflakeFileUtil) compressFileWithGzip(fileName string, tmpDir string) (gzipFileName string, size int64, err error) { basename := baseName(fileName) - gzipFileName := filepath.Join(tmpDir, basename+"_c.gz") + gzipFileName = filepath.Join(tmpDir, basename+"_c.gz") fr, err := os.Open(fileName) if err != nil { return "", -1, err } - defer fr.Close() + defer func() { + if tmpErr := fr.Close(); tmpErr != nil { + err = tmpErr + } + }() fw, err := os.OpenFile(gzipFileName, os.O_WRONLY|os.O_CREATE, readWriteFileMode) if err != nil { return "", -1, err } gzw := gzip.NewWriter(fw) - defer gzw.Close() - io.Copy(gzw, fr) + defer func() { + if tmpErr := gzw.Close(); tmpErr != nil { + err = tmpErr + } + }() + _, err = io.Copy(gzw, fr) + if err != nil { + return "", -1, err + } stat, err := os.Stat(gzipFileName) if err != nil { return "", -1, err } - return gzipFileName, stat.Size(), nil + return gzipFileName, stat.Size(), err } func (util *snowflakeFileUtil) getDigestAndSizeForStream(stream **bytes.Buffer) (string, int64, error) { @@ -77,12 +90,16 @@ func (util *snowflakeFileUtil) getDigestAndSizeForStream(stream **bytes.Buffer) return base64.StdEncoding.EncodeToString(m.Sum(nil)), int64((*stream).Len()), nil } -func (util *snowflakeFileUtil) getDigestAndSizeForFile(fileName string) (string, int64, error) { +func (util *snowflakeFileUtil) getDigestAndSizeForFile(fileName string) (digest string, size int64, err error) { f, err := os.Open(fileName) if err != nil { return "", 0, err } - defer f.Close() + defer func() { + if tmpErr := f.Close(); tmpErr != nil { + err = tmpErr + } + }() var total int64 m := sha256.New() @@ -98,8 +115,10 @@ func (util *snowflakeFileUtil) getDigestAndSizeForFile(fileName string) (string, total += int64(n) m.Write(chunk[:n]) } - f.Seek(0, io.SeekStart) - return base64.StdEncoding.EncodeToString(m.Sum(nil)), total, nil + if _, err = f.Seek(0, io.SeekStart); err != nil { + return "", -1, err + } + return base64.StdEncoding.EncodeToString(m.Sum(nil)), total, err } // file metadata for PUT/GET @@ -110,6 +129,7 @@ type fileMetadata struct { resStatus resultStatus stageInfo *execResponseStageInfo encryptionMaterial *snowflakeFileEncryption + encryptMeta *encryptMetadata srcFileName string realSrcFileName string @@ -137,6 +157,9 @@ type fileMetadata struct { srcStream *bytes.Buffer realSrcStream *bytes.Buffer + /* streaming GET */ + dstStream *bytes.Buffer + /* GCS */ presignedURL *url.URL gcsFileHeaderDigest string diff --git a/vendor/github.com/snowflakedb/gosnowflake/function_wrappers.go b/vendor/github.com/snowflakedb/gosnowflake/function_wrappers.go new file mode 100644 index 00000000..d60145bd --- /dev/null +++ b/vendor/github.com/snowflakedb/gosnowflake/function_wrappers.go @@ -0,0 +1,18 @@ +package gosnowflake + +import "context" + +// GoroutineWrapperFunc is used to wrap goroutines. This is useful if the caller wants +// to recover panics, rather than letting panics cause a system crash. A suggestion would be to +// use use the recover functionality, and log the panic as is most useful to you +type GoroutineWrapperFunc func(ctx context.Context, f func()) + +// The default GoroutineWrapperFunc; this does nothing. With this default wrapper +// panics will take down binary as expected +var noopGoroutineWrapper = func(_ context.Context, f func()) { + f() +} + +// GoroutineWrapper is used to hold the GoroutineWrapperFunc set by the client, or to +// store the default goroutine wrapper which does nothing +var GoroutineWrapper GoroutineWrapperFunc = noopGoroutineWrapper diff --git a/vendor/github.com/snowflakedb/gosnowflake/gcs_storage_client.go b/vendor/github.com/snowflakedb/gosnowflake/gcs_storage_client.go index b52f0e32..62cf2bd3 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/gcs_storage_client.go +++ b/vendor/github.com/snowflakedb/gosnowflake/gcs_storage_client.go @@ -1,8 +1,7 @@ -// Copyright (c) 2021-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( + "context" "encoding/json" "fmt" "io" @@ -19,9 +18,11 @@ const ( gcsMetadataMatdescKey = gcsMetadataPrefix + "matdesc" gcsMetadataEncryptionDataProp = gcsMetadataPrefix + "encryptiondata" gcsFileHeaderDigest = "gcs-file-header-digest" + gcsRegionMeCentral2 = "me-central2" ) type snowflakeGcsClient struct { + cfg *Config } type gcsLocation struct { @@ -50,7 +51,7 @@ func (util *snowflakeGcsClient) getFileHeader(meta *fileMetadata, filename strin if meta.presignedURL != nil { meta.resStatus = notFoundFile } else { - URL, err := util.generateFileURL(meta.stageInfo.Location, strings.TrimLeft(filename, "/")) + URL, err := util.generateFileURL(meta.stageInfo, strings.TrimLeft(filename, "/")) if err != nil { return nil, err } @@ -62,34 +63,41 @@ func (util *snowflakeGcsClient) getFileHeader(meta *fileMetadata, filename strin "Authorization": "Bearer " + accessToken, } - req, err := http.NewRequest("HEAD", URL.String(), nil) - if err != nil { - return nil, err - } - for k, v := range gcsHeaders { - req.Header.Add(k, v) - } - client := newGcsClient() - // for testing only - if meta.mockGcsClient != nil { - client = meta.mockGcsClient - } - resp, err := client.Do(req) + resp, err := withCloudStorageTimeout(util.cfg, func(ctx context.Context) (*http.Response, error) { + req, err := http.NewRequestWithContext(ctx, "HEAD", URL.String(), nil) + if err != nil { + return nil, err + } + for k, v := range gcsHeaders { + req.Header.Add(k, v) + } + client := newGcsClient(util.cfg) + // for testing only + if meta.mockGcsClient != nil { + client = meta.mockGcsClient + } + resp, err := client.Do(req) + if err != nil && strings.HasSuffix(err.Error(), "EOF") { + logger.Debug("Retrying HEAD request because of EOF") + resp, err = client.Do(req) + } + return resp, err + }) if err != nil { return nil, err } if resp.StatusCode != http.StatusOK { - meta.lastError = fmt.Errorf(resp.Status) + meta.lastError = fmt.Errorf("%v", resp.Status) meta.resStatus = errStatus if resp.StatusCode == 403 || resp.StatusCode == 408 || resp.StatusCode == 429 || resp.StatusCode == 500 || resp.StatusCode == 503 { - meta.lastError = fmt.Errorf(resp.Status) + meta.lastError = fmt.Errorf("%v", resp.Status) meta.resStatus = needRetry return nil, meta.lastError } if resp.StatusCode == 404 { meta.resStatus = notFoundFile } else if util.isTokenExpired(resp) { - meta.lastError = fmt.Errorf(resp.Status) + meta.lastError = fmt.Errorf("%v", resp.Status) meta.resStatus = renewToken } return nil, meta.lastError @@ -135,7 +143,6 @@ type gcsAPI interface { func (util *snowflakeGcsClient) uploadFile( dataFile string, meta *fileMetadata, - encryptMeta *encryptMetadata, maxConcurrency int, multiPartThreshold int64) error { uploadURL := meta.presignedURL @@ -143,7 +150,7 @@ func (util *snowflakeGcsClient) uploadFile( var err error if uploadURL == nil { - uploadURL, err = util.generateFileURL(meta.stageInfo.Location, strings.TrimLeft(meta.dstFileName, "/")) + uploadURL, err = util.generateFileURL(meta.stageInfo, strings.TrimLeft(meta.dstFileName, "/")) if err != nil { return err } @@ -170,19 +177,19 @@ func (util *snowflakeGcsClient) uploadFile( gcsHeaders["Authorization"] = "Bearer " + accessToken } - if encryptMeta != nil { + if meta.encryptMeta != nil { encryptData := encryptionData{ "FullBlob", contentKey{ "symmKey1", - encryptMeta.key, + meta.encryptMeta.key, "AES_CBC_256", }, encryptionAgent{ "1.0", "AES_CBC_256", }, - encryptMeta.iv, + meta.encryptMeta.iv, keyMetadata{ "Java 5.3.0", }, @@ -192,7 +199,7 @@ func (util *snowflakeGcsClient) uploadFile( return err } gcsHeaders[gcsMetadataEncryptionDataProp] = string(b) - gcsHeaders[gcsMetadataMatdescKey] = encryptMeta.matdesc + gcsHeaders[gcsMetadataMatdescKey] = meta.encryptMeta.matdesc } var uploadSrc io.Reader @@ -208,34 +215,37 @@ func (util *snowflakeGcsClient) uploadFile( } } - req, err := http.NewRequest("PUT", uploadURL.String(), uploadSrc) - if err != nil { - return err - } - for k, v := range gcsHeaders { - req.Header.Add(k, v) - } - client := newGcsClient() - // for testing only - if meta.mockGcsClient != nil { - client = meta.mockGcsClient - } - resp, err := client.Do(req) + resp, err := withCloudStorageTimeout(util.cfg, func(ctx context.Context) (*http.Response, error) { + req, err := http.NewRequestWithContext(ctx, "PUT", uploadURL.String(), uploadSrc) + if err != nil { + return nil, err + } + for k, v := range gcsHeaders { + req.Header.Add(k, v) + } + client := newGcsClient(util.cfg) + // for testing only + if meta.mockGcsClient != nil { + client = meta.mockGcsClient + } + return client.Do(req) + }) + if err != nil { return err } if resp.StatusCode != http.StatusOK { if resp.StatusCode == 403 || resp.StatusCode == 408 || resp.StatusCode == 429 || resp.StatusCode == 500 || resp.StatusCode == 503 { - meta.lastError = fmt.Errorf(resp.Status) + meta.lastError = fmt.Errorf("%v", resp.Status) meta.resStatus = needRetry } else if accessToken == "" && resp.StatusCode == 400 && meta.lastError == nil { - meta.lastError = fmt.Errorf(resp.Status) + meta.lastError = fmt.Errorf("%v", resp.Status) meta.resStatus = renewPresignedURL } else if accessToken != "" && util.isTokenExpired(resp) { - meta.lastError = fmt.Errorf(resp.Status) + meta.lastError = fmt.Errorf("%v", resp.Status) meta.resStatus = renewToken } else { - meta.lastError = fmt.Errorf(resp.Status) + meta.lastError = fmt.Errorf("%v", resp.Status) } return meta.lastError } @@ -254,10 +264,10 @@ func (util *snowflakeGcsClient) uploadFile( meta.gcsFileHeaderDigest = gcsHeaders[gcsFileHeaderDigest] meta.gcsFileHeaderContentLength = meta.uploadSize - if err = json.Unmarshal([]byte(gcsHeaders[gcsMetadataEncryptionDataProp]), &encryptMeta); err != nil { + if err = json.Unmarshal([]byte(gcsHeaders[gcsMetadataEncryptionDataProp]), &meta.encryptMeta); err != nil { return err } - meta.gcsFileHeaderEncryptionMeta = encryptMeta + meta.gcsFileHeaderEncryptionMeta = meta.encryptMeta return nil } @@ -272,7 +282,7 @@ func (util *snowflakeGcsClient) nativeDownloadFile( gcsHeaders := make(map[string]string) if downloadURL == nil || downloadURL.String() == "" { - downloadURL, err = util.generateFileURL(meta.stageInfo.Location, strings.TrimLeft(meta.srcFileName, "/")) + downloadURL, err = util.generateFileURL(meta.stageInfo, strings.TrimLeft(meta.srcFileName, "/")) if err != nil { return err } @@ -286,49 +296,62 @@ func (util *snowflakeGcsClient) nativeDownloadFile( } } - req, err := http.NewRequest("GET", downloadURL.String(), nil) - if err != nil { - return err - } - for k, v := range gcsHeaders { - req.Header.Add(k, v) - } - client := newGcsClient() - // for testing only - if meta.mockGcsClient != nil { - client = meta.mockGcsClient - } - resp, err := client.Do(req) + resp, err := withCloudStorageTimeout(util.cfg, func(ctx context.Context) (*http.Response, error) { + req, err := http.NewRequestWithContext(ctx, "GET", downloadURL.String(), nil) + if err != nil { + return nil, err + } + for k, v := range gcsHeaders { + req.Header.Add(k, v) + } + client := newGcsClient(util.cfg) + // for testing only + if meta.mockGcsClient != nil { + client = meta.mockGcsClient + } + return client.Do(req) + }) + if err != nil { return err } if resp.StatusCode != http.StatusOK { if resp.StatusCode == 403 || resp.StatusCode == 408 || resp.StatusCode == 429 || resp.StatusCode == 500 || resp.StatusCode == 503 { - meta.lastError = fmt.Errorf(resp.Status) + meta.lastError = fmt.Errorf("%v", resp.Status) meta.resStatus = needRetry } else if resp.StatusCode == 404 { - meta.lastError = fmt.Errorf(resp.Status) + meta.lastError = fmt.Errorf("%v", resp.Status) meta.resStatus = notFoundFile } else if accessToken == "" && resp.StatusCode == 400 && meta.lastError == nil { - meta.lastError = fmt.Errorf(resp.Status) + meta.lastError = fmt.Errorf("%v", resp.Status) meta.resStatus = renewPresignedURL } else if accessToken != "" && util.isTokenExpired(resp) { - meta.lastError = fmt.Errorf(resp.Status) + meta.lastError = fmt.Errorf("%v", resp.Status) meta.resStatus = renewToken } else { - meta.lastError = fmt.Errorf(resp.Status) - + meta.lastError = fmt.Errorf("%v", resp.Status) } return meta.lastError } - f, err := os.OpenFile(fullDstFileName, os.O_CREATE|os.O_WRONLY, readWriteFileMode) - if err != nil { - return err - } - defer f.Close() - if _, err = io.Copy(f, resp.Body); err != nil { - return err + if meta.options.GetFileToStream { + if _, err := io.Copy(meta.dstStream, resp.Body); err != nil { + return err + } + } else { + f, err := os.OpenFile(fullDstFileName, os.O_CREATE|os.O_WRONLY, readWriteFileMode) + if err != nil { + return err + } + defer f.Close() + if _, err = io.Copy(f, resp.Body); err != nil { + return err + } + fi, err := os.Stat(fullDstFileName) + if err != nil { + return err + } + meta.srcFileSize = fi.Size() } var encryptMeta encryptMetadata @@ -348,12 +371,6 @@ func (util *snowflakeGcsClient) nativeDownloadFile( } } } - - fi, err := os.Stat(fullDstFileName) - if err != nil { - return err - } - meta.srcFileSize = fi.Size() meta.resStatus = downloaded meta.gcsFileHeaderDigest = resp.Header.Get(gcsMetadataSfcDigest) meta.gcsFileHeaderContentLength = resp.ContentLength @@ -374,10 +391,11 @@ func (util *snowflakeGcsClient) extractBucketNameAndPath(location string) *gcsLo return &gcsLocation{containerName, path} } -func (util *snowflakeGcsClient) generateFileURL(stageLocation string, filename string) (*url.URL, error) { - gcsLoc := util.extractBucketNameAndPath(stageLocation) +func (util *snowflakeGcsClient) generateFileURL(stageInfo *execResponseStageInfo, filename string) (*url.URL, error) { + gcsLoc := util.extractBucketNameAndPath(stageInfo.Location) fullFilePath := gcsLoc.path + filename - URL, err := url.Parse("https://storage.googleapis.com/" + gcsLoc.bucketName + "/" + url.QueryEscape(fullFilePath)) + endPoint := getGcsCustomEndpoint(stageInfo) + URL, err := url.Parse(endPoint + "/" + gcsLoc.bucketName + "/" + url.QueryEscape(fullFilePath)) if err != nil { return nil, err } @@ -388,8 +406,21 @@ func (util *snowflakeGcsClient) isTokenExpired(resp *http.Response) bool { return resp.StatusCode == 401 } -func newGcsClient() gcsAPI { +func newGcsClient(cfg *Config) gcsAPI { return &http.Client{ - Transport: SnowflakeTransport, + Transport: getTransport(cfg), + } +} + +func getGcsCustomEndpoint(info *execResponseStageInfo) string { + endpoint := "https://storage.googleapis.com" + + // TODO: SNOW-1789759 hardcoded region will be replaced in the future + isRegionalURLEnabled := (strings.ToLower(info.Region) == gcsRegionMeCentral2) || info.UseRegionalURL + if info.EndPoint != "" { + endpoint = fmt.Sprintf("https://%s", info.EndPoint) + } else if info.Region != "" && isRegionalURLEnabled { + endpoint = fmt.Sprintf("https://storage.%s.rep.googleapis.com", strings.ToLower(info.Region)) } + return endpoint } diff --git a/vendor/github.com/snowflakedb/gosnowflake/heartbeat.go b/vendor/github.com/snowflakedb/gosnowflake/heartbeat.go index 4b40ef60..eee1b9f2 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/heartbeat.go +++ b/vendor/github.com/snowflakedb/gosnowflake/heartbeat.go @@ -1,5 +1,3 @@ -// Copyright (c) 2019-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -54,8 +52,8 @@ func (hc *heartbeat) stop() { func (hc *heartbeat) heartbeatMain() error { logger.Info("Heartbeating!") params := &url.Values{} - params.Add(requestIDKey, NewUUID().String()) - params.Add(requestGUIDKey, NewUUID().String()) + params.Set(requestIDKey, NewUUID().String()) + params.Set(requestGUIDKey, NewUUID().String()) headers := getHeaders() token, _, _ := hc.restful.TokenAccessor.GetTokens() headers[headerAuthorizationKey] = fmt.Sprintf(headerSnowflakeToken, token) diff --git a/vendor/github.com/snowflakedb/gosnowflake/local_storage_client.go b/vendor/github.com/snowflakedb/gosnowflake/local_storage_client.go index 2ae072b6..195f71a8 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/local_storage_client.go +++ b/vendor/github.com/snowflakedb/gosnowflake/local_storage_client.go @@ -1,9 +1,8 @@ -// Copyright (c) 2021-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( "bufio" + "cmp" "fmt" "io" "os" @@ -15,17 +14,14 @@ import ( type localUtil struct { } -func (util *localUtil) createClient(_ *execResponseStageInfo, _ bool) (cloudClient, error) { +func (util *localUtil) createClient(_ *execResponseStageInfo, _ bool, _ *Config) (cloudClient, error) { return nil, nil } func (util *localUtil) uploadOneFileWithRetry(meta *fileMetadata) error { var frd *bufio.Reader if meta.srcStream != nil { - b := meta.srcStream - if meta.realSrcStream != nil { - b = meta.realSrcStream - } + b := cmp.Or(meta.realSrcStream, meta.srcStream) frd = bufio.NewReader(b) } else { f, err := os.Open(meta.realSrcFileName) diff --git a/vendor/github.com/snowflakedb/gosnowflake/location.go b/vendor/github.com/snowflakedb/gosnowflake/location.go index 6209f318..6e301473 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/location.go +++ b/vendor/github.com/snowflakedb/gosnowflake/location.go @@ -1,5 +1,3 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( diff --git a/vendor/github.com/snowflakedb/gosnowflake/log.go b/vendor/github.com/snowflakedb/gosnowflake/log.go index b48294cb..2cce545d 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/log.go +++ b/vendor/github.com/snowflakedb/gosnowflake/log.go @@ -1,17 +1,17 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( "context" "fmt" - rlog "github.com/sirupsen/logrus" "io" "os" "path" "runtime" "strings" + "sync" "time" + + rlog "github.com/sirupsen/logrus" ) // SFSessionIDKey is context key of session id @@ -20,7 +20,23 @@ const SFSessionIDKey contextKey = "LOG_SESSION_ID" // SFSessionUserKey is context key of user id of a session const SFSessionUserKey contextKey = "LOG_USER" -// LogKeys these keys in context should be included in logging messages when using logger.WithContext +// map which stores a string which will be used as a log key to the function which +// will be called to get the log value out of the context +var clientLogContextHooks = map[string]ClientLogContextHook{} + +// ClientLogContextHook is a client-defined hook that can be used to insert log +// fields based on the Context. +type ClientLogContextHook func(context.Context) string + +// RegisterLogContextHook registers a hook that can be used to extract fields +// from the Context and associated with log messages using the provided key. This +// function is not thread-safe and should only be called on startup. +func RegisterLogContextHook(contextKey string, ctxExtractor ClientLogContextHook) { + clientLogContextHooks[contextKey] = ctxExtractor +} + +// LogKeys registers string-typed context keys to be written to the logs when +// logger.WithContext is used var LogKeys = [...]contextKey{SFSessionIDKey, SFSessionUserKey} // SFLogger Snowflake logger interface to expose FieldLogger defined in logrus @@ -43,12 +59,27 @@ type defaultLogger struct { inner *rlog.Logger enabled bool file *os.File + mu sync.Mutex +} + +type sfTextFormatter struct { + rlog.TextFormatter +} + +func (f *sfTextFormatter) Format(entry *rlog.Entry) ([]byte, error) { + // mask all secrets before calling the default Format method + entry.Message = maskSecrets(entry.Message) + return f.TextFormatter.Format(entry) } // SetLogLevel set logging level for calling defaultLogger func (log *defaultLogger) SetLogLevel(level string) error { newEnabled := strings.ToUpper(level) != "OFF" - log.enabled = newEnabled + func() { + log.mu.Lock() + defer log.mu.Unlock() + log.enabled = newEnabled + }() if newEnabled { actualLevel, err := rlog.ParseLevel(level) if err != nil { @@ -59,9 +90,15 @@ func (log *defaultLogger) SetLogLevel(level string) error { return nil } +func (log *defaultLogger) isEnabled() bool { + log.mu.Lock() + defer log.mu.Unlock() + return log.enabled +} + // GetLogLevel return current log level func (log *defaultLogger) GetLogLevel() string { - if !log.enabled { + if !log.isEnabled() { return "OFF" } return log.inner.GetLevel().String() @@ -100,9 +137,10 @@ func (log *defaultLogger) WithContext(ctx context.Context) *rlog.Entry { // CreateDefaultLogger return a new instance of SFLogger with default config func CreateDefaultLogger() SFLogger { var rLogger = rlog.New() - var formatter = rlog.TextFormatter{CallerPrettyfier: SFCallerPrettyfier} + var formatter = new(sfTextFormatter) + formatter.CallerPrettyfier = SFCallerPrettyfier + rLogger.SetFormatter(formatter) rLogger.SetReportCaller(true) - rLogger.SetFormatter(&formatter) var ret = defaultLogger{inner: rLogger, enabled: true} return &ret //(&ret).(*SFLogger) } @@ -116,19 +154,19 @@ func (log *defaultLogger) WithField(key string, value interface{}) *rlog.Entry { } -// Adds a struct of fields to the log entry. All it does is call `WithField` for +// WithFields adds a struct of fields to the log entry. All it does is call `WithField` for // each `Field`. func (log *defaultLogger) WithFields(fields rlog.Fields) *rlog.Entry { return log.inner.WithFields(fields) } -// Add an error as single field to the log entry. All it does is call +// WithError adds an error as single field to the log entry. All it does is call // `WithError` for the given `error`. func (log *defaultLogger) WithError(err error) *rlog.Entry { return log.inner.WithError(err) } -// Overrides the time of the log entry. +// WithTime overrides the time of the log entry. func (log *defaultLogger) WithTime(t time.Time) *rlog.Entry { return log.inner.WithTime(t) } @@ -138,55 +176,55 @@ func (log *defaultLogger) Logf(level rlog.Level, format string, args ...interfac } func (log *defaultLogger) Tracef(format string, args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Tracef(format, args...) } } func (log *defaultLogger) Debugf(format string, args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Debugf(format, args...) } } func (log *defaultLogger) Infof(format string, args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Infof(format, args...) } } func (log *defaultLogger) Printf(format string, args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Printf(format, args...) } } func (log *defaultLogger) Warnf(format string, args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Warnf(format, args...) } } func (log *defaultLogger) Warningf(format string, args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Warningf(format, args...) } } func (log *defaultLogger) Errorf(format string, args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Errorf(format, args...) } } func (log *defaultLogger) Fatalf(format string, args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Fatalf(format, args...) } } func (log *defaultLogger) Panicf(format string, args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Panicf(format, args...) } } @@ -200,109 +238,109 @@ func (log *defaultLogger) LogFn(level rlog.Level, fn rlog.LogFunction) { } func (log *defaultLogger) Trace(args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Trace(args...) } } func (log *defaultLogger) Debug(args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Debug(args...) } } func (log *defaultLogger) Info(args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Info(args...) } } func (log *defaultLogger) Print(args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Print(args...) } } func (log *defaultLogger) Warn(args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Warn(args...) } } func (log *defaultLogger) Warning(args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Warning(args...) } } func (log *defaultLogger) Error(args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Error(args...) } } func (log *defaultLogger) Fatal(args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Fatal(args...) } } func (log *defaultLogger) Panic(args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Panic(args...) } } func (log *defaultLogger) TraceFn(fn rlog.LogFunction) { - if log.enabled { + if log.isEnabled() { log.inner.TraceFn(fn) } } func (log *defaultLogger) DebugFn(fn rlog.LogFunction) { - if log.enabled { + if log.isEnabled() { log.inner.DebugFn(fn) } } func (log *defaultLogger) InfoFn(fn rlog.LogFunction) { - if log.enabled { + if log.isEnabled() { log.inner.InfoFn(fn) } } func (log *defaultLogger) PrintFn(fn rlog.LogFunction) { - if log.enabled { + if log.isEnabled() { log.inner.PrintFn(fn) } } func (log *defaultLogger) WarnFn(fn rlog.LogFunction) { - if log.enabled { + if log.isEnabled() { log.inner.PrintFn(fn) } } func (log *defaultLogger) WarningFn(fn rlog.LogFunction) { - if log.enabled { + if log.isEnabled() { log.inner.WarningFn(fn) } } func (log *defaultLogger) ErrorFn(fn rlog.LogFunction) { - if log.enabled { + if log.isEnabled() { log.inner.ErrorFn(fn) } } func (log *defaultLogger) FatalFn(fn rlog.LogFunction) { - if log.enabled { + if log.isEnabled() { log.inner.FatalFn(fn) } } func (log *defaultLogger) PanicFn(fn rlog.LogFunction) { - if log.enabled { + if log.isEnabled() { log.inner.PanicFn(fn) } } @@ -312,55 +350,55 @@ func (log *defaultLogger) Logln(level rlog.Level, args ...interface{}) { } func (log *defaultLogger) Traceln(args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Traceln(args...) } } func (log *defaultLogger) Debugln(args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Debugln(args...) } } func (log *defaultLogger) Infoln(args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Infoln(args...) } } func (log *defaultLogger) Println(args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Println(args...) } } func (log *defaultLogger) Warnln(args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Warnln(args...) } } func (log *defaultLogger) Warningln(args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Warningln(args...) } } func (log *defaultLogger) Errorln(args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Errorln(args...) } } func (log *defaultLogger) Fatalln(args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Fatalln(args...) } } func (log *defaultLogger) Panicln(args ...interface{}) { - if log.enabled { + if log.isEnabled() { log.inner.Panicln(args...) } } @@ -425,5 +463,12 @@ func context2Fields(ctx context.Context) *rlog.Fields { fields[string(LogKeys[i])] = ctx.Value(LogKeys[i]) } } + + for key, hook := range clientLogContextHooks { + if value := hook(ctx); value != "" { + fields[key] = value + } + } + return &fields } diff --git a/vendor/github.com/snowflakedb/gosnowflake/monitoring.go b/vendor/github.com/snowflakedb/gosnowflake/monitoring.go index a138ecc8..1426ac93 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/monitoring.go +++ b/vendor/github.com/snowflakedb/gosnowflake/monitoring.go @@ -1,5 +1,3 @@ -// Copyright (c) 2021-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -132,7 +130,7 @@ func (sc *snowflakeConn) checkQueryStatus( *retStatus, error) { headers := make(map[string]string) param := make(url.Values) - param.Add(requestGUIDKey, NewUUID().String()) + param.Set(requestGUIDKey, NewUUID().String()) if tok, _, _ := sc.rest.TokenAccessor.GetTokens(); tok != "" { headers[headerAuthorizationKey] = fmt.Sprintf(headerSnowflakeToken, tok) } @@ -206,23 +204,18 @@ func (sc *snowflakeConn) getQueryResultResp( } paramsMutex.Unlock() param := make(url.Values) - param.Add(requestIDKey, getOrGenerateRequestIDFromContext(ctx).String()) - param.Add("clientStartTime", strconv.FormatInt(sc.currentTimeProvider.currentTime(), 10)) - param.Add(requestGUIDKey, NewUUID().String()) + param.Set(requestIDKey, getOrGenerateRequestIDFromContext(ctx).String()) + param.Set("clientStartTime", strconv.FormatInt(sc.currentTimeProvider.currentTime(), 10)) + param.Set(requestGUIDKey, NewUUID().String()) token, _, _ := sc.rest.TokenAccessor.GetTokens() if token != "" { headers[headerAuthorizationKey] = fmt.Sprintf(headerSnowflakeToken, token) } url := sc.rest.getFullURL(resultPath, ¶m) - res, err := sc.rest.FuncGet(ctx, sc.rest, url, headers, sc.rest.RequestTimeout) + + respd, err := getQueryResultWithRetriesForAsyncMode(ctx, sc.rest, url, headers, sc.rest.RequestTimeout) if err != nil { - logger.WithContext(ctx).Errorf("failed to get response. err: %v", err) - return nil, err - } - defer res.Body.Close() - var respd *execResponse - if err = json.NewDecoder(res.Body).Decode(&respd); err != nil { - logger.WithContext(ctx).Errorf("failed to decode JSON. err: %v", err) + logger.WithContext(ctx).Errorf("error: %v", err) return nil, err } return respd, nil @@ -238,6 +231,7 @@ func (sc *snowflakeConn) rowsForRunningQuery( logger.WithContext(ctx).Errorf("error: %v", err) return err } + if !resp.Success { code, err := strconv.Atoi(resp.Code) if err != nil { @@ -262,6 +256,7 @@ func (sc *snowflakeConn) buildRowsForRunningQuery( rows := new(snowflakeRows) rows.sc = sc rows.queryID = qid + rows.ctx = ctx if err := sc.rowsForRunningQuery(ctx, qid, rows); err != nil { return nil, err } diff --git a/vendor/github.com/snowflakedb/gosnowflake/multistatement.go b/vendor/github.com/snowflakedb/gosnowflake/multistatement.go index ce9d9910..dce3c1fe 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/multistatement.go +++ b/vendor/github.com/snowflakedb/gosnowflake/multistatement.go @@ -1,5 +1,3 @@ -// Copyright (c) 2021-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -51,7 +49,7 @@ func (sc *snowflakeConn) handleMultiExec( if isDml(childResultType) { childData, err := sc.getQueryResultResp(ctx, resultPath) if err != nil { - logger.Errorf("error: %v", err) + logger.WithContext(ctx).Errorf("error: %v", err) return nil, err } if childData != nil && !childData.Success { diff --git a/vendor/github.com/snowflakedb/gosnowflake/ocsp.go b/vendor/github.com/snowflakedb/gosnowflake/ocsp.go index b700a416..e0b14b77 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/ocsp.go +++ b/vendor/github.com/snowflakedb/gosnowflake/ocsp.go @@ -1,5 +1,3 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -71,17 +69,32 @@ const ( // defaultOCSPResponderTimeout is the total timeout for OCSP responder. defaultOCSPResponderTimeout = 10 * time.Second + // defaultOCSPMaxRetryCount specifies maximum numbere of subsequent retries to OCSP (cache and server) + defaultOCSPMaxRetryCount = 2 + + // defaultOCSPResponseCacheClearingInterval is the default value for clearing OCSP response cache + defaultOCSPResponseCacheClearingInterval = 15 * time.Minute +) + +var ( + // OcspCacheServerTimeout is a timeout for OCSP cache server. + OcspCacheServerTimeout = defaultOCSPCacheServerTimeout + // OcspResponderTimeout is a timeout for OCSP responders. + OcspResponderTimeout = defaultOCSPResponderTimeout + // OcspMaxRetryCount is a number of retires to OCSP (cache server and responders). + OcspMaxRetryCount = defaultOCSPMaxRetryCount ) const ( cacheFileBaseName = "ocsp_response_cache.json" // cacheExpire specifies cache data expiration time in seconds. - cacheExpire = float64(24 * 60 * 60) - cacheServerURL = "http://ocsp.snowflakecomputing.com" - cacheServerEnabledEnv = "SF_OCSP_RESPONSE_CACHE_SERVER_ENABLED" - cacheServerURLEnv = "SF_OCSP_RESPONSE_CACHE_SERVER_URL" - cacheDirEnv = "SF_OCSP_RESPONSE_CACHE_DIR" - ocspRetryURLEnv = "SF_OCSP_RESPONSE_RETRY_URL" + cacheExpire = float64(24 * 60 * 60) + defaultCacheServerURL = "http://ocsp.snowflakecomputing.com" + cacheServerEnabledEnv = "SF_OCSP_RESPONSE_CACHE_SERVER_ENABLED" + cacheServerURLEnv = "SF_OCSP_RESPONSE_CACHE_SERVER_URL" + cacheDirEnv = "SF_OCSP_RESPONSE_CACHE_DIR" + ocspRetryURLEnv = "SF_OCSP_RESPONSE_RETRY_URL" + ocspResponseCacheClearingIntervalInSecondsEnv = "SF_OCSP_RESPONSE_CACHE_CLEARING_INTERVAL_IN_SECONDS" ) const ( @@ -98,6 +111,8 @@ const ( maxClockSkew = 900 * time.Second // buffer for clock skew ) +var stopOCSPCacheClearing = make(chan struct{}) + type ocspStatusCode int type ocspStatus struct { @@ -380,30 +395,30 @@ func checkOCSPCacheServer( ocspS *ocspStatus) { var respd map[string][]interface{} headers := make(map[string]string) - res, err := newRetryHTTP(ctx, client, req, ocspServerHost, headers, totalTimeout, defaultMaxRetryCount, defaultTimeProvider, nil).execute() + res, err := newRetryHTTP(ctx, client, req, ocspServerHost, headers, totalTimeout, OcspMaxRetryCount, defaultTimeProvider, nil).execute() if err != nil { - logger.Errorf("failed to get OCSP cache from OCSP Cache Server. %v", err) + logger.WithContext(ctx).Errorf("failed to get OCSP cache from OCSP Cache Server. %v", err) return nil, &ocspStatus{ code: ocspFailedSubmit, err: err, } } defer res.Body.Close() - logger.Debugf("StatusCode from OCSP Cache Server: %v", res.StatusCode) + logger.WithContext(ctx).Debugf("StatusCode from OCSP Cache Server: %v", res.StatusCode) if res.StatusCode != http.StatusOK { return nil, &ocspStatus{ code: ocspFailedResponse, err: fmt.Errorf("HTTP code is not OK. %v: %v", res.StatusCode, res.Status), } } - logger.Debugf("reading contents") + logger.WithContext(ctx).Debugf("reading contents") dec := json.NewDecoder(res.Body) for { if err := dec.Decode(&respd); err == io.EOF { break } else if err != nil { - logger.Errorf("failed to decode OCSP cache. %v", err) + logger.WithContext(ctx).Errorf("failed to decode OCSP cache. %v", err) return nil, &ocspStatus{ code: ocspFailedExtractResponse, err: err, @@ -443,7 +458,7 @@ func retryOCSP( } res, err := newRetryHTTP( ctx, client, req, ocspHost, headers, - totalTimeout*time.Duration(multiplier), defaultMaxRetryCount, defaultTimeProvider, nil).doPost().setBody(reqBody).execute() + totalTimeout*time.Duration(multiplier), OcspMaxRetryCount, defaultTimeProvider, nil).doPost().setBody(reqBody).execute() if err != nil { return ocspRes, ocspResBytes, &ocspStatus{ code: ocspFailedSubmit, @@ -451,7 +466,7 @@ func retryOCSP( } } defer res.Body.Close() - logger.Debugf("StatusCode from OCSP Server: %v\n", res.StatusCode) + logger.WithContext(ctx).Debugf("StatusCode from OCSP Server: %v\n", res.StatusCode) if res.StatusCode != http.StatusOK { return ocspRes, ocspResBytes, &ocspStatus{ code: ocspFailedResponse, @@ -467,12 +482,21 @@ func retryOCSP( } ocspRes, err = ocsp.ParseResponse(ocspResBytes, issuer) if err != nil { - logger.Warnf("error when parsing ocsp response: %v", err) - logger.Warnf("performing GET fallback request to OCSP") - return fallbackRetryOCSPToGETRequest(ctx, client, req, ocspHost, headers, issuer, totalTimeout) + _, ok1 := err.(asn1.StructuralError) + _, ok2 := err.(asn1.SyntaxError) + if ok1 || ok2 { + logger.WithContext(ctx).Warnf("error when parsing ocsp response: %v", err) + logger.WithContext(ctx).Warnf("performing GET fallback request to OCSP") + return fallbackRetryOCSPToGETRequest(ctx, client, req, ocspHost, headers, issuer, totalTimeout) + } + logger.Warnf("Unknown response status from OCSP responder: %v", err) + return nil, nil, &ocspStatus{ + code: ocspStatusUnknown, + err: err, + } } - logger.Debugf("OCSP Status from server: %v", printStatus(ocspRes)) + logger.WithContext(ctx).Debugf("OCSP Status from server: %v", printStatus(ocspRes)) return ocspRes, ocspResBytes, &ocspStatus{ code: ocspSuccess, } @@ -496,7 +520,7 @@ func fallbackRetryOCSPToGETRequest( multiplier = 3 // up to 3 times for Fail Close mode } res, err := newRetryHTTP(ctx, client, req, ocspHost, headers, - totalTimeout*time.Duration(multiplier), defaultMaxRetryCount, defaultTimeProvider, nil).execute() + totalTimeout*time.Duration(multiplier), OcspMaxRetryCount, defaultTimeProvider, nil).execute() if err != nil { return ocspRes, ocspResBytes, &ocspStatus{ code: ocspFailedSubmit, @@ -504,7 +528,7 @@ func fallbackRetryOCSPToGETRequest( } } defer res.Body.Close() - logger.Debugf("GET fallback StatusCode from OCSP Server: %v", res.StatusCode) + logger.WithContext(ctx).Debugf("GET fallback StatusCode from OCSP Server: %v", res.StatusCode) if res.StatusCode != http.StatusOK { return ocspRes, ocspResBytes, &ocspStatus{ code: ocspFailedResponse, @@ -526,7 +550,7 @@ func fallbackRetryOCSPToGETRequest( } } - logger.Debugf("GET fallback OCSP Status from server: %v", printStatus(ocspRes)) + logger.WithContext(ctx).Debugf("GET fallback OCSP Status from server: %v", printStatus(ocspRes)) return ocspRes, ocspResBytes, &ocspStatus{ code: ocspSuccess, } @@ -558,7 +582,7 @@ func fullOCSPURL(url *url.URL) string { // getRevocationStatus checks the certificate revocation status for subject using issuer certificate. func getRevocationStatus(ctx context.Context, subject, issuer *x509.Certificate) *ocspStatus { - logger.Infof("Subject: %v, Issuer: %v", subject.Subject, issuer.Subject) + logger.WithContext(ctx).Tracef("Subject: %v, Issuer: %v", subject.Subject, issuer.Subject) status, ocspReq, encodedCertID := validateWithCache(subject, issuer) if isValidOCSPStatus(status.code) { @@ -567,9 +591,10 @@ func getRevocationStatus(ctx context.Context, subject, issuer *x509.Certificate) if ocspReq == nil || encodedCertID == nil { return status } - logger.Infof("cache missed") - logger.Infof("OCSP Server: %v", subject.OCSPServer) - if len(subject.OCSPServer) == 0 || isTestNoOCSPURL() { + logger.WithContext(ctx).Infof("cache missed") + logger.WithContext(ctx).Infof("OCSP Server: %v", subject.OCSPServer) + testResponderURL := os.Getenv(ocspTestResponderURLEnv) + if (len(subject.OCSPServer) == 0 || isTestNoOCSPURL()) && testResponderURL == "" { return &ocspStatus{ code: ocspNoServer, err: &SnowflakeError{ @@ -579,7 +604,10 @@ func getRevocationStatus(ctx context.Context, subject, issuer *x509.Certificate) }, } } - ocspHost := subject.OCSPServer[0] + ocspHost := testResponderURL + if ocspHost == "" && len(subject.OCSPServer) > 0 { + ocspHost = subject.OCSPServer[0] + } u, err := url.Parse(ocspHost) if err != nil { return &ocspStatus{ @@ -587,7 +615,6 @@ func getRevocationStatus(ctx context.Context, subject, issuer *x509.Certificate) err: fmt.Errorf("failed to parse OCSP server host. %v", ocspHost), } } - hostnameStr := os.Getenv(ocspTestResponderURLEnv) var hostname string if retryURL := os.Getenv(ocspRetryURLEnv); retryURL != "" { hostname = fmt.Sprintf(retryURL, fullOCSPURL(u), base64.StdEncoding.EncodeToString(ocspReq)) @@ -599,16 +626,9 @@ func getRevocationStatus(ctx context.Context, subject, issuer *x509.Certificate) } else { hostname = fullOCSPURL(u) } - if hostnameStr != "" { - u0, err := url.Parse(hostnameStr) - if err == nil { - hostname = u0.Hostname() - u = u0 - } - } - logger.Debugf("Fetching OCSP response from server: %v", u) - logger.Debugf("Host in headers: %v", hostname) + logger.WithContext(ctx).Debugf("Fetching OCSP response from server: %v", u) + logger.WithContext(ctx).Debugf("Host in headers: %v", hostname) headers := make(map[string]string) headers[httpHeaderContentType] = "application/ocsp-request" @@ -616,7 +636,7 @@ func getRevocationStatus(ctx context.Context, subject, issuer *x509.Certificate) headers[httpHeaderContentLength] = strconv.Itoa(len(ocspReq)) headers[httpHeaderHost] = hostname timeoutStr := os.Getenv(ocspTestResponderTimeoutEnv) - timeout := defaultOCSPResponderTimeout + timeout := OcspResponderTimeout if timeoutStr != "" { var timeoutInMilliseconds int timeoutInMilliseconds, err = strconv.Atoi(timeoutStr) @@ -626,7 +646,7 @@ func getRevocationStatus(ctx context.Context, subject, issuer *x509.Certificate) } ocspClient := &http.Client{ Timeout: timeout, - Transport: snowflakeInsecureTransport, + Transport: snowflakeNoOcspTransport, } ocspRes, ocspResBytes, ocspS := retryOCSP( ctx, ocspClient, http.NewRequest, u, headers, ocspReq, issuer, timeout) @@ -659,6 +679,8 @@ func verifyPeerCertificate(ctx context.Context, verifiedChains [][]*x509.Certifi for i := 0; i < len(verifiedChains); i++ { // Certificate signed by Root CA. This should be one before the last in the Certificate Chain numberOfNoneRootCerts := len(verifiedChains[i]) - 1 + logger.Tracef("checking cert, %v, %v, isCa: %v, rawIssuer: %v, rawSubject: %v", i, numberOfNoneRootCerts, verifiedChains[i][numberOfNoneRootCerts].IsCA, string(verifiedChains[i][numberOfNoneRootCerts].RawIssuer), string(verifiedChains[i][numberOfNoneRootCerts].RawSubject)) + logger.Tracef("checking cert, base64, rawIssuer: %v, rawSubject: %v", base64.StdEncoding.EncodeToString(verifiedChains[i][numberOfNoneRootCerts].RawIssuer), base64.StdEncoding.EncodeToString(verifiedChains[i][numberOfNoneRootCerts].RawSubject)) if !verifiedChains[i][numberOfNoneRootCerts].IsCA || string(verifiedChains[i][numberOfNoneRootCerts].RawIssuer) != string(verifiedChains[i][numberOfNoneRootCerts].RawSubject) { // Check if the last Non Root Cert is also a CA or is self signed. // if the last certificate is not, add it to the list @@ -712,11 +734,7 @@ func canEarlyExitForOCSP(results []*ocspStatus, chainSize int) *ocspStatus { } } if len(msg) > 0 { - logger.Warnf( - "WARNING!!! Using fail-open to connect. Driver is connecting to an "+ - "HTTPS endpoint without OCSP based Certificate Revocation checking "+ - "as it could not obtain a valid OCSP Response to use from the CA OCSP "+ - "responder. Detail: %v", msg[1:]) + logger.Debugf("OCSP responder didn't respond correctly. Assuming certificate is not revoked. Detail: %v", msg[1:]) } return nil } @@ -761,7 +779,7 @@ func downloadOCSPCacheServer() { } ocspCacheServerURL := os.Getenv(cacheServerURLEnv) if ocspCacheServerURL == "" { - ocspCacheServerURL = fmt.Sprintf("%v/%v", cacheServerURL, cacheFileBaseName) + ocspCacheServerURL = fmt.Sprintf("%v/%v", defaultCacheServerURL, cacheFileBaseName) } u, err := url.Parse(ocspCacheServerURL) if err != nil { @@ -769,7 +787,7 @@ func downloadOCSPCacheServer() { } logger.Infof("downloading OCSP Cache from server %v", ocspCacheServerURL) timeoutStr := os.Getenv(ocspTestResponseCacheServerTimeoutEnv) - timeout := defaultOCSPCacheServerTimeout + timeout := OcspCacheServerTimeout if timeoutStr != "" { var timeoutInMilliseconds int timeoutInMilliseconds, err = strconv.Atoi(timeoutStr) @@ -779,7 +797,7 @@ func downloadOCSPCacheServer() { } ocspClient := &http.Client{ Timeout: timeout, - Transport: snowflakeInsecureTransport, + Transport: snowflakeNoOcspTransport, } ret, ocspStatus := checkOCSPCacheServer(context.Background(), ocspClient, http.NewRequest, u, timeout) if ocspStatus.code != ocspSuccess { @@ -831,13 +849,13 @@ func overrideCacheDir() { // initOCSPCache initializes OCSP Response cache file. func initOCSPCache() { + ocspResponseCacheLock = &sync.RWMutex{} + ocspParsedRespCacheLock = &sync.Mutex{} + ocspResponseCache = make(map[certIDKey]*certCacheValue) + ocspParsedRespCache = make(map[parsedOcspRespKey]*ocspStatus) if strings.EqualFold(os.Getenv(cacheServerEnabledEnv), "false") { return } - ocspResponseCache = make(map[certIDKey]*certCacheValue) - ocspParsedRespCache = make(map[parsedOcspRespKey]*ocspStatus) - ocspResponseCacheLock = &sync.RWMutex{} - ocspParsedRespCacheLock = &sync.Mutex{} logger.Infof("reading OCSP Response cache file. %v\n", cacheFileName) f, err := os.OpenFile(cacheFileName, os.O_CREATE|os.O_RDONLY, readWriteFileMode) @@ -944,7 +962,7 @@ func extractOCSPCacheResponseValue(certIDKey *certIDKey, certCacheValue *certCac status = validateOCSP(ocspResponse) ocspParsedRespCache[cacheKey] = status } - logger.Debugf("OCSP status found in cache: %v; certIdKey: %v", status, certIDKey) + logger.Tracef("OCSP status found in cache: %v; certIdKey: %v", status, certIDKey) return status } @@ -1062,14 +1080,60 @@ func createOCSPCacheDir() { logger.Infof("reset OCSP cache file. %v", cacheFileName) } +func initOCSPCacheClearer() { + interval := defaultOCSPResponseCacheClearingInterval + if intervalFromEnv := os.Getenv(ocspResponseCacheClearingIntervalInSecondsEnv); intervalFromEnv != "" { + intervalAsSeconds, err := strconv.Atoi(intervalFromEnv) + if err != nil { + logger.Warnf("unparsable %v value: %v", ocspResponseCacheClearingIntervalInSecondsEnv, intervalFromEnv) + } else { + interval = time.Duration(intervalAsSeconds) * time.Second + } + } + logger.Debugf("initializing OCSP cache clearer to %v", interval) + go GoroutineWrapper(context.Background(), func() { + ticker := time.NewTicker(interval) + for { + select { + case <-ticker.C: + clearOCSPCaches() + case <-stopOCSPCacheClearing: + logger.Debug("stopped clearing OCSP cache") + ticker.Stop() + return + } + } + }) +} + +func stopOCSPCacheClearer() { + stopOCSPCacheClearing <- struct{}{} +} + +func clearOCSPCaches() { + logger.Debugf("clearing OCSP caches") + func() { + ocspResponseCacheLock.Lock() + defer ocspResponseCacheLock.Unlock() + ocspResponseCache = make(map[certIDKey]*certCacheValue) + }() + + func() { + ocspParsedRespCacheLock.Lock() + defer ocspParsedRespCacheLock.Unlock() + ocspParsedRespCache = make(map[parsedOcspRespKey]*ocspStatus) + }() +} + func init() { readCACerts() createOCSPCacheDir() initOCSPCache() + initOCSPCacheClearer() } -// snowflakeInsecureTransport is the transport object that doesn't do certificate revocation check. -var snowflakeInsecureTransport = &http.Transport{ +// snowflakeNoOcspTransport is the transport object that doesn't do certificate revocation check with OCSP. +var snowflakeNoOcspTransport http.RoundTripper = &http.Transport{ MaxIdleConns: 10, IdleConnTimeout: 30 * time.Minute, Proxy: http.ProxyFromEnvironment, diff --git a/vendor/github.com/snowflakedb/gosnowflake/os_specific_posix.go b/vendor/github.com/snowflakedb/gosnowflake/os_specific_posix.go new file mode 100644 index 00000000..a2a15f63 --- /dev/null +++ b/vendor/github.com/snowflakedb/gosnowflake/os_specific_posix.go @@ -0,0 +1,63 @@ +//go:build !windows + +package gosnowflake + +import ( + "fmt" + "io" + "os" + "syscall" +) + +func provideFileOwner(file *os.File) (uint32, error) { + info, err := file.Stat() + if err != nil { + return 0, err + } + return provideOwnerFromStat(info, file.Name()) +} + +func provideOwnerFromStat(info os.FileInfo, filepath string) (uint32, error) { + nativeStat, ok := info.Sys().(*syscall.Stat_t) + if !ok { + return 0, fmt.Errorf("cannot cast file info for %v to *syscall.Stat_t", filepath) + } + return nativeStat.Uid, nil +} + +func getFileContents(filePath string, expectedPerm os.FileMode) ([]byte, error) { + // open the file with read only and no symlink flags + file, err := os.OpenFile(filePath, syscall.O_RDONLY|syscall.O_NOFOLLOW, 0) + if err != nil { + return nil, err + } + defer file.Close() + + // validate file permissions and owner + if err = validateFilePermissionBits(file, expectedPerm); err != nil { + return nil, err + } + if err = ensureFileOwner(file); err != nil { + return nil, err + } + + // read the file + fileContents, err := io.ReadAll(file) + if err != nil { + return nil, err + } + + return fileContents, nil +} + +func validateFilePermissionBits(f *os.File, expectedPerm os.FileMode) error { + fileInfo, err := f.Stat() + if err != nil { + return err + } + filePerm := fileInfo.Mode() + if filePerm&expectedPerm != 0 { + return fmt.Errorf("incorrect permissions of %s", f.Name()) + } + return nil +} diff --git a/vendor/github.com/snowflakedb/gosnowflake/os_specific_windows.go b/vendor/github.com/snowflakedb/gosnowflake/os_specific_windows.go new file mode 100644 index 00000000..7303ed1a --- /dev/null +++ b/vendor/github.com/snowflakedb/gosnowflake/os_specific_windows.go @@ -0,0 +1,20 @@ +// go:build windows + +package gosnowflake + +import ( + "errors" + "os" +) + +func provideFileOwner(file *os.File) (uint32, error) { + return 0, errors.New("provideFileOwner is unsupported on windows") +} + +func getFileContents(filePath string, expectedPerm os.FileMode) ([]byte, error) { + fileContents, err := os.ReadFile(filePath) + if err != nil { + return nil, err + } + return fileContents, nil +} diff --git a/vendor/github.com/snowflakedb/gosnowflake/parameters.json.local b/vendor/github.com/snowflakedb/gosnowflake/parameters.json.local new file mode 100644 index 00000000..6e463537 --- /dev/null +++ b/vendor/github.com/snowflakedb/gosnowflake/parameters.json.local @@ -0,0 +1,15 @@ +{ + "testconnection": { + "SNOWFLAKE_TEST_HOST": "snowflake.reg.local", + "SNOWFLAKE_TEST_PROTOCOL": "http", + "SNOWFLAKE_TEST_PORT": "8082", + "SNOWFLAKE_TEST_USER": "snowman", + "SNOWFLAKE_TEST_PASSWORD": "test", + "SNOWFLAKE_TEST_ACCOUNT": "s3testaccount", + "SNOWFLAKE_TEST_WAREHOUSE": "regress", + "SNOWFLAKE_TEST_DATABASE": "testdb", + "SNOWFLAKE_TEST_SCHEMA": "testschema", + "SNOWFLAKE_TEST_ROLE": "sysadmin", + "SNOWFLAKE_TEST_DEBUG": "false" + } +} diff --git a/vendor/github.com/snowflakedb/gosnowflake/parameters.json.tmpl b/vendor/github.com/snowflakedb/gosnowflake/parameters.json.tmpl index 8448f605..19ec33bd 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/parameters.json.tmpl +++ b/vendor/github.com/snowflakedb/gosnowflake/parameters.json.tmpl @@ -6,6 +6,7 @@ "SNOWFLAKE_TEST_WAREHOUSE": "testwarehouse", "SNOWFLAKE_TEST_DATABASE": "testdatabase", "SNOWFLAKE_TEST_SCHEMA": "testschema", - "SNOWFLAKE_TEST_ROLE": "testrole" + "SNOWFLAKE_TEST_ROLE": "testrole", + "SNOWFLAKE_TEST_DEBUG": "false", } } diff --git a/vendor/github.com/snowflakedb/gosnowflake/priv_key_test_coding_helper.go b/vendor/github.com/snowflakedb/gosnowflake/priv_key_test_coding_helper.go index 684ce2c6..04484d68 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/priv_key_test_coding_helper.go +++ b/vendor/github.com/snowflakedb/gosnowflake/priv_key_test_coding_helper.go @@ -1,5 +1,3 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( diff --git a/vendor/github.com/snowflakedb/gosnowflake/query.go b/vendor/github.com/snowflakedb/gosnowflake/query.go index 162b4523..79d928e3 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/query.go +++ b/vendor/github.com/snowflakedb/gosnowflake/query.go @@ -1,5 +1,3 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -15,8 +13,10 @@ const ( ) type execBindParameter struct { - Type string `json:"type"` - Value interface{} `json:"value"` + Type string `json:"type"` + Value interface{} `json:"value"` + Format string `json:"fmt,omitempty"` + Schema *bindingSchema `json:"schema,omitempty"` } type execRequest struct { @@ -47,13 +47,36 @@ type contextData struct { } type execResponseRowType struct { - Name string `json:"name"` - ByteLength int64 `json:"byteLength"` - Length int64 `json:"length"` - Type string `json:"type"` - Precision int64 `json:"precision"` - Scale int64 `json:"scale"` - Nullable bool `json:"nullable"` + Name string `json:"name"` + Fields []fieldMetadata `json:"fields"` + ByteLength int64 `json:"byteLength"` + Length int64 `json:"length"` + Type string `json:"type"` + Precision int64 `json:"precision"` + Scale int64 `json:"scale"` + Nullable bool `json:"nullable"` +} + +func (ex *execResponseRowType) toFieldMetadata() fieldMetadata { + return fieldMetadata{ + ex.Name, + ex.Type, + ex.Nullable, + int(ex.Length), + int(ex.Scale), + int(ex.Precision), + ex.Fields, + } +} + +type fieldMetadata struct { + Name string `json:"name,omitempty"` + Type string `json:"type"` + Nullable bool `json:"nullable"` + Length int `json:"length"` + Scale int `json:"scale"` + Precision int `json:"precision"` + Fields []fieldMetadata `json:"fields,omitempty"` } type execResponseChunk struct { @@ -83,6 +106,8 @@ type execResponseStageInfo struct { Creds execResponseCredentials `json:"creds,omitempty"` PresignedURL string `json:"presignedUrl,omitempty"` EndPoint string `json:"endPoint,omitempty"` + UseS3RegionalURL bool `json:"useS3RegionalUrl,omitempty"` + UseRegionalURL bool `json:"useRegionalUrl,omitempty"` } // make all data field optional diff --git a/vendor/github.com/snowflakedb/gosnowflake/release.go b/vendor/github.com/snowflakedb/gosnowflake/release.go index c77eabe5..56efbca1 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/release.go +++ b/vendor/github.com/snowflakedb/gosnowflake/release.go @@ -1,5 +1,3 @@ -// Copyright (c) 2018-2022 Snowflake Computing Inc. All rights reserved. - //go:build !sfdebug // +build !sfdebug diff --git a/vendor/github.com/snowflakedb/gosnowflake/restful.go b/vendor/github.com/snowflakedb/gosnowflake/restful.go index c92d9c76..cc76549b 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/restful.go +++ b/vendor/github.com/snowflakedb/gosnowflake/restful.go @@ -1,5 +1,3 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -22,14 +20,6 @@ const ( headerAcceptTypeApplicationSnowflake = "application/snowflake" ) -// Snowflake Server Error code -const ( - queryInProgressCode = "333333" - queryInProgressAsyncCode = "333334" - sessionExpiredCode = "390112" - queryNotExecuting = "000605" -) - // Snowflake Server Endpoints const ( loginRequestPath = "/session/v1/login-request" @@ -40,6 +30,7 @@ const ( monitoringQueriesPath = "/monitoring/queries" sessionRequestPath = "/session" heartBeatPath = "/session/heartbeat" + consoleLoginRequestPath = "/console/login" ) type ( @@ -232,9 +223,9 @@ func postRestfulQueryHelper( requestID UUID, cfg *Config) ( data *execResponse, err error) { - logger.Infof("params: %v", params) - params.Add(requestIDKey, requestID.String()) - params.Add(requestGUIDKey, NewUUID().String()) + logger.WithContext(ctx).Infof("params: %v", params) + params.Set(requestIDKey, requestID.String()) + params.Set(requestGUIDKey, NewUUID().String()) token, _, _ := sr.TokenAccessor.GetTokens() if token != "" { headers[headerAuthorizationKey] = fmt.Sprintf(headerSnowflakeToken, token) @@ -280,7 +271,7 @@ func postRestfulQueryHelper( fullURL = sr.getFullURL(respd.Data.GetResultURL, nil) } - logger.Info("ping pong") + logger.WithContext(ctx).Info("ping pong") token, _, _ = sr.TokenAccessor.GetTokens() headers[headerAuthorizationKey] = fmt.Sprintf(headerSnowflakeToken, token) @@ -325,9 +316,9 @@ func postRestfulQueryHelper( func closeSession(ctx context.Context, sr *snowflakeRestful, timeout time.Duration) error { logger.WithContext(ctx).Info("close session") params := &url.Values{} - params.Add("delete", "true") - params.Add(requestIDKey, getOrGenerateRequestIDFromContext(ctx).String()) - params.Add(requestGUIDKey, NewUUID().String()) + params.Set("delete", "true") + params.Set(requestIDKey, getOrGenerateRequestIDFromContext(ctx).String()) + params.Set(requestGUIDKey, NewUUID().String()) fullURL := sr.getFullURL(sessionRequestPath, params) headers := getHeaders() @@ -375,8 +366,8 @@ func closeSession(ctx context.Context, sr *snowflakeRestful, timeout time.Durati func renewRestfulSession(ctx context.Context, sr *snowflakeRestful, timeout time.Duration) error { logger.WithContext(ctx).Info("start renew session") params := &url.Values{} - params.Add(requestIDKey, getOrGenerateRequestIDFromContext(ctx).String()) - params.Add(requestGUIDKey, NewUUID().String()) + params.Set(requestIDKey, getOrGenerateRequestIDFromContext(ctx).String()) + params.Set(requestGUIDKey, NewUUID().String()) fullURL := sr.getFullURL(tokenRequestPath, params) token, masterToken, _ := sr.TokenAccessor.GetTokens() @@ -448,8 +439,8 @@ func getCancelRetry(ctx context.Context) int { func cancelQuery(ctx context.Context, sr *snowflakeRestful, requestID UUID, timeout time.Duration) error { logger.WithContext(ctx).Info("cancel query") params := &url.Values{} - params.Add(requestIDKey, getOrGenerateRequestIDFromContext(ctx).String()) - params.Add(requestGUIDKey, NewUUID().String()) + params.Set(requestIDKey, getOrGenerateRequestIDFromContext(ctx).String()) + params.Set(requestGUIDKey, NewUUID().String()) fullURL := sr.getFullURL(abortRequestPath, params) @@ -482,7 +473,7 @@ func cancelQuery(ctx context.Context, sr *snowflakeRestful, requestID UUID, time return err } return sr.FuncCancelQuery(ctx, sr, requestID, timeout) - } else if !respd.Success && respd.Code == queryNotExecuting && ctxRetry != 0 { + } else if !respd.Success && respd.Code == queryNotExecutingCode && ctxRetry != 0 { return sr.FuncCancelQuery(context.WithValue(ctx, cancelRetry, ctxRetry-1), sr, requestID, timeout) } else if respd.Success { return nil diff --git a/vendor/github.com/snowflakedb/gosnowflake/result.go b/vendor/github.com/snowflakedb/gosnowflake/result.go index c2a71830..03a07988 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/result.go +++ b/vendor/github.com/snowflakedb/gosnowflake/result.go @@ -1,5 +1,3 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import "errors" diff --git a/vendor/github.com/snowflakedb/gosnowflake/retry.go b/vendor/github.com/snowflakedb/gosnowflake/retry.go index 5292f621..164ed337 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/retry.go +++ b/vendor/github.com/snowflakedb/gosnowflake/retry.go @@ -1,5 +1,3 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -40,7 +38,8 @@ var clientErrorsStatusCodesEligibleForRetry = []int{ func init() { random = rand.New(rand.NewSource(time.Now().UnixNano())) - defaultWaitAlgo = &waitAlgo{mutex: &sync.Mutex{}, random: random, base: 5 * time.Second, cap: 160 * time.Second} + // sleep time before retrying starts from 1s and the max sleep time is 16s + defaultWaitAlgo = &waitAlgo{mutex: &sync.Mutex{}, random: random, base: 1 * time.Second, cap: 16 * time.Second} } const ( @@ -211,21 +210,19 @@ func (w *waitAlgo) calculateWaitBeforeRetryForAuthRequest(attempt int, currWaitT return time.Duration(jitteredSleepTime * float64(time.Second)) } -func (w *waitAlgo) calculateWaitBeforeRetry(attempt int, sleep time.Duration) time.Duration { +func (w *waitAlgo) calculateWaitBeforeRetry(sleep time.Duration) time.Duration { w.mutex.Lock() defer w.mutex.Unlock() - t := 3*sleep - w.base - switch { - case t > 0: - return durationMin(w.cap, randSecondDuration(t)+w.base) - case t < 0: - return durationMin(w.cap, randSecondDuration(-t)+3*sleep) - } - return w.base + // use decorrelated jitter in retry time + randDuration := randMilliSecondDuration(w.base, sleep*3) + return durationMin(w.cap, randDuration) } -func randSecondDuration(n time.Duration) time.Duration { - return time.Duration(random.Int63n(int64(n/time.Second))) * time.Second +func randMilliSecondDuration(base time.Duration, bound time.Duration) time.Duration { + baseNumber := int64(base / time.Millisecond) + boundNumber := int64(bound / time.Millisecond) + randomDuration := random.Int63n(boundNumber-baseNumber) + baseNumber + return time.Duration(randomDuration) * time.Millisecond } func (w *waitAlgo) getJitter(currWaitTime float64) float64 { @@ -307,7 +304,7 @@ func (r *retryHTTP) execute() (res *http.Response, err error) { var retryReasonUpdater retryReasonUpdater for { - logger.Debugf("retry count: %v", retryCounter) + logger.WithContext(r.ctx).Debugf("retry count: %v", retryCounter) body, err := r.bodyCreator() if err != nil { return nil, err @@ -342,7 +339,7 @@ func (r *retryHTTP) execute() (res *http.Response, err error) { if isLoginRequest(req) { sleepTime = defaultWaitAlgo.calculateWaitBeforeRetryForAuthRequest(retryCounter, sleepTime) } else { - sleepTime = defaultWaitAlgo.calculateWaitBeforeRetry(retryCounter, sleepTime) + sleepTime = defaultWaitAlgo.calculateWaitBeforeRetry(sleepTime) } if totalTimeout > 0 { @@ -354,9 +351,9 @@ func (r *retryHTTP) execute() (res *http.Response, err error) { return nil, err } if res != nil { - return nil, fmt.Errorf("timeout after %s and %v retries. HTTP Status: %v. Hanging?", r.timeout, retryCounter, res.StatusCode) + return nil, fmt.Errorf("timeout after %s and %v attempts. HTTP Status: %v. Hanging?", r.timeout, retryCounter, res.StatusCode) } - return nil, fmt.Errorf("timeout after %s and %v retries. Hanging?", r.timeout, retryCounter) + return nil, fmt.Errorf("timeout after %s and %v attempts. Hanging?", r.timeout, retryCounter) } } if requestGUIDReplacer == nil { diff --git a/vendor/github.com/snowflakedb/gosnowflake/rows.go b/vendor/github.com/snowflakedb/gosnowflake/rows.go index f8e5d50f..1f4df3a9 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/rows.go +++ b/vendor/github.com/snowflakedb/gosnowflake/rows.go @@ -1,8 +1,7 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( + "context" "database/sql/driver" "io" "reflect" @@ -44,6 +43,8 @@ type snowflakeRows struct { err error errChannel chan error location *time.Location + ctx context.Context + format resultFormat } func (rows *snowflakeRows) getLocation() *time.Location { @@ -135,7 +136,7 @@ func (rows *snowflakeRows) Columns() []string { if err := rows.waitForAsyncQueryStatus(); err != nil { return make([]string, 0) } - logger.Debug("Rows.Columns") + logger.WithContext(rows.ctx).Debug("Rows.Columns") ret := make([]string, len(rows.ChunkDownloader.getRowType())) for i, n := 0, len(rows.ChunkDownloader.getRowType()); i < n; i++ { ret[i] = rows.ChunkDownloader.getRowType()[i].Name @@ -147,9 +148,7 @@ func (rows *snowflakeRows) ColumnTypeScanType(index int) reflect.Type { if err := rows.waitForAsyncQueryStatus(); err != nil { return nil } - return snowflakeTypeToGo( - getSnowflakeType(rows.ChunkDownloader.getRowType()[index].Type), - rows.ChunkDownloader.getRowType()[index].Scale) + return snowflakeTypeToGo(rows.ctx, getSnowflakeType(rows.ChunkDownloader.getRowType()[index].Type), rows.ChunkDownloader.getRowType()[index].Scale, rows.ChunkDownloader.getRowType()[index].Fields) } func (rows *snowflakeRows) GetQueryID() string { @@ -168,6 +167,10 @@ func (rows *snowflakeRows) GetArrowBatches() ([]*ArrowBatch, error) { return nil, err } + if rows.format != arrowFormat { + return nil, errNonArrowResponseForArrowBatches(rows.queryID).exceptionTelemetry(rows.sc) + } + return rows.ChunkDownloader.getArrowBatches(), nil } @@ -192,7 +195,7 @@ func (rows *snowflakeRows) Next(dest []driver.Value) (err error) { for i, n := 0, len(row.RowSet); i < n; i++ { // could move to chunk downloader so that each go routine // can convert data - err = stringToValue(&dest[i], rows.ChunkDownloader.getRowType()[i], row.RowSet[i], rows.getLocation()) + err = stringToValue(rows.ctx, &dest[i], rows.ChunkDownloader.getRowType()[i], row.RowSet[i], rows.getLocation(), rows.sc.cfg.Params) if err != nil { return err } diff --git a/vendor/github.com/snowflakedb/gosnowflake/s3_storage_client.go b/vendor/github.com/snowflakedb/gosnowflake/s3_storage_client.go index 37799c82..1c5d3897 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/s3_storage_client.go +++ b/vendor/github.com/snowflakedb/gosnowflake/s3_storage_client.go @@ -1,9 +1,8 @@ -// Copyright (c) 2021-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( "bytes" + "cmp" "context" "errors" "fmt" @@ -17,6 +16,7 @@ import ( "github.com/aws/aws-sdk-go-v2/feature/s3/manager" "github.com/aws/aws-sdk-go-v2/service/s3" "github.com/aws/smithy-go" + "github.com/aws/smithy-go/logging" ) const ( @@ -31,6 +31,7 @@ const ( ) type snowflakeS3Client struct { + cfg *Config } type s3Location struct { @@ -38,12 +39,15 @@ type s3Location struct { s3Path string } +// S3LoggingMode allows to configure which logs should be included. +// By default no logs are included. +// See https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws#ClientLogMode for allowed values. +var S3LoggingMode aws.ClientLogMode + func (util *snowflakeS3Client) createClient(info *execResponseStageInfo, useAccelerateEndpoint bool) (cloudClient, error) { stageCredentials := info.Creds - var resolver s3.EndpointResolver - if info.EndPoint != "" { - resolver = s3.EndpointResolverFromURL("https://" + info.EndPoint) // FIPS endpoint - } + s3Logger := logging.LoggerFunc(s3LoggingFunc) + endPoint := getS3CustomEndpoint(info) return s3.New(s3.Options{ Region: info.Region, @@ -51,14 +55,49 @@ func (util *snowflakeS3Client) createClient(info *execResponseStageInfo, useAcce stageCredentials.AwsKeyID, stageCredentials.AwsSecretKey, stageCredentials.AwsToken)), - EndpointResolver: resolver, - UseAccelerate: useAccelerateEndpoint, + BaseEndpoint: endPoint, + UseAccelerate: useAccelerateEndpoint, HTTPClient: &http.Client{ - Transport: SnowflakeTransport, + Transport: getTransport(util.cfg), }, + ClientLogMode: S3LoggingMode, + Logger: s3Logger, }), nil } +// to be used with S3 transferAccelerateConfigWithUtil +func (util *snowflakeS3Client) createClientWithConfig(info *execResponseStageInfo, useAccelerateEndpoint bool, cfg *Config) (cloudClient, error) { + // copy snowflakeFileTransferAgent's config onto the cloud client so we could decide which Transport to use + util.cfg = cfg + return util.createClient(info, useAccelerateEndpoint) +} + +func getS3CustomEndpoint(info *execResponseStageInfo) *string { + var endPoint *string + isRegionalURLEnabled := info.UseRegionalURL || info.UseS3RegionalURL + if info.EndPoint != "" { + tmp := fmt.Sprintf("https://%s", info.EndPoint) + endPoint = &tmp + } else if info.Region != "" && isRegionalURLEnabled { + domainSuffixForRegionalURL := "amazonaws.com" + if strings.HasPrefix(strings.ToLower(info.Region), "cn-") { + domainSuffixForRegionalURL = "amazonaws.com.cn" + } + tmp := fmt.Sprintf("https://s3.%s.%s", info.Region, domainSuffixForRegionalURL) + endPoint = &tmp + } + return endPoint +} + +func s3LoggingFunc(classification logging.Classification, format string, v ...interface{}) { + switch classification { + case logging.Debug: + logger.WithField("logger", "S3").Debugf(format, v...) + case logging.Warn: + logger.WithField("logger", "S3").Warnf(format, v...) + } +} + type s3HeaderAPI interface { HeadObject(ctx context.Context, params *s3.HeadObjectInput, optFns ...func(*s3.Options)) (*s3.HeadObjectOutput, error) } @@ -78,7 +117,9 @@ func (util *snowflakeS3Client) getFileHeader(meta *fileMetadata, filename string if meta.mockHeader != nil { s3Cli = meta.mockHeader } - out, err := s3Cli.HeadObject(context.Background(), headObjInput) + out, err := withCloudStorageTimeout(util.cfg, func(ctx context.Context) (*s3.HeadObjectOutput, error) { + return s3Cli.HeadObject(ctx, headObjInput) + }) if err != nil { var ae smithy.APIError if errors.As(err, &ae) { @@ -136,17 +177,16 @@ type s3UploadAPI interface { func (util *snowflakeS3Client) uploadFile( dataFile string, meta *fileMetadata, - encryptMeta *encryptMetadata, maxConcurrency int, multiPartThreshold int64) error { s3Meta := map[string]string{ httpHeaderContentType: httpHeaderValueOctetStream, sfcDigest: meta.sha256Digest, } - if encryptMeta != nil { - s3Meta[amzIv] = encryptMeta.iv - s3Meta[amzKey] = encryptMeta.key - s3Meta[amzMatdesc] = encryptMeta.matdesc + if meta.encryptMeta != nil { + s3Meta[amzIv] = meta.encryptMeta.iv + s3Meta[amzKey] = meta.encryptMeta.key + s3Meta[amzMatdesc] = meta.encryptMeta.matdesc } s3loc, err := util.extractBucketNameAndPath(meta.stageInfo.Location) @@ -171,30 +211,29 @@ func (util *snowflakeS3Client) uploadFile( uploader = meta.mockUploader } - if meta.srcStream != nil { - uploadStream := meta.srcStream - if meta.realSrcStream != nil { - uploadStream = meta.realSrcStream + _, err = withCloudStorageTimeout(util.cfg, func(ctx context.Context) (any, error) { + if meta.srcStream != nil { + uploadStream := cmp.Or(meta.realSrcStream, meta.srcStream) + return uploader.Upload(ctx, &s3.PutObjectInput{ + Bucket: &s3loc.bucketName, + Key: &s3path, + Body: bytes.NewBuffer(uploadStream.Bytes()), + Metadata: s3Meta, + }) } - _, err = uploader.Upload(context.Background(), &s3.PutObjectInput{ - Bucket: &s3loc.bucketName, - Key: &s3path, - Body: bytes.NewBuffer(uploadStream.Bytes()), - Metadata: s3Meta, - }) - } else { var file *os.File file, err = os.Open(dataFile) if err != nil { - return err + return nil, err } - _, err = uploader.Upload(context.Background(), &s3.PutObjectInput{ + return uploader.Upload(ctx, &s3.PutObjectInput{ Bucket: &s3loc.bucketName, Key: &s3path, Body: file, Metadata: s3Meta, }) - } + + }) if err != nil { var ae smithy.APIError @@ -247,10 +286,25 @@ func (util *snowflakeS3Client) nativeDownloadFile( if meta.mockDownloader != nil { downloader = meta.mockDownloader } - if _, err = downloader.Download(context.Background(), f, &s3.GetObjectInput{ - Bucket: s3Obj.Bucket, - Key: s3Obj.Key, - }); err != nil { + + _, err = withCloudStorageTimeout(util.cfg, func(ctx context.Context) (any, error) { + if meta.options.GetFileToStream { + buf := manager.NewWriteAtBuffer([]byte{}) + _, err = downloader.Download(ctx, buf, &s3.GetObjectInput{ + Bucket: s3Obj.Bucket, + Key: s3Obj.Key, + }) + meta.dstStream = bytes.NewBuffer(buf.Bytes()) + } else { + _, err = downloader.Download(ctx, f, &s3.GetObjectInput{ + Bucket: s3Obj.Bucket, + Key: s3Obj.Key, + }) + } + return nil, err + }) + + if err != nil { var ae smithy.APIError if errors.As(err, &ae) { if ae.ErrorCode() == expiredToken { diff --git a/vendor/github.com/snowflakedb/gosnowflake/secret_detector.go b/vendor/github.com/snowflakedb/gosnowflake/secret_detector.go index b0e98e8a..a501713a 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/secret_detector.go +++ b/vendor/github.com/snowflakedb/gosnowflake/secret_detector.go @@ -1,5 +1,3 @@ -// Copyright (c) 2021-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import "regexp" @@ -8,10 +6,11 @@ const ( awsKeyPattern = `(?i)(aws_key_id|aws_secret_key|access_key_id|secret_access_key)\s*=\s*'([^']+)'` awsTokenPattern = `(?i)(accessToken|tempToken|keySecret)"\s*:\s*"([a-z0-9/+]{32,}={0,2})"` sasTokenPattern = `(?i)(sig|signature|AWSAccessKeyId|password|passcode)=(?P[a-z0-9%/+]{16,})` - privateKeyPattern = `(?im)-----BEGIN PRIVATE KEY-----\\n([a-z0-9/+=\\n]{32,})\\n-----END PRIVATE KEY-----` + privateKeyPattern = `(?im)-----BEGIN PRIVATE KEY-----\\n([a-z0-9/+=\\n]{32,})\\n-----END PRIVATE KEY-----` // pragma: allowlist secret privateKeyDataPattern = `(?i)"privateKeyData": "([a-z0-9/+=\\n]{10,})"` connectionTokenPattern = `(?i)(token|assertion content)([\'\"\s:=]+)([a-z0-9=/_\-\+]{8,})` passwordPattern = `(?i)(password|pwd)([\'\"\s:=]+)([a-z0-9!\"#\$%&\\\'\(\)\*\+\,-\./:;<=>\?\@\[\]\^_\{\|\}~]{8,})` + clientSecretPattern = `(?i)(clientSecret)([\'\"\s:= ]+)([a-z0-9!\"#\$%&\\\'\(\)\*\+\,-\./:;<=>\?\@\[\]\^_\{\|\}~]+)` ) var ( @@ -22,6 +21,7 @@ var ( privateKeyDataRegexp = regexp.MustCompile(privateKeyDataPattern) connectionTokenRegexp = regexp.MustCompile(connectionTokenPattern) passwordRegexp = regexp.MustCompile(passwordPattern) + clientSecretRegexp = regexp.MustCompile(clientSecretPattern) ) func maskConnectionToken(text string) string { @@ -45,13 +45,17 @@ func maskSasToken(text string) string { } func maskPrivateKey(text string) string { - return privateKeyRegexp.ReplaceAllString(text, "-----BEGIN PRIVATE KEY-----\\\\\\\\nXXXX\\\\\\\\n-----END PRIVATE KEY-----") + return privateKeyRegexp.ReplaceAllString(text, "-----BEGIN PRIVATE KEY-----\\\\\\\\nXXXX\\\\\\\\n-----END PRIVATE KEY-----") // pragma: allowlist secret } func maskPrivateKeyData(text string) string { return privateKeyDataRegexp.ReplaceAllString(text, `"privateKeyData": "XXXX"`) } +func maskClientSecret(text string) string { + return clientSecretRegexp.ReplaceAllString(text, "$1${2}****") +} + func maskSecrets(text string) string { return maskConnectionToken( maskPassword( @@ -59,5 +63,7 @@ func maskSecrets(text string) string { maskPrivateKey( maskAwsToken( maskSasToken( - maskAwsKey(text))))))) + maskAwsKey( + maskClientSecret( + text)))))))) } diff --git a/vendor/github.com/snowflakedb/gosnowflake/secure_storage_manager.go b/vendor/github.com/snowflakedb/gosnowflake/secure_storage_manager.go index 9b83a2be..20628848 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/secure_storage_manager.go +++ b/vendor/github.com/snowflakedb/gosnowflake/secure_storage_manager.go @@ -1,12 +1,17 @@ -// Copyright (c) 2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( + "crypto/sha256" + "encoding/hex" "encoding/json" + "errors" + "fmt" + "io" "os" + "os/user" "path/filepath" "runtime" + "strconv" "strings" "sync" "time" @@ -14,112 +19,488 @@ import ( "github.com/99designs/keyring" ) +type tokenType string + const ( - driverName = "SNOWFLAKE-GO-DRIVER" - credCacheDirEnv = "SF_TEMPORARY_CREDENTIAL_CACHE_DIR" - credCacheFileName = "temporary_credential.json" + idToken tokenType = "ID_TOKEN" + mfaToken tokenType = "MFA_TOKEN" + oauthAccessToken tokenType = "OAUTH_ACCESS_TOKEN" + oauthRefreshToken tokenType = "OAUTH_REFRESH_TOKEN" ) -var ( - credCacheDir = "" - credCache = "" - localCredCache = map[string]string{} +const ( + credCacheDirEnv = "SF_TEMPORARY_CREDENTIAL_CACHE_DIR" + credCacheFileName = "credential_cache_v1.json" ) -var ( - temporaryCredCacheLock sync.RWMutex -) +type cacheDirConf struct { + envVar string + pathSegments []string +} -func createCredentialCacheDir() { - credCacheDir = os.Getenv(credCacheDirEnv) - if credCacheDir == "" { - switch runtime.GOOS { - case "windows": - credCacheDir = filepath.Join(os.Getenv("USERPROFILE"), "AppData", "Local", "Snowflake", "Caches") - case "darwin": - home := os.Getenv("HOME") - if home == "" { - logger.Info("HOME is blank.") - } - credCacheDir = filepath.Join(home, "Library", "Caches", "Snowflake") - default: - home := os.Getenv("HOME") - if home == "" { - logger.Info("HOME is blank") +var defaultLinuxCacheDirConf = []cacheDirConf{ + {envVar: credCacheDirEnv, pathSegments: []string{}}, + {envVar: "XDG_CACHE_DIR", pathSegments: []string{"snowflake"}}, + {envVar: "HOME", pathSegments: []string{".cache", "snowflake"}}, +} + +type secureTokenSpec struct { + host, user string + tokenType tokenType +} + +func (t *secureTokenSpec) buildKey() (string, error) { + return buildCredentialsKey(t.host, t.user, t.tokenType) +} + +func newMfaTokenSpec(host, user string) *secureTokenSpec { + return &secureTokenSpec{ + host, + user, + mfaToken, + } +} + +func newIDTokenSpec(host, user string) *secureTokenSpec { + return &secureTokenSpec{ + host, + user, + idToken, + } +} + +func newOAuthAccessTokenSpec(host, user string) *secureTokenSpec { + return &secureTokenSpec{ + host, + user, + oauthAccessToken, + } +} + +func newOAuthRefreshTokenSpec(host, user string) *secureTokenSpec { + return &secureTokenSpec{ + host, + user, + oauthRefreshToken, + } +} + +type secureStorageManager interface { + setCredential(tokenSpec *secureTokenSpec, value string) + getCredential(tokenSpec *secureTokenSpec) string + deleteCredential(tokenSpec *secureTokenSpec) +} + +var credentialsStorage = newSecureStorageManager() + +func newSecureStorageManager() secureStorageManager { + switch runtime.GOOS { + case "linux": + ssm, err := newFileBasedSecureStorageManager() + if err != nil { + logger.Debugf("failed to create credentials cache dir. %v", err) + return newNoopSecureStorageManager() + } + return &threadSafeSecureStorageManager{&sync.Mutex{}, ssm} + case "darwin", "windows": + return &threadSafeSecureStorageManager{&sync.Mutex{}, newKeyringBasedSecureStorageManager()} + default: + logger.Warnf("OS %v does not support credentials cache", runtime.GOOS) + return newNoopSecureStorageManager() + } +} + +type fileBasedSecureStorageManager struct { + credDirPath string +} + +func newFileBasedSecureStorageManager() (*fileBasedSecureStorageManager, error) { + credDirPath, err := buildCredCacheDirPath(defaultLinuxCacheDirConf) + if err != nil { + return nil, err + } + ssm := &fileBasedSecureStorageManager{ + credDirPath: credDirPath, + } + return ssm, nil +} + +func lookupCacheDir(envVar string, pathSegments ...string) (string, error) { + envVal := os.Getenv(envVar) + if envVal == "" { + return "", fmt.Errorf("environment variable %s not set", envVar) + } + + fileInfo, err := os.Stat(envVal) + if err != nil { + return "", fmt.Errorf("failed to stat %s=%s, due to %v", envVar, envVal, err) + } + + if !fileInfo.IsDir() { + return "", fmt.Errorf("environment variable %s=%s is not a directory", envVar, envVal) + } + + cacheDir := filepath.Join(envVal, filepath.Join(pathSegments...)) + parentOfCacheDir := cacheDir[:strings.LastIndex(cacheDir, "/")] + + if err = os.MkdirAll(parentOfCacheDir, os.FileMode(0755)); err != nil { + return "", err + } + + // We don't check if permissions are incorrect here if a directory exists, because we check it later. + if err = os.Mkdir(cacheDir, os.FileMode(0700)); err != nil && !errors.Is(err, os.ErrExist) { + return "", err + } + + return cacheDir, nil +} + +func buildCredCacheDirPath(confs []cacheDirConf) (string, error) { + for _, conf := range confs { + path, err := lookupCacheDir(conf.envVar, conf.pathSegments...) + if err != nil { + logger.Debugf("Skipping %s in cache directory lookup due to %v", conf.envVar, err) + } else { + logger.Debugf("Using %s as cache directory", path) + return path, nil + } + } + + return "", errors.New("no credentials cache directory found") +} + +func (ssm *fileBasedSecureStorageManager) getTokens(data map[string]any) map[string]interface{} { + val, ok := data["tokens"] + if !ok { + return map[string]interface{}{} + } + + tokens, ok := val.(map[string]interface{}) + if !ok { + return map[string]interface{}{} + } + + return tokens +} + +func (ssm *fileBasedSecureStorageManager) withLock(action func(cacheFile *os.File)) { + err := ssm.lockFile() + if err != nil { + logger.Warnf("Unable to lock cache. %v", err) + return + } + defer ssm.unlockFile() + + ssm.withCacheFile(action) +} + +func (ssm *fileBasedSecureStorageManager) withCacheFile(action func(*os.File)) { + cacheFile, err := os.OpenFile(ssm.credFilePath(), os.O_CREATE|os.O_RDWR, 0600) + if err != nil { + logger.Warnf("cannot access %v. %v", ssm.credFilePath(), err) + return + } + defer func(file *os.File) { + if err := file.Close(); err != nil { + logger.Warnf("cannot release file descriptor for %v. %v", ssm.credFilePath(), err) + } + }(cacheFile) + + cacheDir, err := os.Open(ssm.credDirPath) + if err != nil { + logger.Warnf("cannot access %v. %v", ssm.credDirPath, err) + } + defer func(file *os.File) { + if err := file.Close(); err != nil { + logger.Warnf("cannot release file descriptor for %v. %v", cacheDir, err) + } + }(cacheDir) + + if err := ensureFileOwner(cacheFile); err != nil { + logger.Warnf("failed to ensure owner for temporary cache file. %v", err) + return + } + if err := ensureFilePermissions(cacheFile, 0600); err != nil { + logger.Warnf("failed to ensure permission for temporary cache file. %v", err) + return + } + if err := ensureFileOwner(cacheDir); err != nil { + logger.Warnf("failed to ensure owner for temporary cache dir. %v", err) + return + } + if err := ensureFilePermissions(cacheDir, 0700|os.ModeDir); err != nil { + logger.Warnf("failed to ensure permission for temporary cache dir. %v", err) + return + } + + action(cacheFile) +} + +func (ssm *fileBasedSecureStorageManager) setCredential(tokenSpec *secureTokenSpec, value string) { + credentialsKey, err := tokenSpec.buildKey() + if err != nil { + logger.Warn(err) + return + } + + ssm.withLock(func(cacheFile *os.File) { + credCache, err := ssm.readTemporaryCacheFile(cacheFile) + if err != nil { + logger.Warnf("Error while reading cache file. %v", err) + return + } + tokens := ssm.getTokens(credCache) + tokens[credentialsKey] = value + credCache["tokens"] = tokens + err = ssm.writeTemporaryCacheFile(credCache, cacheFile) + if err != nil { + logger.Warnf("Set credential failed. Unable to write cache. %v", err) + } + }) +} + +func (ssm *fileBasedSecureStorageManager) lockPath() string { + return filepath.Join(ssm.credDirPath, credCacheFileName+".lck") +} + +func (ssm *fileBasedSecureStorageManager) lockFile() error { + const numRetries = 10 + const retryInterval = 100 * time.Millisecond + lockPath := ssm.lockPath() + + fileInfo, err := os.Stat(lockPath) + if err != nil && !errors.Is(err, os.ErrNotExist) { + return fmt.Errorf("failed to stat %v and determine if lock is stale. err: %v", lockPath, err) + } + + // removing stale lock + now := time.Now() + if !errors.Is(err, os.ErrNotExist) && fileInfo.ModTime().Add(time.Second).UnixNano() < now.UnixNano() { + logger.Debugf("removing credentials cache lock file, stale for %vms", (now.UnixNano()-fileInfo.ModTime().UnixNano())/1000/1000) + err = os.Remove(lockPath) + if err != nil { + return fmt.Errorf("failed to remove %v while trying to remove stale lock. err: %v", lockPath, err) + } + } + + locked := false + for i := 0; i < numRetries; i++ { + err := os.Mkdir(lockPath, 0700) + if err != nil { + if errors.Is(err, os.ErrExist) { + time.Sleep(retryInterval) + continue } - credCacheDir = filepath.Join(home, ".cache", "snowflake") + return fmt.Errorf("failed to create cache lock: %v, err: %v", lockPath, err) } + locked = true + break + } + if !locked { + return fmt.Errorf("failed to lock cache. lockPath: %v", lockPath) + } + return nil +} + +func (ssm *fileBasedSecureStorageManager) unlockFile() { + lockPath := ssm.lockPath() + err := os.Remove(lockPath) + if err != nil { + logger.Warnf("Failed to unlock cache lock: %v. %v", lockPath, err) + } +} + +func (ssm *fileBasedSecureStorageManager) getCredential(tokenSpec *secureTokenSpec) string { + credentialsKey, err := tokenSpec.buildKey() + if err != nil { + logger.Warn(err) + return "" } - if _, err := os.Stat(credCacheDir); os.IsNotExist(err) { - if err = os.MkdirAll(credCacheDir, os.ModePerm); err != nil { - logger.Debugf("Failed to create cache directory. %v, err: %v. ignored\n", credCacheDir, err) + ret := "" + ssm.withLock(func(cacheFile *os.File) { + credCache, err := ssm.readTemporaryCacheFile(cacheFile) + if err != nil { + logger.Warnf("Error while reading cache file. %v", err) + return + } + cred, ok := ssm.getTokens(credCache)[credentialsKey] + if !ok { + return + } + + credStr, ok := cred.(string) + if !ok { + return } + + ret = credStr + }) + return ret +} + +func (ssm *fileBasedSecureStorageManager) credFilePath() string { + return filepath.Join(ssm.credDirPath, credCacheFileName) +} + +func ensureFileOwner(f *os.File) error { + ownerUID, err := provideFileOwner(f) + if err != nil && !errors.Is(err, os.ErrNotExist) { + return err + } + currentUser, err := user.Current() + if err != nil { + return err } - credCache = filepath.Join(credCacheDir, credCacheFileName) - logger.Infof("Cache directory: %v", credCache) + if errors.Is(err, os.ErrNotExist) { + return nil + } + if strconv.Itoa(int(ownerUID)) != currentUser.Uid { + return errors.New("incorrect owner of " + f.Name()) + } + return nil } -func setCredential(sc *snowflakeConn, credType, token string) { - if token == "" { +func ensureFilePermissions(f *os.File, expectedMode os.FileMode) error { + fileInfo, err := f.Stat() + if err != nil { + return err + } + if fileInfo.Mode().Perm() != expectedMode&os.ModePerm { + return fmt.Errorf("incorrect permissions(%v, expected %v) for credential file", fileInfo.Mode(), expectedMode) + } + return nil +} + +func (ssm *fileBasedSecureStorageManager) readTemporaryCacheFile(cacheFile *os.File) (map[string]any, error) { + + jsonData, err := io.ReadAll(cacheFile) + if err != nil { + logger.Warnf("Failed to read credential cache file. %v.\n", err) + return map[string]any{}, nil + } + if _, err = cacheFile.Seek(0, 0); err != nil { + return map[string]any{}, fmt.Errorf("cannot seek to the beginning of a cache file. %v", err) + } + + if len(jsonData) == 0 { + // Happens when the file didn't exist before. + return map[string]any{}, nil + } + + credentialsMap := map[string]any{} + err = json.Unmarshal(jsonData, &credentialsMap) + if err != nil { + return map[string]any{}, fmt.Errorf("failed to unmarshal credential cache file. %v", err) + } + + return credentialsMap, nil +} + +func (ssm *fileBasedSecureStorageManager) deleteCredential(tokenSpec *secureTokenSpec) { + credentialsKey, err := tokenSpec.buildKey() + if err != nil { + logger.Warn(err) + return + } + + ssm.withLock(func(cacheFile *os.File) { + credCache, err := ssm.readTemporaryCacheFile(cacheFile) + if err != nil { + logger.Warnf("Error while reading cache file. %v", err) + return + } + delete(ssm.getTokens(credCache), credentialsKey) + + err = ssm.writeTemporaryCacheFile(credCache, cacheFile) + if err != nil { + logger.Warnf("Set credential failed. Unable to write cache. %v", err) + } + }) +} + +func (ssm *fileBasedSecureStorageManager) writeTemporaryCacheFile(cache map[string]any, cacheFile *os.File) error { + bytes, err := json.Marshal(cache) + if err != nil { + return fmt.Errorf("failed to marshal credential cache map. %w", err) + } + + if err = cacheFile.Truncate(0); err != nil { + return fmt.Errorf("error while truncating credentials cache. %v", err) + } + _, err = cacheFile.Write(bytes) + if err != nil { + return fmt.Errorf("failed to write the credential cache file: %w", err) + } + return nil +} + +type keyringSecureStorageManager struct { +} + +func newKeyringBasedSecureStorageManager() *keyringSecureStorageManager { + return &keyringSecureStorageManager{} +} + +func (ssm *keyringSecureStorageManager) setCredential(tokenSpec *secureTokenSpec, value string) { + if value == "" { logger.Debug("no token provided") } else { - var target string + credentialsKey, err := tokenSpec.buildKey() + if err != nil { + logger.Warn(err) + return + } if runtime.GOOS == "windows" { - target = driverName + ":" + credType ring, _ := keyring.Open(keyring.Config{ - WinCredPrefix: strings.ToUpper(sc.cfg.Host), - ServiceName: strings.ToUpper(sc.cfg.User), + WinCredPrefix: strings.ToUpper(tokenSpec.host), + ServiceName: strings.ToUpper(tokenSpec.user), }) item := keyring.Item{ - Key: target, - Data: []byte(token), + Key: credentialsKey, + Data: []byte(value), } if err := ring.Set(item); err != nil { logger.Debugf("Failed to write to Windows credential manager. Err: %v", err) } } else if runtime.GOOS == "darwin" { - target = convertTarget(sc.cfg.Host, sc.cfg.User, credType) ring, _ := keyring.Open(keyring.Config{ - ServiceName: target, + ServiceName: credentialsKey, }) - account := strings.ToUpper(sc.cfg.User) + account := strings.ToUpper(tokenSpec.user) item := keyring.Item{ Key: account, - Data: []byte(token), + Data: []byte(value), } if err := ring.Set(item); err != nil { logger.Debugf("Failed to write to keychain. Err: %v", err) } - } else if runtime.GOOS == "linux" { - createCredentialCacheDir() - writeTemporaryCredential(sc, credType, token) - } else { - logger.Debug("OS not supported for Local Secure Storage") } } } -func getCredential(sc *snowflakeConn, credType string) { - var target string +func (ssm *keyringSecureStorageManager) getCredential(tokenSpec *secureTokenSpec) string { cred := "" + credentialsKey, err := tokenSpec.buildKey() + if err != nil { + logger.Warn(err) + return "" + } if runtime.GOOS == "windows" { - target = driverName + ":" + credType ring, _ := keyring.Open(keyring.Config{ - WinCredPrefix: strings.ToUpper(sc.cfg.Host), - ServiceName: strings.ToUpper(sc.cfg.User), + WinCredPrefix: strings.ToUpper(tokenSpec.host), + ServiceName: strings.ToUpper(tokenSpec.user), }) - i, err := ring.Get(target) + i, err := ring.Get(credentialsKey) if err != nil { - logger.Debugf("Failed to read target or could not find it in Windows Credential Manager. Error: %v", err) + logger.Debugf("Failed to read credentialsKey or could not find it in Windows Credential Manager. Error: %v", err) } cred = string(i.Data) } else if runtime.GOOS == "darwin" { - target = convertTarget(sc.cfg.Host, sc.cfg.User, credType) ring, _ := keyring.Open(keyring.Config{ - ServiceName: target, + ServiceName: credentialsKey, }) - account := strings.ToUpper(sc.cfg.User) + account := strings.ToUpper(tokenSpec.user) i, err := ring.Get(account) if err != nil { logger.Debugf("Failed to find the item in keychain or item does not exist. Error: %v", err) @@ -130,153 +511,86 @@ func getCredential(sc *snowflakeConn, credType string) { } else { logger.Debug("Successfully read token. Returning as string") } - } else if runtime.GOOS == "linux" { - createCredentialCacheDir() - cred = readTemporaryCredential(sc, credType) - } else { - logger.Debug("OS not supported for Local Secure Storage") - } - - if credType == idToken { - sc.cfg.IDToken = cred - } else if credType == mfaToken { - sc.cfg.MfaToken = cred - } else { - logger.Debugf("Unrecognized type %v for local cached credential", credType) } + return cred } -func deleteCredential(sc *snowflakeConn, credType string) { - target := driverName + ":" + credType +func (ssm *keyringSecureStorageManager) deleteCredential(tokenSpec *secureTokenSpec) { + credentialsKey, err := tokenSpec.buildKey() + if err != nil { + logger.Warn(err) + return + } if runtime.GOOS == "windows" { ring, _ := keyring.Open(keyring.Config{ - WinCredPrefix: strings.ToUpper(sc.cfg.Host), - ServiceName: strings.ToUpper(sc.cfg.User), + WinCredPrefix: strings.ToUpper(tokenSpec.host), + ServiceName: strings.ToUpper(tokenSpec.user), }) - err := ring.Remove(target) + err := ring.Remove(string(credentialsKey)) if err != nil { - logger.Debugf("Failed to delete target in Windows Credential Manager. Error: %v", err) + logger.Debugf("Failed to delete credentialsKey in Windows Credential Manager. Error: %v", err) } } else if runtime.GOOS == "darwin" { - target = convertTarget(sc.cfg.Host, sc.cfg.User, credType) ring, _ := keyring.Open(keyring.Config{ - ServiceName: target, + ServiceName: credentialsKey, }) - account := strings.ToUpper(sc.cfg.User) + account := strings.ToUpper(tokenSpec.user) err := ring.Remove(account) if err != nil { - logger.Debugf("Failed to delete target in keychain. Error: %v", err) + logger.Debugf("Failed to delete credentialsKey in keychain. Error: %v", err) } - } else if runtime.GOOS == "linux" { - deleteTemporaryCredential(sc, credType) } } -// Reads temporary credential file when OS is Linux. -func readTemporaryCredential(sc *snowflakeConn, credType string) string { - target := convertTarget(sc.cfg.Host, sc.cfg.User, credType) - temporaryCredCacheLock.RLock() - localCredCache := readTemporaryCacheFile() - temporaryCredCacheLock.RUnlock() - cred := localCredCache[target] - if cred != "" { - logger.Debug("Successfully read token. Returning as string") - } else { - logger.Debug("Returned credential is empty") +func buildCredentialsKey(host, user string, credType tokenType) (string, error) { + if host == "" { + return "", errors.New("host is not provided to store in token cache, skipping") } - return cred + if user == "" { + return "", errors.New("user is not provided to store in token cache, skipping") + } + plainCredKey := host + ":" + user + ":" + string(credType) + checksum := sha256.New() + checksum.Write([]byte(plainCredKey)) + return hex.EncodeToString(checksum.Sum(nil)), nil +} + +type noopSecureStorageManager struct { } -// Writes to temporary credential file when OS is Linux. -func writeTemporaryCredential(sc *snowflakeConn, credType, token string) { - target := convertTarget(sc.cfg.Host, sc.cfg.User, credType) - localCredCache[target] = token +func newNoopSecureStorageManager() *noopSecureStorageManager { + return &noopSecureStorageManager{} +} - j, err := json.Marshal(localCredCache) - if err != nil { - logger.Debugf("failed to convert credential to JSON.") - } - temporaryCredCacheLock.Lock() - writeTemporaryCacheFile(j) - temporaryCredCacheLock.Unlock() +func (ssm *noopSecureStorageManager) setCredential(_ *secureTokenSpec, _ string) { } -func deleteTemporaryCredential(sc *snowflakeConn, credType string) { - if credCacheDir == "" { - logger.Debug("Cache file doesn't exist. Skipping deleting credential file.") - } else { - target := convertTarget(sc.cfg.Host, sc.cfg.User, credType) - delete(localCredCache, target) - j, err := json.Marshal(localCredCache) - if err != nil { - logger.Debugf("failed to convert credential to JSON.") - } - temporaryCredCacheLock.Lock() - writeTemporaryCacheFile(j) - temporaryCredCacheLock.Unlock() - } +func (ssm *noopSecureStorageManager) getCredential(_ *secureTokenSpec) string { + return "" } -func readTemporaryCacheFile() map[string]string { - if credCache == "" { - logger.Debug("Cache file doesn't exist. Skipping reading credential file.") - return nil - } - jsonData, err := os.ReadFile(credCache) - if err != nil { - logger.Debugf("Failed to read credential file: %v", err) - return nil - } - err = json.Unmarshal([]byte(jsonData), &localCredCache) - if err != nil { - logger.Debugf("failed to read JSON. Err: %v", err) - return nil - } +func (ssm *noopSecureStorageManager) deleteCredential(_ *secureTokenSpec) { +} - return localCredCache +type threadSafeSecureStorageManager struct { + mu *sync.Mutex + delegate secureStorageManager } -func writeTemporaryCacheFile(input []byte) { - if credCache == "" { - logger.Debug("Cache file doesn't exist. Skipping writing temporary credential file.") - } else { - logger.Debugf("writing credential cache file. %v\n", credCache) - credCacheLockFileName := credCache + ".lck" - err := os.Mkdir(credCacheLockFileName, 0600) - logger.Debugf("Creating lock file. %v", credCacheLockFileName) - - switch { - case os.IsExist(err): - statinfo, err := os.Stat(credCacheLockFileName) - if err != nil { - logger.Debugf("failed to write credential cache file. file: %v, err: %v. ignored.\n", credCache, err) - return - } - if time.Since(statinfo.ModTime()) < 15*time.Minute { - logger.Debugf("other process locks the cache file. %v. ignored.\n", credCache) - return - } - if err = os.Remove(credCacheLockFileName); err != nil { - logger.Debugf("failed to delete lock file. file: %v, err: %v. ignored.\n", credCacheLockFileName, err) - return - } - if err = os.Mkdir(credCacheLockFileName, 0600); err != nil { - logger.Debugf("failed to delete lock file. file: %v, err: %v. ignored.\n", credCacheLockFileName, err) - return - } - } - defer os.RemoveAll(credCacheLockFileName) +func (ssm *threadSafeSecureStorageManager) setCredential(tokenSpec *secureTokenSpec, value string) { + ssm.mu.Lock() + defer ssm.mu.Unlock() + ssm.delegate.setCredential(tokenSpec, value) +} - if err = os.WriteFile(credCache, input, 0644); err != nil { - logger.Debugf("Failed to write the cache file. File: %v err: %v.", credCache, err) - } - } +func (ssm *threadSafeSecureStorageManager) getCredential(tokenSpec *secureTokenSpec) string { + ssm.mu.Lock() + defer ssm.mu.Unlock() + return ssm.delegate.getCredential(tokenSpec) } -func convertTarget(host, user, credType string) string { - host = strings.ToUpper(host) - user = strings.ToUpper(user) - credType = strings.ToUpper(credType) - target := host + ":" + user + ":" + driverName + ":" + credType - return target +func (ssm *threadSafeSecureStorageManager) deleteCredential(tokenSpec *secureTokenSpec) { + ssm.mu.Lock() + defer ssm.mu.Unlock() + ssm.delegate.deleteCredential(tokenSpec) } diff --git a/vendor/github.com/snowflakedb/gosnowflake/sqlstate.go b/vendor/github.com/snowflakedb/gosnowflake/sqlstate.go index 6be61981..558c6e44 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/sqlstate.go +++ b/vendor/github.com/snowflakedb/gosnowflake/sqlstate.go @@ -1,5 +1,3 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake const ( diff --git a/vendor/github.com/snowflakedb/gosnowflake/statement.go b/vendor/github.com/snowflakedb/gosnowflake/statement.go index e3ce5b74..05efc4c5 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/statement.go +++ b/vendor/github.com/snowflakedb/gosnowflake/statement.go @@ -1,5 +1,3 @@ -// Copyright (c) 2017-2023 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( diff --git a/vendor/github.com/snowflakedb/gosnowflake/storage_client.go b/vendor/github.com/snowflakedb/gosnowflake/storage_client.go index ee746a64..c04edc2c 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/storage_client.go +++ b/vendor/github.com/snowflakedb/gosnowflake/storage_client.go @@ -1,9 +1,6 @@ -// Copyright (c) 2021-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( - "bytes" "fmt" "math" "os" @@ -19,7 +16,7 @@ const ( // implemented by localUtil and remoteStorageUtil type storageUtil interface { - createClient(*execResponseStageInfo, bool) (cloudClient, error) + createClient(*execResponseStageInfo, bool, *Config) (cloudClient, error) uploadOneFileWithRetry(*fileMetadata) error downloadOneFile(*fileMetadata) error } @@ -28,60 +25,41 @@ type storageUtil interface { type cloudUtil interface { createClient(*execResponseStageInfo, bool) (cloudClient, error) getFileHeader(*fileMetadata, string) (*fileHeader, error) - uploadFile(string, *fileMetadata, *encryptMetadata, int, int64) error + uploadFile(string, *fileMetadata, int, int64) error nativeDownloadFile(*fileMetadata, string, int64) error } type cloudClient interface{} type remoteStorageUtil struct { + cfg *Config } -func (rsu *remoteStorageUtil) getNativeCloudType(cli string) cloudUtil { +func (rsu *remoteStorageUtil) getNativeCloudType(cli string, cfg *Config) cloudUtil { if cloudType(cli) == s3Client { - return &snowflakeS3Client{} + return &snowflakeS3Client{ + cfg, + } } else if cloudType(cli) == azureClient { - return &snowflakeAzureClient{} + return &snowflakeAzureClient{ + cfg, + } } else if cloudType(cli) == gcsClient { - return &snowflakeGcsClient{} + return &snowflakeGcsClient{ + cfg, + } } return nil } // call cloud utils' native create client methods -func (rsu *remoteStorageUtil) createClient(info *execResponseStageInfo, useAccelerateEndpoint bool) (cloudClient, error) { - utilClass := rsu.getNativeCloudType(info.LocationType) +func (rsu *remoteStorageUtil) createClient(info *execResponseStageInfo, useAccelerateEndpoint bool, cfg *Config) (cloudClient, error) { + utilClass := rsu.getNativeCloudType(info.LocationType, cfg) return utilClass.createClient(info, useAccelerateEndpoint) } func (rsu *remoteStorageUtil) uploadOneFile(meta *fileMetadata) error { - var encryptMeta *encryptMetadata - var dataFile string - var err error - if meta.encryptionMaterial != nil { - if meta.srcStream != nil { - var encryptedStream bytes.Buffer - srcStream := meta.srcStream - if meta.realSrcStream != nil { - srcStream = meta.realSrcStream - } - encryptMeta, err = encryptStream(meta.encryptionMaterial, srcStream, &encryptedStream, 0) - if err != nil { - return err - } - meta.realSrcStream = &encryptedStream - dataFile = meta.realSrcFileName - } else { - encryptMeta, dataFile, err = encryptFile(meta.encryptionMaterial, meta.realSrcFileName, 0, meta.tmpDir) - if err != nil { - return err - } - } - } else { - dataFile = meta.realSrcFileName - } - - utilClass := rsu.getNativeCloudType(meta.stageInfo.LocationType) + utilClass := rsu.getNativeCloudType(meta.stageInfo.LocationType, meta.sfa.sc.cfg) maxConcurrency := int(meta.parallel) var lastErr error maxRetry := defaultMaxRetry @@ -89,9 +67,9 @@ func (rsu *remoteStorageUtil) uploadOneFile(meta *fileMetadata) error { if !meta.overwrite { header, err := utilClass.getFileHeader(meta, meta.dstFileName) if meta.resStatus == notFoundFile { - err := utilClass.uploadFile(dataFile, meta, encryptMeta, maxConcurrency, meta.options.MultiPartThreshold) + err := utilClass.uploadFile(meta.realSrcFileName, meta, maxConcurrency, meta.options.MultiPartThreshold) if err != nil { - logger.Warnf("Error uploading %v. err: %v", dataFile, err) + logger.Warnf("Error uploading %v. err: %v", meta.realSrcFileName, err) } } else if err != nil { return err @@ -103,9 +81,9 @@ func (rsu *remoteStorageUtil) uploadOneFile(meta *fileMetadata) error { } } if meta.overwrite || meta.resStatus == notFoundFile { - err := utilClass.uploadFile(dataFile, meta, encryptMeta, maxConcurrency, meta.options.MultiPartThreshold) + err := utilClass.uploadFile(meta.realSrcFileName, meta, maxConcurrency, meta.options.MultiPartThreshold) if err != nil { - logger.Debugf("Error uploading %v. err: %v", dataFile, err) + logger.Debugf("Error uploading %v. err: %v", meta.realSrcFileName, err) } } if meta.resStatus == uploaded || meta.resStatus == renewToken || meta.resStatus == renewPresignedURL { @@ -130,11 +108,11 @@ func (rsu *remoteStorageUtil) uploadOneFile(meta *fileMetadata) error { if lastErr != nil { return lastErr } - return fmt.Errorf("unkown error uploading %v", dataFile) + return fmt.Errorf("unkown error uploading %v", meta.realSrcFileName) } func (rsu *remoteStorageUtil) uploadOneFileWithRetry(meta *fileMetadata) error { - utilClass := rsu.getNativeCloudType(meta.stageInfo.LocationType) + utilClass := rsu.getNativeCloudType(meta.stageInfo.LocationType, rsu.cfg) retryOuter := true for i := 0; i < 10; i++ { // retry @@ -145,7 +123,9 @@ func (rsu *remoteStorageUtil) uploadOneFileWithRetry(meta *fileMetadata) error { if meta.resStatus == uploaded || meta.resStatus == skipped { for j := 0; j < 10; j++ { status := meta.resStatus - utilClass.getFileHeader(meta, meta.dstFileName) + if _, err := utilClass.getFileHeader(meta, meta.dstFileName); err != nil { + logger.Infof("error while getting file %v header. %v", meta.dstFileSize, err) + } // check file header status and verify upload/skip if meta.resStatus == notFoundFile { time.Sleep(time.Second) // wait 1 second @@ -194,7 +174,7 @@ func (rsu *remoteStorageUtil) downloadOneFile(meta *fileMetadata) error { } } - utilClass := rsu.getNativeCloudType(meta.stageInfo.LocationType) + utilClass := rsu.getNativeCloudType(meta.stageInfo.LocationType, meta.sfa.sc.cfg) header, err := utilClass.getFileHeader(meta, meta.srcFileName) if err != nil { return err @@ -218,17 +198,30 @@ func (rsu *remoteStorageUtil) downloadOneFile(meta *fileMetadata) error { return err } } - tmpDstFileName, err := decryptFile(header.encryptionMetadata, - meta.encryptionMaterial, fullDstFileName, 0, meta.tmpDir) - if err != nil { - return err - } - if err = os.Rename(tmpDstFileName, fullDstFileName); err != nil { - return err + if meta.options.GetFileToStream { + totalFileSize, err := decryptStreamCBC(header.encryptionMetadata, + meta.encryptionMaterial, 0, meta.dstStream, meta.sfa.streamBuffer) + if err != nil { + return err + } + meta.sfa.streamBuffer.Truncate(totalFileSize) + meta.dstFileSize = int64(totalFileSize) + } else { + tmpDstFileName, err := decryptFileCBC(header.encryptionMetadata, + meta.encryptionMaterial, fullDstFileName, 0, meta.tmpDir) + if err != nil { + return err + } + if err = os.Rename(tmpDstFileName, fullDstFileName); err != nil { + return err + } } + } - if fi, err := os.Stat(fullDstFileName); err == nil { - meta.dstFileSize = fi.Size() + if !meta.options.GetFileToStream { + if fi, err := os.Stat(fullDstFileName); err == nil { + meta.dstFileSize = fi.Size() + } } return nil } diff --git a/vendor/github.com/snowflakedb/gosnowflake/structured_type.go b/vendor/github.com/snowflakedb/gosnowflake/structured_type.go new file mode 100644 index 00000000..fc4d41a3 --- /dev/null +++ b/vendor/github.com/snowflakedb/gosnowflake/structured_type.go @@ -0,0 +1,1221 @@ +package gosnowflake + +import ( + "context" + "database/sql" + "database/sql/driver" + "encoding/hex" + "encoding/json" + "errors" + "fmt" + "math/big" + "reflect" + "strconv" + "strings" + "time" + "unicode" +) + +// ObjectType Empty marker of an object used in column type ScanType function +type ObjectType struct { +} + +var structuredObjectWriterType = reflect.TypeFor[StructuredObjectWriter]() + +// StructuredObject is a representation of structured object for reading. +type StructuredObject interface { + GetString(fieldName string) (string, error) + GetNullString(fieldName string) (sql.NullString, error) + GetByte(fieldName string) (byte, error) + GetNullByte(fieldName string) (sql.NullByte, error) + GetInt16(fieldName string) (int16, error) + GetNullInt16(fieldName string) (sql.NullInt16, error) + GetInt32(fieldName string) (int32, error) + GetNullInt32(fieldName string) (sql.NullInt32, error) + GetInt64(fieldName string) (int64, error) + GetNullInt64(fieldName string) (sql.NullInt64, error) + GetBigInt(fieldName string) (*big.Int, error) + GetFloat32(fieldName string) (float32, error) + GetFloat64(fieldName string) (float64, error) + GetNullFloat64(fieldName string) (sql.NullFloat64, error) + GetBigFloat(fieldName string) (*big.Float, error) + GetBool(fieldName string) (bool, error) + GetNullBool(fieldName string) (sql.NullBool, error) + GetBytes(fieldName string) ([]byte, error) + GetTime(fieldName string) (time.Time, error) + GetNullTime(fieldName string) (sql.NullTime, error) + GetStruct(fieldName string, scanner sql.Scanner) (sql.Scanner, error) + GetRaw(fieldName string) (any, error) + ScanTo(sc sql.Scanner) error +} + +// StructuredObjectWriter is an interface to implement, when binding structured objects. +type StructuredObjectWriter interface { + Write(sowc StructuredObjectWriterContext) error +} + +// StructuredObjectWriterContext is a helper interface to write particular fields of structured object. +type StructuredObjectWriterContext interface { + WriteString(fieldName string, value string) error + WriteNullString(fieldName string, value sql.NullString) error + WriteByt(fieldName string, value byte) error // WriteByte name is prohibited by go vet + WriteNullByte(fieldName string, value sql.NullByte) error + WriteInt16(fieldName string, value int16) error + WriteNullInt16(fieldName string, value sql.NullInt16) error + WriteInt32(fieldName string, value int32) error + WriteNullInt32(fieldName string, value sql.NullInt32) error + WriteInt64(fieldName string, value int64) error + WriteNullInt64(fieldName string, value sql.NullInt64) error + WriteFloat32(fieldName string, value float32) error + WriteFloat64(fieldName string, value float64) error + WriteNullFloat64(fieldName string, value sql.NullFloat64) error + WriteBytes(fieldName string, value []byte) error + WriteBool(fieldName string, value bool) error + WriteNullBool(fieldName string, value sql.NullBool) error + WriteTime(fieldName string, value time.Time, tsmode []byte) error + WriteNullTime(fieldName string, value sql.NullTime, tsmode []byte) error + WriteStruct(fieldName string, value StructuredObjectWriter) error + WriteNullableStruct(fieldName string, value StructuredObjectWriter, typ reflect.Type) error + // WriteRaw is used for inserting slices and maps only. + WriteRaw(fieldName string, value any, tsmode ...[]byte) error + // WriteNullRaw is used for inserting nil slices and maps only. + WriteNullRaw(fieldName string, typ reflect.Type, tsmode ...[]byte) error + WriteAll(sow StructuredObjectWriter) error +} + +// NilMapTypes is used to define types when binding nil maps. +type NilMapTypes struct { + Key reflect.Type + Value reflect.Type +} + +type structuredObjectWriterEntry struct { + name string + typ string + nullable bool + length int + scale int + precision int + fields []fieldMetadata +} + +func (e *structuredObjectWriterEntry) toFieldMetadata() fieldMetadata { + return fieldMetadata{ + Name: e.name, + Type: e.typ, + Nullable: e.nullable, + Length: e.length, + Scale: e.scale, + Precision: e.precision, + Fields: e.fields, + } +} + +type structuredObjectWriterContext struct { + values map[string]any + entries []structuredObjectWriterEntry + params map[string]*string +} + +func (sowc *structuredObjectWriterContext) init(params map[string]*string) { + sowc.values = make(map[string]any) + sowc.params = params +} + +func (sowc *structuredObjectWriterContext) WriteString(fieldName string, value string) error { + return sowc.writeString(fieldName, value) +} + +func (sowc *structuredObjectWriterContext) WriteNullString(fieldName string, value sql.NullString) error { + if value.Valid { + return sowc.WriteString(fieldName, value.String) + } + return sowc.writeString(fieldName, nil) +} + +func (sowc *structuredObjectWriterContext) writeString(fieldName string, value any) error { + return sowc.write(value, structuredObjectWriterEntry{ + name: fieldName, + typ: "text", + nullable: true, + length: 134217728, + }) +} + +func (sowc *structuredObjectWriterContext) WriteByt(fieldName string, value byte) error { + return sowc.writeFixed(fieldName, value) +} + +func (sowc *structuredObjectWriterContext) WriteNullByte(fieldName string, value sql.NullByte) error { + if value.Valid { + return sowc.writeFixed(fieldName, value.Byte) + } + return sowc.writeFixed(fieldName, nil) +} + +func (sowc *structuredObjectWriterContext) WriteInt16(fieldName string, value int16) error { + return sowc.writeFixed(fieldName, value) +} + +func (sowc *structuredObjectWriterContext) WriteNullInt16(fieldName string, value sql.NullInt16) error { + if value.Valid { + return sowc.writeFixed(fieldName, value.Int16) + } + return sowc.writeFixed(fieldName, nil) +} + +func (sowc *structuredObjectWriterContext) WriteInt32(fieldName string, value int32) error { + return sowc.writeFixed(fieldName, value) +} + +func (sowc *structuredObjectWriterContext) WriteNullInt32(fieldName string, value sql.NullInt32) error { + if value.Valid { + return sowc.writeFixed(fieldName, value.Int32) + } + return sowc.writeFixed(fieldName, nil) +} + +func (sowc *structuredObjectWriterContext) WriteInt64(fieldName string, value int64) error { + return sowc.writeFixed(fieldName, value) +} + +func (sowc *structuredObjectWriterContext) WriteNullInt64(fieldName string, value sql.NullInt64) error { + if value.Valid { + return sowc.writeFixed(fieldName, value.Int64) + } + return sowc.writeFixed(fieldName, nil) +} + +func (sowc *structuredObjectWriterContext) WriteFloat32(fieldName string, value float32) error { + return sowc.writeFloat(fieldName, value) +} + +func (sowc *structuredObjectWriterContext) WriteFloat64(fieldName string, value float64) error { + return sowc.writeFloat(fieldName, value) +} + +func (sowc *structuredObjectWriterContext) WriteNullFloat64(fieldName string, value sql.NullFloat64) error { + if value.Valid { + return sowc.writeFloat(fieldName, value.Float64) + } + return sowc.writeFloat(fieldName, nil) +} + +func (sowc *structuredObjectWriterContext) WriteBool(fieldName string, value bool) error { + return sowc.writeBool(fieldName, value) +} + +func (sowc *structuredObjectWriterContext) WriteNullBool(fieldName string, value sql.NullBool) error { + if value.Valid { + return sowc.writeBool(fieldName, value.Bool) + } + return sowc.writeBool(fieldName, nil) +} + +func (sowc *structuredObjectWriterContext) writeBool(fieldName string, value any) error { + return sowc.write(value, structuredObjectWriterEntry{ + name: fieldName, + typ: "boolean", + nullable: true, + }) +} + +func (sowc *structuredObjectWriterContext) WriteBytes(fieldName string, value []byte) error { + var res *string + if value != nil { + r := hex.EncodeToString(value) + res = &r + } + return sowc.write(res, structuredObjectWriterEntry{ + name: fieldName, + typ: "binary", + nullable: true, + }) +} + +func (sowc *structuredObjectWriterContext) WriteTime(fieldName string, value time.Time, tsmode []byte) error { + snowflakeType, err := dataTypeMode(tsmode) + if err != nil { + return err + } + typ := driverTypeToSnowflake[snowflakeType] + sfFormat, err := dateTimeInputFormatByType(typ, sowc.params) + if err != nil { + return err + } + goFormat, err := snowflakeFormatToGoFormat(sfFormat) + if err != nil { + return err + } + return sowc.writeTime(fieldName, value.Format(goFormat), typ) +} + +func (sowc *structuredObjectWriterContext) WriteNullTime(fieldName string, value sql.NullTime, tsmode []byte) error { + if value.Valid { + return sowc.WriteTime(fieldName, value.Time, tsmode) + } + snowflakeType, err := dataTypeMode(tsmode) + if err != nil { + return err + } + typ := driverTypeToSnowflake[snowflakeType] + return sowc.writeTime(fieldName, nil, typ) +} + +func (sowc *structuredObjectWriterContext) writeTime(fieldName string, value any, typ string) error { + return sowc.write(value, structuredObjectWriterEntry{ + name: fieldName, + typ: strings.ToLower(typ), + nullable: true, + scale: 9, + }) +} + +func (sowc *structuredObjectWriterContext) WriteStruct(fieldName string, value StructuredObjectWriter) error { + if reflect.ValueOf(value).IsNil() { + return fmt.Errorf("%s is nil, use WriteNullableStruct instead", fieldName) + } + childSowc := structuredObjectWriterContext{} + childSowc.init(sowc.params) + err := value.Write(&childSowc) + if err != nil { + return err + } + return sowc.write(childSowc.values, structuredObjectWriterEntry{ + name: fieldName, + typ: "object", + nullable: true, + fields: childSowc.toFields(), + }) +} + +func (sowc *structuredObjectWriterContext) WriteNullableStruct(structFieldName string, value StructuredObjectWriter, typ reflect.Type) error { + if value == nil || reflect.ValueOf(value).IsNil() { + childSowc, err := buildSowcFromType(sowc.params, typ) + if err != nil { + return err + } + return sowc.write(nil, structuredObjectWriterEntry{ + name: structFieldName, + typ: "OBJECT", + nullable: true, + fields: childSowc.toFields(), + }) + } + return sowc.WriteStruct(structFieldName, value) +} + +func (sowc *structuredObjectWriterContext) WriteRaw(fieldName string, value any, dataTypeModes ...[]byte) error { + dataTypeModeSingle := DataTypeArray + if len(dataTypeModes) == 1 && dataTypeModes[0] != nil { + dataTypeModeSingle = dataTypeModes[0] + } + tsmode, err := dataTypeMode(dataTypeModeSingle) + if err != nil { + return err + } + + switch reflect.ValueOf(value).Kind() { + case reflect.Slice: + metadata, err := goTypeToFieldMetadata(reflect.TypeOf(value).Elem(), tsmode, sowc.params) + if err != nil { + return err + } + return sowc.write(value, structuredObjectWriterEntry{ + name: fieldName, + typ: "ARRAY", + nullable: true, + fields: []fieldMetadata{metadata}, + }) + case reflect.Map: + keyMetadata, err := goTypeToFieldMetadata(reflect.TypeOf(value).Key(), tsmode, sowc.params) + if err != nil { + return err + } + valueMetadata, err := goTypeToFieldMetadata(reflect.TypeOf(value).Elem(), tsmode, sowc.params) + if err != nil { + return err + } + return sowc.write(value, structuredObjectWriterEntry{ + name: fieldName, + typ: "MAP", + nullable: true, + fields: []fieldMetadata{keyMetadata, valueMetadata}, + }) + } + return fmt.Errorf("unsupported raw type: %T", value) +} + +func (sowc *structuredObjectWriterContext) WriteNullRaw(fieldName string, typ reflect.Type, dataTypeModes ...[]byte) error { + dataTypeModeSingle := DataTypeArray + if len(dataTypeModes) == 1 && dataTypeModes[0] != nil { + dataTypeModeSingle = dataTypeModes[0] + } + tsmode, err := dataTypeMode(dataTypeModeSingle) + if err != nil { + return err + } + + if typ.Kind() == reflect.Slice || typ.Kind() == reflect.Map { + metadata, err := goTypeToFieldMetadata(typ, tsmode, sowc.params) + if err != nil { + return err + } + if err := sowc.write(nil, structuredObjectWriterEntry{ + name: fieldName, + typ: metadata.Type, + nullable: true, + fields: metadata.Fields, + }); err != nil { + return err + } + return nil + } + return fmt.Errorf("cannot use %v as nillable field", typ.Kind().String()) +} + +func buildSowcFromType(params map[string]*string, typ reflect.Type) (*structuredObjectWriterContext, error) { + childSowc := &structuredObjectWriterContext{} + childSowc.init(params) + if typ.Kind() == reflect.Pointer { + typ = typ.Elem() + } + for i := 0; i < typ.NumField(); i++ { + field := typ.Field(i) + fieldName := getSfFieldName(field) + if field.Type.Kind() == reflect.String { + if err := childSowc.writeString(fieldName, nil); err != nil { + return nil, err + } + } else if field.Type.Kind() == reflect.Uint8 || field.Type.Kind() == reflect.Int16 || field.Type.Kind() == reflect.Int32 || field.Type.Kind() == reflect.Int64 { + if err := childSowc.writeFixed(fieldName, nil); err != nil { + return nil, err + } + } else if field.Type.Kind() == reflect.Float32 || field.Type.Kind() == reflect.Float64 { + if err := childSowc.writeFloat(fieldName, nil); err != nil { + return nil, err + } + } else if field.Type.Kind() == reflect.Bool { + if err := childSowc.writeBool(fieldName, nil); err != nil { + return nil, err + } + } else if (field.Type.Kind() == reflect.Slice || field.Type.Kind() == reflect.Array) && field.Type.Elem().Kind() == reflect.Uint8 { + if err := childSowc.WriteBytes(fieldName, nil); err != nil { + return nil, err + } + } else if field.Type.Kind() == reflect.Struct || field.Type.Kind() == reflect.Pointer { + t := field.Type + if field.Type.Kind() == reflect.Pointer { + t = field.Type.Elem() + } + if t.AssignableTo(reflect.TypeOf(sql.NullString{})) { + if err := childSowc.WriteNullString(fieldName, sql.NullString{}); err != nil { + return nil, err + } + } else if t.AssignableTo(reflect.TypeOf(sql.NullByte{})) { + if err := childSowc.WriteNullByte(fieldName, sql.NullByte{}); err != nil { + return nil, err + } + } else if t.AssignableTo(reflect.TypeOf(sql.NullInt16{})) { + if err := childSowc.WriteNullInt16(fieldName, sql.NullInt16{}); err != nil { + return nil, err + } + } else if t.AssignableTo(reflect.TypeOf(sql.NullInt32{})) { + if err := childSowc.WriteNullInt32(fieldName, sql.NullInt32{}); err != nil { + return nil, err + } + } else if t.AssignableTo(reflect.TypeOf(sql.NullInt64{})) { + if err := childSowc.WriteNullInt64(fieldName, sql.NullInt64{}); err != nil { + return nil, err + } + } else if t.AssignableTo(reflect.TypeOf(sql.NullFloat64{})) { + if err := childSowc.WriteNullFloat64(fieldName, sql.NullFloat64{}); err != nil { + return nil, err + } + } else if t.AssignableTo(reflect.TypeOf(sql.NullBool{})) { + if err := childSowc.WriteNullBool(fieldName, sql.NullBool{}); err != nil { + return nil, err + } + } else if t.AssignableTo(reflect.TypeOf(sql.NullTime{})) || t.AssignableTo(reflect.TypeOf(time.Time{})) { + timeSnowflakeType, err := getTimeSnowflakeType(field) + if err != nil { + return nil, err + } + if timeSnowflakeType == nil { + return nil, fmt.Errorf("field %v does not have proper sf tag", fieldName) + } + if err := childSowc.WriteNullTime(fieldName, sql.NullTime{}, timeSnowflakeType); err != nil { + return nil, err + } + } else if field.Type.AssignableTo(structuredObjectWriterType) { + if err := childSowc.WriteNullableStruct(fieldName, nil, field.Type); err != nil { + return nil, err + } + } else if t.Implements(reflect.TypeOf((*driver.Valuer)(nil)).Elem()) { + if err := childSowc.WriteNullString(fieldName, sql.NullString{}); err != nil { + return nil, err + } + } else { + return nil, fmt.Errorf("field %s has unsupported type", field.Name) + } + } else if field.Type.Kind() == reflect.Slice || field.Type.Kind() == reflect.Map { + timeSnowflakeType, err := getTimeSnowflakeType(field) + if err != nil { + return nil, err + } + if err := childSowc.WriteNullRaw(fieldName, field.Type, timeSnowflakeType); err != nil { + return nil, err + } + } + } + return childSowc, nil +} + +func (sowc *structuredObjectWriterContext) writeFixed(fieldName string, value any) error { + return sowc.write(value, structuredObjectWriterEntry{ + name: fieldName, + typ: "fixed", + nullable: true, + precision: 38, + scale: 0, + }) +} + +func (sowc *structuredObjectWriterContext) writeFloat(fieldName string, value any) error { + return sowc.write(value, structuredObjectWriterEntry{ + name: fieldName, + typ: "real", + nullable: true, + precision: 38, + scale: 0, + }) +} + +func (sowc *structuredObjectWriterContext) write(value any, entry structuredObjectWriterEntry) error { + sowc.values[entry.name] = value + sowc.entries = append(sowc.entries, entry) + return nil +} + +func (sowc *structuredObjectWriterContext) WriteAll(sow StructuredObjectWriter) error { + typ := reflect.TypeOf(sow) + if typ.Kind() == reflect.Pointer { + typ = typ.Elem() + } + val := reflect.Indirect(reflect.ValueOf(sow)) + for i := 0; i < typ.NumField(); i++ { + field := typ.Field(i) + if shouldIgnoreField(field) { + continue + } + fieldName := getSfFieldName(field) + if field.Type.Kind() == reflect.String { + if err := sowc.WriteString(fieldName, val.Field(i).String()); err != nil { + return err + } + } else if field.Type.Kind() == reflect.Uint8 { + if err := sowc.WriteByt(fieldName, byte(val.Field(i).Uint())); err != nil { + return err + } + } else if field.Type.Kind() == reflect.Int16 { + if err := sowc.WriteInt16(fieldName, int16(val.Field(i).Int())); err != nil { + return err + } + } else if field.Type.Kind() == reflect.Int32 { + if err := sowc.WriteInt32(fieldName, int32(val.Field(i).Int())); err != nil { + return err + } + } else if field.Type.Kind() == reflect.Int64 { + if err := sowc.WriteInt64(fieldName, val.Field(i).Int()); err != nil { + return err + } + } else if field.Type.Kind() == reflect.Float32 { + if err := sowc.WriteFloat32(fieldName, float32(val.Field(i).Float())); err != nil { + return err + } + } else if field.Type.Kind() == reflect.Float64 { + if err := sowc.WriteFloat64(fieldName, val.Field(i).Float()); err != nil { + return err + } + } else if field.Type.Kind() == reflect.Bool { + if err := sowc.WriteBool(fieldName, val.Field(i).Bool()); err != nil { + return err + } + } else if (field.Type.Kind() == reflect.Array || field.Type.Kind() == reflect.Slice) && field.Type.Elem().Kind() == reflect.Uint8 { + if err := sowc.WriteBytes(fieldName, val.Field(i).Bytes()); err != nil { + return err + } + } else if field.Type.Kind() == reflect.Struct || field.Type.Kind() == reflect.Pointer { + if v, ok := val.Field(i).Interface().(time.Time); ok { + timeSnowflakeType, err := getTimeSnowflakeType(typ.Field(i)) + if err != nil { + return err + } + if timeSnowflakeType == nil { + return fmt.Errorf("field %v does not have a proper sf tag", fieldName) + } + if err := sowc.WriteTime(fieldName, v, timeSnowflakeType); err != nil { + return err + } + } else if v, ok := val.Field(i).Interface().(sql.NullString); ok { + if err := sowc.WriteNullString(fieldName, v); err != nil { + return err + } + } else if v, ok := val.Field(i).Interface().(sql.NullByte); ok { + if err := sowc.WriteNullByte(fieldName, v); err != nil { + return err + } + } else if v, ok := val.Field(i).Interface().(sql.NullInt16); ok { + if err := sowc.WriteNullInt16(fieldName, v); err != nil { + return err + } + } else if v, ok := val.Field(i).Interface().(sql.NullInt32); ok { + if err := sowc.WriteNullInt32(fieldName, v); err != nil { + return err + } + } else if v, ok := val.Field(i).Interface().(sql.NullInt64); ok { + if err := sowc.WriteNullInt64(fieldName, v); err != nil { + return err + } + } else if v, ok := val.Field(i).Interface().(sql.NullFloat64); ok { + if err := sowc.WriteNullFloat64(fieldName, v); err != nil { + return err + } + } else if v, ok := val.Field(i).Interface().(sql.NullBool); ok { + if err := sowc.WriteNullBool(fieldName, v); err != nil { + return err + } + } else if v, ok := val.Field(i).Interface().(sql.NullTime); ok { + timeSnowflakeType, err := getTimeSnowflakeType(typ.Field(i)) + if err != nil { + return err + } + if timeSnowflakeType == nil { + return fmt.Errorf("field %v does not have a proper sf tag", fieldName) + } + if err := sowc.WriteNullTime(fieldName, v, timeSnowflakeType); err != nil { + return err + } + } else if v, ok := val.Field(i).Interface().(StructuredObjectWriter); ok { + if reflect.ValueOf(v).IsNil() { + if err := sowc.WriteNullableStruct(fieldName, nil, reflect.TypeOf(v)); err != nil { + return err + } + } else { + childSowc := &structuredObjectWriterContext{} + childSowc.init(sowc.params) + if err := v.Write(childSowc); err != nil { + return err + } + if err := sowc.write(childSowc.values, structuredObjectWriterEntry{ + name: fieldName, + typ: "OBJECT", + nullable: true, + fields: childSowc.toFields(), + }); err != nil { + return err + } + } + } + } else if field.Type.Kind() == reflect.Slice || field.Type.Kind() == reflect.Map { + var timeSfType []byte + var err error + if field.Type.Elem().AssignableTo(reflect.TypeOf(time.Time{})) || field.Type.Elem().AssignableTo(reflect.TypeOf(sql.NullTime{})) { + timeSfType, err = getTimeSnowflakeType(typ.Field(i)) + if err != nil { + return err + } + } + if err := sowc.WriteRaw(fieldName, val.Field(i).Interface(), timeSfType); err != nil { + return err + } + } else { + return fmt.Errorf("field %s has unsupported type", field.Name) + } + } + return nil +} + +func (sowc *structuredObjectWriterContext) toFields() []fieldMetadata { + fieldMetadatas := make([]fieldMetadata, len(sowc.entries)) + for i, entry := range sowc.entries { + fieldMetadatas[i] = entry.toFieldMetadata() + } + return fieldMetadatas +} + +// ArrayOfScanners Helper type for scanning array of sql.Scanner values. +type ArrayOfScanners[T sql.Scanner] []T + +func (st *ArrayOfScanners[T]) Scan(val any) error { + if val == nil { + return nil + } + sts := val.([]*structuredType) + *st = make([]T, len(sts)) + var t T + for i, s := range sts { + (*st)[i] = reflect.New(reflect.TypeOf(t).Elem()).Interface().(T) + if err := (*st)[i].Scan(s); err != nil { + return err + } + } + return nil +} + +// ScanArrayOfScanners is a helper function for scanning arrays of sql.Scanner values. +// Example: +// +// var res []*simpleObject +// err := rows.Scan(ScanArrayOfScanners(&res)) +func ScanArrayOfScanners[T sql.Scanner](value *[]T) *ArrayOfScanners[T] { + return (*ArrayOfScanners[T])(value) +} + +// MapOfScanners Helper type for scanning map of sql.Scanner values. +type MapOfScanners[K comparable, V sql.Scanner] map[K]V + +func (st *MapOfScanners[K, V]) Scan(val any) error { + if val == nil { + return nil + } + sts := val.(map[K]*structuredType) + *st = make(map[K]V) + var someV V + for k, v := range sts { + if v != nil && !reflect.ValueOf(v).IsNil() { + (*st)[k] = reflect.New(reflect.TypeOf(someV).Elem()).Interface().(V) + if err := (*st)[k].Scan(sts[k]); err != nil { + return err + } + } else { + (*st)[k] = reflect.Zero(reflect.TypeOf(someV)).Interface().(V) + } + } + return nil +} + +// ScanMapOfScanners is a helper function for scanning maps of sql.Scanner values. +// Example: +// +// var res map[string]*simpleObject +// err := rows.Scan(ScanMapOfScanners(&res)) +func ScanMapOfScanners[K comparable, V sql.Scanner](m *map[K]V) *MapOfScanners[K, V] { + return (*MapOfScanners[K, V])(m) +} + +type structuredType struct { + values map[string]any + fieldMetadata []fieldMetadata + params map[string]*string +} + +func getType[T any](st *structuredType, fieldName string, emptyValue T) (T, bool, error) { + v, ok := st.values[fieldName] + if !ok { + return emptyValue, false, errors.New("field " + fieldName + " does not exist") + } + if v == nil { + return emptyValue, true, nil + } + v, ok = v.(T) + if !ok { + return emptyValue, false, fmt.Errorf("cannot convert field %v to %T", fieldName, emptyValue) + } + return v.(T), false, nil +} + +func (st *structuredType) GetString(fieldName string) (string, error) { + nullString, err := st.GetNullString(fieldName) + if err != nil { + return "", err + } + if !nullString.Valid { + return "", fmt.Errorf("nil value for %v, use GetNullString instead", fieldName) + } + return nullString.String, nil +} + +func (st *structuredType) GetNullString(fieldName string) (sql.NullString, error) { + s, wasNil, err := getType[string](st, fieldName, "") + if err != nil { + return sql.NullString{}, err + } + if wasNil { + return sql.NullString{Valid: false}, err + } + return sql.NullString{Valid: true, String: s}, nil +} + +func (st *structuredType) GetByte(fieldName string) (byte, error) { + nullByte, err := st.GetNullByte(fieldName) + if err != nil { + return 0, err + } + if !nullByte.Valid { + return 0, fmt.Errorf("nil value for %v, use GetNullByte instead", fieldName) + } + return nullByte.Byte, nil +} + +func (st *structuredType) GetNullByte(fieldName string) (sql.NullByte, error) { + b, err := st.GetNullInt64(fieldName) + if err != nil { + return sql.NullByte{}, err + } + if !b.Valid { + return sql.NullByte{Valid: false}, nil + } + return sql.NullByte{Valid: true, Byte: byte(b.Int64)}, nil +} + +func (st *structuredType) GetInt16(fieldName string) (int16, error) { + nullInt16, err := st.GetNullInt16(fieldName) + if err != nil { + return 0, err + } + if !nullInt16.Valid { + return 0, fmt.Errorf("nil value for %v, use GetNullInt16 instead", fieldName) + } + return nullInt16.Int16, nil +} + +func (st *structuredType) GetNullInt16(fieldName string) (sql.NullInt16, error) { + b, err := st.GetNullInt64(fieldName) + if err != nil { + return sql.NullInt16{}, err + } + if !b.Valid { + return sql.NullInt16{Valid: false}, nil + } + return sql.NullInt16{Valid: true, Int16: int16(b.Int64)}, nil +} + +func (st *structuredType) GetInt32(fieldName string) (int32, error) { + nullInt32, err := st.GetNullInt32(fieldName) + if err != nil { + return 0, err + } + if !nullInt32.Valid { + return 0, fmt.Errorf("nil value for %v, use GetNullInt32 instead", fieldName) + } + return nullInt32.Int32, nil +} + +func (st *structuredType) GetNullInt32(fieldName string) (sql.NullInt32, error) { + b, err := st.GetNullInt64(fieldName) + if err != nil { + return sql.NullInt32{}, err + } + if !b.Valid { + return sql.NullInt32{Valid: false}, nil + } + return sql.NullInt32{Valid: true, Int32: int32(b.Int64)}, nil +} + +func (st *structuredType) GetInt64(fieldName string) (int64, error) { + nullInt64, err := st.GetNullInt64(fieldName) + if err != nil { + return 0, err + } + if !nullInt64.Valid { + return 0, fmt.Errorf("nil value for %v, use GetNullInt64 instead", fieldName) + } + return nullInt64.Int64, nil +} + +func (st *structuredType) GetNullInt64(fieldName string) (sql.NullInt64, error) { + i64, wasNil, err := getType[int64](st, fieldName, 0) + if wasNil { + return sql.NullInt64{Valid: false}, err + } + if err == nil { + return sql.NullInt64{Valid: true, Int64: i64}, nil + } + if s, _, err := getType[string](st, fieldName, ""); err == nil { + i, err := strconv.ParseInt(s, 10, 64) + if err != nil { + return sql.NullInt64{Valid: false}, err + } + return sql.NullInt64{Valid: true, Int64: i}, nil + } else if b, _, err := getType[float64](st, fieldName, 0); err == nil { + return sql.NullInt64{Valid: true, Int64: int64(b)}, nil + } else if b, _, err := getType[json.Number](st, fieldName, ""); err == nil { + i, err := strconv.ParseInt(string(b), 10, 64) + if err != nil { + return sql.NullInt64{Valid: false}, err + } + return sql.NullInt64{Valid: true, Int64: i}, err + } else { + return sql.NullInt64{Valid: false}, fmt.Errorf("cannot cast column %v to byte", fieldName) + } +} + +func (st *structuredType) GetBigInt(fieldName string) (*big.Int, error) { + b, wasNull, err := getType[*big.Int](st, fieldName, new(big.Int)) + if wasNull { + return nil, nil + } + return b, err +} + +func (st *structuredType) GetFloat32(fieldName string) (float32, error) { + f32, err := st.GetFloat64(fieldName) + if err != nil { + return 0, err + } + return float32(f32), err +} + +func (st *structuredType) GetFloat64(fieldName string) (float64, error) { + nullFloat64, err := st.GetNullFloat64(fieldName) + if err != nil { + return 0, nil + } + if !nullFloat64.Valid { + return 0, fmt.Errorf("nil value for %v, use GetNullFloat64 instead", fieldName) + } + return nullFloat64.Float64, nil +} + +func (st *structuredType) GetNullFloat64(fieldName string) (sql.NullFloat64, error) { + float64, wasNull, err := getType[float64](st, fieldName, 0) + if wasNull { + return sql.NullFloat64{Valid: false}, nil + } + if err == nil { + return sql.NullFloat64{Valid: true, Float64: float64}, nil + } + s, _, err := getType[string](st, fieldName, "") + if err == nil { + f64, err := strconv.ParseFloat(s, 64) + if err != nil { + return sql.NullFloat64{}, err + } + return sql.NullFloat64{Valid: true, Float64: f64}, err + } + jsonNumber, _, err := getType[json.Number](st, fieldName, "") + if err != nil { + return sql.NullFloat64{}, err + } + f64, err := strconv.ParseFloat(string(jsonNumber), 64) + if err != nil { + return sql.NullFloat64{}, err + } + return sql.NullFloat64{Valid: true, Float64: f64}, nil +} + +func (st *structuredType) GetBigFloat(fieldName string) (*big.Float, error) { + float, wasNull, err := getType[*big.Float](st, fieldName, new(big.Float)) + if wasNull { + return nil, nil + } + return float, err +} + +func (st *structuredType) GetBool(fieldName string) (bool, error) { + nullBool, err := st.GetNullBool(fieldName) + if err != nil { + return false, err + } + if !nullBool.Valid { + return false, fmt.Errorf("nil value for %v, use GetNullBool instead", fieldName) + } + return nullBool.Bool, err +} + +func (st *structuredType) GetNullBool(fieldName string) (sql.NullBool, error) { + b, wasNull, err := getType[bool](st, fieldName, false) + if wasNull { + return sql.NullBool{Valid: false}, nil + } + if err != nil { + return sql.NullBool{}, err + } + return sql.NullBool{Valid: true, Bool: b}, nil +} + +func (st *structuredType) GetBytes(fieldName string) ([]byte, error) { + if bi, _, err := getType[[]byte](st, fieldName, nil); err == nil { + return bi, nil + } else if bi, _, err := getType[string](st, fieldName, ""); err == nil { + return hex.DecodeString(bi) + } + bytes, _, err := getType[[]byte](st, fieldName, []byte{}) + return bytes, err +} + +func (st *structuredType) GetTime(fieldName string) (time.Time, error) { + nullTime, err := st.GetNullTime(fieldName) + if err != nil { + return time.Time{}, err + } + if !nullTime.Valid { + return time.Time{}, fmt.Errorf("nil value for %v, use GetNullBool instead", fieldName) + } + return nullTime.Time, nil +} + +func (st *structuredType) GetNullTime(fieldName string) (sql.NullTime, error) { + s, wasNull, err := getType[string](st, fieldName, "") + if wasNull { + return sql.NullTime{Valid: false}, nil + } + if err == nil { + fieldMetadata, err := st.fieldMetadataByFieldName(fieldName) + if err != nil { + return sql.NullTime{}, err + } + format, err := dateTimeOutputFormatByType(fieldMetadata.Type, st.params) + if err != nil { + return sql.NullTime{}, err + } + goFormat, err := snowflakeFormatToGoFormat(format) + if err != nil { + return sql.NullTime{}, err + } + time, err := time.Parse(goFormat, s) + return sql.NullTime{Valid: true, Time: time}, err + } + time, _, err := getType[time.Time](st, fieldName, time.Time{}) + if err != nil { + return sql.NullTime{}, err + } + return sql.NullTime{Valid: true, Time: time}, nil +} + +func (st *structuredType) GetStruct(fieldName string, scanner sql.Scanner) (sql.Scanner, error) { + childSt, wasNull, err := getType[*structuredType](st, fieldName, &structuredType{}) + if wasNull { + return nil, nil + } + if err != nil { + return nil, err + } + err = scanner.Scan(childSt) + return scanner, err +} +func (st *structuredType) GetRaw(fieldName string) (any, error) { + return st.values[fieldName], nil +} + +func (st *structuredType) ScanTo(sc sql.Scanner) error { + v := reflect.Indirect(reflect.ValueOf(sc)) + t := v.Type() + for i := 0; i < t.NumField(); i++ { + field := t.Field(i) + if shouldIgnoreField(field) { + continue + } + switch field.Type.Kind() { + case reflect.String: + s, err := st.GetString(getSfFieldName(field)) + if err != nil { + return err + } + v.FieldByName(field.Name).SetString(s) + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + i, err := st.GetInt64(getSfFieldName(field)) + if err != nil { + return err + } + v.FieldByName(field.Name).SetInt(i) + case reflect.Uint8: + b, err := st.GetByte(getSfFieldName(field)) + if err != nil { + return err + } + v.FieldByName(field.Name).SetUint(uint64(int64(b))) + case reflect.Float32, reflect.Float64: + f, err := st.GetFloat64(getSfFieldName(field)) + if err != nil { + return err + } + v.FieldByName(field.Name).SetFloat(f) + case reflect.Bool: + b, err := st.GetBool(getSfFieldName(field)) + if err != nil { + return err + } + v.FieldByName(field.Name).SetBool(b) + case reflect.Slice, reflect.Array: + switch field.Type.Elem().Kind() { + case reflect.Uint8: + b, err := st.GetBytes(getSfFieldName(field)) + if err != nil { + return err + } + v.FieldByName(field.Name).SetBytes(b) + default: + raw, err := st.GetRaw(getSfFieldName(field)) + if err != nil { + return err + } + if raw != nil { + v.FieldByName(field.Name).Set(reflect.ValueOf(raw)) + } + } + case reflect.Map: + raw, err := st.GetRaw(getSfFieldName(field)) + if err != nil { + return err + } + if raw != nil { + v.FieldByName(field.Name).Set(reflect.ValueOf(raw)) + } + case reflect.Struct: + a := v.FieldByName(field.Name).Interface() + if _, ok := a.(time.Time); ok { + time, err := st.GetTime(getSfFieldName(field)) + if err != nil { + return err + } + v.FieldByName(field.Name).Set(reflect.ValueOf(time)) + } else if _, ok := a.(sql.Scanner); ok { + scanner := reflect.New(reflect.TypeOf(a)).Interface().(sql.Scanner) + s, err := st.GetStruct(getSfFieldName(field), scanner) + if err != nil { + return err + } + v.FieldByName(field.Name).Set(reflect.Indirect(reflect.ValueOf(s))) + } else if _, ok := a.(sql.NullString); ok { + ns, err := st.GetNullString(getSfFieldName(field)) + if err != nil { + return err + } + v.FieldByName(field.Name).Set(reflect.ValueOf(ns)) + } else if _, ok := a.(sql.NullByte); ok { + nb, err := st.GetNullByte(getSfFieldName(field)) + if err != nil { + return err + } + v.FieldByName(field.Name).Set(reflect.ValueOf(nb)) + } else if _, ok := a.(sql.NullBool); ok { + nb, err := st.GetNullBool(getSfFieldName(field)) + if err != nil { + return err + } + v.FieldByName(field.Name).Set(reflect.ValueOf(nb)) + } else if _, ok := a.(sql.NullInt16); ok { + ni, err := st.GetNullInt16(getSfFieldName(field)) + if err != nil { + return err + } + v.FieldByName(field.Name).Set(reflect.ValueOf(ni)) + } else if _, ok := a.(sql.NullInt32); ok { + ni, err := st.GetNullInt32(getSfFieldName(field)) + if err != nil { + return err + } + v.FieldByName(field.Name).Set(reflect.ValueOf(ni)) + } else if _, ok := a.(sql.NullInt64); ok { + ni, err := st.GetNullInt64(getSfFieldName(field)) + if err != nil { + return err + } + v.FieldByName(field.Name).Set(reflect.ValueOf(ni)) + } else if _, ok := a.(sql.NullFloat64); ok { + nf, err := st.GetNullFloat64(getSfFieldName(field)) + if err != nil { + return err + } + v.FieldByName(field.Name).Set(reflect.ValueOf(nf)) + } else if _, ok := a.(sql.NullTime); ok { + nt, err := st.GetNullTime(getSfFieldName(field)) + if err != nil { + return err + } + v.FieldByName(field.Name).Set(reflect.ValueOf(nt)) + } + case reflect.Pointer: + switch field.Type.Elem().Kind() { + case reflect.Struct: + a := reflect.New(field.Type.Elem()).Interface() + s, err := st.GetStruct(getSfFieldName(field), a.(sql.Scanner)) + if err != nil { + return err + } + if s != nil { + v.FieldByName(field.Name).Set(reflect.ValueOf(s)) + } + default: + return errors.New("only struct pointers are supported") + } + } + } + return nil +} + +func (st *structuredType) fieldMetadataByFieldName(fieldName string) (fieldMetadata, error) { + for _, fm := range st.fieldMetadata { + if fm.Name == fieldName { + return fm, nil + } + } + return fieldMetadata{}, errors.New("no metadata for field " + fieldName) +} + +func structuredTypesEnabled(ctx context.Context) bool { + v := ctx.Value(enableStructuredTypes) + if v == nil { + return false + } + d, ok := v.(bool) + return ok && d +} + +func mapValuesNullableEnabled(ctx context.Context) bool { + v := ctx.Value(mapValuesNullable) + if v == nil { + return false + } + d, ok := v.(bool) + return ok && d +} + +func arrayValuesNullableEnabled(ctx context.Context) bool { + v := ctx.Value(arrayValuesNullable) + if v == nil { + return false + } + d, ok := v.(bool) + return ok && d +} + +func getSfFieldName(field reflect.StructField) string { + sfTag := field.Tag.Get("sf") + if sfTag != "" { + return strings.Split(sfTag, ",")[0] + } + r := []rune(field.Name) + r[0] = unicode.ToLower(r[0]) + return string(r) +} + +func shouldIgnoreField(field reflect.StructField) bool { + sfTag := strings.ToLower(field.Tag.Get("sf")) + if sfTag == "" { + return false + } + return contains(strings.Split(sfTag, ",")[1:], "ignore") +} + +func getTimeSnowflakeType(field reflect.StructField) ([]byte, error) { + sfTag := strings.ToLower(field.Tag.Get("sf")) + if sfTag == "" { + return nil, nil + } + values := strings.Split(sfTag, ",")[1:] + if contains(values, "time") { + return DataTypeTime, nil + } else if contains(values, "date") { + return DataTypeDate, nil + } else if contains(values, "ltz") { + return DataTypeTimestampLtz, nil + } else if contains(values, "ntz") { + return DataTypeTimestampNtz, nil + } else if contains(values, "tz") { + return DataTypeTimestampTz, nil + } + return nil, nil +} diff --git a/vendor/github.com/snowflakedb/gosnowflake/telemetry.go b/vendor/github.com/snowflakedb/gosnowflake/telemetry.go index 1c11c9a5..c65c01ed 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/telemetry.go +++ b/vendor/github.com/snowflakedb/gosnowflake/telemetry.go @@ -1,5 +1,3 @@ -// Copyright (c) 2021-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -23,6 +21,7 @@ const ( queryIDKey = "QueryID" driverTypeKey = "DriverType" driverVersionKey = "DriverVersion" + golangVersionKey = "GolangVersion" sqlStateKey = "SQLState" reasonKey = "reason" errorNumberKey = "ErrorNumber" diff --git a/vendor/github.com/snowflakedb/gosnowflake/transaction.go b/vendor/github.com/snowflakedb/gosnowflake/transaction.go index d6e5fa67..fa922052 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/transaction.go +++ b/vendor/github.com/snowflakedb/gosnowflake/transaction.go @@ -1,5 +1,3 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -46,7 +44,8 @@ func (tx *snowflakeTx) execTxCommand(command txCommand) (err error) { if tx.sc == nil || tx.sc.rest == nil { return driver.ErrBadConn } - _, err = tx.sc.exec(tx.ctx, txStr, false /* noResult */, false /* isInternal */, false /* describeOnly */, nil) + isInternal := isInternal(tx.ctx) + _, err = tx.sc.exec(tx.ctx, txStr, false /* noResult */, isInternal, false /* describeOnly */, nil) if err != nil { return } diff --git a/vendor/github.com/snowflakedb/gosnowflake/util.go b/vendor/github.com/snowflakedb/gosnowflake/util.go index 42350284..d0bc7f23 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/util.go +++ b/vendor/github.com/snowflakedb/gosnowflake/util.go @@ -1,5 +1,3 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -13,28 +11,34 @@ import ( "sync" "time" - "github.com/apache/arrow/go/v14/arrow/memory" + "github.com/apache/arrow-go/v18/arrow/memory" ) type contextKey string const ( - multiStatementCount contextKey = "MULTI_STATEMENT_COUNT" - asyncMode contextKey = "ASYNC_MODE_QUERY" - queryIDChannel contextKey = "QUERY_ID_CHANNEL" - snowflakeRequestIDKey contextKey = "SNOWFLAKE_REQUEST_ID" - fetchResultByID contextKey = "SF_FETCH_RESULT_BY_ID" - fileStreamFile contextKey = "STREAMING_PUT_FILE" - fileTransferOptions contextKey = "FILE_TRANSFER_OPTIONS" - enableHigherPrecision contextKey = "ENABLE_HIGHER_PRECISION" - arrowBatches contextKey = "ARROW_BATCHES" - arrowAlloc contextKey = "ARROW_ALLOC" - enableOriginalTimestamp contextKey = "ENABLE_ORIGINAL_TIMESTAMP" - queryTag contextKey = "QUERY_TAG" + multiStatementCount contextKey = "MULTI_STATEMENT_COUNT" + asyncMode contextKey = "ASYNC_MODE_QUERY" + queryIDChannel contextKey = "QUERY_ID_CHANNEL" + snowflakeRequestIDKey contextKey = "SNOWFLAKE_REQUEST_ID" + fetchResultByID contextKey = "SF_FETCH_RESULT_BY_ID" + fileStreamFile contextKey = "STREAMING_PUT_FILE" + fileGetStream contextKey = "STREAMING_GET_FILE" + fileTransferOptions contextKey = "FILE_TRANSFER_OPTIONS" + enableHigherPrecision contextKey = "ENABLE_HIGHER_PRECISION" + enableArrowBatchesUtf8Validation contextKey = "ENABLE_ARROW_BATCHES_UTF8_VALIDATION" + arrowBatches contextKey = "ARROW_BATCHES" + arrowAlloc contextKey = "ARROW_ALLOC" + arrowBatchesTimestampOption contextKey = "ARROW_BATCHES_TIMESTAMP_OPTION" + queryTag contextKey = "QUERY_TAG" + enableStructuredTypes contextKey = "ENABLE_STRUCTURED_TYPES" + mapValuesNullable contextKey = "MAP_VALUES_NULLABLE" + arrayValuesNullable contextKey = "ARRAY_VALUES_NULLABLE" ) const ( describeOnly contextKey = "DESCRIBE_ONLY" + internalQuery contextKey = "INTERNAL_QUERY" cancelRetry contextKey = "CANCEL_RETRY" streamChunkDownload contextKey = "STREAM_CHUNK_DOWNLOAD" ) @@ -78,6 +82,11 @@ func WithFileStream(ctx context.Context, reader io.Reader) context.Context { return context.WithValue(ctx, fileStreamFile, reader) } +// WithFileGetStream returns a context that contains the address of the file stream to be GET +func WithFileGetStream(ctx context.Context, writer io.Writer) context.Context { + return context.WithValue(ctx, fileGetStream, writer) +} + // WithFileTransferOptions returns a context that contains the address of file transfer options func WithFileTransferOptions(ctx context.Context, options *SnowflakeFileTransferOptions) context.Context { return context.WithValue(ctx, fileTransferOptions, options) @@ -91,6 +100,7 @@ func WithDescribeOnly(ctx context.Context) context.Context { // WithHigherPrecision returns a context that enables higher precision by // returning a *big.Int or *big.Float variable when querying rows for column // types with numbers that don't fit into its native Golang counterpart +// When used in combination with WithArrowBatches, original BigDecimal in arrow batches will be preserved. func WithHigherPrecision(ctx context.Context) context.Context { return context.WithValue(ctx, enableHigherPrecision, true) } @@ -111,8 +121,30 @@ func WithArrowAllocator(ctx context.Context, pool memory.Allocator) context.Cont // WithOriginalTimestamp in combination with WithArrowBatches returns a context // that allows users to retrieve arrow.Record with original timestamp struct returned by Snowflake. // It can be used in case arrow.Timestamp cannot fit original timestamp values. +// +// Deprecated: please use WithArrowBatchesTimestampOption instead. func WithOriginalTimestamp(ctx context.Context) context.Context { - return context.WithValue(ctx, enableOriginalTimestamp, true) + return context.WithValue(ctx, arrowBatchesTimestampOption, UseOriginalTimestamp) +} + +// WithArrowBatchesTimestampOption in combination with WithArrowBatches returns a context +// that allows users to retrieve arrow.Record with different timestamp options. +// UseNanosecondTimestamp: arrow.Timestamp in nanosecond precision, could cause ErrTooHighTimestampPrecision if arrow.Timestamp cannot fit original timestamp values. +// UseMicrosecondTimestamp: arrow.Timestamp in microsecond precision +// UseMillisecondTimestamp: arrow.Timestamp in millisecond precision +// UseSecondTimestamp: arrow.Timestamp in second precision +// UseOriginalTimestamp: original timestamp struct returned by Snowflake. It can be used in case arrow.Timestamp cannot fit original timestamp values. +func WithArrowBatchesTimestampOption(ctx context.Context, option snowflakeArrowBatchesTimestampOption) context.Context { + return context.WithValue(ctx, arrowBatchesTimestampOption, option) +} + +// WithArrowBatchesUtf8Validation in combination with WithArrowBatches returns a context that +// will validate and replace invalid UTF-8 characters in string columns with the replacement character +// Theoretically, this should not be necessary, because arrow string column is only intended to contain valid UTF-8 characters. +// However, in practice, it is possible that the data in the string column is not valid UTF-8. +func WithArrowBatchesUtf8Validation(ctx context.Context) context.Context { + return context.WithValue(ctx, enableArrowBatchesUtf8Validation, true) + } // WithQueryTag returns a context that will set the given tag as the QUERY_TAG @@ -121,6 +153,30 @@ func WithQueryTag(ctx context.Context, tag string) context.Context { return context.WithValue(ctx, queryTag, tag) } +// WithStructuredTypesEnabled changes how structured types are returned. +// Without this context structured types are returned as strings. +// With this context enabled, structured types are returned as native Go types. +func WithStructuredTypesEnabled(ctx context.Context) context.Context { + return context.WithValue(ctx, enableStructuredTypes, true) +} + +// WithMapValuesNullable changes how map values are returned. +// Instead of simple values (like string) sql.NullXXX wrappers (like sql.NullString) are used. +func WithMapValuesNullable(ctx context.Context) context.Context { + return context.WithValue(ctx, mapValuesNullable, true) +} + +// WithArrayValuesNullable changes how array values are returned. +// Instead of simple values (like string) sql.NullXXX wrappers (like sql.NullString) are used. +func WithArrayValuesNullable(ctx context.Context) context.Context { + return context.WithValue(ctx, arrayValuesNullable, true) +} + +// WithInternal sets the internal query flag. +func WithInternal(ctx context.Context) context.Context { + return context.WithValue(ctx, internalQuery, true) +} + // Get the request ID from the context if specified, otherwise generate one func getOrGenerateRequestIDFromContext(ctx context.Context) UUID { requestID, ok := ctx.Value(snowflakeRequestIDKey).(UUID) @@ -279,3 +335,20 @@ func contains[T comparable](s []T, e T) bool { func chooseRandomFromRange(min float64, max float64) float64 { return rand.Float64()*(max-min) + min } + +func withLowerKeys[T any](in map[string]T) map[string]T { + out := make(map[string]T) + for k, v := range in { + out[strings.ToLower(k)] = v + } + return out +} + +func findByPrefix(in []string, prefix string) int { + for i, v := range in { + if strings.HasPrefix(v, prefix) { + return i + } + } + return -1 +} diff --git a/vendor/github.com/snowflakedb/gosnowflake/uuid.go b/vendor/github.com/snowflakedb/gosnowflake/uuid.go index 1f55cc1c..2a5eec24 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/uuid.go +++ b/vendor/github.com/snowflakedb/gosnowflake/uuid.go @@ -1,5 +1,3 @@ -// Copyright (c) 2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake import ( @@ -18,7 +16,10 @@ var nilUUID UUID // NewUUID creates a new snowflake UUID func NewUUID() UUID { var u UUID - rand.Read(u[:]) + _, err := rand.Read(u[:]) + if err != nil { + logger.Warnf("error while reading random bytes to UUID. %v", err) + } u[8] = (u[8] | rfc4122) & 0x7F var version byte = 4 diff --git a/vendor/github.com/snowflakedb/gosnowflake/version.go b/vendor/github.com/snowflakedb/gosnowflake/version.go index a719774a..2e55832b 100644 --- a/vendor/github.com/snowflakedb/gosnowflake/version.go +++ b/vendor/github.com/snowflakedb/gosnowflake/version.go @@ -1,6 +1,4 @@ -// Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved. - package gosnowflake // SnowflakeGoDriverVersion is the version of Go Snowflake Driver. -const SnowflakeGoDriverVersion = "1.7.2" +const SnowflakeGoDriverVersion = "1.13.3" diff --git a/vendor/go.opentelemetry.io/auto/sdk/CONTRIBUTING.md b/vendor/go.opentelemetry.io/auto/sdk/CONTRIBUTING.md new file mode 100644 index 00000000..773c9b64 --- /dev/null +++ b/vendor/go.opentelemetry.io/auto/sdk/CONTRIBUTING.md @@ -0,0 +1,27 @@ +# Contributing to go.opentelemetry.io/auto/sdk + +The `go.opentelemetry.io/auto/sdk` module is a purpose built OpenTelemetry SDK. +It is designed to be: + +0. An OpenTelemetry compliant SDK +1. Instrumented by auto-instrumentation (serializable into OTLP JSON) +2. Lightweight +3. User-friendly + +These design choices are listed in the order of their importance. + +The primary design goal of this module is to be an OpenTelemetry SDK. +This means that it needs to implement the Go APIs found in `go.opentelemetry.io/otel`. + +Having met the requirement of SDK compliance, this module needs to provide code that the `go.opentelemetry.io/auto` module can instrument. +The chosen approach to meet this goal is to ensure the telemetry from the SDK is serializable into JSON encoded OTLP. +This ensures then that the serialized form is compatible with other OpenTelemetry systems, and the auto-instrumentation can use these systems to deserialize any telemetry it is sent. + +Outside of these first two goals, the intended use becomes relevant. +This package is intended to be used in the `go.opentelemetry.io/otel` global API as a default when the auto-instrumentation is running. +Because of this, this package needs to not add unnecessary dependencies to that API. +Ideally, it adds none. +It also needs to operate efficiently. + +Finally, this module is designed to be user-friendly to Go development. +It hides complexity in order to provide simpler APIs when the previous goals can all still be met. diff --git a/vendor/go.opentelemetry.io/auto/sdk/LICENSE b/vendor/go.opentelemetry.io/auto/sdk/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/vendor/go.opentelemetry.io/auto/sdk/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/go.opentelemetry.io/auto/sdk/VERSIONING.md b/vendor/go.opentelemetry.io/auto/sdk/VERSIONING.md new file mode 100644 index 00000000..088d19a6 --- /dev/null +++ b/vendor/go.opentelemetry.io/auto/sdk/VERSIONING.md @@ -0,0 +1,15 @@ +# Versioning + +This document describes the versioning policy for this module. +This policy is designed so the following goals can be achieved. + +**Users are provided a codebase of value that is stable and secure.** + +## Policy + +* Versioning of this module will be idiomatic of a Go project using [Go modules](https://github.com/golang/go/wiki/Modules). + * [Semantic import versioning](https://github.com/golang/go/wiki/Modules#semantic-import-versioning) will be used. + * Versions will comply with [semver 2.0](https://semver.org/spec/v2.0.0.html). + * Any `v2` or higher version of this module will be included as a `/vN` at the end of the module path used in `go.mod` files and in the package import path. + +* GitHub releases will be made for all releases. diff --git a/vendor/go.opentelemetry.io/auto/sdk/doc.go b/vendor/go.opentelemetry.io/auto/sdk/doc.go new file mode 100644 index 00000000..ad73d8cb --- /dev/null +++ b/vendor/go.opentelemetry.io/auto/sdk/doc.go @@ -0,0 +1,14 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +/* +Package sdk provides an auto-instrumentable OpenTelemetry SDK. + +An [go.opentelemetry.io/auto.Instrumentation] can be configured to target the +process running this SDK. In that case, all telemetry the SDK produces will be +processed and handled by that [go.opentelemetry.io/auto.Instrumentation]. + +By default, if there is no [go.opentelemetry.io/auto.Instrumentation] set to +auto-instrument the SDK, the SDK will not generate any telemetry. +*/ +package sdk diff --git a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/attr.go b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/attr.go new file mode 100644 index 00000000..af6ef171 --- /dev/null +++ b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/attr.go @@ -0,0 +1,58 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package telemetry + +// Attr is a key-value pair. +type Attr struct { + Key string `json:"key,omitempty"` + Value Value `json:"value,omitempty"` +} + +// String returns an Attr for a string value. +func String(key, value string) Attr { + return Attr{key, StringValue(value)} +} + +// Int64 returns an Attr for an int64 value. +func Int64(key string, value int64) Attr { + return Attr{key, Int64Value(value)} +} + +// Int returns an Attr for an int value. +func Int(key string, value int) Attr { + return Int64(key, int64(value)) +} + +// Float64 returns an Attr for a float64 value. +func Float64(key string, value float64) Attr { + return Attr{key, Float64Value(value)} +} + +// Bool returns an Attr for a bool value. +func Bool(key string, value bool) Attr { + return Attr{key, BoolValue(value)} +} + +// Bytes returns an Attr for a []byte value. +// The passed slice must not be changed after it is passed. +func Bytes(key string, value []byte) Attr { + return Attr{key, BytesValue(value)} +} + +// Slice returns an Attr for a []Value value. +// The passed slice must not be changed after it is passed. +func Slice(key string, value ...Value) Attr { + return Attr{key, SliceValue(value...)} +} + +// Map returns an Attr for a map value. +// The passed slice must not be changed after it is passed. +func Map(key string, value ...Attr) Attr { + return Attr{key, MapValue(value...)} +} + +// Equal returns if a is equal to b. +func (a Attr) Equal(b Attr) bool { + return a.Key == b.Key && a.Value.Equal(b.Value) +} diff --git a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/doc.go b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/doc.go new file mode 100644 index 00000000..949e2165 --- /dev/null +++ b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/doc.go @@ -0,0 +1,8 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +/* +Package telemetry provides a lightweight representations of OpenTelemetry +telemetry that is compatible with the OTLP JSON protobuf encoding. +*/ +package telemetry diff --git a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/id.go b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/id.go new file mode 100644 index 00000000..e854d7e8 --- /dev/null +++ b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/id.go @@ -0,0 +1,103 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package telemetry + +import ( + "encoding/hex" + "errors" + "fmt" +) + +const ( + traceIDSize = 16 + spanIDSize = 8 +) + +// TraceID is a custom data type that is used for all trace IDs. +type TraceID [traceIDSize]byte + +// String returns the hex string representation form of a TraceID. +func (tid TraceID) String() string { + return hex.EncodeToString(tid[:]) +} + +// IsEmpty returns false if id contains at least one non-zero byte. +func (tid TraceID) IsEmpty() bool { + return tid == [traceIDSize]byte{} +} + +// MarshalJSON converts the trace ID into a hex string enclosed in quotes. +func (tid TraceID) MarshalJSON() ([]byte, error) { + if tid.IsEmpty() { + return []byte(`""`), nil + } + return marshalJSON(tid[:]) +} + +// UnmarshalJSON inflates the trace ID from hex string, possibly enclosed in +// quotes. +func (tid *TraceID) UnmarshalJSON(data []byte) error { + *tid = [traceIDSize]byte{} + return unmarshalJSON(tid[:], data) +} + +// SpanID is a custom data type that is used for all span IDs. +type SpanID [spanIDSize]byte + +// String returns the hex string representation form of a SpanID. +func (sid SpanID) String() string { + return hex.EncodeToString(sid[:]) +} + +// IsEmpty returns true if the span ID contains at least one non-zero byte. +func (sid SpanID) IsEmpty() bool { + return sid == [spanIDSize]byte{} +} + +// MarshalJSON converts span ID into a hex string enclosed in quotes. +func (sid SpanID) MarshalJSON() ([]byte, error) { + if sid.IsEmpty() { + return []byte(`""`), nil + } + return marshalJSON(sid[:]) +} + +// UnmarshalJSON decodes span ID from hex string, possibly enclosed in quotes. +func (sid *SpanID) UnmarshalJSON(data []byte) error { + *sid = [spanIDSize]byte{} + return unmarshalJSON(sid[:], data) +} + +// marshalJSON converts id into a hex string enclosed in quotes. +func marshalJSON(id []byte) ([]byte, error) { + // Plus 2 quote chars at the start and end. + hexLen := hex.EncodedLen(len(id)) + 2 + + b := make([]byte, hexLen) + hex.Encode(b[1:hexLen-1], id) + b[0], b[hexLen-1] = '"', '"' + + return b, nil +} + +// unmarshalJSON inflates trace id from hex string, possibly enclosed in quotes. +func unmarshalJSON(dst []byte, src []byte) error { + if l := len(src); l >= 2 && src[0] == '"' && src[l-1] == '"' { + src = src[1 : l-1] + } + nLen := len(src) + if nLen == 0 { + return nil + } + + if len(dst) != hex.DecodedLen(nLen) { + return errors.New("invalid length for ID") + } + + _, err := hex.Decode(dst, src) + if err != nil { + return fmt.Errorf("cannot unmarshal ID from string '%s': %w", string(src), err) + } + return nil +} diff --git a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/number.go b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/number.go new file mode 100644 index 00000000..29e629d6 --- /dev/null +++ b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/number.go @@ -0,0 +1,67 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package telemetry + +import ( + "encoding/json" + "strconv" +) + +// protoInt64 represents the protobuf encoding of integers which can be either +// strings or integers. +type protoInt64 int64 + +// Int64 returns the protoInt64 as an int64. +func (i *protoInt64) Int64() int64 { return int64(*i) } + +// UnmarshalJSON decodes both strings and integers. +func (i *protoInt64) UnmarshalJSON(data []byte) error { + if data[0] == '"' { + var str string + if err := json.Unmarshal(data, &str); err != nil { + return err + } + parsedInt, err := strconv.ParseInt(str, 10, 64) + if err != nil { + return err + } + *i = protoInt64(parsedInt) + } else { + var parsedInt int64 + if err := json.Unmarshal(data, &parsedInt); err != nil { + return err + } + *i = protoInt64(parsedInt) + } + return nil +} + +// protoUint64 represents the protobuf encoding of integers which can be either +// strings or integers. +type protoUint64 uint64 + +// Int64 returns the protoUint64 as a uint64. +func (i *protoUint64) Uint64() uint64 { return uint64(*i) } + +// UnmarshalJSON decodes both strings and integers. +func (i *protoUint64) UnmarshalJSON(data []byte) error { + if data[0] == '"' { + var str string + if err := json.Unmarshal(data, &str); err != nil { + return err + } + parsedUint, err := strconv.ParseUint(str, 10, 64) + if err != nil { + return err + } + *i = protoUint64(parsedUint) + } else { + var parsedUint uint64 + if err := json.Unmarshal(data, &parsedUint); err != nil { + return err + } + *i = protoUint64(parsedUint) + } + return nil +} diff --git a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/resource.go b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/resource.go new file mode 100644 index 00000000..cecad8ba --- /dev/null +++ b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/resource.go @@ -0,0 +1,66 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package telemetry + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "io" +) + +// Resource information. +type Resource struct { + // Attrs are the set of attributes that describe the resource. Attribute + // keys MUST be unique (it is not allowed to have more than one attribute + // with the same key). + Attrs []Attr `json:"attributes,omitempty"` + // DroppedAttrs is the number of dropped attributes. If the value + // is 0, then no attributes were dropped. + DroppedAttrs uint32 `json:"droppedAttributesCount,omitempty"` +} + +// UnmarshalJSON decodes the OTLP formatted JSON contained in data into r. +func (r *Resource) UnmarshalJSON(data []byte) error { + decoder := json.NewDecoder(bytes.NewReader(data)) + + t, err := decoder.Token() + if err != nil { + return err + } + if t != json.Delim('{') { + return errors.New("invalid Resource type") + } + + for decoder.More() { + keyIface, err := decoder.Token() + if err != nil { + if errors.Is(err, io.EOF) { + // Empty. + return nil + } + return err + } + + key, ok := keyIface.(string) + if !ok { + return fmt.Errorf("invalid Resource field: %#v", keyIface) + } + + switch key { + case "attributes": + err = decoder.Decode(&r.Attrs) + case "droppedAttributesCount", "dropped_attributes_count": + err = decoder.Decode(&r.DroppedAttrs) + default: + // Skip unknown. + } + + if err != nil { + return err + } + } + return nil +} diff --git a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/scope.go b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/scope.go new file mode 100644 index 00000000..b6f2e28d --- /dev/null +++ b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/scope.go @@ -0,0 +1,67 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package telemetry + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "io" +) + +// Scope is the identifying values of the instrumentation scope. +type Scope struct { + Name string `json:"name,omitempty"` + Version string `json:"version,omitempty"` + Attrs []Attr `json:"attributes,omitempty"` + DroppedAttrs uint32 `json:"droppedAttributesCount,omitempty"` +} + +// UnmarshalJSON decodes the OTLP formatted JSON contained in data into r. +func (s *Scope) UnmarshalJSON(data []byte) error { + decoder := json.NewDecoder(bytes.NewReader(data)) + + t, err := decoder.Token() + if err != nil { + return err + } + if t != json.Delim('{') { + return errors.New("invalid Scope type") + } + + for decoder.More() { + keyIface, err := decoder.Token() + if err != nil { + if errors.Is(err, io.EOF) { + // Empty. + return nil + } + return err + } + + key, ok := keyIface.(string) + if !ok { + return fmt.Errorf("invalid Scope field: %#v", keyIface) + } + + switch key { + case "name": + err = decoder.Decode(&s.Name) + case "version": + err = decoder.Decode(&s.Version) + case "attributes": + err = decoder.Decode(&s.Attrs) + case "droppedAttributesCount", "dropped_attributes_count": + err = decoder.Decode(&s.DroppedAttrs) + default: + // Skip unknown. + } + + if err != nil { + return err + } + } + return nil +} diff --git a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/span.go b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/span.go new file mode 100644 index 00000000..a13a6b73 --- /dev/null +++ b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/span.go @@ -0,0 +1,456 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package telemetry + +import ( + "bytes" + "encoding/hex" + "encoding/json" + "errors" + "fmt" + "io" + "time" +) + +// A Span represents a single operation performed by a single component of the +// system. +type Span struct { + // A unique identifier for a trace. All spans from the same trace share + // the same `trace_id`. The ID is a 16-byte array. An ID with all zeroes OR + // of length other than 16 bytes is considered invalid (empty string in OTLP/JSON + // is zero-length and thus is also invalid). + // + // This field is required. + TraceID TraceID `json:"traceId,omitempty"` + // A unique identifier for a span within a trace, assigned when the span + // is created. The ID is an 8-byte array. An ID with all zeroes OR of length + // other than 8 bytes is considered invalid (empty string in OTLP/JSON + // is zero-length and thus is also invalid). + // + // This field is required. + SpanID SpanID `json:"spanId,omitempty"` + // trace_state conveys information about request position in multiple distributed tracing graphs. + // It is a trace_state in w3c-trace-context format: https://www.w3.org/TR/trace-context/#tracestate-header + // See also https://github.com/w3c/distributed-tracing for more details about this field. + TraceState string `json:"traceState,omitempty"` + // The `span_id` of this span's parent span. If this is a root span, then this + // field must be empty. The ID is an 8-byte array. + ParentSpanID SpanID `json:"parentSpanId,omitempty"` + // Flags, a bit field. + // + // Bits 0-7 (8 least significant bits) are the trace flags as defined in W3C Trace + // Context specification. To read the 8-bit W3C trace flag, use + // `flags & SPAN_FLAGS_TRACE_FLAGS_MASK`. + // + // See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions. + // + // Bits 8 and 9 represent the 3 states of whether a span's parent + // is remote. The states are (unknown, is not remote, is remote). + // To read whether the value is known, use `(flags & SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK) != 0`. + // To read whether the span is remote, use `(flags & SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK) != 0`. + // + // When creating span messages, if the message is logically forwarded from another source + // with an equivalent flags fields (i.e., usually another OTLP span message), the field SHOULD + // be copied as-is. If creating from a source that does not have an equivalent flags field + // (such as a runtime representation of an OpenTelemetry span), the high 22 bits MUST + // be set to zero. + // Readers MUST NOT assume that bits 10-31 (22 most significant bits) will be zero. + // + // [Optional]. + Flags uint32 `json:"flags,omitempty"` + // A description of the span's operation. + // + // For example, the name can be a qualified method name or a file name + // and a line number where the operation is called. A best practice is to use + // the same display name at the same call point in an application. + // This makes it easier to correlate spans in different traces. + // + // This field is semantically required to be set to non-empty string. + // Empty value is equivalent to an unknown span name. + // + // This field is required. + Name string `json:"name"` + // Distinguishes between spans generated in a particular context. For example, + // two spans with the same name may be distinguished using `CLIENT` (caller) + // and `SERVER` (callee) to identify queueing latency associated with the span. + Kind SpanKind `json:"kind,omitempty"` + // start_time_unix_nano is the start time of the span. On the client side, this is the time + // kept by the local machine where the span execution starts. On the server side, this + // is the time when the server's application handler starts running. + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970. + // + // This field is semantically required and it is expected that end_time >= start_time. + StartTime time.Time `json:"startTimeUnixNano,omitempty"` + // end_time_unix_nano is the end time of the span. On the client side, this is the time + // kept by the local machine where the span execution ends. On the server side, this + // is the time when the server application handler stops running. + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970. + // + // This field is semantically required and it is expected that end_time >= start_time. + EndTime time.Time `json:"endTimeUnixNano,omitempty"` + // attributes is a collection of key/value pairs. Note, global attributes + // like server name can be set using the resource API. Examples of attributes: + // + // "/http/user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" + // "/http/server_latency": 300 + // "example.com/myattribute": true + // "example.com/score": 10.239 + // + // The OpenTelemetry API specification further restricts the allowed value types: + // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/common/README.md#attribute + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + Attrs []Attr `json:"attributes,omitempty"` + // dropped_attributes_count is the number of attributes that were discarded. Attributes + // can be discarded because their keys are too long or because there are too many + // attributes. If this value is 0, then no attributes were dropped. + DroppedAttrs uint32 `json:"droppedAttributesCount,omitempty"` + // events is a collection of Event items. + Events []*SpanEvent `json:"events,omitempty"` + // dropped_events_count is the number of dropped events. If the value is 0, then no + // events were dropped. + DroppedEvents uint32 `json:"droppedEventsCount,omitempty"` + // links is a collection of Links, which are references from this span to a span + // in the same or different trace. + Links []*SpanLink `json:"links,omitempty"` + // dropped_links_count is the number of dropped links after the maximum size was + // enforced. If this value is 0, then no links were dropped. + DroppedLinks uint32 `json:"droppedLinksCount,omitempty"` + // An optional final status for this span. Semantically when Status isn't set, it means + // span's status code is unset, i.e. assume STATUS_CODE_UNSET (code = 0). + Status *Status `json:"status,omitempty"` +} + +// MarshalJSON encodes s into OTLP formatted JSON. +func (s Span) MarshalJSON() ([]byte, error) { + startT := s.StartTime.UnixNano() + if s.StartTime.IsZero() || startT < 0 { + startT = 0 + } + + endT := s.EndTime.UnixNano() + if s.EndTime.IsZero() || endT < 0 { + endT = 0 + } + + // Override non-empty default SpanID marshal and omitempty. + var parentSpanId string + if !s.ParentSpanID.IsEmpty() { + b := make([]byte, hex.EncodedLen(spanIDSize)) + hex.Encode(b, s.ParentSpanID[:]) + parentSpanId = string(b) + } + + type Alias Span + return json.Marshal(struct { + Alias + ParentSpanID string `json:"parentSpanId,omitempty"` + StartTime uint64 `json:"startTimeUnixNano,omitempty"` + EndTime uint64 `json:"endTimeUnixNano,omitempty"` + }{ + Alias: Alias(s), + ParentSpanID: parentSpanId, + StartTime: uint64(startT), + EndTime: uint64(endT), + }) +} + +// UnmarshalJSON decodes the OTLP formatted JSON contained in data into s. +func (s *Span) UnmarshalJSON(data []byte) error { + decoder := json.NewDecoder(bytes.NewReader(data)) + + t, err := decoder.Token() + if err != nil { + return err + } + if t != json.Delim('{') { + return errors.New("invalid Span type") + } + + for decoder.More() { + keyIface, err := decoder.Token() + if err != nil { + if errors.Is(err, io.EOF) { + // Empty. + return nil + } + return err + } + + key, ok := keyIface.(string) + if !ok { + return fmt.Errorf("invalid Span field: %#v", keyIface) + } + + switch key { + case "traceId", "trace_id": + err = decoder.Decode(&s.TraceID) + case "spanId", "span_id": + err = decoder.Decode(&s.SpanID) + case "traceState", "trace_state": + err = decoder.Decode(&s.TraceState) + case "parentSpanId", "parent_span_id": + err = decoder.Decode(&s.ParentSpanID) + case "flags": + err = decoder.Decode(&s.Flags) + case "name": + err = decoder.Decode(&s.Name) + case "kind": + err = decoder.Decode(&s.Kind) + case "startTimeUnixNano", "start_time_unix_nano": + var val protoUint64 + err = decoder.Decode(&val) + s.StartTime = time.Unix(0, int64(val.Uint64())) + case "endTimeUnixNano", "end_time_unix_nano": + var val protoUint64 + err = decoder.Decode(&val) + s.EndTime = time.Unix(0, int64(val.Uint64())) + case "attributes": + err = decoder.Decode(&s.Attrs) + case "droppedAttributesCount", "dropped_attributes_count": + err = decoder.Decode(&s.DroppedAttrs) + case "events": + err = decoder.Decode(&s.Events) + case "droppedEventsCount", "dropped_events_count": + err = decoder.Decode(&s.DroppedEvents) + case "links": + err = decoder.Decode(&s.Links) + case "droppedLinksCount", "dropped_links_count": + err = decoder.Decode(&s.DroppedLinks) + case "status": + err = decoder.Decode(&s.Status) + default: + // Skip unknown. + } + + if err != nil { + return err + } + } + return nil +} + +// SpanFlags represents constants used to interpret the +// Span.flags field, which is protobuf 'fixed32' type and is to +// be used as bit-fields. Each non-zero value defined in this enum is +// a bit-mask. To extract the bit-field, for example, use an +// expression like: +// +// (span.flags & SPAN_FLAGS_TRACE_FLAGS_MASK) +// +// See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions. +// +// Note that Span flags were introduced in version 1.1 of the +// OpenTelemetry protocol. Older Span producers do not set this +// field, consequently consumers should not rely on the absence of a +// particular flag bit to indicate the presence of a particular feature. +type SpanFlags int32 + +const ( + // Bits 0-7 are used for trace flags. + SpanFlagsTraceFlagsMask SpanFlags = 255 + // Bits 8 and 9 are used to indicate that the parent span or link span is remote. + // Bit 8 (`HAS_IS_REMOTE`) indicates whether the value is known. + // Bit 9 (`IS_REMOTE`) indicates whether the span or link is remote. + SpanFlagsContextHasIsRemoteMask SpanFlags = 256 + // SpanFlagsContextHasIsRemoteMask indicates the Span is remote. + SpanFlagsContextIsRemoteMask SpanFlags = 512 +) + +// SpanKind is the type of span. Can be used to specify additional relationships between spans +// in addition to a parent/child relationship. +type SpanKind int32 + +const ( + // Indicates that the span represents an internal operation within an application, + // as opposed to an operation happening at the boundaries. Default value. + SpanKindInternal SpanKind = 1 + // Indicates that the span covers server-side handling of an RPC or other + // remote network request. + SpanKindServer SpanKind = 2 + // Indicates that the span describes a request to some remote service. + SpanKindClient SpanKind = 3 + // Indicates that the span describes a producer sending a message to a broker. + // Unlike CLIENT and SERVER, there is often no direct critical path latency relationship + // between producer and consumer spans. A PRODUCER span ends when the message was accepted + // by the broker while the logical processing of the message might span a much longer time. + SpanKindProducer SpanKind = 4 + // Indicates that the span describes consumer receiving a message from a broker. + // Like the PRODUCER kind, there is often no direct critical path latency relationship + // between producer and consumer spans. + SpanKindConsumer SpanKind = 5 +) + +// Event is a time-stamped annotation of the span, consisting of user-supplied +// text description and key-value pairs. +type SpanEvent struct { + // time_unix_nano is the time the event occurred. + Time time.Time `json:"timeUnixNano,omitempty"` + // name of the event. + // This field is semantically required to be set to non-empty string. + Name string `json:"name,omitempty"` + // attributes is a collection of attribute key/value pairs on the event. + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + Attrs []Attr `json:"attributes,omitempty"` + // dropped_attributes_count is the number of dropped attributes. If the value is 0, + // then no attributes were dropped. + DroppedAttrs uint32 `json:"droppedAttributesCount,omitempty"` +} + +// MarshalJSON encodes e into OTLP formatted JSON. +func (e SpanEvent) MarshalJSON() ([]byte, error) { + t := e.Time.UnixNano() + if e.Time.IsZero() || t < 0 { + t = 0 + } + + type Alias SpanEvent + return json.Marshal(struct { + Alias + Time uint64 `json:"timeUnixNano,omitempty"` + }{ + Alias: Alias(e), + Time: uint64(t), + }) +} + +// UnmarshalJSON decodes the OTLP formatted JSON contained in data into se. +func (se *SpanEvent) UnmarshalJSON(data []byte) error { + decoder := json.NewDecoder(bytes.NewReader(data)) + + t, err := decoder.Token() + if err != nil { + return err + } + if t != json.Delim('{') { + return errors.New("invalid SpanEvent type") + } + + for decoder.More() { + keyIface, err := decoder.Token() + if err != nil { + if errors.Is(err, io.EOF) { + // Empty. + return nil + } + return err + } + + key, ok := keyIface.(string) + if !ok { + return fmt.Errorf("invalid SpanEvent field: %#v", keyIface) + } + + switch key { + case "timeUnixNano", "time_unix_nano": + var val protoUint64 + err = decoder.Decode(&val) + se.Time = time.Unix(0, int64(val.Uint64())) + case "name": + err = decoder.Decode(&se.Name) + case "attributes": + err = decoder.Decode(&se.Attrs) + case "droppedAttributesCount", "dropped_attributes_count": + err = decoder.Decode(&se.DroppedAttrs) + default: + // Skip unknown. + } + + if err != nil { + return err + } + } + return nil +} + +// A pointer from the current span to another span in the same trace or in a +// different trace. For example, this can be used in batching operations, +// where a single batch handler processes multiple requests from different +// traces or when the handler receives a request from a different project. +type SpanLink struct { + // A unique identifier of a trace that this linked span is part of. The ID is a + // 16-byte array. + TraceID TraceID `json:"traceId,omitempty"` + // A unique identifier for the linked span. The ID is an 8-byte array. + SpanID SpanID `json:"spanId,omitempty"` + // The trace_state associated with the link. + TraceState string `json:"traceState,omitempty"` + // attributes is a collection of attribute key/value pairs on the link. + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + Attrs []Attr `json:"attributes,omitempty"` + // dropped_attributes_count is the number of dropped attributes. If the value is 0, + // then no attributes were dropped. + DroppedAttrs uint32 `json:"droppedAttributesCount,omitempty"` + // Flags, a bit field. + // + // Bits 0-7 (8 least significant bits) are the trace flags as defined in W3C Trace + // Context specification. To read the 8-bit W3C trace flag, use + // `flags & SPAN_FLAGS_TRACE_FLAGS_MASK`. + // + // See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions. + // + // Bits 8 and 9 represent the 3 states of whether the link is remote. + // The states are (unknown, is not remote, is remote). + // To read whether the value is known, use `(flags & SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK) != 0`. + // To read whether the link is remote, use `(flags & SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK) != 0`. + // + // Readers MUST NOT assume that bits 10-31 (22 most significant bits) will be zero. + // When creating new spans, bits 10-31 (most-significant 22-bits) MUST be zero. + // + // [Optional]. + Flags uint32 `json:"flags,omitempty"` +} + +// UnmarshalJSON decodes the OTLP formatted JSON contained in data into sl. +func (sl *SpanLink) UnmarshalJSON(data []byte) error { + decoder := json.NewDecoder(bytes.NewReader(data)) + + t, err := decoder.Token() + if err != nil { + return err + } + if t != json.Delim('{') { + return errors.New("invalid SpanLink type") + } + + for decoder.More() { + keyIface, err := decoder.Token() + if err != nil { + if errors.Is(err, io.EOF) { + // Empty. + return nil + } + return err + } + + key, ok := keyIface.(string) + if !ok { + return fmt.Errorf("invalid SpanLink field: %#v", keyIface) + } + + switch key { + case "traceId", "trace_id": + err = decoder.Decode(&sl.TraceID) + case "spanId", "span_id": + err = decoder.Decode(&sl.SpanID) + case "traceState", "trace_state": + err = decoder.Decode(&sl.TraceState) + case "attributes": + err = decoder.Decode(&sl.Attrs) + case "droppedAttributesCount", "dropped_attributes_count": + err = decoder.Decode(&sl.DroppedAttrs) + case "flags": + err = decoder.Decode(&sl.Flags) + default: + // Skip unknown. + } + + if err != nil { + return err + } + } + return nil +} diff --git a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/status.go b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/status.go new file mode 100644 index 00000000..1217776e --- /dev/null +++ b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/status.go @@ -0,0 +1,40 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package telemetry + +// For the semantics of status codes see +// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/api.md#set-status +type StatusCode int32 + +const ( + // The default status. + StatusCodeUnset StatusCode = 0 + // The Span has been validated by an Application developer or Operator to + // have completed successfully. + StatusCodeOK StatusCode = 1 + // The Span contains an error. + StatusCodeError StatusCode = 2 +) + +var statusCodeStrings = []string{ + "Unset", + "OK", + "Error", +} + +func (s StatusCode) String() string { + if s >= 0 && int(s) < len(statusCodeStrings) { + return statusCodeStrings[s] + } + return "" +} + +// The Status type defines a logical error model that is suitable for different +// programming environments, including REST APIs and RPC APIs. +type Status struct { + // A developer-facing human readable error message. + Message string `json:"message,omitempty"` + // The status code. + Code StatusCode `json:"code,omitempty"` +} diff --git a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/traces.go b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/traces.go new file mode 100644 index 00000000..69a348f0 --- /dev/null +++ b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/traces.go @@ -0,0 +1,189 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package telemetry + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "io" +) + +// Traces represents the traces data that can be stored in a persistent storage, +// OR can be embedded by other protocols that transfer OTLP traces data but do +// not implement the OTLP protocol. +// +// The main difference between this message and collector protocol is that +// in this message there will not be any "control" or "metadata" specific to +// OTLP protocol. +// +// When new fields are added into this message, the OTLP request MUST be updated +// as well. +type Traces struct { + // An array of ResourceSpans. + // For data coming from a single resource this array will typically contain + // one element. Intermediary nodes that receive data from multiple origins + // typically batch the data before forwarding further and in that case this + // array will contain multiple elements. + ResourceSpans []*ResourceSpans `json:"resourceSpans,omitempty"` +} + +// UnmarshalJSON decodes the OTLP formatted JSON contained in data into td. +func (td *Traces) UnmarshalJSON(data []byte) error { + decoder := json.NewDecoder(bytes.NewReader(data)) + + t, err := decoder.Token() + if err != nil { + return err + } + if t != json.Delim('{') { + return errors.New("invalid TracesData type") + } + + for decoder.More() { + keyIface, err := decoder.Token() + if err != nil { + if errors.Is(err, io.EOF) { + // Empty. + return nil + } + return err + } + + key, ok := keyIface.(string) + if !ok { + return fmt.Errorf("invalid TracesData field: %#v", keyIface) + } + + switch key { + case "resourceSpans", "resource_spans": + err = decoder.Decode(&td.ResourceSpans) + default: + // Skip unknown. + } + + if err != nil { + return err + } + } + return nil +} + +// A collection of ScopeSpans from a Resource. +type ResourceSpans struct { + // The resource for the spans in this message. + // If this field is not set then no resource info is known. + Resource Resource `json:"resource"` + // A list of ScopeSpans that originate from a resource. + ScopeSpans []*ScopeSpans `json:"scopeSpans,omitempty"` + // This schema_url applies to the data in the "resource" field. It does not apply + // to the data in the "scope_spans" field which have their own schema_url field. + SchemaURL string `json:"schemaUrl,omitempty"` +} + +// UnmarshalJSON decodes the OTLP formatted JSON contained in data into rs. +func (rs *ResourceSpans) UnmarshalJSON(data []byte) error { + decoder := json.NewDecoder(bytes.NewReader(data)) + + t, err := decoder.Token() + if err != nil { + return err + } + if t != json.Delim('{') { + return errors.New("invalid ResourceSpans type") + } + + for decoder.More() { + keyIface, err := decoder.Token() + if err != nil { + if errors.Is(err, io.EOF) { + // Empty. + return nil + } + return err + } + + key, ok := keyIface.(string) + if !ok { + return fmt.Errorf("invalid ResourceSpans field: %#v", keyIface) + } + + switch key { + case "resource": + err = decoder.Decode(&rs.Resource) + case "scopeSpans", "scope_spans": + err = decoder.Decode(&rs.ScopeSpans) + case "schemaUrl", "schema_url": + err = decoder.Decode(&rs.SchemaURL) + default: + // Skip unknown. + } + + if err != nil { + return err + } + } + return nil +} + +// A collection of Spans produced by an InstrumentationScope. +type ScopeSpans struct { + // The instrumentation scope information for the spans in this message. + // Semantically when InstrumentationScope isn't set, it is equivalent with + // an empty instrumentation scope name (unknown). + Scope *Scope `json:"scope"` + // A list of Spans that originate from an instrumentation scope. + Spans []*Span `json:"spans,omitempty"` + // The Schema URL, if known. This is the identifier of the Schema that the span data + // is recorded in. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // This schema_url applies to all spans and span events in the "spans" field. + SchemaURL string `json:"schemaUrl,omitempty"` +} + +// UnmarshalJSON decodes the OTLP formatted JSON contained in data into ss. +func (ss *ScopeSpans) UnmarshalJSON(data []byte) error { + decoder := json.NewDecoder(bytes.NewReader(data)) + + t, err := decoder.Token() + if err != nil { + return err + } + if t != json.Delim('{') { + return errors.New("invalid ScopeSpans type") + } + + for decoder.More() { + keyIface, err := decoder.Token() + if err != nil { + if errors.Is(err, io.EOF) { + // Empty. + return nil + } + return err + } + + key, ok := keyIface.(string) + if !ok { + return fmt.Errorf("invalid ScopeSpans field: %#v", keyIface) + } + + switch key { + case "scope": + err = decoder.Decode(&ss.Scope) + case "spans": + err = decoder.Decode(&ss.Spans) + case "schemaUrl", "schema_url": + err = decoder.Decode(&ss.SchemaURL) + default: + // Skip unknown. + } + + if err != nil { + return err + } + } + return nil +} diff --git a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/value.go b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/value.go new file mode 100644 index 00000000..0dd01b06 --- /dev/null +++ b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/value.go @@ -0,0 +1,452 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +//go:generate stringer -type=ValueKind -trimprefix=ValueKind + +package telemetry + +import ( + "bytes" + "cmp" + "encoding/base64" + "encoding/json" + "errors" + "fmt" + "io" + "math" + "slices" + "strconv" + "unsafe" +) + +// A Value represents a structured value. +// A zero value is valid and represents an empty value. +type Value struct { + // Ensure forward compatibility by explicitly making this not comparable. + noCmp [0]func() //nolint: unused // This is indeed used. + + // num holds the value for Int64, Float64, and Bool. It holds the length + // for String, Bytes, Slice, Map. + num uint64 + // any holds either the KindBool, KindInt64, KindFloat64, stringptr, + // bytesptr, sliceptr, or mapptr. If KindBool, KindInt64, or KindFloat64 + // then the value of Value is in num as described above. Otherwise, it + // contains the value wrapped in the appropriate type. + any any +} + +type ( + // sliceptr represents a value in Value.any for KindString Values. + stringptr *byte + // bytesptr represents a value in Value.any for KindBytes Values. + bytesptr *byte + // sliceptr represents a value in Value.any for KindSlice Values. + sliceptr *Value + // mapptr represents a value in Value.any for KindMap Values. + mapptr *Attr +) + +// ValueKind is the kind of a [Value]. +type ValueKind int + +// ValueKind values. +const ( + ValueKindEmpty ValueKind = iota + ValueKindBool + ValueKindFloat64 + ValueKindInt64 + ValueKindString + ValueKindBytes + ValueKindSlice + ValueKindMap +) + +var valueKindStrings = []string{ + "Empty", + "Bool", + "Float64", + "Int64", + "String", + "Bytes", + "Slice", + "Map", +} + +func (k ValueKind) String() string { + if k >= 0 && int(k) < len(valueKindStrings) { + return valueKindStrings[k] + } + return "" +} + +// StringValue returns a new [Value] for a string. +func StringValue(v string) Value { + return Value{ + num: uint64(len(v)), + any: stringptr(unsafe.StringData(v)), + } +} + +// IntValue returns a [Value] for an int. +func IntValue(v int) Value { return Int64Value(int64(v)) } + +// Int64Value returns a [Value] for an int64. +func Int64Value(v int64) Value { + return Value{num: uint64(v), any: ValueKindInt64} +} + +// Float64Value returns a [Value] for a float64. +func Float64Value(v float64) Value { + return Value{num: math.Float64bits(v), any: ValueKindFloat64} +} + +// BoolValue returns a [Value] for a bool. +func BoolValue(v bool) Value { //nolint:revive // Not a control flag. + var n uint64 + if v { + n = 1 + } + return Value{num: n, any: ValueKindBool} +} + +// BytesValue returns a [Value] for a byte slice. The passed slice must not be +// changed after it is passed. +func BytesValue(v []byte) Value { + return Value{ + num: uint64(len(v)), + any: bytesptr(unsafe.SliceData(v)), + } +} + +// SliceValue returns a [Value] for a slice of [Value]. The passed slice must +// not be changed after it is passed. +func SliceValue(vs ...Value) Value { + return Value{ + num: uint64(len(vs)), + any: sliceptr(unsafe.SliceData(vs)), + } +} + +// MapValue returns a new [Value] for a slice of key-value pairs. The passed +// slice must not be changed after it is passed. +func MapValue(kvs ...Attr) Value { + return Value{ + num: uint64(len(kvs)), + any: mapptr(unsafe.SliceData(kvs)), + } +} + +// AsString returns the value held by v as a string. +func (v Value) AsString() string { + if sp, ok := v.any.(stringptr); ok { + return unsafe.String(sp, v.num) + } + // TODO: error handle + return "" +} + +// asString returns the value held by v as a string. It will panic if the Value +// is not KindString. +func (v Value) asString() string { + return unsafe.String(v.any.(stringptr), v.num) +} + +// AsInt64 returns the value held by v as an int64. +func (v Value) AsInt64() int64 { + if v.Kind() != ValueKindInt64 { + // TODO: error handle + return 0 + } + return v.asInt64() +} + +// asInt64 returns the value held by v as an int64. If v is not of KindInt64, +// this will return garbage. +func (v Value) asInt64() int64 { + // Assumes v.num was a valid int64 (overflow not checked). + return int64(v.num) // nolint: gosec +} + +// AsBool returns the value held by v as a bool. +func (v Value) AsBool() bool { + if v.Kind() != ValueKindBool { + // TODO: error handle + return false + } + return v.asBool() +} + +// asBool returns the value held by v as a bool. If v is not of KindBool, this +// will return garbage. +func (v Value) asBool() bool { return v.num == 1 } + +// AsFloat64 returns the value held by v as a float64. +func (v Value) AsFloat64() float64 { + if v.Kind() != ValueKindFloat64 { + // TODO: error handle + return 0 + } + return v.asFloat64() +} + +// asFloat64 returns the value held by v as a float64. If v is not of +// KindFloat64, this will return garbage. +func (v Value) asFloat64() float64 { return math.Float64frombits(v.num) } + +// AsBytes returns the value held by v as a []byte. +func (v Value) AsBytes() []byte { + if sp, ok := v.any.(bytesptr); ok { + return unsafe.Slice((*byte)(sp), v.num) + } + // TODO: error handle + return nil +} + +// asBytes returns the value held by v as a []byte. It will panic if the Value +// is not KindBytes. +func (v Value) asBytes() []byte { + return unsafe.Slice((*byte)(v.any.(bytesptr)), v.num) +} + +// AsSlice returns the value held by v as a []Value. +func (v Value) AsSlice() []Value { + if sp, ok := v.any.(sliceptr); ok { + return unsafe.Slice((*Value)(sp), v.num) + } + // TODO: error handle + return nil +} + +// asSlice returns the value held by v as a []Value. It will panic if the Value +// is not KindSlice. +func (v Value) asSlice() []Value { + return unsafe.Slice((*Value)(v.any.(sliceptr)), v.num) +} + +// AsMap returns the value held by v as a []Attr. +func (v Value) AsMap() []Attr { + if sp, ok := v.any.(mapptr); ok { + return unsafe.Slice((*Attr)(sp), v.num) + } + // TODO: error handle + return nil +} + +// asMap returns the value held by v as a []Attr. It will panic if the +// Value is not KindMap. +func (v Value) asMap() []Attr { + return unsafe.Slice((*Attr)(v.any.(mapptr)), v.num) +} + +// Kind returns the Kind of v. +func (v Value) Kind() ValueKind { + switch x := v.any.(type) { + case ValueKind: + return x + case stringptr: + return ValueKindString + case bytesptr: + return ValueKindBytes + case sliceptr: + return ValueKindSlice + case mapptr: + return ValueKindMap + default: + return ValueKindEmpty + } +} + +// Empty returns if v does not hold any value. +func (v Value) Empty() bool { return v.Kind() == ValueKindEmpty } + +// Equal returns if v is equal to w. +func (v Value) Equal(w Value) bool { + k1 := v.Kind() + k2 := w.Kind() + if k1 != k2 { + return false + } + switch k1 { + case ValueKindInt64, ValueKindBool: + return v.num == w.num + case ValueKindString: + return v.asString() == w.asString() + case ValueKindFloat64: + return v.asFloat64() == w.asFloat64() + case ValueKindSlice: + return slices.EqualFunc(v.asSlice(), w.asSlice(), Value.Equal) + case ValueKindMap: + sv := sortMap(v.asMap()) + sw := sortMap(w.asMap()) + return slices.EqualFunc(sv, sw, Attr.Equal) + case ValueKindBytes: + return bytes.Equal(v.asBytes(), w.asBytes()) + case ValueKindEmpty: + return true + default: + // TODO: error handle + return false + } +} + +func sortMap(m []Attr) []Attr { + sm := make([]Attr, len(m)) + copy(sm, m) + slices.SortFunc(sm, func(a, b Attr) int { + return cmp.Compare(a.Key, b.Key) + }) + + return sm +} + +// String returns Value's value as a string, formatted like [fmt.Sprint]. +// +// The returned string is meant for debugging; +// the string representation is not stable. +func (v Value) String() string { + switch v.Kind() { + case ValueKindString: + return v.asString() + case ValueKindInt64: + // Assumes v.num was a valid int64 (overflow not checked). + return strconv.FormatInt(int64(v.num), 10) // nolint: gosec + case ValueKindFloat64: + return strconv.FormatFloat(v.asFloat64(), 'g', -1, 64) + case ValueKindBool: + return strconv.FormatBool(v.asBool()) + case ValueKindBytes: + return fmt.Sprint(v.asBytes()) + case ValueKindMap: + return fmt.Sprint(v.asMap()) + case ValueKindSlice: + return fmt.Sprint(v.asSlice()) + case ValueKindEmpty: + return "" + default: + // Try to handle this as gracefully as possible. + // + // Don't panic here. The goal here is to have developers find this + // first if a slog.Kind is is not handled. It is + // preferable to have user's open issue asking why their attributes + // have a "unhandled: " prefix than say that their code is panicking. + return fmt.Sprintf("", v.Kind()) + } +} + +// MarshalJSON encodes v into OTLP formatted JSON. +func (v *Value) MarshalJSON() ([]byte, error) { + switch v.Kind() { + case ValueKindString: + return json.Marshal(struct { + Value string `json:"stringValue"` + }{v.asString()}) + case ValueKindInt64: + return json.Marshal(struct { + Value string `json:"intValue"` + }{strconv.FormatInt(int64(v.num), 10)}) + case ValueKindFloat64: + return json.Marshal(struct { + Value float64 `json:"doubleValue"` + }{v.asFloat64()}) + case ValueKindBool: + return json.Marshal(struct { + Value bool `json:"boolValue"` + }{v.asBool()}) + case ValueKindBytes: + return json.Marshal(struct { + Value []byte `json:"bytesValue"` + }{v.asBytes()}) + case ValueKindMap: + return json.Marshal(struct { + Value struct { + Values []Attr `json:"values"` + } `json:"kvlistValue"` + }{struct { + Values []Attr `json:"values"` + }{v.asMap()}}) + case ValueKindSlice: + return json.Marshal(struct { + Value struct { + Values []Value `json:"values"` + } `json:"arrayValue"` + }{struct { + Values []Value `json:"values"` + }{v.asSlice()}}) + case ValueKindEmpty: + return nil, nil + default: + return nil, fmt.Errorf("unknown Value kind: %s", v.Kind().String()) + } +} + +// UnmarshalJSON decodes the OTLP formatted JSON contained in data into v. +func (v *Value) UnmarshalJSON(data []byte) error { + decoder := json.NewDecoder(bytes.NewReader(data)) + + t, err := decoder.Token() + if err != nil { + return err + } + if t != json.Delim('{') { + return errors.New("invalid Value type") + } + + for decoder.More() { + keyIface, err := decoder.Token() + if err != nil { + if errors.Is(err, io.EOF) { + // Empty. + return nil + } + return err + } + + key, ok := keyIface.(string) + if !ok { + return fmt.Errorf("invalid Value key: %#v", keyIface) + } + + switch key { + case "stringValue", "string_value": + var val string + err = decoder.Decode(&val) + *v = StringValue(val) + case "boolValue", "bool_value": + var val bool + err = decoder.Decode(&val) + *v = BoolValue(val) + case "intValue", "int_value": + var val protoInt64 + err = decoder.Decode(&val) + *v = Int64Value(val.Int64()) + case "doubleValue", "double_value": + var val float64 + err = decoder.Decode(&val) + *v = Float64Value(val) + case "bytesValue", "bytes_value": + var val64 string + if err := decoder.Decode(&val64); err != nil { + return err + } + var val []byte + val, err = base64.StdEncoding.DecodeString(val64) + *v = BytesValue(val) + case "arrayValue", "array_value": + var val struct{ Values []Value } + err = decoder.Decode(&val) + *v = SliceValue(val.Values...) + case "kvlistValue", "kvlist_value": + var val struct{ Values []Attr } + err = decoder.Decode(&val) + *v = MapValue(val.Values...) + default: + // Skip unknown. + continue + } + // Use first valid. Ignore the rest. + return err + } + + // Only unknown fields. Return nil without unmarshaling any value. + return nil +} diff --git a/vendor/go.opentelemetry.io/auto/sdk/limit.go b/vendor/go.opentelemetry.io/auto/sdk/limit.go new file mode 100644 index 00000000..86babf1a --- /dev/null +++ b/vendor/go.opentelemetry.io/auto/sdk/limit.go @@ -0,0 +1,94 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package sdk + +import ( + "log/slog" + "os" + "strconv" +) + +// maxSpan are the span limits resolved during startup. +var maxSpan = newSpanLimits() + +type spanLimits struct { + // Attrs is the number of allowed attributes for a span. + // + // This is resolved from the environment variable value for the + // OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT key if it exists. Otherwise, the + // environment variable value for OTEL_ATTRIBUTE_COUNT_LIMIT, or 128 if + // that is not set, is used. + Attrs int + // AttrValueLen is the maximum attribute value length allowed for a span. + // + // This is resolved from the environment variable value for the + // OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT key if it exists. Otherwise, the + // environment variable value for OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT, or -1 + // if that is not set, is used. + AttrValueLen int + // Events is the number of allowed events for a span. + // + // This is resolved from the environment variable value for the + // OTEL_SPAN_EVENT_COUNT_LIMIT key, or 128 is used if that is not set. + Events int + // EventAttrs is the number of allowed attributes for a span event. + // + // The is resolved from the environment variable value for the + // OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT key, or 128 is used if that is not set. + EventAttrs int + // Links is the number of allowed Links for a span. + // + // This is resolved from the environment variable value for the + // OTEL_SPAN_LINK_COUNT_LIMIT, or 128 is used if that is not set. + Links int + // LinkAttrs is the number of allowed attributes for a span link. + // + // This is resolved from the environment variable value for the + // OTEL_LINK_ATTRIBUTE_COUNT_LIMIT, or 128 is used if that is not set. + LinkAttrs int +} + +func newSpanLimits() spanLimits { + return spanLimits{ + Attrs: firstEnv( + 128, + "OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT", + "OTEL_ATTRIBUTE_COUNT_LIMIT", + ), + AttrValueLen: firstEnv( + -1, // Unlimited. + "OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT", + "OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT", + ), + Events: firstEnv(128, "OTEL_SPAN_EVENT_COUNT_LIMIT"), + EventAttrs: firstEnv(128, "OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT"), + Links: firstEnv(128, "OTEL_SPAN_LINK_COUNT_LIMIT"), + LinkAttrs: firstEnv(128, "OTEL_LINK_ATTRIBUTE_COUNT_LIMIT"), + } +} + +// firstEnv returns the parsed integer value of the first matching environment +// variable from keys. The defaultVal is returned if the value is not an +// integer or no match is found. +func firstEnv(defaultVal int, keys ...string) int { + for _, key := range keys { + strV := os.Getenv(key) + if strV == "" { + continue + } + + v, err := strconv.Atoi(strV) + if err == nil { + return v + } + slog.Warn( + "invalid limit environment variable", + "error", err, + "key", key, + "value", strV, + ) + } + + return defaultVal +} diff --git a/vendor/go.opentelemetry.io/auto/sdk/span.go b/vendor/go.opentelemetry.io/auto/sdk/span.go new file mode 100644 index 00000000..6ebea12a --- /dev/null +++ b/vendor/go.opentelemetry.io/auto/sdk/span.go @@ -0,0 +1,432 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package sdk + +import ( + "encoding/json" + "fmt" + "reflect" + "runtime" + "strings" + "sync" + "sync/atomic" + "time" + "unicode/utf8" + + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/codes" + semconv "go.opentelemetry.io/otel/semconv/v1.26.0" + "go.opentelemetry.io/otel/trace" + "go.opentelemetry.io/otel/trace/noop" + + "go.opentelemetry.io/auto/sdk/internal/telemetry" +) + +type span struct { + noop.Span + + spanContext trace.SpanContext + sampled atomic.Bool + + mu sync.Mutex + traces *telemetry.Traces + span *telemetry.Span +} + +func (s *span) SpanContext() trace.SpanContext { + if s == nil { + return trace.SpanContext{} + } + // s.spanContext is immutable, do not acquire lock s.mu. + return s.spanContext +} + +func (s *span) IsRecording() bool { + if s == nil { + return false + } + + return s.sampled.Load() +} + +func (s *span) SetStatus(c codes.Code, msg string) { + if s == nil || !s.sampled.Load() { + return + } + + s.mu.Lock() + defer s.mu.Unlock() + + if s.span.Status == nil { + s.span.Status = new(telemetry.Status) + } + + s.span.Status.Message = msg + + switch c { + case codes.Unset: + s.span.Status.Code = telemetry.StatusCodeUnset + case codes.Error: + s.span.Status.Code = telemetry.StatusCodeError + case codes.Ok: + s.span.Status.Code = telemetry.StatusCodeOK + } +} + +func (s *span) SetAttributes(attrs ...attribute.KeyValue) { + if s == nil || !s.sampled.Load() { + return + } + + s.mu.Lock() + defer s.mu.Unlock() + + limit := maxSpan.Attrs + if limit == 0 { + // No attributes allowed. + s.span.DroppedAttrs += uint32(len(attrs)) + return + } + + m := make(map[string]int) + for i, a := range s.span.Attrs { + m[a.Key] = i + } + + for _, a := range attrs { + val := convAttrValue(a.Value) + if val.Empty() { + s.span.DroppedAttrs++ + continue + } + + if idx, ok := m[string(a.Key)]; ok { + s.span.Attrs[idx] = telemetry.Attr{ + Key: string(a.Key), + Value: val, + } + } else if limit < 0 || len(s.span.Attrs) < limit { + s.span.Attrs = append(s.span.Attrs, telemetry.Attr{ + Key: string(a.Key), + Value: val, + }) + m[string(a.Key)] = len(s.span.Attrs) - 1 + } else { + s.span.DroppedAttrs++ + } + } +} + +// convCappedAttrs converts up to limit attrs into a []telemetry.Attr. The +// number of dropped attributes is also returned. +func convCappedAttrs(limit int, attrs []attribute.KeyValue) ([]telemetry.Attr, uint32) { + if limit == 0 { + return nil, uint32(len(attrs)) + } + + if limit < 0 { + // Unlimited. + return convAttrs(attrs), 0 + } + + limit = min(len(attrs), limit) + return convAttrs(attrs[:limit]), uint32(len(attrs) - limit) +} + +func convAttrs(attrs []attribute.KeyValue) []telemetry.Attr { + if len(attrs) == 0 { + // Avoid allocations if not necessary. + return nil + } + + out := make([]telemetry.Attr, 0, len(attrs)) + for _, attr := range attrs { + key := string(attr.Key) + val := convAttrValue(attr.Value) + if val.Empty() { + continue + } + out = append(out, telemetry.Attr{Key: key, Value: val}) + } + return out +} + +func convAttrValue(value attribute.Value) telemetry.Value { + switch value.Type() { + case attribute.BOOL: + return telemetry.BoolValue(value.AsBool()) + case attribute.INT64: + return telemetry.Int64Value(value.AsInt64()) + case attribute.FLOAT64: + return telemetry.Float64Value(value.AsFloat64()) + case attribute.STRING: + v := truncate(maxSpan.AttrValueLen, value.AsString()) + return telemetry.StringValue(v) + case attribute.BOOLSLICE: + slice := value.AsBoolSlice() + out := make([]telemetry.Value, 0, len(slice)) + for _, v := range slice { + out = append(out, telemetry.BoolValue(v)) + } + return telemetry.SliceValue(out...) + case attribute.INT64SLICE: + slice := value.AsInt64Slice() + out := make([]telemetry.Value, 0, len(slice)) + for _, v := range slice { + out = append(out, telemetry.Int64Value(v)) + } + return telemetry.SliceValue(out...) + case attribute.FLOAT64SLICE: + slice := value.AsFloat64Slice() + out := make([]telemetry.Value, 0, len(slice)) + for _, v := range slice { + out = append(out, telemetry.Float64Value(v)) + } + return telemetry.SliceValue(out...) + case attribute.STRINGSLICE: + slice := value.AsStringSlice() + out := make([]telemetry.Value, 0, len(slice)) + for _, v := range slice { + v = truncate(maxSpan.AttrValueLen, v) + out = append(out, telemetry.StringValue(v)) + } + return telemetry.SliceValue(out...) + } + return telemetry.Value{} +} + +// truncate returns a truncated version of s such that it contains less than +// the limit number of characters. Truncation is applied by returning the limit +// number of valid characters contained in s. +// +// If limit is negative, it returns the original string. +// +// UTF-8 is supported. When truncating, all invalid characters are dropped +// before applying truncation. +// +// If s already contains less than the limit number of bytes, it is returned +// unchanged. No invalid characters are removed. +func truncate(limit int, s string) string { + // This prioritize performance in the following order based on the most + // common expected use-cases. + // + // - Short values less than the default limit (128). + // - Strings with valid encodings that exceed the limit. + // - No limit. + // - Strings with invalid encodings that exceed the limit. + if limit < 0 || len(s) <= limit { + return s + } + + // Optimistically, assume all valid UTF-8. + var b strings.Builder + count := 0 + for i, c := range s { + if c != utf8.RuneError { + count++ + if count > limit { + return s[:i] + } + continue + } + + _, size := utf8.DecodeRuneInString(s[i:]) + if size == 1 { + // Invalid encoding. + b.Grow(len(s) - 1) + _, _ = b.WriteString(s[:i]) + s = s[i:] + break + } + } + + // Fast-path, no invalid input. + if b.Cap() == 0 { + return s + } + + // Truncate while validating UTF-8. + for i := 0; i < len(s) && count < limit; { + c := s[i] + if c < utf8.RuneSelf { + // Optimization for single byte runes (common case). + _ = b.WriteByte(c) + i++ + count++ + continue + } + + _, size := utf8.DecodeRuneInString(s[i:]) + if size == 1 { + // We checked for all 1-byte runes above, this is a RuneError. + i++ + continue + } + + _, _ = b.WriteString(s[i : i+size]) + i += size + count++ + } + + return b.String() +} + +func (s *span) End(opts ...trace.SpanEndOption) { + if s == nil || !s.sampled.Swap(false) { + return + } + + // s.end exists so the lock (s.mu) is not held while s.ended is called. + s.ended(s.end(opts)) +} + +func (s *span) end(opts []trace.SpanEndOption) []byte { + s.mu.Lock() + defer s.mu.Unlock() + + cfg := trace.NewSpanEndConfig(opts...) + if t := cfg.Timestamp(); !t.IsZero() { + s.span.EndTime = cfg.Timestamp() + } else { + s.span.EndTime = time.Now() + } + + b, _ := json.Marshal(s.traces) // TODO: do not ignore this error. + return b +} + +// Expected to be implemented in eBPF. +// +//go:noinline +func (*span) ended(buf []byte) { ended(buf) } + +// ended is used for testing. +var ended = func([]byte) {} + +func (s *span) RecordError(err error, opts ...trace.EventOption) { + if s == nil || err == nil || !s.sampled.Load() { + return + } + + cfg := trace.NewEventConfig(opts...) + + attrs := cfg.Attributes() + attrs = append(attrs, + semconv.ExceptionType(typeStr(err)), + semconv.ExceptionMessage(err.Error()), + ) + if cfg.StackTrace() { + buf := make([]byte, 2048) + n := runtime.Stack(buf, false) + attrs = append(attrs, semconv.ExceptionStacktrace(string(buf[0:n]))) + } + + s.mu.Lock() + defer s.mu.Unlock() + + s.addEvent(semconv.ExceptionEventName, cfg.Timestamp(), attrs) +} + +func typeStr(i any) string { + t := reflect.TypeOf(i) + if t.PkgPath() == "" && t.Name() == "" { + // Likely a builtin type. + return t.String() + } + return fmt.Sprintf("%s.%s", t.PkgPath(), t.Name()) +} + +func (s *span) AddEvent(name string, opts ...trace.EventOption) { + if s == nil || !s.sampled.Load() { + return + } + + cfg := trace.NewEventConfig(opts...) + + s.mu.Lock() + defer s.mu.Unlock() + + s.addEvent(name, cfg.Timestamp(), cfg.Attributes()) +} + +// addEvent adds an event with name and attrs at tStamp to the span. The span +// lock (s.mu) needs to be held by the caller. +func (s *span) addEvent(name string, tStamp time.Time, attrs []attribute.KeyValue) { + limit := maxSpan.Events + + if limit == 0 { + s.span.DroppedEvents++ + return + } + + if limit > 0 && len(s.span.Events) == limit { + // Drop head while avoiding allocation of more capacity. + copy(s.span.Events[:limit-1], s.span.Events[1:]) + s.span.Events = s.span.Events[:limit-1] + s.span.DroppedEvents++ + } + + e := &telemetry.SpanEvent{Time: tStamp, Name: name} + e.Attrs, e.DroppedAttrs = convCappedAttrs(maxSpan.EventAttrs, attrs) + + s.span.Events = append(s.span.Events, e) +} + +func (s *span) AddLink(link trace.Link) { + if s == nil || !s.sampled.Load() { + return + } + + l := maxSpan.Links + + s.mu.Lock() + defer s.mu.Unlock() + + if l == 0 { + s.span.DroppedLinks++ + return + } + + if l > 0 && len(s.span.Links) == l { + // Drop head while avoiding allocation of more capacity. + copy(s.span.Links[:l-1], s.span.Links[1:]) + s.span.Links = s.span.Links[:l-1] + s.span.DroppedLinks++ + } + + s.span.Links = append(s.span.Links, convLink(link)) +} + +func convLinks(links []trace.Link) []*telemetry.SpanLink { + out := make([]*telemetry.SpanLink, 0, len(links)) + for _, link := range links { + out = append(out, convLink(link)) + } + return out +} + +func convLink(link trace.Link) *telemetry.SpanLink { + l := &telemetry.SpanLink{ + TraceID: telemetry.TraceID(link.SpanContext.TraceID()), + SpanID: telemetry.SpanID(link.SpanContext.SpanID()), + TraceState: link.SpanContext.TraceState().String(), + Flags: uint32(link.SpanContext.TraceFlags()), + } + l.Attrs, l.DroppedAttrs = convCappedAttrs(maxSpan.LinkAttrs, link.Attributes) + + return l +} + +func (s *span) SetName(name string) { + if s == nil || !s.sampled.Load() { + return + } + + s.mu.Lock() + defer s.mu.Unlock() + + s.span.Name = name +} + +func (*span) TracerProvider() trace.TracerProvider { return TracerProvider() } diff --git a/vendor/go.opentelemetry.io/auto/sdk/tracer.go b/vendor/go.opentelemetry.io/auto/sdk/tracer.go new file mode 100644 index 00000000..cbcfabde --- /dev/null +++ b/vendor/go.opentelemetry.io/auto/sdk/tracer.go @@ -0,0 +1,124 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package sdk + +import ( + "context" + "time" + + "go.opentelemetry.io/otel/trace" + "go.opentelemetry.io/otel/trace/noop" + + "go.opentelemetry.io/auto/sdk/internal/telemetry" +) + +type tracer struct { + noop.Tracer + + name, schemaURL, version string +} + +var _ trace.Tracer = tracer{} + +func (t tracer) Start(ctx context.Context, name string, opts ...trace.SpanStartOption) (context.Context, trace.Span) { + var psc trace.SpanContext + sampled := true + span := new(span) + + // Ask eBPF for sampling decision and span context info. + t.start(ctx, span, &psc, &sampled, &span.spanContext) + + span.sampled.Store(sampled) + + ctx = trace.ContextWithSpan(ctx, span) + + if sampled { + // Only build traces if sampled. + cfg := trace.NewSpanStartConfig(opts...) + span.traces, span.span = t.traces(name, cfg, span.spanContext, psc) + } + + return ctx, span +} + +// Expected to be implemented in eBPF. +// +//go:noinline +func (t *tracer) start( + ctx context.Context, + spanPtr *span, + psc *trace.SpanContext, + sampled *bool, + sc *trace.SpanContext, +) { + start(ctx, spanPtr, psc, sampled, sc) +} + +// start is used for testing. +var start = func(context.Context, *span, *trace.SpanContext, *bool, *trace.SpanContext) {} + +func (t tracer) traces(name string, cfg trace.SpanConfig, sc, psc trace.SpanContext) (*telemetry.Traces, *telemetry.Span) { + span := &telemetry.Span{ + TraceID: telemetry.TraceID(sc.TraceID()), + SpanID: telemetry.SpanID(sc.SpanID()), + Flags: uint32(sc.TraceFlags()), + TraceState: sc.TraceState().String(), + ParentSpanID: telemetry.SpanID(psc.SpanID()), + Name: name, + Kind: spanKind(cfg.SpanKind()), + } + + span.Attrs, span.DroppedAttrs = convCappedAttrs(maxSpan.Attrs, cfg.Attributes()) + + links := cfg.Links() + if limit := maxSpan.Links; limit == 0 { + span.DroppedLinks = uint32(len(links)) + } else { + if limit > 0 { + n := max(len(links)-limit, 0) + span.DroppedLinks = uint32(n) + links = links[n:] + } + span.Links = convLinks(links) + } + + if t := cfg.Timestamp(); !t.IsZero() { + span.StartTime = cfg.Timestamp() + } else { + span.StartTime = time.Now() + } + + return &telemetry.Traces{ + ResourceSpans: []*telemetry.ResourceSpans{ + { + ScopeSpans: []*telemetry.ScopeSpans{ + { + Scope: &telemetry.Scope{ + Name: t.name, + Version: t.version, + }, + Spans: []*telemetry.Span{span}, + SchemaURL: t.schemaURL, + }, + }, + }, + }, + }, span +} + +func spanKind(kind trace.SpanKind) telemetry.SpanKind { + switch kind { + case trace.SpanKindInternal: + return telemetry.SpanKindInternal + case trace.SpanKindServer: + return telemetry.SpanKindServer + case trace.SpanKindClient: + return telemetry.SpanKindClient + case trace.SpanKindProducer: + return telemetry.SpanKindProducer + case trace.SpanKindConsumer: + return telemetry.SpanKindConsumer + } + return telemetry.SpanKind(0) // undefined. +} diff --git a/vendor/go.opentelemetry.io/auto/sdk/tracer_provider.go b/vendor/go.opentelemetry.io/auto/sdk/tracer_provider.go new file mode 100644 index 00000000..dbc477a5 --- /dev/null +++ b/vendor/go.opentelemetry.io/auto/sdk/tracer_provider.go @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package sdk + +import ( + "go.opentelemetry.io/otel/trace" + "go.opentelemetry.io/otel/trace/noop" +) + +// TracerProvider returns an auto-instrumentable [trace.TracerProvider]. +// +// If an [go.opentelemetry.io/auto.Instrumentation] is configured to instrument +// the process using the returned TracerProvider, all of the telemetry it +// produces will be processed and handled by that Instrumentation. By default, +// if no Instrumentation instruments the TracerProvider it will not generate +// any trace telemetry. +func TracerProvider() trace.TracerProvider { return tracerProviderInstance } + +var tracerProviderInstance = new(tracerProvider) + +type tracerProvider struct{ noop.TracerProvider } + +var _ trace.TracerProvider = tracerProvider{} + +func (p tracerProvider) Tracer(name string, opts ...trace.TracerOption) trace.Tracer { + cfg := trace.NewTracerConfig(opts...) + return tracer{ + name: name, + version: cfg.InstrumentationVersion(), + schemaURL: cfg.SchemaURL(), + } +} diff --git a/vendor/go.opentelemetry.io/otel/.gitignore b/vendor/go.opentelemetry.io/otel/.gitignore index 895c7664..749e8e88 100644 --- a/vendor/go.opentelemetry.io/otel/.gitignore +++ b/vendor/go.opentelemetry.io/otel/.gitignore @@ -1,6 +1,7 @@ .DS_Store Thumbs.db +.cache/ .tools/ venv/ .idea/ @@ -12,11 +13,3 @@ go.work go.work.sum gen/ - -/example/dice/dice -/example/namedtracer/namedtracer -/example/otel-collector/otel-collector -/example/opencensus/opencensus -/example/passthrough/passthrough -/example/prometheus/prometheus -/example/zipkin/zipkin diff --git a/vendor/go.opentelemetry.io/otel/.golangci.yml b/vendor/go.opentelemetry.io/otel/.golangci.yml index d9abe194..c58e48ab 100644 --- a/vendor/go.opentelemetry.io/otel/.golangci.yml +++ b/vendor/go.opentelemetry.io/otel/.golangci.yml @@ -22,13 +22,16 @@ linters: - govet - ineffassign - misspell + - perfsprint - revive - staticcheck - - tenv + - testifylint - typecheck - unconvert - unused - unparam + - usestdlibvars + - usetesting issues: # Maximum issues count per one linter. @@ -60,16 +63,17 @@ issues: text: "calls to (.+) only in main[(][)] or init[(][)] functions" linters: - revive - # It's okay to not run gosec in a test. + # It's okay to not run gosec and perfsprint in a test. - path: _test\.go linters: - gosec - # Igonoring gosec G404: Use of weak random number generator (math/rand instead of crypto/rand) + - perfsprint + # Ignoring gosec G404: Use of weak random number generator (math/rand instead of crypto/rand) # as we commonly use it in tests and examples. - text: "G404:" linters: - gosec - # Igonoring gosec G402: TLS MinVersion too low + # Ignoring gosec G402: TLS MinVersion too low # as the https://pkg.go.dev/crypto/tls#Config handles MinVersion default well. - text: "G402: TLS MinVersion too low." linters: @@ -94,6 +98,13 @@ linters-settings: - pkg: "crypto/md5" - pkg: "crypto/sha1" - pkg: "crypto/**/pkix" + auto/sdk: + files: + - "!internal/global/trace.go" + - "~internal/global/trace_test.go" + deny: + - pkg: "go.opentelemetry.io/auto/sdk" + desc: Do not use SDK from automatic instrumentation. otlp-internal: files: - "!**/exporters/otlp/internal/**/*.go" @@ -126,8 +137,6 @@ linters-settings: - "**/metric/**/*.go" - "**/bridge/*.go" - "**/bridge/**/*.go" - - "**/example/*.go" - - "**/example/**/*.go" - "**/trace/*.go" - "**/trace/**/*.go" - "**/log/*.go" @@ -155,137 +164,71 @@ linters-settings: locale: US ignore-words: - cancelled + perfsprint: + err-error: true + errorf: true + int-conversion: true + sprintf1: true + strconcat: true revive: # Sets the default failure confidence. # This means that linting errors with less than 0.8 confidence will be ignored. # Default: 0.8 confidence: 0.01 + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md rules: - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#blank-imports - name: blank-imports - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#bool-literal-in-expr - name: bool-literal-in-expr - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#constant-logical-expr - name: constant-logical-expr - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#context-as-argument - # TODO (#3372) re-enable linter when it is compatible. https://github.com/golangci/golangci-lint/issues/3280 - name: context-as-argument disabled: true arguments: - allowTypesBefore: "*testing.T" - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#context-keys-type + - allowTypesBefore: "*testing.T" - name: context-keys-type - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#deep-exit - name: deep-exit - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#defer - name: defer - disabled: false arguments: - ["call-chain", "loop"] - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#dot-imports - name: dot-imports - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#duplicated-imports - name: duplicated-imports - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#early-return - name: early-return - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#empty-block + arguments: + - "preserveScope" - name: empty-block - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#empty-lines - name: empty-lines - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#error-naming - name: error-naming - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#error-return - name: error-return - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#error-strings - name: error-strings - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#errorf - name: errorf - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#exported - name: exported - disabled: false arguments: - "sayRepetitiveInsteadOfStutters" - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#flag-parameter - name: flag-parameter - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#identical-branches - name: identical-branches - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#if-return - name: if-return - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#increment-decrement + - name: import-shadowing - name: increment-decrement - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#indent-error-flow - name: indent-error-flow - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#import-shadowing - - name: import-shadowing - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#package-comments + arguments: + - "preserveScope" - name: package-comments - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#range - name: range - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#range-val-in-closure - name: range-val-in-closure - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#range-val-address - name: range-val-address - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#redefines-builtin-id - name: redefines-builtin-id - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#string-format - name: string-format - disabled: false arguments: - - panic - '/^[^\n]*$/' - must not contain line breaks - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#struct-tag - name: struct-tag - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#superfluous-else - name: superfluous-else - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#time-equal - - name: time-equal - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#var-naming - - name: var-naming - disabled: false arguments: - - ["ID"] # AllowList - - ["Otel", "Aws", "Gcp"] # DenyList - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#var-declaration - - name: var-declaration - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unconditional-recursion + - "preserveScope" + - name: time-equal - name: unconditional-recursion - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unexported-return - name: unexported-return - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unhandled-error - name: unhandled-error - disabled: false arguments: - "fmt.Fprint" - "fmt.Fprintf" @@ -293,12 +236,17 @@ linters-settings: - "fmt.Print" - "fmt.Printf" - "fmt.Println" - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unnecessary-stmt - name: unnecessary-stmt - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#useless-break - name: useless-break - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#waitgroup-by-value + - name: var-declaration + - name: var-naming + arguments: + - ["ID"] # AllowList + - ["Otel", "Aws", "Gcp"] # DenyList - name: waitgroup-by-value - disabled: false + testifylint: + enable-all: true + disable: + - float-compare + - go-require + - require-error diff --git a/vendor/go.opentelemetry.io/otel/CHANGELOG.md b/vendor/go.opentelemetry.io/otel/CHANGELOG.md index 6107c17b..c076db28 100644 --- a/vendor/go.opentelemetry.io/otel/CHANGELOG.md +++ b/vendor/go.opentelemetry.io/otel/CHANGELOG.md @@ -11,6 +11,181 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm +## [1.35.0/0.57.0/0.11.0] 2025-03-05 + +This release is the last to support [Go 1.22]. +The next release will require at least [Go 1.23]. + +### Added + +- Add `ValueFromAttribute` and `KeyValueFromAttribute` in `go.opentelemetry.io/otel/log`. (#6180) +- Add `EventName` and `SetEventName` to `Record` in `go.opentelemetry.io/otel/log`. (#6187) +- Add `EventName` to `RecordFactory` in `go.opentelemetry.io/otel/log/logtest`. (#6187) +- `AssertRecordEqual` in `go.opentelemetry.io/otel/log/logtest` checks `Record.EventName`. (#6187) +- Add `EventName` and `SetEventName` to `Record` in `go.opentelemetry.io/otel/sdk/log`. (#6193) +- Add `EventName` to `RecordFactory` in `go.opentelemetry.io/otel/sdk/log/logtest`. (#6193) +- Emit `Record.EventName` field in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc`. (#6211) +- Emit `Record.EventName` field in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#6211) +- Emit `Record.EventName` field in `go.opentelemetry.io/otel/exporters/stdout/stdoutlog` (#6210) +- The `go.opentelemetry.io/otel/semconv/v1.28.0` package. + The package contains semantic conventions from the `v1.28.0` version of the OpenTelemetry Semantic Conventions. + See the [migration documentation](./semconv/v1.28.0/MIGRATION.md) for information on how to upgrade from `go.opentelemetry.io/otel/semconv/v1.27.0`(#6236) +- The `go.opentelemetry.io/otel/semconv/v1.30.0` package. + The package contains semantic conventions from the `v1.30.0` version of the OpenTelemetry Semantic Conventions. + See the [migration documentation](./semconv/v1.30.0/MIGRATION.md) for information on how to upgrade from `go.opentelemetry.io/otel/semconv/v1.28.0`(#6240) +- Document the pitfalls of using `Resource` as a comparable type. + `Resource.Equal` and `Resource.Equivalent` should be used instead. (#6272) +- Support [Go 1.24]. (#6304) +- Add `FilterProcessor` and `EnabledParameters` in `go.opentelemetry.io/otel/sdk/log`. + It replaces `go.opentelemetry.io/otel/sdk/log/internal/x.FilterProcessor`. + Compared to previous version it additionally gives the possibility to filter by resource and instrumentation scope. (#6317) + +### Changed + +- Update `github.com/prometheus/common` to `v0.62.0`, which changes the `NameValidationScheme` to `NoEscaping`. + This allows metrics names to keep original delimiters (e.g. `.`), rather than replacing with underscores. + This is controlled by the `Content-Type` header, or can be reverted by setting `NameValidationScheme` to `LegacyValidation` in `github.com/prometheus/common/model`. (#6198) + +### Fixes + +- Eliminate goroutine leak for the processor returned by `NewSimpleSpanProcessor` in `go.opentelemetry.io/otel/sdk/trace` when `Shutdown` is called and the passed `ctx` is canceled and `SpanExporter.Shutdown` has not returned. (#6368) +- Eliminate goroutine leak for the processor returned by `NewBatchSpanProcessor` in `go.opentelemetry.io/otel/sdk/trace` when `ForceFlush` is called and the passed `ctx` is canceled and `SpanExporter.Export` has not returned. (#6369) + +## [1.34.0/0.56.0/0.10.0] 2025-01-17 + +### Changed + +- Remove the notices from `Logger` to make the whole Logs API user-facing in `go.opentelemetry.io/otel/log`. (#6167) + +### Fixed + +- Relax minimum Go version to 1.22.0 in various modules. (#6073) +- The `Type` name logged for the `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` client is corrected from `otlphttpgrpc` to `otlptracegrpc`. (#6143) +- The `Type` name logged for the `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlphttpgrpc` client is corrected from `otlphttphttp` to `otlptracehttp`. (#6143) + +## [1.33.0/0.55.0/0.9.0/0.0.12] 2024-12-12 + +### Added + +- Add `Reset` method to `SpanRecorder` in `go.opentelemetry.io/otel/sdk/trace/tracetest`. (#5994) +- Add `EnabledInstrument` interface in `go.opentelemetry.io/otel/sdk/metric/internal/x`. + This is an experimental interface that is implemented by synchronous instruments provided by `go.opentelemetry.io/otel/sdk/metric`. + Users can use it to avoid performing computationally expensive operations when recording measurements. + It does not fall within the scope of the OpenTelemetry Go versioning and stability [policy](./VERSIONING.md) and it may be changed in backwards incompatible ways or removed in feature releases. (#6016) + +### Changed + +- The default global API now supports full auto-instrumentation from the `go.opentelemetry.io/auto` package. + See that package for more information. (#5920) +- Propagate non-retryable error messages to client in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#5929) +- Propagate non-retryable error messages to client in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#5929) +- Propagate non-retryable error messages to client in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#5929) +- Performance improvements for attribute value `AsStringSlice`, `AsFloat64Slice`, `AsInt64Slice`, `AsBoolSlice`. (#6011) +- Change `EnabledParameters` to have a `Severity` field instead of a getter and setter in `go.opentelemetry.io/otel/log`. (#6009) + +### Fixed + +- Fix inconsistent request body closing in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#5954) +- Fix inconsistent request body closing in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#5954) +- Fix inconsistent request body closing in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#5954) +- Fix invalid exemplar keys in `go.opentelemetry.io/otel/exporters/prometheus`. (#5995) +- Fix attribute value truncation in `go.opentelemetry.io/otel/sdk/trace`. (#5997) +- Fix attribute value truncation in `go.opentelemetry.io/otel/sdk/log`. (#6032) + +## [1.32.0/0.54.0/0.8.0/0.0.11] 2024-11-08 + +### Added + +- Add `go.opentelemetry.io/otel/sdk/metric/exemplar.AlwaysOffFilter`, which can be used to disable exemplar recording. (#5850) +- Add `go.opentelemetry.io/otel/sdk/metric.WithExemplarFilter`, which can be used to configure the exemplar filter used by the metrics SDK. (#5850) +- Add `ExemplarReservoirProviderSelector` and `DefaultExemplarReservoirProviderSelector` to `go.opentelemetry.io/otel/sdk/metric`, which defines the exemplar reservoir to use based on the aggregation of the metric. (#5861) +- Add `ExemplarReservoirProviderSelector` to `go.opentelemetry.io/otel/sdk/metric.Stream` to allow using views to configure the exemplar reservoir to use for a metric. (#5861) +- Add `ReservoirProvider`, `HistogramReservoirProvider` and `FixedSizeReservoirProvider` to `go.opentelemetry.io/otel/sdk/metric/exemplar` to make it convenient to use providers of Reservoirs. (#5861) +- The `go.opentelemetry.io/otel/semconv/v1.27.0` package. + The package contains semantic conventions from the `v1.27.0` version of the OpenTelemetry Semantic Conventions. (#5894) +- Add `Attributes attribute.Set` field to `Scope` in `go.opentelemetry.io/otel/sdk/instrumentation`. (#5903) +- Add `Attributes attribute.Set` field to `ScopeRecords` in `go.opentelemetry.io/otel/log/logtest`. (#5927) +- `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` adds instrumentation scope attributes. (#5934) +- `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp` adds instrumentation scope attributes. (#5934) +- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` adds instrumentation scope attributes. (#5935) +- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` adds instrumentation scope attributes. (#5935) +- `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc` adds instrumentation scope attributes. (#5933) +- `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp` adds instrumentation scope attributes. (#5933) +- `go.opentelemetry.io/otel/exporters/prometheus` adds instrumentation scope attributes in `otel_scope_info` metric as labels. (#5932) + +### Changed + +- Support scope attributes and make them as identifying for `Tracer` in `go.opentelemetry.io/otel` and `go.opentelemetry.io/otel/sdk/trace`. (#5924) +- Support scope attributes and make them as identifying for `Meter` in `go.opentelemetry.io/otel` and `go.opentelemetry.io/otel/sdk/metric`. (#5926) +- Support scope attributes and make them as identifying for `Logger` in `go.opentelemetry.io/otel` and `go.opentelemetry.io/otel/sdk/log`. (#5925) +- Make schema URL and scope attributes as identifying for `Tracer` in `go.opentelemetry.io/otel/bridge/opentracing`. (#5931) +- Clear unneeded slice elements to allow GC to collect the objects in `go.opentelemetry.io/otel/sdk/metric` and `go.opentelemetry.io/otel/sdk/trace`. (#5804) + +### Fixed + +- Global MeterProvider registration unwraps global instrument Observers, the undocumented Unwrap() methods are now private. (#5881) +- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` now keeps the metadata already present in the context when `WithHeaders` is used. (#5892) +- `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc` now keeps the metadata already present in the context when `WithHeaders` is used. (#5911) +- `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` now keeps the metadata already present in the context when `WithHeaders` is used. (#5915) +- Fix `go.opentelemetry.io/otel/exporters/prometheus` trying to add exemplars to Gauge metrics, which is unsupported. (#5912) +- Fix `WithEndpointURL` to always use a secure connection when an https URL is passed in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`. (#5944) +- Fix `WithEndpointURL` to always use a secure connection when an https URL is passed in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#5944) +- Fix `WithEndpointURL` to always use a secure connection when an https URL is passed in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`. (#5944) +- Fix `WithEndpointURL` to always use a secure connection when an https URL is passed in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#5944) +- Fix incorrect metrics generated from callbacks when multiple readers are used in `go.opentelemetry.io/otel/sdk/metric`. (#5900) + +### Removed + +- Remove all examples under `go.opentelemetry.io/otel/example` as they are moved to [Contrib repository](https://github.com/open-telemetry/opentelemetry-go-contrib/tree/main/examples). (#5930) + +## [1.31.0/0.53.0/0.7.0/0.0.10] 2024-10-11 + +### Added + +- Add `go.opentelemetry.io/otel/sdk/metric/exemplar` package which includes `Exemplar`, `Filter`, `TraceBasedFilter`, `AlwaysOnFilter`, `HistogramReservoir`, `FixedSizeReservoir`, `Reservoir`, `Value` and `ValueType` types. These will be used for configuring the exemplar reservoir for the metrics sdk. (#5747, #5862) +- Add `WithExportBufferSize` option to log batch processor.(#5877) + +### Changed + +- Enable exemplars by default in `go.opentelemetry.io/otel/sdk/metric`. Exemplars can be disabled by setting `OTEL_METRICS_EXEMPLAR_FILTER=always_off` (#5778) +- `Logger.Enabled` in `go.opentelemetry.io/otel/log` now accepts a newly introduced `EnabledParameters` type instead of `Record`. (#5791) +- `FilterProcessor.Enabled` in `go.opentelemetry.io/otel/sdk/log/internal/x` now accepts `EnabledParameters` instead of `Record`. (#5791) +- The `Record` type in `go.opentelemetry.io/otel/log` is no longer comparable. (#5847) +- Performance improvements for the trace SDK `SetAttributes` method in `Span`. (#5864) +- Reduce memory allocations for the `Event` and `Link` lists in `Span`. (#5858) +- Performance improvements for the trace SDK `AddEvent`, `AddLink`, `RecordError` and `End` methods in `Span`. (#5874) + +### Deprecated + +- Deprecate all examples under `go.opentelemetry.io/otel/example` as they are moved to [Contrib repository](https://github.com/open-telemetry/opentelemetry-go-contrib/tree/main/examples). (#5854) + +### Fixed + +- The race condition for multiple `FixedSize` exemplar reservoirs identified in #5814 is resolved. (#5819) +- Fix log records duplication in case of heterogeneous resource attributes by correctly mapping each log record to it's resource and scope. (#5803) +- Fix timer channel drain to avoid hanging on Go 1.23. (#5868) +- Fix delegation for global meter providers, and panic when calling otel.SetMeterProvider. (#5827) +- Change the `reflect.TypeOf` to use a nil pointer to not allocate on the heap unless necessary. (#5827) + +## [1.30.0/0.52.0/0.6.0/0.0.9] 2024-09-09 + +### Added + +- Support `OTEL_EXPORTER_OTLP_LOGS_INSECURE` and `OTEL_EXPORTER_OTLP_INSECURE` environments in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc`. (#5739) +- The `WithResource` option for `NewMeterProvider` now merges the provided resources with the ones from environment variables. (#5773) +- The `WithResource` option for `NewLoggerProvider` now merges the provided resources with the ones from environment variables. (#5773) +- Add UTF-8 support to `go.opentelemetry.io/otel/exporters/prometheus`. (#5755) + +### Fixed + +- Fix memory leak in the global `MeterProvider` when identical instruments are repeatedly created. (#5754) +- Fix panic on instruments creation when setting meter provider. (#5758) +- Fix an issue where `SetMeterProvider` in `go.opentelemetry.io/otel` might miss the delegation for instruments and registries. (#5780) + +### Removed + +- Drop support for [Go 1.21]. (#5736, #5740, #5800) + ## [1.29.0/0.51.0/0.5.0] 2024-08-23 This release is the last to support [Go 1.21]. @@ -1895,7 +2070,7 @@ with major version 0. - Setting error status while recording error with Span from oteltest package. (#1729) - The concept of a remote and local Span stored in a context is unified to just the current Span. Because of this `"go.opentelemetry.io/otel/trace".RemoteSpanContextFromContext` is removed as it is no longer needed. - Instead, `"go.opentelemetry.io/otel/trace".SpanContextFromContex` can be used to return the current Span. + Instead, `"go.opentelemetry.io/otel/trace".SpanContextFromContext` can be used to return the current Span. If needed, that Span's `SpanContext.IsRemote()` can then be used to determine if it is remote or not. (#1731) - The `HasRemoteParent` field of the `"go.opentelemetry.io/otel/sdk/trace".SamplingParameters` is removed. This field is redundant to the information returned from the `Remote` method of the `SpanContext` held in the `ParentContext` field. (#1749) @@ -2469,7 +2644,7 @@ This release migrates the default OpenTelemetry SDK into its own Go module, deco - Prometheus exporter will not apply stale updates or forget inactive metrics. (#903) - Add test for api.standard `HTTPClientAttributesFromHTTPRequest`. (#905) - Bump github.com/golangci/golangci-lint from 1.27.0 to 1.28.1 in /tools. (#901, #913) -- Update otel-colector example to use the v0.5.0 collector. (#915) +- Update otel-collector example to use the v0.5.0 collector. (#915) - The `grpctrace` instrumentation uses a span name conforming to the OpenTelemetry semantic conventions (does not contain a leading slash (`/`)). (#922) - The `grpctrace` instrumentation includes an `rpc.method` attribute now set to the gRPC method name. (#900, #922) - The `grpctrace` instrumentation `rpc.service` attribute now contains the package name if one exists. @@ -3062,7 +3237,13 @@ It contains api and sdk for trace and meter. - CircleCI build CI manifest files. - CODEOWNERS file to track owners of this project. -[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.29.0...HEAD +[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.35.0...HEAD +[1.35.0/0.57.0/0.11.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.35.0 +[1.34.0/0.56.0/0.10.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.34.0 +[1.33.0/0.55.0/0.9.0/0.0.12]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.33.0 +[1.32.0/0.54.0/0.8.0/0.0.11]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.32.0 +[1.31.0/0.53.0/0.7.0/0.0.10]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.31.0 +[1.30.0/0.52.0/0.6.0/0.0.9]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.30.0 [1.29.0/0.51.0/0.5.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.29.0 [1.28.0/0.50.0/0.4.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.28.0 [1.27.0/0.49.0/0.3.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.27.0 @@ -3148,6 +3329,7 @@ It contains api and sdk for trace and meter. +[Go 1.24]: https://go.dev/doc/go1.24 [Go 1.23]: https://go.dev/doc/go1.23 [Go 1.22]: https://go.dev/doc/go1.22 [Go 1.21]: https://go.dev/doc/go1.21 diff --git a/vendor/go.opentelemetry.io/otel/CODEOWNERS b/vendor/go.opentelemetry.io/otel/CODEOWNERS index 5904bb70..945a07d2 100644 --- a/vendor/go.opentelemetry.io/otel/CODEOWNERS +++ b/vendor/go.opentelemetry.io/otel/CODEOWNERS @@ -12,6 +12,6 @@ # https://help.github.com/en/articles/about-code-owners # -* @MrAlias @XSAM @dashpole @MadVikingGod @pellared @hanyuancheung @dmathieu +* @MrAlias @XSAM @dashpole @pellared @dmathieu -CODEOWNERS @MrAlias @MadVikingGod @pellared @dashpole @XSAM @dmathieu +CODEOWNERS @MrAlias @pellared @dashpole @XSAM @dmathieu diff --git a/vendor/go.opentelemetry.io/otel/CONTRIBUTING.md b/vendor/go.opentelemetry.io/otel/CONTRIBUTING.md index b7402576..7b8af585 100644 --- a/vendor/go.opentelemetry.io/otel/CONTRIBUTING.md +++ b/vendor/go.opentelemetry.io/otel/CONTRIBUTING.md @@ -181,6 +181,18 @@ patterns in the spec. For a deeper discussion, see [this](https://github.com/open-telemetry/opentelemetry-specification/issues/165). +## Tests + +Each functionality should be covered by tests. + +Performance-critical functionality should also be covered by benchmarks. + +- Pull requests adding a performance-critical functionality +should have `go test -bench` output in their description. +- Pull requests changing a performance-critical functionality +should have [`benchstat`](https://pkg.go.dev/golang.org/x/perf/cmd/benchstat) +output in their description. + ## Documentation Each (non-internal, non-test) package must be documented using @@ -578,7 +590,10 @@ See also: The tests should never leak goroutines. Use the term `ConcurrentSafe` in the test name when it aims to verify the -absence of race conditions. +absence of race conditions. The top-level tests with this term will be run +many times in the `test-concurrent-safe` CI job to increase the chance of +catching concurrency issues. This does not apply to subtests when this term +is not in their root name. ### Internal packages @@ -626,13 +641,14 @@ should be canceled. ## Approvers and Maintainers -### Approvers +### Triagers + +- [Cheng-Zhen Yang](https://github.com/scorpionknifes), Independent -- [Chester Cheung](https://github.com/hanyuancheung), Tencent +### Approvers ### Maintainers -- [Aaron Clawson](https://github.com/MadVikingGod), LightStep - [Damien Mathieu](https://github.com/dmathieu), Elastic - [David Ashpole](https://github.com/dashpole), Google - [Robert Pająk](https://github.com/pellared), Splunk @@ -641,11 +657,13 @@ should be canceled. ### Emeritus -- [Liz Fong-Jones](https://github.com/lizthegrey), Honeycomb -- [Gustavo Silva Paiva](https://github.com/paivagustavo), LightStep -- [Josh MacDonald](https://github.com/jmacd), LightStep -- [Anthony Mirabella](https://github.com/Aneurysm9), AWS -- [Evan Torrie](https://github.com/evantorrie), Yahoo +- [Aaron Clawson](https://github.com/MadVikingGod) +- [Anthony Mirabella](https://github.com/Aneurysm9) +- [Chester Cheung](https://github.com/hanyuancheung) +- [Evan Torrie](https://github.com/evantorrie) +- [Gustavo Silva Paiva](https://github.com/paivagustavo) +- [Josh MacDonald](https://github.com/jmacd) +- [Liz Fong-Jones](https://github.com/lizthegrey) ### Become an Approver or a Maintainer diff --git a/vendor/go.opentelemetry.io/otel/Makefile b/vendor/go.opentelemetry.io/otel/Makefile index 070b1e57..226410d7 100644 --- a/vendor/go.opentelemetry.io/otel/Makefile +++ b/vendor/go.opentelemetry.io/otel/Makefile @@ -11,11 +11,15 @@ ALL_COVERAGE_MOD_DIRS := $(shell find . -type f -name 'go.mod' -exec dirname {} GO = go TIMEOUT = 60 +# User to run as in docker images. +DOCKER_USER=$(shell id -u):$(shell id -g) +DEPENDENCIES_DOCKERFILE=./dependencies.Dockerfile + .DEFAULT_GOAL := precommit .PHONY: precommit ci -precommit: generate license-check misspell go-mod-tidy golangci-lint-fix verify-readmes verify-mods test-default -ci: generate license-check lint vanity-import-check verify-readmes verify-mods build test-default check-clean-work-tree test-coverage +precommit: generate toolchain-check license-check misspell go-mod-tidy golangci-lint-fix verify-readmes verify-mods test-default +ci: generate toolchain-check license-check lint vanity-import-check verify-readmes verify-mods build test-default check-clean-work-tree test-coverage # Tools @@ -54,9 +58,6 @@ $(TOOLS)/stringer: PACKAGE=golang.org/x/tools/cmd/stringer PORTO = $(TOOLS)/porto $(TOOLS)/porto: PACKAGE=github.com/jcchavezs/porto/cmd/porto -GOJQ = $(TOOLS)/gojq -$(TOOLS)/gojq: PACKAGE=github.com/itchyny/gojq/cmd/gojq - GOTMPL = $(TOOLS)/gotmpl $(GOTMPL): PACKAGE=go.opentelemetry.io/build-tools/gotmpl @@ -67,7 +68,7 @@ GOVULNCHECK = $(TOOLS)/govulncheck $(TOOLS)/govulncheck: PACKAGE=golang.org/x/vuln/cmd/govulncheck .PHONY: tools -tools: $(CROSSLINK) $(GOLANGCI_LINT) $(MISSPELL) $(GOCOVMERGE) $(STRINGER) $(PORTO) $(GOJQ) $(SEMCONVGEN) $(MULTIMOD) $(SEMCONVKIT) $(GOTMPL) $(GORELEASE) +tools: $(CROSSLINK) $(GOLANGCI_LINT) $(MISSPELL) $(GOCOVMERGE) $(STRINGER) $(PORTO) $(SEMCONVGEN) $(MULTIMOD) $(SEMCONVKIT) $(GOTMPL) $(GORELEASE) # Virtualized python tools via docker @@ -84,20 +85,20 @@ PIP := $(PYTOOLS)/pip WORKDIR := /workdir # The python image to use for the virtual environment. -PYTHONIMAGE := python:3.11.3-slim-bullseye +PYTHONIMAGE := $(shell awk '$$4=="python" {print $$2}' $(DEPENDENCIES_DOCKERFILE)) # Run the python image with the current directory mounted. -DOCKERPY := docker run --rm -v "$(CURDIR):$(WORKDIR)" -w $(WORKDIR) $(PYTHONIMAGE) +DOCKERPY := docker run --rm -u $(DOCKER_USER) -v "$(CURDIR):$(WORKDIR)" -w $(WORKDIR) $(PYTHONIMAGE) # Create a virtual environment for Python tools. $(PYTOOLS): # The `--upgrade` flag is needed to ensure that the virtual environment is # created with the latest pip version. - @$(DOCKERPY) bash -c "python3 -m venv $(VENVDIR) && $(PIP) install --upgrade pip" + @$(DOCKERPY) bash -c "python3 -m venv $(VENVDIR) && $(PIP) install --upgrade --cache-dir=$(WORKDIR)/.cache/pip pip" # Install python packages into the virtual environment. $(PYTOOLS)/%: $(PYTOOLS) - @$(DOCKERPY) $(PIP) install -r requirements.txt + @$(DOCKERPY) $(PIP) install --cache-dir=$(WORKDIR)/.cache/pip -r requirements.txt CODESPELL = $(PYTOOLS)/codespell $(CODESPELL): PACKAGE=codespell @@ -122,7 +123,7 @@ vanity-import-fix: $(PORTO) # Generate go.work file for local development. .PHONY: go-work go-work: $(CROSSLINK) - $(CROSSLINK) work --root=$(shell pwd) + $(CROSSLINK) work --root=$(shell pwd) --go=1.22.7 # Build @@ -145,12 +146,14 @@ build-tests/%: # Tests -TEST_TARGETS := test-default test-bench test-short test-verbose test-race +TEST_TARGETS := test-default test-bench test-short test-verbose test-race test-concurrent-safe .PHONY: $(TEST_TARGETS) test test-default test-race: ARGS=-race test-bench: ARGS=-run=xxxxxMatchNothingxxxxx -test.benchtime=1ms -bench=. test-short: ARGS=-short test-verbose: ARGS=-v -race +test-concurrent-safe: ARGS=-run=ConcurrentSafe -count=100 -race +test-concurrent-safe: TIMEOUT=120 $(TEST_TARGETS): test test: $(OTEL_GO_MOD_DIRS:%=test/%) test/%: DIR=$* @@ -236,6 +239,16 @@ govulncheck/%: $(GOVULNCHECK) codespell: $(CODESPELL) @$(DOCKERPY) $(CODESPELL) +.PHONY: toolchain-check +toolchain-check: + @toolchainRes=$$(for f in $(ALL_GO_MOD_DIRS); do \ + awk '/^toolchain/ { found=1; next } END { if (found) print FILENAME }' $$f/go.mod; \ + done); \ + if [ -n "$${toolchainRes}" ]; then \ + echo "toolchain checking failed:"; echo "$${toolchainRes}"; \ + exit 1; \ + fi + .PHONY: license-check license-check: @licRes=$$(for f in $$(find . -type f \( -iname '*.go' -o -iname '*.sh' \) ! -path '**/third_party/*' ! -path './.git/*' ) ; do \ @@ -256,13 +269,30 @@ check-clean-work-tree: exit 1; \ fi +# The weaver docker image to use for semconv-generate. +WEAVER_IMAGE := $(shell awk '$$4=="weaver" {print $$2}' $(DEPENDENCIES_DOCKERFILE)) + SEMCONVPKG ?= "semconv/" .PHONY: semconv-generate -semconv-generate: $(SEMCONVGEN) $(SEMCONVKIT) +semconv-generate: $(SEMCONVKIT) [ "$(TAG)" ] || ( echo "TAG unset: missing opentelemetry semantic-conventions tag"; exit 1 ) - [ "$(OTEL_SEMCONV_REPO)" ] || ( echo "OTEL_SEMCONV_REPO unset: missing path to opentelemetry semantic-conventions repo"; exit 1 ) - $(SEMCONVGEN) -i "$(OTEL_SEMCONV_REPO)/model/." --only=attribute_group -p conventionType=trace -f attribute_group.go -t "$(SEMCONVPKG)/template.j2" -s "$(TAG)" - $(SEMCONVGEN) -i "$(OTEL_SEMCONV_REPO)/model/." --only=metric -f metric.go -t "$(SEMCONVPKG)/metric_template.j2" -s "$(TAG)" + # Ensure the target directory for source code is available. + mkdir -p $(PWD)/$(SEMCONVPKG)/${TAG} + # Note: We mount a home directory for downloading/storing the semconv repository. + # Weaver will automatically clean the cache when finished, but the directories will remain. + mkdir -p ~/.weaver + docker run --rm \ + -u $(DOCKER_USER) \ + --env HOME=/tmp/weaver \ + --mount 'type=bind,source=$(PWD)/semconv,target=/home/weaver/templates/registry/go,readonly' \ + --mount 'type=bind,source=$(PWD)/semconv/${TAG},target=/home/weaver/target' \ + --mount 'type=bind,source=$(HOME)/.weaver,target=/tmp/weaver/.weaver' \ + $(WEAVER_IMAGE) registry generate \ + --registry=https://github.com/open-telemetry/semantic-conventions/archive/refs/tags/$(TAG).zip[model] \ + --templates=/home/weaver/templates \ + --param tag=$(TAG) \ + go \ + /home/weaver/target $(SEMCONVKIT) -output "$(SEMCONVPKG)/$(TAG)" -tag "$(TAG)" .PHONY: gorelease diff --git a/vendor/go.opentelemetry.io/otel/README.md b/vendor/go.opentelemetry.io/otel/README.md index 657df347..8421cd7e 100644 --- a/vendor/go.opentelemetry.io/otel/README.md +++ b/vendor/go.opentelemetry.io/otel/README.md @@ -1,9 +1,11 @@ # OpenTelemetry-Go -[![CI](https://github.com/open-telemetry/opentelemetry-go/workflows/ci/badge.svg)](https://github.com/open-telemetry/opentelemetry-go/actions?query=workflow%3Aci+branch%3Amain) +[![ci](https://github.com/open-telemetry/opentelemetry-go/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/open-telemetry/opentelemetry-go/actions/workflows/ci.yml) [![codecov.io](https://codecov.io/gh/open-telemetry/opentelemetry-go/coverage.svg?branch=main)](https://app.codecov.io/gh/open-telemetry/opentelemetry-go?branch=main) [![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel)](https://pkg.go.dev/go.opentelemetry.io/otel) [![Go Report Card](https://goreportcard.com/badge/go.opentelemetry.io/otel)](https://goreportcard.com/report/go.opentelemetry.io/otel) +[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/open-telemetry/opentelemetry-go/badge)](https://scorecard.dev/viewer/?uri=github.com/open-telemetry/opentelemetry-go) +[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/9996/badge)](https://www.bestpractices.dev/projects/9996) [![Slack](https://img.shields.io/badge/slack-@cncf/otel--go-brightgreen.svg?logo=slack)](https://cloud-native.slack.com/archives/C01NPAXACKT) OpenTelemetry-Go is the [Go](https://golang.org/) implementation of [OpenTelemetry](https://opentelemetry.io/). @@ -49,27 +51,27 @@ Currently, this project supports the following environments. | OS | Go Version | Architecture | |----------|------------|--------------| +| Ubuntu | 1.24 | amd64 | | Ubuntu | 1.23 | amd64 | | Ubuntu | 1.22 | amd64 | -| Ubuntu | 1.21 | amd64 | +| Ubuntu | 1.24 | 386 | | Ubuntu | 1.23 | 386 | | Ubuntu | 1.22 | 386 | -| Ubuntu | 1.21 | 386 | -| Linux | 1.23 | arm64 | -| Linux | 1.22 | arm64 | -| Linux | 1.21 | arm64 | +| Ubuntu | 1.24 | arm64 | +| Ubuntu | 1.23 | arm64 | +| Ubuntu | 1.22 | arm64 | +| macOS 13 | 1.24 | amd64 | | macOS 13 | 1.23 | amd64 | | macOS 13 | 1.22 | amd64 | -| macOS 13 | 1.21 | amd64 | +| macOS | 1.24 | arm64 | | macOS | 1.23 | arm64 | | macOS | 1.22 | arm64 | -| macOS | 1.21 | arm64 | +| Windows | 1.24 | amd64 | | Windows | 1.23 | amd64 | | Windows | 1.22 | amd64 | -| Windows | 1.21 | amd64 | +| Windows | 1.24 | 386 | | Windows | 1.23 | 386 | | Windows | 1.22 | 386 | -| Windows | 1.21 | 386 | While this project should work for other systems, no compatibility guarantees are made for those systems currently. @@ -96,8 +98,8 @@ If you need to extend the telemetry an instrumentation library provides or want to build your own instrumentation for your application directly you will need to use the [Go otel](https://pkg.go.dev/go.opentelemetry.io/otel) -package. The included [examples](./example/) are a good way to see some -practical uses of this process. +package. The [examples](https://github.com/open-telemetry/opentelemetry-go-contrib/tree/main/examples) +are a good way to see some practical uses of this process. ### Export diff --git a/vendor/go.opentelemetry.io/otel/RELEASING.md b/vendor/go.opentelemetry.io/otel/RELEASING.md index 59992984..1e13ae54 100644 --- a/vendor/go.opentelemetry.io/otel/RELEASING.md +++ b/vendor/go.opentelemetry.io/otel/RELEASING.md @@ -5,17 +5,14 @@ New versions of the [OpenTelemetry Semantic Conventions] mean new versions of the `semconv` package need to be generated. The `semconv-generate` make target is used for this. -1. Checkout a local copy of the [OpenTelemetry Semantic Conventions] to the desired release tag. -2. Pull the latest `otel/semconvgen` image: `docker pull otel/semconvgen:latest` -3. Run the `make semconv-generate ...` target from this repository. +1. Set the `TAG` environment variable to the semantic convention tag you want to generate. +2. Run the `make semconv-generate ...` target from this repository. For example, ```sh -export TAG="v1.21.0" # Change to the release version you are generating. -export OTEL_SEMCONV_REPO="/absolute/path/to/opentelemetry/semantic-conventions" -docker pull otel/semconvgen:latest -make semconv-generate # Uses the exported TAG and OTEL_SEMCONV_REPO. +export TAG="v1.30.0" # Change to the release version you are generating. +make semconv-generate # Uses the exported TAG. ``` This should create a new sub-package of [`semconv`](./semconv). @@ -111,17 +108,6 @@ It is critical you make sure the version you push upstream is correct. Finally create a Release for the new `` on GitHub. The release body should include all the release notes from the Changelog for this release. -## Verify Examples - -After releasing verify that examples build outside of the repository. - -``` -./verify_examples.sh -``` - -The script copies examples into a different directory removes any `replace` declarations in `go.mod` and builds them. -This ensures they build with the published release, not the local copy. - ## Post-Release ### Contrib Repository @@ -141,6 +127,6 @@ Importantly, bump any package versions referenced to be the latest one you just Bump the dependencies in the following Go services: -- [`accountingservice`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/accountingservice) -- [`checkoutservice`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/checkoutservice) -- [`productcatalogservice`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/productcatalogservice) +- [`accounting`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/accounting) +- [`checkoutservice`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/checkout) +- [`productcatalogservice`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/product-catalog) diff --git a/vendor/go.opentelemetry.io/otel/VERSIONING.md b/vendor/go.opentelemetry.io/otel/VERSIONING.md index 412f1e36..b8cb605c 100644 --- a/vendor/go.opentelemetry.io/otel/VERSIONING.md +++ b/vendor/go.opentelemetry.io/otel/VERSIONING.md @@ -26,7 +26,7 @@ is designed so the following goals can be achieved. go.opentelemetry.io/otel/v2 v2.0.1`) and in the package import path (e.g., `import "go.opentelemetry.io/otel/v2/trace"`). This includes the paths used in `go get` commands (e.g., `go get - go.opentelemetry.io/otel/v2@v2.0.1`. Note there is both a `/v2` and a + go.opentelemetry.io/otel/v2@v2.0.1`). Note there is both a `/v2` and a `@v2.0.1` in that example. One way to think about it is that the module name now includes the `/v2`, so include `/v2` whenever you are using the module name). diff --git a/vendor/go.opentelemetry.io/otel/attribute/set.go b/vendor/go.opentelemetry.io/otel/attribute/set.go index bff9c7fd..6cbefcea 100644 --- a/vendor/go.opentelemetry.io/otel/attribute/set.go +++ b/vendor/go.opentelemetry.io/otel/attribute/set.go @@ -347,45 +347,25 @@ func computeDistinct(kvs []KeyValue) Distinct { func computeDistinctFixed(kvs []KeyValue) interface{} { switch len(kvs) { case 1: - ptr := new([1]KeyValue) - copy((*ptr)[:], kvs) - return *ptr + return [1]KeyValue(kvs) case 2: - ptr := new([2]KeyValue) - copy((*ptr)[:], kvs) - return *ptr + return [2]KeyValue(kvs) case 3: - ptr := new([3]KeyValue) - copy((*ptr)[:], kvs) - return *ptr + return [3]KeyValue(kvs) case 4: - ptr := new([4]KeyValue) - copy((*ptr)[:], kvs) - return *ptr + return [4]KeyValue(kvs) case 5: - ptr := new([5]KeyValue) - copy((*ptr)[:], kvs) - return *ptr + return [5]KeyValue(kvs) case 6: - ptr := new([6]KeyValue) - copy((*ptr)[:], kvs) - return *ptr + return [6]KeyValue(kvs) case 7: - ptr := new([7]KeyValue) - copy((*ptr)[:], kvs) - return *ptr + return [7]KeyValue(kvs) case 8: - ptr := new([8]KeyValue) - copy((*ptr)[:], kvs) - return *ptr + return [8]KeyValue(kvs) case 9: - ptr := new([9]KeyValue) - copy((*ptr)[:], kvs) - return *ptr + return [9]KeyValue(kvs) case 10: - ptr := new([10]KeyValue) - copy((*ptr)[:], kvs) - return *ptr + return [10]KeyValue(kvs) default: return nil } diff --git a/vendor/go.opentelemetry.io/otel/baggage/baggage.go b/vendor/go.opentelemetry.io/otel/baggage/baggage.go index b3569e95..0e1fe242 100644 --- a/vendor/go.opentelemetry.io/otel/baggage/baggage.go +++ b/vendor/go.opentelemetry.io/otel/baggage/baggage.go @@ -50,7 +50,7 @@ type Property struct { // component boundaries may impose their own restrictions on Property key. // For example, the W3C Baggage specification restricts the Property keys to strings that // satisfy the token definition from RFC7230, Section 3.2.6. -// For maximum compatibility, alpha-numeric value are strongly recommended to be used as Property key. +// For maximum compatibility, alphanumeric value are strongly recommended to be used as Property key. func NewKeyProperty(key string) (Property, error) { if !validateBaggageName(key) { return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidKey, key) @@ -90,7 +90,7 @@ func NewKeyValueProperty(key, value string) (Property, error) { // component boundaries may impose their own restrictions on Property key. // For example, the W3C Baggage specification restricts the Property keys to strings that // satisfy the token definition from RFC7230, Section 3.2.6. -// For maximum compatibility, alpha-numeric value are strongly recommended to be used as Property key. +// For maximum compatibility, alphanumeric value are strongly recommended to be used as Property key. func NewKeyValuePropertyRaw(key, value string) (Property, error) { if !validateBaggageName(key) { return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidKey, key) @@ -287,7 +287,7 @@ func NewMember(key, value string, props ...Property) (Member, error) { // component boundaries may impose their own restrictions on baggage key. // For example, the W3C Baggage specification restricts the baggage keys to strings that // satisfy the token definition from RFC7230, Section 3.2.6. -// For maximum compatibility, alpha-numeric value are strongly recommended to be used as baggage key. +// For maximum compatibility, alphanumeric value are strongly recommended to be used as baggage key. func NewMemberRaw(key, value string, props ...Property) (Member, error) { m := Member{ key: key, @@ -355,7 +355,7 @@ func parseMember(member string) (Member, error) { } // replaceInvalidUTF8Sequences replaces invalid UTF-8 sequences with '�'. -func replaceInvalidUTF8Sequences(cap int, unescapeVal string) string { +func replaceInvalidUTF8Sequences(c int, unescapeVal string) string { if utf8.ValidString(unescapeVal) { return unescapeVal } @@ -363,7 +363,7 @@ func replaceInvalidUTF8Sequences(cap int, unescapeVal string) string { // https://github.com/w3c/baggage/blob/8c215efbeebd3fa4b1aceb937a747e56444f22f3/baggage/HTTP_HEADER_FORMAT.md?plain=1#L69 var b strings.Builder - b.Grow(cap) + b.Grow(c) for i := 0; i < len(unescapeVal); { r, size := utf8.DecodeRuneInString(unescapeVal[i:]) if r == utf8.RuneError && size == 1 { diff --git a/vendor/go.opentelemetry.io/otel/codes/codes.go b/vendor/go.opentelemetry.io/otel/codes/codes.go index 2acbac35..49a35b12 100644 --- a/vendor/go.opentelemetry.io/otel/codes/codes.go +++ b/vendor/go.opentelemetry.io/otel/codes/codes.go @@ -5,6 +5,7 @@ package codes // import "go.opentelemetry.io/otel/codes" import ( "encoding/json" + "errors" "fmt" "strconv" ) @@ -63,7 +64,7 @@ func (c *Code) UnmarshalJSON(b []byte) error { return nil } if c == nil { - return fmt.Errorf("nil receiver passed to UnmarshalJSON") + return errors.New("nil receiver passed to UnmarshalJSON") } var x interface{} diff --git a/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile b/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile new file mode 100644 index 00000000..e4c4a753 --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile @@ -0,0 +1,3 @@ +# This is a renovate-friendly source of Docker images. +FROM python:3.13.2-slim-bullseye@sha256:31b581c8218e1f3c58672481b3b7dba8e898852866b408c6a984c22832523935 AS python +FROM otel/weaver:v0.13.2@sha256:ae7346b992e477f629ea327e0979e8a416a97f7956ab1f7e95ac1f44edf1a893 AS weaver diff --git a/vendor/go.opentelemetry.io/otel/internal/attribute/attribute.go b/vendor/go.opentelemetry.io/otel/internal/attribute/attribute.go index 822d8479..691d96c7 100644 --- a/vendor/go.opentelemetry.io/otel/internal/attribute/attribute.go +++ b/vendor/go.opentelemetry.io/otel/internal/attribute/attribute.go @@ -49,12 +49,11 @@ func AsBoolSlice(v interface{}) []bool { if rv.Type().Kind() != reflect.Array { return nil } - var zero bool - correctLen := rv.Len() - correctType := reflect.ArrayOf(correctLen, reflect.TypeOf(zero)) - cpy := reflect.New(correctType) - _ = reflect.Copy(cpy.Elem(), rv) - return cpy.Elem().Slice(0, correctLen).Interface().([]bool) + cpy := make([]bool, rv.Len()) + if len(cpy) > 0 { + _ = reflect.Copy(reflect.ValueOf(cpy), rv) + } + return cpy } // AsInt64Slice converts an int64 array into a slice into with same elements as array. @@ -63,12 +62,11 @@ func AsInt64Slice(v interface{}) []int64 { if rv.Type().Kind() != reflect.Array { return nil } - var zero int64 - correctLen := rv.Len() - correctType := reflect.ArrayOf(correctLen, reflect.TypeOf(zero)) - cpy := reflect.New(correctType) - _ = reflect.Copy(cpy.Elem(), rv) - return cpy.Elem().Slice(0, correctLen).Interface().([]int64) + cpy := make([]int64, rv.Len()) + if len(cpy) > 0 { + _ = reflect.Copy(reflect.ValueOf(cpy), rv) + } + return cpy } // AsFloat64Slice converts a float64 array into a slice into with same elements as array. @@ -77,12 +75,11 @@ func AsFloat64Slice(v interface{}) []float64 { if rv.Type().Kind() != reflect.Array { return nil } - var zero float64 - correctLen := rv.Len() - correctType := reflect.ArrayOf(correctLen, reflect.TypeOf(zero)) - cpy := reflect.New(correctType) - _ = reflect.Copy(cpy.Elem(), rv) - return cpy.Elem().Slice(0, correctLen).Interface().([]float64) + cpy := make([]float64, rv.Len()) + if len(cpy) > 0 { + _ = reflect.Copy(reflect.ValueOf(cpy), rv) + } + return cpy } // AsStringSlice converts a string array into a slice into with same elements as array. @@ -91,10 +88,9 @@ func AsStringSlice(v interface{}) []string { if rv.Type().Kind() != reflect.Array { return nil } - var zero string - correctLen := rv.Len() - correctType := reflect.ArrayOf(correctLen, reflect.TypeOf(zero)) - cpy := reflect.New(correctType) - _ = reflect.Copy(cpy.Elem(), rv) - return cpy.Elem().Slice(0, correctLen).Interface().([]string) + cpy := make([]string, rv.Len()) + if len(cpy) > 0 { + _ = reflect.Copy(reflect.ValueOf(cpy), rv) + } + return cpy } diff --git a/vendor/go.opentelemetry.io/otel/internal/global/instruments.go b/vendor/go.opentelemetry.io/otel/internal/global/instruments.go index 3a0cc42f..ae92a425 100644 --- a/vendor/go.opentelemetry.io/otel/internal/global/instruments.go +++ b/vendor/go.opentelemetry.io/otel/internal/global/instruments.go @@ -13,7 +13,7 @@ import ( // unwrapper unwraps to return the underlying instrument implementation. type unwrapper interface { - Unwrap() metric.Observable + unwrap() metric.Observable } type afCounter struct { @@ -40,7 +40,7 @@ func (i *afCounter) setDelegate(m metric.Meter) { i.delegate.Store(ctr) } -func (i *afCounter) Unwrap() metric.Observable { +func (i *afCounter) unwrap() metric.Observable { if ctr := i.delegate.Load(); ctr != nil { return ctr.(metric.Float64ObservableCounter) } @@ -71,7 +71,7 @@ func (i *afUpDownCounter) setDelegate(m metric.Meter) { i.delegate.Store(ctr) } -func (i *afUpDownCounter) Unwrap() metric.Observable { +func (i *afUpDownCounter) unwrap() metric.Observable { if ctr := i.delegate.Load(); ctr != nil { return ctr.(metric.Float64ObservableUpDownCounter) } @@ -102,7 +102,7 @@ func (i *afGauge) setDelegate(m metric.Meter) { i.delegate.Store(ctr) } -func (i *afGauge) Unwrap() metric.Observable { +func (i *afGauge) unwrap() metric.Observable { if ctr := i.delegate.Load(); ctr != nil { return ctr.(metric.Float64ObservableGauge) } @@ -133,7 +133,7 @@ func (i *aiCounter) setDelegate(m metric.Meter) { i.delegate.Store(ctr) } -func (i *aiCounter) Unwrap() metric.Observable { +func (i *aiCounter) unwrap() metric.Observable { if ctr := i.delegate.Load(); ctr != nil { return ctr.(metric.Int64ObservableCounter) } @@ -164,7 +164,7 @@ func (i *aiUpDownCounter) setDelegate(m metric.Meter) { i.delegate.Store(ctr) } -func (i *aiUpDownCounter) Unwrap() metric.Observable { +func (i *aiUpDownCounter) unwrap() metric.Observable { if ctr := i.delegate.Load(); ctr != nil { return ctr.(metric.Int64ObservableUpDownCounter) } @@ -195,7 +195,7 @@ func (i *aiGauge) setDelegate(m metric.Meter) { i.delegate.Store(ctr) } -func (i *aiGauge) Unwrap() metric.Observable { +func (i *aiGauge) unwrap() metric.Observable { if ctr := i.delegate.Load(); ctr != nil { return ctr.(metric.Int64ObservableGauge) } diff --git a/vendor/go.opentelemetry.io/otel/internal/global/meter.go b/vendor/go.opentelemetry.io/otel/internal/global/meter.go index cfd1df9b..a6acd8dc 100644 --- a/vendor/go.opentelemetry.io/otel/internal/global/meter.go +++ b/vendor/go.opentelemetry.io/otel/internal/global/meter.go @@ -5,8 +5,9 @@ package global // import "go.opentelemetry.io/otel/internal/global" import ( "container/list" + "context" + "reflect" "sync" - "sync/atomic" "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/metric/embedded" @@ -66,6 +67,7 @@ func (p *meterProvider) Meter(name string, opts ...metric.MeterOption) metric.Me name: name, version: c.InstrumentationVersion(), schema: c.SchemaURL(), + attrs: c.InstrumentationAttributes(), } if p.meters == nil { @@ -76,7 +78,7 @@ func (p *meterProvider) Meter(name string, opts ...metric.MeterOption) metric.Me return val } - t := &meter{name: name, opts: opts} + t := &meter{name: name, opts: opts, instruments: make(map[instID]delegatedInstrument)} p.meters[key] = t return t } @@ -92,17 +94,29 @@ type meter struct { opts []metric.MeterOption mtx sync.Mutex - instruments []delegatedInstrument + instruments map[instID]delegatedInstrument registry list.List - delegate atomic.Value // metric.Meter + delegate metric.Meter } type delegatedInstrument interface { setDelegate(metric.Meter) } +// instID are the identifying properties of a instrument. +type instID struct { + // name is the name of the stream. + name string + // description is the description of the stream. + description string + // kind defines the functional group of the instrument. + kind reflect.Type + // unit is the unit of the stream. + unit string +} + // setDelegate configures m to delegate all Meter functionality to Meters // created by provider. // @@ -110,12 +124,12 @@ type delegatedInstrument interface { // // It is guaranteed by the caller that this happens only once. func (m *meter) setDelegate(provider metric.MeterProvider) { - meter := provider.Meter(m.name, m.opts...) - m.delegate.Store(meter) - m.mtx.Lock() defer m.mtx.Unlock() + meter := provider.Meter(m.name, m.opts...) + m.delegate = meter + for _, inst := range m.instruments { inst.setDelegate(meter) } @@ -133,169 +147,336 @@ func (m *meter) setDelegate(provider metric.MeterProvider) { } func (m *meter) Int64Counter(name string, options ...metric.Int64CounterOption) (metric.Int64Counter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64Counter(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Int64Counter(name, options...) + } + + cfg := metric.NewInt64CounterConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf((*siCounter)(nil)), + description: cfg.Description(), + unit: cfg.Unit(), + } + if f, ok := m.instruments[id]; ok { + return f.(metric.Int64Counter), nil + } i := &siCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) + m.instruments[id] = i return i, nil } func (m *meter) Int64UpDownCounter(name string, options ...metric.Int64UpDownCounterOption) (metric.Int64UpDownCounter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64UpDownCounter(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Int64UpDownCounter(name, options...) + } + + cfg := metric.NewInt64UpDownCounterConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf((*siUpDownCounter)(nil)), + description: cfg.Description(), + unit: cfg.Unit(), + } + if f, ok := m.instruments[id]; ok { + return f.(metric.Int64UpDownCounter), nil + } i := &siUpDownCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) + m.instruments[id] = i return i, nil } func (m *meter) Int64Histogram(name string, options ...metric.Int64HistogramOption) (metric.Int64Histogram, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64Histogram(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Int64Histogram(name, options...) + } + + cfg := metric.NewInt64HistogramConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf((*siHistogram)(nil)), + description: cfg.Description(), + unit: cfg.Unit(), + } + if f, ok := m.instruments[id]; ok { + return f.(metric.Int64Histogram), nil + } i := &siHistogram{name: name, opts: options} - m.instruments = append(m.instruments, i) + m.instruments[id] = i return i, nil } func (m *meter) Int64Gauge(name string, options ...metric.Int64GaugeOption) (metric.Int64Gauge, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64Gauge(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Int64Gauge(name, options...) + } + + cfg := metric.NewInt64GaugeConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf((*siGauge)(nil)), + description: cfg.Description(), + unit: cfg.Unit(), + } + if f, ok := m.instruments[id]; ok { + return f.(metric.Int64Gauge), nil + } i := &siGauge{name: name, opts: options} - m.instruments = append(m.instruments, i) + m.instruments[id] = i return i, nil } func (m *meter) Int64ObservableCounter(name string, options ...metric.Int64ObservableCounterOption) (metric.Int64ObservableCounter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64ObservableCounter(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Int64ObservableCounter(name, options...) + } + + cfg := metric.NewInt64ObservableCounterConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf((*aiCounter)(nil)), + description: cfg.Description(), + unit: cfg.Unit(), + } + if f, ok := m.instruments[id]; ok { + return f.(metric.Int64ObservableCounter), nil + } i := &aiCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) + m.instruments[id] = i return i, nil } func (m *meter) Int64ObservableUpDownCounter(name string, options ...metric.Int64ObservableUpDownCounterOption) (metric.Int64ObservableUpDownCounter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64ObservableUpDownCounter(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Int64ObservableUpDownCounter(name, options...) + } + + cfg := metric.NewInt64ObservableUpDownCounterConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf((*aiUpDownCounter)(nil)), + description: cfg.Description(), + unit: cfg.Unit(), + } + if f, ok := m.instruments[id]; ok { + return f.(metric.Int64ObservableUpDownCounter), nil + } i := &aiUpDownCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) + m.instruments[id] = i return i, nil } func (m *meter) Int64ObservableGauge(name string, options ...metric.Int64ObservableGaugeOption) (metric.Int64ObservableGauge, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64ObservableGauge(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Int64ObservableGauge(name, options...) + } + + cfg := metric.NewInt64ObservableGaugeConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf((*aiGauge)(nil)), + description: cfg.Description(), + unit: cfg.Unit(), + } + if f, ok := m.instruments[id]; ok { + return f.(metric.Int64ObservableGauge), nil + } i := &aiGauge{name: name, opts: options} - m.instruments = append(m.instruments, i) + m.instruments[id] = i return i, nil } func (m *meter) Float64Counter(name string, options ...metric.Float64CounterOption) (metric.Float64Counter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64Counter(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Float64Counter(name, options...) + } + + cfg := metric.NewFloat64CounterConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf((*sfCounter)(nil)), + description: cfg.Description(), + unit: cfg.Unit(), + } + if f, ok := m.instruments[id]; ok { + return f.(metric.Float64Counter), nil + } i := &sfCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) + m.instruments[id] = i return i, nil } func (m *meter) Float64UpDownCounter(name string, options ...metric.Float64UpDownCounterOption) (metric.Float64UpDownCounter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64UpDownCounter(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Float64UpDownCounter(name, options...) + } + + cfg := metric.NewFloat64UpDownCounterConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf((*sfUpDownCounter)(nil)), + description: cfg.Description(), + unit: cfg.Unit(), + } + if f, ok := m.instruments[id]; ok { + return f.(metric.Float64UpDownCounter), nil + } i := &sfUpDownCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) + m.instruments[id] = i return i, nil } func (m *meter) Float64Histogram(name string, options ...metric.Float64HistogramOption) (metric.Float64Histogram, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64Histogram(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Float64Histogram(name, options...) + } + + cfg := metric.NewFloat64HistogramConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf((*sfHistogram)(nil)), + description: cfg.Description(), + unit: cfg.Unit(), + } + if f, ok := m.instruments[id]; ok { + return f.(metric.Float64Histogram), nil + } i := &sfHistogram{name: name, opts: options} - m.instruments = append(m.instruments, i) + m.instruments[id] = i return i, nil } func (m *meter) Float64Gauge(name string, options ...metric.Float64GaugeOption) (metric.Float64Gauge, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64Gauge(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Float64Gauge(name, options...) + } + + cfg := metric.NewFloat64GaugeConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf((*sfGauge)(nil)), + description: cfg.Description(), + unit: cfg.Unit(), + } + if f, ok := m.instruments[id]; ok { + return f.(metric.Float64Gauge), nil + } i := &sfGauge{name: name, opts: options} - m.instruments = append(m.instruments, i) + m.instruments[id] = i return i, nil } func (m *meter) Float64ObservableCounter(name string, options ...metric.Float64ObservableCounterOption) (metric.Float64ObservableCounter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64ObservableCounter(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Float64ObservableCounter(name, options...) + } + + cfg := metric.NewFloat64ObservableCounterConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf((*afCounter)(nil)), + description: cfg.Description(), + unit: cfg.Unit(), + } + if f, ok := m.instruments[id]; ok { + return f.(metric.Float64ObservableCounter), nil + } i := &afCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) + m.instruments[id] = i return i, nil } func (m *meter) Float64ObservableUpDownCounter(name string, options ...metric.Float64ObservableUpDownCounterOption) (metric.Float64ObservableUpDownCounter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64ObservableUpDownCounter(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Float64ObservableUpDownCounter(name, options...) + } + + cfg := metric.NewFloat64ObservableUpDownCounterConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf((*afUpDownCounter)(nil)), + description: cfg.Description(), + unit: cfg.Unit(), + } + if f, ok := m.instruments[id]; ok { + return f.(metric.Float64ObservableUpDownCounter), nil + } i := &afUpDownCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) + m.instruments[id] = i return i, nil } func (m *meter) Float64ObservableGauge(name string, options ...metric.Float64ObservableGaugeOption) (metric.Float64ObservableGauge, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64ObservableGauge(name, options...) - } m.mtx.Lock() defer m.mtx.Unlock() + + if m.delegate != nil { + return m.delegate.Float64ObservableGauge(name, options...) + } + + cfg := metric.NewFloat64ObservableGaugeConfig(options...) + id := instID{ + name: name, + kind: reflect.TypeOf((*afGauge)(nil)), + description: cfg.Description(), + unit: cfg.Unit(), + } + if f, ok := m.instruments[id]; ok { + return f.(metric.Float64ObservableGauge), nil + } i := &afGauge{name: name, opts: options} - m.instruments = append(m.instruments, i) + m.instruments[id] = i return i, nil } // RegisterCallback captures the function that will be called during Collect. func (m *meter) RegisterCallback(f metric.Callback, insts ...metric.Observable) (metric.Registration, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - insts = unwrapInstruments(insts) - return del.RegisterCallback(f, insts...) - } - m.mtx.Lock() defer m.mtx.Unlock() + if m.delegate != nil { + return m.delegate.RegisterCallback(unwrapCallback(f), unwrapInstruments(insts)...) + } + reg := ®istration{instruments: insts, function: f} e := m.registry.PushBack(reg) reg.unreg = func() error { @@ -307,15 +488,11 @@ func (m *meter) RegisterCallback(f metric.Callback, insts ...metric.Observable) return reg, nil } -type wrapped interface { - unwrap() metric.Observable -} - func unwrapInstruments(instruments []metric.Observable) []metric.Observable { out := make([]metric.Observable, 0, len(instruments)) for _, inst := range instruments { - if in, ok := inst.(wrapped); ok { + if in, ok := inst.(unwrapper); ok { out = append(out, in.unwrap()) } else { out = append(out, inst) @@ -335,9 +512,61 @@ type registration struct { unregMu sync.Mutex } -func (c *registration) setDelegate(m metric.Meter) { - insts := unwrapInstruments(c.instruments) +type unwrapObs struct { + embedded.Observer + obs metric.Observer +} +// unwrapFloat64Observable returns an expected metric.Float64Observable after +// unwrapping the global object. +func unwrapFloat64Observable(inst metric.Float64Observable) metric.Float64Observable { + if unwrapped, ok := inst.(unwrapper); ok { + if floatObs, ok := unwrapped.unwrap().(metric.Float64Observable); ok { + // Note: if the unwrapped object does not + // unwrap as an observable for either of the + // predicates here, it means an internal bug in + // this package. We avoid logging an error in + // this case, because the SDK has to try its + // own type conversion on the object. The SDK + // will see this and be forced to respond with + // its own error. + // + // This code uses a double-nested if statement + // to avoid creating a branch that is + // impossible to cover. + inst = floatObs + } + } + return inst +} + +// unwrapInt64Observable returns an expected metric.Int64Observable after +// unwrapping the global object. +func unwrapInt64Observable(inst metric.Int64Observable) metric.Int64Observable { + if unwrapped, ok := inst.(unwrapper); ok { + if unint, ok := unwrapped.unwrap().(metric.Int64Observable); ok { + // See the comment in unwrapFloat64Observable(). + inst = unint + } + } + return inst +} + +func (uo *unwrapObs) ObserveFloat64(inst metric.Float64Observable, value float64, opts ...metric.ObserveOption) { + uo.obs.ObserveFloat64(unwrapFloat64Observable(inst), value, opts...) +} + +func (uo *unwrapObs) ObserveInt64(inst metric.Int64Observable, value int64, opts ...metric.ObserveOption) { + uo.obs.ObserveInt64(unwrapInt64Observable(inst), value, opts...) +} + +func unwrapCallback(f metric.Callback) metric.Callback { + return func(ctx context.Context, obs metric.Observer) error { + return f(ctx, &unwrapObs{obs: obs}) + } +} + +func (c *registration) setDelegate(m metric.Meter) { c.unregMu.Lock() defer c.unregMu.Unlock() @@ -346,9 +575,10 @@ func (c *registration) setDelegate(m metric.Meter) { return } - reg, err := m.RegisterCallback(c.function, insts...) + reg, err := m.RegisterCallback(unwrapCallback(c.function), unwrapInstruments(c.instruments)...) if err != nil { GetErrorHandler().Handle(err) + return } c.unreg = reg.Unregister diff --git a/vendor/go.opentelemetry.io/otel/internal/global/trace.go b/vendor/go.opentelemetry.io/otel/internal/global/trace.go index e31f442b..8982aa0d 100644 --- a/vendor/go.opentelemetry.io/otel/internal/global/trace.go +++ b/vendor/go.opentelemetry.io/otel/internal/global/trace.go @@ -25,6 +25,7 @@ import ( "sync" "sync/atomic" + "go.opentelemetry.io/auto/sdk" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/trace" @@ -87,6 +88,7 @@ func (p *tracerProvider) Tracer(name string, opts ...trace.TracerOption) trace.T name: name, version: c.InstrumentationVersion(), schema: c.SchemaURL(), + attrs: c.InstrumentationAttributes(), } if p.tracers == nil { @@ -102,7 +104,12 @@ func (p *tracerProvider) Tracer(name string, opts ...trace.TracerOption) trace.T return t } -type il struct{ name, version, schema string } +type il struct { + name string + version string + schema string + attrs attribute.Set +} // tracer is a placeholder for a trace.Tracer. // @@ -139,6 +146,30 @@ func (t *tracer) Start(ctx context.Context, name string, opts ...trace.SpanStart return delegate.(trace.Tracer).Start(ctx, name, opts...) } + return t.newSpan(ctx, autoInstEnabled, name, opts) +} + +// autoInstEnabled determines if the auto-instrumentation SDK span is returned +// from the tracer when not backed by a delegate and auto-instrumentation has +// attached to this process. +// +// The auto-instrumentation is expected to overwrite this value to true when it +// attaches. By default, this will point to false and mean a tracer will return +// a nonRecordingSpan by default. +var autoInstEnabled = new(bool) + +func (t *tracer) newSpan(ctx context.Context, autoSpan *bool, name string, opts []trace.SpanStartOption) (context.Context, trace.Span) { + // autoInstEnabled is passed to newSpan via the autoSpan parameter. This is + // so the auto-instrumentation can define a uprobe for (*t).newSpan and be + // provided with the address of the bool autoInstEnabled points to. It + // needs to be a parameter so that pointer can be reliably determined, it + // should not be read from the global. + + if *autoSpan { + tracer := sdk.TracerProvider().Tracer(t.name, t.opts...) + return tracer.Start(ctx, name, opts...) + } + s := nonRecordingSpan{sc: trace.SpanContextFromContext(ctx), tracer: t} ctx = trace.ContextWithSpan(ctx, s) return ctx, s diff --git a/vendor/go.opentelemetry.io/otel/internal/rawhelpers.go b/vendor/go.opentelemetry.io/otel/internal/rawhelpers.go index 9b1da2c0..b2fe3e41 100644 --- a/vendor/go.opentelemetry.io/otel/internal/rawhelpers.go +++ b/vendor/go.opentelemetry.io/otel/internal/rawhelpers.go @@ -20,7 +20,8 @@ func RawToBool(r uint64) bool { } func Int64ToRaw(i int64) uint64 { - return uint64(i) + // Assumes original was a valid int64 (overflow not checked). + return uint64(i) // nolint: gosec } func RawToInt64(r uint64) int64 { diff --git a/vendor/go.opentelemetry.io/otel/metric/asyncfloat64.go b/vendor/go.opentelemetry.io/otel/metric/asyncfloat64.go index cf23db77..f8435d8f 100644 --- a/vendor/go.opentelemetry.io/otel/metric/asyncfloat64.go +++ b/vendor/go.opentelemetry.io/otel/metric/asyncfloat64.go @@ -213,7 +213,7 @@ type Float64Observer interface { } // Float64Callback is a function registered with a Meter that makes -// observations for a Float64Observerable instrument it is registered with. +// observations for a Float64Observable instrument it is registered with. // Calls to the Float64Observer record measurement values for the // Float64Observable. // diff --git a/vendor/go.opentelemetry.io/otel/metric/asyncint64.go b/vendor/go.opentelemetry.io/otel/metric/asyncint64.go index c82ba532..e079aaef 100644 --- a/vendor/go.opentelemetry.io/otel/metric/asyncint64.go +++ b/vendor/go.opentelemetry.io/otel/metric/asyncint64.go @@ -212,7 +212,7 @@ type Int64Observer interface { } // Int64Callback is a function registered with a Meter that makes observations -// for an Int64Observerable instrument it is registered with. Calls to the +// for an Int64Observable instrument it is registered with. Calls to the // Int64Observer record measurement values for the Int64Observable. // // The function needs to complete in a finite amount of time and the deadline diff --git a/vendor/go.opentelemetry.io/otel/metric/instrument.go b/vendor/go.opentelemetry.io/otel/metric/instrument.go index ea52e402..a535782e 100644 --- a/vendor/go.opentelemetry.io/otel/metric/instrument.go +++ b/vendor/go.opentelemetry.io/otel/metric/instrument.go @@ -351,7 +351,7 @@ func WithAttributeSet(attributes attribute.Set) MeasurementOption { // // cp := make([]attribute.KeyValue, len(attributes)) // copy(cp, attributes) -// WithAttributes(attribute.NewSet(cp...)) +// WithAttributeSet(attribute.NewSet(cp...)) // // [attribute.NewSet] may modify the passed attributes so this will make a copy // of attributes before creating a set in order to ensure this function is diff --git a/vendor/go.opentelemetry.io/otel/renovate.json b/vendor/go.opentelemetry.io/otel/renovate.json index 8c5ac55c..a6fa353f 100644 --- a/vendor/go.opentelemetry.io/otel/renovate.json +++ b/vendor/go.opentelemetry.io/otel/renovate.json @@ -1,7 +1,7 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": [ - "config:recommended" + "config:best-practices" ], "ignorePaths": [], "labels": ["Skip Changelog", "dependencies"], @@ -15,10 +15,16 @@ "enabled": true }, { - "matchFileNames": ["internal/tools/**"], - "matchManagers": ["gomod"], - "matchDepTypes": ["indirect"], - "enabled": false + "matchPackageNames": ["go.opentelemetry.io/build-tools/**"], + "groupName": "build-tools" + }, + { + "matchPackageNames": ["google.golang.org/genproto/googleapis/**"], + "groupName": "googleapis" + }, + { + "matchPackageNames": ["golang.org/x/**"], + "groupName": "golang.org/x" } ] } diff --git a/vendor/go.opentelemetry.io/otel/requirements.txt b/vendor/go.opentelemetry.io/otel/requirements.txt index ab09daf9..1bb55fb1 100644 --- a/vendor/go.opentelemetry.io/otel/requirements.txt +++ b/vendor/go.opentelemetry.io/otel/requirements.txt @@ -1 +1 @@ -codespell==2.3.0 +codespell==2.4.1 diff --git a/vendor/go.opentelemetry.io/otel/trace/auto.go b/vendor/go.opentelemetry.io/otel/trace/auto.go new file mode 100644 index 00000000..7e291002 --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/trace/auto.go @@ -0,0 +1,661 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package trace // import "go.opentelemetry.io/otel/trace" + +import ( + "context" + "encoding/json" + "fmt" + "math" + "os" + "reflect" + "runtime" + "strconv" + "strings" + "sync" + "sync/atomic" + "time" + "unicode/utf8" + + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/codes" + semconv "go.opentelemetry.io/otel/semconv/v1.26.0" + "go.opentelemetry.io/otel/trace/embedded" + "go.opentelemetry.io/otel/trace/internal/telemetry" +) + +// newAutoTracerProvider returns an auto-instrumentable [trace.TracerProvider]. +// If an [go.opentelemetry.io/auto.Instrumentation] is configured to instrument +// the process using the returned TracerProvider, all of the telemetry it +// produces will be processed and handled by that Instrumentation. By default, +// if no Instrumentation instruments the TracerProvider it will not generate +// any trace telemetry. +func newAutoTracerProvider() TracerProvider { return tracerProviderInstance } + +var tracerProviderInstance = new(autoTracerProvider) + +type autoTracerProvider struct{ embedded.TracerProvider } + +var _ TracerProvider = autoTracerProvider{} + +func (p autoTracerProvider) Tracer(name string, opts ...TracerOption) Tracer { + cfg := NewTracerConfig(opts...) + return autoTracer{ + name: name, + version: cfg.InstrumentationVersion(), + schemaURL: cfg.SchemaURL(), + } +} + +type autoTracer struct { + embedded.Tracer + + name, schemaURL, version string +} + +var _ Tracer = autoTracer{} + +func (t autoTracer) Start(ctx context.Context, name string, opts ...SpanStartOption) (context.Context, Span) { + var psc SpanContext + sampled := true + span := new(autoSpan) + + // Ask eBPF for sampling decision and span context info. + t.start(ctx, span, &psc, &sampled, &span.spanContext) + + span.sampled.Store(sampled) + + ctx = ContextWithSpan(ctx, span) + + if sampled { + // Only build traces if sampled. + cfg := NewSpanStartConfig(opts...) + span.traces, span.span = t.traces(name, cfg, span.spanContext, psc) + } + + return ctx, span +} + +// Expected to be implemented in eBPF. +// +//go:noinline +func (t *autoTracer) start( + ctx context.Context, + spanPtr *autoSpan, + psc *SpanContext, + sampled *bool, + sc *SpanContext, +) { + start(ctx, spanPtr, psc, sampled, sc) +} + +// start is used for testing. +var start = func(context.Context, *autoSpan, *SpanContext, *bool, *SpanContext) {} + +func (t autoTracer) traces(name string, cfg SpanConfig, sc, psc SpanContext) (*telemetry.Traces, *telemetry.Span) { + span := &telemetry.Span{ + TraceID: telemetry.TraceID(sc.TraceID()), + SpanID: telemetry.SpanID(sc.SpanID()), + Flags: uint32(sc.TraceFlags()), + TraceState: sc.TraceState().String(), + ParentSpanID: telemetry.SpanID(psc.SpanID()), + Name: name, + Kind: spanKind(cfg.SpanKind()), + } + + span.Attrs, span.DroppedAttrs = convCappedAttrs(maxSpan.Attrs, cfg.Attributes()) + + links := cfg.Links() + if limit := maxSpan.Links; limit == 0 { + n := int64(len(links)) + if n > 0 { + span.DroppedLinks = uint32(min(n, math.MaxUint32)) // nolint: gosec // Bounds checked. + } + } else { + if limit > 0 { + n := int64(max(len(links)-limit, 0)) + span.DroppedLinks = uint32(min(n, math.MaxUint32)) // nolint: gosec // Bounds checked. + links = links[n:] + } + span.Links = convLinks(links) + } + + if t := cfg.Timestamp(); !t.IsZero() { + span.StartTime = cfg.Timestamp() + } else { + span.StartTime = time.Now() + } + + return &telemetry.Traces{ + ResourceSpans: []*telemetry.ResourceSpans{ + { + ScopeSpans: []*telemetry.ScopeSpans{ + { + Scope: &telemetry.Scope{ + Name: t.name, + Version: t.version, + }, + Spans: []*telemetry.Span{span}, + SchemaURL: t.schemaURL, + }, + }, + }, + }, + }, span +} + +func spanKind(kind SpanKind) telemetry.SpanKind { + switch kind { + case SpanKindInternal: + return telemetry.SpanKindInternal + case SpanKindServer: + return telemetry.SpanKindServer + case SpanKindClient: + return telemetry.SpanKindClient + case SpanKindProducer: + return telemetry.SpanKindProducer + case SpanKindConsumer: + return telemetry.SpanKindConsumer + } + return telemetry.SpanKind(0) // undefined. +} + +type autoSpan struct { + embedded.Span + + spanContext SpanContext + sampled atomic.Bool + + mu sync.Mutex + traces *telemetry.Traces + span *telemetry.Span +} + +func (s *autoSpan) SpanContext() SpanContext { + if s == nil { + return SpanContext{} + } + // s.spanContext is immutable, do not acquire lock s.mu. + return s.spanContext +} + +func (s *autoSpan) IsRecording() bool { + if s == nil { + return false + } + + return s.sampled.Load() +} + +func (s *autoSpan) SetStatus(c codes.Code, msg string) { + if s == nil || !s.sampled.Load() { + return + } + + s.mu.Lock() + defer s.mu.Unlock() + + if s.span.Status == nil { + s.span.Status = new(telemetry.Status) + } + + s.span.Status.Message = msg + + switch c { + case codes.Unset: + s.span.Status.Code = telemetry.StatusCodeUnset + case codes.Error: + s.span.Status.Code = telemetry.StatusCodeError + case codes.Ok: + s.span.Status.Code = telemetry.StatusCodeOK + } +} + +func (s *autoSpan) SetAttributes(attrs ...attribute.KeyValue) { + if s == nil || !s.sampled.Load() { + return + } + + s.mu.Lock() + defer s.mu.Unlock() + + limit := maxSpan.Attrs + if limit == 0 { + // No attributes allowed. + n := int64(len(attrs)) + if n > 0 { + s.span.DroppedAttrs += uint32(min(n, math.MaxUint32)) // nolint: gosec // Bounds checked. + } + return + } + + m := make(map[string]int) + for i, a := range s.span.Attrs { + m[a.Key] = i + } + + for _, a := range attrs { + val := convAttrValue(a.Value) + if val.Empty() { + s.span.DroppedAttrs++ + continue + } + + if idx, ok := m[string(a.Key)]; ok { + s.span.Attrs[idx] = telemetry.Attr{ + Key: string(a.Key), + Value: val, + } + } else if limit < 0 || len(s.span.Attrs) < limit { + s.span.Attrs = append(s.span.Attrs, telemetry.Attr{ + Key: string(a.Key), + Value: val, + }) + m[string(a.Key)] = len(s.span.Attrs) - 1 + } else { + s.span.DroppedAttrs++ + } + } +} + +// convCappedAttrs converts up to limit attrs into a []telemetry.Attr. The +// number of dropped attributes is also returned. +func convCappedAttrs(limit int, attrs []attribute.KeyValue) ([]telemetry.Attr, uint32) { + n := len(attrs) + if limit == 0 { + var out uint32 + if n > 0 { + out = uint32(min(int64(n), math.MaxUint32)) // nolint: gosec // Bounds checked. + } + return nil, out + } + + if limit < 0 { + // Unlimited. + return convAttrs(attrs), 0 + } + + if n < 0 { + n = 0 + } + + limit = min(n, limit) + return convAttrs(attrs[:limit]), uint32(n - limit) // nolint: gosec // Bounds checked. +} + +func convAttrs(attrs []attribute.KeyValue) []telemetry.Attr { + if len(attrs) == 0 { + // Avoid allocations if not necessary. + return nil + } + + out := make([]telemetry.Attr, 0, len(attrs)) + for _, attr := range attrs { + key := string(attr.Key) + val := convAttrValue(attr.Value) + if val.Empty() { + continue + } + out = append(out, telemetry.Attr{Key: key, Value: val}) + } + return out +} + +func convAttrValue(value attribute.Value) telemetry.Value { + switch value.Type() { + case attribute.BOOL: + return telemetry.BoolValue(value.AsBool()) + case attribute.INT64: + return telemetry.Int64Value(value.AsInt64()) + case attribute.FLOAT64: + return telemetry.Float64Value(value.AsFloat64()) + case attribute.STRING: + v := truncate(maxSpan.AttrValueLen, value.AsString()) + return telemetry.StringValue(v) + case attribute.BOOLSLICE: + slice := value.AsBoolSlice() + out := make([]telemetry.Value, 0, len(slice)) + for _, v := range slice { + out = append(out, telemetry.BoolValue(v)) + } + return telemetry.SliceValue(out...) + case attribute.INT64SLICE: + slice := value.AsInt64Slice() + out := make([]telemetry.Value, 0, len(slice)) + for _, v := range slice { + out = append(out, telemetry.Int64Value(v)) + } + return telemetry.SliceValue(out...) + case attribute.FLOAT64SLICE: + slice := value.AsFloat64Slice() + out := make([]telemetry.Value, 0, len(slice)) + for _, v := range slice { + out = append(out, telemetry.Float64Value(v)) + } + return telemetry.SliceValue(out...) + case attribute.STRINGSLICE: + slice := value.AsStringSlice() + out := make([]telemetry.Value, 0, len(slice)) + for _, v := range slice { + v = truncate(maxSpan.AttrValueLen, v) + out = append(out, telemetry.StringValue(v)) + } + return telemetry.SliceValue(out...) + } + return telemetry.Value{} +} + +// truncate returns a truncated version of s such that it contains less than +// the limit number of characters. Truncation is applied by returning the limit +// number of valid characters contained in s. +// +// If limit is negative, it returns the original string. +// +// UTF-8 is supported. When truncating, all invalid characters are dropped +// before applying truncation. +// +// If s already contains less than the limit number of bytes, it is returned +// unchanged. No invalid characters are removed. +func truncate(limit int, s string) string { + // This prioritize performance in the following order based on the most + // common expected use-cases. + // + // - Short values less than the default limit (128). + // - Strings with valid encodings that exceed the limit. + // - No limit. + // - Strings with invalid encodings that exceed the limit. + if limit < 0 || len(s) <= limit { + return s + } + + // Optimistically, assume all valid UTF-8. + var b strings.Builder + count := 0 + for i, c := range s { + if c != utf8.RuneError { + count++ + if count > limit { + return s[:i] + } + continue + } + + _, size := utf8.DecodeRuneInString(s[i:]) + if size == 1 { + // Invalid encoding. + b.Grow(len(s) - 1) + _, _ = b.WriteString(s[:i]) + s = s[i:] + break + } + } + + // Fast-path, no invalid input. + if b.Cap() == 0 { + return s + } + + // Truncate while validating UTF-8. + for i := 0; i < len(s) && count < limit; { + c := s[i] + if c < utf8.RuneSelf { + // Optimization for single byte runes (common case). + _ = b.WriteByte(c) + i++ + count++ + continue + } + + _, size := utf8.DecodeRuneInString(s[i:]) + if size == 1 { + // We checked for all 1-byte runes above, this is a RuneError. + i++ + continue + } + + _, _ = b.WriteString(s[i : i+size]) + i += size + count++ + } + + return b.String() +} + +func (s *autoSpan) End(opts ...SpanEndOption) { + if s == nil || !s.sampled.Swap(false) { + return + } + + // s.end exists so the lock (s.mu) is not held while s.ended is called. + s.ended(s.end(opts)) +} + +func (s *autoSpan) end(opts []SpanEndOption) []byte { + s.mu.Lock() + defer s.mu.Unlock() + + cfg := NewSpanEndConfig(opts...) + if t := cfg.Timestamp(); !t.IsZero() { + s.span.EndTime = cfg.Timestamp() + } else { + s.span.EndTime = time.Now() + } + + b, _ := json.Marshal(s.traces) // TODO: do not ignore this error. + return b +} + +// Expected to be implemented in eBPF. +// +//go:noinline +func (*autoSpan) ended(buf []byte) { ended(buf) } + +// ended is used for testing. +var ended = func([]byte) {} + +func (s *autoSpan) RecordError(err error, opts ...EventOption) { + if s == nil || err == nil || !s.sampled.Load() { + return + } + + cfg := NewEventConfig(opts...) + + attrs := cfg.Attributes() + attrs = append(attrs, + semconv.ExceptionType(typeStr(err)), + semconv.ExceptionMessage(err.Error()), + ) + if cfg.StackTrace() { + buf := make([]byte, 2048) + n := runtime.Stack(buf, false) + attrs = append(attrs, semconv.ExceptionStacktrace(string(buf[0:n]))) + } + + s.mu.Lock() + defer s.mu.Unlock() + + s.addEvent(semconv.ExceptionEventName, cfg.Timestamp(), attrs) +} + +func typeStr(i any) string { + t := reflect.TypeOf(i) + if t.PkgPath() == "" && t.Name() == "" { + // Likely a builtin type. + return t.String() + } + return fmt.Sprintf("%s.%s", t.PkgPath(), t.Name()) +} + +func (s *autoSpan) AddEvent(name string, opts ...EventOption) { + if s == nil || !s.sampled.Load() { + return + } + + cfg := NewEventConfig(opts...) + + s.mu.Lock() + defer s.mu.Unlock() + + s.addEvent(name, cfg.Timestamp(), cfg.Attributes()) +} + +// addEvent adds an event with name and attrs at tStamp to the span. The span +// lock (s.mu) needs to be held by the caller. +func (s *autoSpan) addEvent(name string, tStamp time.Time, attrs []attribute.KeyValue) { + limit := maxSpan.Events + + if limit == 0 { + s.span.DroppedEvents++ + return + } + + if limit > 0 && len(s.span.Events) == limit { + // Drop head while avoiding allocation of more capacity. + copy(s.span.Events[:limit-1], s.span.Events[1:]) + s.span.Events = s.span.Events[:limit-1] + s.span.DroppedEvents++ + } + + e := &telemetry.SpanEvent{Time: tStamp, Name: name} + e.Attrs, e.DroppedAttrs = convCappedAttrs(maxSpan.EventAttrs, attrs) + + s.span.Events = append(s.span.Events, e) +} + +func (s *autoSpan) AddLink(link Link) { + if s == nil || !s.sampled.Load() { + return + } + + l := maxSpan.Links + + s.mu.Lock() + defer s.mu.Unlock() + + if l == 0 { + s.span.DroppedLinks++ + return + } + + if l > 0 && len(s.span.Links) == l { + // Drop head while avoiding allocation of more capacity. + copy(s.span.Links[:l-1], s.span.Links[1:]) + s.span.Links = s.span.Links[:l-1] + s.span.DroppedLinks++ + } + + s.span.Links = append(s.span.Links, convLink(link)) +} + +func convLinks(links []Link) []*telemetry.SpanLink { + out := make([]*telemetry.SpanLink, 0, len(links)) + for _, link := range links { + out = append(out, convLink(link)) + } + return out +} + +func convLink(link Link) *telemetry.SpanLink { + l := &telemetry.SpanLink{ + TraceID: telemetry.TraceID(link.SpanContext.TraceID()), + SpanID: telemetry.SpanID(link.SpanContext.SpanID()), + TraceState: link.SpanContext.TraceState().String(), + Flags: uint32(link.SpanContext.TraceFlags()), + } + l.Attrs, l.DroppedAttrs = convCappedAttrs(maxSpan.LinkAttrs, link.Attributes) + + return l +} + +func (s *autoSpan) SetName(name string) { + if s == nil || !s.sampled.Load() { + return + } + + s.mu.Lock() + defer s.mu.Unlock() + + s.span.Name = name +} + +func (*autoSpan) TracerProvider() TracerProvider { return newAutoTracerProvider() } + +// maxSpan are the span limits resolved during startup. +var maxSpan = newSpanLimits() + +type spanLimits struct { + // Attrs is the number of allowed attributes for a span. + // + // This is resolved from the environment variable value for the + // OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT key if it exists. Otherwise, the + // environment variable value for OTEL_ATTRIBUTE_COUNT_LIMIT, or 128 if + // that is not set, is used. + Attrs int + // AttrValueLen is the maximum attribute value length allowed for a span. + // + // This is resolved from the environment variable value for the + // OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT key if it exists. Otherwise, the + // environment variable value for OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT, or -1 + // if that is not set, is used. + AttrValueLen int + // Events is the number of allowed events for a span. + // + // This is resolved from the environment variable value for the + // OTEL_SPAN_EVENT_COUNT_LIMIT key, or 128 is used if that is not set. + Events int + // EventAttrs is the number of allowed attributes for a span event. + // + // The is resolved from the environment variable value for the + // OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT key, or 128 is used if that is not set. + EventAttrs int + // Links is the number of allowed Links for a span. + // + // This is resolved from the environment variable value for the + // OTEL_SPAN_LINK_COUNT_LIMIT, or 128 is used if that is not set. + Links int + // LinkAttrs is the number of allowed attributes for a span link. + // + // This is resolved from the environment variable value for the + // OTEL_LINK_ATTRIBUTE_COUNT_LIMIT, or 128 is used if that is not set. + LinkAttrs int +} + +func newSpanLimits() spanLimits { + return spanLimits{ + Attrs: firstEnv( + 128, + "OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT", + "OTEL_ATTRIBUTE_COUNT_LIMIT", + ), + AttrValueLen: firstEnv( + -1, // Unlimited. + "OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT", + "OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT", + ), + Events: firstEnv(128, "OTEL_SPAN_EVENT_COUNT_LIMIT"), + EventAttrs: firstEnv(128, "OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT"), + Links: firstEnv(128, "OTEL_SPAN_LINK_COUNT_LIMIT"), + LinkAttrs: firstEnv(128, "OTEL_LINK_ATTRIBUTE_COUNT_LIMIT"), + } +} + +// firstEnv returns the parsed integer value of the first matching environment +// variable from keys. The defaultVal is returned if the value is not an +// integer or no match is found. +func firstEnv(defaultVal int, keys ...string) int { + for _, key := range keys { + strV := os.Getenv(key) + if strV == "" { + continue + } + + v, err := strconv.Atoi(strV) + if err == nil { + return v + } + // Ignore invalid environment variable. + } + + return defaultVal +} diff --git a/vendor/go.opentelemetry.io/otel/trace/config.go b/vendor/go.opentelemetry.io/otel/trace/config.go index 273d58e0..9c0b720a 100644 --- a/vendor/go.opentelemetry.io/otel/trace/config.go +++ b/vendor/go.opentelemetry.io/otel/trace/config.go @@ -213,7 +213,7 @@ var _ SpanStartEventOption = attributeOption{} // WithAttributes adds the attributes related to a span life-cycle event. // These attributes are used to describe the work a Span represents when this -// option is provided to a Span's start or end events. Otherwise, these +// option is provided to a Span's start event. Otherwise, these // attributes provide additional information about the event being recorded // (e.g. error, state change, processing progress, system event). // diff --git a/vendor/go.opentelemetry.io/otel/trace/context.go b/vendor/go.opentelemetry.io/otel/trace/context.go index 5650a174..8c45a710 100644 --- a/vendor/go.opentelemetry.io/otel/trace/context.go +++ b/vendor/go.opentelemetry.io/otel/trace/context.go @@ -22,7 +22,7 @@ func ContextWithSpanContext(parent context.Context, sc SpanContext) context.Cont return ContextWithSpan(parent, nonRecordingSpan{sc: sc}) } -// ContextWithRemoteSpanContext returns a copy of parent with rsc set explicly +// ContextWithRemoteSpanContext returns a copy of parent with rsc set explicitly // as a remote SpanContext and as the current Span. The Span implementation // that wraps rsc is non-recording and performs no operations other than to // return rsc as the SpanContext from the SpanContext method. diff --git a/vendor/go.opentelemetry.io/otel/trace/doc.go b/vendor/go.opentelemetry.io/otel/trace/doc.go index d661c5d1..cdbf41d6 100644 --- a/vendor/go.opentelemetry.io/otel/trace/doc.go +++ b/vendor/go.opentelemetry.io/otel/trace/doc.go @@ -96,7 +96,7 @@ can embed the API interface directly. This option is not recommended. It will lead to publishing packages that contain runtime panics when users update to newer versions of -[go.opentelemetry.io/otel/trace], which may be done with a trasitive +[go.opentelemetry.io/otel/trace], which may be done with a transitive dependency. Finally, an author can embed another implementation in theirs. The embedded diff --git a/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/attr.go b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/attr.go new file mode 100644 index 00000000..f663547b --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/attr.go @@ -0,0 +1,58 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package telemetry // import "go.opentelemetry.io/otel/trace/internal/telemetry" + +// Attr is a key-value pair. +type Attr struct { + Key string `json:"key,omitempty"` + Value Value `json:"value,omitempty"` +} + +// String returns an Attr for a string value. +func String(key, value string) Attr { + return Attr{key, StringValue(value)} +} + +// Int64 returns an Attr for an int64 value. +func Int64(key string, value int64) Attr { + return Attr{key, Int64Value(value)} +} + +// Int returns an Attr for an int value. +func Int(key string, value int) Attr { + return Int64(key, int64(value)) +} + +// Float64 returns an Attr for a float64 value. +func Float64(key string, value float64) Attr { + return Attr{key, Float64Value(value)} +} + +// Bool returns an Attr for a bool value. +func Bool(key string, value bool) Attr { + return Attr{key, BoolValue(value)} +} + +// Bytes returns an Attr for a []byte value. +// The passed slice must not be changed after it is passed. +func Bytes(key string, value []byte) Attr { + return Attr{key, BytesValue(value)} +} + +// Slice returns an Attr for a []Value value. +// The passed slice must not be changed after it is passed. +func Slice(key string, value ...Value) Attr { + return Attr{key, SliceValue(value...)} +} + +// Map returns an Attr for a map value. +// The passed slice must not be changed after it is passed. +func Map(key string, value ...Attr) Attr { + return Attr{key, MapValue(value...)} +} + +// Equal returns if a is equal to b. +func (a Attr) Equal(b Attr) bool { + return a.Key == b.Key && a.Value.Equal(b.Value) +} diff --git a/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/doc.go b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/doc.go new file mode 100644 index 00000000..5debe90b --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/doc.go @@ -0,0 +1,8 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +/* +Package telemetry provides a lightweight representations of OpenTelemetry +telemetry that is compatible with the OTLP JSON protobuf encoding. +*/ +package telemetry // import "go.opentelemetry.io/otel/trace/internal/telemetry" diff --git a/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/id.go b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/id.go new file mode 100644 index 00000000..7b1ae3c4 --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/id.go @@ -0,0 +1,103 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package telemetry // import "go.opentelemetry.io/otel/trace/internal/telemetry" + +import ( + "encoding/hex" + "errors" + "fmt" +) + +const ( + traceIDSize = 16 + spanIDSize = 8 +) + +// TraceID is a custom data type that is used for all trace IDs. +type TraceID [traceIDSize]byte + +// String returns the hex string representation form of a TraceID. +func (tid TraceID) String() string { + return hex.EncodeToString(tid[:]) +} + +// IsEmpty returns false if id contains at least one non-zero byte. +func (tid TraceID) IsEmpty() bool { + return tid == [traceIDSize]byte{} +} + +// MarshalJSON converts the trace ID into a hex string enclosed in quotes. +func (tid TraceID) MarshalJSON() ([]byte, error) { + if tid.IsEmpty() { + return []byte(`""`), nil + } + return marshalJSON(tid[:]) +} + +// UnmarshalJSON inflates the trace ID from hex string, possibly enclosed in +// quotes. +func (tid *TraceID) UnmarshalJSON(data []byte) error { + *tid = [traceIDSize]byte{} + return unmarshalJSON(tid[:], data) +} + +// SpanID is a custom data type that is used for all span IDs. +type SpanID [spanIDSize]byte + +// String returns the hex string representation form of a SpanID. +func (sid SpanID) String() string { + return hex.EncodeToString(sid[:]) +} + +// IsEmpty returns true if the span ID contains at least one non-zero byte. +func (sid SpanID) IsEmpty() bool { + return sid == [spanIDSize]byte{} +} + +// MarshalJSON converts span ID into a hex string enclosed in quotes. +func (sid SpanID) MarshalJSON() ([]byte, error) { + if sid.IsEmpty() { + return []byte(`""`), nil + } + return marshalJSON(sid[:]) +} + +// UnmarshalJSON decodes span ID from hex string, possibly enclosed in quotes. +func (sid *SpanID) UnmarshalJSON(data []byte) error { + *sid = [spanIDSize]byte{} + return unmarshalJSON(sid[:], data) +} + +// marshalJSON converts id into a hex string enclosed in quotes. +func marshalJSON(id []byte) ([]byte, error) { + // Plus 2 quote chars at the start and end. + hexLen := hex.EncodedLen(len(id)) + 2 + + b := make([]byte, hexLen) + hex.Encode(b[1:hexLen-1], id) + b[0], b[hexLen-1] = '"', '"' + + return b, nil +} + +// unmarshalJSON inflates trace id from hex string, possibly enclosed in quotes. +func unmarshalJSON(dst []byte, src []byte) error { + if l := len(src); l >= 2 && src[0] == '"' && src[l-1] == '"' { + src = src[1 : l-1] + } + nLen := len(src) + if nLen == 0 { + return nil + } + + if len(dst) != hex.DecodedLen(nLen) { + return errors.New("invalid length for ID") + } + + _, err := hex.Decode(dst, src) + if err != nil { + return fmt.Errorf("cannot unmarshal ID from string '%s': %w", string(src), err) + } + return nil +} diff --git a/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/number.go b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/number.go new file mode 100644 index 00000000..f5e3a8ce --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/number.go @@ -0,0 +1,67 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package telemetry // import "go.opentelemetry.io/otel/trace/internal/telemetry" + +import ( + "encoding/json" + "strconv" +) + +// protoInt64 represents the protobuf encoding of integers which can be either +// strings or integers. +type protoInt64 int64 + +// Int64 returns the protoInt64 as an int64. +func (i *protoInt64) Int64() int64 { return int64(*i) } + +// UnmarshalJSON decodes both strings and integers. +func (i *protoInt64) UnmarshalJSON(data []byte) error { + if data[0] == '"' { + var str string + if err := json.Unmarshal(data, &str); err != nil { + return err + } + parsedInt, err := strconv.ParseInt(str, 10, 64) + if err != nil { + return err + } + *i = protoInt64(parsedInt) + } else { + var parsedInt int64 + if err := json.Unmarshal(data, &parsedInt); err != nil { + return err + } + *i = protoInt64(parsedInt) + } + return nil +} + +// protoUint64 represents the protobuf encoding of integers which can be either +// strings or integers. +type protoUint64 uint64 + +// Int64 returns the protoUint64 as a uint64. +func (i *protoUint64) Uint64() uint64 { return uint64(*i) } + +// UnmarshalJSON decodes both strings and integers. +func (i *protoUint64) UnmarshalJSON(data []byte) error { + if data[0] == '"' { + var str string + if err := json.Unmarshal(data, &str); err != nil { + return err + } + parsedUint, err := strconv.ParseUint(str, 10, 64) + if err != nil { + return err + } + *i = protoUint64(parsedUint) + } else { + var parsedUint uint64 + if err := json.Unmarshal(data, &parsedUint); err != nil { + return err + } + *i = protoUint64(parsedUint) + } + return nil +} diff --git a/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/resource.go b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/resource.go new file mode 100644 index 00000000..1798a702 --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/resource.go @@ -0,0 +1,66 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package telemetry // import "go.opentelemetry.io/otel/trace/internal/telemetry" + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "io" +) + +// Resource information. +type Resource struct { + // Attrs are the set of attributes that describe the resource. Attribute + // keys MUST be unique (it is not allowed to have more than one attribute + // with the same key). + Attrs []Attr `json:"attributes,omitempty"` + // DroppedAttrs is the number of dropped attributes. If the value + // is 0, then no attributes were dropped. + DroppedAttrs uint32 `json:"droppedAttributesCount,omitempty"` +} + +// UnmarshalJSON decodes the OTLP formatted JSON contained in data into r. +func (r *Resource) UnmarshalJSON(data []byte) error { + decoder := json.NewDecoder(bytes.NewReader(data)) + + t, err := decoder.Token() + if err != nil { + return err + } + if t != json.Delim('{') { + return errors.New("invalid Resource type") + } + + for decoder.More() { + keyIface, err := decoder.Token() + if err != nil { + if errors.Is(err, io.EOF) { + // Empty. + return nil + } + return err + } + + key, ok := keyIface.(string) + if !ok { + return fmt.Errorf("invalid Resource field: %#v", keyIface) + } + + switch key { + case "attributes": + err = decoder.Decode(&r.Attrs) + case "droppedAttributesCount", "dropped_attributes_count": + err = decoder.Decode(&r.DroppedAttrs) + default: + // Skip unknown. + } + + if err != nil { + return err + } + } + return nil +} diff --git a/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/scope.go b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/scope.go new file mode 100644 index 00000000..c2b4c635 --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/scope.go @@ -0,0 +1,67 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package telemetry // import "go.opentelemetry.io/otel/trace/internal/telemetry" + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "io" +) + +// Scope is the identifying values of the instrumentation scope. +type Scope struct { + Name string `json:"name,omitempty"` + Version string `json:"version,omitempty"` + Attrs []Attr `json:"attributes,omitempty"` + DroppedAttrs uint32 `json:"droppedAttributesCount,omitempty"` +} + +// UnmarshalJSON decodes the OTLP formatted JSON contained in data into r. +func (s *Scope) UnmarshalJSON(data []byte) error { + decoder := json.NewDecoder(bytes.NewReader(data)) + + t, err := decoder.Token() + if err != nil { + return err + } + if t != json.Delim('{') { + return errors.New("invalid Scope type") + } + + for decoder.More() { + keyIface, err := decoder.Token() + if err != nil { + if errors.Is(err, io.EOF) { + // Empty. + return nil + } + return err + } + + key, ok := keyIface.(string) + if !ok { + return fmt.Errorf("invalid Scope field: %#v", keyIface) + } + + switch key { + case "name": + err = decoder.Decode(&s.Name) + case "version": + err = decoder.Decode(&s.Version) + case "attributes": + err = decoder.Decode(&s.Attrs) + case "droppedAttributesCount", "dropped_attributes_count": + err = decoder.Decode(&s.DroppedAttrs) + default: + // Skip unknown. + } + + if err != nil { + return err + } + } + return nil +} diff --git a/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/span.go b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/span.go new file mode 100644 index 00000000..3c5e1cdb --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/span.go @@ -0,0 +1,460 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package telemetry // import "go.opentelemetry.io/otel/trace/internal/telemetry" + +import ( + "bytes" + "encoding/hex" + "encoding/json" + "errors" + "fmt" + "io" + "math" + "time" +) + +// A Span represents a single operation performed by a single component of the +// system. +type Span struct { + // A unique identifier for a trace. All spans from the same trace share + // the same `trace_id`. The ID is a 16-byte array. An ID with all zeroes OR + // of length other than 16 bytes is considered invalid (empty string in OTLP/JSON + // is zero-length and thus is also invalid). + // + // This field is required. + TraceID TraceID `json:"traceId,omitempty"` + // A unique identifier for a span within a trace, assigned when the span + // is created. The ID is an 8-byte array. An ID with all zeroes OR of length + // other than 8 bytes is considered invalid (empty string in OTLP/JSON + // is zero-length and thus is also invalid). + // + // This field is required. + SpanID SpanID `json:"spanId,omitempty"` + // trace_state conveys information about request position in multiple distributed tracing graphs. + // It is a trace_state in w3c-trace-context format: https://www.w3.org/TR/trace-context/#tracestate-header + // See also https://github.com/w3c/distributed-tracing for more details about this field. + TraceState string `json:"traceState,omitempty"` + // The `span_id` of this span's parent span. If this is a root span, then this + // field must be empty. The ID is an 8-byte array. + ParentSpanID SpanID `json:"parentSpanId,omitempty"` + // Flags, a bit field. + // + // Bits 0-7 (8 least significant bits) are the trace flags as defined in W3C Trace + // Context specification. To read the 8-bit W3C trace flag, use + // `flags & SPAN_FLAGS_TRACE_FLAGS_MASK`. + // + // See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions. + // + // Bits 8 and 9 represent the 3 states of whether a span's parent + // is remote. The states are (unknown, is not remote, is remote). + // To read whether the value is known, use `(flags & SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK) != 0`. + // To read whether the span is remote, use `(flags & SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK) != 0`. + // + // When creating span messages, if the message is logically forwarded from another source + // with an equivalent flags fields (i.e., usually another OTLP span message), the field SHOULD + // be copied as-is. If creating from a source that does not have an equivalent flags field + // (such as a runtime representation of an OpenTelemetry span), the high 22 bits MUST + // be set to zero. + // Readers MUST NOT assume that bits 10-31 (22 most significant bits) will be zero. + // + // [Optional]. + Flags uint32 `json:"flags,omitempty"` + // A description of the span's operation. + // + // For example, the name can be a qualified method name or a file name + // and a line number where the operation is called. A best practice is to use + // the same display name at the same call point in an application. + // This makes it easier to correlate spans in different traces. + // + // This field is semantically required to be set to non-empty string. + // Empty value is equivalent to an unknown span name. + // + // This field is required. + Name string `json:"name"` + // Distinguishes between spans generated in a particular context. For example, + // two spans with the same name may be distinguished using `CLIENT` (caller) + // and `SERVER` (callee) to identify queueing latency associated with the span. + Kind SpanKind `json:"kind,omitempty"` + // start_time_unix_nano is the start time of the span. On the client side, this is the time + // kept by the local machine where the span execution starts. On the server side, this + // is the time when the server's application handler starts running. + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970. + // + // This field is semantically required and it is expected that end_time >= start_time. + StartTime time.Time `json:"startTimeUnixNano,omitempty"` + // end_time_unix_nano is the end time of the span. On the client side, this is the time + // kept by the local machine where the span execution ends. On the server side, this + // is the time when the server application handler stops running. + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970. + // + // This field is semantically required and it is expected that end_time >= start_time. + EndTime time.Time `json:"endTimeUnixNano,omitempty"` + // attributes is a collection of key/value pairs. Note, global attributes + // like server name can be set using the resource API. Examples of attributes: + // + // "/http/user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" + // "/http/server_latency": 300 + // "example.com/myattribute": true + // "example.com/score": 10.239 + // + // The OpenTelemetry API specification further restricts the allowed value types: + // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/common/README.md#attribute + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + Attrs []Attr `json:"attributes,omitempty"` + // dropped_attributes_count is the number of attributes that were discarded. Attributes + // can be discarded because their keys are too long or because there are too many + // attributes. If this value is 0, then no attributes were dropped. + DroppedAttrs uint32 `json:"droppedAttributesCount,omitempty"` + // events is a collection of Event items. + Events []*SpanEvent `json:"events,omitempty"` + // dropped_events_count is the number of dropped events. If the value is 0, then no + // events were dropped. + DroppedEvents uint32 `json:"droppedEventsCount,omitempty"` + // links is a collection of Links, which are references from this span to a span + // in the same or different trace. + Links []*SpanLink `json:"links,omitempty"` + // dropped_links_count is the number of dropped links after the maximum size was + // enforced. If this value is 0, then no links were dropped. + DroppedLinks uint32 `json:"droppedLinksCount,omitempty"` + // An optional final status for this span. Semantically when Status isn't set, it means + // span's status code is unset, i.e. assume STATUS_CODE_UNSET (code = 0). + Status *Status `json:"status,omitempty"` +} + +// MarshalJSON encodes s into OTLP formatted JSON. +func (s Span) MarshalJSON() ([]byte, error) { + startT := s.StartTime.UnixNano() + if s.StartTime.IsZero() || startT < 0 { + startT = 0 + } + + endT := s.EndTime.UnixNano() + if s.EndTime.IsZero() || endT < 0 { + endT = 0 + } + + // Override non-empty default SpanID marshal and omitempty. + var parentSpanId string + if !s.ParentSpanID.IsEmpty() { + b := make([]byte, hex.EncodedLen(spanIDSize)) + hex.Encode(b, s.ParentSpanID[:]) + parentSpanId = string(b) + } + + type Alias Span + return json.Marshal(struct { + Alias + ParentSpanID string `json:"parentSpanId,omitempty"` + StartTime uint64 `json:"startTimeUnixNano,omitempty"` + EndTime uint64 `json:"endTimeUnixNano,omitempty"` + }{ + Alias: Alias(s), + ParentSpanID: parentSpanId, + StartTime: uint64(startT), // nolint:gosec // >0 checked above. + EndTime: uint64(endT), // nolint:gosec // >0 checked above. + }) +} + +// UnmarshalJSON decodes the OTLP formatted JSON contained in data into s. +func (s *Span) UnmarshalJSON(data []byte) error { + decoder := json.NewDecoder(bytes.NewReader(data)) + + t, err := decoder.Token() + if err != nil { + return err + } + if t != json.Delim('{') { + return errors.New("invalid Span type") + } + + for decoder.More() { + keyIface, err := decoder.Token() + if err != nil { + if errors.Is(err, io.EOF) { + // Empty. + return nil + } + return err + } + + key, ok := keyIface.(string) + if !ok { + return fmt.Errorf("invalid Span field: %#v", keyIface) + } + + switch key { + case "traceId", "trace_id": + err = decoder.Decode(&s.TraceID) + case "spanId", "span_id": + err = decoder.Decode(&s.SpanID) + case "traceState", "trace_state": + err = decoder.Decode(&s.TraceState) + case "parentSpanId", "parent_span_id": + err = decoder.Decode(&s.ParentSpanID) + case "flags": + err = decoder.Decode(&s.Flags) + case "name": + err = decoder.Decode(&s.Name) + case "kind": + err = decoder.Decode(&s.Kind) + case "startTimeUnixNano", "start_time_unix_nano": + var val protoUint64 + err = decoder.Decode(&val) + v := int64(min(val.Uint64(), math.MaxInt64)) // nolint: gosec // Overflow checked. + s.StartTime = time.Unix(0, v) + case "endTimeUnixNano", "end_time_unix_nano": + var val protoUint64 + err = decoder.Decode(&val) + v := int64(min(val.Uint64(), math.MaxInt64)) // nolint: gosec // Overflow checked. + s.EndTime = time.Unix(0, v) + case "attributes": + err = decoder.Decode(&s.Attrs) + case "droppedAttributesCount", "dropped_attributes_count": + err = decoder.Decode(&s.DroppedAttrs) + case "events": + err = decoder.Decode(&s.Events) + case "droppedEventsCount", "dropped_events_count": + err = decoder.Decode(&s.DroppedEvents) + case "links": + err = decoder.Decode(&s.Links) + case "droppedLinksCount", "dropped_links_count": + err = decoder.Decode(&s.DroppedLinks) + case "status": + err = decoder.Decode(&s.Status) + default: + // Skip unknown. + } + + if err != nil { + return err + } + } + return nil +} + +// SpanFlags represents constants used to interpret the +// Span.flags field, which is protobuf 'fixed32' type and is to +// be used as bit-fields. Each non-zero value defined in this enum is +// a bit-mask. To extract the bit-field, for example, use an +// expression like: +// +// (span.flags & SPAN_FLAGS_TRACE_FLAGS_MASK) +// +// See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions. +// +// Note that Span flags were introduced in version 1.1 of the +// OpenTelemetry protocol. Older Span producers do not set this +// field, consequently consumers should not rely on the absence of a +// particular flag bit to indicate the presence of a particular feature. +type SpanFlags int32 + +const ( + // Bits 0-7 are used for trace flags. + SpanFlagsTraceFlagsMask SpanFlags = 255 + // Bits 8 and 9 are used to indicate that the parent span or link span is remote. + // Bit 8 (`HAS_IS_REMOTE`) indicates whether the value is known. + // Bit 9 (`IS_REMOTE`) indicates whether the span or link is remote. + SpanFlagsContextHasIsRemoteMask SpanFlags = 256 + // SpanFlagsContextHasIsRemoteMask indicates the Span is remote. + SpanFlagsContextIsRemoteMask SpanFlags = 512 +) + +// SpanKind is the type of span. Can be used to specify additional relationships between spans +// in addition to a parent/child relationship. +type SpanKind int32 + +const ( + // Indicates that the span represents an internal operation within an application, + // as opposed to an operation happening at the boundaries. Default value. + SpanKindInternal SpanKind = 1 + // Indicates that the span covers server-side handling of an RPC or other + // remote network request. + SpanKindServer SpanKind = 2 + // Indicates that the span describes a request to some remote service. + SpanKindClient SpanKind = 3 + // Indicates that the span describes a producer sending a message to a broker. + // Unlike CLIENT and SERVER, there is often no direct critical path latency relationship + // between producer and consumer spans. A PRODUCER span ends when the message was accepted + // by the broker while the logical processing of the message might span a much longer time. + SpanKindProducer SpanKind = 4 + // Indicates that the span describes consumer receiving a message from a broker. + // Like the PRODUCER kind, there is often no direct critical path latency relationship + // between producer and consumer spans. + SpanKindConsumer SpanKind = 5 +) + +// Event is a time-stamped annotation of the span, consisting of user-supplied +// text description and key-value pairs. +type SpanEvent struct { + // time_unix_nano is the time the event occurred. + Time time.Time `json:"timeUnixNano,omitempty"` + // name of the event. + // This field is semantically required to be set to non-empty string. + Name string `json:"name,omitempty"` + // attributes is a collection of attribute key/value pairs on the event. + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + Attrs []Attr `json:"attributes,omitempty"` + // dropped_attributes_count is the number of dropped attributes. If the value is 0, + // then no attributes were dropped. + DroppedAttrs uint32 `json:"droppedAttributesCount,omitempty"` +} + +// MarshalJSON encodes e into OTLP formatted JSON. +func (e SpanEvent) MarshalJSON() ([]byte, error) { + t := e.Time.UnixNano() + if e.Time.IsZero() || t < 0 { + t = 0 + } + + type Alias SpanEvent + return json.Marshal(struct { + Alias + Time uint64 `json:"timeUnixNano,omitempty"` + }{ + Alias: Alias(e), + Time: uint64(t), // nolint: gosec // >0 checked above + }) +} + +// UnmarshalJSON decodes the OTLP formatted JSON contained in data into se. +func (se *SpanEvent) UnmarshalJSON(data []byte) error { + decoder := json.NewDecoder(bytes.NewReader(data)) + + t, err := decoder.Token() + if err != nil { + return err + } + if t != json.Delim('{') { + return errors.New("invalid SpanEvent type") + } + + for decoder.More() { + keyIface, err := decoder.Token() + if err != nil { + if errors.Is(err, io.EOF) { + // Empty. + return nil + } + return err + } + + key, ok := keyIface.(string) + if !ok { + return fmt.Errorf("invalid SpanEvent field: %#v", keyIface) + } + + switch key { + case "timeUnixNano", "time_unix_nano": + var val protoUint64 + err = decoder.Decode(&val) + v := int64(min(val.Uint64(), math.MaxInt64)) // nolint: gosec // Overflow checked. + se.Time = time.Unix(0, v) + case "name": + err = decoder.Decode(&se.Name) + case "attributes": + err = decoder.Decode(&se.Attrs) + case "droppedAttributesCount", "dropped_attributes_count": + err = decoder.Decode(&se.DroppedAttrs) + default: + // Skip unknown. + } + + if err != nil { + return err + } + } + return nil +} + +// A pointer from the current span to another span in the same trace or in a +// different trace. For example, this can be used in batching operations, +// where a single batch handler processes multiple requests from different +// traces or when the handler receives a request from a different project. +type SpanLink struct { + // A unique identifier of a trace that this linked span is part of. The ID is a + // 16-byte array. + TraceID TraceID `json:"traceId,omitempty"` + // A unique identifier for the linked span. The ID is an 8-byte array. + SpanID SpanID `json:"spanId,omitempty"` + // The trace_state associated with the link. + TraceState string `json:"traceState,omitempty"` + // attributes is a collection of attribute key/value pairs on the link. + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + Attrs []Attr `json:"attributes,omitempty"` + // dropped_attributes_count is the number of dropped attributes. If the value is 0, + // then no attributes were dropped. + DroppedAttrs uint32 `json:"droppedAttributesCount,omitempty"` + // Flags, a bit field. + // + // Bits 0-7 (8 least significant bits) are the trace flags as defined in W3C Trace + // Context specification. To read the 8-bit W3C trace flag, use + // `flags & SPAN_FLAGS_TRACE_FLAGS_MASK`. + // + // See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions. + // + // Bits 8 and 9 represent the 3 states of whether the link is remote. + // The states are (unknown, is not remote, is remote). + // To read whether the value is known, use `(flags & SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK) != 0`. + // To read whether the link is remote, use `(flags & SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK) != 0`. + // + // Readers MUST NOT assume that bits 10-31 (22 most significant bits) will be zero. + // When creating new spans, bits 10-31 (most-significant 22-bits) MUST be zero. + // + // [Optional]. + Flags uint32 `json:"flags,omitempty"` +} + +// UnmarshalJSON decodes the OTLP formatted JSON contained in data into sl. +func (sl *SpanLink) UnmarshalJSON(data []byte) error { + decoder := json.NewDecoder(bytes.NewReader(data)) + + t, err := decoder.Token() + if err != nil { + return err + } + if t != json.Delim('{') { + return errors.New("invalid SpanLink type") + } + + for decoder.More() { + keyIface, err := decoder.Token() + if err != nil { + if errors.Is(err, io.EOF) { + // Empty. + return nil + } + return err + } + + key, ok := keyIface.(string) + if !ok { + return fmt.Errorf("invalid SpanLink field: %#v", keyIface) + } + + switch key { + case "traceId", "trace_id": + err = decoder.Decode(&sl.TraceID) + case "spanId", "span_id": + err = decoder.Decode(&sl.SpanID) + case "traceState", "trace_state": + err = decoder.Decode(&sl.TraceState) + case "attributes": + err = decoder.Decode(&sl.Attrs) + case "droppedAttributesCount", "dropped_attributes_count": + err = decoder.Decode(&sl.DroppedAttrs) + case "flags": + err = decoder.Decode(&sl.Flags) + default: + // Skip unknown. + } + + if err != nil { + return err + } + } + return nil +} diff --git a/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/status.go b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/status.go new file mode 100644 index 00000000..1d013a8f --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/status.go @@ -0,0 +1,40 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package telemetry // import "go.opentelemetry.io/otel/trace/internal/telemetry" + +// For the semantics of status codes see +// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/api.md#set-status +type StatusCode int32 + +const ( + // The default status. + StatusCodeUnset StatusCode = 0 + // The Span has been validated by an Application developer or Operator to + // have completed successfully. + StatusCodeOK StatusCode = 1 + // The Span contains an error. + StatusCodeError StatusCode = 2 +) + +var statusCodeStrings = []string{ + "Unset", + "OK", + "Error", +} + +func (s StatusCode) String() string { + if s >= 0 && int(s) < len(statusCodeStrings) { + return statusCodeStrings[s] + } + return "" +} + +// The Status type defines a logical error model that is suitable for different +// programming environments, including REST APIs and RPC APIs. +type Status struct { + // A developer-facing human readable error message. + Message string `json:"message,omitempty"` + // The status code. + Code StatusCode `json:"code,omitempty"` +} diff --git a/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/traces.go b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/traces.go new file mode 100644 index 00000000..b0394070 --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/traces.go @@ -0,0 +1,189 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package telemetry // import "go.opentelemetry.io/otel/trace/internal/telemetry" + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "io" +) + +// Traces represents the traces data that can be stored in a persistent storage, +// OR can be embedded by other protocols that transfer OTLP traces data but do +// not implement the OTLP protocol. +// +// The main difference between this message and collector protocol is that +// in this message there will not be any "control" or "metadata" specific to +// OTLP protocol. +// +// When new fields are added into this message, the OTLP request MUST be updated +// as well. +type Traces struct { + // An array of ResourceSpans. + // For data coming from a single resource this array will typically contain + // one element. Intermediary nodes that receive data from multiple origins + // typically batch the data before forwarding further and in that case this + // array will contain multiple elements. + ResourceSpans []*ResourceSpans `json:"resourceSpans,omitempty"` +} + +// UnmarshalJSON decodes the OTLP formatted JSON contained in data into td. +func (td *Traces) UnmarshalJSON(data []byte) error { + decoder := json.NewDecoder(bytes.NewReader(data)) + + t, err := decoder.Token() + if err != nil { + return err + } + if t != json.Delim('{') { + return errors.New("invalid TracesData type") + } + + for decoder.More() { + keyIface, err := decoder.Token() + if err != nil { + if errors.Is(err, io.EOF) { + // Empty. + return nil + } + return err + } + + key, ok := keyIface.(string) + if !ok { + return fmt.Errorf("invalid TracesData field: %#v", keyIface) + } + + switch key { + case "resourceSpans", "resource_spans": + err = decoder.Decode(&td.ResourceSpans) + default: + // Skip unknown. + } + + if err != nil { + return err + } + } + return nil +} + +// A collection of ScopeSpans from a Resource. +type ResourceSpans struct { + // The resource for the spans in this message. + // If this field is not set then no resource info is known. + Resource Resource `json:"resource"` + // A list of ScopeSpans that originate from a resource. + ScopeSpans []*ScopeSpans `json:"scopeSpans,omitempty"` + // This schema_url applies to the data in the "resource" field. It does not apply + // to the data in the "scope_spans" field which have their own schema_url field. + SchemaURL string `json:"schemaUrl,omitempty"` +} + +// UnmarshalJSON decodes the OTLP formatted JSON contained in data into rs. +func (rs *ResourceSpans) UnmarshalJSON(data []byte) error { + decoder := json.NewDecoder(bytes.NewReader(data)) + + t, err := decoder.Token() + if err != nil { + return err + } + if t != json.Delim('{') { + return errors.New("invalid ResourceSpans type") + } + + for decoder.More() { + keyIface, err := decoder.Token() + if err != nil { + if errors.Is(err, io.EOF) { + // Empty. + return nil + } + return err + } + + key, ok := keyIface.(string) + if !ok { + return fmt.Errorf("invalid ResourceSpans field: %#v", keyIface) + } + + switch key { + case "resource": + err = decoder.Decode(&rs.Resource) + case "scopeSpans", "scope_spans": + err = decoder.Decode(&rs.ScopeSpans) + case "schemaUrl", "schema_url": + err = decoder.Decode(&rs.SchemaURL) + default: + // Skip unknown. + } + + if err != nil { + return err + } + } + return nil +} + +// A collection of Spans produced by an InstrumentationScope. +type ScopeSpans struct { + // The instrumentation scope information for the spans in this message. + // Semantically when InstrumentationScope isn't set, it is equivalent with + // an empty instrumentation scope name (unknown). + Scope *Scope `json:"scope"` + // A list of Spans that originate from an instrumentation scope. + Spans []*Span `json:"spans,omitempty"` + // The Schema URL, if known. This is the identifier of the Schema that the span data + // is recorded in. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // This schema_url applies to all spans and span events in the "spans" field. + SchemaURL string `json:"schemaUrl,omitempty"` +} + +// UnmarshalJSON decodes the OTLP formatted JSON contained in data into ss. +func (ss *ScopeSpans) UnmarshalJSON(data []byte) error { + decoder := json.NewDecoder(bytes.NewReader(data)) + + t, err := decoder.Token() + if err != nil { + return err + } + if t != json.Delim('{') { + return errors.New("invalid ScopeSpans type") + } + + for decoder.More() { + keyIface, err := decoder.Token() + if err != nil { + if errors.Is(err, io.EOF) { + // Empty. + return nil + } + return err + } + + key, ok := keyIface.(string) + if !ok { + return fmt.Errorf("invalid ScopeSpans field: %#v", keyIface) + } + + switch key { + case "scope": + err = decoder.Decode(&ss.Scope) + case "spans": + err = decoder.Decode(&ss.Spans) + case "schemaUrl", "schema_url": + err = decoder.Decode(&ss.SchemaURL) + default: + // Skip unknown. + } + + if err != nil { + return err + } + } + return nil +} diff --git a/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/value.go b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/value.go new file mode 100644 index 00000000..7251492d --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/value.go @@ -0,0 +1,453 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package telemetry // import "go.opentelemetry.io/otel/trace/internal/telemetry" + +import ( + "bytes" + "cmp" + "encoding/base64" + "encoding/json" + "errors" + "fmt" + "io" + "math" + "slices" + "strconv" + "unsafe" +) + +// A Value represents a structured value. +// A zero value is valid and represents an empty value. +type Value struct { + // Ensure forward compatibility by explicitly making this not comparable. + noCmp [0]func() //nolint: unused // This is indeed used. + + // num holds the value for Int64, Float64, and Bool. It holds the length + // for String, Bytes, Slice, Map. + num uint64 + // any holds either the KindBool, KindInt64, KindFloat64, stringptr, + // bytesptr, sliceptr, or mapptr. If KindBool, KindInt64, or KindFloat64 + // then the value of Value is in num as described above. Otherwise, it + // contains the value wrapped in the appropriate type. + any any +} + +type ( + // sliceptr represents a value in Value.any for KindString Values. + stringptr *byte + // bytesptr represents a value in Value.any for KindBytes Values. + bytesptr *byte + // sliceptr represents a value in Value.any for KindSlice Values. + sliceptr *Value + // mapptr represents a value in Value.any for KindMap Values. + mapptr *Attr +) + +// ValueKind is the kind of a [Value]. +type ValueKind int + +// ValueKind values. +const ( + ValueKindEmpty ValueKind = iota + ValueKindBool + ValueKindFloat64 + ValueKindInt64 + ValueKindString + ValueKindBytes + ValueKindSlice + ValueKindMap +) + +var valueKindStrings = []string{ + "Empty", + "Bool", + "Float64", + "Int64", + "String", + "Bytes", + "Slice", + "Map", +} + +func (k ValueKind) String() string { + if k >= 0 && int(k) < len(valueKindStrings) { + return valueKindStrings[k] + } + return "" +} + +// StringValue returns a new [Value] for a string. +func StringValue(v string) Value { + return Value{ + num: uint64(len(v)), + any: stringptr(unsafe.StringData(v)), + } +} + +// IntValue returns a [Value] for an int. +func IntValue(v int) Value { return Int64Value(int64(v)) } + +// Int64Value returns a [Value] for an int64. +func Int64Value(v int64) Value { + return Value{ + num: uint64(v), // nolint: gosec // Store raw bytes. + any: ValueKindInt64, + } +} + +// Float64Value returns a [Value] for a float64. +func Float64Value(v float64) Value { + return Value{num: math.Float64bits(v), any: ValueKindFloat64} +} + +// BoolValue returns a [Value] for a bool. +func BoolValue(v bool) Value { //nolint:revive // Not a control flag. + var n uint64 + if v { + n = 1 + } + return Value{num: n, any: ValueKindBool} +} + +// BytesValue returns a [Value] for a byte slice. The passed slice must not be +// changed after it is passed. +func BytesValue(v []byte) Value { + return Value{ + num: uint64(len(v)), + any: bytesptr(unsafe.SliceData(v)), + } +} + +// SliceValue returns a [Value] for a slice of [Value]. The passed slice must +// not be changed after it is passed. +func SliceValue(vs ...Value) Value { + return Value{ + num: uint64(len(vs)), + any: sliceptr(unsafe.SliceData(vs)), + } +} + +// MapValue returns a new [Value] for a slice of key-value pairs. The passed +// slice must not be changed after it is passed. +func MapValue(kvs ...Attr) Value { + return Value{ + num: uint64(len(kvs)), + any: mapptr(unsafe.SliceData(kvs)), + } +} + +// AsString returns the value held by v as a string. +func (v Value) AsString() string { + if sp, ok := v.any.(stringptr); ok { + return unsafe.String(sp, v.num) + } + // TODO: error handle + return "" +} + +// asString returns the value held by v as a string. It will panic if the Value +// is not KindString. +func (v Value) asString() string { + return unsafe.String(v.any.(stringptr), v.num) +} + +// AsInt64 returns the value held by v as an int64. +func (v Value) AsInt64() int64 { + if v.Kind() != ValueKindInt64 { + // TODO: error handle + return 0 + } + return v.asInt64() +} + +// asInt64 returns the value held by v as an int64. If v is not of KindInt64, +// this will return garbage. +func (v Value) asInt64() int64 { + // Assumes v.num was a valid int64 (overflow not checked). + return int64(v.num) // nolint: gosec +} + +// AsBool returns the value held by v as a bool. +func (v Value) AsBool() bool { + if v.Kind() != ValueKindBool { + // TODO: error handle + return false + } + return v.asBool() +} + +// asBool returns the value held by v as a bool. If v is not of KindBool, this +// will return garbage. +func (v Value) asBool() bool { return v.num == 1 } + +// AsFloat64 returns the value held by v as a float64. +func (v Value) AsFloat64() float64 { + if v.Kind() != ValueKindFloat64 { + // TODO: error handle + return 0 + } + return v.asFloat64() +} + +// asFloat64 returns the value held by v as a float64. If v is not of +// KindFloat64, this will return garbage. +func (v Value) asFloat64() float64 { return math.Float64frombits(v.num) } + +// AsBytes returns the value held by v as a []byte. +func (v Value) AsBytes() []byte { + if sp, ok := v.any.(bytesptr); ok { + return unsafe.Slice((*byte)(sp), v.num) + } + // TODO: error handle + return nil +} + +// asBytes returns the value held by v as a []byte. It will panic if the Value +// is not KindBytes. +func (v Value) asBytes() []byte { + return unsafe.Slice((*byte)(v.any.(bytesptr)), v.num) +} + +// AsSlice returns the value held by v as a []Value. +func (v Value) AsSlice() []Value { + if sp, ok := v.any.(sliceptr); ok { + return unsafe.Slice((*Value)(sp), v.num) + } + // TODO: error handle + return nil +} + +// asSlice returns the value held by v as a []Value. It will panic if the Value +// is not KindSlice. +func (v Value) asSlice() []Value { + return unsafe.Slice((*Value)(v.any.(sliceptr)), v.num) +} + +// AsMap returns the value held by v as a []Attr. +func (v Value) AsMap() []Attr { + if sp, ok := v.any.(mapptr); ok { + return unsafe.Slice((*Attr)(sp), v.num) + } + // TODO: error handle + return nil +} + +// asMap returns the value held by v as a []Attr. It will panic if the +// Value is not KindMap. +func (v Value) asMap() []Attr { + return unsafe.Slice((*Attr)(v.any.(mapptr)), v.num) +} + +// Kind returns the Kind of v. +func (v Value) Kind() ValueKind { + switch x := v.any.(type) { + case ValueKind: + return x + case stringptr: + return ValueKindString + case bytesptr: + return ValueKindBytes + case sliceptr: + return ValueKindSlice + case mapptr: + return ValueKindMap + default: + return ValueKindEmpty + } +} + +// Empty returns if v does not hold any value. +func (v Value) Empty() bool { return v.Kind() == ValueKindEmpty } + +// Equal returns if v is equal to w. +func (v Value) Equal(w Value) bool { + k1 := v.Kind() + k2 := w.Kind() + if k1 != k2 { + return false + } + switch k1 { + case ValueKindInt64, ValueKindBool: + return v.num == w.num + case ValueKindString: + return v.asString() == w.asString() + case ValueKindFloat64: + return v.asFloat64() == w.asFloat64() + case ValueKindSlice: + return slices.EqualFunc(v.asSlice(), w.asSlice(), Value.Equal) + case ValueKindMap: + sv := sortMap(v.asMap()) + sw := sortMap(w.asMap()) + return slices.EqualFunc(sv, sw, Attr.Equal) + case ValueKindBytes: + return bytes.Equal(v.asBytes(), w.asBytes()) + case ValueKindEmpty: + return true + default: + // TODO: error handle + return false + } +} + +func sortMap(m []Attr) []Attr { + sm := make([]Attr, len(m)) + copy(sm, m) + slices.SortFunc(sm, func(a, b Attr) int { + return cmp.Compare(a.Key, b.Key) + }) + + return sm +} + +// String returns Value's value as a string, formatted like [fmt.Sprint]. +// +// The returned string is meant for debugging; +// the string representation is not stable. +func (v Value) String() string { + switch v.Kind() { + case ValueKindString: + return v.asString() + case ValueKindInt64: + // Assumes v.num was a valid int64 (overflow not checked). + return strconv.FormatInt(int64(v.num), 10) // nolint: gosec + case ValueKindFloat64: + return strconv.FormatFloat(v.asFloat64(), 'g', -1, 64) + case ValueKindBool: + return strconv.FormatBool(v.asBool()) + case ValueKindBytes: + return fmt.Sprint(v.asBytes()) + case ValueKindMap: + return fmt.Sprint(v.asMap()) + case ValueKindSlice: + return fmt.Sprint(v.asSlice()) + case ValueKindEmpty: + return "" + default: + // Try to handle this as gracefully as possible. + // + // Don't panic here. The goal here is to have developers find this + // first if a slog.Kind is is not handled. It is + // preferable to have user's open issue asking why their attributes + // have a "unhandled: " prefix than say that their code is panicking. + return fmt.Sprintf("", v.Kind()) + } +} + +// MarshalJSON encodes v into OTLP formatted JSON. +func (v *Value) MarshalJSON() ([]byte, error) { + switch v.Kind() { + case ValueKindString: + return json.Marshal(struct { + Value string `json:"stringValue"` + }{v.asString()}) + case ValueKindInt64: + return json.Marshal(struct { + Value string `json:"intValue"` + }{strconv.FormatInt(int64(v.num), 10)}) // nolint: gosec // From raw bytes. + case ValueKindFloat64: + return json.Marshal(struct { + Value float64 `json:"doubleValue"` + }{v.asFloat64()}) + case ValueKindBool: + return json.Marshal(struct { + Value bool `json:"boolValue"` + }{v.asBool()}) + case ValueKindBytes: + return json.Marshal(struct { + Value []byte `json:"bytesValue"` + }{v.asBytes()}) + case ValueKindMap: + return json.Marshal(struct { + Value struct { + Values []Attr `json:"values"` + } `json:"kvlistValue"` + }{struct { + Values []Attr `json:"values"` + }{v.asMap()}}) + case ValueKindSlice: + return json.Marshal(struct { + Value struct { + Values []Value `json:"values"` + } `json:"arrayValue"` + }{struct { + Values []Value `json:"values"` + }{v.asSlice()}}) + case ValueKindEmpty: + return nil, nil + default: + return nil, fmt.Errorf("unknown Value kind: %s", v.Kind().String()) + } +} + +// UnmarshalJSON decodes the OTLP formatted JSON contained in data into v. +func (v *Value) UnmarshalJSON(data []byte) error { + decoder := json.NewDecoder(bytes.NewReader(data)) + + t, err := decoder.Token() + if err != nil { + return err + } + if t != json.Delim('{') { + return errors.New("invalid Value type") + } + + for decoder.More() { + keyIface, err := decoder.Token() + if err != nil { + if errors.Is(err, io.EOF) { + // Empty. + return nil + } + return err + } + + key, ok := keyIface.(string) + if !ok { + return fmt.Errorf("invalid Value key: %#v", keyIface) + } + + switch key { + case "stringValue", "string_value": + var val string + err = decoder.Decode(&val) + *v = StringValue(val) + case "boolValue", "bool_value": + var val bool + err = decoder.Decode(&val) + *v = BoolValue(val) + case "intValue", "int_value": + var val protoInt64 + err = decoder.Decode(&val) + *v = Int64Value(val.Int64()) + case "doubleValue", "double_value": + var val float64 + err = decoder.Decode(&val) + *v = Float64Value(val) + case "bytesValue", "bytes_value": + var val64 string + if err := decoder.Decode(&val64); err != nil { + return err + } + var val []byte + val, err = base64.StdEncoding.DecodeString(val64) + *v = BytesValue(val) + case "arrayValue", "array_value": + var val struct{ Values []Value } + err = decoder.Decode(&val) + *v = SliceValue(val.Values...) + case "kvlistValue", "kvlist_value": + var val struct{ Values []Attr } + err = decoder.Decode(&val) + *v = MapValue(val.Values...) + default: + // Skip unknown. + continue + } + // Use first valid. Ignore the rest. + return err + } + + // Only unknown fields. Return nil without unmarshaling any value. + return nil +} diff --git a/vendor/go.opentelemetry.io/otel/trace/noop.go b/vendor/go.opentelemetry.io/otel/trace/noop.go index ca20e999..c8b1ae5d 100644 --- a/vendor/go.opentelemetry.io/otel/trace/noop.go +++ b/vendor/go.opentelemetry.io/otel/trace/noop.go @@ -82,4 +82,22 @@ func (noopSpan) AddLink(Link) {} func (noopSpan) SetName(string) {} // TracerProvider returns a no-op TracerProvider. -func (noopSpan) TracerProvider() TracerProvider { return noopTracerProvider{} } +func (s noopSpan) TracerProvider() TracerProvider { + return s.tracerProvider(autoInstEnabled) +} + +// autoInstEnabled defines if the auto-instrumentation SDK is enabled. +// +// The auto-instrumentation is expected to overwrite this value to true when it +// attaches to the process. +var autoInstEnabled = new(bool) + +// tracerProvider return a noopTracerProvider if autoEnabled is false, +// otherwise it will return a TracerProvider from the sdk package used in +// auto-instrumentation. +func (noopSpan) tracerProvider(autoEnabled *bool) TracerProvider { + if *autoEnabled { + return newAutoTracerProvider() + } + return noopTracerProvider{} +} diff --git a/vendor/go.opentelemetry.io/otel/trace/noop/README.md b/vendor/go.opentelemetry.io/otel/trace/noop/README.md new file mode 100644 index 00000000..cd382c82 --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/trace/noop/README.md @@ -0,0 +1,3 @@ +# Trace Noop + +[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/trace/noop)](https://pkg.go.dev/go.opentelemetry.io/otel/trace/noop) diff --git a/vendor/go.opentelemetry.io/otel/trace/noop/noop.go b/vendor/go.opentelemetry.io/otel/trace/noop/noop.go new file mode 100644 index 00000000..64a4f1b3 --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/trace/noop/noop.go @@ -0,0 +1,112 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Package noop provides an implementation of the OpenTelemetry trace API that +// produces no telemetry and minimizes used computation resources. +// +// Using this package to implement the OpenTelemetry trace API will effectively +// disable OpenTelemetry. +// +// This implementation can be embedded in other implementations of the +// OpenTelemetry trace API. Doing so will mean the implementation defaults to +// no operation for methods it does not implement. +package noop // import "go.opentelemetry.io/otel/trace/noop" + +import ( + "context" + + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/codes" + "go.opentelemetry.io/otel/trace" + "go.opentelemetry.io/otel/trace/embedded" +) + +var ( + // Compile-time check this implements the OpenTelemetry API. + + _ trace.TracerProvider = TracerProvider{} + _ trace.Tracer = Tracer{} + _ trace.Span = Span{} +) + +// TracerProvider is an OpenTelemetry No-Op TracerProvider. +type TracerProvider struct{ embedded.TracerProvider } + +// NewTracerProvider returns a TracerProvider that does not record any telemetry. +func NewTracerProvider() TracerProvider { + return TracerProvider{} +} + +// Tracer returns an OpenTelemetry Tracer that does not record any telemetry. +func (TracerProvider) Tracer(string, ...trace.TracerOption) trace.Tracer { + return Tracer{} +} + +// Tracer is an OpenTelemetry No-Op Tracer. +type Tracer struct{ embedded.Tracer } + +// Start creates a span. The created span will be set in a child context of ctx +// and returned with the span. +// +// If ctx contains a span context, the returned span will also contain that +// span context. If the span context in ctx is for a non-recording span, that +// span instance will be returned directly. +func (t Tracer) Start(ctx context.Context, _ string, _ ...trace.SpanStartOption) (context.Context, trace.Span) { + span := trace.SpanFromContext(ctx) + + // If the parent context contains a non-zero span context, that span + // context needs to be returned as a non-recording span + // (https://github.com/open-telemetry/opentelemetry-specification/blob/3a1dde966a4ce87cce5adf464359fe369741bbea/specification/trace/api.md#behavior-of-the-api-in-the-absence-of-an-installed-sdk). + var zeroSC trace.SpanContext + if sc := span.SpanContext(); !sc.Equal(zeroSC) { + if !span.IsRecording() { + // If the span is not recording return it directly. + return ctx, span + } + // Otherwise, return the span context needs in a non-recording span. + span = Span{sc: sc} + } else { + // No parent, return a No-Op span with an empty span context. + span = noopSpanInstance + } + return trace.ContextWithSpan(ctx, span), span +} + +var noopSpanInstance trace.Span = Span{} + +// Span is an OpenTelemetry No-Op Span. +type Span struct { + embedded.Span + + sc trace.SpanContext +} + +// SpanContext returns an empty span context. +func (s Span) SpanContext() trace.SpanContext { return s.sc } + +// IsRecording always returns false. +func (Span) IsRecording() bool { return false } + +// SetStatus does nothing. +func (Span) SetStatus(codes.Code, string) {} + +// SetAttributes does nothing. +func (Span) SetAttributes(...attribute.KeyValue) {} + +// End does nothing. +func (Span) End(...trace.SpanEndOption) {} + +// RecordError does nothing. +func (Span) RecordError(error, ...trace.EventOption) {} + +// AddEvent does nothing. +func (Span) AddEvent(string, ...trace.EventOption) {} + +// AddLink does nothing. +func (Span) AddLink(trace.Link) {} + +// SetName does nothing. +func (Span) SetName(string) {} + +// TracerProvider returns a No-Op TracerProvider. +func (Span) TracerProvider() trace.TracerProvider { return TracerProvider{} } diff --git a/vendor/go.opentelemetry.io/otel/verify_examples.sh b/vendor/go.opentelemetry.io/otel/verify_examples.sh deleted file mode 100644 index e57bf57f..00000000 --- a/vendor/go.opentelemetry.io/otel/verify_examples.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/bin/bash - -# Copyright The OpenTelemetry Authors -# SPDX-License-Identifier: Apache-2.0 - -set -euo pipefail - -cd $(dirname $0) -TOOLS_DIR=$(pwd)/.tools - -if [ -z "${GOPATH}" ] ; then - printf "GOPATH is not defined.\n" - exit -1 -fi - -if [ ! -d "${GOPATH}" ] ; then - printf "GOPATH ${GOPATH} is invalid \n" - exit -1 -fi - -# Pre-requisites -if ! git diff --quiet; then \ - git status - printf "\n\nError: working tree is not clean\n" - exit -1 -fi - -if [ "$(git tag --contains $(git log -1 --pretty=format:"%H"))" = "" ] ; then - printf "$(git log -1)" - printf "\n\nError: HEAD is not pointing to a tagged version" -fi - -make ${TOOLS_DIR}/gojq - -DIR_TMP="${GOPATH}/src/oteltmp/" -rm -rf $DIR_TMP -mkdir -p $DIR_TMP - -printf "Copy examples to ${DIR_TMP}\n" -cp -a ./example ${DIR_TMP} - -# Update go.mod files -printf "Update go.mod: rename module and remove replace\n" - -PACKAGE_DIRS=$(find . -mindepth 2 -type f -name 'go.mod' -exec dirname {} \; | egrep 'example' | sed 's/^\.\///' | sort) - -for dir in $PACKAGE_DIRS; do - printf " Update go.mod for $dir\n" - (cd "${DIR_TMP}/${dir}" && \ - # replaces is ("mod1" "mod2" …) - replaces=($(go mod edit -json | ${TOOLS_DIR}/gojq '.Replace[].Old.Path')) && \ - # strip double quotes - replaces=("${replaces[@]%\"}") && \ - replaces=("${replaces[@]#\"}") && \ - # make an array (-dropreplace=mod1 -dropreplace=mod2 …) - dropreplaces=("${replaces[@]/#/-dropreplace=}") && \ - go mod edit -module "oteltmp/${dir}" "${dropreplaces[@]}" && \ - go mod tidy) -done -printf "Update done:\n\n" - -# Build directories that contain main package. These directories are different than -# directories that contain go.mod files. -printf "Build examples:\n" -EXAMPLES=$(./get_main_pkgs.sh ./example) -for ex in $EXAMPLES; do - printf " Build $ex in ${DIR_TMP}/${ex}\n" - (cd "${DIR_TMP}/${ex}" && \ - go build .) -done - -# Cleanup -printf "Remove copied files.\n" -rm -rf $DIR_TMP diff --git a/vendor/go.opentelemetry.io/otel/version.go b/vendor/go.opentelemetry.io/otel/version.go index f67039ed..d5fa71f6 100644 --- a/vendor/go.opentelemetry.io/otel/version.go +++ b/vendor/go.opentelemetry.io/otel/version.go @@ -5,5 +5,5 @@ package otel // import "go.opentelemetry.io/otel" // Version is the current release version of OpenTelemetry in use. func Version() string { - return "1.29.0" + return "1.35.0" } diff --git a/vendor/go.opentelemetry.io/otel/versions.yaml b/vendor/go.opentelemetry.io/otel/versions.yaml index 3ba611d7..2b4cb4b4 100644 --- a/vendor/go.opentelemetry.io/otel/versions.yaml +++ b/vendor/go.opentelemetry.io/otel/versions.yaml @@ -3,19 +3,13 @@ module-sets: stable-v1: - version: v1.29.0 + version: v1.35.0 modules: - go.opentelemetry.io/otel - go.opentelemetry.io/otel/bridge/opencensus - go.opentelemetry.io/otel/bridge/opencensus/test - go.opentelemetry.io/otel/bridge/opentracing - go.opentelemetry.io/otel/bridge/opentracing/test - - go.opentelemetry.io/otel/example/dice - - go.opentelemetry.io/otel/example/namedtracer - - go.opentelemetry.io/otel/example/opencensus - - go.opentelemetry.io/otel/example/otel-collector - - go.opentelemetry.io/otel/example/passthrough - - go.opentelemetry.io/otel/example/zipkin - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp - go.opentelemetry.io/otel/exporters/otlp/otlptrace @@ -29,12 +23,11 @@ module-sets: - go.opentelemetry.io/otel/sdk/metric - go.opentelemetry.io/otel/trace experimental-metrics: - version: v0.51.0 + version: v0.57.0 modules: - - go.opentelemetry.io/otel/example/prometheus - go.opentelemetry.io/otel/exporters/prometheus experimental-logs: - version: v0.5.0 + version: v0.11.0 modules: - go.opentelemetry.io/otel/log - go.opentelemetry.io/otel/sdk/log @@ -42,8 +35,9 @@ module-sets: - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp - go.opentelemetry.io/otel/exporters/stdout/stdoutlog experimental-schema: - version: v0.0.8 + version: v0.0.12 modules: - go.opentelemetry.io/otel/schema excluded-modules: - go.opentelemetry.io/otel/internal/tools + - go.opentelemetry.io/otel/trace/internal/telemetry/test diff --git a/vendor/golang.org/x/exp/LICENSE b/vendor/golang.org/x/exp/LICENSE index 6a66aea5..2a7cf70d 100644 --- a/vendor/golang.org/x/exp/LICENSE +++ b/vendor/golang.org/x/exp/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/vendor/golang.org/x/exp/slices/sort.go b/vendor/golang.org/x/exp/slices/sort.go index b67897f7..f58bbc7b 100644 --- a/vendor/golang.org/x/exp/slices/sort.go +++ b/vendor/golang.org/x/exp/slices/sort.go @@ -22,10 +22,12 @@ func Sort[S ~[]E, E constraints.Ordered](x S) { // SortFunc sorts the slice x in ascending order as determined by the cmp // function. This sort is not guaranteed to be stable. // cmp(a, b) should return a negative number when a < b, a positive number when -// a > b and zero when a == b. +// a > b and zero when a == b or when a is not comparable to b in the sense +// of the formal definition of Strict Weak Ordering. // // SortFunc requires that cmp is a strict weak ordering. // See https://en.wikipedia.org/wiki/Weak_ordering#Strict_weak_orderings. +// To indicate 'uncomparable', return 0 from the function. func SortFunc[S ~[]E, E any](x S, cmp func(a, b E) int) { n := len(x) pdqsortCmpFunc(x, 0, n, bits.Len(uint(n)), cmp) diff --git a/vendor/golang.org/x/mod/LICENSE b/vendor/golang.org/x/mod/LICENSE index 6a66aea5..2a7cf70d 100644 --- a/vendor/golang.org/x/mod/LICENSE +++ b/vendor/golang.org/x/mod/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/vendor/golang.org/x/net/html/atom/table.go b/vendor/golang.org/x/net/html/atom/table.go index 2a938864..b460e6f7 100644 --- a/vendor/golang.org/x/net/html/atom/table.go +++ b/vendor/golang.org/x/net/html/atom/table.go @@ -11,23 +11,23 @@ const ( AcceptCharset Atom = 0x1a0e Accesskey Atom = 0x2c09 Acronym Atom = 0xaa07 - Action Atom = 0x27206 - Address Atom = 0x6f307 + Action Atom = 0x26506 + Address Atom = 0x6f107 Align Atom = 0xb105 - Allowfullscreen Atom = 0x2080f + Allowfullscreen Atom = 0x3280f Allowpaymentrequest Atom = 0xc113 Allowusermedia Atom = 0xdd0e Alt Atom = 0xf303 Annotation Atom = 0x1c90a AnnotationXml Atom = 0x1c90e - Applet Atom = 0x31906 - Area Atom = 0x35604 - Article Atom = 0x3fc07 + Applet Atom = 0x30806 + Area Atom = 0x35004 + Article Atom = 0x3f607 As Atom = 0x3c02 Aside Atom = 0x10705 Async Atom = 0xff05 Audio Atom = 0x11505 - Autocomplete Atom = 0x2780c + Autocomplete Atom = 0x26b0c Autofocus Atom = 0x12109 Autoplay Atom = 0x13c08 B Atom = 0x101 @@ -43,34 +43,34 @@ const ( Br Atom = 0x202 Button Atom = 0x19106 Canvas Atom = 0x10306 - Caption Atom = 0x23107 - Center Atom = 0x22006 - Challenge Atom = 0x29b09 + Caption Atom = 0x22407 + Center Atom = 0x21306 + Challenge Atom = 0x28e09 Charset Atom = 0x2107 - Checked Atom = 0x47907 + Checked Atom = 0x5b507 Cite Atom = 0x19c04 - Class Atom = 0x56405 - Code Atom = 0x5c504 + Class Atom = 0x55805 + Code Atom = 0x5ee04 Col Atom = 0x1ab03 Colgroup Atom = 0x1ab08 Color Atom = 0x1bf05 Cols Atom = 0x1c404 Colspan Atom = 0x1c407 Command Atom = 0x1d707 - Content Atom = 0x58b07 - Contenteditable Atom = 0x58b0f - Contextmenu Atom = 0x3800b + Content Atom = 0x57b07 + Contenteditable Atom = 0x57b0f + Contextmenu Atom = 0x37a0b Controls Atom = 0x1de08 - Coords Atom = 0x1ea06 - Crossorigin Atom = 0x1fb0b - Data Atom = 0x4a504 - Datalist Atom = 0x4a508 - Datetime Atom = 0x2b808 - Dd Atom = 0x2d702 + Coords Atom = 0x1f006 + Crossorigin Atom = 0x1fa0b + Data Atom = 0x49904 + Datalist Atom = 0x49908 + Datetime Atom = 0x2ab08 + Dd Atom = 0x2bf02 Default Atom = 0x10a07 - Defer Atom = 0x5c705 - Del Atom = 0x45203 - Desc Atom = 0x56104 + Defer Atom = 0x5f005 + Del Atom = 0x44c03 + Desc Atom = 0x55504 Details Atom = 0x7207 Dfn Atom = 0x8703 Dialog Atom = 0xbb06 @@ -78,106 +78,106 @@ const ( Dirname Atom = 0x9307 Disabled Atom = 0x16408 Div Atom = 0x16b03 - Dl Atom = 0x5e602 - Download Atom = 0x46308 + Dl Atom = 0x5d602 + Download Atom = 0x45d08 Draggable Atom = 0x17a09 - Dropzone Atom = 0x40508 - Dt Atom = 0x64b02 + Dropzone Atom = 0x3ff08 + Dt Atom = 0x64002 Em Atom = 0x6e02 Embed Atom = 0x6e05 - Enctype Atom = 0x28d07 - Face Atom = 0x21e04 - Fieldset Atom = 0x22608 - Figcaption Atom = 0x22e0a - Figure Atom = 0x24806 + Enctype Atom = 0x28007 + Face Atom = 0x21104 + Fieldset Atom = 0x21908 + Figcaption Atom = 0x2210a + Figure Atom = 0x23b06 Font Atom = 0x3f04 Footer Atom = 0xf606 - For Atom = 0x25403 - ForeignObject Atom = 0x2540d - Foreignobject Atom = 0x2610d - Form Atom = 0x26e04 - Formaction Atom = 0x26e0a - Formenctype Atom = 0x2890b - Formmethod Atom = 0x2a40a - Formnovalidate Atom = 0x2ae0e - Formtarget Atom = 0x2c00a + For Atom = 0x24703 + ForeignObject Atom = 0x2470d + Foreignobject Atom = 0x2540d + Form Atom = 0x26104 + Formaction Atom = 0x2610a + Formenctype Atom = 0x27c0b + Formmethod Atom = 0x2970a + Formnovalidate Atom = 0x2a10e + Formtarget Atom = 0x2b30a Frame Atom = 0x8b05 Frameset Atom = 0x8b08 H1 Atom = 0x15c02 - H2 Atom = 0x2de02 - H3 Atom = 0x30d02 - H4 Atom = 0x34502 - H5 Atom = 0x34f02 - H6 Atom = 0x64d02 - Head Atom = 0x33104 - Header Atom = 0x33106 - Headers Atom = 0x33107 + H2 Atom = 0x56102 + H3 Atom = 0x2cd02 + H4 Atom = 0x2fc02 + H5 Atom = 0x33f02 + H6 Atom = 0x34902 + Head Atom = 0x32004 + Header Atom = 0x32006 + Headers Atom = 0x32007 Height Atom = 0x5206 - Hgroup Atom = 0x2ca06 - Hidden Atom = 0x2d506 - High Atom = 0x2db04 + Hgroup Atom = 0x64206 + Hidden Atom = 0x2bd06 + High Atom = 0x2ca04 Hr Atom = 0x15702 - Href Atom = 0x2e004 - Hreflang Atom = 0x2e008 + Href Atom = 0x2cf04 + Hreflang Atom = 0x2cf08 Html Atom = 0x5604 - HttpEquiv Atom = 0x2e80a + HttpEquiv Atom = 0x2d70a I Atom = 0x601 - Icon Atom = 0x58a04 + Icon Atom = 0x57a04 Id Atom = 0x10902 - Iframe Atom = 0x2fc06 - Image Atom = 0x30205 - Img Atom = 0x30703 - Input Atom = 0x44b05 - Inputmode Atom = 0x44b09 - Ins Atom = 0x20403 - Integrity Atom = 0x23f09 + Iframe Atom = 0x2eb06 + Image Atom = 0x2f105 + Img Atom = 0x2f603 + Input Atom = 0x44505 + Inputmode Atom = 0x44509 + Ins Atom = 0x20303 + Integrity Atom = 0x23209 Is Atom = 0x16502 - Isindex Atom = 0x30f07 - Ismap Atom = 0x31605 - Itemid Atom = 0x38b06 + Isindex Atom = 0x2fe07 + Ismap Atom = 0x30505 + Itemid Atom = 0x38506 Itemprop Atom = 0x19d08 - Itemref Atom = 0x3cd07 - Itemscope Atom = 0x67109 - Itemtype Atom = 0x31f08 + Itemref Atom = 0x3c707 + Itemscope Atom = 0x66f09 + Itemtype Atom = 0x30e08 Kbd Atom = 0xb903 Keygen Atom = 0x3206 Keytype Atom = 0xd607 Kind Atom = 0x17704 Label Atom = 0x5905 - Lang Atom = 0x2e404 + Lang Atom = 0x2d304 Legend Atom = 0x18106 Li Atom = 0xb202 Link Atom = 0x17404 - List Atom = 0x4a904 - Listing Atom = 0x4a907 + List Atom = 0x49d04 + Listing Atom = 0x49d07 Loop Atom = 0x5d04 Low Atom = 0xc303 Main Atom = 0x1004 Malignmark Atom = 0xb00a - Manifest Atom = 0x6d708 - Map Atom = 0x31803 + Manifest Atom = 0x6d508 + Map Atom = 0x30703 Mark Atom = 0xb604 - Marquee Atom = 0x32707 - Math Atom = 0x32e04 - Max Atom = 0x33d03 - Maxlength Atom = 0x33d09 + Marquee Atom = 0x31607 + Math Atom = 0x31d04 + Max Atom = 0x33703 + Maxlength Atom = 0x33709 Media Atom = 0xe605 Mediagroup Atom = 0xe60a - Menu Atom = 0x38704 - Menuitem Atom = 0x38708 - Meta Atom = 0x4b804 + Menu Atom = 0x38104 + Menuitem Atom = 0x38108 + Meta Atom = 0x4ac04 Meter Atom = 0x9805 - Method Atom = 0x2a806 - Mglyph Atom = 0x30806 - Mi Atom = 0x34702 - Min Atom = 0x34703 - Minlength Atom = 0x34709 - Mn Atom = 0x2b102 + Method Atom = 0x29b06 + Mglyph Atom = 0x2f706 + Mi Atom = 0x34102 + Min Atom = 0x34103 + Minlength Atom = 0x34109 + Mn Atom = 0x2a402 Mo Atom = 0xa402 - Ms Atom = 0x67402 - Mtext Atom = 0x35105 - Multiple Atom = 0x35f08 - Muted Atom = 0x36705 + Ms Atom = 0x67202 + Mtext Atom = 0x34b05 + Multiple Atom = 0x35908 + Muted Atom = 0x36105 Name Atom = 0x9604 Nav Atom = 0x1303 Nobr Atom = 0x3704 @@ -185,101 +185,101 @@ const ( Noframes Atom = 0x8908 Nomodule Atom = 0xa208 Nonce Atom = 0x1a605 - Noscript Atom = 0x21608 - Novalidate Atom = 0x2b20a - Object Atom = 0x26806 + Noscript Atom = 0x2c208 + Novalidate Atom = 0x2a50a + Object Atom = 0x25b06 Ol Atom = 0x13702 Onabort Atom = 0x19507 - Onafterprint Atom = 0x2360c - Onautocomplete Atom = 0x2760e - Onautocompleteerror Atom = 0x27613 - Onauxclick Atom = 0x61f0a - Onbeforeprint Atom = 0x69e0d - Onbeforeunload Atom = 0x6e70e - Onblur Atom = 0x56d06 + Onafterprint Atom = 0x2290c + Onautocomplete Atom = 0x2690e + Onautocompleteerror Atom = 0x26913 + Onauxclick Atom = 0x6140a + Onbeforeprint Atom = 0x69c0d + Onbeforeunload Atom = 0x6e50e + Onblur Atom = 0x1ea06 Oncancel Atom = 0x11908 Oncanplay Atom = 0x14d09 Oncanplaythrough Atom = 0x14d10 - Onchange Atom = 0x41b08 - Onclick Atom = 0x2f507 - Onclose Atom = 0x36c07 - Oncontextmenu Atom = 0x37e0d - Oncopy Atom = 0x39106 - Oncuechange Atom = 0x3970b - Oncut Atom = 0x3a205 - Ondblclick Atom = 0x3a70a - Ondrag Atom = 0x3b106 - Ondragend Atom = 0x3b109 - Ondragenter Atom = 0x3ba0b - Ondragexit Atom = 0x3c50a - Ondragleave Atom = 0x3df0b - Ondragover Atom = 0x3ea0a - Ondragstart Atom = 0x3f40b - Ondrop Atom = 0x40306 - Ondurationchange Atom = 0x41310 - Onemptied Atom = 0x40a09 - Onended Atom = 0x42307 - Onerror Atom = 0x42a07 - Onfocus Atom = 0x43107 - Onhashchange Atom = 0x43d0c - Oninput Atom = 0x44907 - Oninvalid Atom = 0x45509 - Onkeydown Atom = 0x45e09 - Onkeypress Atom = 0x46b0a - Onkeyup Atom = 0x48007 - Onlanguagechange Atom = 0x48d10 - Onload Atom = 0x49d06 - Onloadeddata Atom = 0x49d0c - Onloadedmetadata Atom = 0x4b010 - Onloadend Atom = 0x4c609 - Onloadstart Atom = 0x4cf0b - Onmessage Atom = 0x4da09 - Onmessageerror Atom = 0x4da0e - Onmousedown Atom = 0x4e80b - Onmouseenter Atom = 0x4f30c - Onmouseleave Atom = 0x4ff0c - Onmousemove Atom = 0x50b0b - Onmouseout Atom = 0x5160a - Onmouseover Atom = 0x5230b - Onmouseup Atom = 0x52e09 - Onmousewheel Atom = 0x53c0c - Onoffline Atom = 0x54809 - Ononline Atom = 0x55108 - Onpagehide Atom = 0x5590a - Onpageshow Atom = 0x5730a - Onpaste Atom = 0x57f07 - Onpause Atom = 0x59a07 - Onplay Atom = 0x5a406 - Onplaying Atom = 0x5a409 - Onpopstate Atom = 0x5ad0a - Onprogress Atom = 0x5b70a - Onratechange Atom = 0x5cc0c - Onrejectionhandled Atom = 0x5d812 - Onreset Atom = 0x5ea07 - Onresize Atom = 0x5f108 - Onscroll Atom = 0x60008 - Onsecuritypolicyviolation Atom = 0x60819 - Onseeked Atom = 0x62908 - Onseeking Atom = 0x63109 - Onselect Atom = 0x63a08 - Onshow Atom = 0x64406 - Onsort Atom = 0x64f06 - Onstalled Atom = 0x65909 - Onstorage Atom = 0x66209 - Onsubmit Atom = 0x66b08 - Onsuspend Atom = 0x67b09 + Onchange Atom = 0x41508 + Onclick Atom = 0x2e407 + Onclose Atom = 0x36607 + Oncontextmenu Atom = 0x3780d + Oncopy Atom = 0x38b06 + Oncuechange Atom = 0x3910b + Oncut Atom = 0x39c05 + Ondblclick Atom = 0x3a10a + Ondrag Atom = 0x3ab06 + Ondragend Atom = 0x3ab09 + Ondragenter Atom = 0x3b40b + Ondragexit Atom = 0x3bf0a + Ondragleave Atom = 0x3d90b + Ondragover Atom = 0x3e40a + Ondragstart Atom = 0x3ee0b + Ondrop Atom = 0x3fd06 + Ondurationchange Atom = 0x40d10 + Onemptied Atom = 0x40409 + Onended Atom = 0x41d07 + Onerror Atom = 0x42407 + Onfocus Atom = 0x42b07 + Onhashchange Atom = 0x4370c + Oninput Atom = 0x44307 + Oninvalid Atom = 0x44f09 + Onkeydown Atom = 0x45809 + Onkeypress Atom = 0x4650a + Onkeyup Atom = 0x47407 + Onlanguagechange Atom = 0x48110 + Onload Atom = 0x49106 + Onloadeddata Atom = 0x4910c + Onloadedmetadata Atom = 0x4a410 + Onloadend Atom = 0x4ba09 + Onloadstart Atom = 0x4c30b + Onmessage Atom = 0x4ce09 + Onmessageerror Atom = 0x4ce0e + Onmousedown Atom = 0x4dc0b + Onmouseenter Atom = 0x4e70c + Onmouseleave Atom = 0x4f30c + Onmousemove Atom = 0x4ff0b + Onmouseout Atom = 0x50a0a + Onmouseover Atom = 0x5170b + Onmouseup Atom = 0x52209 + Onmousewheel Atom = 0x5300c + Onoffline Atom = 0x53c09 + Ononline Atom = 0x54508 + Onpagehide Atom = 0x54d0a + Onpageshow Atom = 0x5630a + Onpaste Atom = 0x56f07 + Onpause Atom = 0x58a07 + Onplay Atom = 0x59406 + Onplaying Atom = 0x59409 + Onpopstate Atom = 0x59d0a + Onprogress Atom = 0x5a70a + Onratechange Atom = 0x5bc0c + Onrejectionhandled Atom = 0x5c812 + Onreset Atom = 0x5da07 + Onresize Atom = 0x5e108 + Onscroll Atom = 0x5f508 + Onsecuritypolicyviolation Atom = 0x5fd19 + Onseeked Atom = 0x61e08 + Onseeking Atom = 0x62609 + Onselect Atom = 0x62f08 + Onshow Atom = 0x63906 + Onsort Atom = 0x64d06 + Onstalled Atom = 0x65709 + Onstorage Atom = 0x66009 + Onsubmit Atom = 0x66908 + Onsuspend Atom = 0x67909 Ontimeupdate Atom = 0x400c - Ontoggle Atom = 0x68408 - Onunhandledrejection Atom = 0x68c14 - Onunload Atom = 0x6ab08 - Onvolumechange Atom = 0x6b30e - Onwaiting Atom = 0x6c109 - Onwheel Atom = 0x6ca07 + Ontoggle Atom = 0x68208 + Onunhandledrejection Atom = 0x68a14 + Onunload Atom = 0x6a908 + Onvolumechange Atom = 0x6b10e + Onwaiting Atom = 0x6bf09 + Onwheel Atom = 0x6c807 Open Atom = 0x1a304 Optgroup Atom = 0x5f08 - Optimum Atom = 0x6d107 - Option Atom = 0x6e306 - Output Atom = 0x51d06 + Optimum Atom = 0x6cf07 + Option Atom = 0x6e106 + Output Atom = 0x51106 P Atom = 0xc01 Param Atom = 0xc05 Pattern Atom = 0x6607 @@ -288,466 +288,468 @@ const ( Placeholder Atom = 0x1310b Plaintext Atom = 0x1b209 Playsinline Atom = 0x1400b - Poster Atom = 0x2cf06 - Pre Atom = 0x47003 - Preload Atom = 0x48607 - Progress Atom = 0x5b908 - Prompt Atom = 0x53606 - Public Atom = 0x58606 + Poster Atom = 0x64706 + Pre Atom = 0x46a03 + Preload Atom = 0x47a07 + Progress Atom = 0x5a908 + Prompt Atom = 0x52a06 + Public Atom = 0x57606 Q Atom = 0xcf01 Radiogroup Atom = 0x30a Rb Atom = 0x3a02 - Readonly Atom = 0x35708 - Referrerpolicy Atom = 0x3d10e - Rel Atom = 0x48703 - Required Atom = 0x24c08 + Readonly Atom = 0x35108 + Referrerpolicy Atom = 0x3cb0e + Rel Atom = 0x47b03 + Required Atom = 0x23f08 Reversed Atom = 0x8008 Rows Atom = 0x9c04 Rowspan Atom = 0x9c07 - Rp Atom = 0x23c02 + Rp Atom = 0x22f02 Rt Atom = 0x19a02 Rtc Atom = 0x19a03 Ruby Atom = 0xfb04 S Atom = 0x2501 Samp Atom = 0x7804 Sandbox Atom = 0x12907 - Scope Atom = 0x67505 - Scoped Atom = 0x67506 - Script Atom = 0x21806 - Seamless Atom = 0x37108 - Section Atom = 0x56807 - Select Atom = 0x63c06 - Selected Atom = 0x63c08 - Shape Atom = 0x1e505 - Size Atom = 0x5f504 - Sizes Atom = 0x5f505 - Slot Atom = 0x1ef04 - Small Atom = 0x20605 - Sortable Atom = 0x65108 - Sorted Atom = 0x33706 - Source Atom = 0x37806 - Spacer Atom = 0x43706 + Scope Atom = 0x67305 + Scoped Atom = 0x67306 + Script Atom = 0x2c406 + Seamless Atom = 0x36b08 + Search Atom = 0x55c06 + Section Atom = 0x1e507 + Select Atom = 0x63106 + Selected Atom = 0x63108 + Shape Atom = 0x1f505 + Size Atom = 0x5e504 + Sizes Atom = 0x5e505 + Slot Atom = 0x20504 + Small Atom = 0x32605 + Sortable Atom = 0x64f08 + Sorted Atom = 0x37206 + Source Atom = 0x43106 + Spacer Atom = 0x46e06 Span Atom = 0x9f04 - Spellcheck Atom = 0x4740a - Src Atom = 0x5c003 - Srcdoc Atom = 0x5c006 - Srclang Atom = 0x5f907 - Srcset Atom = 0x6f906 - Start Atom = 0x3fa05 - Step Atom = 0x58304 + Spellcheck Atom = 0x5b00a + Src Atom = 0x5e903 + Srcdoc Atom = 0x5e906 + Srclang Atom = 0x6f707 + Srcset Atom = 0x6fe06 + Start Atom = 0x3f405 + Step Atom = 0x57304 Strike Atom = 0xd206 - Strong Atom = 0x6dd06 - Style Atom = 0x6ff05 - Sub Atom = 0x66d03 - Summary Atom = 0x70407 - Sup Atom = 0x70b03 - Svg Atom = 0x70e03 - System Atom = 0x71106 - Tabindex Atom = 0x4be08 - Table Atom = 0x59505 - Target Atom = 0x2c406 + Strong Atom = 0x6db06 + Style Atom = 0x70405 + Sub Atom = 0x66b03 + Summary Atom = 0x70907 + Sup Atom = 0x71003 + Svg Atom = 0x71303 + System Atom = 0x71606 + Tabindex Atom = 0x4b208 + Table Atom = 0x58505 + Target Atom = 0x2b706 Tbody Atom = 0x2705 Td Atom = 0x9202 - Template Atom = 0x71408 - Textarea Atom = 0x35208 + Template Atom = 0x71908 + Textarea Atom = 0x34c08 Tfoot Atom = 0xf505 Th Atom = 0x15602 - Thead Atom = 0x33005 + Thead Atom = 0x31f05 Time Atom = 0x4204 Title Atom = 0x11005 Tr Atom = 0xcc02 Track Atom = 0x1ba05 - Translate Atom = 0x1f209 + Translate Atom = 0x20809 Tt Atom = 0x6802 Type Atom = 0xd904 - Typemustmatch Atom = 0x2900d + Typemustmatch Atom = 0x2830d U Atom = 0xb01 Ul Atom = 0xa702 Updateviacache Atom = 0x460e - Usemap Atom = 0x59e06 + Usemap Atom = 0x58e06 Value Atom = 0x1505 Var Atom = 0x16d03 - Video Atom = 0x2f105 - Wbr Atom = 0x57c03 - Width Atom = 0x64905 - Workertype Atom = 0x71c0a - Wrap Atom = 0x72604 + Video Atom = 0x2e005 + Wbr Atom = 0x56c03 + Width Atom = 0x63e05 + Workertype Atom = 0x7210a + Wrap Atom = 0x72b04 Xmp Atom = 0x12f03 ) -const hash0 = 0x81cdf10e +const hash0 = 0x84f70e16 const maxAtomLen = 25 var table = [1 << 9]Atom{ - 0x1: 0xe60a, // mediagroup - 0x2: 0x2e404, // lang - 0x4: 0x2c09, // accesskey - 0x5: 0x8b08, // frameset - 0x7: 0x63a08, // onselect - 0x8: 0x71106, // system - 0xa: 0x64905, // width - 0xc: 0x2890b, // formenctype - 0xd: 0x13702, // ol - 0xe: 0x3970b, // oncuechange - 0x10: 0x14b03, // bdo - 0x11: 0x11505, // audio - 0x12: 0x17a09, // draggable - 0x14: 0x2f105, // video - 0x15: 0x2b102, // mn - 0x16: 0x38704, // menu - 0x17: 0x2cf06, // poster - 0x19: 0xf606, // footer - 0x1a: 0x2a806, // method - 0x1b: 0x2b808, // datetime - 0x1c: 0x19507, // onabort - 0x1d: 0x460e, // updateviacache - 0x1e: 0xff05, // async - 0x1f: 0x49d06, // onload - 0x21: 0x11908, // oncancel - 0x22: 0x62908, // onseeked - 0x23: 0x30205, // image - 0x24: 0x5d812, // onrejectionhandled - 0x26: 0x17404, // link - 0x27: 0x51d06, // output - 0x28: 0x33104, // head - 0x29: 0x4ff0c, // onmouseleave - 0x2a: 0x57f07, // onpaste - 0x2b: 0x5a409, // onplaying - 0x2c: 0x1c407, // colspan - 0x2f: 0x1bf05, // color - 0x30: 0x5f504, // size - 0x31: 0x2e80a, // http-equiv - 0x33: 0x601, // i - 0x34: 0x5590a, // onpagehide - 0x35: 0x68c14, // onunhandledrejection - 0x37: 0x42a07, // onerror - 0x3a: 0x3b08, // basefont - 0x3f: 0x1303, // nav - 0x40: 0x17704, // kind - 0x41: 0x35708, // readonly - 0x42: 0x30806, // mglyph - 0x44: 0xb202, // li - 0x46: 0x2d506, // hidden - 0x47: 0x70e03, // svg - 0x48: 0x58304, // step - 0x49: 0x23f09, // integrity - 0x4a: 0x58606, // public - 0x4c: 0x1ab03, // col - 0x4d: 0x1870a, // blockquote - 0x4e: 0x34f02, // h5 - 0x50: 0x5b908, // progress - 0x51: 0x5f505, // sizes - 0x52: 0x34502, // h4 - 0x56: 0x33005, // thead - 0x57: 0xd607, // keytype - 0x58: 0x5b70a, // onprogress - 0x59: 0x44b09, // inputmode - 0x5a: 0x3b109, // ondragend - 0x5d: 0x3a205, // oncut - 0x5e: 0x43706, // spacer - 0x5f: 0x1ab08, // colgroup - 0x62: 0x16502, // is - 0x65: 0x3c02, // as - 0x66: 0x54809, // onoffline - 0x67: 0x33706, // sorted - 0x69: 0x48d10, // onlanguagechange - 0x6c: 0x43d0c, // onhashchange - 0x6d: 0x9604, // name - 0x6e: 0xf505, // tfoot - 0x6f: 0x56104, // desc - 0x70: 0x33d03, // max - 0x72: 0x1ea06, // coords - 0x73: 0x30d02, // h3 - 0x74: 0x6e70e, // onbeforeunload - 0x75: 0x9c04, // rows - 0x76: 0x63c06, // select - 0x77: 0x9805, // meter - 0x78: 0x38b06, // itemid - 0x79: 0x53c0c, // onmousewheel - 0x7a: 0x5c006, // srcdoc - 0x7d: 0x1ba05, // track - 0x7f: 0x31f08, // itemtype - 0x82: 0xa402, // mo - 0x83: 0x41b08, // onchange - 0x84: 0x33107, // headers - 0x85: 0x5cc0c, // onratechange - 0x86: 0x60819, // onsecuritypolicyviolation - 0x88: 0x4a508, // datalist - 0x89: 0x4e80b, // onmousedown - 0x8a: 0x1ef04, // slot - 0x8b: 0x4b010, // onloadedmetadata - 0x8c: 0x1a06, // accept - 0x8d: 0x26806, // object - 0x91: 0x6b30e, // onvolumechange - 0x92: 0x2107, // charset - 0x93: 0x27613, // onautocompleteerror - 0x94: 0xc113, // allowpaymentrequest - 0x95: 0x2804, // body - 0x96: 0x10a07, // default - 0x97: 0x63c08, // selected - 0x98: 0x21e04, // face - 0x99: 0x1e505, // shape - 0x9b: 0x68408, // ontoggle - 0x9e: 0x64b02, // dt - 0x9f: 0xb604, // mark - 0xa1: 0xb01, // u - 0xa4: 0x6ab08, // onunload - 0xa5: 0x5d04, // loop - 0xa6: 0x16408, // disabled - 0xaa: 0x42307, // onended - 0xab: 0xb00a, // malignmark - 0xad: 0x67b09, // onsuspend - 0xae: 0x35105, // mtext - 0xaf: 0x64f06, // onsort - 0xb0: 0x19d08, // itemprop - 0xb3: 0x67109, // itemscope - 0xb4: 0x17305, // blink - 0xb6: 0x3b106, // ondrag - 0xb7: 0xa702, // ul - 0xb8: 0x26e04, // form - 0xb9: 0x12907, // sandbox - 0xba: 0x8b05, // frame - 0xbb: 0x1505, // value - 0xbc: 0x66209, // onstorage - 0xbf: 0xaa07, // acronym - 0xc0: 0x19a02, // rt - 0xc2: 0x202, // br - 0xc3: 0x22608, // fieldset - 0xc4: 0x2900d, // typemustmatch - 0xc5: 0xa208, // nomodule - 0xc6: 0x6c07, // noembed - 0xc7: 0x69e0d, // onbeforeprint - 0xc8: 0x19106, // button - 0xc9: 0x2f507, // onclick - 0xca: 0x70407, // summary - 0xcd: 0xfb04, // ruby - 0xce: 0x56405, // class - 0xcf: 0x3f40b, // ondragstart - 0xd0: 0x23107, // caption - 0xd4: 0xdd0e, // allowusermedia - 0xd5: 0x4cf0b, // onloadstart - 0xd9: 0x16b03, // div - 0xda: 0x4a904, // list - 0xdb: 0x32e04, // math - 0xdc: 0x44b05, // input - 0xdf: 0x3ea0a, // ondragover - 0xe0: 0x2de02, // h2 - 0xe2: 0x1b209, // plaintext - 0xe4: 0x4f30c, // onmouseenter - 0xe7: 0x47907, // checked - 0xe8: 0x47003, // pre - 0xea: 0x35f08, // multiple - 0xeb: 0xba03, // bdi - 0xec: 0x33d09, // maxlength - 0xed: 0xcf01, // q - 0xee: 0x61f0a, // onauxclick - 0xf0: 0x57c03, // wbr - 0xf2: 0x3b04, // base - 0xf3: 0x6e306, // option - 0xf5: 0x41310, // ondurationchange - 0xf7: 0x8908, // noframes - 0xf9: 0x40508, // dropzone - 0xfb: 0x67505, // scope - 0xfc: 0x8008, // reversed - 0xfd: 0x3ba0b, // ondragenter - 0xfe: 0x3fa05, // start - 0xff: 0x12f03, // xmp - 0x100: 0x5f907, // srclang - 0x101: 0x30703, // img - 0x104: 0x101, // b - 0x105: 0x25403, // for - 0x106: 0x10705, // aside - 0x107: 0x44907, // oninput - 0x108: 0x35604, // area - 0x109: 0x2a40a, // formmethod - 0x10a: 0x72604, // wrap - 0x10c: 0x23c02, // rp - 0x10d: 0x46b0a, // onkeypress - 0x10e: 0x6802, // tt - 0x110: 0x34702, // mi - 0x111: 0x36705, // muted - 0x112: 0xf303, // alt - 0x113: 0x5c504, // code - 0x114: 0x6e02, // em - 0x115: 0x3c50a, // ondragexit - 0x117: 0x9f04, // span - 0x119: 0x6d708, // manifest - 0x11a: 0x38708, // menuitem - 0x11b: 0x58b07, // content - 0x11d: 0x6c109, // onwaiting - 0x11f: 0x4c609, // onloadend - 0x121: 0x37e0d, // oncontextmenu - 0x123: 0x56d06, // onblur - 0x124: 0x3fc07, // article - 0x125: 0x9303, // dir - 0x126: 0xef04, // ping - 0x127: 0x24c08, // required - 0x128: 0x45509, // oninvalid - 0x129: 0xb105, // align - 0x12b: 0x58a04, // icon - 0x12c: 0x64d02, // h6 - 0x12d: 0x1c404, // cols - 0x12e: 0x22e0a, // figcaption - 0x12f: 0x45e09, // onkeydown - 0x130: 0x66b08, // onsubmit - 0x131: 0x14d09, // oncanplay - 0x132: 0x70b03, // sup - 0x133: 0xc01, // p - 0x135: 0x40a09, // onemptied - 0x136: 0x39106, // oncopy - 0x137: 0x19c04, // cite - 0x138: 0x3a70a, // ondblclick - 0x13a: 0x50b0b, // onmousemove - 0x13c: 0x66d03, // sub - 0x13d: 0x48703, // rel - 0x13e: 0x5f08, // optgroup - 0x142: 0x9c07, // rowspan - 0x143: 0x37806, // source - 0x144: 0x21608, // noscript - 0x145: 0x1a304, // open - 0x146: 0x20403, // ins - 0x147: 0x2540d, // foreignObject - 0x148: 0x5ad0a, // onpopstate - 0x14a: 0x28d07, // enctype - 0x14b: 0x2760e, // onautocomplete - 0x14c: 0x35208, // textarea - 0x14e: 0x2780c, // autocomplete - 0x14f: 0x15702, // hr - 0x150: 0x1de08, // controls - 0x151: 0x10902, // id - 0x153: 0x2360c, // onafterprint - 0x155: 0x2610d, // foreignobject - 0x156: 0x32707, // marquee - 0x157: 0x59a07, // onpause - 0x158: 0x5e602, // dl - 0x159: 0x5206, // height - 0x15a: 0x34703, // min - 0x15b: 0x9307, // dirname - 0x15c: 0x1f209, // translate - 0x15d: 0x5604, // html - 0x15e: 0x34709, // minlength - 0x15f: 0x48607, // preload - 0x160: 0x71408, // template - 0x161: 0x3df0b, // ondragleave - 0x162: 0x3a02, // rb - 0x164: 0x5c003, // src - 0x165: 0x6dd06, // strong - 0x167: 0x7804, // samp - 0x168: 0x6f307, // address - 0x169: 0x55108, // ononline - 0x16b: 0x1310b, // placeholder - 0x16c: 0x2c406, // target - 0x16d: 0x20605, // small - 0x16e: 0x6ca07, // onwheel - 0x16f: 0x1c90a, // annotation - 0x170: 0x4740a, // spellcheck - 0x171: 0x7207, // details - 0x172: 0x10306, // canvas - 0x173: 0x12109, // autofocus - 0x174: 0xc05, // param - 0x176: 0x46308, // download - 0x177: 0x45203, // del - 0x178: 0x36c07, // onclose - 0x179: 0xb903, // kbd - 0x17a: 0x31906, // applet - 0x17b: 0x2e004, // href - 0x17c: 0x5f108, // onresize - 0x17e: 0x49d0c, // onloadeddata - 0x180: 0xcc02, // tr - 0x181: 0x2c00a, // formtarget - 0x182: 0x11005, // title - 0x183: 0x6ff05, // style - 0x184: 0xd206, // strike - 0x185: 0x59e06, // usemap - 0x186: 0x2fc06, // iframe - 0x187: 0x1004, // main - 0x189: 0x7b07, // picture - 0x18c: 0x31605, // ismap - 0x18e: 0x4a504, // data - 0x18f: 0x5905, // label - 0x191: 0x3d10e, // referrerpolicy - 0x192: 0x15602, // th - 0x194: 0x53606, // prompt - 0x195: 0x56807, // section - 0x197: 0x6d107, // optimum - 0x198: 0x2db04, // high - 0x199: 0x15c02, // h1 - 0x19a: 0x65909, // onstalled - 0x19b: 0x16d03, // var - 0x19c: 0x4204, // time - 0x19e: 0x67402, // ms - 0x19f: 0x33106, // header - 0x1a0: 0x4da09, // onmessage - 0x1a1: 0x1a605, // nonce - 0x1a2: 0x26e0a, // formaction - 0x1a3: 0x22006, // center - 0x1a4: 0x3704, // nobr - 0x1a5: 0x59505, // table - 0x1a6: 0x4a907, // listing - 0x1a7: 0x18106, // legend - 0x1a9: 0x29b09, // challenge - 0x1aa: 0x24806, // figure - 0x1ab: 0xe605, // media - 0x1ae: 0xd904, // type - 0x1af: 0x3f04, // font - 0x1b0: 0x4da0e, // onmessageerror - 0x1b1: 0x37108, // seamless - 0x1b2: 0x8703, // dfn - 0x1b3: 0x5c705, // defer - 0x1b4: 0xc303, // low - 0x1b5: 0x19a03, // rtc - 0x1b6: 0x5230b, // onmouseover - 0x1b7: 0x2b20a, // novalidate - 0x1b8: 0x71c0a, // workertype - 0x1ba: 0x3cd07, // itemref - 0x1bd: 0x1, // a - 0x1be: 0x31803, // map - 0x1bf: 0x400c, // ontimeupdate - 0x1c0: 0x15e07, // bgsound - 0x1c1: 0x3206, // keygen - 0x1c2: 0x2705, // tbody - 0x1c5: 0x64406, // onshow - 0x1c7: 0x2501, // s - 0x1c8: 0x6607, // pattern - 0x1cc: 0x14d10, // oncanplaythrough - 0x1ce: 0x2d702, // dd - 0x1cf: 0x6f906, // srcset - 0x1d0: 0x17003, // big - 0x1d2: 0x65108, // sortable - 0x1d3: 0x48007, // onkeyup - 0x1d5: 0x5a406, // onplay - 0x1d7: 0x4b804, // meta - 0x1d8: 0x40306, // ondrop - 0x1da: 0x60008, // onscroll - 0x1db: 0x1fb0b, // crossorigin - 0x1dc: 0x5730a, // onpageshow - 0x1dd: 0x4, // abbr - 0x1de: 0x9202, // td - 0x1df: 0x58b0f, // contenteditable - 0x1e0: 0x27206, // action - 0x1e1: 0x1400b, // playsinline - 0x1e2: 0x43107, // onfocus - 0x1e3: 0x2e008, // hreflang - 0x1e5: 0x5160a, // onmouseout - 0x1e6: 0x5ea07, // onreset - 0x1e7: 0x13c08, // autoplay - 0x1e8: 0x63109, // onseeking - 0x1ea: 0x67506, // scoped - 0x1ec: 0x30a, // radiogroup - 0x1ee: 0x3800b, // contextmenu - 0x1ef: 0x52e09, // onmouseup - 0x1f1: 0x2ca06, // hgroup - 0x1f2: 0x2080f, // allowfullscreen - 0x1f3: 0x4be08, // tabindex - 0x1f6: 0x30f07, // isindex - 0x1f7: 0x1a0e, // accept-charset - 0x1f8: 0x2ae0e, // formnovalidate - 0x1fb: 0x1c90e, // annotation-xml - 0x1fc: 0x6e05, // embed - 0x1fd: 0x21806, // script - 0x1fe: 0xbb06, // dialog - 0x1ff: 0x1d707, // command + 0x1: 0x3ff08, // dropzone + 0x2: 0x3b08, // basefont + 0x3: 0x23209, // integrity + 0x4: 0x43106, // source + 0x5: 0x2c09, // accesskey + 0x6: 0x1a06, // accept + 0x7: 0x6c807, // onwheel + 0xb: 0x47407, // onkeyup + 0xc: 0x32007, // headers + 0xd: 0x67306, // scoped + 0xe: 0x67909, // onsuspend + 0xf: 0x8908, // noframes + 0x10: 0x1fa0b, // crossorigin + 0x11: 0x2e407, // onclick + 0x12: 0x3f405, // start + 0x13: 0x37a0b, // contextmenu + 0x14: 0x5e903, // src + 0x15: 0x1c404, // cols + 0x16: 0xbb06, // dialog + 0x17: 0x47a07, // preload + 0x18: 0x3c707, // itemref + 0x1b: 0x2f105, // image + 0x1d: 0x4ba09, // onloadend + 0x1e: 0x45d08, // download + 0x1f: 0x46a03, // pre + 0x23: 0x2970a, // formmethod + 0x24: 0x71303, // svg + 0x25: 0xcf01, // q + 0x26: 0x64002, // dt + 0x27: 0x1de08, // controls + 0x2a: 0x2804, // body + 0x2b: 0xd206, // strike + 0x2c: 0x3910b, // oncuechange + 0x2d: 0x4c30b, // onloadstart + 0x2e: 0x2fe07, // isindex + 0x2f: 0xb202, // li + 0x30: 0x1400b, // playsinline + 0x31: 0x34102, // mi + 0x32: 0x30806, // applet + 0x33: 0x4ce09, // onmessage + 0x35: 0x13702, // ol + 0x36: 0x1a304, // open + 0x39: 0x14d09, // oncanplay + 0x3a: 0x6bf09, // onwaiting + 0x3b: 0x11908, // oncancel + 0x3c: 0x6a908, // onunload + 0x3e: 0x53c09, // onoffline + 0x3f: 0x1a0e, // accept-charset + 0x40: 0x32004, // head + 0x42: 0x3ab09, // ondragend + 0x43: 0x1310b, // placeholder + 0x44: 0x2b30a, // formtarget + 0x45: 0x2540d, // foreignobject + 0x47: 0x400c, // ontimeupdate + 0x48: 0xdd0e, // allowusermedia + 0x4a: 0x69c0d, // onbeforeprint + 0x4b: 0x5604, // html + 0x4c: 0x9f04, // span + 0x4d: 0x64206, // hgroup + 0x4e: 0x16408, // disabled + 0x4f: 0x4204, // time + 0x51: 0x42b07, // onfocus + 0x53: 0xb00a, // malignmark + 0x55: 0x4650a, // onkeypress + 0x56: 0x55805, // class + 0x57: 0x1ab08, // colgroup + 0x58: 0x33709, // maxlength + 0x59: 0x5a908, // progress + 0x5b: 0x70405, // style + 0x5c: 0x2a10e, // formnovalidate + 0x5e: 0x38b06, // oncopy + 0x60: 0x26104, // form + 0x61: 0xf606, // footer + 0x64: 0x30a, // radiogroup + 0x66: 0xfb04, // ruby + 0x67: 0x4ff0b, // onmousemove + 0x68: 0x19d08, // itemprop + 0x69: 0x2d70a, // http-equiv + 0x6a: 0x15602, // th + 0x6c: 0x6e02, // em + 0x6d: 0x38108, // menuitem + 0x6e: 0x63106, // select + 0x6f: 0x48110, // onlanguagechange + 0x70: 0x31f05, // thead + 0x71: 0x15c02, // h1 + 0x72: 0x5e906, // srcdoc + 0x75: 0x9604, // name + 0x76: 0x19106, // button + 0x77: 0x55504, // desc + 0x78: 0x17704, // kind + 0x79: 0x1bf05, // color + 0x7c: 0x58e06, // usemap + 0x7d: 0x30e08, // itemtype + 0x7f: 0x6d508, // manifest + 0x81: 0x5300c, // onmousewheel + 0x82: 0x4dc0b, // onmousedown + 0x84: 0xc05, // param + 0x85: 0x2e005, // video + 0x86: 0x4910c, // onloadeddata + 0x87: 0x6f107, // address + 0x8c: 0xef04, // ping + 0x8d: 0x24703, // for + 0x8f: 0x62f08, // onselect + 0x90: 0x30703, // map + 0x92: 0xc01, // p + 0x93: 0x8008, // reversed + 0x94: 0x54d0a, // onpagehide + 0x95: 0x3206, // keygen + 0x96: 0x34109, // minlength + 0x97: 0x3e40a, // ondragover + 0x98: 0x42407, // onerror + 0x9a: 0x2107, // charset + 0x9b: 0x29b06, // method + 0x9c: 0x101, // b + 0x9d: 0x68208, // ontoggle + 0x9e: 0x2bd06, // hidden + 0xa0: 0x3f607, // article + 0xa2: 0x63906, // onshow + 0xa3: 0x64d06, // onsort + 0xa5: 0x57b0f, // contenteditable + 0xa6: 0x66908, // onsubmit + 0xa8: 0x44f09, // oninvalid + 0xaa: 0x202, // br + 0xab: 0x10902, // id + 0xac: 0x5d04, // loop + 0xad: 0x5630a, // onpageshow + 0xb0: 0x2cf04, // href + 0xb2: 0x2210a, // figcaption + 0xb3: 0x2690e, // onautocomplete + 0xb4: 0x49106, // onload + 0xb6: 0x9c04, // rows + 0xb7: 0x1a605, // nonce + 0xb8: 0x68a14, // onunhandledrejection + 0xbb: 0x21306, // center + 0xbc: 0x59406, // onplay + 0xbd: 0x33f02, // h5 + 0xbe: 0x49d07, // listing + 0xbf: 0x57606, // public + 0xc2: 0x23b06, // figure + 0xc3: 0x57a04, // icon + 0xc4: 0x1ab03, // col + 0xc5: 0x47b03, // rel + 0xc6: 0xe605, // media + 0xc7: 0x12109, // autofocus + 0xc8: 0x19a02, // rt + 0xca: 0x2d304, // lang + 0xcc: 0x49908, // datalist + 0xce: 0x2eb06, // iframe + 0xcf: 0x36105, // muted + 0xd0: 0x6140a, // onauxclick + 0xd2: 0x3c02, // as + 0xd6: 0x3fd06, // ondrop + 0xd7: 0x1c90a, // annotation + 0xd8: 0x21908, // fieldset + 0xdb: 0x2cf08, // hreflang + 0xdc: 0x4e70c, // onmouseenter + 0xdd: 0x2a402, // mn + 0xde: 0xe60a, // mediagroup + 0xdf: 0x9805, // meter + 0xe0: 0x56c03, // wbr + 0xe2: 0x63e05, // width + 0xe3: 0x2290c, // onafterprint + 0xe4: 0x30505, // ismap + 0xe5: 0x1505, // value + 0xe7: 0x1303, // nav + 0xe8: 0x54508, // ononline + 0xe9: 0xb604, // mark + 0xea: 0xc303, // low + 0xeb: 0x3ee0b, // ondragstart + 0xef: 0x12f03, // xmp + 0xf0: 0x22407, // caption + 0xf1: 0xd904, // type + 0xf2: 0x70907, // summary + 0xf3: 0x6802, // tt + 0xf4: 0x20809, // translate + 0xf5: 0x1870a, // blockquote + 0xf8: 0x15702, // hr + 0xfa: 0x2705, // tbody + 0xfc: 0x7b07, // picture + 0xfd: 0x5206, // height + 0xfe: 0x19c04, // cite + 0xff: 0x2501, // s + 0x101: 0xff05, // async + 0x102: 0x56f07, // onpaste + 0x103: 0x19507, // onabort + 0x104: 0x2b706, // target + 0x105: 0x14b03, // bdo + 0x106: 0x1f006, // coords + 0x107: 0x5e108, // onresize + 0x108: 0x71908, // template + 0x10a: 0x3a02, // rb + 0x10b: 0x2a50a, // novalidate + 0x10c: 0x460e, // updateviacache + 0x10d: 0x71003, // sup + 0x10e: 0x6c07, // noembed + 0x10f: 0x16b03, // div + 0x110: 0x6f707, // srclang + 0x111: 0x17a09, // draggable + 0x112: 0x67305, // scope + 0x113: 0x5905, // label + 0x114: 0x22f02, // rp + 0x115: 0x23f08, // required + 0x116: 0x3780d, // oncontextmenu + 0x117: 0x5e504, // size + 0x118: 0x5b00a, // spellcheck + 0x119: 0x3f04, // font + 0x11a: 0x9c07, // rowspan + 0x11b: 0x10a07, // default + 0x11d: 0x44307, // oninput + 0x11e: 0x38506, // itemid + 0x11f: 0x5ee04, // code + 0x120: 0xaa07, // acronym + 0x121: 0x3b04, // base + 0x125: 0x2470d, // foreignObject + 0x126: 0x2ca04, // high + 0x127: 0x3cb0e, // referrerpolicy + 0x128: 0x33703, // max + 0x129: 0x59d0a, // onpopstate + 0x12a: 0x2fc02, // h4 + 0x12b: 0x4ac04, // meta + 0x12c: 0x17305, // blink + 0x12e: 0x5f508, // onscroll + 0x12f: 0x59409, // onplaying + 0x130: 0xc113, // allowpaymentrequest + 0x131: 0x19a03, // rtc + 0x132: 0x72b04, // wrap + 0x134: 0x8b08, // frameset + 0x135: 0x32605, // small + 0x137: 0x32006, // header + 0x138: 0x40409, // onemptied + 0x139: 0x34902, // h6 + 0x13a: 0x35908, // multiple + 0x13c: 0x52a06, // prompt + 0x13f: 0x28e09, // challenge + 0x141: 0x4370c, // onhashchange + 0x142: 0x57b07, // content + 0x143: 0x1c90e, // annotation-xml + 0x144: 0x36607, // onclose + 0x145: 0x14d10, // oncanplaythrough + 0x148: 0x5170b, // onmouseover + 0x149: 0x64f08, // sortable + 0x14a: 0xa402, // mo + 0x14b: 0x2cd02, // h3 + 0x14c: 0x2c406, // script + 0x14d: 0x41d07, // onended + 0x14f: 0x64706, // poster + 0x150: 0x7210a, // workertype + 0x153: 0x1f505, // shape + 0x154: 0x4, // abbr + 0x155: 0x1, // a + 0x156: 0x2bf02, // dd + 0x157: 0x71606, // system + 0x158: 0x4ce0e, // onmessageerror + 0x159: 0x36b08, // seamless + 0x15a: 0x2610a, // formaction + 0x15b: 0x6e106, // option + 0x15c: 0x31d04, // math + 0x15d: 0x62609, // onseeking + 0x15e: 0x39c05, // oncut + 0x15f: 0x44c03, // del + 0x160: 0x11005, // title + 0x161: 0x11505, // audio + 0x162: 0x63108, // selected + 0x165: 0x3b40b, // ondragenter + 0x166: 0x46e06, // spacer + 0x167: 0x4a410, // onloadedmetadata + 0x168: 0x44505, // input + 0x16a: 0x58505, // table + 0x16b: 0x41508, // onchange + 0x16e: 0x5f005, // defer + 0x171: 0x50a0a, // onmouseout + 0x172: 0x20504, // slot + 0x175: 0x3704, // nobr + 0x177: 0x1d707, // command + 0x17a: 0x7207, // details + 0x17b: 0x38104, // menu + 0x17c: 0xb903, // kbd + 0x17d: 0x57304, // step + 0x17e: 0x20303, // ins + 0x17f: 0x13c08, // autoplay + 0x182: 0x34103, // min + 0x183: 0x17404, // link + 0x185: 0x40d10, // ondurationchange + 0x186: 0x9202, // td + 0x187: 0x8b05, // frame + 0x18a: 0x2ab08, // datetime + 0x18b: 0x44509, // inputmode + 0x18c: 0x35108, // readonly + 0x18d: 0x21104, // face + 0x18f: 0x5e505, // sizes + 0x191: 0x4b208, // tabindex + 0x192: 0x6db06, // strong + 0x193: 0xba03, // bdi + 0x194: 0x6fe06, // srcset + 0x196: 0x67202, // ms + 0x197: 0x5b507, // checked + 0x198: 0xb105, // align + 0x199: 0x1e507, // section + 0x19b: 0x6e05, // embed + 0x19d: 0x15e07, // bgsound + 0x1a2: 0x49d04, // list + 0x1a3: 0x61e08, // onseeked + 0x1a4: 0x66009, // onstorage + 0x1a5: 0x2f603, // img + 0x1a6: 0xf505, // tfoot + 0x1a9: 0x26913, // onautocompleteerror + 0x1aa: 0x5fd19, // onsecuritypolicyviolation + 0x1ad: 0x9303, // dir + 0x1ae: 0x9307, // dirname + 0x1b0: 0x5a70a, // onprogress + 0x1b2: 0x65709, // onstalled + 0x1b5: 0x66f09, // itemscope + 0x1b6: 0x49904, // data + 0x1b7: 0x3d90b, // ondragleave + 0x1b8: 0x56102, // h2 + 0x1b9: 0x2f706, // mglyph + 0x1ba: 0x16502, // is + 0x1bb: 0x6e50e, // onbeforeunload + 0x1bc: 0x2830d, // typemustmatch + 0x1bd: 0x3ab06, // ondrag + 0x1be: 0x5da07, // onreset + 0x1c0: 0x51106, // output + 0x1c1: 0x12907, // sandbox + 0x1c2: 0x1b209, // plaintext + 0x1c4: 0x34c08, // textarea + 0x1c7: 0xd607, // keytype + 0x1c8: 0x34b05, // mtext + 0x1c9: 0x6b10e, // onvolumechange + 0x1ca: 0x1ea06, // onblur + 0x1cb: 0x58a07, // onpause + 0x1cd: 0x5bc0c, // onratechange + 0x1ce: 0x10705, // aside + 0x1cf: 0x6cf07, // optimum + 0x1d1: 0x45809, // onkeydown + 0x1d2: 0x1c407, // colspan + 0x1d3: 0x1004, // main + 0x1d4: 0x66b03, // sub + 0x1d5: 0x25b06, // object + 0x1d6: 0x55c06, // search + 0x1d7: 0x37206, // sorted + 0x1d8: 0x17003, // big + 0x1d9: 0xb01, // u + 0x1db: 0x26b0c, // autocomplete + 0x1dc: 0xcc02, // tr + 0x1dd: 0xf303, // alt + 0x1df: 0x7804, // samp + 0x1e0: 0x5c812, // onrejectionhandled + 0x1e1: 0x4f30c, // onmouseleave + 0x1e2: 0x28007, // enctype + 0x1e3: 0xa208, // nomodule + 0x1e5: 0x3280f, // allowfullscreen + 0x1e6: 0x5f08, // optgroup + 0x1e8: 0x27c0b, // formenctype + 0x1e9: 0x18106, // legend + 0x1ea: 0x10306, // canvas + 0x1eb: 0x6607, // pattern + 0x1ec: 0x2c208, // noscript + 0x1ed: 0x601, // i + 0x1ee: 0x5d602, // dl + 0x1ef: 0xa702, // ul + 0x1f2: 0x52209, // onmouseup + 0x1f4: 0x1ba05, // track + 0x1f7: 0x3a10a, // ondblclick + 0x1f8: 0x3bf0a, // ondragexit + 0x1fa: 0x8703, // dfn + 0x1fc: 0x26506, // action + 0x1fd: 0x35004, // area + 0x1fe: 0x31607, // marquee + 0x1ff: 0x16d03, // var } const atomText = "abbradiogrouparamainavalueaccept-charsetbodyaccesskeygenobrb" + @@ -758,26 +760,26 @@ const atomText = "abbradiogrouparamainavalueaccept-charsetbodyaccesskeygenobrb" "dboxmplaceholderautoplaysinlinebdoncanplaythrough1bgsoundisa" + "bledivarbigblinkindraggablegendblockquotebuttonabortcitempro" + "penoncecolgrouplaintextrackcolorcolspannotation-xmlcommandco" + - "ntrolshapecoordslotranslatecrossoriginsmallowfullscreenoscri" + - "ptfacenterfieldsetfigcaptionafterprintegrityfigurequiredfore" + - "ignObjectforeignobjectformactionautocompleteerrorformenctype" + - "mustmatchallengeformmethodformnovalidatetimeformtargethgroup" + - "osterhiddenhigh2hreflanghttp-equivideonclickiframeimageimgly" + - "ph3isindexismappletitemtypemarqueematheadersortedmaxlength4m" + - "inlength5mtextareadonlymultiplemutedoncloseamlessourceoncont" + - "extmenuitemidoncopyoncuechangeoncutondblclickondragendondrag" + - "enterondragexitemreferrerpolicyondragleaveondragoverondragst" + - "articleondropzonemptiedondurationchangeonendedonerroronfocus" + - "paceronhashchangeoninputmodeloninvalidonkeydownloadonkeypres" + - "spellcheckedonkeyupreloadonlanguagechangeonloadeddatalisting" + - "onloadedmetadatabindexonloadendonloadstartonmessageerroronmo" + - "usedownonmouseenteronmouseleaveonmousemoveonmouseoutputonmou" + - "seoveronmouseupromptonmousewheelonofflineononlineonpagehides" + - "classectionbluronpageshowbronpastepublicontenteditableonpaus" + - "emaponplayingonpopstateonprogressrcdocodeferonratechangeonre" + - "jectionhandledonresetonresizesrclangonscrollonsecuritypolicy" + - "violationauxclickonseekedonseekingonselectedonshowidth6onsor" + - "tableonstalledonstorageonsubmitemscopedonsuspendontoggleonun" + - "handledrejectionbeforeprintonunloadonvolumechangeonwaitingon" + - "wheeloptimumanifestrongoptionbeforeunloaddressrcsetstylesumm" + - "arysupsvgsystemplateworkertypewrap" + "ntrolsectionblurcoordshapecrossoriginslotranslatefacenterfie" + + "ldsetfigcaptionafterprintegrityfigurequiredforeignObjectfore" + + "ignobjectformactionautocompleteerrorformenctypemustmatchalle" + + "ngeformmethodformnovalidatetimeformtargethiddenoscripthigh3h" + + "reflanghttp-equivideonclickiframeimageimglyph4isindexismappl" + + "etitemtypemarqueematheadersmallowfullscreenmaxlength5minleng" + + "th6mtextareadonlymultiplemutedoncloseamlessortedoncontextmen" + + "uitemidoncopyoncuechangeoncutondblclickondragendondragentero" + + "ndragexitemreferrerpolicyondragleaveondragoverondragstarticl" + + "eondropzonemptiedondurationchangeonendedonerroronfocusourceo" + + "nhashchangeoninputmodeloninvalidonkeydownloadonkeypresspacer" + + "onkeyupreloadonlanguagechangeonloadeddatalistingonloadedmeta" + + "databindexonloadendonloadstartonmessageerroronmousedownonmou" + + "seenteronmouseleaveonmousemoveonmouseoutputonmouseoveronmous" + + "eupromptonmousewheelonofflineononlineonpagehidesclassearch2o" + + "npageshowbronpastepublicontenteditableonpausemaponplayingonp" + + "opstateonprogresspellcheckedonratechangeonrejectionhandledon" + + "resetonresizesrcdocodeferonscrollonsecuritypolicyviolationau" + + "xclickonseekedonseekingonselectedonshowidthgrouposteronsorta" + + "bleonstalledonstorageonsubmitemscopedonsuspendontoggleonunha" + + "ndledrejectionbeforeprintonunloadonvolumechangeonwaitingonwh" + + "eeloptimumanifestrongoptionbeforeunloaddressrclangsrcsetstyl" + + "esummarysupsvgsystemplateworkertypewrap" diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go index 643c674e..518ee4c9 100644 --- a/vendor/golang.org/x/net/html/parse.go +++ b/vendor/golang.org/x/net/html/parse.go @@ -924,7 +924,7 @@ func inBodyIM(p *parser) bool { p.addElement() p.im = inFramesetIM return true - case a.Address, a.Article, a.Aside, a.Blockquote, a.Center, a.Details, a.Dialog, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Main, a.Menu, a.Nav, a.Ol, a.P, a.Section, a.Summary, a.Ul: + case a.Address, a.Article, a.Aside, a.Blockquote, a.Center, a.Details, a.Dialog, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Main, a.Menu, a.Nav, a.Ol, a.P, a.Search, a.Section, a.Summary, a.Ul: p.popUntil(buttonScope, a.P) p.addElement() case a.H1, a.H2, a.H3, a.H4, a.H5, a.H6: @@ -1136,7 +1136,7 @@ func inBodyIM(p *parser) bool { return false } return true - case a.Address, a.Article, a.Aside, a.Blockquote, a.Button, a.Center, a.Details, a.Dialog, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Listing, a.Main, a.Menu, a.Nav, a.Ol, a.Pre, a.Section, a.Summary, a.Ul: + case a.Address, a.Article, a.Aside, a.Blockquote, a.Button, a.Center, a.Details, a.Dialog, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Listing, a.Main, a.Menu, a.Nav, a.Ol, a.Pre, a.Search, a.Section, a.Summary, a.Ul: p.popUntil(defaultScope, p.tok.DataAtom) case a.Form: if p.oe.contains(a.Template) { diff --git a/vendor/golang.org/x/net/html/token.go b/vendor/golang.org/x/net/html/token.go index 3c57880d..6598c1f7 100644 --- a/vendor/golang.org/x/net/html/token.go +++ b/vendor/golang.org/x/net/html/token.go @@ -839,8 +839,22 @@ func (z *Tokenizer) readStartTag() TokenType { if raw { z.rawTag = strings.ToLower(string(z.buf[z.data.start:z.data.end])) } - // Look for a self-closing token like "
". - if z.err == nil && z.buf[z.raw.end-2] == '/' { + // Look for a self-closing token (e.g.
). + // + // Originally, we did this by just checking that the last character of the + // tag (ignoring the closing bracket) was a solidus (/) character, but this + // is not always accurate. + // + // We need to be careful that we don't misinterpret a non-self-closing tag + // as self-closing, as can happen if the tag contains unquoted attribute + // values (i.e.

). + // + // To avoid this, we check that the last non-bracket character of the tag + // (z.raw.end-2) isn't the same character as the last non-quote character of + // the last attribute of the tag (z.pendingAttr[1].end-1), if the tag has + // attributes. + nAttrs := len(z.attr) + if z.err == nil && z.buf[z.raw.end-2] == '/' && (nAttrs == 0 || z.raw.end-2 != z.attr[nAttrs-1][1].end-1) { return SelfClosingTagToken } return StartTagToken diff --git a/vendor/golang.org/x/net/http2/config.go b/vendor/golang.org/x/net/http2/config.go index de58dfb8..ca645d9a 100644 --- a/vendor/golang.org/x/net/http2/config.go +++ b/vendor/golang.org/x/net/http2/config.go @@ -60,7 +60,7 @@ func configFromServer(h1 *http.Server, h2 *Server) http2Config { return conf } -// configFromServer merges configuration settings from h2 and h2.t1.HTTP2 +// configFromTransport merges configuration settings from h2 and h2.t1.HTTP2 // (the net/http Transport). func configFromTransport(h2 *Transport) http2Config { conf := http2Config{ diff --git a/vendor/golang.org/x/net/http2/config_go124.go b/vendor/golang.org/x/net/http2/config_go124.go index e3784123..5b516c55 100644 --- a/vendor/golang.org/x/net/http2/config_go124.go +++ b/vendor/golang.org/x/net/http2/config_go124.go @@ -13,7 +13,7 @@ func fillNetHTTPServerConfig(conf *http2Config, srv *http.Server) { fillNetHTTPConfig(conf, srv.HTTP2) } -// fillNetHTTPServerConfig sets fields in conf from tr.HTTP2. +// fillNetHTTPTransportConfig sets fields in conf from tr.HTTP2. func fillNetHTTPTransportConfig(conf *http2Config, tr *http.Transport) { fillNetHTTPConfig(conf, tr.HTTP2) } diff --git a/vendor/golang.org/x/net/http2/frame.go b/vendor/golang.org/x/net/http2/frame.go index 81faec7e..97bd8b06 100644 --- a/vendor/golang.org/x/net/http2/frame.go +++ b/vendor/golang.org/x/net/http2/frame.go @@ -225,6 +225,11 @@ var fhBytes = sync.Pool{ }, } +func invalidHTTP1LookingFrameHeader() FrameHeader { + fh, _ := readFrameHeader(make([]byte, frameHeaderLen), strings.NewReader("HTTP/1.1 ")) + return fh +} + // ReadFrameHeader reads 9 bytes from r and returns a FrameHeader. // Most users should use Framer.ReadFrame instead. func ReadFrameHeader(r io.Reader) (FrameHeader, error) { @@ -503,10 +508,16 @@ func (fr *Framer) ReadFrame() (Frame, error) { return nil, err } if fh.Length > fr.maxReadSize { + if fh == invalidHTTP1LookingFrameHeader() { + return nil, fmt.Errorf("http2: failed reading the frame payload: %w, note that the frame header looked like an HTTP/1.1 header", err) + } return nil, ErrFrameTooLarge } payload := fr.getReadBuf(fh.Length) if _, err := io.ReadFull(fr.r, payload); err != nil { + if fh == invalidHTTP1LookingFrameHeader() { + return nil, fmt.Errorf("http2: failed reading the frame payload: %w, note that the frame header looked like an HTTP/1.1 header", err) + } return nil, err } f, err := typeFrameParser(fh.Type)(fr.frameCache, fh, fr.countError, payload) diff --git a/vendor/golang.org/x/net/http2/http2.go b/vendor/golang.org/x/net/http2/http2.go index c7601c90..6c18ea23 100644 --- a/vendor/golang.org/x/net/http2/http2.go +++ b/vendor/golang.org/x/net/http2/http2.go @@ -34,11 +34,19 @@ import ( ) var ( - VerboseLogs bool - logFrameWrites bool - logFrameReads bool - inTests bool - disableExtendedConnectProtocol bool + VerboseLogs bool + logFrameWrites bool + logFrameReads bool + inTests bool + + // Enabling extended CONNECT by causes browsers to attempt to use + // WebSockets-over-HTTP/2. This results in problems when the server's websocket + // package doesn't support extended CONNECT. + // + // Disable extended CONNECT by default for now. + // + // Issue #71128. + disableExtendedConnectProtocol = true ) func init() { @@ -51,8 +59,8 @@ func init() { logFrameWrites = true logFrameReads = true } - if strings.Contains(e, "http2xconnect=0") { - disableExtendedConnectProtocol = true + if strings.Contains(e, "http2xconnect=1") { + disableExtendedConnectProtocol = false } } @@ -407,23 +415,6 @@ func (s *sorter) SortStrings(ss []string) { s.v = save } -// validPseudoPath reports whether v is a valid :path pseudo-header -// value. It must be either: -// -// - a non-empty string starting with '/' -// - the string '*', for OPTIONS requests. -// -// For now this is only used a quick check for deciding when to clean -// up Opaque URLs before sending requests from the Transport. -// See golang.org/issue/16847 -// -// We used to enforce that the path also didn't start with "//", but -// Google's GFE accepts such paths and Chrome sends them, so ignore -// that part of the spec. See golang.org/issue/19103. -func validPseudoPath(v string) bool { - return (len(v) > 0 && v[0] == '/') || v == "*" -} - // incomparable is a zero-width, non-comparable type. Adding it to a struct // makes that struct also non-comparable, and generally doesn't add // any size (as long as it's first). diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go index b55547ae..51fca38f 100644 --- a/vendor/golang.org/x/net/http2/server.go +++ b/vendor/golang.org/x/net/http2/server.go @@ -50,6 +50,7 @@ import ( "golang.org/x/net/http/httpguts" "golang.org/x/net/http2/hpack" + "golang.org/x/net/internal/httpcommon" ) const ( @@ -812,8 +813,7 @@ const maxCachedCanonicalHeadersKeysSize = 2048 func (sc *serverConn) canonicalHeader(v string) string { sc.serveG.check() - buildCommonHeaderMapsOnce() - cv, ok := commonCanonHeader[v] + cv, ok := httpcommon.CachedCanonicalHeader(v) if ok { return cv } @@ -1068,7 +1068,10 @@ func (sc *serverConn) serve(conf http2Config) { func (sc *serverConn) handlePingTimer(lastFrameReadTime time.Time) { if sc.pingSent { - sc.vlogf("timeout waiting for PING response") + sc.logf("timeout waiting for PING response") + if f := sc.countErrorFunc; f != nil { + f("conn_close_lost_ping") + } sc.conn.Close() return } @@ -2233,25 +2236,25 @@ func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*responseWriter, *http.Request, error) { sc.serveG.check() - rp := requestParam{ - method: f.PseudoValue("method"), - scheme: f.PseudoValue("scheme"), - authority: f.PseudoValue("authority"), - path: f.PseudoValue("path"), - protocol: f.PseudoValue("protocol"), + rp := httpcommon.ServerRequestParam{ + Method: f.PseudoValue("method"), + Scheme: f.PseudoValue("scheme"), + Authority: f.PseudoValue("authority"), + Path: f.PseudoValue("path"), + Protocol: f.PseudoValue("protocol"), } // extended connect is disabled, so we should not see :protocol - if disableExtendedConnectProtocol && rp.protocol != "" { + if disableExtendedConnectProtocol && rp.Protocol != "" { return nil, nil, sc.countError("bad_connect", streamError(f.StreamID, ErrCodeProtocol)) } - isConnect := rp.method == "CONNECT" + isConnect := rp.Method == "CONNECT" if isConnect { - if rp.protocol == "" && (rp.path != "" || rp.scheme != "" || rp.authority == "") { + if rp.Protocol == "" && (rp.Path != "" || rp.Scheme != "" || rp.Authority == "") { return nil, nil, sc.countError("bad_connect", streamError(f.StreamID, ErrCodeProtocol)) } - } else if rp.method == "" || rp.path == "" || (rp.scheme != "https" && rp.scheme != "http") { + } else if rp.Method == "" || rp.Path == "" || (rp.Scheme != "https" && rp.Scheme != "http") { // See 8.1.2.6 Malformed Requests and Responses: // // Malformed requests or responses that are detected @@ -2265,15 +2268,16 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res return nil, nil, sc.countError("bad_path_method", streamError(f.StreamID, ErrCodeProtocol)) } - rp.header = make(http.Header) + header := make(http.Header) + rp.Header = header for _, hf := range f.RegularFields() { - rp.header.Add(sc.canonicalHeader(hf.Name), hf.Value) + header.Add(sc.canonicalHeader(hf.Name), hf.Value) } - if rp.authority == "" { - rp.authority = rp.header.Get("Host") + if rp.Authority == "" { + rp.Authority = header.Get("Host") } - if rp.protocol != "" { - rp.header.Set(":protocol", rp.protocol) + if rp.Protocol != "" { + header.Set(":protocol", rp.Protocol) } rw, req, err := sc.newWriterAndRequestNoBody(st, rp) @@ -2282,7 +2286,7 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res } bodyOpen := !f.StreamEnded() if bodyOpen { - if vv, ok := rp.header["Content-Length"]; ok { + if vv, ok := rp.Header["Content-Length"]; ok { if cl, err := strconv.ParseUint(vv[0], 10, 63); err == nil { req.ContentLength = int64(cl) } else { @@ -2298,84 +2302,38 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res return rw, req, nil } -type requestParam struct { - method string - scheme, authority, path string - protocol string - header http.Header -} - -func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*responseWriter, *http.Request, error) { +func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp httpcommon.ServerRequestParam) (*responseWriter, *http.Request, error) { sc.serveG.check() var tlsState *tls.ConnectionState // nil if not scheme https - if rp.scheme == "https" { + if rp.Scheme == "https" { tlsState = sc.tlsState } - needsContinue := httpguts.HeaderValuesContainsToken(rp.header["Expect"], "100-continue") - if needsContinue { - rp.header.Del("Expect") - } - // Merge Cookie headers into one "; "-delimited value. - if cookies := rp.header["Cookie"]; len(cookies) > 1 { - rp.header.Set("Cookie", strings.Join(cookies, "; ")) - } - - // Setup Trailers - var trailer http.Header - for _, v := range rp.header["Trailer"] { - for _, key := range strings.Split(v, ",") { - key = http.CanonicalHeaderKey(textproto.TrimString(key)) - switch key { - case "Transfer-Encoding", "Trailer", "Content-Length": - // Bogus. (copy of http1 rules) - // Ignore. - default: - if trailer == nil { - trailer = make(http.Header) - } - trailer[key] = nil - } - } - } - delete(rp.header, "Trailer") - - var url_ *url.URL - var requestURI string - if rp.method == "CONNECT" && rp.protocol == "" { - url_ = &url.URL{Host: rp.authority} - requestURI = rp.authority // mimic HTTP/1 server behavior - } else { - var err error - url_, err = url.ParseRequestURI(rp.path) - if err != nil { - return nil, nil, sc.countError("bad_path", streamError(st.id, ErrCodeProtocol)) - } - requestURI = rp.path + res := httpcommon.NewServerRequest(rp) + if res.InvalidReason != "" { + return nil, nil, sc.countError(res.InvalidReason, streamError(st.id, ErrCodeProtocol)) } body := &requestBody{ conn: sc, stream: st, - needsContinue: needsContinue, + needsContinue: res.NeedsContinue, } - req := &http.Request{ - Method: rp.method, - URL: url_, + req := (&http.Request{ + Method: rp.Method, + URL: res.URL, RemoteAddr: sc.remoteAddrStr, - Header: rp.header, - RequestURI: requestURI, + Header: rp.Header, + RequestURI: res.RequestURI, Proto: "HTTP/2.0", ProtoMajor: 2, ProtoMinor: 0, TLS: tlsState, - Host: rp.authority, + Host: rp.Authority, Body: body, - Trailer: trailer, - } - req = req.WithContext(st.ctx) - + Trailer: res.Trailer, + }).WithContext(st.ctx) rw := sc.newResponseWriter(st, req) return rw, req, nil } @@ -3270,12 +3228,12 @@ func (sc *serverConn) startPush(msg *startPushRequest) { // we start in "half closed (remote)" for simplicity. // See further comments at the definition of stateHalfClosedRemote. promised := sc.newStream(promisedID, msg.parent.id, stateHalfClosedRemote) - rw, req, err := sc.newWriterAndRequestNoBody(promised, requestParam{ - method: msg.method, - scheme: msg.url.Scheme, - authority: msg.url.Host, - path: msg.url.RequestURI(), - header: cloneHeader(msg.header), // clone since handler runs concurrently with writing the PUSH_PROMISE + rw, req, err := sc.newWriterAndRequestNoBody(promised, httpcommon.ServerRequestParam{ + Method: msg.method, + Scheme: msg.url.Scheme, + Authority: msg.url.Host, + Path: msg.url.RequestURI(), + Header: cloneHeader(msg.header), // clone since handler runs concurrently with writing the PUSH_PROMISE }) if err != nil { // Should not happen, since we've already validated msg.url. diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go index 090d0e1b..f26356b9 100644 --- a/vendor/golang.org/x/net/http2/transport.go +++ b/vendor/golang.org/x/net/http2/transport.go @@ -25,7 +25,6 @@ import ( "net/http" "net/http/httptrace" "net/textproto" - "sort" "strconv" "strings" "sync" @@ -35,6 +34,7 @@ import ( "golang.org/x/net/http/httpguts" "golang.org/x/net/http2/hpack" "golang.org/x/net/idna" + "golang.org/x/net/internal/httpcommon" ) const ( @@ -375,6 +375,7 @@ type ClientConn struct { doNotReuse bool // whether conn is marked to not be reused for any future requests closing bool closed bool + closedOnIdle bool // true if conn was closed for idleness seenSettings bool // true if we've seen a settings frame, false otherwise seenSettingsChan chan struct{} // closed when seenSettings is true or frame reading fails wantSettingsAck bool // we sent a SETTINGS frame and haven't heard back @@ -1089,10 +1090,12 @@ func (cc *ClientConn) idleStateLocked() (st clientConnIdleState) { // If this connection has never been used for a request and is closed, // then let it take a request (which will fail). + // If the conn was closed for idleness, we're racing the idle timer; + // don't try to use the conn. (Issue #70515.) // // This avoids a situation where an error early in a connection's lifetime // goes unreported. - if cc.nextStreamID == 1 && cc.streamsReserved == 0 && cc.closed { + if cc.nextStreamID == 1 && cc.streamsReserved == 0 && cc.closed && !cc.closedOnIdle { st.canTakeNewRequest = true } @@ -1155,6 +1158,7 @@ func (cc *ClientConn) closeIfIdle() { return } cc.closed = true + cc.closedOnIdle = true nextID := cc.nextStreamID // TODO: do clients send GOAWAY too? maybe? Just Close: cc.mu.Unlock() @@ -1271,23 +1275,6 @@ func (cc *ClientConn) closeForLostPing() { // exported. At least they'll be DeepEqual for h1-vs-h2 comparisons tests. var errRequestCanceled = errors.New("net/http: request canceled") -func commaSeparatedTrailers(req *http.Request) (string, error) { - keys := make([]string, 0, len(req.Trailer)) - for k := range req.Trailer { - k = canonicalHeader(k) - switch k { - case "Transfer-Encoding", "Trailer", "Content-Length": - return "", fmt.Errorf("invalid Trailer key %q", k) - } - keys = append(keys, k) - } - if len(keys) > 0 { - sort.Strings(keys) - return strings.Join(keys, ","), nil - } - return "", nil -} - func (cc *ClientConn) responseHeaderTimeout() time.Duration { if cc.t.t1 != nil { return cc.t.t1.ResponseHeaderTimeout @@ -1299,22 +1286,6 @@ func (cc *ClientConn) responseHeaderTimeout() time.Duration { return 0 } -// checkConnHeaders checks whether req has any invalid connection-level headers. -// per RFC 7540 section 8.1.2.2: Connection-Specific Header Fields. -// Certain headers are special-cased as okay but not transmitted later. -func checkConnHeaders(req *http.Request) error { - if v := req.Header.Get("Upgrade"); v != "" { - return fmt.Errorf("http2: invalid Upgrade request header: %q", req.Header["Upgrade"]) - } - if vv := req.Header["Transfer-Encoding"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "chunked") { - return fmt.Errorf("http2: invalid Transfer-Encoding request header: %q", vv) - } - if vv := req.Header["Connection"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && !asciiEqualFold(vv[0], "close") && !asciiEqualFold(vv[0], "keep-alive")) { - return fmt.Errorf("http2: invalid Connection request header: %q", vv) - } - return nil -} - // actualContentLength returns a sanitized version of // req.ContentLength, where 0 actually means zero (not unknown) and -1 // means unknown. @@ -1360,25 +1331,7 @@ func (cc *ClientConn) roundTrip(req *http.Request, streamf func(*clientStream)) donec: make(chan struct{}), } - // TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere? - if !cc.t.disableCompression() && - req.Header.Get("Accept-Encoding") == "" && - req.Header.Get("Range") == "" && - !cs.isHead { - // Request gzip only, not deflate. Deflate is ambiguous and - // not as universally supported anyway. - // See: https://zlib.net/zlib_faq.html#faq39 - // - // Note that we don't request this for HEAD requests, - // due to a bug in nginx: - // http://trac.nginx.org/nginx/ticket/358 - // https://golang.org/issue/5522 - // - // We don't request gzip if the request is for a range, since - // auto-decoding a portion of a gzipped document will just fail - // anyway. See https://golang.org/issue/8923 - cs.requestedGzip = true - } + cs.requestedGzip = httpcommon.IsRequestGzip(req.Method, req.Header, cc.t.disableCompression()) go cs.doRequest(req, streamf) @@ -1492,10 +1445,6 @@ func (cs *clientStream) writeRequest(req *http.Request, streamf func(*clientStre cc := cs.cc ctx := cs.ctx - if err := checkConnHeaders(req); err != nil { - return err - } - // wait for setting frames to be received, a server can change this value later, // but we just wait for the first settings frame var isExtendedConnect bool @@ -1659,26 +1608,39 @@ func (cs *clientStream) encodeAndWriteHeaders(req *http.Request) error { // we send: HEADERS{1}, CONTINUATION{0,} + DATA{0,} (DATA is // sent by writeRequestBody below, along with any Trailers, // again in form HEADERS{1}, CONTINUATION{0,}) - trailers, err := commaSeparatedTrailers(req) - if err != nil { - return err - } - hasTrailers := trailers != "" - contentLen := actualContentLength(req) - hasBody := contentLen != 0 - hdrs, err := cc.encodeHeaders(req, cs.requestedGzip, trailers, contentLen) + cc.hbuf.Reset() + res, err := encodeRequestHeaders(req, cs.requestedGzip, cc.peerMaxHeaderListSize, func(name, value string) { + cc.writeHeader(name, value) + }) if err != nil { - return err + return fmt.Errorf("http2: %w", err) } + hdrs := cc.hbuf.Bytes() // Write the request. - endStream := !hasBody && !hasTrailers + endStream := !res.HasBody && !res.HasTrailers cs.sentHeaders = true err = cc.writeHeaders(cs.ID, endStream, int(cc.maxFrameSize), hdrs) traceWroteHeaders(cs.trace) return err } +func encodeRequestHeaders(req *http.Request, addGzipHeader bool, peerMaxHeaderListSize uint64, headerf func(name, value string)) (httpcommon.EncodeHeadersResult, error) { + return httpcommon.EncodeHeaders(req.Context(), httpcommon.EncodeHeadersParam{ + Request: httpcommon.Request{ + Header: req.Header, + Trailer: req.Trailer, + URL: req.URL, + Host: req.Host, + Method: req.Method, + ActualContentLength: actualContentLength(req), + }, + AddGzipHeader: addGzipHeader, + PeerMaxHeaderListSize: peerMaxHeaderListSize, + DefaultUserAgent: defaultUserAgent, + }, headerf) +} + // cleanupWriteRequest performs post-request tasks. // // If err (the result of writeRequest) is non-nil and the stream is not closed, @@ -2066,218 +2028,6 @@ func (cs *clientStream) awaitFlowControl(maxBytes int) (taken int32, err error) } } -func validateHeaders(hdrs http.Header) string { - for k, vv := range hdrs { - if !httpguts.ValidHeaderFieldName(k) && k != ":protocol" { - return fmt.Sprintf("name %q", k) - } - for _, v := range vv { - if !httpguts.ValidHeaderFieldValue(v) { - // Don't include the value in the error, - // because it may be sensitive. - return fmt.Sprintf("value for header %q", k) - } - } - } - return "" -} - -var errNilRequestURL = errors.New("http2: Request.URI is nil") - -func isNormalConnect(req *http.Request) bool { - return req.Method == "CONNECT" && req.Header.Get(":protocol") == "" -} - -// requires cc.wmu be held. -func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trailers string, contentLength int64) ([]byte, error) { - cc.hbuf.Reset() - if req.URL == nil { - return nil, errNilRequestURL - } - - host := req.Host - if host == "" { - host = req.URL.Host - } - host, err := httpguts.PunycodeHostPort(host) - if err != nil { - return nil, err - } - if !httpguts.ValidHostHeader(host) { - return nil, errors.New("http2: invalid Host header") - } - - var path string - if !isNormalConnect(req) { - path = req.URL.RequestURI() - if !validPseudoPath(path) { - orig := path - path = strings.TrimPrefix(path, req.URL.Scheme+"://"+host) - if !validPseudoPath(path) { - if req.URL.Opaque != "" { - return nil, fmt.Errorf("invalid request :path %q from URL.Opaque = %q", orig, req.URL.Opaque) - } else { - return nil, fmt.Errorf("invalid request :path %q", orig) - } - } - } - } - - // Check for any invalid headers+trailers and return an error before we - // potentially pollute our hpack state. (We want to be able to - // continue to reuse the hpack encoder for future requests) - if err := validateHeaders(req.Header); err != "" { - return nil, fmt.Errorf("invalid HTTP header %s", err) - } - if err := validateHeaders(req.Trailer); err != "" { - return nil, fmt.Errorf("invalid HTTP trailer %s", err) - } - - enumerateHeaders := func(f func(name, value string)) { - // 8.1.2.3 Request Pseudo-Header Fields - // The :path pseudo-header field includes the path and query parts of the - // target URI (the path-absolute production and optionally a '?' character - // followed by the query production, see Sections 3.3 and 3.4 of - // [RFC3986]). - f(":authority", host) - m := req.Method - if m == "" { - m = http.MethodGet - } - f(":method", m) - if !isNormalConnect(req) { - f(":path", path) - f(":scheme", req.URL.Scheme) - } - if trailers != "" { - f("trailer", trailers) - } - - var didUA bool - for k, vv := range req.Header { - if asciiEqualFold(k, "host") || asciiEqualFold(k, "content-length") { - // Host is :authority, already sent. - // Content-Length is automatic, set below. - continue - } else if asciiEqualFold(k, "connection") || - asciiEqualFold(k, "proxy-connection") || - asciiEqualFold(k, "transfer-encoding") || - asciiEqualFold(k, "upgrade") || - asciiEqualFold(k, "keep-alive") { - // Per 8.1.2.2 Connection-Specific Header - // Fields, don't send connection-specific - // fields. We have already checked if any - // are error-worthy so just ignore the rest. - continue - } else if asciiEqualFold(k, "user-agent") { - // Match Go's http1 behavior: at most one - // User-Agent. If set to nil or empty string, - // then omit it. Otherwise if not mentioned, - // include the default (below). - didUA = true - if len(vv) < 1 { - continue - } - vv = vv[:1] - if vv[0] == "" { - continue - } - } else if asciiEqualFold(k, "cookie") { - // Per 8.1.2.5 To allow for better compression efficiency, the - // Cookie header field MAY be split into separate header fields, - // each with one or more cookie-pairs. - for _, v := range vv { - for { - p := strings.IndexByte(v, ';') - if p < 0 { - break - } - f("cookie", v[:p]) - p++ - // strip space after semicolon if any. - for p+1 <= len(v) && v[p] == ' ' { - p++ - } - v = v[p:] - } - if len(v) > 0 { - f("cookie", v) - } - } - continue - } - - for _, v := range vv { - f(k, v) - } - } - if shouldSendReqContentLength(req.Method, contentLength) { - f("content-length", strconv.FormatInt(contentLength, 10)) - } - if addGzipHeader { - f("accept-encoding", "gzip") - } - if !didUA { - f("user-agent", defaultUserAgent) - } - } - - // Do a first pass over the headers counting bytes to ensure - // we don't exceed cc.peerMaxHeaderListSize. This is done as a - // separate pass before encoding the headers to prevent - // modifying the hpack state. - hlSize := uint64(0) - enumerateHeaders(func(name, value string) { - hf := hpack.HeaderField{Name: name, Value: value} - hlSize += uint64(hf.Size()) - }) - - if hlSize > cc.peerMaxHeaderListSize { - return nil, errRequestHeaderListSize - } - - trace := httptrace.ContextClientTrace(req.Context()) - traceHeaders := traceHasWroteHeaderField(trace) - - // Header list size is ok. Write the headers. - enumerateHeaders(func(name, value string) { - name, ascii := lowerHeader(name) - if !ascii { - // Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header - // field names have to be ASCII characters (just as in HTTP/1.x). - return - } - cc.writeHeader(name, value) - if traceHeaders { - traceWroteHeaderField(trace, name, value) - } - }) - - return cc.hbuf.Bytes(), nil -} - -// shouldSendReqContentLength reports whether the http2.Transport should send -// a "content-length" request header. This logic is basically a copy of the net/http -// transferWriter.shouldSendContentLength. -// The contentLength is the corrected contentLength (so 0 means actually 0, not unknown). -// -1 means unknown. -func shouldSendReqContentLength(method string, contentLength int64) bool { - if contentLength > 0 { - return true - } - if contentLength < 0 { - return false - } - // For zero bodies, whether we send a content-length depends on the method. - // It also kinda doesn't matter for http2 either way, with END_STREAM. - switch method { - case "POST", "PUT", "PATCH": - return true - default: - return false - } -} - // requires cc.wmu be held. func (cc *ClientConn) encodeTrailers(trailer http.Header) ([]byte, error) { cc.hbuf.Reset() @@ -2294,7 +2044,7 @@ func (cc *ClientConn) encodeTrailers(trailer http.Header) ([]byte, error) { } for k, vv := range trailer { - lowKey, ascii := lowerHeader(k) + lowKey, ascii := httpcommon.LowerHeader(k) if !ascii { // Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header // field names have to be ASCII characters (just as in HTTP/1.x). @@ -2434,9 +2184,12 @@ func (rl *clientConnReadLoop) cleanup() { // This avoids a situation where new connections are constantly created, // added to the pool, fail, and are removed from the pool, without any error // being surfaced to the user. - const unusedWaitTime = 5 * time.Second + unusedWaitTime := 5 * time.Second + if cc.idleTimeout > 0 && unusedWaitTime > cc.idleTimeout { + unusedWaitTime = cc.idleTimeout + } idleTime := cc.t.now().Sub(cc.lastActive) - if atomic.LoadUint32(&cc.atomicReused) == 0 && idleTime < unusedWaitTime { + if atomic.LoadUint32(&cc.atomicReused) == 0 && idleTime < unusedWaitTime && !cc.closedOnIdle { cc.idleTimer = cc.t.afterFunc(unusedWaitTime-idleTime, func() { cc.t.connPool().MarkDead(cc) }) @@ -2457,6 +2210,13 @@ func (rl *clientConnReadLoop) cleanup() { } cc.cond.Broadcast() cc.mu.Unlock() + + if !cc.seenSettings { + // If we have a pending request that wants extended CONNECT, + // let it continue and fail with the connection error. + cc.extendedConnectAllowed = true + close(cc.seenSettingsChan) + } } // countReadFrameError calls Transport.CountError with a string @@ -2549,9 +2309,6 @@ func (rl *clientConnReadLoop) run() error { if VerboseLogs { cc.vlogf("http2: Transport conn %p received error from processing frame %v: %v", cc, summarizeFrame(f), err) } - if !cc.seenSettings { - close(cc.seenSettingsChan) - } return err } } @@ -2646,7 +2403,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra Status: status + " " + http.StatusText(statusCode), } for _, hf := range regularFields { - key := canonicalHeader(hf.Name) + key := httpcommon.CanonicalHeader(hf.Name) if key == "Trailer" { t := res.Trailer if t == nil { @@ -2654,7 +2411,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra res.Trailer = t } foreachHeaderElement(hf.Value, func(v string) { - t[canonicalHeader(v)] = nil + t[httpcommon.CanonicalHeader(v)] = nil }) } else { vv := header[key] @@ -2778,7 +2535,7 @@ func (rl *clientConnReadLoop) processTrailers(cs *clientStream, f *MetaHeadersFr trailer := make(http.Header) for _, hf := range f.RegularFields() { - key := canonicalHeader(hf.Name) + key := httpcommon.CanonicalHeader(hf.Name) trailer[key] = append(trailer[key], hf.Value) } cs.trailer = trailer @@ -3324,7 +3081,7 @@ func (cc *ClientConn) writeStreamReset(streamID uint32, code ErrCode, ping bool, var ( errResponseHeaderListSize = errors.New("http2: response header list larger than advertised limit") - errRequestHeaderListSize = errors.New("http2: request header list larger than peer's advertised limit") + errRequestHeaderListSize = httpcommon.ErrRequestHeaderListSize ) func (cc *ClientConn) logf(format string, args ...interface{}) { @@ -3508,16 +3265,6 @@ func traceFirstResponseByte(trace *httptrace.ClientTrace) { } } -func traceHasWroteHeaderField(trace *httptrace.ClientTrace) bool { - return trace != nil && trace.WroteHeaderField != nil -} - -func traceWroteHeaderField(trace *httptrace.ClientTrace, k, v string) { - if trace != nil && trace.WroteHeaderField != nil { - trace.WroteHeaderField(k, []string{v}) - } -} - func traceGot1xxResponseFunc(trace *httptrace.ClientTrace) func(int, textproto.MIMEHeader) error { if trace != nil { return trace.Got1xxResponse diff --git a/vendor/golang.org/x/net/http2/write.go b/vendor/golang.org/x/net/http2/write.go index 6ff6bee7..fdb35b94 100644 --- a/vendor/golang.org/x/net/http2/write.go +++ b/vendor/golang.org/x/net/http2/write.go @@ -13,6 +13,7 @@ import ( "golang.org/x/net/http/httpguts" "golang.org/x/net/http2/hpack" + "golang.org/x/net/internal/httpcommon" ) // writeFramer is implemented by any type that is used to write frames. @@ -351,7 +352,7 @@ func encodeHeaders(enc *hpack.Encoder, h http.Header, keys []string) { } for _, k := range keys { vv := h[k] - k, ascii := lowerHeader(k) + k, ascii := httpcommon.LowerHeader(k) if !ascii { // Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header // field names have to be ASCII characters (just as in HTTP/1.x). diff --git a/vendor/golang.org/x/net/internal/httpcommon/ascii.go b/vendor/golang.org/x/net/internal/httpcommon/ascii.go new file mode 100644 index 00000000..ed14da5a --- /dev/null +++ b/vendor/golang.org/x/net/internal/httpcommon/ascii.go @@ -0,0 +1,53 @@ +// Copyright 2025 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 httpcommon + +import "strings" + +// The HTTP protocols are defined in terms of ASCII, not Unicode. This file +// contains helper functions which may use Unicode-aware functions which would +// otherwise be unsafe and could introduce vulnerabilities if used improperly. + +// asciiEqualFold is strings.EqualFold, ASCII only. It reports whether s and t +// are equal, ASCII-case-insensitively. +func asciiEqualFold(s, t string) bool { + if len(s) != len(t) { + return false + } + for i := 0; i < len(s); i++ { + if lower(s[i]) != lower(t[i]) { + return false + } + } + return true +} + +// lower returns the ASCII lowercase version of b. +func lower(b byte) byte { + if 'A' <= b && b <= 'Z' { + return b + ('a' - 'A') + } + return b +} + +// isASCIIPrint returns whether s is ASCII and printable according to +// https://tools.ietf.org/html/rfc20#section-4.2. +func isASCIIPrint(s string) bool { + for i := 0; i < len(s); i++ { + if s[i] < ' ' || s[i] > '~' { + return false + } + } + return true +} + +// asciiToLower returns the lowercase version of s if s is ASCII and printable, +// and whether or not it was. +func asciiToLower(s string) (lower string, ok bool) { + if !isASCIIPrint(s) { + return "", false + } + return strings.ToLower(s), true +} diff --git a/vendor/golang.org/x/net/http2/headermap.go b/vendor/golang.org/x/net/internal/httpcommon/headermap.go similarity index 74% rename from vendor/golang.org/x/net/http2/headermap.go rename to vendor/golang.org/x/net/internal/httpcommon/headermap.go index 149b3dd2..92483d8e 100644 --- a/vendor/golang.org/x/net/http2/headermap.go +++ b/vendor/golang.org/x/net/internal/httpcommon/headermap.go @@ -1,11 +1,11 @@ -// Copyright 2014 The Go Authors. All rights reserved. +// Copyright 2025 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 http2 +package httpcommon import ( - "net/http" + "net/textproto" "sync" ) @@ -82,13 +82,15 @@ func buildCommonHeaderMaps() { commonLowerHeader = make(map[string]string, len(common)) commonCanonHeader = make(map[string]string, len(common)) for _, v := range common { - chk := http.CanonicalHeaderKey(v) + chk := textproto.CanonicalMIMEHeaderKey(v) commonLowerHeader[chk] = v commonCanonHeader[v] = chk } } -func lowerHeader(v string) (lower string, ascii bool) { +// LowerHeader returns the lowercase form of a header name, +// used on the wire for HTTP/2 and HTTP/3 requests. +func LowerHeader(v string) (lower string, ascii bool) { buildCommonHeaderMapsOnce() if s, ok := commonLowerHeader[v]; ok { return s, true @@ -96,10 +98,18 @@ func lowerHeader(v string) (lower string, ascii bool) { return asciiToLower(v) } -func canonicalHeader(v string) string { +// CanonicalHeader canonicalizes a header name. (For example, "host" becomes "Host".) +func CanonicalHeader(v string) string { buildCommonHeaderMapsOnce() if s, ok := commonCanonHeader[v]; ok { return s } - return http.CanonicalHeaderKey(v) + return textproto.CanonicalMIMEHeaderKey(v) +} + +// CachedCanonicalHeader returns the canonical form of a well-known header name. +func CachedCanonicalHeader(v string) (string, bool) { + buildCommonHeaderMapsOnce() + s, ok := commonCanonHeader[v] + return s, ok } diff --git a/vendor/golang.org/x/net/internal/httpcommon/request.go b/vendor/golang.org/x/net/internal/httpcommon/request.go new file mode 100644 index 00000000..4b705531 --- /dev/null +++ b/vendor/golang.org/x/net/internal/httpcommon/request.go @@ -0,0 +1,467 @@ +// Copyright 2025 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 httpcommon + +import ( + "context" + "errors" + "fmt" + "net/http/httptrace" + "net/textproto" + "net/url" + "sort" + "strconv" + "strings" + + "golang.org/x/net/http/httpguts" + "golang.org/x/net/http2/hpack" +) + +var ( + ErrRequestHeaderListSize = errors.New("request header list larger than peer's advertised limit") +) + +// Request is a subset of http.Request. +// It'd be simpler to pass an *http.Request, of course, but we can't depend on net/http +// without creating a dependency cycle. +type Request struct { + URL *url.URL + Method string + Host string + Header map[string][]string + Trailer map[string][]string + ActualContentLength int64 // 0 means 0, -1 means unknown +} + +// EncodeHeadersParam is parameters to EncodeHeaders. +type EncodeHeadersParam struct { + Request Request + + // AddGzipHeader indicates that an "accept-encoding: gzip" header should be + // added to the request. + AddGzipHeader bool + + // PeerMaxHeaderListSize, when non-zero, is the peer's MAX_HEADER_LIST_SIZE setting. + PeerMaxHeaderListSize uint64 + + // DefaultUserAgent is the User-Agent header to send when the request + // neither contains a User-Agent nor disables it. + DefaultUserAgent string +} + +// EncodeHeadersParam is the result of EncodeHeaders. +type EncodeHeadersResult struct { + HasBody bool + HasTrailers bool +} + +// EncodeHeaders constructs request headers common to HTTP/2 and HTTP/3. +// It validates a request and calls headerf with each pseudo-header and header +// for the request. +// The headerf function is called with the validated, canonicalized header name. +func EncodeHeaders(ctx context.Context, param EncodeHeadersParam, headerf func(name, value string)) (res EncodeHeadersResult, _ error) { + req := param.Request + + // Check for invalid connection-level headers. + if err := checkConnHeaders(req.Header); err != nil { + return res, err + } + + if req.URL == nil { + return res, errors.New("Request.URL is nil") + } + + host := req.Host + if host == "" { + host = req.URL.Host + } + host, err := httpguts.PunycodeHostPort(host) + if err != nil { + return res, err + } + if !httpguts.ValidHostHeader(host) { + return res, errors.New("invalid Host header") + } + + // isNormalConnect is true if this is a non-extended CONNECT request. + isNormalConnect := false + var protocol string + if vv := req.Header[":protocol"]; len(vv) > 0 { + protocol = vv[0] + } + if req.Method == "CONNECT" && protocol == "" { + isNormalConnect = true + } else if protocol != "" && req.Method != "CONNECT" { + return res, errors.New("invalid :protocol header in non-CONNECT request") + } + + // Validate the path, except for non-extended CONNECT requests which have no path. + var path string + if !isNormalConnect { + path = req.URL.RequestURI() + if !validPseudoPath(path) { + orig := path + path = strings.TrimPrefix(path, req.URL.Scheme+"://"+host) + if !validPseudoPath(path) { + if req.URL.Opaque != "" { + return res, fmt.Errorf("invalid request :path %q from URL.Opaque = %q", orig, req.URL.Opaque) + } else { + return res, fmt.Errorf("invalid request :path %q", orig) + } + } + } + } + + // Check for any invalid headers+trailers and return an error before we + // potentially pollute our hpack state. (We want to be able to + // continue to reuse the hpack encoder for future requests) + if err := validateHeaders(req.Header); err != "" { + return res, fmt.Errorf("invalid HTTP header %s", err) + } + if err := validateHeaders(req.Trailer); err != "" { + return res, fmt.Errorf("invalid HTTP trailer %s", err) + } + + trailers, err := commaSeparatedTrailers(req.Trailer) + if err != nil { + return res, err + } + + enumerateHeaders := func(f func(name, value string)) { + // 8.1.2.3 Request Pseudo-Header Fields + // The :path pseudo-header field includes the path and query parts of the + // target URI (the path-absolute production and optionally a '?' character + // followed by the query production, see Sections 3.3 and 3.4 of + // [RFC3986]). + f(":authority", host) + m := req.Method + if m == "" { + m = "GET" + } + f(":method", m) + if !isNormalConnect { + f(":path", path) + f(":scheme", req.URL.Scheme) + } + if protocol != "" { + f(":protocol", protocol) + } + if trailers != "" { + f("trailer", trailers) + } + + var didUA bool + for k, vv := range req.Header { + if asciiEqualFold(k, "host") || asciiEqualFold(k, "content-length") { + // Host is :authority, already sent. + // Content-Length is automatic, set below. + continue + } else if asciiEqualFold(k, "connection") || + asciiEqualFold(k, "proxy-connection") || + asciiEqualFold(k, "transfer-encoding") || + asciiEqualFold(k, "upgrade") || + asciiEqualFold(k, "keep-alive") { + // Per 8.1.2.2 Connection-Specific Header + // Fields, don't send connection-specific + // fields. We have already checked if any + // are error-worthy so just ignore the rest. + continue + } else if asciiEqualFold(k, "user-agent") { + // Match Go's http1 behavior: at most one + // User-Agent. If set to nil or empty string, + // then omit it. Otherwise if not mentioned, + // include the default (below). + didUA = true + if len(vv) < 1 { + continue + } + vv = vv[:1] + if vv[0] == "" { + continue + } + } else if asciiEqualFold(k, "cookie") { + // Per 8.1.2.5 To allow for better compression efficiency, the + // Cookie header field MAY be split into separate header fields, + // each with one or more cookie-pairs. + for _, v := range vv { + for { + p := strings.IndexByte(v, ';') + if p < 0 { + break + } + f("cookie", v[:p]) + p++ + // strip space after semicolon if any. + for p+1 <= len(v) && v[p] == ' ' { + p++ + } + v = v[p:] + } + if len(v) > 0 { + f("cookie", v) + } + } + continue + } else if k == ":protocol" { + // :protocol pseudo-header was already sent above. + continue + } + + for _, v := range vv { + f(k, v) + } + } + if shouldSendReqContentLength(req.Method, req.ActualContentLength) { + f("content-length", strconv.FormatInt(req.ActualContentLength, 10)) + } + if param.AddGzipHeader { + f("accept-encoding", "gzip") + } + if !didUA { + f("user-agent", param.DefaultUserAgent) + } + } + + // Do a first pass over the headers counting bytes to ensure + // we don't exceed cc.peerMaxHeaderListSize. This is done as a + // separate pass before encoding the headers to prevent + // modifying the hpack state. + if param.PeerMaxHeaderListSize > 0 { + hlSize := uint64(0) + enumerateHeaders(func(name, value string) { + hf := hpack.HeaderField{Name: name, Value: value} + hlSize += uint64(hf.Size()) + }) + + if hlSize > param.PeerMaxHeaderListSize { + return res, ErrRequestHeaderListSize + } + } + + trace := httptrace.ContextClientTrace(ctx) + + // Header list size is ok. Write the headers. + enumerateHeaders(func(name, value string) { + name, ascii := LowerHeader(name) + if !ascii { + // Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header + // field names have to be ASCII characters (just as in HTTP/1.x). + return + } + + headerf(name, value) + + if trace != nil && trace.WroteHeaderField != nil { + trace.WroteHeaderField(name, []string{value}) + } + }) + + res.HasBody = req.ActualContentLength != 0 + res.HasTrailers = trailers != "" + return res, nil +} + +// IsRequestGzip reports whether we should add an Accept-Encoding: gzip header +// for a request. +func IsRequestGzip(method string, header map[string][]string, disableCompression bool) bool { + // TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere? + if !disableCompression && + len(header["Accept-Encoding"]) == 0 && + len(header["Range"]) == 0 && + method != "HEAD" { + // Request gzip only, not deflate. Deflate is ambiguous and + // not as universally supported anyway. + // See: https://zlib.net/zlib_faq.html#faq39 + // + // Note that we don't request this for HEAD requests, + // due to a bug in nginx: + // http://trac.nginx.org/nginx/ticket/358 + // https://golang.org/issue/5522 + // + // We don't request gzip if the request is for a range, since + // auto-decoding a portion of a gzipped document will just fail + // anyway. See https://golang.org/issue/8923 + return true + } + return false +} + +// checkConnHeaders checks whether req has any invalid connection-level headers. +// +// https://www.rfc-editor.org/rfc/rfc9114.html#section-4.2-3 +// https://www.rfc-editor.org/rfc/rfc9113.html#section-8.2.2-1 +// +// Certain headers are special-cased as okay but not transmitted later. +// For example, we allow "Transfer-Encoding: chunked", but drop the header when encoding. +func checkConnHeaders(h map[string][]string) error { + if vv := h["Upgrade"]; len(vv) > 0 && (vv[0] != "" && vv[0] != "chunked") { + return fmt.Errorf("invalid Upgrade request header: %q", vv) + } + if vv := h["Transfer-Encoding"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "chunked") { + return fmt.Errorf("invalid Transfer-Encoding request header: %q", vv) + } + if vv := h["Connection"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && !asciiEqualFold(vv[0], "close") && !asciiEqualFold(vv[0], "keep-alive")) { + return fmt.Errorf("invalid Connection request header: %q", vv) + } + return nil +} + +func commaSeparatedTrailers(trailer map[string][]string) (string, error) { + keys := make([]string, 0, len(trailer)) + for k := range trailer { + k = CanonicalHeader(k) + switch k { + case "Transfer-Encoding", "Trailer", "Content-Length": + return "", fmt.Errorf("invalid Trailer key %q", k) + } + keys = append(keys, k) + } + if len(keys) > 0 { + sort.Strings(keys) + return strings.Join(keys, ","), nil + } + return "", nil +} + +// validPseudoPath reports whether v is a valid :path pseudo-header +// value. It must be either: +// +// - a non-empty string starting with '/' +// - the string '*', for OPTIONS requests. +// +// For now this is only used a quick check for deciding when to clean +// up Opaque URLs before sending requests from the Transport. +// See golang.org/issue/16847 +// +// We used to enforce that the path also didn't start with "//", but +// Google's GFE accepts such paths and Chrome sends them, so ignore +// that part of the spec. See golang.org/issue/19103. +func validPseudoPath(v string) bool { + return (len(v) > 0 && v[0] == '/') || v == "*" +} + +func validateHeaders(hdrs map[string][]string) string { + for k, vv := range hdrs { + if !httpguts.ValidHeaderFieldName(k) && k != ":protocol" { + return fmt.Sprintf("name %q", k) + } + for _, v := range vv { + if !httpguts.ValidHeaderFieldValue(v) { + // Don't include the value in the error, + // because it may be sensitive. + return fmt.Sprintf("value for header %q", k) + } + } + } + return "" +} + +// shouldSendReqContentLength reports whether we should send +// a "content-length" request header. This logic is basically a copy of the net/http +// transferWriter.shouldSendContentLength. +// The contentLength is the corrected contentLength (so 0 means actually 0, not unknown). +// -1 means unknown. +func shouldSendReqContentLength(method string, contentLength int64) bool { + if contentLength > 0 { + return true + } + if contentLength < 0 { + return false + } + // For zero bodies, whether we send a content-length depends on the method. + // It also kinda doesn't matter for http2 either way, with END_STREAM. + switch method { + case "POST", "PUT", "PATCH": + return true + default: + return false + } +} + +// ServerRequestParam is parameters to NewServerRequest. +type ServerRequestParam struct { + Method string + Scheme, Authority, Path string + Protocol string + Header map[string][]string +} + +// ServerRequestResult is the result of NewServerRequest. +type ServerRequestResult struct { + // Various http.Request fields. + URL *url.URL + RequestURI string + Trailer map[string][]string + + NeedsContinue bool // client provided an "Expect: 100-continue" header + + // If the request should be rejected, this is a short string suitable for passing + // to the http2 package's CountError function. + // It might be a bit odd to return errors this way rather than returing an error, + // but this ensures we don't forget to include a CountError reason. + InvalidReason string +} + +func NewServerRequest(rp ServerRequestParam) ServerRequestResult { + needsContinue := httpguts.HeaderValuesContainsToken(rp.Header["Expect"], "100-continue") + if needsContinue { + delete(rp.Header, "Expect") + } + // Merge Cookie headers into one "; "-delimited value. + if cookies := rp.Header["Cookie"]; len(cookies) > 1 { + rp.Header["Cookie"] = []string{strings.Join(cookies, "; ")} + } + + // Setup Trailers + var trailer map[string][]string + for _, v := range rp.Header["Trailer"] { + for _, key := range strings.Split(v, ",") { + key = textproto.CanonicalMIMEHeaderKey(textproto.TrimString(key)) + switch key { + case "Transfer-Encoding", "Trailer", "Content-Length": + // Bogus. (copy of http1 rules) + // Ignore. + default: + if trailer == nil { + trailer = make(map[string][]string) + } + trailer[key] = nil + } + } + } + delete(rp.Header, "Trailer") + + // "':authority' MUST NOT include the deprecated userinfo subcomponent + // for "http" or "https" schemed URIs." + // https://www.rfc-editor.org/rfc/rfc9113.html#section-8.3.1-2.3.8 + if strings.IndexByte(rp.Authority, '@') != -1 && (rp.Scheme == "http" || rp.Scheme == "https") { + return ServerRequestResult{ + InvalidReason: "userinfo_in_authority", + } + } + + var url_ *url.URL + var requestURI string + if rp.Method == "CONNECT" && rp.Protocol == "" { + url_ = &url.URL{Host: rp.Authority} + requestURI = rp.Authority // mimic HTTP/1 server behavior + } else { + var err error + url_, err = url.ParseRequestURI(rp.Path) + if err != nil { + return ServerRequestResult{ + InvalidReason: "bad_path", + } + } + requestURI = rp.Path + } + + return ServerRequestResult{ + URL: url_, + NeedsContinue: needsContinue, + RequestURI: requestURI, + Trailer: trailer, + } +} diff --git a/vendor/golang.org/x/net/proxy/per_host.go b/vendor/golang.org/x/net/proxy/per_host.go index d7d4b8b6..32bdf435 100644 --- a/vendor/golang.org/x/net/proxy/per_host.go +++ b/vendor/golang.org/x/net/proxy/per_host.go @@ -7,6 +7,7 @@ package proxy import ( "context" "net" + "net/netip" "strings" ) @@ -57,7 +58,8 @@ func (p *PerHost) DialContext(ctx context.Context, network, addr string) (c net. } func (p *PerHost) dialerForRequest(host string) Dialer { - if ip := net.ParseIP(host); ip != nil { + if nip, err := netip.ParseAddr(host); err == nil { + ip := net.IP(nip.AsSlice()) for _, net := range p.bypassNetworks { if net.Contains(ip) { return p.bypass @@ -108,8 +110,8 @@ func (p *PerHost) AddFromString(s string) { } continue } - if ip := net.ParseIP(host); ip != nil { - p.AddIP(ip) + if nip, err := netip.ParseAddr(host); err == nil { + p.AddIP(net.IP(nip.AsSlice())) continue } if strings.HasPrefix(host, "*.") { diff --git a/vendor/golang.org/x/oauth2/README.md b/vendor/golang.org/x/oauth2/README.md index 781770c2..48dbb9d8 100644 --- a/vendor/golang.org/x/oauth2/README.md +++ b/vendor/golang.org/x/oauth2/README.md @@ -5,15 +5,6 @@ oauth2 package contains a client implementation for OAuth 2.0 spec. -## Installation - -~~~~ -go get golang.org/x/oauth2 -~~~~ - -Or you can manually git clone the repository to -`$(go env GOPATH)/src/golang.org/x/oauth2`. - See pkg.go.dev for further documentation and examples. * [pkg.go.dev/golang.org/x/oauth2](https://pkg.go.dev/golang.org/x/oauth2) @@ -33,7 +24,11 @@ The main issue tracker for the oauth2 repository is located at https://github.com/golang/oauth2/issues. This repository uses Gerrit for code changes. To learn how to submit changes to -this repository, see https://golang.org/doc/contribute.html. In particular: +this repository, see https://go.dev/doc/contribute. + +The git repository is https://go.googlesource.com/oauth2. + +Note: * Excluding trivial changes, all contributions should be connected to an existing issue. * API changes must go through the [change proposal process](https://go.dev/s/proposal-process) before they can be accepted. diff --git a/vendor/golang.org/x/oauth2/clientcredentials/clientcredentials.go b/vendor/golang.org/x/oauth2/clientcredentials/clientcredentials.go new file mode 100644 index 00000000..51121a3d --- /dev/null +++ b/vendor/golang.org/x/oauth2/clientcredentials/clientcredentials.go @@ -0,0 +1,124 @@ +// Copyright 2014 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 clientcredentials implements the OAuth2.0 "client credentials" token flow, +// also known as the "two-legged OAuth 2.0". +// +// This should be used when the client is acting on its own behalf or when the client +// is the resource owner. It may also be used when requesting access to protected +// resources based on an authorization previously arranged with the authorization +// server. +// +// See https://tools.ietf.org/html/rfc6749#section-4.4 +package clientcredentials // import "golang.org/x/oauth2/clientcredentials" + +import ( + "context" + "fmt" + "net/http" + "net/url" + "strings" + + "golang.org/x/oauth2" + "golang.org/x/oauth2/internal" +) + +// Config describes a 2-legged OAuth2 flow, with both the +// client application information and the server's endpoint URLs. +type Config struct { + // ClientID is the application's ID. + ClientID string + + // ClientSecret is the application's secret. + ClientSecret string + + // TokenURL is the resource server's token endpoint + // URL. This is a constant specific to each server. + TokenURL string + + // Scopes specifies optional requested permissions. + Scopes []string + + // EndpointParams specifies additional parameters for requests to the token endpoint. + EndpointParams url.Values + + // AuthStyle optionally specifies how the endpoint wants the + // client ID & client secret sent. The zero value means to + // auto-detect. + AuthStyle oauth2.AuthStyle + + // authStyleCache caches which auth style to use when Endpoint.AuthStyle is + // the zero value (AuthStyleAutoDetect). + authStyleCache internal.LazyAuthStyleCache +} + +// Token uses client credentials to retrieve a token. +// +// The provided context optionally controls which HTTP client is used. See the oauth2.HTTPClient variable. +func (c *Config) Token(ctx context.Context) (*oauth2.Token, error) { + return c.TokenSource(ctx).Token() +} + +// Client returns an HTTP client using the provided token. +// The token will auto-refresh as necessary. +// +// The provided context optionally controls which HTTP client +// is returned. See the oauth2.HTTPClient variable. +// +// The returned Client and its Transport should not be modified. +func (c *Config) Client(ctx context.Context) *http.Client { + return oauth2.NewClient(ctx, c.TokenSource(ctx)) +} + +// TokenSource returns a TokenSource that returns t until t expires, +// automatically refreshing it as necessary using the provided context and the +// client ID and client secret. +// +// Most users will use Config.Client instead. +func (c *Config) TokenSource(ctx context.Context) oauth2.TokenSource { + source := &tokenSource{ + ctx: ctx, + conf: c, + } + return oauth2.ReuseTokenSource(nil, source) +} + +type tokenSource struct { + ctx context.Context + conf *Config +} + +// Token refreshes the token by using a new client credentials request. +// tokens received this way do not include a refresh token +func (c *tokenSource) Token() (*oauth2.Token, error) { + v := url.Values{ + "grant_type": {"client_credentials"}, + } + if len(c.conf.Scopes) > 0 { + v.Set("scope", strings.Join(c.conf.Scopes, " ")) + } + for k, p := range c.conf.EndpointParams { + // Allow grant_type to be overridden to allow interoperability with + // non-compliant implementations. + if _, ok := v[k]; ok && k != "grant_type" { + return nil, fmt.Errorf("oauth2: cannot overwrite parameter %q", k) + } + v[k] = p + } + + tk, err := internal.RetrieveToken(c.ctx, c.conf.ClientID, c.conf.ClientSecret, c.conf.TokenURL, v, internal.AuthStyle(c.conf.AuthStyle), c.conf.authStyleCache.Get()) + if err != nil { + if rErr, ok := err.(*internal.RetrieveError); ok { + return nil, (*oauth2.RetrieveError)(rErr) + } + return nil, err + } + t := &oauth2.Token{ + AccessToken: tk.AccessToken, + TokenType: tk.TokenType, + RefreshToken: tk.RefreshToken, + Expiry: tk.Expiry, + } + return t.WithExtra(tk.Raw), nil +} diff --git a/vendor/golang.org/x/oauth2/google/default.go b/vendor/golang.org/x/oauth2/google/default.go index df958359..0260935b 100644 --- a/vendor/golang.org/x/oauth2/google/default.go +++ b/vendor/golang.org/x/oauth2/google/default.go @@ -251,6 +251,12 @@ func FindDefaultCredentials(ctx context.Context, scopes ...string) (*Credentials // a Google Developers service account key file, a gcloud user credentials file (a.k.a. refresh // token JSON), or the JSON configuration file for workload identity federation in non-Google cloud // platforms (see https://cloud.google.com/iam/docs/how-to#using-workload-identity-federation). +// +// Important: If you accept a credential configuration (credential JSON/File/Stream) from an +// external source for authentication to Google Cloud Platform, you must validate it before +// providing it to any Google API or library. Providing an unvalidated credential configuration to +// Google APIs can compromise the security of your systems and data. For more information, refer to +// [Validate credential configurations from external sources](https://cloud.google.com/docs/authentication/external/externally-sourced-credentials). func CredentialsFromJSONWithParams(ctx context.Context, jsonData []byte, params CredentialsParams) (*Credentials, error) { // Make defensive copy of the slices in params. params = params.deepCopy() @@ -294,6 +300,12 @@ func CredentialsFromJSONWithParams(ctx context.Context, jsonData []byte, params } // CredentialsFromJSON invokes CredentialsFromJSONWithParams with the specified scopes. +// +// Important: If you accept a credential configuration (credential JSON/File/Stream) from an +// external source for authentication to Google Cloud Platform, you must validate it before +// providing it to any Google API or library. Providing an unvalidated credential configuration to +// Google APIs can compromise the security of your systems and data. For more information, refer to +// [Validate credential configurations from external sources](https://cloud.google.com/docs/authentication/external/externally-sourced-credentials). func CredentialsFromJSON(ctx context.Context, jsonData []byte, scopes ...string) (*Credentials, error) { var params CredentialsParams params.Scopes = scopes diff --git a/vendor/golang.org/x/oauth2/google/externalaccount/aws.go b/vendor/golang.org/x/oauth2/google/externalaccount/aws.go index ca27c2e9..55d59999 100644 --- a/vendor/golang.org/x/oauth2/google/externalaccount/aws.go +++ b/vendor/golang.org/x/oauth2/google/externalaccount/aws.go @@ -28,7 +28,7 @@ import ( // AwsSecurityCredentials models AWS security credentials. type AwsSecurityCredentials struct { - // AccessKeyId is the AWS Access Key ID - Required. + // AccessKeyID is the AWS Access Key ID - Required. AccessKeyID string `json:"AccessKeyID"` // SecretAccessKey is the AWS Secret Access Key - Required. SecretAccessKey string `json:"SecretAccessKey"` diff --git a/vendor/golang.org/x/oauth2/google/externalaccount/basecredentials.go b/vendor/golang.org/x/oauth2/google/externalaccount/basecredentials.go index 6c81a687..fc106347 100644 --- a/vendor/golang.org/x/oauth2/google/externalaccount/basecredentials.go +++ b/vendor/golang.org/x/oauth2/google/externalaccount/basecredentials.go @@ -278,20 +278,52 @@ type Format struct { type CredentialSource struct { // File is the location for file sourced credentials. // One field amongst File, URL, Executable, or EnvironmentID should be provided, depending on the kind of credential in question. + // + // Important: If you accept a credential configuration (credential + // JSON/File/Stream) from an external source for authentication to Google + // Cloud Platform, you must validate it before providing it to any Google + // API or library. Providing an unvalidated credential configuration to + // Google APIs can compromise the security of your systems and data. For + // more information, refer to [Validate credential configurations from + // external sources](https://cloud.google.com/docs/authentication/external/externally-sourced-credentials). File string `json:"file"` // Url is the URL to call for URL sourced credentials. // One field amongst File, URL, Executable, or EnvironmentID should be provided, depending on the kind of credential in question. + // + // Important: If you accept a credential configuration (credential + // JSON/File/Stream) from an external source for authentication to Google + // Cloud Platform, you must validate it before providing it to any Google + // API or library. Providing an unvalidated credential configuration to + // Google APIs can compromise the security of your systems and data. For + // more information, refer to [Validate credential configurations from + // external sources](https://cloud.google.com/docs/authentication/external/externally-sourced-credentials). URL string `json:"url"` // Headers are the headers to attach to the request for URL sourced credentials. Headers map[string]string `json:"headers"` // Executable is the configuration object for executable sourced credentials. // One field amongst File, URL, Executable, or EnvironmentID should be provided, depending on the kind of credential in question. + // + // Important: If you accept a credential configuration (credential + // JSON/File/Stream) from an external source for authentication to Google + // Cloud Platform, you must validate it before providing it to any Google + // API or library. Providing an unvalidated credential configuration to + // Google APIs can compromise the security of your systems and data. For + // more information, refer to [Validate credential configurations from + // external sources](https://cloud.google.com/docs/authentication/external/externally-sourced-credentials). Executable *ExecutableConfig `json:"executable"` // EnvironmentID is the EnvironmentID used for AWS sourced credentials. This should start with "AWS". // One field amongst File, URL, Executable, or EnvironmentID should be provided, depending on the kind of credential in question. + // + // Important: If you accept a credential configuration (credential + // JSON/File/Stream) from an external source for authentication to Google + // Cloud Platform, you must validate it before providing it to any Google + // API or library. Providing an unvalidated credential configuration to + // Google APIs can compromise the security of your systems and data. For + // more information, refer to [Validate credential configurations from + // external sources](https://cloud.google.com/docs/authentication/external/externally-sourced-credentials). EnvironmentID string `json:"environment_id"` // RegionURL is the metadata URL to retrieve the region from for EC2 AWS credentials. RegionURL string `json:"region_url"` @@ -329,7 +361,7 @@ type SubjectTokenSupplier interface { type AwsSecurityCredentialsSupplier interface { // AwsRegion should return the AWS region or an error. AwsRegion(ctx context.Context, options SupplierOptions) (string, error) - // GetAwsSecurityCredentials should return a valid set of AwsSecurityCredentials or an error. + // AwsSecurityCredentials should return a valid set of AwsSecurityCredentials or an error. // The external account token source does not cache the returned security credentials, so caching // logic should be implemented in the supplier to prevent multiple requests for the same security credentials. AwsSecurityCredentials(ctx context.Context, options SupplierOptions) (*AwsSecurityCredentials, error) diff --git a/vendor/golang.org/x/oauth2/oauth2.go b/vendor/golang.org/x/oauth2/oauth2.go index 09f6a49b..74f052aa 100644 --- a/vendor/golang.org/x/oauth2/oauth2.go +++ b/vendor/golang.org/x/oauth2/oauth2.go @@ -56,7 +56,7 @@ type Config struct { // the OAuth flow, after the resource owner's URLs. RedirectURL string - // Scope specifies optional requested permissions. + // Scopes specifies optional requested permissions. Scopes []string // authStyleCache caches which auth style to use when Endpoint.AuthStyle is diff --git a/vendor/golang.org/x/sync/errgroup/errgroup.go b/vendor/golang.org/x/sync/errgroup/errgroup.go index 948a3ee6..a4ea5d14 100644 --- a/vendor/golang.org/x/sync/errgroup/errgroup.go +++ b/vendor/golang.org/x/sync/errgroup/errgroup.go @@ -46,7 +46,7 @@ func (g *Group) done() { // returns a non-nil error or the first time Wait returns, whichever occurs // first. func WithContext(ctx context.Context) (*Group, context.Context) { - ctx, cancel := withCancelCause(ctx) + ctx, cancel := context.WithCancelCause(ctx) return &Group{cancel: cancel}, ctx } @@ -118,6 +118,7 @@ func (g *Group) TryGo(f func() error) bool { // SetLimit limits the number of active goroutines in this group to at most n. // A negative value indicates no limit. +// A limit of zero will prevent any new goroutines from being added. // // Any subsequent call to the Go method will block until it can add an active // goroutine without exceeding the configured limit. diff --git a/vendor/golang.org/x/sync/errgroup/go120.go b/vendor/golang.org/x/sync/errgroup/go120.go deleted file mode 100644 index f93c740b..00000000 --- a/vendor/golang.org/x/sync/errgroup/go120.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2023 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. - -//go:build go1.20 - -package errgroup - -import "context" - -func withCancelCause(parent context.Context) (context.Context, func(error)) { - return context.WithCancelCause(parent) -} diff --git a/vendor/golang.org/x/sync/errgroup/pre_go120.go b/vendor/golang.org/x/sync/errgroup/pre_go120.go deleted file mode 100644 index 88ce3343..00000000 --- a/vendor/golang.org/x/sync/errgroup/pre_go120.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2023 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. - -//go:build !go1.20 - -package errgroup - -import "context" - -func withCancelCause(parent context.Context) (context.Context, func(error)) { - ctx, cancel := context.WithCancel(parent) - return ctx, func(error) { cancel() } -} diff --git a/vendor/golang.org/x/sys/cpu/cpu.go b/vendor/golang.org/x/sys/cpu/cpu.go index 02609d5b..9c105f23 100644 --- a/vendor/golang.org/x/sys/cpu/cpu.go +++ b/vendor/golang.org/x/sys/cpu/cpu.go @@ -72,6 +72,9 @@ var X86 struct { HasSSSE3 bool // Supplemental streaming SIMD extension 3 HasSSE41 bool // Streaming SIMD extension 4 and 4.1 HasSSE42 bool // Streaming SIMD extension 4 and 4.2 + HasAVXIFMA bool // Advanced vector extension Integer Fused Multiply Add + HasAVXVNNI bool // Advanced vector extension Vector Neural Network Instructions + HasAVXVNNIInt8 bool // Advanced vector extension Vector Neural Network Int8 instructions _ CacheLinePad } diff --git a/vendor/golang.org/x/sys/cpu/cpu_x86.go b/vendor/golang.org/x/sys/cpu/cpu_x86.go index 600a6807..1e642f33 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_x86.go +++ b/vendor/golang.org/x/sys/cpu/cpu_x86.go @@ -53,6 +53,9 @@ func initOptions() { {Name: "sse41", Feature: &X86.HasSSE41}, {Name: "sse42", Feature: &X86.HasSSE42}, {Name: "ssse3", Feature: &X86.HasSSSE3}, + {Name: "avxifma", Feature: &X86.HasAVXIFMA}, + {Name: "avxvnni", Feature: &X86.HasAVXVNNI}, + {Name: "avxvnniint8", Feature: &X86.HasAVXVNNIInt8}, // These capabilities should always be enabled on amd64: {Name: "sse2", Feature: &X86.HasSSE2, Required: runtime.GOARCH == "amd64"}, @@ -106,7 +109,7 @@ func archInit() { return } - _, ebx7, ecx7, edx7 := cpuid(7, 0) + eax7, ebx7, ecx7, edx7 := cpuid(7, 0) X86.HasBMI1 = isSet(3, ebx7) X86.HasAVX2 = isSet(5, ebx7) && osSupportsAVX X86.HasBMI2 = isSet(8, ebx7) @@ -134,14 +137,24 @@ func archInit() { X86.HasAVX512VAES = isSet(9, ecx7) X86.HasAVX512VBMI2 = isSet(6, ecx7) X86.HasAVX512BITALG = isSet(12, ecx7) - - eax71, _, _, _ := cpuid(7, 1) - X86.HasAVX512BF16 = isSet(5, eax71) } X86.HasAMXTile = isSet(24, edx7) X86.HasAMXInt8 = isSet(25, edx7) X86.HasAMXBF16 = isSet(22, edx7) + + // These features depend on the second level of extended features. + if eax7 >= 1 { + eax71, _, _, edx71 := cpuid(7, 1) + if X86.HasAVX512 { + X86.HasAVX512BF16 = isSet(5, eax71) + } + if X86.HasAVX { + X86.HasAVXIFMA = isSet(23, eax71) + X86.HasAVXVNNI = isSet(4, eax71) + X86.HasAVXVNNIInt8 = isSet(4, edx71) + } + } } func isSet(bitpos uint, value uint32) bool { diff --git a/vendor/golang.org/x/sys/unix/auxv.go b/vendor/golang.org/x/sys/unix/auxv.go new file mode 100644 index 00000000..37a82528 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/auxv.go @@ -0,0 +1,36 @@ +// Copyright 2025 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. + +//go:build go1.21 && (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos) + +package unix + +import ( + "syscall" + "unsafe" +) + +//go:linkname runtime_getAuxv runtime.getAuxv +func runtime_getAuxv() []uintptr + +// Auxv returns the ELF auxiliary vector as a sequence of key/value pairs. +// The returned slice is always a fresh copy, owned by the caller. +// It returns an error on non-ELF platforms, or if the auxiliary vector cannot be accessed, +// which happens in some locked-down environments and build modes. +func Auxv() ([][2]uintptr, error) { + vec := runtime_getAuxv() + vecLen := len(vec) + + if vecLen == 0 { + return nil, syscall.ENOENT + } + + if vecLen%2 != 0 { + return nil, syscall.EINVAL + } + + result := make([]uintptr, vecLen) + copy(result, vec) + return unsafe.Slice((*[2]uintptr)(unsafe.Pointer(&result[0])), vecLen/2), nil +} diff --git a/vendor/golang.org/x/sys/unix/auxv_unsupported.go b/vendor/golang.org/x/sys/unix/auxv_unsupported.go new file mode 100644 index 00000000..1200487f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/auxv_unsupported.go @@ -0,0 +1,13 @@ +// Copyright 2025 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. + +//go:build !go1.21 && (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos) + +package unix + +import "syscall" + +func Auxv() ([][2]uintptr, error) { + return nil, syscall.ENOTSUP +} diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go index 97cb916f..be8c0020 100644 --- a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go +++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go @@ -246,6 +246,18 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e return sendfile(outfd, infd, offset, count) } +func Dup3(oldfd, newfd, flags int) error { + if oldfd == newfd || flags&^O_CLOEXEC != 0 { + return EINVAL + } + how := F_DUP2FD + if flags&O_CLOEXEC != 0 { + how = F_DUP2FD_CLOEXEC + } + _, err := fcntl(oldfd, how, newfd) + return err +} + /* * Exposed directly */ diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go index 21974af0..abc39554 100644 --- a/vendor/golang.org/x/sys/unix/syscall_solaris.go +++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -1102,3 +1102,90 @@ func (s *Strioctl) SetInt(i int) { func IoctlSetStrioctlRetInt(fd int, req int, s *Strioctl) (int, error) { return ioctlPtrRet(fd, req, unsafe.Pointer(s)) } + +// Ucred Helpers +// See ucred(3c) and getpeerucred(3c) + +//sys getpeerucred(fd uintptr, ucred *uintptr) (err error) +//sys ucredFree(ucred uintptr) = ucred_free +//sys ucredGet(pid int) (ucred uintptr, err error) = ucred_get +//sys ucredGeteuid(ucred uintptr) (uid int) = ucred_geteuid +//sys ucredGetegid(ucred uintptr) (gid int) = ucred_getegid +//sys ucredGetruid(ucred uintptr) (uid int) = ucred_getruid +//sys ucredGetrgid(ucred uintptr) (gid int) = ucred_getrgid +//sys ucredGetsuid(ucred uintptr) (uid int) = ucred_getsuid +//sys ucredGetsgid(ucred uintptr) (gid int) = ucred_getsgid +//sys ucredGetpid(ucred uintptr) (pid int) = ucred_getpid + +// Ucred is an opaque struct that holds user credentials. +type Ucred struct { + ucred uintptr +} + +// We need to ensure that ucredFree is called on the underlying ucred +// when the Ucred is garbage collected. +func ucredFinalizer(u *Ucred) { + ucredFree(u.ucred) +} + +func GetPeerUcred(fd uintptr) (*Ucred, error) { + var ucred uintptr + err := getpeerucred(fd, &ucred) + if err != nil { + return nil, err + } + result := &Ucred{ + ucred: ucred, + } + // set the finalizer on the result so that the ucred will be freed + runtime.SetFinalizer(result, ucredFinalizer) + return result, nil +} + +func UcredGet(pid int) (*Ucred, error) { + ucred, err := ucredGet(pid) + if err != nil { + return nil, err + } + result := &Ucred{ + ucred: ucred, + } + // set the finalizer on the result so that the ucred will be freed + runtime.SetFinalizer(result, ucredFinalizer) + return result, nil +} + +func (u *Ucred) Geteuid() int { + defer runtime.KeepAlive(u) + return ucredGeteuid(u.ucred) +} + +func (u *Ucred) Getruid() int { + defer runtime.KeepAlive(u) + return ucredGetruid(u.ucred) +} + +func (u *Ucred) Getsuid() int { + defer runtime.KeepAlive(u) + return ucredGetsuid(u.ucred) +} + +func (u *Ucred) Getegid() int { + defer runtime.KeepAlive(u) + return ucredGetegid(u.ucred) +} + +func (u *Ucred) Getrgid() int { + defer runtime.KeepAlive(u) + return ucredGetrgid(u.ucred) +} + +func (u *Ucred) Getsgid() int { + defer runtime.KeepAlive(u) + return ucredGetsgid(u.ucred) +} + +func (u *Ucred) Getpid() int { + defer runtime.KeepAlive(u) + return ucredGetpid(u.ucred) +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go index 6ebc48b3..4f432bfe 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -1245,6 +1245,7 @@ const ( FAN_REPORT_DFID_NAME = 0xc00 FAN_REPORT_DFID_NAME_TARGET = 0x1e00 FAN_REPORT_DIR_FID = 0x400 + FAN_REPORT_FD_ERROR = 0x2000 FAN_REPORT_FID = 0x200 FAN_REPORT_NAME = 0x800 FAN_REPORT_PIDFD = 0x80 @@ -1330,8 +1331,10 @@ const ( FUSE_SUPER_MAGIC = 0x65735546 FUTEXFS_SUPER_MAGIC = 0xbad1dea F_ADD_SEALS = 0x409 + F_CREATED_QUERY = 0x404 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x406 + F_DUPFD_QUERY = 0x403 F_EXLCK = 0x4 F_GETFD = 0x1 F_GETFL = 0x3 @@ -1551,6 +1554,7 @@ const ( IPPROTO_ROUTING = 0x2b IPPROTO_RSVP = 0x2e IPPROTO_SCTP = 0x84 + IPPROTO_SMC = 0x100 IPPROTO_TCP = 0x6 IPPROTO_TP = 0x1d IPPROTO_UDP = 0x11 @@ -1623,6 +1627,8 @@ const ( IPV6_UNICAST_IF = 0x4c IPV6_USER_FLOW = 0xe IPV6_V6ONLY = 0x1a + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 IPV6_XFRM_POLICY = 0x23 IP_ADD_MEMBERSHIP = 0x23 IP_ADD_SOURCE_MEMBERSHIP = 0x27 @@ -1867,6 +1873,7 @@ const ( MADV_UNMERGEABLE = 0xd MADV_WILLNEED = 0x3 MADV_WIPEONFORK = 0x12 + MAP_DROPPABLE = 0x8 MAP_FILE = 0x0 MAP_FIXED = 0x10 MAP_FIXED_NOREPLACE = 0x100000 @@ -1967,6 +1974,7 @@ const ( MSG_PEEK = 0x2 MSG_PROXY = 0x10 MSG_RST = 0x1000 + MSG_SOCK_DEVMEM = 0x2000000 MSG_SYN = 0x400 MSG_TRUNC = 0x20 MSG_TRYHARD = 0x4 @@ -2083,6 +2091,7 @@ const ( NFC_ATR_REQ_MAXSIZE = 0x40 NFC_ATR_RES_GB_MAXSIZE = 0x2f NFC_ATR_RES_MAXSIZE = 0x40 + NFC_ATS_MAXSIZE = 0x14 NFC_COMM_ACTIVE = 0x0 NFC_COMM_PASSIVE = 0x1 NFC_DEVICE_NAME_MAXSIZE = 0x8 @@ -2163,6 +2172,7 @@ const ( NFNL_SUBSYS_QUEUE = 0x3 NFNL_SUBSYS_ULOG = 0x4 NFS_SUPER_MAGIC = 0x6969 + NFT_BITWISE_BOOL = 0x0 NFT_CHAIN_FLAGS = 0x7 NFT_CHAIN_MAXNAMELEN = 0x100 NFT_CT_MAX = 0x17 @@ -2491,6 +2501,7 @@ const ( PR_GET_PDEATHSIG = 0x2 PR_GET_SECCOMP = 0x15 PR_GET_SECUREBITS = 0x1b + PR_GET_SHADOW_STACK_STATUS = 0x4a PR_GET_SPECULATION_CTRL = 0x34 PR_GET_TAGGED_ADDR_CTRL = 0x38 PR_GET_THP_DISABLE = 0x2a @@ -2499,6 +2510,7 @@ const ( PR_GET_TIMING = 0xd PR_GET_TSC = 0x19 PR_GET_UNALIGN = 0x5 + PR_LOCK_SHADOW_STACK_STATUS = 0x4c PR_MCE_KILL = 0x21 PR_MCE_KILL_CLEAR = 0x0 PR_MCE_KILL_DEFAULT = 0x2 @@ -2525,6 +2537,8 @@ const ( PR_PAC_GET_ENABLED_KEYS = 0x3d PR_PAC_RESET_KEYS = 0x36 PR_PAC_SET_ENABLED_KEYS = 0x3c + PR_PMLEN_MASK = 0x7f000000 + PR_PMLEN_SHIFT = 0x18 PR_PPC_DEXCR_CTRL_CLEAR = 0x4 PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC = 0x10 PR_PPC_DEXCR_CTRL_EDITABLE = 0x1 @@ -2592,6 +2606,7 @@ const ( PR_SET_PTRACER = 0x59616d61 PR_SET_SECCOMP = 0x16 PR_SET_SECUREBITS = 0x1c + PR_SET_SHADOW_STACK_STATUS = 0x4b PR_SET_SPECULATION_CTRL = 0x35 PR_SET_SYSCALL_USER_DISPATCH = 0x3b PR_SET_TAGGED_ADDR_CTRL = 0x37 @@ -2602,6 +2617,9 @@ const ( PR_SET_UNALIGN = 0x6 PR_SET_VMA = 0x53564d41 PR_SET_VMA_ANON_NAME = 0x0 + PR_SHADOW_STACK_ENABLE = 0x1 + PR_SHADOW_STACK_PUSH = 0x4 + PR_SHADOW_STACK_WRITE = 0x2 PR_SME_GET_VL = 0x40 PR_SME_SET_VL = 0x3f PR_SME_SET_VL_ONEXEC = 0x40000 @@ -2911,7 +2929,6 @@ const ( RTM_NEWNEXTHOP = 0x68 RTM_NEWNEXTHOPBUCKET = 0x74 RTM_NEWNSID = 0x58 - RTM_NEWNVLAN = 0x70 RTM_NEWPREFIX = 0x34 RTM_NEWQDISC = 0x24 RTM_NEWROUTE = 0x18 @@ -2920,6 +2937,7 @@ const ( RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c RTM_NEWTUNNEL = 0x78 + RTM_NEWVLAN = 0x70 RTM_NR_FAMILIES = 0x1b RTM_NR_MSGTYPES = 0x6c RTM_SETDCB = 0x4f diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go index c0d45e32..75207613 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -116,6 +116,8 @@ const ( IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -304,6 +306,7 @@ const ( SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go index c731d24f..c68acda5 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -116,6 +116,8 @@ const ( IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -305,6 +307,7 @@ const ( SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go index 680018a4..a8c607ab 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -115,6 +115,8 @@ const ( IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -310,6 +312,7 @@ const ( SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go index a63909f3..18563dd8 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -109,6 +109,7 @@ const ( F_SETOWN = 0x8 F_UNLCK = 0x2 F_WRLCK = 0x1 + GCS_MAGIC = 0x47435300 HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 @@ -119,6 +120,8 @@ const ( IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -302,6 +305,7 @@ const ( SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go index 9b0a2573..22912cda 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go @@ -116,6 +116,8 @@ const ( IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -297,6 +299,7 @@ const ( SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go index 958e6e06..29344eb3 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -115,6 +115,8 @@ const ( IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x80 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xfffffff + IPV6_FLOWLABEL_MASK = 0xfffff ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -303,6 +305,7 @@ const ( SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go index 50c7f25b..20d51fb9 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -115,6 +115,8 @@ const ( IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x80 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xfffffff + IPV6_FLOWLABEL_MASK = 0xfffff ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -303,6 +305,7 @@ const ( SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go index ced21d66..321b6090 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -115,6 +115,8 @@ const ( IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x80 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -303,6 +305,7 @@ const ( SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go index 226c0441..9bacdf1e 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -115,6 +115,8 @@ const ( IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x80 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -303,6 +305,7 @@ const ( SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go index 3122737c..c2242726 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -115,6 +115,8 @@ const ( IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xfffffff + IPV6_FLOWLABEL_MASK = 0xfffff ISIG = 0x80 IUCLC = 0x1000 IXOFF = 0x400 @@ -358,6 +360,7 @@ const ( SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go index eb5d3467..6270c8ee 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -115,6 +115,8 @@ const ( IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xfffffff + IPV6_FLOWLABEL_MASK = 0xfffff ISIG = 0x80 IUCLC = 0x1000 IXOFF = 0x400 @@ -362,6 +364,7 @@ const ( SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go index e921ebc6..9966c194 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -115,6 +115,8 @@ const ( IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x80 IUCLC = 0x1000 IXOFF = 0x400 @@ -362,6 +364,7 @@ const ( SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index 38ba81c5..848e5fcc 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -115,6 +115,8 @@ const ( IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -294,6 +296,7 @@ const ( SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go index 71f04009..669b2adb 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -115,6 +115,8 @@ const ( IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xfffffff + IPV6_FLOWLABEL_MASK = 0xfffff ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -366,6 +368,7 @@ const ( SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go index c44a3133..4834e575 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -119,6 +119,8 @@ const ( IN_CLOEXEC = 0x400000 IN_NONBLOCK = 0x4000 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xfffffff + IPV6_FLOWLABEL_MASK = 0xfffff ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -357,6 +359,7 @@ const ( SCM_TIMESTAMPING_OPT_STATS = 0x38 SCM_TIMESTAMPING_PKTINFO = 0x3c SCM_TIMESTAMPNS = 0x21 + SCM_TS_OPT_ID = 0x5a SCM_TXTIME = 0x3f SCM_WIFI_STATUS = 0x25 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go index 829b87fe..c6545413 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go @@ -141,6 +141,16 @@ import ( //go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so" //go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so" //go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so" +//go:cgo_import_dynamic libc_getpeerucred getpeerucred "libc.so" +//go:cgo_import_dynamic libc_ucred_get ucred_get "libc.so" +//go:cgo_import_dynamic libc_ucred_geteuid ucred_geteuid "libc.so" +//go:cgo_import_dynamic libc_ucred_getegid ucred_getegid "libc.so" +//go:cgo_import_dynamic libc_ucred_getruid ucred_getruid "libc.so" +//go:cgo_import_dynamic libc_ucred_getrgid ucred_getrgid "libc.so" +//go:cgo_import_dynamic libc_ucred_getsuid ucred_getsuid "libc.so" +//go:cgo_import_dynamic libc_ucred_getsgid ucred_getsgid "libc.so" +//go:cgo_import_dynamic libc_ucred_getpid ucred_getpid "libc.so" +//go:cgo_import_dynamic libc_ucred_free ucred_free "libc.so" //go:cgo_import_dynamic libc_port_create port_create "libc.so" //go:cgo_import_dynamic libc_port_associate port_associate "libc.so" //go:cgo_import_dynamic libc_port_dissociate port_dissociate "libc.so" @@ -280,6 +290,16 @@ import ( //go:linkname procgetpeername libc_getpeername //go:linkname procsetsockopt libc_setsockopt //go:linkname procrecvfrom libc_recvfrom +//go:linkname procgetpeerucred libc_getpeerucred +//go:linkname procucred_get libc_ucred_get +//go:linkname procucred_geteuid libc_ucred_geteuid +//go:linkname procucred_getegid libc_ucred_getegid +//go:linkname procucred_getruid libc_ucred_getruid +//go:linkname procucred_getrgid libc_ucred_getrgid +//go:linkname procucred_getsuid libc_ucred_getsuid +//go:linkname procucred_getsgid libc_ucred_getsgid +//go:linkname procucred_getpid libc_ucred_getpid +//go:linkname procucred_free libc_ucred_free //go:linkname procport_create libc_port_create //go:linkname procport_associate libc_port_associate //go:linkname procport_dissociate libc_port_dissociate @@ -420,6 +440,16 @@ var ( procgetpeername, procsetsockopt, procrecvfrom, + procgetpeerucred, + procucred_get, + procucred_geteuid, + procucred_getegid, + procucred_getruid, + procucred_getrgid, + procucred_getsuid, + procucred_getsgid, + procucred_getpid, + procucred_free, procport_create, procport_associate, procport_dissociate, @@ -2029,6 +2059,90 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func getpeerucred(fd uintptr, ucred *uintptr) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetpeerucred)), 2, uintptr(fd), uintptr(unsafe.Pointer(ucred)), 0, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGet(pid int) (ucred uintptr, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procucred_get)), 1, uintptr(pid), 0, 0, 0, 0, 0) + ucred = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGeteuid(ucred uintptr) (uid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_geteuid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGetegid(ucred uintptr) (gid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getegid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGetruid(ucred uintptr) (uid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getruid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGetrgid(ucred uintptr) (gid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getrgid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGetsuid(ucred uintptr) (uid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getsuid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGetsgid(ucred uintptr) (gid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getsgid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGetpid(ucred uintptr) (pid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getpid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredFree(ucred uintptr) { + sysvicall6(uintptr(unsafe.Pointer(&procucred_free)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func port_create() (n int, err error) { r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_create)), 0, 0, 0, 0, 0, 0, 0) n = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go index 524b0820..c79aaff3 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -458,4 +458,8 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go index f485dbf4..5eb45069 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -381,4 +381,8 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go index 70b35bf3..05e50297 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -422,4 +422,8 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go index 1893e2fe..38c53ec5 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -325,4 +325,8 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go index 16a4017d..31d2e71a 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go @@ -321,4 +321,8 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go index 7e567f1e..f4184a33 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -442,4 +442,8 @@ const ( SYS_LSM_SET_SELF_ATTR = 4460 SYS_LSM_LIST_MODULES = 4461 SYS_MSEAL = 4462 + SYS_SETXATTRAT = 4463 + SYS_GETXATTRAT = 4464 + SYS_LISTXATTRAT = 4465 + SYS_REMOVEXATTRAT = 4466 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go index 38ae55e5..05b99622 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -372,4 +372,8 @@ const ( SYS_LSM_SET_SELF_ATTR = 5460 SYS_LSM_LIST_MODULES = 5461 SYS_MSEAL = 5462 + SYS_SETXATTRAT = 5463 + SYS_GETXATTRAT = 5464 + SYS_LISTXATTRAT = 5465 + SYS_REMOVEXATTRAT = 5466 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go index 55e92e60..43a256e9 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -372,4 +372,8 @@ const ( SYS_LSM_SET_SELF_ATTR = 5460 SYS_LSM_LIST_MODULES = 5461 SYS_MSEAL = 5462 + SYS_SETXATTRAT = 5463 + SYS_GETXATTRAT = 5464 + SYS_LISTXATTRAT = 5465 + SYS_REMOVEXATTRAT = 5466 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go index 60658d6a..eea5ddfc 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -442,4 +442,8 @@ const ( SYS_LSM_SET_SELF_ATTR = 4460 SYS_LSM_LIST_MODULES = 4461 SYS_MSEAL = 4462 + SYS_SETXATTRAT = 4463 + SYS_GETXATTRAT = 4464 + SYS_LISTXATTRAT = 4465 + SYS_REMOVEXATTRAT = 4466 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go index e203e8a7..0d777bfb 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go @@ -449,4 +449,8 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go index 5944b97d..b4463650 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -421,4 +421,8 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go index c66d416d..0c7d21c1 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -421,4 +421,8 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go index a5459e76..84053916 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -326,4 +326,8 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go index 01d86825..fcf1b790 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -387,4 +387,8 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go index 7b703e77..52d15b5f 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -400,4 +400,8 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 ) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go index 5537148d..a46abe64 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -4747,7 +4747,7 @@ const ( NL80211_ATTR_MAC_HINT = 0xc8 NL80211_ATTR_MAC_MASK = 0xd7 NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca - NL80211_ATTR_MAX = 0x14c + NL80211_ATTR_MAX = 0x14d NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4 NL80211_ATTR_MAX_CSA_COUNTERS = 0xce NL80211_ATTR_MAX_MATCH_SETS = 0x85 @@ -5519,7 +5519,7 @@ const ( NL80211_MNTR_FLAG_CONTROL = 0x3 NL80211_MNTR_FLAG_COOK_FRAMES = 0x5 NL80211_MNTR_FLAG_FCSFAIL = 0x1 - NL80211_MNTR_FLAG_MAX = 0x6 + NL80211_MNTR_FLAG_MAX = 0x7 NL80211_MNTR_FLAG_OTHER_BSS = 0x4 NL80211_MNTR_FLAG_PLCPFAIL = 0x2 NL80211_MPATH_FLAG_ACTIVE = 0x1 @@ -6174,3 +6174,5 @@ type SockDiagReq struct { Family uint8 Protocol uint8 } + +const RTM_NEWNVLAN = 0x70 diff --git a/vendor/golang.org/x/sys/windows/dll_windows.go b/vendor/golang.org/x/sys/windows/dll_windows.go index 4e613cf6..3ca814f5 100644 --- a/vendor/golang.org/x/sys/windows/dll_windows.go +++ b/vendor/golang.org/x/sys/windows/dll_windows.go @@ -43,8 +43,8 @@ type DLL struct { // LoadDLL loads DLL file into memory. // // Warning: using LoadDLL without an absolute path name is subject to -// DLL preloading attacks. To safely load a system DLL, use LazyDLL -// with System set to true, or use LoadLibraryEx directly. +// DLL preloading attacks. To safely load a system DLL, use [NewLazySystemDLL], +// or use [LoadLibraryEx] directly. func LoadDLL(name string) (dll *DLL, err error) { namep, err := UTF16PtrFromString(name) if err != nil { @@ -271,6 +271,9 @@ func (d *LazyDLL) NewProc(name string) *LazyProc { } // NewLazyDLL creates new LazyDLL associated with DLL file. +// +// Warning: using NewLazyDLL without an absolute path name is subject to +// DLL preloading attacks. To safely load a system DLL, use [NewLazySystemDLL]. func NewLazyDLL(name string) *LazyDLL { return &LazyDLL{Name: name} } @@ -410,7 +413,3 @@ func loadLibraryEx(name string, system bool) (*DLL, error) { } return &DLL{Name: name, Handle: h}, nil } - -type errString string - -func (s errString) Error() string { return string(s) } diff --git a/vendor/golang.org/x/text/language/parse.go b/vendor/golang.org/x/text/language/parse.go index 4d57222e..053336e2 100644 --- a/vendor/golang.org/x/text/language/parse.go +++ b/vendor/golang.org/x/text/language/parse.go @@ -59,7 +59,7 @@ func (c CanonType) Parse(s string) (t Tag, err error) { if changed { tt.RemakeString() } - return makeTag(tt), err + return makeTag(tt), nil } // Compose creates a Tag from individual parts, which may be of type Tag, Base, diff --git a/vendor/golang.org/x/tools/LICENSE b/vendor/golang.org/x/tools/LICENSE index 6a66aea5..2a7cf70d 100644 --- a/vendor/golang.org/x/tools/LICENSE +++ b/vendor/golang.org/x/tools/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/vendor/golang.org/x/tools/cmd/goimports/gotypesalias.go b/vendor/golang.org/x/tools/cmd/goimports/gotypesalias.go new file mode 100644 index 00000000..288c10c2 --- /dev/null +++ b/vendor/golang.org/x/tools/cmd/goimports/gotypesalias.go @@ -0,0 +1,12 @@ +// Copyright 2024 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. + +//go:build go1.23 + +//go:debug gotypesalias=1 + +package main + +// Materialize aliases whenever the go toolchain version is after 1.23 (#69772). +// Remove this file after go.mod >= 1.23 (which implies gotypesalias=1). diff --git a/vendor/golang.org/x/tools/cmd/stringer/gotypesalias.go b/vendor/golang.org/x/tools/cmd/stringer/gotypesalias.go new file mode 100644 index 00000000..288c10c2 --- /dev/null +++ b/vendor/golang.org/x/tools/cmd/stringer/gotypesalias.go @@ -0,0 +1,12 @@ +// Copyright 2024 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. + +//go:build go1.23 + +//go:debug gotypesalias=1 + +package main + +// Materialize aliases whenever the go toolchain version is after 1.23 (#69772). +// Remove this file after go.mod >= 1.23 (which implies gotypesalias=1). diff --git a/vendor/golang.org/x/tools/cmd/stringer/stringer.go b/vendor/golang.org/x/tools/cmd/stringer/stringer.go index 2b19c93e..038e8e83 100644 --- a/vendor/golang.org/x/tools/cmd/stringer/stringer.go +++ b/vendor/golang.org/x/tools/cmd/stringer/stringer.go @@ -58,6 +58,11 @@ // where t is the lower-cased name of the first type listed. It can be overridden // with the -output flag. // +// Types can also be declared in tests, in which case type declarations in the +// non-test package or its test variant are preferred over types defined in the +// package with suffix "_test". +// The default output file for type declarations in tests is t_string_test.go with t picked as above. +// // The -linecomment flag tells stringer to generate the text of any line comment, trimmed // of leading spaces, instead of the constant name. For instance, if the constants above had a // Pill prefix, one could write @@ -128,10 +133,6 @@ func main() { // Parse the package once. var dir string - g := Generator{ - trimPrefix: *trimprefix, - lineComment: *linecomment, - } // TODO(suzmue): accept other patterns for packages (directories, list of files, import paths, etc). if len(args) == 1 && isDirectory(args[0]) { dir = args[0] @@ -142,33 +143,90 @@ func main() { dir = filepath.Dir(args[0]) } - g.parsePackage(args, tags) + // For each type, generate code in the first package where the type is declared. + // The order of packages is as follows: + // package x + // package x compiled for tests + // package x_test + // + // Each package pass could result in a separate generated file. + // These files must have the same package and test/not-test nature as the types + // from which they were generated. + // + // Types will be excluded when generated, to avoid repetitions. + pkgs := loadPackages(args, tags, *trimprefix, *linecomment, nil /* logf */) + sort.Slice(pkgs, func(i, j int) bool { + // Put x_test packages last. + iTest := strings.HasSuffix(pkgs[i].name, "_test") + jTest := strings.HasSuffix(pkgs[j].name, "_test") + if iTest != jTest { + return !iTest + } - // Print the header and package clause. - g.Printf("// Code generated by \"stringer %s\"; DO NOT EDIT.\n", strings.Join(os.Args[1:], " ")) - g.Printf("\n") - g.Printf("package %s", g.pkg.name) - g.Printf("\n") - g.Printf("import \"strconv\"\n") // Used by all methods. + return len(pkgs[i].files) < len(pkgs[j].files) + }) + for _, pkg := range pkgs { + g := Generator{ + pkg: pkg, + } - // Run generate for each type. - for _, typeName := range types { - g.generate(typeName) + // Print the header and package clause. + g.Printf("// Code generated by \"stringer %s\"; DO NOT EDIT.\n", strings.Join(os.Args[1:], " ")) + g.Printf("\n") + g.Printf("package %s", g.pkg.name) + g.Printf("\n") + g.Printf("import \"strconv\"\n") // Used by all methods. + + // Run generate for types that can be found. Keep the rest for the remainingTypes iteration. + var foundTypes, remainingTypes []string + for _, typeName := range types { + values := findValues(typeName, pkg) + if len(values) > 0 { + g.generate(typeName, values) + foundTypes = append(foundTypes, typeName) + } else { + remainingTypes = append(remainingTypes, typeName) + } + } + if len(foundTypes) == 0 { + // This package didn't have any of the relevant types, skip writing a file. + continue + } + if len(remainingTypes) > 0 && output != nil && *output != "" { + log.Fatalf("cannot write to single file (-output=%q) when matching types are found in multiple packages", *output) + } + types = remainingTypes + + // Format the output. + src := g.format() + + // Write to file. + outputName := *output + if outputName == "" { + // Type names will be unique across packages since only the first + // match is picked. + // So there won't be collisions between a package compiled for tests + // and the separate package of tests (package foo_test). + outputName = filepath.Join(dir, baseName(pkg, foundTypes[0])) + } + err := os.WriteFile(outputName, src, 0644) + if err != nil { + log.Fatalf("writing output: %s", err) + } } - // Format the output. - src := g.format() - - // Write to file. - outputName := *output - if outputName == "" { - baseName := fmt.Sprintf("%s_string.go", types[0]) - outputName = filepath.Join(dir, strings.ToLower(baseName)) + if len(types) > 0 { + log.Fatalf("no values defined for types: %s", strings.Join(types, ",")) } - err := os.WriteFile(outputName, src, 0644) - if err != nil { - log.Fatalf("writing output: %s", err) +} + +// baseName that will put the generated code together with pkg. +func baseName(pkg *Package, typename string) string { + suffix := "string.go" + if pkg.hasTestFiles { + suffix = "string_test.go" } + return fmt.Sprintf("%s_%s", strings.ToLower(typename), suffix) } // isDirectory reports whether the named file is a directory. @@ -186,13 +244,10 @@ type Generator struct { buf bytes.Buffer // Accumulated output. pkg *Package // Package we are scanning. - trimPrefix string - lineComment bool - - logf func(format string, args ...interface{}) // test logging hook; nil when not testing + logf func(format string, args ...any) // test logging hook; nil when not testing } -func (g *Generator) Printf(format string, args ...interface{}) { +func (g *Generator) Printf(format string, args ...any) { fmt.Fprintf(&g.buf, format, args...) } @@ -209,54 +264,74 @@ type File struct { } type Package struct { - name string - defs map[*ast.Ident]types.Object - files []*File + name string + defs map[*ast.Ident]types.Object + files []*File + hasTestFiles bool } -// parsePackage analyzes the single package constructed from the patterns and tags. -// parsePackage exits if there is an error. -func (g *Generator) parsePackage(patterns []string, tags []string) { +// loadPackages analyzes the single package constructed from the patterns and tags. +// loadPackages exits if there is an error. +// +// Returns all variants (such as tests) of the package. +// +// logf is a test logging hook. It can be nil when not testing. +func loadPackages( + patterns, tags []string, + trimPrefix string, lineComment bool, + logf func(format string, args ...any), +) []*Package { cfg := &packages.Config{ - Mode: packages.NeedName | packages.NeedTypes | packages.NeedTypesInfo | packages.NeedSyntax, - // TODO: Need to think about constants in test files. Maybe write type_string_test.go - // in a separate pass? For later. - Tests: false, + Mode: packages.NeedName | packages.NeedTypes | packages.NeedTypesInfo | packages.NeedSyntax | packages.NeedFiles, + // Tests are included, let the caller decide how to fold them in. + Tests: true, BuildFlags: []string{fmt.Sprintf("-tags=%s", strings.Join(tags, " "))}, - Logf: g.logf, + Logf: logf, } pkgs, err := packages.Load(cfg, patterns...) if err != nil { log.Fatal(err) } - if len(pkgs) != 1 { - log.Fatalf("error: %d packages matching %v", len(pkgs), strings.Join(patterns, " ")) + if len(pkgs) == 0 { + log.Fatalf("error: no packages matching %v", strings.Join(patterns, " ")) } - g.addPackage(pkgs[0]) -} -// addPackage adds a type checked Package and its syntax files to the generator. -func (g *Generator) addPackage(pkg *packages.Package) { - g.pkg = &Package{ - name: pkg.Name, - defs: pkg.TypesInfo.Defs, - files: make([]*File, len(pkg.Syntax)), - } + out := make([]*Package, len(pkgs)) + for i, pkg := range pkgs { + p := &Package{ + name: pkg.Name, + defs: pkg.TypesInfo.Defs, + files: make([]*File, len(pkg.Syntax)), + } + + for j, file := range pkg.Syntax { + p.files[j] = &File{ + file: file, + pkg: p, - for i, file := range pkg.Syntax { - g.pkg.files[i] = &File{ - file: file, - pkg: g.pkg, - trimPrefix: g.trimPrefix, - lineComment: g.lineComment, + trimPrefix: trimPrefix, + lineComment: lineComment, + } } + + // Keep track of test files, since we might want to generated + // code that ends up in that kind of package. + // Can be replaced once https://go.dev/issue/38445 lands. + for _, f := range pkg.GoFiles { + if strings.HasSuffix(f, "_test.go") { + p.hasTestFiles = true + break + } + } + + out[i] = p } + return out } -// generate produces the String method for the named type. -func (g *Generator) generate(typeName string) { +func findValues(typeName string, pkg *Package) []Value { values := make([]Value, 0, 100) - for _, file := range g.pkg.files { + for _, file := range pkg.files { // Set the state for this run of the walker. file.typeName = typeName file.values = nil @@ -265,10 +340,11 @@ func (g *Generator) generate(typeName string) { values = append(values, file.values...) } } + return values +} - if len(values) == 0 { - log.Fatalf("no values defined for type %s", typeName) - } +// generate produces the String method for the named type. +func (g *Generator) generate(typeName string, values []Value) { // Generate code that will fail if the constants change value. g.Printf("func _() {\n") g.Printf("\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n") diff --git a/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go b/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go index 2c4c4e23..6e34df46 100644 --- a/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go +++ b/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go @@ -106,8 +106,21 @@ func PathEnclosingInterval(root *ast.File, start, end token.Pos) (path []ast.Nod // Does augmented child strictly contain [start, end)? if augPos <= start && end <= augEnd { - _, isToken := child.(tokenNode) - return isToken || visit(child) + if is[tokenNode](child) { + return true + } + + // childrenOf elides the FuncType node beneath FuncDecl. + // Add it back here for TypeParams, Params, Results, + // all FieldLists). But we don't add it back for the "func" token + // even though it is is the tree at FuncDecl.Type.Func. + if decl, ok := node.(*ast.FuncDecl); ok { + if fields, ok := child.(*ast.FieldList); ok && fields != decl.Recv { + path = append(path, decl.Type) + } + } + + return visit(child) } // Does [start, end) overlap multiple children? @@ -313,6 +326,8 @@ func childrenOf(n ast.Node) []ast.Node { // // As a workaround, we inline the case for FuncType // here and order things correctly. + // We also need to insert the elided FuncType just + // before the 'visit' recursion. // children = nil // discard ast.Walk(FuncDecl) info subtrees children = append(children, tok(n.Type.Func, len("func"))) @@ -632,3 +647,8 @@ func NodeDescription(n ast.Node) string { } panic(fmt.Sprintf("unexpected node type: %T", n)) } + +func is[T any](x any) bool { + _, ok := x.(T) + return ok +} diff --git a/vendor/golang.org/x/tools/go/ast/astutil/imports.go b/vendor/golang.org/x/tools/go/ast/astutil/imports.go index 18d1adb0..a6b5ed0a 100644 --- a/vendor/golang.org/x/tools/go/ast/astutil/imports.go +++ b/vendor/golang.org/x/tools/go/ast/astutil/imports.go @@ -344,7 +344,12 @@ func RewriteImport(fset *token.FileSet, f *ast.File, oldPath, newPath string) (r } // UsesImport reports whether a given import is used. +// The provided File must have been parsed with syntactic object resolution +// (not using go/parser.SkipObjectResolution). func UsesImport(f *ast.File, path string) (used bool) { + if f.Scope == nil { + panic("file f was not parsed with syntactic object resolution") + } spec := importSpec(f, path) if spec == nil { return diff --git a/vendor/golang.org/x/tools/go/ast/astutil/util.go b/vendor/golang.org/x/tools/go/ast/astutil/util.go index 919d5305..ca71e3e1 100644 --- a/vendor/golang.org/x/tools/go/ast/astutil/util.go +++ b/vendor/golang.org/x/tools/go/ast/astutil/util.go @@ -7,12 +7,5 @@ package astutil import "go/ast" // Unparen returns e with any enclosing parentheses stripped. -func Unparen(e ast.Expr) ast.Expr { - for { - p, ok := e.(*ast.ParenExpr) - if !ok { - return e - } - e = p.X - } -} +// Deprecated: use [ast.Unparen]. +func Unparen(e ast.Expr) ast.Expr { return ast.Unparen(e) } diff --git a/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go b/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go index 137cc8df..65fe2628 100644 --- a/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go +++ b/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go @@ -2,22 +2,64 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Package gcexportdata provides functions for locating, reading, and -// writing export data files containing type information produced by the -// gc compiler. This package supports go1.7 export data format and all -// later versions. -// -// Although it might seem convenient for this package to live alongside -// go/types in the standard library, this would cause version skew -// problems for developer tools that use it, since they must be able to -// consume the outputs of the gc compiler both before and after a Go -// update such as from Go 1.7 to Go 1.8. Because this package lives in -// golang.org/x/tools, sites can update their version of this repo some -// time before the Go 1.8 release and rebuild and redeploy their -// developer tools, which will then be able to consume both Go 1.7 and -// Go 1.8 export data files, so they will work before and after the -// Go update. (See discussion at https://golang.org/issue/15651.) -package gcexportdata // import "golang.org/x/tools/go/gcexportdata" +// Package gcexportdata provides functions for reading and writing +// export data, which is a serialized description of the API of a Go +// package including the names, kinds, types, and locations of all +// exported declarations. +// +// The standard Go compiler (cmd/compile) writes an export data file +// for each package it compiles, which it later reads when compiling +// packages that import the earlier one. The compiler must thus +// contain logic to both write and read export data. +// (See the "Export" section in the cmd/compile/README file.) +// +// The [Read] function in this package can read files produced by the +// compiler, producing [go/types] data structures. As a matter of +// policy, Read supports export data files produced by only the last +// two Go releases plus tip; see https://go.dev/issue/68898. The +// export data files produced by the compiler contain additional +// details related to generics, inlining, and other optimizations that +// cannot be decoded by the [Read] function. +// +// In files written by the compiler, the export data is not at the +// start of the file. Before calling Read, use [NewReader] to locate +// the desired portion of the file. +// +// The [Write] function in this package encodes the exported API of a +// Go package ([types.Package]) as a file. Such files can be later +// decoded by Read, but cannot be consumed by the compiler. +// +// # Future changes +// +// Although Read supports the formats written by both Write and the +// compiler, the two are quite different, and there is an open +// proposal (https://go.dev/issue/69491) to separate these APIs. +// +// Under that proposal, this package would ultimately provide only the +// Read operation for compiler export data, which must be defined in +// this module (golang.org/x/tools), not in the standard library, to +// avoid version skew for developer tools that need to read compiler +// export data both before and after a Go release, such as from Go +// 1.23 to Go 1.24. Because this package lives in the tools module, +// clients can update their version of the module some time before the +// Go 1.24 release and rebuild and redeploy their tools, which will +// then be able to consume both Go 1.23 and Go 1.24 export data files, +// so they will work before and after the Go update. (See discussion +// at https://go.dev/issue/15651.) +// +// The operations to import and export [go/types] data structures +// would be defined in the go/types package as Import and Export. +// [Write] would (eventually) delegate to Export, +// and [Read], when it detects a file produced by Export, +// would delegate to Import. +// +// # Deprecations +// +// The [NewImporter] and [Find] functions are deprecated and should +// not be used in new code. The [WriteBundle] and [ReadBundle] +// functions are experimental, and there is an open proposal to +// deprecate them (https://go.dev/issue/69573). +package gcexportdata import ( "bufio" @@ -64,24 +106,18 @@ func Find(importPath, srcDir string) (filename, path string) { // additional trailing data beyond the end of the export data. func NewReader(r io.Reader) (io.Reader, error) { buf := bufio.NewReader(r) - _, size, err := gcimporter.FindExportData(buf) + size, err := gcimporter.FindExportData(buf) if err != nil { return nil, err } - if size >= 0 { - // We were given an archive and found the __.PKGDEF in it. - // This tells us the size of the export data, and we don't - // need to return the entire file. - return &io.LimitedReader{ - R: buf, - N: size, - }, nil - } else { - // We were given an object file. As such, we don't know how large - // the export data is and must return the entire file. - return buf, nil - } + // We were given an archive and found the __.PKGDEF in it. + // This tells us the size of the export data, and we don't + // need to return the entire file. + return &io.LimitedReader{ + R: buf, + N: size, + }, nil } // readAll works the same way as io.ReadAll, but avoids allocations and copies @@ -100,6 +136,11 @@ func readAll(r io.Reader) ([]byte, error) { // Read reads export data from in, decodes it, and returns type // information for the package. // +// Read is capable of reading export data produced by [Write] at the +// same source code version, or by the last two Go releases (plus tip) +// of the standard Go compiler. Reading files from older compilers may +// produce an error. +// // The package path (effectively its linker symbol prefix) is // specified by path, since unlike the package name, this information // may not be recorded in the export data. @@ -128,14 +169,26 @@ func Read(in io.Reader, fset *token.FileSet, imports map[string]*types.Package, // (from "version"). Select appropriate importer. if len(data) > 0 { switch data[0] { - case 'v', 'c', 'd': // binary, till go1.10 + case 'v', 'c', 'd': + // binary, produced by cmd/compile till go1.10 return nil, fmt.Errorf("binary (%c) import format is no longer supported", data[0]) - case 'i': // indexed, till go1.19 + case 'i': + // indexed, produced by cmd/compile till go1.19, + // and also by [Write]. + // + // If proposal #69491 is accepted, go/types + // serialization will be implemented by + // types.Export, to which Write would eventually + // delegate (explicitly dropping any pretence at + // inter-version Write-Read compatibility). + // This [Read] function would delegate to types.Import + // when it detects that the file was produced by Export. _, pkg, err := gcimporter.IImportData(fset, imports, data[1:], path) return pkg, err - case 'u': // unified, from go1.20 + case 'u': + // unified, produced by cmd/compile since go1.20 _, pkg, err := gcimporter.UImportData(fset, imports, data[1:], path) return pkg, err diff --git a/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go b/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go deleted file mode 100644 index 333676b7..00000000 --- a/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go +++ /dev/null @@ -1,53 +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 packagesdriver fetches type sizes for go/packages and go/analysis. -package packagesdriver - -import ( - "context" - "fmt" - "strings" - - "golang.org/x/tools/internal/gocommand" -) - -func GetSizesForArgsGolist(ctx context.Context, inv gocommand.Invocation, gocmdRunner *gocommand.Runner) (string, string, error) { - inv.Verb = "list" - inv.Args = []string{"-f", "{{context.GOARCH}} {{context.Compiler}}", "--", "unsafe"} - stdout, stderr, friendlyErr, rawErr := gocmdRunner.RunRaw(ctx, inv) - var goarch, compiler string - if rawErr != nil { - rawErrMsg := rawErr.Error() - if strings.Contains(rawErrMsg, "cannot find main module") || - strings.Contains(rawErrMsg, "go.mod file not found") { - // User's running outside of a module. - // All bets are off. Get GOARCH and guess compiler is gc. - // TODO(matloob): Is this a problem in practice? - inv.Verb = "env" - inv.Args = []string{"GOARCH"} - envout, enverr := gocmdRunner.Run(ctx, inv) - if enverr != nil { - return "", "", enverr - } - goarch = strings.TrimSpace(envout.String()) - compiler = "gc" - } else if friendlyErr != nil { - return "", "", friendlyErr - } else { - // This should be unreachable, but be defensive - // in case RunRaw's error results are inconsistent. - return "", "", rawErr - } - } else { - fields := strings.Fields(stdout.String()) - if len(fields) < 2 { - return "", "", fmt.Errorf("could not parse GOARCH and Go compiler in format \" \":\nstdout: <<%s>>\nstderr: <<%s>>", - stdout.String(), stderr.String()) - } - goarch = fields[0] - compiler = fields[1] - } - return compiler, goarch, nil -} diff --git a/vendor/golang.org/x/tools/go/packages/doc.go b/vendor/golang.org/x/tools/go/packages/doc.go index a8d7b06a..f1931d10 100644 --- a/vendor/golang.org/x/tools/go/packages/doc.go +++ b/vendor/golang.org/x/tools/go/packages/doc.go @@ -64,7 +64,7 @@ graph using the Imports fields. The Load function can be configured by passing a pointer to a Config as the first argument. A nil Config is equivalent to the zero Config, which -causes Load to run in LoadFiles mode, collecting minimal information. +causes Load to run in [LoadFiles] mode, collecting minimal information. See the documentation for type Config for details. As noted earlier, the Config.Mode controls the amount of detail @@ -72,14 +72,14 @@ reported about the loaded packages. See the documentation for type LoadMode for details. Most tools should pass their command-line arguments (after any flags) -uninterpreted to [Load], so that it can interpret them +uninterpreted to Load, so that it can interpret them according to the conventions of the underlying build system. See the Example function for typical usage. # The driver protocol -[Load] may be used to load Go packages even in Go projects that use +Load may be used to load Go packages even in Go projects that use alternative build systems, by installing an appropriate "driver" program for the build system and specifying its location in the GOPACKAGESDRIVER environment variable. @@ -97,6 +97,15 @@ JSON-encoded [DriverRequest] message providing additional information is written to the driver's standard input. The driver must write a JSON-encoded [DriverResponse] message to its standard output. (This message differs from the JSON schema produced by 'go list'.) + +The value of the PWD environment variable seen by the driver process +is the preferred name of its working directory. (The working directory +may have other aliases due to symbolic links; see the comment on the +Dir field of [exec.Cmd] for related information.) +When the driver process emits in its response the name of a file +that is a descendant of this directory, it must use an absolute path +that has the value of PWD as a prefix, to ensure that the returned +filenames satisfy the original query. */ package packages // import "golang.org/x/tools/go/packages" @@ -198,14 +207,6 @@ Instead, ssadump no longer requests the runtime package, but seeks it among the dependencies of the user-specified packages, and emits an error if it is not found. -Overlays: The Overlay field in the Config allows providing alternate contents -for Go source files, by providing a mapping from file path to contents. -go/packages will pull in new imports added in overlay files when go/packages -is run in LoadImports mode or greater. -Overlay support for the go list driver isn't complete yet: if the file doesn't -exist on disk, it will only be recognized in an overlay if it is a non-test file -and the package would be reported even without the overlay. - Questions & Tasks - Add GOARCH/GOOS? diff --git a/vendor/golang.org/x/tools/go/packages/external.go b/vendor/golang.org/x/tools/go/packages/external.go index 4335c1eb..91bd62e8 100644 --- a/vendor/golang.org/x/tools/go/packages/external.go +++ b/vendor/golang.org/x/tools/go/packages/external.go @@ -13,6 +13,7 @@ import ( "fmt" "os" "os/exec" + "slices" "strings" ) @@ -34,8 +35,8 @@ type DriverRequest struct { // Tests specifies whether the patterns should also return test packages. Tests bool `json:"tests"` - // Overlay maps file paths (relative to the driver's working directory) to the byte contents - // of overlay files. + // Overlay maps file paths (relative to the driver's working directory) + // to the contents of overlay files (see Config.Overlay). Overlay map[string][]byte `json:"overlay"` } @@ -79,10 +80,10 @@ type DriverResponse struct { // driver is the type for functions that query the build system for the // packages named by the patterns. -type driver func(cfg *Config, patterns ...string) (*DriverResponse, error) +type driver func(cfg *Config, patterns []string) (*DriverResponse, error) // findExternalDriver returns the file path of a tool that supplies -// the build system package structure, or "" if not found." +// the build system package structure, or "" if not found. // If GOPACKAGESDRIVER is set in the environment findExternalTool returns its // value, otherwise it searches for a binary named gopackagesdriver on the PATH. func findExternalDriver(cfg *Config) driver { @@ -103,7 +104,7 @@ func findExternalDriver(cfg *Config) driver { return nil } } - return func(cfg *Config, words ...string) (*DriverResponse, error) { + return func(cfg *Config, patterns []string) (*DriverResponse, error) { req, err := json.Marshal(DriverRequest{ Mode: cfg.Mode, Env: cfg.Env, @@ -117,9 +118,21 @@ func findExternalDriver(cfg *Config) driver { buf := new(bytes.Buffer) stderr := new(bytes.Buffer) - cmd := exec.CommandContext(cfg.Context, tool, words...) + cmd := exec.CommandContext(cfg.Context, tool, patterns...) cmd.Dir = cfg.Dir - cmd.Env = cfg.Env + // The cwd gets resolved to the real path. On Darwin, where + // /tmp is a symlink, this breaks anything that expects the + // working directory to keep the original path, including the + // go command when dealing with modules. + // + // os.Getwd stdlib has a special feature where if the + // cwd and the PWD are the same node then it trusts + // the PWD, so by setting it in the env for the child + // process we fix up all the paths returned by the go + // command. + // + // (See similar trick in Invocation.run in ../../internal/gocommand/invoke.go) + cmd.Env = append(slices.Clip(cfg.Env), "PWD="+cfg.Dir) cmd.Stdin = bytes.NewReader(req) cmd.Stdout = buf cmd.Stderr = stderr diff --git a/vendor/golang.org/x/tools/go/packages/golist.go b/vendor/golang.org/x/tools/go/packages/golist.go index 22305d9c..0458b4f9 100644 --- a/vendor/golang.org/x/tools/go/packages/golist.go +++ b/vendor/golang.org/x/tools/go/packages/golist.go @@ -21,7 +21,6 @@ import ( "sync" "unicode" - "golang.org/x/tools/go/internal/packagesdriver" "golang.org/x/tools/internal/gocommand" "golang.org/x/tools/internal/packagesinternal" ) @@ -81,6 +80,12 @@ type golistState struct { cfg *Config ctx context.Context + runner *gocommand.Runner + + // overlay is the JSON file that encodes the Config.Overlay + // mapping, used by 'go list -overlay=...'. + overlay string + envOnce sync.Once goEnvError error goEnv map[string]string @@ -128,7 +133,10 @@ func (state *golistState) mustGetEnv() map[string]string { // goListDriver uses the go list command to interpret the patterns and produce // the build system package structure. // See driver for more details. -func goListDriver(cfg *Config, patterns ...string) (_ *DriverResponse, err error) { +// +// overlay is the JSON file that encodes the cfg.Overlay +// mapping, used by 'go list -overlay=...' +func goListDriver(cfg *Config, runner *gocommand.Runner, overlay string, patterns []string) (_ *DriverResponse, err error) { // Make sure that any asynchronous go commands are killed when we return. parentCtx := cfg.Context if parentCtx == nil { @@ -143,13 +151,15 @@ func goListDriver(cfg *Config, patterns ...string) (_ *DriverResponse, err error cfg: cfg, ctx: ctx, vendorDirs: map[string]bool{}, + overlay: overlay, + runner: runner, } // Fill in response.Sizes asynchronously if necessary. - if cfg.Mode&NeedTypesSizes != 0 || cfg.Mode&NeedTypes != 0 { + if cfg.Mode&NeedTypesSizes != 0 || cfg.Mode&(NeedTypes|NeedTypesInfo) != 0 { errCh := make(chan error) go func() { - compiler, arch, err := packagesdriver.GetSizesForArgsGolist(ctx, state.cfgInvocation(), cfg.gocmdRunner) + compiler, arch, err := getSizesForArgs(ctx, state.cfgInvocation(), runner) response.dr.Compiler = compiler response.dr.Arch = arch errCh <- err @@ -312,6 +322,7 @@ type jsonPackage struct { ImportPath string Dir string Name string + Target string Export string GoFiles []string CompiledGoFiles []string @@ -495,13 +506,15 @@ func (state *golistState) createDriverResponse(words ...string) (*DriverResponse pkg := &Package{ Name: p.Name, ID: p.ImportPath, + Dir: p.Dir, + Target: p.Target, GoFiles: absJoin(p.Dir, p.GoFiles, p.CgoFiles), CompiledGoFiles: absJoin(p.Dir, p.CompiledGoFiles), OtherFiles: absJoin(p.Dir, otherFiles(p)...), EmbedFiles: absJoin(p.Dir, p.EmbedFiles), EmbedPatterns: absJoin(p.Dir, p.EmbedPatterns), IgnoredFiles: absJoin(p.Dir, p.IgnoredGoFiles, p.IgnoredOtherFiles), - forTest: p.ForTest, + ForTest: p.ForTest, depsErrors: p.DepsErrors, Module: p.Module, } @@ -682,7 +695,7 @@ func (state *golistState) shouldAddFilenameFromError(p *jsonPackage) bool { // getGoVersion returns the effective minor version of the go command. func (state *golistState) getGoVersion() (int, error) { state.goVersionOnce.Do(func() { - state.goVersion, state.goVersionError = gocommand.GoVersion(state.ctx, state.cfgInvocation(), state.cfg.gocmdRunner) + state.goVersion, state.goVersionError = gocommand.GoVersion(state.ctx, state.cfgInvocation(), state.runner) }) return state.goVersion, state.goVersionError } @@ -752,7 +765,7 @@ func jsonFlag(cfg *Config, goVersion int) string { } } addFields("Name", "ImportPath", "Error") // These fields are always needed - if cfg.Mode&NeedFiles != 0 || cfg.Mode&NeedTypes != 0 { + if cfg.Mode&NeedFiles != 0 || cfg.Mode&(NeedTypes|NeedTypesInfo) != 0 { addFields("Dir", "GoFiles", "IgnoredGoFiles", "IgnoredOtherFiles", "CFiles", "CgoFiles", "CXXFiles", "MFiles", "HFiles", "FFiles", "SFiles", "SwigFiles", "SwigCXXFiles", "SysoFiles") @@ -760,7 +773,7 @@ func jsonFlag(cfg *Config, goVersion int) string { addFields("TestGoFiles", "XTestGoFiles") } } - if cfg.Mode&NeedTypes != 0 { + if cfg.Mode&(NeedTypes|NeedTypesInfo) != 0 { // CompiledGoFiles seems to be required for the test case TestCgoNoSyntax, // even when -compiled isn't passed in. // TODO(#52435): Should we make the test ask for -compiled, or automatically @@ -785,7 +798,7 @@ func jsonFlag(cfg *Config, goVersion int) string { // Request Dir in the unlikely case Export is not absolute. addFields("Dir", "Export") } - if cfg.Mode&needInternalForTest != 0 { + if cfg.Mode&NeedForTest != 0 { addFields("ForTest") } if cfg.Mode&needInternalDepsErrors != 0 { @@ -800,6 +813,9 @@ func jsonFlag(cfg *Config, goVersion int) string { if cfg.Mode&NeedEmbedPatterns != 0 { addFields("EmbedPatterns") } + if cfg.Mode&NeedTarget != 0 { + addFields("Target") + } return "-json=" + strings.Join(fields, ",") } @@ -841,6 +857,7 @@ func (state *golistState) cfgInvocation() gocommand.Invocation { Env: cfg.Env, Logf: cfg.Logf, WorkingDir: cfg.Dir, + Overlay: state.overlay, } } @@ -849,33 +866,10 @@ func (state *golistState) invokeGo(verb string, args ...string) (*bytes.Buffer, cfg := state.cfg inv := state.cfgInvocation() - - // For Go versions 1.16 and above, `go list` accepts overlays directly via - // the -overlay flag. Set it, if it's available. - // - // The check for "list" is not necessarily required, but we should avoid - // getting the go version if possible. - if verb == "list" { - goVersion, err := state.getGoVersion() - if err != nil { - return nil, err - } - if goVersion >= 16 { - filename, cleanup, err := state.writeOverlays() - if err != nil { - return nil, err - } - defer cleanup() - inv.Overlay = filename - } - } inv.Verb = verb inv.Args = args - gocmdRunner := cfg.gocmdRunner - if gocmdRunner == nil { - gocmdRunner = &gocommand.Runner{} - } - stdout, stderr, friendlyErr, err := gocmdRunner.RunRaw(cfg.Context, inv) + + stdout, stderr, friendlyErr, err := state.runner.RunRaw(cfg.Context, inv) if err != nil { // Check for 'go' executable not being found. if ee, ok := err.(*exec.Error); ok && ee.Err == exec.ErrNotFound { @@ -899,6 +893,12 @@ func (state *golistState) invokeGo(verb string, args ...string) (*bytes.Buffer, return nil, friendlyErr } + // Return an error if 'go list' failed due to missing tools in + // $GOROOT/pkg/tool/$GOOS_$GOARCH (#69606). + if len(stderr.String()) > 0 && strings.Contains(stderr.String(), `go: no such tool`) { + return nil, friendlyErr + } + // Is there an error running the C compiler in cgo? This will be reported in the "Error" field // and should be suppressed by go list -e. // @@ -1015,67 +1015,6 @@ func (state *golistState) invokeGo(verb string, args ...string) (*bytes.Buffer, return stdout, nil } -// OverlayJSON is the format overlay files are expected to be in. -// The Replace map maps from overlaid paths to replacement paths: -// the Go command will forward all reads trying to open -// each overlaid path to its replacement path, or consider the overlaid -// path not to exist if the replacement path is empty. -// -// From golang/go#39958. -type OverlayJSON struct { - Replace map[string]string `json:"replace,omitempty"` -} - -// writeOverlays writes out files for go list's -overlay flag, as described -// above. -func (state *golistState) writeOverlays() (filename string, cleanup func(), err error) { - // Do nothing if there are no overlays in the config. - if len(state.cfg.Overlay) == 0 { - return "", func() {}, nil - } - dir, err := os.MkdirTemp("", "gopackages-*") - if err != nil { - return "", nil, err - } - // The caller must clean up this directory, unless this function returns an - // error. - cleanup = func() { - os.RemoveAll(dir) - } - defer func() { - if err != nil { - cleanup() - } - }() - overlays := map[string]string{} - for k, v := range state.cfg.Overlay { - // Create a unique filename for the overlaid files, to avoid - // creating nested directories. - noSeparator := strings.Join(strings.Split(filepath.ToSlash(k), "/"), "") - f, err := os.CreateTemp(dir, fmt.Sprintf("*-%s", noSeparator)) - if err != nil { - return "", func() {}, err - } - if _, err := f.Write(v); err != nil { - return "", func() {}, err - } - if err := f.Close(); err != nil { - return "", func() {}, err - } - overlays[k] = f.Name() - } - b, err := json.Marshal(OverlayJSON{Replace: overlays}) - if err != nil { - return "", func() {}, err - } - // Write out the overlay file that contains the filepath mappings. - filename = filepath.Join(dir, "overlay.json") - if err := os.WriteFile(filename, b, 0665); err != nil { - return "", func() {}, err - } - return filename, cleanup, nil -} - func containsGoFile(s []string) bool { for _, f := range s { if strings.HasSuffix(f, ".go") { @@ -1104,3 +1043,44 @@ func cmdDebugStr(cmd *exec.Cmd) string { } return fmt.Sprintf("GOROOT=%v GOPATH=%v GO111MODULE=%v GOPROXY=%v PWD=%v %v", env["GOROOT"], env["GOPATH"], env["GO111MODULE"], env["GOPROXY"], env["PWD"], strings.Join(args, " ")) } + +// getSizesForArgs queries 'go list' for the appropriate +// Compiler and GOARCH arguments to pass to [types.SizesFor]. +func getSizesForArgs(ctx context.Context, inv gocommand.Invocation, gocmdRunner *gocommand.Runner) (string, string, error) { + inv.Verb = "list" + inv.Args = []string{"-f", "{{context.GOARCH}} {{context.Compiler}}", "--", "unsafe"} + stdout, stderr, friendlyErr, rawErr := gocmdRunner.RunRaw(ctx, inv) + var goarch, compiler string + if rawErr != nil { + rawErrMsg := rawErr.Error() + if strings.Contains(rawErrMsg, "cannot find main module") || + strings.Contains(rawErrMsg, "go.mod file not found") { + // User's running outside of a module. + // All bets are off. Get GOARCH and guess compiler is gc. + // TODO(matloob): Is this a problem in practice? + inv.Verb = "env" + inv.Args = []string{"GOARCH"} + envout, enverr := gocmdRunner.Run(ctx, inv) + if enverr != nil { + return "", "", enverr + } + goarch = strings.TrimSpace(envout.String()) + compiler = "gc" + } else if friendlyErr != nil { + return "", "", friendlyErr + } else { + // This should be unreachable, but be defensive + // in case RunRaw's error results are inconsistent. + return "", "", rawErr + } + } else { + fields := strings.Fields(stdout.String()) + if len(fields) < 2 { + return "", "", fmt.Errorf("could not parse GOARCH and Go compiler in format \" \":\nstdout: <<%s>>\nstderr: <<%s>>", + stdout.String(), stderr.String()) + } + goarch = fields[0] + compiler = fields[1] + } + return compiler, goarch, nil +} diff --git a/vendor/golang.org/x/tools/go/packages/loadmode_string.go b/vendor/golang.org/x/tools/go/packages/loadmode_string.go index 5c080d21..69eec9f4 100644 --- a/vendor/golang.org/x/tools/go/packages/loadmode_string.go +++ b/vendor/golang.org/x/tools/go/packages/loadmode_string.go @@ -9,49 +9,48 @@ import ( "strings" ) -var allModes = []LoadMode{ - NeedName, - NeedFiles, - NeedCompiledGoFiles, - NeedImports, - NeedDeps, - NeedExportFile, - NeedTypes, - NeedSyntax, - NeedTypesInfo, - NeedTypesSizes, +var modes = [...]struct { + mode LoadMode + name string +}{ + {NeedName, "NeedName"}, + {NeedFiles, "NeedFiles"}, + {NeedCompiledGoFiles, "NeedCompiledGoFiles"}, + {NeedImports, "NeedImports"}, + {NeedDeps, "NeedDeps"}, + {NeedExportFile, "NeedExportFile"}, + {NeedTypes, "NeedTypes"}, + {NeedSyntax, "NeedSyntax"}, + {NeedTypesInfo, "NeedTypesInfo"}, + {NeedTypesSizes, "NeedTypesSizes"}, + {NeedForTest, "NeedForTest"}, + {NeedModule, "NeedModule"}, + {NeedEmbedFiles, "NeedEmbedFiles"}, + {NeedEmbedPatterns, "NeedEmbedPatterns"}, + {NeedTarget, "NeedTarget"}, } -var modeStrings = []string{ - "NeedName", - "NeedFiles", - "NeedCompiledGoFiles", - "NeedImports", - "NeedDeps", - "NeedExportFile", - "NeedTypes", - "NeedSyntax", - "NeedTypesInfo", - "NeedTypesSizes", -} - -func (mod LoadMode) String() string { - m := mod - if m == 0 { +func (mode LoadMode) String() string { + if mode == 0 { return "LoadMode(0)" } var out []string - for i, x := range allModes { - if x > m { - break + // named bits + for _, item := range modes { + if (mode & item.mode) != 0 { + mode ^= item.mode + out = append(out, item.name) } - if (m & x) != 0 { - out = append(out, modeStrings[i]) - m = m ^ x + } + // unnamed residue + if mode != 0 { + if out == nil { + return fmt.Sprintf("LoadMode(%#x)", int(mode)) } + out = append(out, fmt.Sprintf("%#x", int(mode))) } - if m != 0 { - out = append(out, "Unknown") + if len(out) == 1 { + return out[0] } - return fmt.Sprintf("LoadMode(%s)", strings.Join(out, "|")) + return "(" + strings.Join(out, "|") + ")" } diff --git a/vendor/golang.org/x/tools/go/packages/packages.go b/vendor/golang.org/x/tools/go/packages/packages.go index 3ea1b3fa..c3a59b8e 100644 --- a/vendor/golang.org/x/tools/go/packages/packages.go +++ b/vendor/golang.org/x/tools/go/packages/packages.go @@ -16,13 +16,13 @@ import ( "go/scanner" "go/token" "go/types" - "io" "log" "os" "path/filepath" "runtime" "strings" "sync" + "sync/atomic" "time" "golang.org/x/sync/errgroup" @@ -31,23 +31,45 @@ import ( "golang.org/x/tools/internal/gocommand" "golang.org/x/tools/internal/packagesinternal" "golang.org/x/tools/internal/typesinternal" - "golang.org/x/tools/internal/versions" ) // A LoadMode controls the amount of detail to return when loading. // The bits below can be combined to specify which fields should be // filled in the result packages. +// // The zero value is a special case, equivalent to combining // the NeedName, NeedFiles, and NeedCompiledGoFiles bits. +// // ID and Errors (if present) will always be filled. -// Load may return more information than requested. +// [Load] may return more information than requested. +// +// The Mode flag is a union of several bits named NeedName, +// NeedFiles, and so on, each of which determines whether +// a given field of Package (Name, Files, etc) should be +// populated. +// +// For convenience, we provide named constants for the most +// common combinations of Need flags: +// +// [LoadFiles] lists of files in each package +// [LoadImports] ... plus imports +// [LoadTypes] ... plus type information +// [LoadSyntax] ... plus type-annotated syntax +// [LoadAllSyntax] ... for all dependencies +// +// Unfortunately there are a number of open bugs related to +// interactions among the LoadMode bits: +// - https://go.dev/issue/56633 +// - https://go.dev/issue/56677 +// - https://go.dev/issue/58726 +// - https://go.dev/issue/63517 type LoadMode int const ( // NeedName adds Name and PkgPath. NeedName LoadMode = 1 << iota - // NeedFiles adds GoFiles and OtherFiles. + // NeedFiles adds Dir, GoFiles, OtherFiles, and IgnoredFiles NeedFiles // NeedCompiledGoFiles adds CompiledGoFiles. @@ -66,10 +88,10 @@ const ( // NeedTypes adds Types, Fset, and IllTyped. NeedTypes - // NeedSyntax adds Syntax. + // NeedSyntax adds Syntax and Fset. NeedSyntax - // NeedTypesInfo adds TypesInfo. + // NeedTypesInfo adds TypesInfo and Fset. NeedTypesInfo // NeedTypesSizes adds TypesSizes. @@ -78,9 +100,10 @@ const ( // needInternalDepsErrors adds the internal deps errors field for use by gopls. needInternalDepsErrors - // needInternalForTest adds the internal forTest field. + // NeedForTest adds ForTest. + // // Tests must also be set on the context for this field to be populated. - needInternalForTest + NeedForTest // typecheckCgo enables full support for type checking cgo. Requires Go 1.15+. // Modifies CompiledGoFiles and Types, and has no effect on its own. @@ -94,27 +117,27 @@ const ( // NeedEmbedPatterns adds EmbedPatterns. NeedEmbedPatterns + + // NeedTarget adds Target. + NeedTarget + + // Be sure to update loadmode_string.go when adding new items! ) const ( - // Deprecated: LoadFiles exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. + // LoadFiles loads the name and file names for the initial packages. LoadFiles = NeedName | NeedFiles | NeedCompiledGoFiles - // Deprecated: LoadImports exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. + // LoadImports loads the name, file names, and import mapping for the initial packages. LoadImports = LoadFiles | NeedImports - // Deprecated: LoadTypes exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. + // LoadTypes loads exported type information for the initial packages. LoadTypes = LoadImports | NeedTypes | NeedTypesSizes - // Deprecated: LoadSyntax exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. + // LoadSyntax loads typed syntax for the initial packages. LoadSyntax = LoadTypes | NeedSyntax | NeedTypesInfo - // Deprecated: LoadAllSyntax exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. + // LoadAllSyntax loads typed syntax for the initial packages and all dependencies. LoadAllSyntax = LoadSyntax | NeedDeps // Deprecated: NeedExportsFile is a historical misspelling of NeedExportFile. @@ -123,7 +146,8 @@ const ( // A Config specifies details about how packages should be loaded. // The zero value is a valid configuration. -// Calls to Load do not modify this struct. +// +// Calls to [Load] do not modify this struct. type Config struct { // Mode controls the level of information returned for each package. Mode LoadMode @@ -154,19 +178,10 @@ type Config struct { // Env []string - // gocmdRunner guards go command calls from concurrency errors. - gocmdRunner *gocommand.Runner - // BuildFlags is a list of command-line flags to be passed through to // the build system's query tool. BuildFlags []string - // modFile will be used for -modfile in go command invocations. - modFile string - - // modFlag will be used for -modfile in go command invocations. - modFlag string - // Fset provides source position information for syntax trees and types. // If Fset is nil, Load will use a new fileset, but preserve Fset's value. Fset *token.FileSet @@ -199,19 +214,46 @@ type Config struct { // setting Tests may have no effect. Tests bool - // Overlay provides a mapping of absolute file paths to file contents. - // If the file with the given path already exists, the parser will use the - // alternative file contents provided by the map. + // Overlay is a mapping from absolute file paths to file contents. // - // Overlays provide incomplete support for when a given file doesn't - // already exist on disk. See the package doc above for more details. + // For each map entry, [Load] uses the alternative file + // contents provided by the overlay mapping instead of reading + // from the file system. This mechanism can be used to enable + // editor-integrated tools to correctly analyze the contents + // of modified but unsaved buffers, for example. + // + // The overlay mapping is passed to the build system's driver + // (see "The driver protocol") so that it too can report + // consistent package metadata about unsaved files. However, + // drivers may vary in their level of support for overlays. Overlay map[string][]byte + + // -- Hidden configuration fields only for use in x/tools -- + + // modFile will be used for -modfile in go command invocations. + modFile string + + // modFlag will be used for -modfile in go command invocations. + modFlag string } // Load loads and returns the Go packages named by the given patterns. // -// Config specifies loading options; -// nil behaves the same as an empty Config. +// The cfg parameter specifies loading options; nil behaves the same as an empty [Config]. +// +// The [Config.Mode] field is a set of bits that determine what kinds +// of information should be computed and returned. Modes that require +// more information tend to be slower. See [LoadMode] for details +// and important caveats. Its zero value is equivalent to +// [NeedName] | [NeedFiles] | [NeedCompiledGoFiles]. +// +// Each call to Load returns a new set of [Package] instances. +// The Packages and their Imports form a directed acyclic graph. +// +// If the [NeedTypes] mode flag was set, each call to Load uses a new +// [types.Importer], so [types.Object] and [types.Type] values from +// different calls to Load must not be mixed as they will have +// inconsistent notions of type identity. // // If any of the patterns was invalid as defined by the // underlying build system, Load returns an error. @@ -220,7 +262,7 @@ type Config struct { // Errors associated with a particular package are recorded in the // corresponding Package's Errors list, and do not cause Load to // return an error. Clients may need to handle such errors before -// proceeding with further analysis. The PrintErrors function is +// proceeding with further analysis. The [PrintErrors] function is // provided for convenient display of all errors. func Load(cfg *Config, patterns ...string) ([]*Package, error) { ld := newLoader(cfg) @@ -283,10 +325,24 @@ func defaultDriver(cfg *Config, patterns ...string) (*DriverResponse, bool, erro } else if !response.NotHandled { return response, true, nil } - // (fall through) + // not handled: fall through } - response, err := callDriverOnChunks(goListDriver, cfg, chunks) + // go list fallback + + // Write overlays once, as there are many calls + // to 'go list' (one per chunk plus others too). + overlayFile, cleanupOverlay, err := gocommand.WriteOverlays(cfg.Overlay) + if err != nil { + return nil, false, err + } + defer cleanupOverlay() + + var runner gocommand.Runner // (shared across many 'go list' calls) + driver := func(cfg *Config, patterns []string) (*DriverResponse, error) { + return goListDriver(cfg, &runner, overlayFile, patterns) + } + response, err := callDriverOnChunks(driver, cfg, chunks) if err != nil { return nil, false, err } @@ -324,16 +380,14 @@ func splitIntoChunks(patterns []string, argMax int) ([][]string, error) { func callDriverOnChunks(driver driver, cfg *Config, chunks [][]string) (*DriverResponse, error) { if len(chunks) == 0 { - return driver(cfg) + return driver(cfg, nil) } responses := make([]*DriverResponse, len(chunks)) errNotHandled := errors.New("driver returned NotHandled") var g errgroup.Group for i, chunk := range chunks { - i := i - chunk := chunk g.Go(func() (err error) { - responses[i], err = driver(cfg, chunk...) + responses[i], err = driver(cfg, chunk) if responses[i] != nil && responses[i].NotHandled { err = errNotHandled } @@ -365,6 +419,9 @@ func mergeResponses(responses ...*DriverResponse) *DriverResponse { } // A Package describes a loaded Go package. +// +// It also defines part of the JSON schema of [DriverResponse]. +// See the package documentation for an overview. type Package struct { // ID is a unique identifier for a package, // in a syntax provided by the underlying build system. @@ -380,6 +437,12 @@ type Package struct { // PkgPath is the package path as used by the go/types package. PkgPath string + // Dir is the directory associated with the package, if it exists. + // + // For packages listed by the go command, this is the directory containing + // the package files. + Dir string + // Errors contains any errors encountered querying the metadata // of the package, or while parsing or type-checking its files. Errors []Error @@ -419,10 +482,21 @@ type Package struct { // information for the package as provided by the build system. ExportFile string + // Target is the absolute install path of the .a file, for libraries, + // and of the executable file, for binaries. + Target string + // Imports maps import paths appearing in the package's Go source files // to corresponding loaded Packages. Imports map[string]*Package + // Module is the module information for the package if it exists. + // + // Note: it may be missing for std and cmd; see Go issue #65816. + Module *Module + + // -- The following fields are not part of the driver JSON schema. -- + // Types provides type information for the package. // The NeedTypes LoadMode bit sets this field for packages matching the // patterns; type information for dependencies may be missing or incomplete, @@ -431,15 +505,15 @@ type Package struct { // Each call to [Load] returns a consistent set of type // symbols, as defined by the comment at [types.Identical]. // Avoid mixing type information from two or more calls to [Load]. - Types *types.Package + Types *types.Package `json:"-"` // Fset provides position information for Types, TypesInfo, and Syntax. // It is set only when Types is set. - Fset *token.FileSet + Fset *token.FileSet `json:"-"` // IllTyped indicates whether the package or any dependency contains errors. // It is set only when Types is set. - IllTyped bool + IllTyped bool `json:"-"` // Syntax is the package's syntax trees, for the files listed in CompiledGoFiles. // @@ -449,26 +523,28 @@ type Package struct { // // Syntax is kept in the same order as CompiledGoFiles, with the caveat that nils are // removed. If parsing returned nil, Syntax may be shorter than CompiledGoFiles. - Syntax []*ast.File + Syntax []*ast.File `json:"-"` // TypesInfo provides type information about the package's syntax trees. // It is set only when Syntax is set. - TypesInfo *types.Info + TypesInfo *types.Info `json:"-"` // TypesSizes provides the effective size function for types in TypesInfo. - TypesSizes types.Sizes + TypesSizes types.Sizes `json:"-"` + + // -- internal -- - // forTest is the package under test, if any. - forTest string + // ForTest is the package under test, if any. + ForTest string // depsErrors is the DepsErrors field from the go list response, if any. depsErrors []*packagesinternal.PackageError - - // module is the module information for the package if it exists. - Module *Module } // Module provides module information for a package. +// +// It also defines part of the JSON schema of [DriverResponse]. +// See the package documentation for an overview. type Module struct { Path string // module path Version string // module version @@ -488,9 +564,6 @@ type ModuleError struct { } func init() { - packagesinternal.GetForTest = func(p interface{}) string { - return p.(*Package).forTest - } packagesinternal.GetDepsErrors = func(p interface{}) []*packagesinternal.PackageError { return p.(*Package).depsErrors } @@ -502,7 +575,6 @@ func init() { } packagesinternal.TypecheckCgo = int(typecheckCgo) packagesinternal.DepsErrors = int(needInternalDepsErrors) - packagesinternal.ForTest = int(needInternalForTest) } // An Error describes a problem with a package's metadata, syntax, or types. @@ -601,6 +673,7 @@ func (p *Package) UnmarshalJSON(b []byte) error { OtherFiles: flat.OtherFiles, EmbedFiles: flat.EmbedFiles, EmbedPatterns: flat.EmbedPatterns, + IgnoredFiles: flat.IgnoredFiles, ExportFile: flat.ExportFile, } if len(flat.Imports) > 0 { @@ -617,18 +690,19 @@ func (p *Package) String() string { return p.ID } // loaderPackage augments Package with state used during the loading phase type loaderPackage struct { *Package - importErrors map[string]error // maps each bad import to its error - loadOnce sync.Once - color uint8 // for cycle detection - needsrc bool // load from source (Mode >= LoadTypes) - needtypes bool // type information is either requested or depended on - initial bool // package was matched by a pattern - goVersion int // minor version number of go command on PATH + importErrors map[string]error // maps each bad import to its error + preds []*loaderPackage // packages that import this one + unfinishedSuccs atomic.Int32 // number of direct imports not yet loaded + color uint8 // for cycle detection + needsrc bool // load from source (Mode >= LoadTypes) + needtypes bool // type information is either requested or depended on + initial bool // package was matched by a pattern + goVersion int // minor version number of go command on PATH } // loader holds the working state of a single call to load. type loader struct { - pkgs map[string]*loaderPackage + pkgs map[string]*loaderPackage // keyed by Package.ID Config sizes types.Sizes // non-nil if needed by mode parseCache map[string]*parseValue @@ -674,9 +748,6 @@ func newLoader(cfg *Config) *loader { if ld.Config.Env == nil { ld.Config.Env = os.Environ() } - if ld.Config.gocmdRunner == nil { - ld.Config.gocmdRunner = &gocommand.Runner{} - } if ld.Context == nil { ld.Context = context.Background() } @@ -690,7 +761,7 @@ func newLoader(cfg *Config) *loader { ld.requestedMode = ld.Mode ld.Mode = impliedLoadMode(ld.Mode) - if ld.Mode&NeedTypes != 0 || ld.Mode&NeedSyntax != 0 { + if ld.Mode&(NeedSyntax|NeedTypes|NeedTypesInfo) != 0 { if ld.Fset == nil { ld.Fset = token.NewFileSet() } @@ -699,6 +770,7 @@ func newLoader(cfg *Config) *loader { // because we load source if export data is missing. if ld.ParseFile == nil { ld.ParseFile = func(fset *token.FileSet, filename string, src []byte) (*ast.File, error) { + // We implicitly promise to keep doing ast.Object resolution. :( const mode = parser.AllErrors | parser.ParseComments return parser.ParseFile(fset, filename, src, mode) } @@ -730,7 +802,7 @@ func (ld *loader) refine(response *DriverResponse) ([]*Package, error) { exportDataInvalid := len(ld.Overlay) > 0 || pkg.ExportFile == "" && pkg.PkgPath != "unsafe" // This package needs type information if the caller requested types and the package is // either a root, or it's a non-root and the user requested dependencies ... - needtypes := (ld.Mode&NeedTypes|NeedTypesInfo != 0 && (rootIndex >= 0 || ld.Mode&NeedDeps != 0)) + needtypes := (ld.Mode&(NeedTypes|NeedTypesInfo) != 0 && (rootIndex >= 0 || ld.Mode&NeedDeps != 0)) // This package needs source if the call requested source (or types info, which implies source) // and the package is either a root, or itas a non- root and the user requested dependencies... needsrc := ((ld.Mode&(NeedSyntax|NeedTypesInfo) != 0 && (rootIndex >= 0 || ld.Mode&NeedDeps != 0)) || @@ -755,9 +827,10 @@ func (ld *loader) refine(response *DriverResponse) ([]*Package, error) { } } - if ld.Mode&NeedImports != 0 { - // Materialize the import graph. - + // Materialize the import graph if it is needed (NeedImports), + // or if we'll be using loadPackages (Need{Syntax|Types|TypesInfo}). + var leaves []*loaderPackage // packages with no unfinished successors + if ld.Mode&(NeedImports|NeedSyntax|NeedTypes|NeedTypesInfo) != 0 { const ( white = 0 // new grey = 1 // in progress @@ -776,63 +849,76 @@ func (ld *loader) refine(response *DriverResponse) ([]*Package, error) { // dependency on a package that does. These are the only packages // for which we load source code. var stack []*loaderPackage - var visit func(lpkg *loaderPackage) bool - visit = func(lpkg *loaderPackage) bool { - switch lpkg.color { - case black: - return lpkg.needsrc - case grey: + var visit func(from, lpkg *loaderPackage) bool + visit = func(from, lpkg *loaderPackage) bool { + if lpkg.color == grey { panic("internal error: grey node") } - lpkg.color = grey - stack = append(stack, lpkg) // push - stubs := lpkg.Imports // the structure form has only stubs with the ID in the Imports - lpkg.Imports = make(map[string]*Package, len(stubs)) - for importPath, ipkg := range stubs { - var importErr error - imp := ld.pkgs[ipkg.ID] - if imp == nil { - // (includes package "C" when DisableCgo) - importErr = fmt.Errorf("missing package: %q", ipkg.ID) - } else if imp.color == grey { - importErr = fmt.Errorf("import cycle: %s", stack) + if lpkg.color == white { + lpkg.color = grey + stack = append(stack, lpkg) // push + stubs := lpkg.Imports // the structure form has only stubs with the ID in the Imports + lpkg.Imports = make(map[string]*Package, len(stubs)) + for importPath, ipkg := range stubs { + var importErr error + imp := ld.pkgs[ipkg.ID] + if imp == nil { + // (includes package "C" when DisableCgo) + importErr = fmt.Errorf("missing package: %q", ipkg.ID) + } else if imp.color == grey { + importErr = fmt.Errorf("import cycle: %s", stack) + } + if importErr != nil { + if lpkg.importErrors == nil { + lpkg.importErrors = make(map[string]error) + } + lpkg.importErrors[importPath] = importErr + continue + } + + if visit(lpkg, imp) { + lpkg.needsrc = true + } + lpkg.Imports[importPath] = imp.Package } - if importErr != nil { - if lpkg.importErrors == nil { - lpkg.importErrors = make(map[string]error) + + // -- postorder -- + + // Complete type information is required for the + // immediate dependencies of each source package. + if lpkg.needsrc && ld.Mode&NeedTypes != 0 { + for _, ipkg := range lpkg.Imports { + ld.pkgs[ipkg.ID].needtypes = true } - lpkg.importErrors[importPath] = importErr - continue } - if visit(imp) { - lpkg.needsrc = true + // NeedTypeSizes causes TypeSizes to be set even + // on packages for which types aren't needed. + if ld.Mode&NeedTypesSizes != 0 { + lpkg.TypesSizes = ld.sizes } - lpkg.Imports[importPath] = imp.Package - } - // Complete type information is required for the - // immediate dependencies of each source package. - if lpkg.needsrc && ld.Mode&NeedTypes != 0 { - for _, ipkg := range lpkg.Imports { - ld.pkgs[ipkg.ID].needtypes = true + // Add packages with no imports directly to the queue of leaves. + if len(lpkg.Imports) == 0 { + leaves = append(leaves, lpkg) } + + stack = stack[:len(stack)-1] // pop + lpkg.color = black } - // NeedTypeSizes causes TypeSizes to be set even - // on packages for which types aren't needed. - if ld.Mode&NeedTypesSizes != 0 { - lpkg.TypesSizes = ld.sizes + // Add edge from predecessor. + if from != nil { + from.unfinishedSuccs.Add(+1) // incref + lpkg.preds = append(lpkg.preds, from) } - stack = stack[:len(stack)-1] // pop - lpkg.color = black return lpkg.needsrc } // For each initial package, create its import DAG. for _, lpkg := range initial { - visit(lpkg) + visit(nil, lpkg) } } else { @@ -845,16 +931,45 @@ func (ld *loader) refine(response *DriverResponse) ([]*Package, error) { // Load type data and syntax if needed, starting at // the initial packages (roots of the import DAG). - if ld.Mode&NeedTypes != 0 || ld.Mode&NeedSyntax != 0 { - var wg sync.WaitGroup - for _, lpkg := range initial { - wg.Add(1) - go func(lpkg *loaderPackage) { - ld.loadRecursive(lpkg) - wg.Done() - }(lpkg) + if ld.Mode&(NeedSyntax|NeedTypes|NeedTypesInfo) != 0 { + + // We avoid using g.SetLimit to limit concurrency as + // it makes g.Go stop accepting work, which prevents + // workers from enqeuing, and thus finishing, and thus + // allowing the group to make progress: deadlock. + // + // Instead we use the ioLimit and cpuLimit semaphores. + g, _ := errgroup.WithContext(ld.Context) + + // enqueues adds a package to the type-checking queue. + // It must have no unfinished successors. + var enqueue func(*loaderPackage) + enqueue = func(lpkg *loaderPackage) { + g.Go(func() error { + // Parse and type-check. + ld.loadPackage(lpkg) + + // Notify each waiting predecessor, + // and enqueue it when it becomes a leaf. + for _, pred := range lpkg.preds { + if pred.unfinishedSuccs.Add(-1) == 0 { // decref + enqueue(pred) + } + } + + return nil + }) + } + + // Load leaves first, adding new packages + // to the queue as they become leaves. + for _, leaf := range leaves { + enqueue(leaf) + } + + if err := g.Wait(); err != nil { + return nil, err // cancelled } - wg.Wait() } // If the context is done, return its error and @@ -896,12 +1011,14 @@ func (ld *loader) refine(response *DriverResponse) ([]*Package, error) { } if ld.requestedMode&NeedTypes == 0 { ld.pkgs[i].Types = nil - ld.pkgs[i].Fset = nil ld.pkgs[i].IllTyped = false } if ld.requestedMode&NeedSyntax == 0 { ld.pkgs[i].Syntax = nil } + if ld.requestedMode&(NeedSyntax|NeedTypes|NeedTypesInfo) == 0 { + ld.pkgs[i].Fset = nil + } if ld.requestedMode&NeedTypesInfo == 0 { ld.pkgs[i].TypesInfo = nil } @@ -916,31 +1033,10 @@ func (ld *loader) refine(response *DriverResponse) ([]*Package, error) { return result, nil } -// loadRecursive loads the specified package and its dependencies, -// recursively, in parallel, in topological order. -// It is atomic and idempotent. -// Precondition: ld.Mode&NeedTypes. -func (ld *loader) loadRecursive(lpkg *loaderPackage) { - lpkg.loadOnce.Do(func() { - // Load the direct dependencies, in parallel. - var wg sync.WaitGroup - for _, ipkg := range lpkg.Imports { - imp := ld.pkgs[ipkg.ID] - wg.Add(1) - go func(imp *loaderPackage) { - ld.loadRecursive(imp) - wg.Done() - }(imp) - } - wg.Wait() - ld.loadPackage(lpkg) - }) -} - -// loadPackage loads the specified package. +// loadPackage loads/parses/typechecks the specified package. // It must be called only once per Package, // after immediate dependencies are loaded. -// Precondition: ld.Mode & NeedTypes. +// Precondition: ld.Mode&(NeedSyntax|NeedTypes|NeedTypesInfo) != 0. func (ld *loader) loadPackage(lpkg *loaderPackage) { if lpkg.PkgPath == "unsafe" { // Fill in the blanks to avoid surprises. @@ -976,6 +1072,10 @@ func (ld *loader) loadPackage(lpkg *loaderPackage) { if !lpkg.needtypes && !lpkg.needsrc { return } + + // TODO(adonovan): this condition looks wrong: + // I think it should be lpkg.needtypes && !lpg.needsrc, + // so that NeedSyntax without NeedTypes can be satisfied by export data. if !lpkg.needsrc { if err := ld.loadFromExportData(lpkg); err != nil { lpkg.Errors = append(lpkg.Errors, Error{ @@ -1081,7 +1181,7 @@ func (ld *loader) loadPackage(lpkg *loaderPackage) { } lpkg.Syntax = files - if ld.Config.Mode&NeedTypes == 0 { + if ld.Config.Mode&(NeedTypes|NeedTypesInfo) == 0 { return } @@ -1092,16 +1192,20 @@ func (ld *loader) loadPackage(lpkg *loaderPackage) { return } - lpkg.TypesInfo = &types.Info{ - Types: make(map[ast.Expr]types.TypeAndValue), - Defs: make(map[*ast.Ident]types.Object), - Uses: make(map[*ast.Ident]types.Object), - Implicits: make(map[ast.Node]types.Object), - Instances: make(map[*ast.Ident]types.Instance), - Scopes: make(map[ast.Node]*types.Scope), - Selections: make(map[*ast.SelectorExpr]*types.Selection), + // Populate TypesInfo only if needed, as it + // causes the type checker to work much harder. + if ld.Config.Mode&NeedTypesInfo != 0 { + lpkg.TypesInfo = &types.Info{ + Types: make(map[ast.Expr]types.TypeAndValue), + Defs: make(map[*ast.Ident]types.Object), + Uses: make(map[*ast.Ident]types.Object), + Implicits: make(map[ast.Node]types.Object), + Instances: make(map[*ast.Ident]types.Instance), + Scopes: make(map[ast.Node]*types.Scope), + Selections: make(map[*ast.SelectorExpr]*types.Selection), + FileVersions: make(map[*ast.File]string), + } } - versions.InitFileVersions(lpkg.TypesInfo) lpkg.TypesSizes = ld.sizes importer := importerFunc(func(path string) (*types.Package, error) { @@ -1154,6 +1258,10 @@ func (ld *loader) loadPackage(lpkg *loaderPackage) { } } + // Type-checking is CPU intensive. + cpuLimit <- unit{} // acquire a token + defer func() { <-cpuLimit }() // release a token + typErr := types.NewChecker(tc, ld.Fset, lpkg.Types, lpkg.TypesInfo).Files(lpkg.Syntax) lpkg.importErrors = nil // no longer needed @@ -1218,8 +1326,11 @@ type importerFunc func(path string) (*types.Package, error) func (f importerFunc) Import(path string) (*types.Package, error) { return f(path) } // We use a counting semaphore to limit -// the number of parallel I/O calls per process. -var ioLimit = make(chan bool, 20) +// the number of parallel I/O calls or CPU threads per process. +var ( + ioLimit = make(chan unit, 20) + cpuLimit = make(chan unit, runtime.GOMAXPROCS(0)) +) func (ld *loader) parseFile(filename string) (*ast.File, error) { ld.parseCacheMu.Lock() @@ -1236,20 +1347,28 @@ func (ld *loader) parseFile(filename string) (*ast.File, error) { var src []byte for f, contents := range ld.Config.Overlay { + // TODO(adonovan): Inefficient for large overlays. + // Do an exact name-based map lookup + // (for nonexistent files) followed by a + // FileID-based map lookup (for existing ones). if sameFile(f, filename) { src = contents + break } } var err error if src == nil { - ioLimit <- true // wait + ioLimit <- unit{} // acquire a token src, err = os.ReadFile(filename) - <-ioLimit // signal + <-ioLimit // release a token } if err != nil { v.err = err } else { + // Parsing is CPU intensive. + cpuLimit <- unit{} // acquire a token v.f, v.err = ld.ParseFile(ld.Fset, filename, src) + <-cpuLimit // release a token } close(v.ready) @@ -1264,18 +1383,21 @@ func (ld *loader) parseFile(filename string) (*ast.File, error) { // Because files are scanned in parallel, the token.Pos // positions of the resulting ast.Files are not ordered. func (ld *loader) parseFiles(filenames []string) ([]*ast.File, []error) { - var wg sync.WaitGroup - n := len(filenames) - parsed := make([]*ast.File, n) - errors := make([]error, n) - for i, file := range filenames { - wg.Add(1) - go func(i int, filename string) { + var ( + n = len(filenames) + parsed = make([]*ast.File, n) + errors = make([]error, n) + ) + var g errgroup.Group + for i, filename := range filenames { + // This creates goroutines unnecessarily in the + // cache-hit case, but that case is uncommon. + g.Go(func() error { parsed[i], errors[i] = ld.parseFile(filename) - wg.Done() - }(i, file) + return nil + }) } - wg.Wait() + g.Wait() // Eliminate nils, preserving order. var o int @@ -1434,6 +1556,10 @@ func impliedLoadMode(loadMode LoadMode) LoadMode { // All these things require knowing the import graph. loadMode |= NeedImports } + if loadMode&NeedTypes != 0 { + // Types require the GoVersion from Module. + loadMode |= NeedModule + } return loadMode } @@ -1442,4 +1568,4 @@ func usesExportData(cfg *Config) bool { return cfg.Mode&NeedExportFile != 0 || cfg.Mode&NeedTypes != 0 && cfg.Mode&NeedDeps == 0 } -var _ interface{} = io.Discard // assert build toolchain is go1.16 or later +type unit struct{} diff --git a/vendor/golang.org/x/tools/go/packages/visit.go b/vendor/golang.org/x/tools/go/packages/visit.go index a1dcc40b..df14ffd9 100644 --- a/vendor/golang.org/x/tools/go/packages/visit.go +++ b/vendor/golang.org/x/tools/go/packages/visit.go @@ -49,11 +49,20 @@ func Visit(pkgs []*Package, pre func(*Package) bool, post func(*Package)) { // PrintErrors returns the number of errors printed. func PrintErrors(pkgs []*Package) int { var n int + errModules := make(map[*Module]bool) Visit(pkgs, nil, func(pkg *Package) { for _, err := range pkg.Errors { fmt.Fprintln(os.Stderr, err) n++ } + + // Print pkg.Module.Error once if present. + mod := pkg.Module + if mod != nil && mod.Error != nil && !errModules[mod] { + errModules[mod] = true + fmt.Fprintln(os.Stderr, mod.Error.Err) + n++ + } }) return n } diff --git a/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go b/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go index a2386c34..16ed3c17 100644 --- a/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go +++ b/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go @@ -51,7 +51,7 @@ type Path string // // PO package->object Package.Scope.Lookup // OT object->type Object.Type -// TT type->type Type.{Elem,Key,Params,Results,Underlying} [EKPRU] +// TT type->type Type.{Elem,Key,{,{,Recv}Type}Params,Results,Underlying,Rhs} [EKPRUTrCa] // TO type->object Type.{At,Field,Method,Obj} [AFMO] // // All valid paths start with a package and end at an object @@ -63,8 +63,8 @@ type Path string // - The only PO operator is Package.Scope.Lookup, which requires an identifier. // - The only OT operator is Object.Type, // which we encode as '.' because dot cannot appear in an identifier. -// - The TT operators are encoded as [EKPRUTC]; -// one of these (TypeParam) requires an integer operand, +// - The TT operators are encoded as [EKPRUTrCa]; +// two of these ({,Recv}TypeParams) require an integer operand, // which is encoded as a string of decimal digits. // - The TO operators are encoded as [AFMO]; // three of these (At,Field,Method) require an integer operand, @@ -98,19 +98,21 @@ const ( opType = '.' // .Type() (Object) // type->type operators - opElem = 'E' // .Elem() (Pointer, Slice, Array, Chan, Map) - opKey = 'K' // .Key() (Map) - opParams = 'P' // .Params() (Signature) - opResults = 'R' // .Results() (Signature) - opUnderlying = 'U' // .Underlying() (Named) - opTypeParam = 'T' // .TypeParams.At(i) (Named, Signature) - opConstraint = 'C' // .Constraint() (TypeParam) + opElem = 'E' // .Elem() (Pointer, Slice, Array, Chan, Map) + opKey = 'K' // .Key() (Map) + opParams = 'P' // .Params() (Signature) + opResults = 'R' // .Results() (Signature) + opUnderlying = 'U' // .Underlying() (Named) + opTypeParam = 'T' // .TypeParams.At(i) (Named, Signature) + opRecvTypeParam = 'r' // .RecvTypeParams.At(i) (Signature) + opConstraint = 'C' // .Constraint() (TypeParam) + opRhs = 'a' // .Rhs() (Alias) // type->object operators - opAt = 'A' // .At(i) (Tuple) - opField = 'F' // .Field(i) (Struct) - opMethod = 'M' // .Method(i) (Named or Interface; not Struct: "promoted" names are ignored) - opObj = 'O' // .Obj() (Named, TypeParam) + opAt = 'A' // .At(i) (Tuple) + opField = 'F' // .Field(i) (Struct) + opMethod = 'M' // .Method(i) (Named or Interface; not Struct: "promoted" names are ignored) + opObj = 'O' // .Obj() (Named, TypeParam) ) // For is equivalent to new(Encoder).For(obj). @@ -226,7 +228,7 @@ func (enc *Encoder) For(obj types.Object) (Path, error) { // Reject obviously non-viable cases. switch obj := obj.(type) { case *types.TypeName: - if _, ok := aliases.Unalias(obj.Type()).(*types.TypeParam); !ok { + if _, ok := types.Unalias(obj.Type()).(*types.TypeParam); !ok { // With the exception of type parameters, only package-level type names // have a path. return "", fmt.Errorf("no path for %v", obj) @@ -278,21 +280,26 @@ func (enc *Encoder) For(obj types.Object) (Path, error) { path = append(path, opType) T := o.Type() - - if tname.IsAlias() { - // type alias - if r := find(obj, T, path, nil); r != nil { + if alias, ok := T.(*types.Alias); ok { + if r := findTypeParam(obj, aliases.TypeParams(alias), path, opTypeParam); r != nil { return Path(r), nil } - } else { - if named, _ := T.(*types.Named); named != nil { - if r := findTypeParam(obj, named.TypeParams(), path, nil); r != nil { - // generic named type - return Path(r), nil - } + if r := find(obj, aliases.Rhs(alias), append(path, opRhs)); r != nil { + return Path(r), nil + } + + } else if tname.IsAlias() { + // legacy alias + if r := find(obj, T, path); r != nil { + return Path(r), nil } + + } else if named, ok := T.(*types.Named); ok { // defined (named) type - if r := find(obj, T.Underlying(), append(path, opUnderlying), nil); r != nil { + if r := findTypeParam(obj, named.TypeParams(), path, opTypeParam); r != nil { + return Path(r), nil + } + if r := find(obj, named.Underlying(), append(path, opUnderlying)); r != nil { return Path(r), nil } } @@ -305,7 +312,7 @@ func (enc *Encoder) For(obj types.Object) (Path, error) { if _, ok := o.(*types.TypeName); !ok { if o.Exported() { // exported non-type (const, var, func) - if r := find(obj, o.Type(), append(path, opType), nil); r != nil { + if r := find(obj, o.Type(), append(path, opType)); r != nil { return Path(r), nil } } @@ -313,7 +320,7 @@ func (enc *Encoder) For(obj types.Object) (Path, error) { } // Inspect declared methods of defined types. - if T, ok := aliases.Unalias(o.Type()).(*types.Named); ok { + if T, ok := types.Unalias(o.Type()).(*types.Named); ok { path = append(path, opType) // The method index here is always with respect // to the underlying go/types data structures, @@ -325,7 +332,7 @@ func (enc *Encoder) For(obj types.Object) (Path, error) { if m == obj { return Path(path2), nil // found declared method } - if r := find(obj, m.Type(), append(path2, opType), nil); r != nil { + if r := find(obj, m.Type(), append(path2, opType)); r != nil { return Path(r), nil } } @@ -440,43 +447,64 @@ func (enc *Encoder) concreteMethod(meth *types.Func) (Path, bool) { // // The seen map is used to short circuit cycles through type parameters. If // nil, it will be allocated as necessary. -func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName]bool) []byte { +// +// The seenMethods map is used internally to short circuit cycles through +// interface methods, such as occur in the following example: +// +// type I interface { f() interface{I} } +// +// See golang/go#68046 for details. +func find(obj types.Object, T types.Type, path []byte) []byte { + return (&finder{obj: obj}).find(T, path) +} + +// finder closes over search state for a call to find. +type finder struct { + obj types.Object // the sought object + seenTParamNames map[*types.TypeName]bool // for cycle breaking through type parameters + seenMethods map[*types.Func]bool // for cycle breaking through recursive interfaces +} + +func (f *finder) find(T types.Type, path []byte) []byte { switch T := T.(type) { - case *aliases.Alias: - return find(obj, aliases.Unalias(T), path, seen) + case *types.Alias: + return f.find(types.Unalias(T), path) case *types.Basic, *types.Named: // Named types belonging to pkg were handled already, // so T must belong to another package. No path. return nil case *types.Pointer: - return find(obj, T.Elem(), append(path, opElem), seen) + return f.find(T.Elem(), append(path, opElem)) case *types.Slice: - return find(obj, T.Elem(), append(path, opElem), seen) + return f.find(T.Elem(), append(path, opElem)) case *types.Array: - return find(obj, T.Elem(), append(path, opElem), seen) + return f.find(T.Elem(), append(path, opElem)) case *types.Chan: - return find(obj, T.Elem(), append(path, opElem), seen) + return f.find(T.Elem(), append(path, opElem)) case *types.Map: - if r := find(obj, T.Key(), append(path, opKey), seen); r != nil { + if r := f.find(T.Key(), append(path, opKey)); r != nil { return r } - return find(obj, T.Elem(), append(path, opElem), seen) + return f.find(T.Elem(), append(path, opElem)) case *types.Signature: - if r := findTypeParam(obj, T.TypeParams(), path, seen); r != nil { + if r := f.findTypeParam(T.RecvTypeParams(), path, opRecvTypeParam); r != nil { + return r + } + if r := f.findTypeParam(T.TypeParams(), path, opTypeParam); r != nil { return r } - if r := find(obj, T.Params(), append(path, opParams), seen); r != nil { + if r := f.find(T.Params(), append(path, opParams)); r != nil { return r } - return find(obj, T.Results(), append(path, opResults), seen) + return f.find(T.Results(), append(path, opResults)) case *types.Struct: for i := 0; i < T.NumFields(); i++ { fld := T.Field(i) path2 := appendOpArg(path, opField, i) - if fld == obj { + if fld == f.obj { return path2 // found field var } - if r := find(obj, fld.Type(), append(path2, opType), seen); r != nil { + if r := f.find(fld.Type(), append(path2, opType)); r != nil { return r } } @@ -485,10 +513,10 @@ func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName] for i := 0; i < T.Len(); i++ { v := T.At(i) path2 := appendOpArg(path, opAt, i) - if v == obj { + if v == f.obj { return path2 // found param/result var } - if r := find(obj, v.Type(), append(path2, opType), seen); r != nil { + if r := f.find(v.Type(), append(path2, opType)); r != nil { return r } } @@ -496,28 +524,35 @@ func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName] case *types.Interface: for i := 0; i < T.NumMethods(); i++ { m := T.Method(i) + if f.seenMethods[m] { + return nil + } path2 := appendOpArg(path, opMethod, i) - if m == obj { + if m == f.obj { return path2 // found interface method } - if r := find(obj, m.Type(), append(path2, opType), seen); r != nil { + if f.seenMethods == nil { + f.seenMethods = make(map[*types.Func]bool) + } + f.seenMethods[m] = true + if r := f.find(m.Type(), append(path2, opType)); r != nil { return r } } return nil case *types.TypeParam: name := T.Obj() - if name == obj { - return append(path, opObj) - } - if seen[name] { + if f.seenTParamNames[name] { return nil } - if seen == nil { - seen = make(map[*types.TypeName]bool) + if name == f.obj { + return append(path, opObj) + } + if f.seenTParamNames == nil { + f.seenTParamNames = make(map[*types.TypeName]bool) } - seen[name] = true - if r := find(obj, T.Constraint(), append(path, opConstraint), seen); r != nil { + f.seenTParamNames[name] = true + if r := f.find(T.Constraint(), append(path, opConstraint)); r != nil { return r } return nil @@ -525,11 +560,15 @@ func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName] panic(T) } -func findTypeParam(obj types.Object, list *types.TypeParamList, path []byte, seen map[*types.TypeName]bool) []byte { +func findTypeParam(obj types.Object, list *types.TypeParamList, path []byte, op byte) []byte { + return (&finder{obj: obj}).findTypeParam(list, path, op) +} + +func (f *finder) findTypeParam(list *types.TypeParamList, path []byte, op byte) []byte { for i := 0; i < list.Len(); i++ { tparam := list.At(i) - path2 := appendOpArg(path, opTypeParam, i) - if r := find(obj, tparam, path2, seen); r != nil { + path2 := appendOpArg(path, op, i) + if r := f.find(tparam, path2); r != nil { return r } } @@ -580,10 +619,10 @@ func Object(pkg *types.Package, p Path) (types.Object, error) { code := suffix[0] suffix = suffix[1:] - // Codes [AFM] have an integer operand. + // Codes [AFMTr] have an integer operand. var index int switch code { - case opAt, opField, opMethod, opTypeParam: + case opAt, opField, opMethod, opTypeParam, opRecvTypeParam: rest := strings.TrimLeft(suffix, "0123456789") numerals := suffix[:len(suffix)-len(rest)] suffix = rest @@ -616,7 +655,7 @@ func Object(pkg *types.Package, p Path) (types.Object, error) { // Inv: t != nil, obj == nil - t = aliases.Unalias(t) + t = types.Unalias(t) switch code { case opElem: hasElem, ok := t.(hasElem) // Pointer, Slice, Array, Chan, Map @@ -653,6 +692,16 @@ func Object(pkg *types.Package, p Path) (types.Object, error) { } t = named.Underlying() + case opRhs: + if alias, ok := t.(*types.Alias); ok { + t = aliases.Rhs(alias) + } else if false && aliases.Enabled() { + // The Enabled check is too expensive, so for now we + // simply assume that aliases are not enabled. + // TODO(adonovan): replace with "if true {" when go1.24 is assured. + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want alias)", code, t, t) + } + case opTypeParam: hasTypeParams, ok := t.(hasTypeParams) // Named, Signature if !ok { @@ -664,6 +713,17 @@ func Object(pkg *types.Package, p Path) (types.Object, error) { } t = tparams.At(index) + case opRecvTypeParam: + sig, ok := t.(*types.Signature) // Signature + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t) + } + rtparams := sig.RecvTypeParams() + if n := rtparams.Len(); index >= n { + return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n) + } + t = rtparams.At(index) + case opConstraint: tparam, ok := t.(*types.TypeParam) if !ok { @@ -725,6 +785,10 @@ func Object(pkg *types.Package, p Path) (types.Object, error) { } } + if obj == nil { + panic(p) // path does not end in an object-valued operator + } + if obj.Pkg() != pkg { return nil, fmt.Errorf("path denotes %s, which belongs to a different package", obj) } diff --git a/vendor/golang.org/x/tools/go/types/typeutil/callee.go b/vendor/golang.org/x/tools/go/types/typeutil/callee.go new file mode 100644 index 00000000..75438035 --- /dev/null +++ b/vendor/golang.org/x/tools/go/types/typeutil/callee.go @@ -0,0 +1,68 @@ +// 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 typeutil + +import ( + "go/ast" + "go/types" + + "golang.org/x/tools/internal/typeparams" +) + +// Callee returns the named target of a function call, if any: +// a function, method, builtin, or variable. +// +// Functions and methods may potentially have type parameters. +func Callee(info *types.Info, call *ast.CallExpr) types.Object { + fun := ast.Unparen(call.Fun) + + // Look through type instantiation if necessary. + isInstance := false + switch fun.(type) { + case *ast.IndexExpr, *ast.IndexListExpr: + // When extracting the callee from an *IndexExpr, we need to check that + // it is a *types.Func and not a *types.Var. + // Example: Don't match a slice m within the expression `m[0]()`. + isInstance = true + fun, _, _, _ = typeparams.UnpackIndexExpr(fun) + } + + var obj types.Object + switch fun := fun.(type) { + case *ast.Ident: + obj = info.Uses[fun] // type, var, builtin, or declared func + case *ast.SelectorExpr: + if sel, ok := info.Selections[fun]; ok { + obj = sel.Obj() // method or field + } else { + obj = info.Uses[fun.Sel] // qualified identifier? + } + } + if _, ok := obj.(*types.TypeName); ok { + return nil // T(x) is a conversion, not a call + } + // A Func is required to match instantiations. + if _, ok := obj.(*types.Func); isInstance && !ok { + return nil // Was not a Func. + } + return obj +} + +// StaticCallee returns the target (function or method) of a static function +// call, if any. It returns nil for calls to builtins. +// +// Note: for calls of instantiated functions and methods, StaticCallee returns +// the corresponding generic function or method on the generic type. +func StaticCallee(info *types.Info, call *ast.CallExpr) *types.Func { + if f, ok := Callee(info, call).(*types.Func); ok && !interfaceMethod(f) { + return f + } + return nil +} + +func interfaceMethod(f *types.Func) bool { + recv := f.Type().(*types.Signature).Recv() + return recv != nil && types.IsInterface(recv.Type()) +} diff --git a/vendor/golang.org/x/tools/go/types/typeutil/imports.go b/vendor/golang.org/x/tools/go/types/typeutil/imports.go new file mode 100644 index 00000000..b81ce0c3 --- /dev/null +++ b/vendor/golang.org/x/tools/go/types/typeutil/imports.go @@ -0,0 +1,30 @@ +// Copyright 2014 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 typeutil + +import "go/types" + +// Dependencies returns all dependencies of the specified packages. +// +// Dependent packages appear in topological order: if package P imports +// package Q, Q appears earlier than P in the result. +// The algorithm follows import statements in the order they +// appear in the source code, so the result is a total order. +func Dependencies(pkgs ...*types.Package) []*types.Package { + var result []*types.Package + seen := make(map[*types.Package]bool) + var visit func(pkgs []*types.Package) + visit = func(pkgs []*types.Package) { + for _, p := range pkgs { + if !seen[p] { + seen[p] = true + visit(p.Imports()) + result = append(result, p) + } + } + } + visit(pkgs) + return result +} diff --git a/vendor/golang.org/x/tools/go/types/typeutil/map.go b/vendor/golang.org/x/tools/go/types/typeutil/map.go new file mode 100644 index 00000000..43261147 --- /dev/null +++ b/vendor/golang.org/x/tools/go/types/typeutil/map.go @@ -0,0 +1,470 @@ +// Copyright 2014 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 typeutil defines various utilities for types, such as [Map], +// a hash table that maps [types.Type] to any value. +package typeutil + +import ( + "bytes" + "fmt" + "go/types" + "hash/maphash" + "unsafe" + + "golang.org/x/tools/internal/typeparams" +) + +// Map is a hash-table-based mapping from types (types.Type) to +// arbitrary values. The concrete types that implement +// the Type interface are pointers. Since they are not canonicalized, +// == cannot be used to check for equivalence, and thus we cannot +// simply use a Go map. +// +// Just as with map[K]V, a nil *Map is a valid empty map. +// +// Read-only map operations ([Map.At], [Map.Len], and so on) may +// safely be called concurrently. +// +// TODO(adonovan): deprecate in favor of https://go.dev/issues/69420 +// and 69559, if the latter proposals for a generic hash-map type and +// a types.Hash function are accepted. +type Map struct { + table map[uint32][]entry // maps hash to bucket; entry.key==nil means unused + length int // number of map entries +} + +// entry is an entry (key/value association) in a hash bucket. +type entry struct { + key types.Type + value any +} + +// SetHasher has no effect. +// +// It is a relic of an optimization that is no longer profitable. Do +// not use [Hasher], [MakeHasher], or [SetHasher] in new code. +func (m *Map) SetHasher(Hasher) {} + +// Delete removes the entry with the given key, if any. +// It returns true if the entry was found. +func (m *Map) Delete(key types.Type) bool { + if m != nil && m.table != nil { + hash := hash(key) + bucket := m.table[hash] + for i, e := range bucket { + if e.key != nil && types.Identical(key, e.key) { + // We can't compact the bucket as it + // would disturb iterators. + bucket[i] = entry{} + m.length-- + return true + } + } + } + return false +} + +// At returns the map entry for the given key. +// The result is nil if the entry is not present. +func (m *Map) At(key types.Type) any { + if m != nil && m.table != nil { + for _, e := range m.table[hash(key)] { + if e.key != nil && types.Identical(key, e.key) { + return e.value + } + } + } + return nil +} + +// Set sets the map entry for key to val, +// and returns the previous entry, if any. +func (m *Map) Set(key types.Type, value any) (prev any) { + if m.table != nil { + hash := hash(key) + bucket := m.table[hash] + var hole *entry + for i, e := range bucket { + if e.key == nil { + hole = &bucket[i] + } else if types.Identical(key, e.key) { + prev = e.value + bucket[i].value = value + return + } + } + + if hole != nil { + *hole = entry{key, value} // overwrite deleted entry + } else { + m.table[hash] = append(bucket, entry{key, value}) + } + } else { + hash := hash(key) + m.table = map[uint32][]entry{hash: {entry{key, value}}} + } + + m.length++ + return +} + +// Len returns the number of map entries. +func (m *Map) Len() int { + if m != nil { + return m.length + } + return 0 +} + +// Iterate calls function f on each entry in the map in unspecified order. +// +// If f should mutate the map, Iterate provides the same guarantees as +// Go maps: if f deletes a map entry that Iterate has not yet reached, +// f will not be invoked for it, but if f inserts a map entry that +// Iterate has not yet reached, whether or not f will be invoked for +// it is unspecified. +func (m *Map) Iterate(f func(key types.Type, value any)) { + if m != nil { + for _, bucket := range m.table { + for _, e := range bucket { + if e.key != nil { + f(e.key, e.value) + } + } + } + } +} + +// Keys returns a new slice containing the set of map keys. +// The order is unspecified. +func (m *Map) Keys() []types.Type { + keys := make([]types.Type, 0, m.Len()) + m.Iterate(func(key types.Type, _ any) { + keys = append(keys, key) + }) + return keys +} + +func (m *Map) toString(values bool) string { + if m == nil { + return "{}" + } + var buf bytes.Buffer + fmt.Fprint(&buf, "{") + sep := "" + m.Iterate(func(key types.Type, value any) { + fmt.Fprint(&buf, sep) + sep = ", " + fmt.Fprint(&buf, key) + if values { + fmt.Fprintf(&buf, ": %q", value) + } + }) + fmt.Fprint(&buf, "}") + return buf.String() +} + +// String returns a string representation of the map's entries. +// Values are printed using fmt.Sprintf("%v", v). +// Order is unspecified. +func (m *Map) String() string { + return m.toString(true) +} + +// KeysString returns a string representation of the map's key set. +// Order is unspecified. +func (m *Map) KeysString() string { + return m.toString(false) +} + +// -- Hasher -- + +// hash returns the hash of type t. +// TODO(adonovan): replace by types.Hash when Go proposal #69420 is accepted. +func hash(t types.Type) uint32 { + return theHasher.Hash(t) +} + +// A Hasher provides a [Hasher.Hash] method to map a type to its hash value. +// Hashers are stateless, and all are equivalent. +type Hasher struct{} + +var theHasher Hasher + +// MakeHasher returns Hasher{}. +// Hashers are stateless; all are equivalent. +func MakeHasher() Hasher { return theHasher } + +// Hash computes a hash value for the given type t such that +// Identical(t, t') => Hash(t) == Hash(t'). +func (h Hasher) Hash(t types.Type) uint32 { + return hasher{inGenericSig: false}.hash(t) +} + +// hasher holds the state of a single Hash traversal: whether we are +// inside the signature of a generic function; this is used to +// optimize [hasher.hashTypeParam]. +type hasher struct{ inGenericSig bool } + +// hashString computes the Fowler–Noll–Vo hash of s. +func hashString(s string) uint32 { + var h uint32 + for i := 0; i < len(s); i++ { + h ^= uint32(s[i]) + h *= 16777619 + } + return h +} + +// hash computes the hash of t. +func (h hasher) hash(t types.Type) uint32 { + // See Identical for rationale. + switch t := t.(type) { + case *types.Basic: + return uint32(t.Kind()) + + case *types.Alias: + return h.hash(types.Unalias(t)) + + case *types.Array: + return 9043 + 2*uint32(t.Len()) + 3*h.hash(t.Elem()) + + case *types.Slice: + return 9049 + 2*h.hash(t.Elem()) + + case *types.Struct: + var hash uint32 = 9059 + for i, n := 0, t.NumFields(); i < n; i++ { + f := t.Field(i) + if f.Anonymous() { + hash += 8861 + } + hash += hashString(t.Tag(i)) + hash += hashString(f.Name()) // (ignore f.Pkg) + hash += h.hash(f.Type()) + } + return hash + + case *types.Pointer: + return 9067 + 2*h.hash(t.Elem()) + + case *types.Signature: + var hash uint32 = 9091 + if t.Variadic() { + hash *= 8863 + } + + tparams := t.TypeParams() + if n := tparams.Len(); n > 0 { + h.inGenericSig = true // affects constraints, params, and results + + for i := range n { + tparam := tparams.At(i) + hash += 7 * h.hash(tparam.Constraint()) + } + } + + return hash + 3*h.hashTuple(t.Params()) + 5*h.hashTuple(t.Results()) + + case *types.Union: + return h.hashUnion(t) + + case *types.Interface: + // Interfaces are identical if they have the same set of methods, with + // identical names and types, and they have the same set of type + // restrictions. See go/types.identical for more details. + var hash uint32 = 9103 + + // Hash methods. + for i, n := 0, t.NumMethods(); i < n; i++ { + // Method order is not significant. + // Ignore m.Pkg(). + m := t.Method(i) + // Use shallow hash on method signature to + // avoid anonymous interface cycles. + hash += 3*hashString(m.Name()) + 5*h.shallowHash(m.Type()) + } + + // Hash type restrictions. + terms, err := typeparams.InterfaceTermSet(t) + // if err != nil t has invalid type restrictions. + if err == nil { + hash += h.hashTermSet(terms) + } + + return hash + + case *types.Map: + return 9109 + 2*h.hash(t.Key()) + 3*h.hash(t.Elem()) + + case *types.Chan: + return 9127 + 2*uint32(t.Dir()) + 3*h.hash(t.Elem()) + + case *types.Named: + hash := h.hashTypeName(t.Obj()) + targs := t.TypeArgs() + for i := 0; i < targs.Len(); i++ { + targ := targs.At(i) + hash += 2 * h.hash(targ) + } + return hash + + case *types.TypeParam: + return h.hashTypeParam(t) + + case *types.Tuple: + return h.hashTuple(t) + } + + panic(fmt.Sprintf("%T: %v", t, t)) +} + +func (h hasher) hashTuple(tuple *types.Tuple) uint32 { + // See go/types.identicalTypes for rationale. + n := tuple.Len() + hash := 9137 + 2*uint32(n) + for i := range n { + hash += 3 * h.hash(tuple.At(i).Type()) + } + return hash +} + +func (h hasher) hashUnion(t *types.Union) uint32 { + // Hash type restrictions. + terms, err := typeparams.UnionTermSet(t) + // if err != nil t has invalid type restrictions. Fall back on a non-zero + // hash. + if err != nil { + return 9151 + } + return h.hashTermSet(terms) +} + +func (h hasher) hashTermSet(terms []*types.Term) uint32 { + hash := 9157 + 2*uint32(len(terms)) + for _, term := range terms { + // term order is not significant. + termHash := h.hash(term.Type()) + if term.Tilde() { + termHash *= 9161 + } + hash += 3 * termHash + } + return hash +} + +// hashTypeParam returns the hash of a type parameter. +func (h hasher) hashTypeParam(t *types.TypeParam) uint32 { + // Within the signature of a generic function, TypeParams are + // identical if they have the same index and constraint, so we + // hash them based on index. + // + // When we are outside a generic function, free TypeParams are + // identical iff they are the same object, so we can use a + // more discriminating hash consistent with object identity. + // This optimization saves [Map] about 4% when hashing all the + // types.Info.Types in the forward closure of net/http. + if !h.inGenericSig { + // Optimization: outside a generic function signature, + // use a more discrimating hash consistent with object identity. + return h.hashTypeName(t.Obj()) + } + return 9173 + 3*uint32(t.Index()) +} + +var theSeed = maphash.MakeSeed() + +// hashTypeName hashes the pointer of tname. +func (hasher) hashTypeName(tname *types.TypeName) uint32 { + // Since types.Identical uses == to compare TypeNames, + // the Hash function uses maphash.Comparable. + // TODO(adonovan): or will, when it becomes available in go1.24. + // In the meantime we use the pointer's numeric value. + // + // hash := maphash.Comparable(theSeed, tname) + // + // (Another approach would be to hash the name and package + // path, and whether or not it is a package-level typename. It + // is rare for a package to define multiple local types with + // the same name.) + hash := uintptr(unsafe.Pointer(tname)) + return uint32(hash ^ (hash >> 32)) +} + +// shallowHash computes a hash of t without looking at any of its +// element Types, to avoid potential anonymous cycles in the types of +// interface methods. +// +// When an unnamed non-empty interface type appears anywhere among the +// arguments or results of an interface method, there is a potential +// for endless recursion. Consider: +// +// type X interface { m() []*interface { X } } +// +// The problem is that the Methods of the interface in m's result type +// include m itself; there is no mention of the named type X that +// might help us break the cycle. +// (See comment in go/types.identical, case *Interface, for more.) +func (h hasher) shallowHash(t types.Type) uint32 { + // t is the type of an interface method (Signature), + // its params or results (Tuples), or their immediate + // elements (mostly Slice, Pointer, Basic, Named), + // so there's no need to optimize anything else. + switch t := t.(type) { + case *types.Alias: + return h.shallowHash(types.Unalias(t)) + + case *types.Signature: + var hash uint32 = 604171 + if t.Variadic() { + hash *= 971767 + } + // The Signature/Tuple recursion is always finite + // and invariably shallow. + return hash + 1062599*h.shallowHash(t.Params()) + 1282529*h.shallowHash(t.Results()) + + case *types.Tuple: + n := t.Len() + hash := 9137 + 2*uint32(n) + for i := range n { + hash += 53471161 * h.shallowHash(t.At(i).Type()) + } + return hash + + case *types.Basic: + return 45212177 * uint32(t.Kind()) + + case *types.Array: + return 1524181 + 2*uint32(t.Len()) + + case *types.Slice: + return 2690201 + + case *types.Struct: + return 3326489 + + case *types.Pointer: + return 4393139 + + case *types.Union: + return 562448657 + + case *types.Interface: + return 2124679 // no recursion here + + case *types.Map: + return 9109 + + case *types.Chan: + return 9127 + + case *types.Named: + return h.hashTypeName(t.Obj()) + + case *types.TypeParam: + return h.hashTypeParam(t) + } + panic(fmt.Sprintf("shallowHash: %T: %v", t, t)) +} diff --git a/vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.go b/vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.go new file mode 100644 index 00000000..f7666028 --- /dev/null +++ b/vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.go @@ -0,0 +1,71 @@ +// Copyright 2014 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 file implements a cache of method sets. + +package typeutil + +import ( + "go/types" + "sync" +) + +// A MethodSetCache records the method set of each type T for which +// MethodSet(T) is called so that repeat queries are fast. +// The zero value is a ready-to-use cache instance. +type MethodSetCache struct { + mu sync.Mutex + named map[*types.Named]struct{ value, pointer *types.MethodSet } // method sets for named N and *N + others map[types.Type]*types.MethodSet // all other types +} + +// MethodSet returns the method set of type T. It is thread-safe. +// +// If cache is nil, this function is equivalent to types.NewMethodSet(T). +// Utility functions can thus expose an optional *MethodSetCache +// parameter to clients that care about performance. +func (cache *MethodSetCache) MethodSet(T types.Type) *types.MethodSet { + if cache == nil { + return types.NewMethodSet(T) + } + cache.mu.Lock() + defer cache.mu.Unlock() + + switch T := types.Unalias(T).(type) { + case *types.Named: + return cache.lookupNamed(T).value + + case *types.Pointer: + if N, ok := types.Unalias(T.Elem()).(*types.Named); ok { + return cache.lookupNamed(N).pointer + } + } + + // all other types + // (The map uses pointer equivalence, not type identity.) + mset := cache.others[T] + if mset == nil { + mset = types.NewMethodSet(T) + if cache.others == nil { + cache.others = make(map[types.Type]*types.MethodSet) + } + cache.others[T] = mset + } + return mset +} + +func (cache *MethodSetCache) lookupNamed(named *types.Named) struct{ value, pointer *types.MethodSet } { + if cache.named == nil { + cache.named = make(map[*types.Named]struct{ value, pointer *types.MethodSet }) + } + // Avoid recomputing mset(*T) for each distinct Pointer + // instance whose underlying type is a named type. + msets, ok := cache.named[named] + if !ok { + msets.value = types.NewMethodSet(named) + msets.pointer = types.NewMethodSet(types.NewPointer(named)) + cache.named[named] = msets + } + return msets +} diff --git a/vendor/golang.org/x/tools/go/types/typeutil/ui.go b/vendor/golang.org/x/tools/go/types/typeutil/ui.go new file mode 100644 index 00000000..9dda6a25 --- /dev/null +++ b/vendor/golang.org/x/tools/go/types/typeutil/ui.go @@ -0,0 +1,53 @@ +// Copyright 2014 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 typeutil + +// This file defines utilities for user interfaces that display types. + +import ( + "go/types" +) + +// IntuitiveMethodSet returns the intuitive method set of a type T, +// which is the set of methods you can call on an addressable value of +// that type. +// +// The result always contains MethodSet(T), and is exactly MethodSet(T) +// for interface types and for pointer-to-concrete types. +// For all other concrete types T, the result additionally +// contains each method belonging to *T if there is no identically +// named method on T itself. +// +// This corresponds to user intuition about method sets; +// this function is intended only for user interfaces. +// +// The order of the result is as for types.MethodSet(T). +func IntuitiveMethodSet(T types.Type, msets *MethodSetCache) []*types.Selection { + isPointerToConcrete := func(T types.Type) bool { + ptr, ok := types.Unalias(T).(*types.Pointer) + return ok && !types.IsInterface(ptr.Elem()) + } + + var result []*types.Selection + mset := msets.MethodSet(T) + if types.IsInterface(T) || isPointerToConcrete(T) { + for i, n := 0, mset.Len(); i < n; i++ { + result = append(result, mset.At(i)) + } + } else { + // T is some other concrete type. + // Report methods of T and *T, preferring those of T. + pmset := msets.MethodSet(types.NewPointer(T)) + for i, n := 0, pmset.Len(); i < n; i++ { + meth := pmset.At(i) + if m := mset.Lookup(meth.Obj().Pkg(), meth.Obj().Name()); m != nil { + meth = m + } + result = append(result, meth) + } + + } + return result +} diff --git a/vendor/golang.org/x/tools/internal/aliases/aliases.go b/vendor/golang.org/x/tools/internal/aliases/aliases.go index c24c2eee..b9425f5a 100644 --- a/vendor/golang.org/x/tools/internal/aliases/aliases.go +++ b/vendor/golang.org/x/tools/internal/aliases/aliases.go @@ -22,11 +22,17 @@ import ( // GODEBUG=gotypesalias=... by invoking the type checker. The Enabled // function is expensive and should be called once per task (e.g. // package import), not once per call to NewAlias. -func NewAlias(enabled bool, pos token.Pos, pkg *types.Package, name string, rhs types.Type) *types.TypeName { +// +// Precondition: enabled || len(tparams)==0. +// If materialized aliases are disabled, there must not be any type parameters. +func NewAlias(enabled bool, pos token.Pos, pkg *types.Package, name string, rhs types.Type, tparams []*types.TypeParam) *types.TypeName { if enabled { tname := types.NewTypeName(pos, pkg, name, nil) - newAlias(tname, rhs) + SetTypeParams(types.NewAlias(tname, rhs), tparams) return tname } + if len(tparams) > 0 { + panic("cannot create an alias with type parameters when gotypesalias is not enabled") + } return types.NewTypeName(pos, pkg, name, rhs) } diff --git a/vendor/golang.org/x/tools/internal/aliases/aliases_go121.go b/vendor/golang.org/x/tools/internal/aliases/aliases_go121.go deleted file mode 100644 index c027b9f3..00000000 --- a/vendor/golang.org/x/tools/internal/aliases/aliases_go121.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2024 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. - -//go:build !go1.22 -// +build !go1.22 - -package aliases - -import ( - "go/types" -) - -// Alias is a placeholder for a go/types.Alias for <=1.21. -// It will never be created by go/types. -type Alias struct{} - -func (*Alias) String() string { panic("unreachable") } -func (*Alias) Underlying() types.Type { panic("unreachable") } -func (*Alias) Obj() *types.TypeName { panic("unreachable") } -func Rhs(alias *Alias) types.Type { panic("unreachable") } - -// Unalias returns the type t for go <=1.21. -func Unalias(t types.Type) types.Type { return t } - -func newAlias(name *types.TypeName, rhs types.Type) *Alias { panic("unreachable") } - -// Enabled reports whether [NewAlias] should create [types.Alias] types. -// -// Before go1.22, this function always returns false. -func Enabled() bool { return false } diff --git a/vendor/golang.org/x/tools/internal/aliases/aliases_go122.go b/vendor/golang.org/x/tools/internal/aliases/aliases_go122.go index b3299548..7716a333 100644 --- a/vendor/golang.org/x/tools/internal/aliases/aliases_go122.go +++ b/vendor/golang.org/x/tools/internal/aliases/aliases_go122.go @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build go1.22 -// +build go1.22 - package aliases import ( @@ -14,31 +11,51 @@ import ( "go/types" ) -// Alias is an alias of types.Alias. -type Alias = types.Alias - // Rhs returns the type on the right-hand side of the alias declaration. -func Rhs(alias *Alias) types.Type { +func Rhs(alias *types.Alias) types.Type { if alias, ok := any(alias).(interface{ Rhs() types.Type }); ok { return alias.Rhs() // go1.23+ } // go1.22's Alias didn't have the Rhs method, // so Unalias is the best we can do. - return Unalias(alias) + return types.Unalias(alias) +} + +// TypeParams returns the type parameter list of the alias. +func TypeParams(alias *types.Alias) *types.TypeParamList { + if alias, ok := any(alias).(interface{ TypeParams() *types.TypeParamList }); ok { + return alias.TypeParams() // go1.23+ + } + return nil +} + +// SetTypeParams sets the type parameters of the alias type. +func SetTypeParams(alias *types.Alias, tparams []*types.TypeParam) { + if alias, ok := any(alias).(interface { + SetTypeParams(tparams []*types.TypeParam) + }); ok { + alias.SetTypeParams(tparams) // go1.23+ + } else if len(tparams) > 0 { + panic("cannot set type parameters of an Alias type in go1.22") + } +} + +// TypeArgs returns the type arguments used to instantiate the Alias type. +func TypeArgs(alias *types.Alias) *types.TypeList { + if alias, ok := any(alias).(interface{ TypeArgs() *types.TypeList }); ok { + return alias.TypeArgs() // go1.23+ + } + return nil // empty (go1.22) } -// Unalias is a wrapper of types.Unalias. -func Unalias(t types.Type) types.Type { return types.Unalias(t) } - -// newAlias is an internal alias around types.NewAlias. -// Direct usage is discouraged as the moment. -// Try to use NewAlias instead. -func newAlias(tname *types.TypeName, rhs types.Type) *Alias { - a := types.NewAlias(tname, rhs) - // TODO(go.dev/issue/65455): Remove kludgy workaround to set a.actual as a side-effect. - Unalias(a) - return a +// Origin returns the generic Alias type of which alias is an instance. +// If alias is not an instance of a generic alias, Origin returns alias. +func Origin(alias *types.Alias) *types.Alias { + if alias, ok := any(alias).(interface{ Origin() *types.Alias }); ok { + return alias.Origin() // go1.23+ + } + return alias // not an instance of a generic alias (go1.22) } // Enabled reports whether [NewAlias] should create [types.Alias] types. @@ -56,7 +73,7 @@ func Enabled() bool { // many tests. Therefore any attempt to cache the result // is just incorrect. fset := token.NewFileSet() - f, _ := parser.ParseFile(fset, "a.go", "package p; type A = int", 0) + f, _ := parser.ParseFile(fset, "a.go", "package p; type A = int", parser.SkipObjectResolution) pkg, _ := new(types.Config).Check("p", fset, []*ast.File{f}, nil) _, enabled := pkg.Scope().Lookup("A").Type().(*types.Alias) return enabled diff --git a/vendor/golang.org/x/tools/internal/gcimporter/bimport.go b/vendor/golang.org/x/tools/internal/gcimporter/bimport.go index d98b0db2..d79a605e 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/bimport.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/bimport.go @@ -87,64 +87,3 @@ func chanDir(d int) types.ChanDir { return 0 } } - -var predeclOnce sync.Once -var predecl []types.Type // initialized lazily - -func predeclared() []types.Type { - predeclOnce.Do(func() { - // initialize lazily to be sure that all - // elements have been initialized before - predecl = []types.Type{ // basic types - types.Typ[types.Bool], - types.Typ[types.Int], - types.Typ[types.Int8], - types.Typ[types.Int16], - types.Typ[types.Int32], - types.Typ[types.Int64], - types.Typ[types.Uint], - types.Typ[types.Uint8], - types.Typ[types.Uint16], - types.Typ[types.Uint32], - types.Typ[types.Uint64], - types.Typ[types.Uintptr], - types.Typ[types.Float32], - types.Typ[types.Float64], - types.Typ[types.Complex64], - types.Typ[types.Complex128], - types.Typ[types.String], - - // basic type aliases - types.Universe.Lookup("byte").Type(), - types.Universe.Lookup("rune").Type(), - - // error - types.Universe.Lookup("error").Type(), - - // untyped types - types.Typ[types.UntypedBool], - types.Typ[types.UntypedInt], - types.Typ[types.UntypedRune], - types.Typ[types.UntypedFloat], - types.Typ[types.UntypedComplex], - types.Typ[types.UntypedString], - types.Typ[types.UntypedNil], - - // package unsafe - types.Typ[types.UnsafePointer], - - // invalid type - types.Typ[types.Invalid], // only appears in packages with errors - - // used internally by gc; never used by this package or in .a files - anyType{}, - } - predecl = append(predecl, additionalPredeclared()...) - }) - return predecl -} - -type anyType struct{} - -func (t anyType) Underlying() types.Type { return t } -func (t anyType) String() string { return "any" } diff --git a/vendor/golang.org/x/tools/internal/gcimporter/exportdata.go b/vendor/golang.org/x/tools/internal/gcimporter/exportdata.go index f6437feb..5662a311 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/exportdata.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/exportdata.go @@ -2,49 +2,183 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// This file is a copy of $GOROOT/src/go/internal/gcimporter/exportdata.go. - -// This file implements FindExportData. +// This file should be kept in sync with $GOROOT/src/internal/exportdata/exportdata.go. +// This file also additionally implements FindExportData for gcexportdata.NewReader. package gcimporter import ( "bufio" + "bytes" + "errors" "fmt" + "go/build" "io" - "strconv" + "os" + "os/exec" + "path/filepath" "strings" + "sync" ) -func readGopackHeader(r *bufio.Reader) (name string, size int64, err error) { - // See $GOROOT/include/ar.h. - hdr := make([]byte, 16+12+6+6+8+10+2) - _, err = io.ReadFull(r, hdr) +// FindExportData positions the reader r at the beginning of the +// export data section of an underlying cmd/compile created archive +// file by reading from it. The reader must be positioned at the +// start of the file before calling this function. +// This returns the length of the export data in bytes. +// +// This function is needed by [gcexportdata.Read], which must +// accept inputs produced by the last two releases of cmd/compile, +// plus tip. +func FindExportData(r *bufio.Reader) (size int64, err error) { + arsize, err := FindPackageDefinition(r) + if err != nil { + return + } + size = int64(arsize) + + objapi, headers, err := ReadObjectHeaders(r) if err != nil { return } - // leave for debugging - if false { - fmt.Printf("header: %s", hdr) + size -= int64(len(objapi)) + for _, h := range headers { + size -= int64(len(h)) + } + + // Check for the binary export data section header "$$B\n". + // TODO(taking): Unify with ReadExportDataHeader so that it stops at the 'u' instead of reading + line, err := r.ReadSlice('\n') + if err != nil { + return + } + hdr := string(line) + if hdr != "$$B\n" { + err = fmt.Errorf("unknown export data header: %q", hdr) + return } - s := strings.TrimSpace(string(hdr[16+12+6+6+8:][:10])) - length, err := strconv.Atoi(s) - size = int64(length) - if err != nil || hdr[len(hdr)-2] != '`' || hdr[len(hdr)-1] != '\n' { - err = fmt.Errorf("invalid archive header") + size -= int64(len(hdr)) + + // For files with a binary export data header "$$B\n", + // these are always terminated by an end-of-section marker "\n$$\n". + // So the last bytes must always be this constant. + // + // The end-of-section marker is not a part of the export data itself. + // Do not include these in size. + // + // It would be nice to have sanity check that the final bytes after + // the export data are indeed the end-of-section marker. The split + // of gcexportdata.NewReader and gcexportdata.Read make checking this + // ugly so gcimporter gives up enforcing this. The compiler and go/types + // importer do enforce this, which seems good enough. + const endofsection = "\n$$\n" + size -= int64(len(endofsection)) + + if size < 0 { + err = fmt.Errorf("invalid size (%d) in the archive file: %d bytes remain without section headers (recompile package)", arsize, size) return } - name = strings.TrimSpace(string(hdr[:16])) + return } -// FindExportData positions the reader r at the beginning of the -// export data section of an underlying GC-created object/archive -// file by reading from it. The reader must be positioned at the -// start of the file before calling this function. The hdr result -// is the string before the export data, either "$$" or "$$B". -// The size result is the length of the export data in bytes, or -1 if not known. -func FindExportData(r *bufio.Reader) (hdr string, size int64, err error) { +// ReadUnified reads the contents of the unified export data from a reader r +// that contains the contents of a GC-created archive file. +// +// On success, the reader will be positioned after the end-of-section marker "\n$$\n". +// +// Supported GC-created archive files have 4 layers of nesting: +// - An archive file containing a package definition file. +// - The package definition file contains headers followed by a data section. +// Headers are lines (≤ 4kb) that do not start with "$$". +// - The data section starts with "$$B\n" followed by export data followed +// by an end of section marker "\n$$\n". (The section start "$$\n" is no +// longer supported.) +// - The export data starts with a format byte ('u') followed by the in +// the given format. (See ReadExportDataHeader for older formats.) +// +// Putting this together, the bytes in a GC-created archive files are expected +// to look like the following. +// See cmd/internal/archive for more details on ar file headers. +// +// | \n | ar file signature +// | __.PKGDEF...size...\n | ar header for __.PKGDEF including size. +// | go object <...>\n | objabi header +// | \n | other headers such as build id +// | $$B\n | binary format marker +// | u\n | unified export +// | $$\n | end-of-section marker +// | [optional padding] | padding byte (0x0A) if size is odd +// | [ar file header] | other ar files +// | [ar file data] | +func ReadUnified(r *bufio.Reader) (data []byte, err error) { + // We historically guaranteed headers at the default buffer size (4096) work. + // This ensures we can use ReadSlice throughout. + const minBufferSize = 4096 + r = bufio.NewReaderSize(r, minBufferSize) + + size, err := FindPackageDefinition(r) + if err != nil { + return + } + n := size + + objapi, headers, err := ReadObjectHeaders(r) + if err != nil { + return + } + n -= len(objapi) + for _, h := range headers { + n -= len(h) + } + + hdrlen, err := ReadExportDataHeader(r) + if err != nil { + return + } + n -= hdrlen + + // size also includes the end of section marker. Remove that many bytes from the end. + const marker = "\n$$\n" + n -= len(marker) + + if n < 0 { + err = fmt.Errorf("invalid size (%d) in the archive file: %d bytes remain without section headers (recompile package)", size, n) + return + } + + // Read n bytes from buf. + data = make([]byte, n) + _, err = io.ReadFull(r, data) + if err != nil { + return + } + + // Check for marker at the end. + var suffix [len(marker)]byte + _, err = io.ReadFull(r, suffix[:]) + if err != nil { + return + } + if s := string(suffix[:]); s != marker { + err = fmt.Errorf("read %q instead of end-of-section marker (%q)", s, marker) + return + } + + return +} + +// FindPackageDefinition positions the reader r at the beginning of a package +// definition file ("__.PKGDEF") within a GC-created archive by reading +// from it, and returns the size of the package definition file in the archive. +// +// The reader must be positioned at the start of the archive file before calling +// this function, and "__.PKGDEF" is assumed to be the first file in the archive. +// +// See cmd/internal/archive for details on the archive format. +func FindPackageDefinition(r *bufio.Reader) (size int, err error) { + // Uses ReadSlice to limit risk of malformed inputs. + // Read first line to make sure this is an object file. line, err := r.ReadSlice('\n') if err != nil { @@ -52,48 +186,236 @@ func FindExportData(r *bufio.Reader) (hdr string, size int64, err error) { return } - if string(line) == "!\n" { - // Archive file. Scan to __.PKGDEF. - var name string - if name, size, err = readGopackHeader(r); err != nil { - return - } + // Is the first line an archive file signature? + if string(line) != "!\n" { + err = fmt.Errorf("not the start of an archive file (%q)", line) + return + } + + // package export block should be first + size = readArchiveHeader(r, "__.PKGDEF") + if size <= 0 { + err = fmt.Errorf("not a package file") + return + } + + return +} - // First entry should be __.PKGDEF. - if name != "__.PKGDEF" { - err = fmt.Errorf("go archive is missing __.PKGDEF") +// ReadObjectHeaders reads object headers from the reader. Object headers are +// lines that do not start with an end-of-section marker "$$". The first header +// is the objabi header. On success, the reader will be positioned at the beginning +// of the end-of-section marker. +// +// It returns an error if any header does not fit in r.Size() bytes. +func ReadObjectHeaders(r *bufio.Reader) (objapi string, headers []string, err error) { + // line is a temporary buffer for headers. + // Use bounded reads (ReadSlice, Peek) to limit risk of malformed inputs. + var line []byte + + // objapi header should be the first line + if line, err = r.ReadSlice('\n'); err != nil { + err = fmt.Errorf("can't find export data (%v)", err) + return + } + objapi = string(line) + + // objapi header begins with "go object ". + if !strings.HasPrefix(objapi, "go object ") { + err = fmt.Errorf("not a go object file: %s", objapi) + return + } + + // process remaining object header lines + for { + // check for an end of section marker "$$" + line, err = r.Peek(2) + if err != nil { return } + if string(line) == "$$" { + return // stop + } - // Read first line of __.PKGDEF data, so that line - // is once again the first line of the input. - if line, err = r.ReadSlice('\n'); err != nil { - err = fmt.Errorf("can't find export data (%v)", err) + // read next header + line, err = r.ReadSlice('\n') + if err != nil { return } - size -= int64(len(line)) + headers = append(headers, string(line)) } +} - // Now at __.PKGDEF in archive or still at beginning of file. - // Either way, line should begin with "go object ". - if !strings.HasPrefix(string(line), "go object ") { - err = fmt.Errorf("not a Go object file") +// ReadExportDataHeader reads the export data header and format from r. +// It returns the number of bytes read, or an error if the format is no longer +// supported or it failed to read. +// +// The only currently supported format is binary export data in the +// unified export format. +func ReadExportDataHeader(r *bufio.Reader) (n int, err error) { + // Read export data header. + line, err := r.ReadSlice('\n') + if err != nil { return } - // Skip over object header to export data. - // Begins after first line starting with $$. - for line[0] != '$' { - if line, err = r.ReadSlice('\n'); err != nil { - err = fmt.Errorf("can't find export data (%v)", err) + hdr := string(line) + switch hdr { + case "$$\n": + err = fmt.Errorf("old textual export format no longer supported (recompile package)") + return + + case "$$B\n": + var format byte + format, err = r.ReadByte() + if err != nil { return } - size -= int64(len(line)) - } - hdr = string(line) - if size < 0 { - size = -1 + // The unified export format starts with a 'u'. + switch format { + case 'u': + default: + // Older no longer supported export formats include: + // indexed export format which started with an 'i'; and + // the older binary export format which started with a 'c', + // 'd', or 'v' (from "version"). + err = fmt.Errorf("binary export format %q is no longer supported (recompile package)", format) + return + } + + default: + err = fmt.Errorf("unknown export data header: %q", hdr) + return } + n = len(hdr) + 1 // + 1 is for 'u' return } + +// FindPkg returns the filename and unique package id for an import +// path based on package information provided by build.Import (using +// the build.Default build.Context). A relative srcDir is interpreted +// relative to the current working directory. +// +// FindPkg is only used in tests within x/tools. +func FindPkg(path, srcDir string) (filename, id string, err error) { + // TODO(taking): Move internal/exportdata.FindPkg into its own file, + // and then this copy into a _test package. + if path == "" { + return "", "", errors.New("path is empty") + } + + var noext string + switch { + default: + // "x" -> "$GOPATH/pkg/$GOOS_$GOARCH/x.ext", "x" + // Don't require the source files to be present. + if abs, err := filepath.Abs(srcDir); err == nil { // see issue 14282 + srcDir = abs + } + var bp *build.Package + bp, err = build.Import(path, srcDir, build.FindOnly|build.AllowBinary) + if bp.PkgObj == "" { + if bp.Goroot && bp.Dir != "" { + filename, err = lookupGorootExport(bp.Dir) + if err == nil { + _, err = os.Stat(filename) + } + if err == nil { + return filename, bp.ImportPath, nil + } + } + goto notfound + } else { + noext = strings.TrimSuffix(bp.PkgObj, ".a") + } + id = bp.ImportPath + + case build.IsLocalImport(path): + // "./x" -> "/this/directory/x.ext", "/this/directory/x" + noext = filepath.Join(srcDir, path) + id = noext + + case filepath.IsAbs(path): + // for completeness only - go/build.Import + // does not support absolute imports + // "/x" -> "/x.ext", "/x" + noext = path + id = path + } + + if false { // for debugging + if path != id { + fmt.Printf("%s -> %s\n", path, id) + } + } + + // try extensions + for _, ext := range pkgExts { + filename = noext + ext + f, statErr := os.Stat(filename) + if statErr == nil && !f.IsDir() { + return filename, id, nil + } + if err == nil { + err = statErr + } + } + +notfound: + if err == nil { + return "", path, fmt.Errorf("can't find import: %q", path) + } + return "", path, fmt.Errorf("can't find import: %q: %w", path, err) +} + +var pkgExts = [...]string{".a", ".o"} // a file from the build cache will have no extension + +var exportMap sync.Map // package dir → func() (string, error) + +// lookupGorootExport returns the location of the export data +// (normally found in the build cache, but located in GOROOT/pkg +// in prior Go releases) for the package located in pkgDir. +// +// (We use the package's directory instead of its import path +// mainly to simplify handling of the packages in src/vendor +// and cmd/vendor.) +// +// lookupGorootExport is only used in tests within x/tools. +func lookupGorootExport(pkgDir string) (string, error) { + f, ok := exportMap.Load(pkgDir) + if !ok { + var ( + listOnce sync.Once + exportPath string + err error + ) + f, _ = exportMap.LoadOrStore(pkgDir, func() (string, error) { + listOnce.Do(func() { + cmd := exec.Command(filepath.Join(build.Default.GOROOT, "bin", "go"), "list", "-export", "-f", "{{.Export}}", pkgDir) + cmd.Dir = build.Default.GOROOT + cmd.Env = append(os.Environ(), "PWD="+cmd.Dir, "GOROOT="+build.Default.GOROOT) + var output []byte + output, err = cmd.Output() + if err != nil { + if ee, ok := err.(*exec.ExitError); ok && len(ee.Stderr) > 0 { + err = errors.New(string(ee.Stderr)) + } + return + } + + exports := strings.Split(string(bytes.TrimSpace(output)), "\n") + if len(exports) != 1 { + err = fmt.Errorf("go list reported %d exports; expected 1", len(exports)) + return + } + + exportPath = exports[0] + }) + + return exportPath, err + }) + } + + return f.(func() (string, error))() +} diff --git a/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go b/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go index 39df9112..3dbd21d1 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go @@ -23,17 +23,11 @@ package gcimporter // import "golang.org/x/tools/internal/gcimporter" import ( "bufio" - "bytes" "fmt" - "go/build" "go/token" "go/types" "io" "os" - "os/exec" - "path/filepath" - "strings" - "sync" ) const ( @@ -45,125 +39,14 @@ const ( trace = false ) -var exportMap sync.Map // package dir → func() (string, bool) - -// lookupGorootExport returns the location of the export data -// (normally found in the build cache, but located in GOROOT/pkg -// in prior Go releases) for the package located in pkgDir. -// -// (We use the package's directory instead of its import path -// mainly to simplify handling of the packages in src/vendor -// and cmd/vendor.) -func lookupGorootExport(pkgDir string) (string, bool) { - f, ok := exportMap.Load(pkgDir) - if !ok { - var ( - listOnce sync.Once - exportPath string - ) - f, _ = exportMap.LoadOrStore(pkgDir, func() (string, bool) { - listOnce.Do(func() { - cmd := exec.Command("go", "list", "-export", "-f", "{{.Export}}", pkgDir) - cmd.Dir = build.Default.GOROOT - var output []byte - output, err := cmd.Output() - if err != nil { - return - } - - exports := strings.Split(string(bytes.TrimSpace(output)), "\n") - if len(exports) != 1 { - return - } - - exportPath = exports[0] - }) - - return exportPath, exportPath != "" - }) - } - - return f.(func() (string, bool))() -} - -var pkgExts = [...]string{".a", ".o"} - -// FindPkg returns the filename and unique package id for an import -// path based on package information provided by build.Import (using -// the build.Default build.Context). A relative srcDir is interpreted -// relative to the current working directory. -// If no file was found, an empty filename is returned. -func FindPkg(path, srcDir string) (filename, id string) { - if path == "" { - return - } - - var noext string - switch { - default: - // "x" -> "$GOPATH/pkg/$GOOS_$GOARCH/x.ext", "x" - // Don't require the source files to be present. - if abs, err := filepath.Abs(srcDir); err == nil { // see issue 14282 - srcDir = abs - } - bp, _ := build.Import(path, srcDir, build.FindOnly|build.AllowBinary) - if bp.PkgObj == "" { - var ok bool - if bp.Goroot && bp.Dir != "" { - filename, ok = lookupGorootExport(bp.Dir) - } - if !ok { - id = path // make sure we have an id to print in error message - return - } - } else { - noext = strings.TrimSuffix(bp.PkgObj, ".a") - id = bp.ImportPath - } - - case build.IsLocalImport(path): - // "./x" -> "/this/directory/x.ext", "/this/directory/x" - noext = filepath.Join(srcDir, path) - id = noext - - case filepath.IsAbs(path): - // for completeness only - go/build.Import - // does not support absolute imports - // "/x" -> "/x.ext", "/x" - noext = path - id = path - } - - if false { // for debugging - if path != id { - fmt.Printf("%s -> %s\n", path, id) - } - } - - if filename != "" { - if f, err := os.Stat(filename); err == nil && !f.IsDir() { - return - } - } - - // try extensions - for _, ext := range pkgExts { - filename = noext + ext - if f, err := os.Stat(filename); err == nil && !f.IsDir() { - return - } - } - - filename = "" // not found - return -} - // Import imports a gc-generated package given its import path and srcDir, adds // the corresponding package object to the packages map, and returns the object. // The packages map must contain all packages already imported. -func Import(packages map[string]*types.Package, path, srcDir string, lookup func(path string) (io.ReadCloser, error)) (pkg *types.Package, err error) { +// +// Import is only used in tests. +func Import(fset *token.FileSet, packages map[string]*types.Package, path, srcDir string, lookup func(path string) (io.ReadCloser, error)) (pkg *types.Package, err error) { var rc io.ReadCloser - var filename, id string + var id string if lookup != nil { // With custom lookup specified, assume that caller has // converted path to a canonical import path for use in the map. @@ -182,12 +65,13 @@ func Import(packages map[string]*types.Package, path, srcDir string, lookup func } rc = f } else { - filename, id = FindPkg(path, srcDir) + var filename string + filename, id, err = FindPkg(path, srcDir) if filename == "" { if path == "unsafe" { return types.Unsafe, nil } - return nil, fmt.Errorf("can't find import: %q", id) + return nil, err } // no need to re-import if the package was imported completely before @@ -210,57 +94,15 @@ func Import(packages map[string]*types.Package, path, srcDir string, lookup func } defer rc.Close() - var hdr string - var size int64 buf := bufio.NewReader(rc) - if hdr, size, err = FindExportData(buf); err != nil { + data, err := ReadUnified(buf) + if err != nil { + err = fmt.Errorf("import %q: %v", path, err) return } - switch hdr { - case "$$B\n": - var data []byte - data, err = io.ReadAll(buf) - if err != nil { - break - } - - // TODO(gri): allow clients of go/importer to provide a FileSet. - // Or, define a new standard go/types/gcexportdata package. - fset := token.NewFileSet() - - // Select appropriate importer. - if len(data) > 0 { - switch data[0] { - case 'v', 'c', 'd': // binary, till go1.10 - return nil, fmt.Errorf("binary (%c) import format is no longer supported", data[0]) - - case 'i': // indexed, till go1.19 - _, pkg, err := IImportData(fset, packages, data[1:], id) - return pkg, err - - case 'u': // unified, from go1.20 - _, pkg, err := UImportData(fset, packages, data[1:size], id) - return pkg, err - - default: - l := len(data) - if l > 10 { - l = 10 - } - return nil, fmt.Errorf("unexpected export data with prefix %q for path %s", string(data[:l]), id) - } - } - - default: - err = fmt.Errorf("unknown export data header: %q", hdr) - } + // unified: emitted by cmd/compile since go1.20. + _, pkg, err = UImportData(fset, packages, data, id) return } - -type byPath []*types.Package - -func (a byPath) Len() int { return len(a) } -func (a byPath) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a byPath) Less(i, j int) bool { return a[i].Path() < a[j].Path() } diff --git a/vendor/golang.org/x/tools/internal/gcimporter/iexport.go b/vendor/golang.org/x/tools/internal/gcimporter/iexport.go index deeb67f3..7dfc31a3 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/iexport.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/iexport.go @@ -2,9 +2,227 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Indexed binary package export. -// This file was derived from $GOROOT/src/cmd/compile/internal/gc/iexport.go; -// see that file for specification of the format. +// Indexed package export. +// +// The indexed export data format is an evolution of the previous +// binary export data format. Its chief contribution is introducing an +// index table, which allows efficient random access of individual +// declarations and inline function bodies. In turn, this allows +// avoiding unnecessary work for compilation units that import large +// packages. +// +// +// The top-level data format is structured as: +// +// Header struct { +// Tag byte // 'i' +// Version uvarint +// StringSize uvarint +// DataSize uvarint +// } +// +// Strings [StringSize]byte +// Data [DataSize]byte +// +// MainIndex []struct{ +// PkgPath stringOff +// PkgName stringOff +// PkgHeight uvarint +// +// Decls []struct{ +// Name stringOff +// Offset declOff +// } +// } +// +// Fingerprint [8]byte +// +// uvarint means a uint64 written out using uvarint encoding. +// +// []T means a uvarint followed by that many T objects. In other +// words: +// +// Len uvarint +// Elems [Len]T +// +// stringOff means a uvarint that indicates an offset within the +// Strings section. At that offset is another uvarint, followed by +// that many bytes, which form the string value. +// +// declOff means a uvarint that indicates an offset within the Data +// section where the associated declaration can be found. +// +// +// There are five kinds of declarations, distinguished by their first +// byte: +// +// type Var struct { +// Tag byte // 'V' +// Pos Pos +// Type typeOff +// } +// +// type Func struct { +// Tag byte // 'F' or 'G' +// Pos Pos +// TypeParams []typeOff // only present if Tag == 'G' +// Signature Signature +// } +// +// type Const struct { +// Tag byte // 'C' +// Pos Pos +// Value Value +// } +// +// type Type struct { +// Tag byte // 'T' or 'U' +// Pos Pos +// TypeParams []typeOff // only present if Tag == 'U' +// Underlying typeOff +// +// Methods []struct{ // omitted if Underlying is an interface type +// Pos Pos +// Name stringOff +// Recv Param +// Signature Signature +// } +// } +// +// type Alias struct { +// Tag byte // 'A' or 'B' +// Pos Pos +// TypeParams []typeOff // only present if Tag == 'B' +// Type typeOff +// } +// +// // "Automatic" declaration of each typeparam +// type TypeParam struct { +// Tag byte // 'P' +// Pos Pos +// Implicit bool +// Constraint typeOff +// } +// +// typeOff means a uvarint that either indicates a predeclared type, +// or an offset into the Data section. If the uvarint is less than +// predeclReserved, then it indicates the index into the predeclared +// types list (see predeclared in bexport.go for order). Otherwise, +// subtracting predeclReserved yields the offset of a type descriptor. +// +// Value means a type, kind, and type-specific value. See +// (*exportWriter).value for details. +// +// +// There are twelve kinds of type descriptors, distinguished by an itag: +// +// type DefinedType struct { +// Tag itag // definedType +// Name stringOff +// PkgPath stringOff +// } +// +// type PointerType struct { +// Tag itag // pointerType +// Elem typeOff +// } +// +// type SliceType struct { +// Tag itag // sliceType +// Elem typeOff +// } +// +// type ArrayType struct { +// Tag itag // arrayType +// Len uint64 +// Elem typeOff +// } +// +// type ChanType struct { +// Tag itag // chanType +// Dir uint64 // 1 RecvOnly; 2 SendOnly; 3 SendRecv +// Elem typeOff +// } +// +// type MapType struct { +// Tag itag // mapType +// Key typeOff +// Elem typeOff +// } +// +// type FuncType struct { +// Tag itag // signatureType +// PkgPath stringOff +// Signature Signature +// } +// +// type StructType struct { +// Tag itag // structType +// PkgPath stringOff +// Fields []struct { +// Pos Pos +// Name stringOff +// Type typeOff +// Embedded bool +// Note stringOff +// } +// } +// +// type InterfaceType struct { +// Tag itag // interfaceType +// PkgPath stringOff +// Embeddeds []struct { +// Pos Pos +// Type typeOff +// } +// Methods []struct { +// Pos Pos +// Name stringOff +// Signature Signature +// } +// } +// +// // Reference to a type param declaration +// type TypeParamType struct { +// Tag itag // typeParamType +// Name stringOff +// PkgPath stringOff +// } +// +// // Instantiation of a generic type (like List[T2] or List[int]) +// type InstanceType struct { +// Tag itag // instanceType +// Pos pos +// TypeArgs []typeOff +// BaseType typeOff +// } +// +// type UnionType struct { +// Tag itag // interfaceType +// Terms []struct { +// tilde bool +// Type typeOff +// } +// } +// +// +// +// type Signature struct { +// Params []Param +// Results []Param +// Variadic bool // omitted if Results is empty +// } +// +// type Param struct { +// Pos Pos +// Name stringOff +// Type typOff +// } +// +// +// Pos encodes a file:line:column triple, incorporating a simple delta +// encoding scheme within a data object. See exportWriter.pos for +// details. package gcimporter @@ -24,11 +242,30 @@ import ( "golang.org/x/tools/go/types/objectpath" "golang.org/x/tools/internal/aliases" - "golang.org/x/tools/internal/tokeninternal" ) // IExportShallow encodes "shallow" export data for the specified package. // +// For types, we use "shallow" export data. Historically, the Go +// compiler always produced a summary of the types for a given package +// that included types from other packages that it indirectly +// referenced: "deep" export data. This had the advantage that the +// compiler (and analogous tools such as gopls) need only load one +// file per direct import. However, it meant that the files tended to +// get larger based on the level of the package in the import +// graph. For example, higher-level packages in the kubernetes module +// have over 1MB of "deep" export data, even when they have almost no +// content of their own, merely because they mention a major type that +// references many others. In pathological cases the export data was +// 300x larger than the source for a package due to this quadratic +// growth. +// +// "Shallow" export data means that the serialized types describe only +// a single package. If those types mention types from other packages, +// the type checker may need to request additional packages beyond +// just the direct imports. Type information for the entire transitive +// closure of imports is provided (lazily) by the DAG. +// // No promises are made about the encoding other than that it can be decoded by // the same version of IIExportShallow. If you plan to save export data in the // file system, be sure to include a cryptographic digest of the executable in @@ -51,8 +288,8 @@ func IExportShallow(fset *token.FileSet, pkg *types.Package, reportf ReportFunc) } // IImportShallow decodes "shallow" types.Package data encoded by -// IExportShallow in the same executable. This function cannot import data from -// cmd/compile or gcexportdata.Write. +// [IExportShallow] in the same executable. This function cannot import data +// from cmd/compile or gcexportdata.Write. // // The importer calls getPackages to obtain package symbols for all // packages mentioned in the export data, including the one being @@ -223,7 +460,7 @@ func (p *iexporter) encodeFile(w *intWriter, file *token.File, needed []uint64) // Sort the set of needed offsets. Duplicates are harmless. sort.Slice(needed, func(i, j int) bool { return needed[i] < needed[j] }) - lines := tokeninternal.GetLines(file) // byte offset of each line start + lines := file.Lines() // byte offset of each line start w.uint64(uint64(len(lines))) // Rather than record the entire array of line start offsets, @@ -507,13 +744,13 @@ func (p *iexporter) doDecl(obj types.Object) { case *types.TypeName: t := obj.Type() - if tparam, ok := aliases.Unalias(t).(*types.TypeParam); ok { + if tparam, ok := types.Unalias(t).(*types.TypeParam); ok { w.tag(typeParamTag) w.pos(obj.Pos()) constraint := tparam.Constraint() if p.version >= iexportVersionGo1_18 { implicit := false - if iface, _ := aliases.Unalias(constraint).(*types.Interface); iface != nil { + if iface, _ := types.Unalias(constraint).(*types.Interface); iface != nil { implicit = iface.IsImplicit() } w.bool(implicit) @@ -523,9 +760,22 @@ func (p *iexporter) doDecl(obj types.Object) { } if obj.IsAlias() { - w.tag(aliasTag) + alias, materialized := t.(*types.Alias) // may fail when aliases are not enabled + + var tparams *types.TypeParamList + if materialized { + tparams = aliases.TypeParams(alias) + } + if tparams.Len() == 0 { + w.tag(aliasTag) + } else { + w.tag(genericAliasTag) + } w.pos(obj.Pos()) - if alias, ok := t.(*aliases.Alias); ok { + if tparams.Len() > 0 { + w.tparamList(obj.Name(), tparams, obj.Pkg()) + } + if materialized { // Preserve materialized aliases, // even of non-exported types. t = aliases.Rhs(alias) @@ -744,8 +994,14 @@ func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { }() } switch t := t.(type) { - case *aliases.Alias: - // TODO(adonovan): support parameterized aliases, following *types.Named. + case *types.Alias: + if targs := aliases.TypeArgs(t); targs.Len() > 0 { + w.startType(instanceType) + w.pos(t.Obj().Pos()) + w.typeList(targs, pkg) + w.typ(aliases.Origin(t), pkg) + return + } w.startType(aliasType) w.qualifiedType(t.Obj()) @@ -854,7 +1110,7 @@ func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { for i := 0; i < n; i++ { ft := t.EmbeddedType(i) tPkg := pkg - if named, _ := aliases.Unalias(ft).(*types.Named); named != nil { + if named, _ := types.Unalias(ft).(*types.Named); named != nil { w.pos(named.Obj().Pos()) } else { w.pos(token.NoPos) diff --git a/vendor/golang.org/x/tools/internal/gcimporter/iimport.go b/vendor/golang.org/x/tools/internal/gcimporter/iimport.go index 136aa036..12943927 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/iimport.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/iimport.go @@ -3,9 +3,7 @@ // license that can be found in the LICENSE file. // Indexed package import. -// See cmd/compile/internal/gc/iexport.go for the export data format. - -// This file is a copy of $GOROOT/src/go/internal/gcimporter/iimport.go. +// See iexport.go for the export data format. package gcimporter @@ -53,6 +51,7 @@ const ( iexportVersionPosCol = 1 iexportVersionGo1_18 = 2 iexportVersionGenerics = 2 + iexportVersion = iexportVersionGenerics iexportVersionCurrent = 2 ) @@ -540,7 +539,7 @@ func canReuse(def *types.Named, rhs types.Type) bool { if def == nil { return true } - iface, _ := aliases.Unalias(rhs).(*types.Interface) + iface, _ := types.Unalias(rhs).(*types.Interface) if iface == nil { return true } @@ -557,19 +556,28 @@ type importReader struct { prevColumn int64 } +// markBlack is redefined in iimport_go123.go, to work around golang/go#69912. +// +// If TypeNames are not marked black (in the sense of go/types cycle +// detection), they may be mutated when dot-imported. Fix this by punching a +// hole through the type, when compiling with Go 1.23. (The bug has been fixed +// for 1.24, but the fix was not worth back-porting). +var markBlack = func(name *types.TypeName) {} + func (r *importReader) obj(name string) { tag := r.byte() pos := r.pos() switch tag { - case aliasTag: + case aliasTag, genericAliasTag: + var tparams []*types.TypeParam + if tag == genericAliasTag { + tparams = r.tparamList() + } typ := r.typ() - // TODO(adonovan): support generic aliases: - // if tag == genericAliasTag { - // tparams := r.tparamList() - // alias.SetTypeParams(tparams) - // } - r.declare(aliases.NewAlias(r.p.aliases, pos, r.currPkg, name, typ)) + obj := aliases.NewAlias(r.p.aliases, pos, r.currPkg, name, typ, tparams) + markBlack(obj) // workaround for golang/go#69912 + r.declare(obj) case constTag: typ, val := r.value() @@ -589,6 +597,9 @@ func (r *importReader) obj(name string) { // declaration before recursing. obj := types.NewTypeName(pos, r.currPkg, name, nil) named := types.NewNamed(obj, nil, nil) + + markBlack(obj) // workaround for golang/go#69912 + // Declare obj before calling r.tparamList, so the new type name is recognized // if used in the constraint of one of its own typeparams (see #48280). r.declare(obj) @@ -615,7 +626,7 @@ func (r *importReader) obj(name string) { if targs.Len() > 0 { rparams = make([]*types.TypeParam, targs.Len()) for i := range rparams { - rparams[i] = aliases.Unalias(targs.At(i)).(*types.TypeParam) + rparams[i] = types.Unalias(targs.At(i)).(*types.TypeParam) } } msig := r.signature(recv, rparams, nil) @@ -645,7 +656,7 @@ func (r *importReader) obj(name string) { } constraint := r.typ() if implicit { - iface, _ := aliases.Unalias(constraint).(*types.Interface) + iface, _ := types.Unalias(constraint).(*types.Interface) if iface == nil { errorf("non-interface constraint marked implicit") } @@ -660,7 +671,9 @@ func (r *importReader) obj(name string) { case varTag: typ := r.typ() - r.declare(types.NewVar(pos, r.currPkg, name, typ)) + v := types.NewVar(pos, r.currPkg, name, typ) + typesinternal.SetVarKind(v, typesinternal.PackageVar) + r.declare(v) default: errorf("unexpected tag: %v", tag) @@ -852,7 +865,7 @@ func (r *importReader) typ() types.Type { } func isInterface(t types.Type) bool { - _, ok := aliases.Unalias(t).(*types.Interface) + _, ok := types.Unalias(t).(*types.Interface) return ok } @@ -862,7 +875,7 @@ func (r *importReader) string() string { return r.p.stringAt(r.uint64()) } func (r *importReader) doType(base *types.Named) (res types.Type) { k := r.kind() if debug { - r.p.trace("importing type %d (base: %s)", k, base) + r.p.trace("importing type %d (base: %v)", k, base) r.p.indent++ defer func() { r.p.indent-- @@ -959,7 +972,7 @@ func (r *importReader) doType(base *types.Named) (res types.Type) { methods[i] = method } - typ := newInterface(methods, embeddeds) + typ := types.NewInterfaceType(methods, embeddeds) r.p.interfaceList = append(r.p.interfaceList, typ) return typ @@ -1051,7 +1064,7 @@ func (r *importReader) tparamList() []*types.TypeParam { for i := range xs { // Note: the standard library importer is tolerant of nil types here, // though would panic in SetTypeParams. - xs[i] = aliases.Unalias(r.typ()).(*types.TypeParam) + xs[i] = types.Unalias(r.typ()).(*types.TypeParam) } return xs } @@ -1098,3 +1111,9 @@ func (r *importReader) byte() byte { } return x } + +type byPath []*types.Package + +func (a byPath) Len() int { return len(a) } +func (a byPath) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a byPath) Less(i, j int) bool { return a[i].Path() < a[j].Path() } diff --git a/vendor/golang.org/x/tools/internal/gcimporter/iimport_go122.go b/vendor/golang.org/x/tools/internal/gcimporter/iimport_go122.go new file mode 100644 index 00000000..7586bfac --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gcimporter/iimport_go122.go @@ -0,0 +1,53 @@ +// Copyright 2024 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. + +//go:build go1.22 && !go1.24 + +package gcimporter + +import ( + "go/token" + "go/types" + "unsafe" +) + +// TODO(rfindley): delete this workaround once go1.24 is assured. + +func init() { + // Update markBlack so that it correctly sets the color + // of imported TypeNames. + // + // See the doc comment for markBlack for details. + + type color uint32 + const ( + white color = iota + black + grey + ) + type object struct { + _ *types.Scope + _ token.Pos + _ *types.Package + _ string + _ types.Type + _ uint32 + color_ color + _ token.Pos + } + type typeName struct { + object + } + + // If the size of types.TypeName changes, this will fail to compile. + const delta = int64(unsafe.Sizeof(typeName{})) - int64(unsafe.Sizeof(types.TypeName{})) + var _ [-delta * delta]int + + markBlack = func(obj *types.TypeName) { + type uP = unsafe.Pointer + var ptr *typeName + *(*uP)(uP(&ptr)) = uP(obj) + ptr.color_ = black + } +} diff --git a/vendor/golang.org/x/tools/internal/gcimporter/newInterface10.go b/vendor/golang.org/x/tools/internal/gcimporter/newInterface10.go deleted file mode 100644 index 8b163e3d..00000000 --- a/vendor/golang.org/x/tools/internal/gcimporter/newInterface10.go +++ /dev/null @@ -1,22 +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. - -//go:build !go1.11 -// +build !go1.11 - -package gcimporter - -import "go/types" - -func newInterface(methods []*types.Func, embeddeds []types.Type) *types.Interface { - named := make([]*types.Named, len(embeddeds)) - for i, e := range embeddeds { - var ok bool - named[i], ok = e.(*types.Named) - if !ok { - panic("embedding of non-defined interfaces in interfaces is not supported before Go 1.11") - } - } - return types.NewInterface(methods, named) -} diff --git a/vendor/golang.org/x/tools/internal/gcimporter/newInterface11.go b/vendor/golang.org/x/tools/internal/gcimporter/newInterface11.go deleted file mode 100644 index 49984f40..00000000 --- a/vendor/golang.org/x/tools/internal/gcimporter/newInterface11.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. - -//go:build go1.11 -// +build go1.11 - -package gcimporter - -import "go/types" - -func newInterface(methods []*types.Func, embeddeds []types.Type) *types.Interface { - return types.NewInterfaceType(methods, embeddeds) -} diff --git a/vendor/golang.org/x/tools/internal/gcimporter/predeclared.go b/vendor/golang.org/x/tools/internal/gcimporter/predeclared.go new file mode 100644 index 00000000..907c8557 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gcimporter/predeclared.go @@ -0,0 +1,91 @@ +// Copyright 2024 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 gcimporter + +import ( + "go/types" + "sync" +) + +// predecl is a cache for the predeclared types in types.Universe. +// +// Cache a distinct result based on the runtime value of any. +// The pointer value of the any type varies based on GODEBUG settings. +var predeclMu sync.Mutex +var predecl map[types.Type][]types.Type + +func predeclared() []types.Type { + anyt := types.Universe.Lookup("any").Type() + + predeclMu.Lock() + defer predeclMu.Unlock() + + if pre, ok := predecl[anyt]; ok { + return pre + } + + if predecl == nil { + predecl = make(map[types.Type][]types.Type) + } + + decls := []types.Type{ // basic types + types.Typ[types.Bool], + types.Typ[types.Int], + types.Typ[types.Int8], + types.Typ[types.Int16], + types.Typ[types.Int32], + types.Typ[types.Int64], + types.Typ[types.Uint], + types.Typ[types.Uint8], + types.Typ[types.Uint16], + types.Typ[types.Uint32], + types.Typ[types.Uint64], + types.Typ[types.Uintptr], + types.Typ[types.Float32], + types.Typ[types.Float64], + types.Typ[types.Complex64], + types.Typ[types.Complex128], + types.Typ[types.String], + + // basic type aliases + types.Universe.Lookup("byte").Type(), + types.Universe.Lookup("rune").Type(), + + // error + types.Universe.Lookup("error").Type(), + + // untyped types + types.Typ[types.UntypedBool], + types.Typ[types.UntypedInt], + types.Typ[types.UntypedRune], + types.Typ[types.UntypedFloat], + types.Typ[types.UntypedComplex], + types.Typ[types.UntypedString], + types.Typ[types.UntypedNil], + + // package unsafe + types.Typ[types.UnsafePointer], + + // invalid type + types.Typ[types.Invalid], // only appears in packages with errors + + // used internally by gc; never used by this package or in .a files + anyType{}, + + // comparable + types.Universe.Lookup("comparable").Type(), + + // any + anyt, + } + + predecl[anyt] = decls + return decls +} + +type anyType struct{} + +func (t anyType) Underlying() types.Type { return t } +func (t anyType) String() string { return "any" } diff --git a/vendor/golang.org/x/tools/internal/gcimporter/support.go b/vendor/golang.org/x/tools/internal/gcimporter/support.go new file mode 100644 index 00000000..4af810dc --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gcimporter/support.go @@ -0,0 +1,30 @@ +// Copyright 2024 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 gcimporter + +import ( + "bufio" + "io" + "strconv" + "strings" +) + +// Copy of $GOROOT/src/cmd/internal/archive.ReadHeader. +func readArchiveHeader(b *bufio.Reader, name string) int { + // architecture-independent object file output + const HeaderSize = 60 + + var buf [HeaderSize]byte + if _, err := io.ReadFull(b, buf[:]); err != nil { + return -1 + } + aname := strings.Trim(string(buf[0:16]), " ") + if !strings.HasPrefix(aname, name) { + return -1 + } + asize := strings.Trim(string(buf[48:58]), " ") + i, _ := strconv.Atoi(asize) + return i +} diff --git a/vendor/golang.org/x/tools/internal/gcimporter/support_go118.go b/vendor/golang.org/x/tools/internal/gcimporter/support_go118.go deleted file mode 100644 index 0cd3b91b..00000000 --- a/vendor/golang.org/x/tools/internal/gcimporter/support_go118.go +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2021 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 gcimporter - -import "go/types" - -const iexportVersion = iexportVersionGenerics - -// additionalPredeclared returns additional predeclared types in go.1.18. -func additionalPredeclared() []types.Type { - return []types.Type{ - // comparable - types.Universe.Lookup("comparable").Type(), - - // any - types.Universe.Lookup("any").Type(), - } -} - -// See cmd/compile/internal/types.SplitVargenSuffix. -func splitVargenSuffix(name string) (base, suffix string) { - i := len(name) - for i > 0 && name[i-1] >= '0' && name[i-1] <= '9' { - i-- - } - const dot = "·" - if i >= len(dot) && name[i-len(dot):i] == dot { - i -= len(dot) - return name[:i], name[i:] - } - return name, "" -} diff --git a/vendor/golang.org/x/tools/internal/gcimporter/unified_no.go b/vendor/golang.org/x/tools/internal/gcimporter/unified_no.go deleted file mode 100644 index 38b624ca..00000000 --- a/vendor/golang.org/x/tools/internal/gcimporter/unified_no.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2022 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. - -//go:build !goexperiment.unified -// +build !goexperiment.unified - -package gcimporter - -const unifiedIR = false diff --git a/vendor/golang.org/x/tools/internal/gcimporter/unified_yes.go b/vendor/golang.org/x/tools/internal/gcimporter/unified_yes.go deleted file mode 100644 index b5118d0b..00000000 --- a/vendor/golang.org/x/tools/internal/gcimporter/unified_yes.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2022 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. - -//go:build goexperiment.unified -// +build goexperiment.unified - -package gcimporter - -const unifiedIR = true diff --git a/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go b/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go index 2c077068..522287d1 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go @@ -11,10 +11,10 @@ import ( "go/token" "go/types" "sort" - "strings" "golang.org/x/tools/internal/aliases" "golang.org/x/tools/internal/pkgbits" + "golang.org/x/tools/internal/typesinternal" ) // A pkgReader holds the shared state for reading a unified IR package @@ -52,8 +52,7 @@ func (pr *pkgReader) later(fn func()) { // See cmd/compile/internal/noder.derivedInfo. type derivedInfo struct { - idx pkgbits.Index - needed bool + idx pkgbits.Index } // See cmd/compile/internal/noder.typeInfo. @@ -72,7 +71,6 @@ func UImportData(fset *token.FileSet, imports map[string]*types.Package, data [] } s := string(data) - s = s[:strings.LastIndex(s, "\n$$\n")] input := pkgbits.NewPkgDecoder(path, s) pkg = readUnifiedPackage(fset, nil, imports, input) return @@ -110,13 +108,17 @@ func readUnifiedPackage(fset *token.FileSet, ctxt *types.Context, imports map[st r := pr.newReader(pkgbits.RelocMeta, pkgbits.PublicRootIdx, pkgbits.SyncPublic) pkg := r.pkg() - r.Bool() // has init + if r.Version().Has(pkgbits.HasInit) { + r.Bool() + } for i, n := 0, r.Len(); i < n; i++ { // As if r.obj(), but avoiding the Scope.Lookup call, // to avoid eager loading of imports. r.Sync(pkgbits.SyncObject) - assert(!r.Bool()) + if r.Version().Has(pkgbits.DerivedFuncInstance) { + assert(!r.Bool()) + } r.p.objIdx(r.Reloc(pkgbits.RelocObj)) assert(r.Len() == 0) } @@ -165,7 +167,7 @@ type readerDict struct { // tparams is a slice of the constructed TypeParams for the element. tparams []*types.TypeParam - // devived is a slice of types derived from tparams, which may be + // derived is a slice of types derived from tparams, which may be // instantiated while reading the current element. derived []derivedInfo derivedTypes []types.Type // lazily instantiated from derived @@ -263,7 +265,12 @@ func (pr *pkgReader) pkgIdx(idx pkgbits.Index) *types.Package { func (r *reader) doPkg() *types.Package { path := r.String() switch path { - case "": + // cmd/compile emits path="main" for main packages because + // that's the linker symbol prefix it used; but we need + // the package's path as it would be reported by go list, + // hence "main" below. + // See test at go/packages.TestMainPackagePathInModeTypes. + case "", "main": path = r.p.PkgPath() case "builtin": return nil // universe @@ -471,7 +478,9 @@ func (r *reader) param() *types.Var { func (r *reader) obj() (types.Object, []types.Type) { r.Sync(pkgbits.SyncObject) - assert(!r.Bool()) + if r.Version().Has(pkgbits.DerivedFuncInstance) { + assert(!r.Bool()) + } pkg, name := r.p.objIdx(r.Reloc(pkgbits.RelocObj)) obj := pkgScope(pkg).Lookup(name) @@ -525,8 +534,12 @@ func (pr *pkgReader) objIdx(idx pkgbits.Index) (*types.Package, string) { case pkgbits.ObjAlias: pos := r.pos() + var tparams []*types.TypeParam + if r.Version().Has(pkgbits.AliasTypeParamNames) { + tparams = r.typeParamNames() + } typ := r.typ() - declare(aliases.NewAlias(r.p.aliases, pos, objPkg, objName, typ)) + declare(aliases.NewAlias(r.p.aliases, pos, objPkg, objName, typ, tparams)) case pkgbits.ObjConst: pos := r.pos() @@ -553,13 +566,14 @@ func (pr *pkgReader) objIdx(idx pkgbits.Index) (*types.Package, string) { // If the underlying type is an interface, we need to // duplicate its methods so we can replace the receiver // parameter's type (#49906). - if iface, ok := aliases.Unalias(underlying).(*types.Interface); ok && iface.NumExplicitMethods() != 0 { + if iface, ok := types.Unalias(underlying).(*types.Interface); ok && iface.NumExplicitMethods() != 0 { methods := make([]*types.Func, iface.NumExplicitMethods()) for i := range methods { fn := iface.ExplicitMethod(i) sig := fn.Type().(*types.Signature) recv := types.NewVar(fn.Pos(), fn.Pkg(), "", named) + typesinternal.SetVarKind(recv, typesinternal.RecvVar) methods[i] = types.NewFunc(fn.Pos(), fn.Pkg(), fn.Name(), types.NewSignature(recv, sig.Params(), sig.Results(), sig.Variadic())) } @@ -607,7 +621,9 @@ func (pr *pkgReader) objIdx(idx pkgbits.Index) (*types.Package, string) { case pkgbits.ObjVar: pos := r.pos() typ := r.typ() - declare(types.NewVar(pos, objPkg, objName, typ)) + v := types.NewVar(pos, objPkg, objName, typ) + typesinternal.SetVarKind(v, typesinternal.PackageVar) + declare(v) } } @@ -632,7 +648,10 @@ func (pr *pkgReader) objDictIdx(idx pkgbits.Index) *readerDict { dict.derived = make([]derivedInfo, r.Len()) dict.derivedTypes = make([]types.Type, len(dict.derived)) for i := range dict.derived { - dict.derived[i] = derivedInfo{r.Reloc(pkgbits.RelocType), r.Bool()} + dict.derived[i] = derivedInfo{idx: r.Reloc(pkgbits.RelocType)} + if r.Version().Has(pkgbits.DerivedInfoNeeded) { + assert(!r.Bool()) + } } pr.retireReader(r) @@ -726,3 +745,17 @@ func pkgScope(pkg *types.Package) *types.Scope { } return types.Universe } + +// See cmd/compile/internal/types.SplitVargenSuffix. +func splitVargenSuffix(name string) (base, suffix string) { + i := len(name) + for i > 0 && name[i-1] >= '0' && name[i-1] <= '9' { + i-- + } + const dot = "·" + if i >= len(dot) && name[i-len(dot):i] == dot { + i -= len(dot) + return name[:i], name[i:] + } + return name, "" +} diff --git a/vendor/golang.org/x/tools/internal/gocommand/invoke.go b/vendor/golang.org/x/tools/internal/gocommand/invoke.go index eb7a8282..7ea90134 100644 --- a/vendor/golang.org/x/tools/internal/gocommand/invoke.go +++ b/vendor/golang.org/x/tools/internal/gocommand/invoke.go @@ -8,13 +8,14 @@ package gocommand import ( "bytes" "context" + "encoding/json" "errors" "fmt" "io" "log" "os" "os/exec" - "reflect" + "path/filepath" "regexp" "runtime" "strconv" @@ -27,7 +28,7 @@ import ( "golang.org/x/tools/internal/event/label" ) -// An Runner will run go command invocations and serialize +// A Runner will run go command invocations and serialize // them if it sees a concurrency error. type Runner struct { // once guards the runner initialization. @@ -167,7 +168,9 @@ type Invocation struct { // TODO(rfindley): remove, in favor of Args. ModFile string - // If Overlay is set, the go command is invoked with -overlay=Overlay. + // Overlay is the name of the JSON overlay file that describes + // unsaved editor buffers; see [WriteOverlays]. + // If set, the go command is invoked with -overlay=Overlay. // TODO(rfindley): remove, in favor of Args. Overlay string @@ -176,7 +179,7 @@ type Invocation struct { CleanEnv bool Env []string WorkingDir string - Logf func(format string, args ...interface{}) + Logf func(format string, args ...any) } // Postcondition: both error results have same nilness. @@ -196,12 +199,14 @@ func (i *Invocation) runWithFriendlyError(ctx context.Context, stdout, stderr io return } -func (i *Invocation) run(ctx context.Context, stdout, stderr io.Writer) error { - log := i.Logf - if log == nil { - log = func(string, ...interface{}) {} +// logf logs if i.Logf is non-nil. +func (i *Invocation) logf(format string, args ...any) { + if i.Logf != nil { + i.Logf(format, args...) } +} +func (i *Invocation) run(ctx context.Context, stdout, stderr io.Writer) error { goArgs := []string{i.Verb} appendModFile := func() { @@ -244,23 +249,23 @@ func (i *Invocation) run(ctx context.Context, stdout, stderr io.Writer) error { cmd.Stdout = stdout cmd.Stderr = stderr - // cmd.WaitDelay was added only in go1.20 (see #50436). - if waitDelay := reflect.ValueOf(cmd).Elem().FieldByName("WaitDelay"); waitDelay.IsValid() { - // https://go.dev/issue/59541: don't wait forever copying stderr - // after the command has exited. - // After CL 484741 we copy stdout manually, so we we'll stop reading that as - // soon as ctx is done. However, we also don't want to wait around forever - // for stderr. Give a much-longer-than-reasonable delay and then assume that - // something has wedged in the kernel or runtime. - waitDelay.Set(reflect.ValueOf(30 * time.Second)) - } - - // On darwin the cwd gets resolved to the real path, which breaks anything that - // expects the working directory to keep the original path, including the + // https://go.dev/issue/59541: don't wait forever copying stderr + // after the command has exited. + // After CL 484741 we copy stdout manually, so we we'll stop reading that as + // soon as ctx is done. However, we also don't want to wait around forever + // for stderr. Give a much-longer-than-reasonable delay and then assume that + // something has wedged in the kernel or runtime. + cmd.WaitDelay = 30 * time.Second + + // The cwd gets resolved to the real path. On Darwin, where + // /tmp is a symlink, this breaks anything that expects the + // working directory to keep the original path, including the // go command when dealing with modules. - // The Go stdlib has a special feature where if the cwd and the PWD are the - // same node then it trusts the PWD, so by setting it in the env for the child - // process we fix up all the paths returned by the go command. + // + // os.Getwd has a special feature where if the cwd and the PWD + // are the same node then it trusts the PWD, so by setting it + // in the env for the child process we fix up all the paths + // returned by the go command. if !i.CleanEnv { cmd.Env = os.Environ() } @@ -270,7 +275,12 @@ func (i *Invocation) run(ctx context.Context, stdout, stderr io.Writer) error { cmd.Dir = i.WorkingDir } - defer func(start time.Time) { log("%s for %v", time.Since(start), cmdDebugStr(cmd)) }(time.Now()) + debugStr := cmdDebugStr(cmd) + i.logf("starting %v", debugStr) + start := time.Now() + defer func() { + i.logf("%s for %v", time.Since(start), debugStr) + }() return runCmdContext(ctx, cmd) } @@ -351,6 +361,7 @@ func runCmdContext(ctx context.Context, cmd *exec.Cmd) (err error) { } } + startTime := time.Now() err = cmd.Start() if stdoutW != nil { // The child process has inherited the pipe file, @@ -377,7 +388,9 @@ func runCmdContext(ctx context.Context, cmd *exec.Cmd) (err error) { case err := <-resChan: return err case <-timer.C: - HandleHangingGoCommand(cmd.Process) + // HandleHangingGoCommand terminates this process. + // Pass off resChan in case we can collect the command error. + handleHangingGoCommand(startTime, cmd, resChan) case <-ctx.Done(): } } else { @@ -402,8 +415,6 @@ func runCmdContext(ctx context.Context, cmd *exec.Cmd) (err error) { } // Didn't shut down in response to interrupt. Kill it hard. - // TODO(rfindley): per advice from bcmills@, it may be better to send SIGQUIT - // on certain platforms, such as unix. if err := cmd.Process.Kill(); err != nil && !errors.Is(err, os.ErrProcessDone) && debug { log.Printf("error killing the Go command: %v", err) } @@ -411,15 +422,17 @@ func runCmdContext(ctx context.Context, cmd *exec.Cmd) (err error) { return <-resChan } -func HandleHangingGoCommand(proc *os.Process) { +// handleHangingGoCommand outputs debugging information to help diagnose the +// cause of a hanging Go command, and then exits with log.Fatalf. +func handleHangingGoCommand(start time.Time, cmd *exec.Cmd, resChan chan error) { switch runtime.GOOS { - case "linux", "darwin", "freebsd", "netbsd": + case "linux", "darwin", "freebsd", "netbsd", "openbsd": fmt.Fprintln(os.Stderr, `DETECTED A HANGING GO COMMAND -The gopls test runner has detected a hanging go command. In order to debug -this, the output of ps and lsof/fstat is printed below. + The gopls test runner has detected a hanging go command. In order to debug + this, the output of ps and lsof/fstat is printed below. -See golang/go#54461 for more details.`) + See golang/go#54461 for more details.`) fmt.Fprintln(os.Stderr, "\nps axo ppid,pid,command:") fmt.Fprintln(os.Stderr, "-------------------------") @@ -427,7 +440,7 @@ See golang/go#54461 for more details.`) psCmd.Stdout = os.Stderr psCmd.Stderr = os.Stderr if err := psCmd.Run(); err != nil { - panic(fmt.Sprintf("running ps: %v", err)) + log.Printf("Handling hanging Go command: running ps: %v", err) } listFiles := "lsof" @@ -441,10 +454,24 @@ See golang/go#54461 for more details.`) listFilesCmd.Stdout = os.Stderr listFilesCmd.Stderr = os.Stderr if err := listFilesCmd.Run(); err != nil { - panic(fmt.Sprintf("running %s: %v", listFiles, err)) + log.Printf("Handling hanging Go command: running %s: %v", listFiles, err) + } + // Try to extract information about the slow go process by issuing a SIGQUIT. + if err := cmd.Process.Signal(sigStuckProcess); err == nil { + select { + case err := <-resChan: + stderr := "not a bytes.Buffer" + if buf, _ := cmd.Stderr.(*bytes.Buffer); buf != nil { + stderr = buf.String() + } + log.Printf("Quit hanging go command:\n\terr:%v\n\tstderr:\n%v\n\n", err, stderr) + case <-time.After(5 * time.Second): + } + } else { + log.Printf("Sending signal %d to hanging go command: %v", sigStuckProcess, err) } } - panic(fmt.Sprintf("detected hanging go command (pid %d): see golang/go#54461 for more details", proc.Pid)) + log.Fatalf("detected hanging go command (golang/go#54461); waited %s\n\tcommand:%s\n\tpid:%d", time.Since(start), cmd, cmd.Process.Pid) } func cmdDebugStr(cmd *exec.Cmd) string { @@ -468,3 +495,73 @@ func cmdDebugStr(cmd *exec.Cmd) string { } return fmt.Sprintf("GOROOT=%v GOPATH=%v GO111MODULE=%v GOPROXY=%v PWD=%v %v", env["GOROOT"], env["GOPATH"], env["GO111MODULE"], env["GOPROXY"], env["PWD"], strings.Join(args, " ")) } + +// WriteOverlays writes each value in the overlay (see the Overlay +// field of go/packages.Config) to a temporary file and returns the name +// of a JSON file describing the mapping that is suitable for the "go +// list -overlay" flag. +// +// On success, the caller must call the cleanup function exactly once +// when the files are no longer needed. +func WriteOverlays(overlay map[string][]byte) (filename string, cleanup func(), err error) { + // Do nothing if there are no overlays in the config. + if len(overlay) == 0 { + return "", func() {}, nil + } + + dir, err := os.MkdirTemp("", "gocommand-*") + if err != nil { + return "", nil, err + } + + // The caller must clean up this directory, + // unless this function returns an error. + // (The cleanup operand of each return + // statement below is ignored.) + defer func() { + cleanup = func() { + os.RemoveAll(dir) + } + if err != nil { + cleanup() + cleanup = nil + } + }() + + // Write each map entry to a temporary file. + overlays := make(map[string]string) + for k, v := range overlay { + // Use a unique basename for each file (001-foo.go), + // to avoid creating nested directories. + base := fmt.Sprintf("%d-%s", 1+len(overlays), filepath.Base(k)) + filename := filepath.Join(dir, base) + err := os.WriteFile(filename, v, 0666) + if err != nil { + return "", nil, err + } + overlays[k] = filename + } + + // Write the JSON overlay file that maps logical file names to temp files. + // + // OverlayJSON is the format overlay files are expected to be in. + // The Replace map maps from overlaid paths to replacement paths: + // the Go command will forward all reads trying to open + // each overlaid path to its replacement path, or consider the overlaid + // path not to exist if the replacement path is empty. + // + // From golang/go#39958. + type OverlayJSON struct { + Replace map[string]string `json:"replace,omitempty"` + } + b, err := json.Marshal(OverlayJSON{Replace: overlays}) + if err != nil { + return "", nil, err + } + filename = filepath.Join(dir, "overlay.json") + if err := os.WriteFile(filename, b, 0666); err != nil { + return "", nil, err + } + + return filename, nil, nil +} diff --git a/vendor/golang.org/x/tools/internal/gocommand/invoke_notunix.go b/vendor/golang.org/x/tools/internal/gocommand/invoke_notunix.go new file mode 100644 index 00000000..469c648e --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gocommand/invoke_notunix.go @@ -0,0 +1,13 @@ +// Copyright 2025 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. + +//go:build !unix + +package gocommand + +import "os" + +// sigStuckProcess is the signal to send to kill a hanging subprocess. +// On Unix we send SIGQUIT, but on non-Unix we only have os.Kill. +var sigStuckProcess = os.Kill diff --git a/vendor/golang.org/x/tools/internal/gocommand/invoke_unix.go b/vendor/golang.org/x/tools/internal/gocommand/invoke_unix.go new file mode 100644 index 00000000..169d37c8 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gocommand/invoke_unix.go @@ -0,0 +1,13 @@ +// Copyright 2025 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. + +//go:build unix + +package gocommand + +import "syscall" + +// Sigstuckprocess is the signal to send to kill a hanging subprocess. +// Send SIGQUIT to get a stack trace. +var sigStuckProcess = syscall.SIGQUIT diff --git a/vendor/golang.org/x/tools/internal/imports/fix.go b/vendor/golang.org/x/tools/internal/imports/fix.go index 93d49a6e..bf6b0aad 100644 --- a/vendor/golang.org/x/tools/internal/imports/fix.go +++ b/vendor/golang.org/x/tools/internal/imports/fix.go @@ -90,21 +90,12 @@ type ImportFix struct { Relevance float64 // see pkg } -// An ImportInfo represents a single import statement. -type ImportInfo struct { - ImportPath string // import path, e.g. "crypto/rand". - Name string // import name, e.g. "crand", or "" if none. -} - -// A packageInfo represents what's known about a package. -type packageInfo struct { - name string // real package name, if known. - exports map[string]bool // known exports. -} - // parseOtherFiles parses all the Go files in srcDir except filename, including // test files if filename looks like a test. -func parseOtherFiles(fset *token.FileSet, srcDir, filename string) []*ast.File { +// +// It returns an error only if ctx is cancelled. Files with parse errors are +// ignored. +func parseOtherFiles(ctx context.Context, fset *token.FileSet, srcDir, filename string) ([]*ast.File, error) { // This could use go/packages but it doesn't buy much, and it fails // with https://golang.org/issue/26296 in LoadFiles mode in some cases. considerTests := strings.HasSuffix(filename, "_test.go") @@ -112,11 +103,14 @@ func parseOtherFiles(fset *token.FileSet, srcDir, filename string) []*ast.File { fileBase := filepath.Base(filename) packageFileInfos, err := os.ReadDir(srcDir) if err != nil { - return nil + return nil, ctx.Err() } var files []*ast.File for _, fi := range packageFileInfos { + if ctx.Err() != nil { + return nil, ctx.Err() + } if fi.Name() == fileBase || !strings.HasSuffix(fi.Name(), ".go") { continue } @@ -124,7 +118,7 @@ func parseOtherFiles(fset *token.FileSet, srcDir, filename string) []*ast.File { continue } - f, err := parser.ParseFile(fset, filepath.Join(srcDir, fi.Name()), nil, 0) + f, err := parser.ParseFile(fset, filepath.Join(srcDir, fi.Name()), nil, parser.SkipObjectResolution) if err != nil { continue } @@ -132,7 +126,7 @@ func parseOtherFiles(fset *token.FileSet, srcDir, filename string) []*ast.File { files = append(files, f) } - return files + return files, ctx.Err() } // addGlobals puts the names of package vars into the provided map. @@ -155,8 +149,8 @@ func addGlobals(f *ast.File, globals map[string]bool) { // collectReferences builds a map of selector expressions, from // left hand side (X) to a set of right hand sides (Sel). -func collectReferences(f *ast.File) references { - refs := references{} +func collectReferences(f *ast.File) References { + refs := References{} var visitor visitFn visitor = func(node ast.Node) ast.Visitor { @@ -226,7 +220,7 @@ func (p *pass) findMissingImport(pkg string, syms map[string]bool) *ImportInfo { allFound := true for right := range syms { - if !pkgInfo.exports[right] { + if !pkgInfo.Exports[right] { allFound = false break } @@ -239,11 +233,6 @@ func (p *pass) findMissingImport(pkg string, syms map[string]bool) *ImportInfo { return nil } -// references is set of references found in a Go file. The first map key is the -// left hand side of a selector expression, the second key is the right hand -// side, and the value should always be true. -type references map[string]map[string]bool - // A pass contains all the inputs and state necessary to fix a file's imports. // It can be modified in some ways during use; see comments below. type pass struct { @@ -251,27 +240,29 @@ type pass struct { fset *token.FileSet // fset used to parse f and its siblings. f *ast.File // the file being fixed. srcDir string // the directory containing f. - env *ProcessEnv // the environment to use for go commands, etc. - loadRealPackageNames bool // if true, load package names from disk rather than guessing them. - otherFiles []*ast.File // sibling files. + logf func(string, ...any) + source Source // the environment to use for go commands, etc. + loadRealPackageNames bool // if true, load package names from disk rather than guessing them. + otherFiles []*ast.File // sibling files. + goroot string // Intermediate state, generated by load. existingImports map[string][]*ImportInfo - allRefs references - missingRefs references + allRefs References + missingRefs References // Inputs to fix. These can be augmented between successive fix calls. lastTry bool // indicates that this is the last call and fix should clean up as best it can. candidates []*ImportInfo // candidate imports in priority order. - knownPackages map[string]*packageInfo // information about all known packages. + knownPackages map[string]*PackageInfo // information about all known packages. } // loadPackageNames saves the package names for everything referenced by imports. -func (p *pass) loadPackageNames(imports []*ImportInfo) error { - if p.env.Logf != nil { - p.env.Logf("loading package names for %v packages", len(imports)) +func (p *pass) loadPackageNames(ctx context.Context, imports []*ImportInfo) error { + if p.logf != nil { + p.logf("loading package names for %v packages", len(imports)) defer func() { - p.env.Logf("done loading package names for %v packages", len(imports)) + p.logf("done loading package names for %v packages", len(imports)) }() } var unknown []string @@ -282,20 +273,17 @@ func (p *pass) loadPackageNames(imports []*ImportInfo) error { unknown = append(unknown, imp.ImportPath) } - resolver, err := p.env.GetResolver() - if err != nil { - return err - } - - names, err := resolver.loadPackageNames(unknown, p.srcDir) + names, err := p.source.LoadPackageNames(ctx, p.srcDir, unknown) if err != nil { return err } + // TODO(rfindley): revisit this. Why do we need to store known packages with + // no exports? The inconsistent data is confusing. for path, name := range names { - p.knownPackages[path] = &packageInfo{ - name: name, - exports: map[string]bool{}, + p.knownPackages[path] = &PackageInfo{ + Name: name, + Exports: map[string]bool{}, } } return nil @@ -323,8 +311,8 @@ func (p *pass) importIdentifier(imp *ImportInfo) string { return imp.Name } known := p.knownPackages[imp.ImportPath] - if known != nil && known.name != "" { - return withoutVersion(known.name) + if known != nil && known.Name != "" { + return withoutVersion(known.Name) } return ImportPathToAssumedName(imp.ImportPath) } @@ -332,9 +320,9 @@ func (p *pass) importIdentifier(imp *ImportInfo) string { // load reads in everything necessary to run a pass, and reports whether the // file already has all the imports it needs. It fills in p.missingRefs with the // file's missing symbols, if any, or removes unused imports if not. -func (p *pass) load() ([]*ImportFix, bool) { - p.knownPackages = map[string]*packageInfo{} - p.missingRefs = references{} +func (p *pass) load(ctx context.Context) ([]*ImportFix, bool) { + p.knownPackages = map[string]*PackageInfo{} + p.missingRefs = References{} p.existingImports = map[string][]*ImportInfo{} // Load basic information about the file in question. @@ -357,10 +345,10 @@ func (p *pass) load() ([]*ImportFix, bool) { // f's imports by the identifier they introduce. imports := collectImports(p.f) if p.loadRealPackageNames { - err := p.loadPackageNames(append(imports, p.candidates...)) + err := p.loadPackageNames(ctx, append(imports, p.candidates...)) if err != nil { - if p.env.Logf != nil { - p.env.Logf("loading package names: %v", err) + if p.logf != nil { + p.logf("loading package names: %v", err) } return nil, false } @@ -530,9 +518,10 @@ func (p *pass) assumeSiblingImportsValid() { // We have the stdlib in memory; no need to guess. rights = symbolNameSet(m) } - p.addCandidate(imp, &packageInfo{ + // TODO(rfindley): we should set package name here, for consistency. + p.addCandidate(imp, &PackageInfo{ // no name; we already know it. - exports: rights, + Exports: rights, }) } } @@ -541,14 +530,14 @@ func (p *pass) assumeSiblingImportsValid() { // addCandidate adds a candidate import to p, and merges in the information // in pkg. -func (p *pass) addCandidate(imp *ImportInfo, pkg *packageInfo) { +func (p *pass) addCandidate(imp *ImportInfo, pkg *PackageInfo) { p.candidates = append(p.candidates, imp) if existing, ok := p.knownPackages[imp.ImportPath]; ok { - if existing.name == "" { - existing.name = pkg.name + if existing.Name == "" { + existing.Name = pkg.Name } - for export := range pkg.exports { - existing.exports[export] = true + for export := range pkg.Exports { + existing.Exports[export] = true } } else { p.knownPackages[imp.ImportPath] = pkg @@ -560,6 +549,8 @@ func (p *pass) addCandidate(imp *ImportInfo, pkg *packageInfo) { // // This is declared as a variable rather than a function so goimports can // easily be extended by adding a file with an init function. +// +// DO NOT REMOVE: used internally at Google. var fixImports = fixImportsDefault func fixImportsDefault(fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) error { @@ -574,30 +565,54 @@ func fixImportsDefault(fset *token.FileSet, f *ast.File, filename string, env *P // getFixes gets the import fixes that need to be made to f in order to fix the imports. // It does not modify the ast. func getFixes(ctx context.Context, fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) ([]*ImportFix, error) { + source, err := NewProcessEnvSource(env, filename, f.Name.Name) + if err != nil { + return nil, err + } + goEnv, err := env.goEnv() + if err != nil { + return nil, err + } + return getFixesWithSource(ctx, fset, f, filename, goEnv["GOROOT"], env.logf, source) +} + +func getFixesWithSource(ctx context.Context, fset *token.FileSet, f *ast.File, filename string, goroot string, logf func(string, ...any), source Source) ([]*ImportFix, error) { + // This logic is defensively duplicated from getFixes. abs, err := filepath.Abs(filename) if err != nil { return nil, err } srcDir := filepath.Dir(abs) - if env.Logf != nil { - env.Logf("fixImports(filename=%q), abs=%q, srcDir=%q ...", filename, abs, srcDir) + + if logf != nil { + logf("fixImports(filename=%q), srcDir=%q ...", filename, abs, srcDir) } // First pass: looking only at f, and using the naive algorithm to // derive package names from import paths, see if the file is already // complete. We can't add any imports yet, because we don't know // if missing references are actually package vars. - p := &pass{fset: fset, f: f, srcDir: srcDir, env: env} - if fixes, done := p.load(); done { + p := &pass{ + fset: fset, + f: f, + srcDir: srcDir, + logf: logf, + goroot: goroot, + source: source, + } + if fixes, done := p.load(ctx); done { return fixes, nil } - otherFiles := parseOtherFiles(fset, srcDir, filename) + otherFiles, err := parseOtherFiles(ctx, fset, srcDir, filename) + if err != nil { + return nil, err + } // Second pass: add information from other files in the same package, // like their package vars and imports. p.otherFiles = otherFiles - if fixes, done := p.load(); done { + if fixes, done := p.load(ctx); done { return fixes, nil } @@ -610,10 +625,17 @@ func getFixes(ctx context.Context, fset *token.FileSet, f *ast.File, filename st // Third pass: get real package names where we had previously used // the naive algorithm. - p = &pass{fset: fset, f: f, srcDir: srcDir, env: env} + p = &pass{ + fset: fset, + f: f, + srcDir: srcDir, + logf: logf, + goroot: goroot, + source: p.source, // safe to reuse, as it's just a wrapper around env + } p.loadRealPackageNames = true p.otherFiles = otherFiles - if fixes, done := p.load(); done { + if fixes, done := p.load(ctx); done { return fixes, nil } @@ -758,7 +780,7 @@ func GetAllCandidates(ctx context.Context, wrapped func(ImportFix), searchPrefix return true }, dirFound: func(pkg *pkg) bool { - if !canUse(filename, pkg.dir) { + if !CanUse(filename, pkg.dir) { return false } // Try the assumed package name first, then a simpler path match @@ -793,7 +815,7 @@ func GetImportPaths(ctx context.Context, wrapped func(ImportFix), searchPrefix, return true }, dirFound: func(pkg *pkg) bool { - if !canUse(filename, pkg.dir) { + if !CanUse(filename, pkg.dir) { return false } return strings.HasPrefix(pkg.importPathShort, searchPrefix) @@ -827,7 +849,7 @@ func GetPackageExports(ctx context.Context, wrapped func(PackageExport), searchP return true }, dirFound: func(pkg *pkg) bool { - return pkgIsCandidate(filename, references{searchPkg: nil}, pkg) + return pkgIsCandidate(filename, References{searchPkg: nil}, pkg) }, packageNameLoaded: func(pkg *pkg) bool { return pkg.packageName == searchPkg @@ -905,7 +927,7 @@ type ProcessEnv struct { WorkingDir string // If Logf is non-nil, debug logging is enabled through this function. - Logf func(format string, args ...interface{}) + Logf func(format string, args ...any) // If set, ModCache holds a shared cache of directory info to use across // multiple ProcessEnvs. @@ -1010,16 +1032,26 @@ func (e *ProcessEnv) GetResolver() (Resolver, error) { // already know the view type. if len(e.Env["GOMOD"]) == 0 && len(e.Env["GOWORK"]) == 0 { e.resolver = newGopathResolver(e) + e.logf("created gopath resolver") } else if r, err := newModuleResolver(e, e.ModCache); err != nil { e.resolverErr = err + e.logf("failed to create module resolver: %v", err) } else { e.resolver = Resolver(r) + e.logf("created module resolver") } } return e.resolver, e.resolverErr } +// logf logs if e.Logf is non-nil. +func (e *ProcessEnv) logf(format string, args ...any) { + if e.Logf != nil { + e.Logf(format, args...) + } +} + // buildContext returns the build.Context to use for matching files. // // TODO(rfindley): support dynamic GOOS, GOARCH here, when doing cross-platform @@ -1068,11 +1100,7 @@ func (e *ProcessEnv) invokeGo(ctx context.Context, verb string, args ...string) return e.GocmdRunner.Run(ctx, inv) } -func addStdlibCandidates(pass *pass, refs references) error { - goenv, err := pass.env.goEnv() - if err != nil { - return err - } +func addStdlibCandidates(pass *pass, refs References) error { localbase := func(nm string) string { ans := path.Base(nm) if ans[0] == 'v' { @@ -1087,13 +1115,13 @@ func addStdlibCandidates(pass *pass, refs references) error { } add := func(pkg string) { // Prevent self-imports. - if path.Base(pkg) == pass.f.Name.Name && filepath.Join(goenv["GOROOT"], "src", pkg) == pass.srcDir { + if path.Base(pkg) == pass.f.Name.Name && filepath.Join(pass.goroot, "src", pkg) == pass.srcDir { return } exports := symbolNameSet(stdlib.PackageSymbols[pkg]) pass.addCandidate( &ImportInfo{ImportPath: pkg}, - &packageInfo{name: localbase(pkg), exports: exports}) + &PackageInfo{Name: localbase(pkg), Exports: exports}) } for left := range refs { if left == "rand" { @@ -1104,6 +1132,9 @@ func addStdlibCandidates(pass *pass, refs references) error { // but we have no way of figuring out what the user is using // TODO: investigate using the toolchain version to disambiguate in the stdlib add("math/rand/v2") + // math/rand has an overlapping API + // TestIssue66407 fails without this + add("math/rand") continue } for importPath := range stdlib.PackageSymbols { @@ -1123,8 +1154,8 @@ type Resolver interface { // scan works with callback to search for packages. See scanCallback for details. scan(ctx context.Context, callback *scanCallback) error - // loadExports returns the set of exported symbols in the package at dir. - // loadExports may be called concurrently. + // loadExports returns the package name and set of exported symbols in the + // package at dir. loadExports may be called concurrently. loadExports(ctx context.Context, pkg *pkg, includeTest bool) (string, []stdlib.Symbol, error) // scoreImportPath returns the relevance for an import path. @@ -1157,101 +1188,22 @@ type scanCallback struct { exportsLoaded func(pkg *pkg, exports []stdlib.Symbol) } -func addExternalCandidates(ctx context.Context, pass *pass, refs references, filename string) error { +func addExternalCandidates(ctx context.Context, pass *pass, refs References, filename string) error { ctx, done := event.Start(ctx, "imports.addExternalCandidates") defer done() - var mu sync.Mutex - found := make(map[string][]pkgDistance) - callback := &scanCallback{ - rootFound: func(gopathwalk.Root) bool { - return true // We want everything. - }, - dirFound: func(pkg *pkg) bool { - return pkgIsCandidate(filename, refs, pkg) - }, - packageNameLoaded: func(pkg *pkg) bool { - if _, want := refs[pkg.packageName]; !want { - return false - } - if pkg.dir == pass.srcDir && pass.f.Name.Name == pkg.packageName { - // The candidate is in the same directory and has the - // same package name. Don't try to import ourselves. - return false - } - if !canUse(filename, pkg.dir) { - return false - } - mu.Lock() - defer mu.Unlock() - found[pkg.packageName] = append(found[pkg.packageName], pkgDistance{pkg, distance(pass.srcDir, pkg.dir)}) - return false // We'll do our own loading after we sort. - }, - } - resolver, err := pass.env.GetResolver() + results, err := pass.source.ResolveReferences(ctx, filename, refs) if err != nil { return err } - if err = resolver.scan(context.Background(), callback); err != nil { - return err - } - - // Search for imports matching potential package references. - type result struct { - imp *ImportInfo - pkg *packageInfo - } - results := make(chan result, len(refs)) - ctx, cancel := context.WithCancel(context.TODO()) - var wg sync.WaitGroup - defer func() { - cancel() - wg.Wait() - }() - var ( - firstErr error - firstErrOnce sync.Once - ) - for pkgName, symbols := range refs { - wg.Add(1) - go func(pkgName string, symbols map[string]bool) { - defer wg.Done() - - found, err := findImport(ctx, pass, found[pkgName], pkgName, symbols) - - if err != nil { - firstErrOnce.Do(func() { - firstErr = err - cancel() - }) - return - } - - if found == nil { - return // No matching package. - } - - imp := &ImportInfo{ - ImportPath: found.importPathShort, - } - - pkg := &packageInfo{ - name: pkgName, - exports: symbols, - } - results <- result{imp, pkg} - }(pkgName, symbols) - } - go func() { - wg.Wait() - close(results) - }() - - for result := range results { + for _, result := range results { + if result == nil { + continue + } // Don't offer completions that would shadow predeclared // names, such as github.com/coreos/etcd/error. - if types.Universe.Lookup(result.pkg.name) != nil { // predeclared + if types.Universe.Lookup(result.Package.Name) != nil { // predeclared // Ideally we would skip this candidate only // if the predeclared name is actually // referenced by the file, but that's a lot @@ -1260,9 +1212,9 @@ func addExternalCandidates(ctx context.Context, pass *pass, refs references, fil // user before long. continue } - pass.addCandidate(result.imp, result.pkg) + pass.addCandidate(result.Import, result.Package) } - return firstErr + return nil } // notIdentifier reports whether ch is an invalid identifier character. @@ -1604,11 +1556,10 @@ func loadExportsFromFiles(ctx context.Context, env *ProcessEnv, dir string, incl } fullFile := filepath.Join(dir, fi.Name()) + // Legacy ast.Object resolution is needed here. f, err := parser.ParseFile(fset, fullFile, nil, 0) if err != nil { - if env.Logf != nil { - env.Logf("error parsing %v: %v", fullFile, err) - } + env.logf("error parsing %v: %v", fullFile, err) continue } if f.Name.Name == "documentation" { @@ -1644,9 +1595,7 @@ func loadExportsFromFiles(ctx context.Context, env *ProcessEnv, dir string, incl } sortSymbols(exports) - if env.Logf != nil { - env.Logf("loaded exports in dir %v (package %v): %v", dir, pkgName, exports) - } + env.logf("loaded exports in dir %v (package %v): %v", dir, pkgName, exports) return pkgName, exports, nil } @@ -1656,25 +1605,39 @@ func sortSymbols(syms []stdlib.Symbol) { }) } -// findImport searches for a package with the given symbols. -// If no package is found, findImport returns ("", false, nil) -func findImport(ctx context.Context, pass *pass, candidates []pkgDistance, pkgName string, symbols map[string]bool) (*pkg, error) { +// A symbolSearcher searches for a package with a set of symbols, among a set +// of candidates. See [symbolSearcher.search]. +// +// The search occurs within the scope of a single file, with context captured +// in srcDir and xtest. +type symbolSearcher struct { + logf func(string, ...any) + srcDir string // directory containing the file + xtest bool // if set, the file containing is an x_test file + loadExports func(ctx context.Context, pkg *pkg, includeTest bool) (string, []stdlib.Symbol, error) +} + +// search searches the provided candidates for a package containing all +// exported symbols. +// +// If successful, returns the resulting package. +func (s *symbolSearcher) search(ctx context.Context, candidates []pkgDistance, pkgName string, symbols map[string]bool) (*pkg, error) { // Sort the candidates by their import package length, // assuming that shorter package names are better than long // ones. Note that this sorts by the de-vendored name, so // there's no "penalty" for vendoring. sort.Sort(byDistanceOrImportPathShortLength(candidates)) - if pass.env.Logf != nil { + if s.logf != nil { for i, c := range candidates { - pass.env.Logf("%s candidate %d/%d: %v in %v", pkgName, i+1, len(candidates), c.pkg.importPathShort, c.pkg.dir) + s.logf("%s candidate %d/%d: %v in %v", pkgName, i+1, len(candidates), c.pkg.importPathShort, c.pkg.dir) } } - resolver, err := pass.env.GetResolver() - if err != nil { - return nil, err - } - // Collect exports for packages with matching names. + // Arrange rescv so that we can we can await results in order of relevance + // and exit as soon as we find the first match. + // + // Search with bounded concurrency, returning as soon as the first result + // among rescv is non-nil. rescv := make([]chan *pkg, len(candidates)) for i := range candidates { rescv[i] = make(chan *pkg, 1) @@ -1682,6 +1645,7 @@ func findImport(ctx context.Context, pass *pass, candidates []pkgDistance, pkgNa const maxConcurrentPackageImport = 4 loadExportsSem := make(chan struct{}, maxConcurrentPackageImport) + // Ensure that all work is completed at exit. ctx, cancel := context.WithCancel(ctx) var wg sync.WaitGroup defer func() { @@ -1689,6 +1653,7 @@ func findImport(ctx context.Context, pass *pass, candidates []pkgDistance, pkgNa wg.Wait() }() + // Start the search. wg.Add(1) go func() { defer wg.Done() @@ -1699,55 +1664,67 @@ func findImport(ctx context.Context, pass *pass, candidates []pkgDistance, pkgNa return } + i := i + c := c wg.Add(1) - go func(c pkgDistance, resc chan<- *pkg) { + go func() { defer func() { <-loadExportsSem wg.Done() }() - - if pass.env.Logf != nil { - pass.env.Logf("loading exports in dir %s (seeking package %s)", c.pkg.dir, pkgName) + if s.logf != nil { + s.logf("loading exports in dir %s (seeking package %s)", c.pkg.dir, pkgName) } - // If we're an x_test, load the package under test's test variant. - includeTest := strings.HasSuffix(pass.f.Name.Name, "_test") && c.pkg.dir == pass.srcDir - _, exports, err := resolver.loadExports(ctx, c.pkg, includeTest) + pkg, err := s.searchOne(ctx, c, symbols) if err != nil { - if pass.env.Logf != nil { - pass.env.Logf("loading exports in dir %s (seeking package %s): %v", c.pkg.dir, pkgName, err) - } - resc <- nil - return - } - - exportsMap := make(map[string]bool, len(exports)) - for _, sym := range exports { - exportsMap[sym.Name] = true - } - - // If it doesn't have the right - // symbols, send nil to mean no match. - for symbol := range symbols { - if !exportsMap[symbol] { - resc <- nil - return + if s.logf != nil && ctx.Err() == nil { + s.logf("loading exports in dir %s (seeking package %s): %v", c.pkg.dir, pkgName, err) } + pkg = nil } - resc <- c.pkg - }(c, rescv[i]) + rescv[i] <- pkg // may be nil + }() } }() + // Await the first (best) result. for _, resc := range rescv { - pkg := <-resc - if pkg == nil { - continue + select { + case r := <-resc: + if r != nil { + return r, nil + } + case <-ctx.Done(): + return nil, ctx.Err() } - return pkg, nil } return nil, nil } +func (s *symbolSearcher) searchOne(ctx context.Context, c pkgDistance, symbols map[string]bool) (*pkg, error) { + if ctx.Err() != nil { + return nil, ctx.Err() + } + // If we're considering the package under test from an x_test, load the + // test variant. + includeTest := s.xtest && c.pkg.dir == s.srcDir + _, exports, err := s.loadExports(ctx, c.pkg, includeTest) + if err != nil { + return nil, err + } + + exportsMap := make(map[string]bool, len(exports)) + for _, sym := range exports { + exportsMap[sym.Name] = true + } + for symbol := range symbols { + if !exportsMap[symbol] { + return nil, nil // no match + } + } + return c.pkg, nil +} + // pkgIsCandidate reports whether pkg is a candidate for satisfying the // finding which package pkgIdent in the file named by filename is trying // to refer to. @@ -1760,68 +1737,34 @@ func findImport(ctx context.Context, pass *pass, candidates []pkgDistance, pkgNa // filename is the file being formatted. // pkgIdent is the package being searched for, like "client" (if // searching for "client.New") -func pkgIsCandidate(filename string, refs references, pkg *pkg) bool { +func pkgIsCandidate(filename string, refs References, pkg *pkg) bool { // Check "internal" and "vendor" visibility: - if !canUse(filename, pkg.dir) { + if !CanUse(filename, pkg.dir) { return false } // Speed optimization to minimize disk I/O: - // the last two components on disk must contain the - // package name somewhere. // - // This permits mismatch naming like directory - // "go-foo" being package "foo", or "pkg.v3" being "pkg", - // or directory "google.golang.org/api/cloudbilling/v1" - // being package "cloudbilling", but doesn't - // permit a directory "foo" to be package - // "bar", which is strongly discouraged - // anyway. There's no reason goimports needs - // to be slow just to accommodate that. + // Use the matchesPath heuristic to filter to package paths that could + // reasonably match a dangling reference. + // + // This permits mismatch naming like directory "go-foo" being package "foo", + // or "pkg.v3" being "pkg", or directory + // "google.golang.org/api/cloudbilling/v1" being package "cloudbilling", but + // doesn't permit a directory "foo" to be package "bar", which is strongly + // discouraged anyway. There's no reason goimports needs to be slow just to + // accommodate that. for pkgIdent := range refs { - lastTwo := lastTwoComponents(pkg.importPathShort) - if strings.Contains(lastTwo, pkgIdent) { + if matchesPath(pkgIdent, pkg.importPathShort) { return true } - if hasHyphenOrUpperASCII(lastTwo) && !hasHyphenOrUpperASCII(pkgIdent) { - lastTwo = lowerASCIIAndRemoveHyphen(lastTwo) - if strings.Contains(lastTwo, pkgIdent) { - return true - } - } } return false } -func hasHyphenOrUpperASCII(s string) bool { - for i := 0; i < len(s); i++ { - b := s[i] - if b == '-' || ('A' <= b && b <= 'Z') { - return true - } - } - return false -} - -func lowerASCIIAndRemoveHyphen(s string) (ret string) { - buf := make([]byte, 0, len(s)) - for i := 0; i < len(s); i++ { - b := s[i] - switch { - case b == '-': - continue - case 'A' <= b && b <= 'Z': - buf = append(buf, b+('a'-'A')) - default: - buf = append(buf, b) - } - } - return string(buf) -} - -// canUse reports whether the package in dir is usable from filename, +// CanUse reports whether the package in dir is usable from filename, // respecting the Go "internal" and "vendor" visibility rules. -func canUse(filename, dir string) bool { +func CanUse(filename, dir string) bool { // Fast path check, before any allocations. If it doesn't contain vendor // or internal, it's not tricky: // Note that this can false-negative on directories like "notinternal", @@ -1859,19 +1802,84 @@ func canUse(filename, dir string) bool { return !strings.Contains(relSlash, "/vendor/") && !strings.Contains(relSlash, "/internal/") && !strings.HasSuffix(relSlash, "/internal") } -// lastTwoComponents returns at most the last two path components -// of v, using either / or \ as the path separator. -func lastTwoComponents(v string) string { +// matchesPath reports whether ident may match a potential package name +// referred to by path, using heuristics to filter out unidiomatic package +// names. +// +// Specifically, it checks whether either of the last two '/'- or '\'-delimited +// path segments matches the identifier. The segment-matching heuristic must +// allow for various conventions around segment naming, including go-foo, +// foo-go, and foo.v3. To handle all of these, matching considers both (1) the +// entire segment, ignoring '-' and '.', as well as (2) the last subsegment +// separated by '-' or '.'. So the segment foo-go matches all of the following +// identifiers: foo, go, and foogo. All matches are case insensitive (for ASCII +// identifiers). +// +// See the docstring for [pkgIsCandidate] for an explanation of how this +// heuristic filters potential candidate packages. +func matchesPath(ident, path string) bool { + // Ignore case, for ASCII. + lowerIfASCII := func(b byte) byte { + if 'A' <= b && b <= 'Z' { + return b + ('a' - 'A') + } + return b + } + + // match reports whether path[start:end] matches ident, ignoring [.-]. + match := func(start, end int) bool { + ii := len(ident) - 1 // current byte in ident + pi := end - 1 // current byte in path + for ; pi >= start && ii >= 0; pi-- { + pb := path[pi] + if pb == '-' || pb == '.' { + continue + } + pb = lowerIfASCII(pb) + ib := lowerIfASCII(ident[ii]) + if pb != ib { + return false + } + ii-- + } + return ii < 0 && pi < start // all bytes matched + } + + // segmentEnd and subsegmentEnd hold the end points of the current segment + // and subsegment intervals. + segmentEnd := len(path) + subsegmentEnd := len(path) + + // Count slashes; we only care about the last two segments. nslash := 0 - for i := len(v) - 1; i >= 0; i-- { - if v[i] == '/' || v[i] == '\\' { + + for i := len(path) - 1; i >= 0; i-- { + switch b := path[i]; b { + // TODO(rfindley): we handle backlashes here only because the previous + // heuristic handled backslashes. This is perhaps overly defensive, but is + // the result of many lessons regarding Chesterton's fence and the + // goimports codebase. + // + // However, this function is only ever called with something called an + // 'importPath'. Is it possible that this is a real import path, and + // therefore we need only consider forward slashes? + case '/', '\\': + if match(i+1, segmentEnd) || match(i+1, subsegmentEnd) { + return true + } nslash++ if nslash == 2 { - return v[i:] + return false // did not match above + } + segmentEnd, subsegmentEnd = i, i // reset + case '-', '.': + if match(i+1, subsegmentEnd) { + return true } + subsegmentEnd = i } } - return v + return match(0, segmentEnd) || match(0, subsegmentEnd) } type visitFn func(node ast.Node) ast.Visitor diff --git a/vendor/golang.org/x/tools/internal/imports/imports.go b/vendor/golang.org/x/tools/internal/imports/imports.go index f8346552..2215a128 100644 --- a/vendor/golang.org/x/tools/internal/imports/imports.go +++ b/vendor/golang.org/x/tools/internal/imports/imports.go @@ -47,7 +47,14 @@ type Options struct { // Process implements golang.org/x/tools/imports.Process with explicit context in opt.Env. func Process(filename string, src []byte, opt *Options) (formatted []byte, err error) { fileSet := token.NewFileSet() - file, adjust, err := parse(fileSet, filename, src, opt) + var parserMode parser.Mode + if opt.Comments { + parserMode |= parser.ParseComments + } + if opt.AllErrors { + parserMode |= parser.AllErrors + } + file, adjust, err := parse(fileSet, filename, src, parserMode, opt.Fragment) if err != nil { return nil, err } @@ -66,17 +73,19 @@ func Process(filename string, src []byte, opt *Options) (formatted []byte, err e // // Note that filename's directory influences which imports can be chosen, // so it is important that filename be accurate. -func FixImports(ctx context.Context, filename string, src []byte, opt *Options) (fixes []*ImportFix, err error) { +func FixImports(ctx context.Context, filename string, src []byte, goroot string, logf func(string, ...any), source Source) (fixes []*ImportFix, err error) { ctx, done := event.Start(ctx, "imports.FixImports") defer done() fileSet := token.NewFileSet() - file, _, err := parse(fileSet, filename, src, opt) + // TODO(rfindley): these default values for ParseComments and AllErrors were + // extracted from gopls, but are they even needed? + file, _, err := parse(fileSet, filename, src, parser.ParseComments|parser.AllErrors, true) if err != nil { return nil, err } - return getFixes(ctx, fileSet, file, filename, opt.Env) + return getFixesWithSource(ctx, fileSet, file, filename, goroot, logf, source) } // ApplyFixes applies all of the fixes to the file and formats it. extraMode @@ -86,7 +95,7 @@ func ApplyFixes(fixes []*ImportFix, filename string, src []byte, opt *Options, e // Don't use parse() -- we don't care about fragments or statement lists // here, and we need to work with unparseable files. fileSet := token.NewFileSet() - parserMode := parser.Mode(0) + parserMode := parser.SkipObjectResolution if opt.Comments { parserMode |= parser.ParseComments } @@ -114,7 +123,7 @@ func ApplyFixes(fixes []*ImportFix, filename string, src []byte, opt *Options, e // formatted file, and returns the postpocessed result. func formatFile(fset *token.FileSet, file *ast.File, src []byte, adjust func(orig []byte, src []byte) []byte, opt *Options) ([]byte, error) { mergeImports(file) - sortImports(opt.LocalPrefix, fset.File(file.Pos()), file) + sortImports(opt.LocalPrefix, fset.File(file.FileStart), file) var spacesBefore []string // import paths we need spaces before for _, impSection := range astutil.Imports(fset, file) { // Within each block of contiguous imports, see if any @@ -164,13 +173,9 @@ func formatFile(fset *token.FileSet, file *ast.File, src []byte, adjust func(ori // parse parses src, which was read from filename, // as a Go source file or statement list. -func parse(fset *token.FileSet, filename string, src []byte, opt *Options) (*ast.File, func(orig, src []byte) []byte, error) { - parserMode := parser.Mode(0) - if opt.Comments { - parserMode |= parser.ParseComments - } - if opt.AllErrors { - parserMode |= parser.AllErrors +func parse(fset *token.FileSet, filename string, src []byte, parserMode parser.Mode, fragment bool) (*ast.File, func(orig, src []byte) []byte, error) { + if parserMode&parser.SkipObjectResolution != 0 { + panic("legacy ast.Object resolution is required") } // Try as whole source file. @@ -181,7 +186,7 @@ func parse(fset *token.FileSet, filename string, src []byte, opt *Options) (*ast // If the error is that the source file didn't begin with a // package line and we accept fragmented input, fall through to // try as a source fragment. Stop and return on any other error. - if !opt.Fragment || !strings.Contains(err.Error(), "expected 'package'") { + if !fragment || !strings.Contains(err.Error(), "expected 'package'") { return nil, nil, err } diff --git a/vendor/golang.org/x/tools/internal/imports/mod.go b/vendor/golang.org/x/tools/internal/imports/mod.go index 82fe644a..8555e3f8 100644 --- a/vendor/golang.org/x/tools/internal/imports/mod.go +++ b/vendor/golang.org/x/tools/internal/imports/mod.go @@ -245,7 +245,10 @@ func newModuleResolver(e *ProcessEnv, moduleCacheCache *DirInfoCache) (*ModuleRe // 2. Use this to separate module cache scanning from other scanning. func gomodcacheForEnv(goenv map[string]string) string { if gmc := goenv["GOMODCACHE"]; gmc != "" { - return gmc + // golang/go#67156: ensure that the module cache is clean, since it is + // assumed as a prefix to directories scanned by gopathwalk, which are + // themselves clean. + return filepath.Clean(gmc) } gopaths := filepath.SplitList(goenv["GOPATH"]) if len(gopaths) == 0 { @@ -265,9 +268,7 @@ func (r *ModuleResolver) initAllMods() error { return err } if mod.Dir == "" { - if r.env.Logf != nil { - r.env.Logf("module %v has not been downloaded and will be ignored", mod.Path) - } + r.env.logf("module %v has not been downloaded and will be ignored", mod.Path) // Can't do anything with a module that's not downloaded. continue } @@ -742,8 +743,8 @@ func (r *ModuleResolver) loadExports(ctx context.Context, pkg *pkg, includeTest func (r *ModuleResolver) scanDirForPackage(root gopathwalk.Root, dir string) directoryPackageInfo { subdir := "" - if dir != root.Path { - subdir = dir[len(root.Path)+len("/"):] + if prefix := root.Path + string(filepath.Separator); strings.HasPrefix(dir, prefix) { + subdir = dir[len(prefix):] } importPath := filepath.ToSlash(subdir) if strings.HasPrefix(importPath, "vendor/") { @@ -766,9 +767,7 @@ func (r *ModuleResolver) scanDirForPackage(root gopathwalk.Root, dir string) dir } modPath, err := module.UnescapePath(filepath.ToSlash(matches[1])) if err != nil { - if r.env.Logf != nil { - r.env.Logf("decoding module cache path %q: %v", subdir, err) - } + r.env.logf("decoding module cache path %q: %v", subdir, err) return directoryPackageInfo{ status: directoryScanned, err: fmt.Errorf("decoding module cache path %q: %v", subdir, err), diff --git a/vendor/golang.org/x/tools/internal/imports/source.go b/vendor/golang.org/x/tools/internal/imports/source.go new file mode 100644 index 00000000..cbe4f3c5 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/imports/source.go @@ -0,0 +1,63 @@ +// Copyright 2024 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 imports + +import "context" + +// These types document the APIs below. +// +// TODO(rfindley): consider making these defined types rather than aliases. +type ( + ImportPath = string + PackageName = string + Symbol = string + + // References is set of References found in a Go file. The first map key is the + // left hand side of a selector expression, the second key is the right hand + // side, and the value should always be true. + References = map[PackageName]map[Symbol]bool +) + +// A Result satisfies a missing import. +// +// The Import field describes the missing import spec, and the Package field +// summarizes the package exports. +type Result struct { + Import *ImportInfo + Package *PackageInfo +} + +// An ImportInfo represents a single import statement. +type ImportInfo struct { + ImportPath string // import path, e.g. "crypto/rand". + Name string // import name, e.g. "crand", or "" if none. +} + +// A PackageInfo represents what's known about a package. +type PackageInfo struct { + Name string // package name in the package declaration, if known + Exports map[string]bool // set of names of known package level sortSymbols +} + +// A Source provides imports to satisfy unresolved references in the file being +// fixed. +type Source interface { + // LoadPackageNames queries PackageName information for the requested import + // paths, when operating from the provided srcDir. + // + // TODO(rfindley): try to refactor to remove this operation. + LoadPackageNames(ctx context.Context, srcDir string, paths []ImportPath) (map[ImportPath]PackageName, error) + + // ResolveReferences asks the Source for the best package name to satisfy + // each of the missing references, in the context of fixing the given + // filename. + // + // Returns a map from package name to a [Result] for that package name that + // provides the required symbols. Keys may be omitted in the map if no + // candidates satisfy all missing references for that package name. It is up + // to each data source to select the best result for each entry in the + // missing map. + ResolveReferences(ctx context.Context, filename string, missing References) ([]*Result, error) +} diff --git a/vendor/golang.org/x/tools/internal/imports/source_env.go b/vendor/golang.org/x/tools/internal/imports/source_env.go new file mode 100644 index 00000000..ec996c3c --- /dev/null +++ b/vendor/golang.org/x/tools/internal/imports/source_env.go @@ -0,0 +1,129 @@ +// Copyright 2024 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 imports + +import ( + "context" + "path/filepath" + "strings" + "sync" + + "golang.org/x/sync/errgroup" + "golang.org/x/tools/internal/gopathwalk" +) + +// ProcessEnvSource implements the [Source] interface using the legacy +// [ProcessEnv] abstraction. +type ProcessEnvSource struct { + env *ProcessEnv + srcDir string + filename string + pkgName string +} + +// NewProcessEnvSource returns a [ProcessEnvSource] wrapping the given +// env, to be used for fixing imports in the file with name filename in package +// named pkgName. +func NewProcessEnvSource(env *ProcessEnv, filename, pkgName string) (*ProcessEnvSource, error) { + abs, err := filepath.Abs(filename) + if err != nil { + return nil, err + } + srcDir := filepath.Dir(abs) + return &ProcessEnvSource{ + env: env, + srcDir: srcDir, + filename: filename, + pkgName: pkgName, + }, nil +} + +func (s *ProcessEnvSource) LoadPackageNames(ctx context.Context, srcDir string, unknown []string) (map[string]string, error) { + r, err := s.env.GetResolver() + if err != nil { + return nil, err + } + return r.loadPackageNames(unknown, srcDir) +} + +func (s *ProcessEnvSource) ResolveReferences(ctx context.Context, filename string, refs map[string]map[string]bool) ([]*Result, error) { + var mu sync.Mutex + found := make(map[string][]pkgDistance) + callback := &scanCallback{ + rootFound: func(gopathwalk.Root) bool { + return true // We want everything. + }, + dirFound: func(pkg *pkg) bool { + return pkgIsCandidate(filename, refs, pkg) + }, + packageNameLoaded: func(pkg *pkg) bool { + if _, want := refs[pkg.packageName]; !want { + return false + } + if pkg.dir == s.srcDir && s.pkgName == pkg.packageName { + // The candidate is in the same directory and has the + // same package name. Don't try to import ourselves. + return false + } + if !CanUse(filename, pkg.dir) { + return false + } + mu.Lock() + defer mu.Unlock() + found[pkg.packageName] = append(found[pkg.packageName], pkgDistance{pkg, distance(s.srcDir, pkg.dir)}) + return false // We'll do our own loading after we sort. + }, + } + resolver, err := s.env.GetResolver() + if err != nil { + return nil, err + } + if err := resolver.scan(ctx, callback); err != nil { + return nil, err + } + + g, ctx := errgroup.WithContext(ctx) + + searcher := symbolSearcher{ + logf: s.env.logf, + srcDir: s.srcDir, + xtest: strings.HasSuffix(s.pkgName, "_test"), + loadExports: resolver.loadExports, + } + + var resultMu sync.Mutex + results := make(map[string]*Result, len(refs)) + for pkgName, symbols := range refs { + g.Go(func() error { + found, err := searcher.search(ctx, found[pkgName], pkgName, symbols) + if err != nil { + return err + } + if found == nil { + return nil // No matching package. + } + + imp := &ImportInfo{ + ImportPath: found.importPathShort, + } + pkg := &PackageInfo{ + Name: pkgName, + Exports: symbols, + } + resultMu.Lock() + results[pkgName] = &Result{Import: imp, Package: pkg} + resultMu.Unlock() + return nil + }) + } + if err := g.Wait(); err != nil { + return nil, err + } + var ans []*Result + for _, x := range results { + ans = append(ans, x) + } + return ans, nil +} diff --git a/vendor/golang.org/x/tools/internal/imports/source_modindex.go b/vendor/golang.org/x/tools/internal/imports/source_modindex.go new file mode 100644 index 00000000..05229f06 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/imports/source_modindex.go @@ -0,0 +1,103 @@ +// Copyright 2024 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 imports + +import ( + "context" + "sync" + "time" + + "golang.org/x/tools/internal/modindex" +) + +// This code is here rather than in the modindex package +// to avoid import loops + +// implements Source using modindex, so only for module cache. +// +// this is perhaps over-engineered. A new Index is read at first use. +// And then Update is called after every 15 minutes, and a new Index +// is read if the index changed. It is not clear the Mutex is needed. +type IndexSource struct { + modcachedir string + mutex sync.Mutex + ix *modindex.Index + expires time.Time +} + +// create a new Source. Called from NewView in cache/session.go. +func NewIndexSource(cachedir string) *IndexSource { + return &IndexSource{modcachedir: cachedir} +} + +func (s *IndexSource) LoadPackageNames(ctx context.Context, srcDir string, paths []ImportPath) (map[ImportPath]PackageName, error) { + /// This is used by goimports to resolve the package names of imports of the + // current package, which is irrelevant for the module cache. + return nil, nil +} + +func (s *IndexSource) ResolveReferences(ctx context.Context, filename string, missing References) ([]*Result, error) { + if err := s.maybeReadIndex(); err != nil { + return nil, err + } + var cs []modindex.Candidate + for pkg, nms := range missing { + for nm := range nms { + x := s.ix.Lookup(pkg, nm, false) + cs = append(cs, x...) + } + } + found := make(map[string]*Result) + for _, c := range cs { + var x *Result + if x = found[c.ImportPath]; x == nil { + x = &Result{ + Import: &ImportInfo{ + ImportPath: c.ImportPath, + Name: "", + }, + Package: &PackageInfo{ + Name: c.PkgName, + Exports: make(map[string]bool), + }, + } + found[c.ImportPath] = x + } + x.Package.Exports[c.Name] = true + } + var ans []*Result + for _, x := range found { + ans = append(ans, x) + } + return ans, nil +} + +func (s *IndexSource) maybeReadIndex() error { + s.mutex.Lock() + defer s.mutex.Unlock() + + var readIndex bool + if time.Now().After(s.expires) { + ok, err := modindex.Update(s.modcachedir) + if err != nil { + return err + } + if ok { + readIndex = true + } + } + + if readIndex || s.ix == nil { + ix, err := modindex.ReadIndex(s.modcachedir) + if err != nil { + return err + } + s.ix = ix + // for now refresh every 15 minutes + s.expires = time.Now().Add(time.Minute * 15) + } + + return nil +} diff --git a/vendor/golang.org/x/tools/internal/modindex/directories.go b/vendor/golang.org/x/tools/internal/modindex/directories.go new file mode 100644 index 00000000..1e1a02f2 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/modindex/directories.go @@ -0,0 +1,135 @@ +// Copyright 2024 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 modindex + +import ( + "fmt" + "log" + "os" + "path/filepath" + "regexp" + "slices" + "strings" + "sync" + "time" + + "golang.org/x/mod/semver" + "golang.org/x/tools/internal/gopathwalk" +) + +type directory struct { + path Relpath + importPath string + version string // semantic version + syms []symbol +} + +// filterDirs groups the directories by import path, +// sorting the ones with the same import path by semantic version, +// most recent first. +func byImportPath(dirs []Relpath) (map[string][]*directory, error) { + ans := make(map[string][]*directory) // key is import path + for _, d := range dirs { + ip, sv, err := DirToImportPathVersion(d) + if err != nil { + return nil, err + } + ans[ip] = append(ans[ip], &directory{ + path: d, + importPath: ip, + version: sv, + }) + } + for k, v := range ans { + semanticSort(v) + ans[k] = v + } + return ans, nil +} + +// sort the directories by semantic version, latest first +func semanticSort(v []*directory) { + slices.SortFunc(v, func(l, r *directory) int { + if n := semver.Compare(l.version, r.version); n != 0 { + return -n // latest first + } + return strings.Compare(string(l.path), string(r.path)) + }) +} + +// modCacheRegexp splits a relpathpath into module, module version, and package. +var modCacheRegexp = regexp.MustCompile(`(.*)@([^/\\]*)(.*)`) + +// DirToImportPathVersion computes import path and semantic version +func DirToImportPathVersion(dir Relpath) (string, string, error) { + m := modCacheRegexp.FindStringSubmatch(string(dir)) + // m[1] is the module path + // m[2] is the version major.minor.patch(-

 1 && flds[1][1] == 'D',
+			}
+			if px.Type == Func {
+				n, err := strconv.Atoi(flds[2])
+				if err != nil {
+					continue // should never happen
+				}
+				px.Results = int16(n)
+				if len(flds) >= 4 {
+					sig := strings.Split(flds[3], " ")
+					for i := 0; i < len(sig); i++ {
+						// $ cannot otherwise occur. removing the spaces
+						// almost works, but for chan struct{}, e.g.
+						sig[i] = strings.Replace(sig[i], "$", " ", -1)
+					}
+					px.Sig = toFields(sig)
+				}
+			}
+			ans = append(ans, px)
+		}
+	}
+	return ans
+}
+
+func toFields(sig []string) []Field {
+	ans := make([]Field, len(sig)/2)
+	for i := 0; i < len(ans); i++ {
+		ans[i] = Field{Arg: sig[2*i], Type: sig[2*i+1]}
+	}
+	return ans
+}
+
+// benchmarks show this is measurably better than strings.Split
+// split into first 4 fields separated by single space
+func fastSplit(x string) []string {
+	ans := make([]string, 0, 4)
+	nxt := 0
+	start := 0
+	for i := 0; i < len(x); i++ {
+		if x[i] != ' ' {
+			continue
+		}
+		ans = append(ans, x[start:i])
+		nxt++
+		start = i + 1
+		if nxt >= 3 {
+			break
+		}
+	}
+	ans = append(ans, x[start:])
+	return ans
+}
+
+func asLexType(c byte) LexType {
+	switch c {
+	case 'C':
+		return Const
+	case 'V':
+		return Var
+	case 'T':
+		return Type
+	case 'F':
+		return Func
+	}
+	return -1
+}
diff --git a/vendor/golang.org/x/tools/internal/modindex/modindex.go b/vendor/golang.org/x/tools/internal/modindex/modindex.go
new file mode 100644
index 00000000..355a53e7
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/modindex/modindex.go
@@ -0,0 +1,164 @@
+// Copyright 2024 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 modindex contains code for building and searching an index to
+// the Go module cache. The directory containing the index, returned by
+// IndexDir(), contains a file index-name- that contains the name
+// of the current index. We believe writing that short file is atomic.
+// ReadIndex reads that file to get the file name of the index.
+// WriteIndex writes an index with a unique name and then
+// writes that name into a new version of index-name-.
+// ( stands for the CurrentVersion of the index format.)
+package modindex
+
+import (
+	"path/filepath"
+	"slices"
+	"strings"
+	"time"
+
+	"golang.org/x/mod/semver"
+)
+
+// Create always creates a new index for the go module cache that is in cachedir.
+func Create(cachedir string) error {
+	_, err := indexModCache(cachedir, true)
+	return err
+}
+
+// Update the index for the go module cache that is in cachedir,
+// If there is no existing index it will build one.
+// If there are changed directories since the last index, it will
+// write a new one and return true. Otherwise it returns false.
+func Update(cachedir string) (bool, error) {
+	return indexModCache(cachedir, false)
+}
+
+// indexModCache writes an index current as of when it is called.
+// If clear is true the index is constructed from all of GOMODCACHE
+// otherwise the index is constructed from the last previous index
+// and the updates to the cache. It returns true if it wrote an index,
+// false otherwise.
+func indexModCache(cachedir string, clear bool) (bool, error) {
+	cachedir, err := filepath.Abs(cachedir)
+	if err != nil {
+		return false, err
+	}
+	cd := Abspath(cachedir)
+	future := time.Now().Add(24 * time.Hour) // safely in the future
+	ok, err := modindexTimed(future, cd, clear)
+	if err != nil {
+		return false, err
+	}
+	return ok, nil
+}
+
+// modindexTimed writes an index current as of onlyBefore.
+// If clear is true the index is constructed from all of GOMODCACHE
+// otherwise the index is constructed from the last previous index
+// and all the updates to the cache before onlyBefore.
+// It returns true if it wrote a new index, false if it wrote nothing.
+func modindexTimed(onlyBefore time.Time, cachedir Abspath, clear bool) (bool, error) {
+	var curIndex *Index
+	if !clear {
+		var err error
+		curIndex, err = ReadIndex(string(cachedir))
+		if clear && err != nil {
+			return false, err
+		}
+		// TODO(pjw): check that most of those directories still exist
+	}
+	cfg := &work{
+		onlyBefore: onlyBefore,
+		oldIndex:   curIndex,
+		cacheDir:   cachedir,
+	}
+	if curIndex != nil {
+		cfg.onlyAfter = curIndex.Changed
+	}
+	if err := cfg.buildIndex(); err != nil {
+		return false, err
+	}
+	if len(cfg.newIndex.Entries) == 0 && curIndex != nil {
+		// no changes from existing curIndex, don't write a new index
+		return false, nil
+	}
+	if err := cfg.writeIndex(); err != nil {
+		return false, err
+	}
+	return true, nil
+}
+
+type work struct {
+	onlyBefore time.Time // do not use directories later than this
+	onlyAfter  time.Time // only interested in directories after this
+	// directories from before onlyAfter come from oldIndex
+	oldIndex *Index
+	newIndex *Index
+	cacheDir Abspath
+}
+
+func (w *work) buildIndex() error {
+	// The effective date of the new index should be at least
+	// slightly earlier than when the directories are scanned
+	// so set it now.
+	w.newIndex = &Index{Changed: time.Now(), Cachedir: w.cacheDir}
+	dirs := findDirs(string(w.cacheDir), w.onlyAfter, w.onlyBefore)
+	if len(dirs) == 0 {
+		return nil
+	}
+	newdirs, err := byImportPath(dirs)
+	if err != nil {
+		return err
+	}
+	// for each import path it might occur only in newdirs,
+	// only in w.oldIndex, or in both.
+	// If it occurs in both, use the semantically later one
+	if w.oldIndex != nil {
+		for _, e := range w.oldIndex.Entries {
+			found, ok := newdirs[e.ImportPath]
+			if !ok {
+				w.newIndex.Entries = append(w.newIndex.Entries, e)
+				continue // use this one, there is no new one
+			}
+			if semver.Compare(found[0].version, e.Version) > 0 {
+				// use the new one
+			} else {
+				// use the old one, forget the new one
+				w.newIndex.Entries = append(w.newIndex.Entries, e)
+				delete(newdirs, e.ImportPath)
+			}
+		}
+	}
+	// get symbol information for all the new diredtories
+	getSymbols(w.cacheDir, newdirs)
+	// assemble the new index entries
+	for k, v := range newdirs {
+		d := v[0]
+		pkg, names := processSyms(d.syms)
+		if pkg == "" {
+			continue // PJW: does this ever happen?
+		}
+		entry := Entry{
+			PkgName:    pkg,
+			Dir:        d.path,
+			ImportPath: k,
+			Version:    d.version,
+			Names:      names,
+		}
+		w.newIndex.Entries = append(w.newIndex.Entries, entry)
+	}
+	// sort the entries in the new index
+	slices.SortFunc(w.newIndex.Entries, func(l, r Entry) int {
+		if n := strings.Compare(l.PkgName, r.PkgName); n != 0 {
+			return n
+		}
+		return strings.Compare(l.ImportPath, r.ImportPath)
+	})
+	return nil
+}
+
+func (w *work) writeIndex() error {
+	return writeIndex(w.cacheDir, w.newIndex)
+}
diff --git a/vendor/golang.org/x/tools/internal/modindex/symbols.go b/vendor/golang.org/x/tools/internal/modindex/symbols.go
new file mode 100644
index 00000000..b918529d
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/modindex/symbols.go
@@ -0,0 +1,218 @@
+// Copyright 2024 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 modindex
+
+import (
+	"fmt"
+	"go/ast"
+	"go/parser"
+	"go/token"
+	"go/types"
+	"os"
+	"path/filepath"
+	"runtime"
+	"slices"
+	"strings"
+
+	"golang.org/x/sync/errgroup"
+)
+
+// The name of a symbol contains information about the symbol:
+//  T for types, TD if the type is deprecated
+//  C for consts, CD if the const is deprecated
+//  V for vars, VD if the var is deprecated
+// and for funcs:  F  ( )*
+// any spaces in  are replaced by $s so that the fields
+// of the name are space separated. F is replaced by FD if the func
+// is deprecated.
+type symbol struct {
+	pkg  string // name of the symbols's package
+	name string // declared name
+	kind string // T, C, V, or F, follwed by D if deprecated
+	sig  string // signature information, for F
+}
+
+// find the symbols for the best directories
+func getSymbols(cd Abspath, dirs map[string][]*directory) {
+	var g errgroup.Group
+	g.SetLimit(max(2, runtime.GOMAXPROCS(0)/2))
+	for _, vv := range dirs {
+		// throttling some day?
+		d := vv[0]
+		g.Go(func() error {
+			thedir := filepath.Join(string(cd), string(d.path))
+			mode := parser.SkipObjectResolution | parser.ParseComments
+
+			fi, err := os.ReadDir(thedir)
+			if err != nil {
+				return nil // log this someday?
+			}
+			for _, fx := range fi {
+				if !strings.HasSuffix(fx.Name(), ".go") || strings.HasSuffix(fx.Name(), "_test.go") {
+					continue
+				}
+				fname := filepath.Join(thedir, fx.Name())
+				tr, err := parser.ParseFile(token.NewFileSet(), fname, nil, mode)
+				if err != nil {
+					continue // ignore errors, someday log them?
+				}
+				d.syms = append(d.syms, getFileExports(tr)...)
+			}
+			return nil
+		})
+	}
+	g.Wait()
+}
+
+func getFileExports(f *ast.File) []symbol {
+	pkg := f.Name.Name
+	if pkg == "main" {
+		return nil
+	}
+	var ans []symbol
+	// should we look for //go:build ignore?
+	for _, decl := range f.Decls {
+		switch decl := decl.(type) {
+		case *ast.FuncDecl:
+			if decl.Recv != nil {
+				// ignore methods, as we are completing package selections
+				continue
+			}
+			name := decl.Name.Name
+			dtype := decl.Type
+			// not looking at dtype.TypeParams. That is, treating
+			// generic functions just like non-generic ones.
+			sig := dtype.Params
+			kind := "F"
+			if isDeprecated(decl.Doc) {
+				kind += "D"
+			}
+			result := []string{fmt.Sprintf("%d", dtype.Results.NumFields())}
+			for _, x := range sig.List {
+				// This code creates a string representing the type.
+				// TODO(pjw): it may be fragile:
+				// 1. x.Type could be nil, perhaps in ill-formed code
+				// 2. ExprString might someday change incompatibly to
+				//    include struct tags, which can be arbitrary strings
+				if x.Type == nil {
+					// Can this happen without a parse error? (Files with parse
+					// errors are ignored in getSymbols)
+					continue // maybe report this someday
+				}
+				tp := types.ExprString(x.Type)
+				if len(tp) == 0 {
+					// Can this happen?
+					continue // maybe report this someday
+				}
+				// This is only safe if ExprString never returns anything with a $
+				// The only place a $ can occur seems to be in a struct tag, which
+				// can be an arbitrary string literal, and ExprString does not presently
+				// print struct tags. So for this to happen the type of a formal parameter
+				// has to be a explict struct, e.g. foo(x struct{a int "$"}) and ExprString
+				// would have to show the struct tag. Even testing for this case seems
+				// a waste of effort, but let's remember the possibility
+				if strings.Contains(tp, "$") {
+					continue
+				}
+				tp = strings.Replace(tp, " ", "$", -1)
+				if len(x.Names) == 0 {
+					result = append(result, "_")
+					result = append(result, tp)
+				} else {
+					for _, y := range x.Names {
+						result = append(result, y.Name)
+						result = append(result, tp)
+					}
+				}
+			}
+			sigs := strings.Join(result, " ")
+			if s := newsym(pkg, name, kind, sigs); s != nil {
+				ans = append(ans, *s)
+			}
+		case *ast.GenDecl:
+			depr := isDeprecated(decl.Doc)
+			switch decl.Tok {
+			case token.CONST, token.VAR:
+				tp := "V"
+				if decl.Tok == token.CONST {
+					tp = "C"
+				}
+				if depr {
+					tp += "D"
+				}
+				for _, sp := range decl.Specs {
+					for _, x := range sp.(*ast.ValueSpec).Names {
+						if s := newsym(pkg, x.Name, tp, ""); s != nil {
+							ans = append(ans, *s)
+						}
+					}
+				}
+			case token.TYPE:
+				tp := "T"
+				if depr {
+					tp += "D"
+				}
+				for _, sp := range decl.Specs {
+					if s := newsym(pkg, sp.(*ast.TypeSpec).Name.Name, tp, ""); s != nil {
+						ans = append(ans, *s)
+					}
+				}
+			}
+		}
+	}
+	return ans
+}
+
+func newsym(pkg, name, kind, sig string) *symbol {
+	if len(name) == 0 || !ast.IsExported(name) {
+		return nil
+	}
+	sym := symbol{pkg: pkg, name: name, kind: kind, sig: sig}
+	return &sym
+}
+
+func isDeprecated(doc *ast.CommentGroup) bool {
+	if doc == nil {
+		return false
+	}
+	// go.dev/wiki/Deprecated Paragraph starting 'Deprecated:'
+	// This code fails for /* Deprecated: */, but it's the code from
+	// gopls/internal/analysis/deprecated
+	lines := strings.Split(doc.Text(), "\n\n")
+	for _, line := range lines {
+		if strings.HasPrefix(line, "Deprecated:") {
+			return true
+		}
+	}
+	return false
+}
+
+// return the package name and the value for the symbols.
+// if there are multiple packages, choose one arbitrarily
+// the returned slice is sorted lexicographically
+func processSyms(syms []symbol) (string, []string) {
+	if len(syms) == 0 {
+		return "", nil
+	}
+	slices.SortFunc(syms, func(l, r symbol) int {
+		return strings.Compare(l.name, r.name)
+	})
+	pkg := syms[0].pkg
+	var names []string
+	for _, s := range syms {
+		var nx string
+		if s.pkg == pkg {
+			if s.sig != "" {
+				nx = fmt.Sprintf("%s %s %s", s.name, s.kind, s.sig)
+			} else {
+				nx = fmt.Sprintf("%s %s", s.name, s.kind)
+			}
+			names = append(names, nx)
+		} else {
+			continue // PJW: do we want to keep track of these?
+		}
+	}
+	return pkg, names
+}
diff --git a/vendor/golang.org/x/tools/internal/modindex/types.go b/vendor/golang.org/x/tools/internal/modindex/types.go
new file mode 100644
index 00000000..ece44886
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/modindex/types.go
@@ -0,0 +1,25 @@
+// Copyright 2024 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 modindex
+
+import (
+	"strings"
+)
+
+// some special types to avoid confusions
+
+// distinguish various types of directory names. It's easy to get confused.
+type Abspath string // absolute paths
+type Relpath string // paths with GOMODCACHE prefix removed
+
+func toRelpath(cachedir Abspath, s string) Relpath {
+	if strings.HasPrefix(s, string(cachedir)) {
+		if s == string(cachedir) {
+			return Relpath("")
+		}
+		return Relpath(s[len(cachedir)+1:])
+	}
+	return Relpath(s)
+}
diff --git a/vendor/golang.org/x/tools/internal/packagesinternal/packages.go b/vendor/golang.org/x/tools/internal/packagesinternal/packages.go
index 44719de1..78460591 100644
--- a/vendor/golang.org/x/tools/internal/packagesinternal/packages.go
+++ b/vendor/golang.org/x/tools/internal/packagesinternal/packages.go
@@ -5,8 +5,7 @@
 // Package packagesinternal exposes internal-only fields from go/packages.
 package packagesinternal
 
-var GetForTest = func(p interface{}) string { return "" }
-var GetDepsErrors = func(p interface{}) []*PackageError { return nil }
+var GetDepsErrors = func(p any) []*PackageError { return nil }
 
 type PackageError struct {
 	ImportStack []string // shortest path from package named on command line to this one
@@ -16,7 +15,6 @@ type PackageError struct {
 
 var TypecheckCgo int
 var DepsErrors int // must be set as a LoadMode to call GetDepsErrors
-var ForTest int    // must be set as a LoadMode to call GetForTest
 
-var SetModFlag = func(config interface{}, value string) {}
+var SetModFlag = func(config any, value string) {}
 var SetModFile = func(config interface{}, value string) {}
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/decoder.go b/vendor/golang.org/x/tools/internal/pkgbits/decoder.go
index 2acd8585..f6cb37c5 100644
--- a/vendor/golang.org/x/tools/internal/pkgbits/decoder.go
+++ b/vendor/golang.org/x/tools/internal/pkgbits/decoder.go
@@ -21,10 +21,7 @@ import (
 // export data.
 type PkgDecoder struct {
 	// version is the file format version.
-	version uint32
-
-	// aliases determines whether types.Aliases should be created
-	aliases bool
+	version Version
 
 	// sync indicates whether the file uses sync markers.
 	sync bool
@@ -71,12 +68,9 @@ func (pr *PkgDecoder) SyncMarkers() bool { return pr.sync }
 // NewPkgDecoder returns a PkgDecoder initialized to read the Unified
 // IR export data from input. pkgPath is the package path for the
 // compilation unit that produced the export data.
-//
-// TODO(mdempsky): Remove pkgPath parameter; unneeded since CL 391014.
 func NewPkgDecoder(pkgPath, input string) PkgDecoder {
 	pr := PkgDecoder{
 		pkgPath: pkgPath,
-		//aliases: aliases.Enabled(),
 	}
 
 	// TODO(mdempsky): Implement direct indexing of input string to
@@ -84,14 +78,15 @@ func NewPkgDecoder(pkgPath, input string) PkgDecoder {
 
 	r := strings.NewReader(input)
 
-	assert(binary.Read(r, binary.LittleEndian, &pr.version) == nil)
+	var ver uint32
+	assert(binary.Read(r, binary.LittleEndian, &ver) == nil)
+	pr.version = Version(ver)
 
-	switch pr.version {
-	default:
-		panic(fmt.Errorf("unsupported version: %v", pr.version))
-	case 0:
-		// no flags
-	case 1:
+	if pr.version >= numVersions {
+		panic(fmt.Errorf("cannot decode %q, export data version %d is greater than maximum supported version %d", pkgPath, pr.version, numVersions-1))
+	}
+
+	if pr.version.Has(Flags) {
 		var flags uint32
 		assert(binary.Read(r, binary.LittleEndian, &flags) == nil)
 		pr.sync = flags&flagSyncMarkers != 0
@@ -106,7 +101,9 @@ func NewPkgDecoder(pkgPath, input string) PkgDecoder {
 	assert(err == nil)
 
 	pr.elemData = input[pos:]
-	assert(len(pr.elemData)-8 == int(pr.elemEnds[len(pr.elemEnds)-1]))
+
+	const fingerprintSize = 8
+	assert(len(pr.elemData)-fingerprintSize == int(pr.elemEnds[len(pr.elemEnds)-1]))
 
 	return pr
 }
@@ -140,7 +137,7 @@ func (pr *PkgDecoder) AbsIdx(k RelocKind, idx Index) int {
 		absIdx += int(pr.elemEndsEnds[k-1])
 	}
 	if absIdx >= int(pr.elemEndsEnds[k]) {
-		errorf("%v:%v is out of bounds; %v", k, idx, pr.elemEndsEnds)
+		panicf("%v:%v is out of bounds; %v", k, idx, pr.elemEndsEnds)
 	}
 	return absIdx
 }
@@ -197,9 +194,7 @@ func (pr *PkgDecoder) NewDecoderRaw(k RelocKind, idx Index) Decoder {
 		Idx:    idx,
 	}
 
-	// TODO(mdempsky) r.data.Reset(...) after #44505 is resolved.
-	r.Data = *strings.NewReader(pr.DataIdx(k, idx))
-
+	r.Data.Reset(pr.DataIdx(k, idx))
 	r.Sync(SyncRelocs)
 	r.Relocs = make([]RelocEnt, r.Len())
 	for i := range r.Relocs {
@@ -248,7 +243,7 @@ type Decoder struct {
 
 func (r *Decoder) checkErr(err error) {
 	if err != nil {
-		errorf("unexpected decoding error: %w", err)
+		panicf("unexpected decoding error: %w", err)
 	}
 }
 
@@ -519,3 +514,6 @@ func (pr *PkgDecoder) PeekObj(idx Index) (string, string, CodeObj) {
 
 	return path, name, tag
 }
+
+// Version reports the version of the bitstream.
+func (w *Decoder) Version() Version { return w.common.version }
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/encoder.go b/vendor/golang.org/x/tools/internal/pkgbits/encoder.go
index 6482617a..c17a1239 100644
--- a/vendor/golang.org/x/tools/internal/pkgbits/encoder.go
+++ b/vendor/golang.org/x/tools/internal/pkgbits/encoder.go
@@ -12,18 +12,15 @@ import (
 	"io"
 	"math/big"
 	"runtime"
+	"strings"
 )
 
-// currentVersion is the current version number.
-//
-//   - v0: initial prototype
-//
-//   - v1: adds the flags uint32 word
-const currentVersion uint32 = 1
-
 // A PkgEncoder provides methods for encoding a package's Unified IR
 // export data.
 type PkgEncoder struct {
+	// version of the bitstream.
+	version Version
+
 	// elems holds the bitstream for previously encoded elements.
 	elems [numRelocs][]string
 
@@ -47,8 +44,9 @@ func (pw *PkgEncoder) SyncMarkers() bool { return pw.syncFrames >= 0 }
 // export data files, but can help diagnosing desync errors in
 // higher-level Unified IR reader/writer code. If syncFrames is
 // negative, then sync markers are omitted entirely.
-func NewPkgEncoder(syncFrames int) PkgEncoder {
+func NewPkgEncoder(version Version, syncFrames int) PkgEncoder {
 	return PkgEncoder{
+		version:    version,
 		stringsIdx: make(map[string]Index),
 		syncFrames: syncFrames,
 	}
@@ -64,13 +62,15 @@ func (pw *PkgEncoder) DumpTo(out0 io.Writer) (fingerprint [8]byte) {
 		assert(binary.Write(out, binary.LittleEndian, x) == nil)
 	}
 
-	writeUint32(currentVersion)
+	writeUint32(uint32(pw.version))
 
-	var flags uint32
-	if pw.SyncMarkers() {
-		flags |= flagSyncMarkers
+	if pw.version.Has(Flags) {
+		var flags uint32
+		if pw.SyncMarkers() {
+			flags |= flagSyncMarkers
+		}
+		writeUint32(flags)
 	}
-	writeUint32(flags)
 
 	// Write elemEndsEnds.
 	var sum uint32
@@ -159,7 +159,7 @@ type Encoder struct {
 
 // Flush finalizes the element's bitstream and returns its Index.
 func (w *Encoder) Flush() Index {
-	var sb bytes.Buffer // TODO(mdempsky): strings.Builder after #44505 is resolved
+	var sb strings.Builder
 
 	// Backup the data so we write the relocations at the front.
 	var tmp bytes.Buffer
@@ -189,7 +189,7 @@ func (w *Encoder) Flush() Index {
 
 func (w *Encoder) checkErr(err error) {
 	if err != nil {
-		errorf("unexpected encoding error: %v", err)
+		panicf("unexpected encoding error: %v", err)
 	}
 }
 
@@ -320,8 +320,14 @@ func (w *Encoder) Code(c Code) {
 // section (if not already present), and then writing a relocation
 // into the element bitstream.
 func (w *Encoder) String(s string) {
+	w.StringRef(w.p.StringIdx(s))
+}
+
+// StringRef writes a reference to the given index, which must be a
+// previously encoded string value.
+func (w *Encoder) StringRef(idx Index) {
 	w.Sync(SyncString)
-	w.Reloc(RelocString, w.p.StringIdx(s))
+	w.Reloc(RelocString, idx)
 }
 
 // Strings encodes and writes a variable-length slice of strings into
@@ -348,7 +354,7 @@ func (w *Encoder) Value(val constant.Value) {
 func (w *Encoder) scalar(val constant.Value) {
 	switch v := constant.Val(val).(type) {
 	default:
-		errorf("unhandled %v (%v)", val, val.Kind())
+		panicf("unhandled %v (%v)", val, val.Kind())
 	case bool:
 		w.Code(ValBool)
 		w.Bool(v)
@@ -381,3 +387,6 @@ func (w *Encoder) bigFloat(v *big.Float) {
 	b := v.Append(nil, 'p', -1)
 	w.String(string(b)) // TODO: More efficient encoding.
 }
+
+// Version reports the version of the bitstream.
+func (w *Encoder) Version() Version { return w.p.version }
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/frames_go1.go b/vendor/golang.org/x/tools/internal/pkgbits/frames_go1.go
deleted file mode 100644
index 5294f6a6..00000000
--- a/vendor/golang.org/x/tools/internal/pkgbits/frames_go1.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2021 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.
-
-//go:build !go1.7
-// +build !go1.7
-
-// TODO(mdempsky): Remove after #44505 is resolved
-
-package pkgbits
-
-import "runtime"
-
-func walkFrames(pcs []uintptr, visit frameVisitor) {
-	for _, pc := range pcs {
-		fn := runtime.FuncForPC(pc)
-		file, line := fn.FileLine(pc)
-
-		visit(file, line, fn.Name(), pc-fn.Entry())
-	}
-}
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/frames_go17.go b/vendor/golang.org/x/tools/internal/pkgbits/frames_go17.go
deleted file mode 100644
index 2324ae7a..00000000
--- a/vendor/golang.org/x/tools/internal/pkgbits/frames_go17.go
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2021 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.
-
-//go:build go1.7
-// +build go1.7
-
-package pkgbits
-
-import "runtime"
-
-// walkFrames calls visit for each call frame represented by pcs.
-//
-// pcs should be a slice of PCs, as returned by runtime.Callers.
-func walkFrames(pcs []uintptr, visit frameVisitor) {
-	if len(pcs) == 0 {
-		return
-	}
-
-	frames := runtime.CallersFrames(pcs)
-	for {
-		frame, more := frames.Next()
-		visit(frame.File, frame.Line, frame.Function, frame.PC-frame.Entry)
-		if !more {
-			return
-		}
-	}
-}
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/support.go b/vendor/golang.org/x/tools/internal/pkgbits/support.go
index ad26d3b2..50534a29 100644
--- a/vendor/golang.org/x/tools/internal/pkgbits/support.go
+++ b/vendor/golang.org/x/tools/internal/pkgbits/support.go
@@ -12,6 +12,6 @@ func assert(b bool) {
 	}
 }
 
-func errorf(format string, args ...interface{}) {
+func panicf(format string, args ...any) {
 	panic(fmt.Errorf(format, args...))
 }
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/sync.go b/vendor/golang.org/x/tools/internal/pkgbits/sync.go
index 5bd51ef7..1520b73a 100644
--- a/vendor/golang.org/x/tools/internal/pkgbits/sync.go
+++ b/vendor/golang.org/x/tools/internal/pkgbits/sync.go
@@ -6,6 +6,7 @@ package pkgbits
 
 import (
 	"fmt"
+	"runtime"
 	"strings"
 )
 
@@ -23,6 +24,24 @@ func fmtFrames(pcs ...uintptr) []string {
 
 type frameVisitor func(file string, line int, name string, offset uintptr)
 
+// walkFrames calls visit for each call frame represented by pcs.
+//
+// pcs should be a slice of PCs, as returned by runtime.Callers.
+func walkFrames(pcs []uintptr, visit frameVisitor) {
+	if len(pcs) == 0 {
+		return
+	}
+
+	frames := runtime.CallersFrames(pcs)
+	for {
+		frame, more := frames.Next()
+		visit(frame.File, frame.Line, frame.Function, frame.PC-frame.Entry)
+		if !more {
+			return
+		}
+	}
+}
+
 // SyncMarker is an enum type that represents markers that may be
 // written to export data to ensure the reader and writer stay
 // synchronized.
@@ -110,4 +129,8 @@ const (
 	SyncStmtsEnd
 	SyncLabel
 	SyncOptLabel
+
+	SyncMultiExpr
+	SyncRType
+	SyncConvRTTI
 )
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/syncmarker_string.go b/vendor/golang.org/x/tools/internal/pkgbits/syncmarker_string.go
index 4a5b0ca5..582ad56d 100644
--- a/vendor/golang.org/x/tools/internal/pkgbits/syncmarker_string.go
+++ b/vendor/golang.org/x/tools/internal/pkgbits/syncmarker_string.go
@@ -74,11 +74,14 @@ func _() {
 	_ = x[SyncStmtsEnd-64]
 	_ = x[SyncLabel-65]
 	_ = x[SyncOptLabel-66]
+	_ = x[SyncMultiExpr-67]
+	_ = x[SyncRType-68]
+	_ = x[SyncConvRTTI-69]
 }
 
-const _SyncMarker_name = "EOFBoolInt64Uint64StringValueValRelocsRelocUseRelocPublicPosPosBaseObjectObject1PkgPkgDefMethodTypeTypeIdxTypeParamNamesSignatureParamsParamCodeObjSymLocalIdentSelectorPrivateFuncExtVarExtTypeExtPragmaExprListExprsExprExprTypeAssignOpFuncLitCompLitDeclFuncBodyOpenScopeCloseScopeCloseAnotherScopeDeclNamesDeclNameStmtsBlockStmtIfStmtForStmtSwitchStmtRangeStmtCaseClauseCommClauseSelectStmtDeclsLabeledStmtUseObjLocalAddLocalLinknameStmt1StmtsEndLabelOptLabel"
+const _SyncMarker_name = "EOFBoolInt64Uint64StringValueValRelocsRelocUseRelocPublicPosPosBaseObjectObject1PkgPkgDefMethodTypeTypeIdxTypeParamNamesSignatureParamsParamCodeObjSymLocalIdentSelectorPrivateFuncExtVarExtTypeExtPragmaExprListExprsExprExprTypeAssignOpFuncLitCompLitDeclFuncBodyOpenScopeCloseScopeCloseAnotherScopeDeclNamesDeclNameStmtsBlockStmtIfStmtForStmtSwitchStmtRangeStmtCaseClauseCommClauseSelectStmtDeclsLabeledStmtUseObjLocalAddLocalLinknameStmt1StmtsEndLabelOptLabelMultiExprRTypeConvRTTI"
 
-var _SyncMarker_index = [...]uint16{0, 3, 7, 12, 18, 24, 29, 32, 38, 43, 51, 57, 60, 67, 73, 80, 83, 89, 95, 99, 106, 120, 129, 135, 140, 147, 150, 160, 168, 175, 182, 188, 195, 201, 209, 214, 218, 226, 232, 234, 241, 248, 252, 260, 269, 279, 296, 305, 313, 318, 327, 333, 340, 350, 359, 369, 379, 389, 394, 405, 416, 424, 432, 437, 445, 450, 458}
+var _SyncMarker_index = [...]uint16{0, 3, 7, 12, 18, 24, 29, 32, 38, 43, 51, 57, 60, 67, 73, 80, 83, 89, 95, 99, 106, 120, 129, 135, 140, 147, 150, 160, 168, 175, 182, 188, 195, 201, 209, 214, 218, 226, 232, 234, 241, 248, 252, 260, 269, 279, 296, 305, 313, 318, 327, 333, 340, 350, 359, 369, 379, 389, 394, 405, 416, 424, 432, 437, 445, 450, 458, 467, 472, 480}
 
 func (i SyncMarker) String() string {
 	i -= 1
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/version.go b/vendor/golang.org/x/tools/internal/pkgbits/version.go
new file mode 100644
index 00000000..53af9df2
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/pkgbits/version.go
@@ -0,0 +1,85 @@
+// Copyright 2024 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 pkgbits
+
+// Version indicates a version of a unified IR bitstream.
+// Each Version indicates the addition, removal, or change of
+// new data in the bitstream.
+//
+// These are serialized to disk and the interpretation remains fixed.
+type Version uint32
+
+const (
+	// V0: initial prototype.
+	//
+	// All data that is not assigned a Field is in version V0
+	// and has not been deprecated.
+	V0 Version = iota
+
+	// V1: adds the Flags uint32 word
+	V1
+
+	// V2: removes unused legacy fields and supports type parameters for aliases.
+	// - remove the legacy "has init" bool from the public root
+	// - remove obj's "derived func instance" bool
+	// - add a TypeParamNames field to ObjAlias
+	// - remove derived info "needed" bool
+	V2
+
+	numVersions = iota
+)
+
+// Field denotes a unit of data in the serialized unified IR bitstream.
+// It is conceptually a like field in a structure.
+//
+// We only really need Fields when the data may or may not be present
+// in a stream based on the Version of the bitstream.
+//
+// Unlike much of pkgbits, Fields are not serialized and
+// can change values as needed.
+type Field int
+
+const (
+	// Flags in a uint32 in the header of a bitstream
+	// that is used to indicate whether optional features are enabled.
+	Flags Field = iota
+
+	// Deprecated: HasInit was a bool indicating whether a package
+	// has any init functions.
+	HasInit
+
+	// Deprecated: DerivedFuncInstance was a bool indicating
+	// whether an object was a function instance.
+	DerivedFuncInstance
+
+	// ObjAlias has a list of TypeParamNames.
+	AliasTypeParamNames
+
+	// Deprecated: DerivedInfoNeeded was a bool indicating
+	// whether a type was a derived type.
+	DerivedInfoNeeded
+
+	numFields = iota
+)
+
+// introduced is the version a field was added.
+var introduced = [numFields]Version{
+	Flags:               V1,
+	AliasTypeParamNames: V2,
+}
+
+// removed is the version a field was removed in or 0 for fields
+// that have not yet been deprecated.
+// (So removed[f]-1 is the last version it is included in.)
+var removed = [numFields]Version{
+	HasInit:             V2,
+	DerivedFuncInstance: V2,
+	DerivedInfoNeeded:   V2,
+}
+
+// Has reports whether field f is present in a bitstream at version v.
+func (v Version) Has(f Field) bool {
+	return introduced[f] <= v && (v < removed[f] || removed[f] == V0)
+}
diff --git a/vendor/golang.org/x/tools/internal/stdlib/manifest.go b/vendor/golang.org/x/tools/internal/stdlib/manifest.go
index fd689207..9f0b871f 100644
--- a/vendor/golang.org/x/tools/internal/stdlib/manifest.go
+++ b/vendor/golang.org/x/tools/internal/stdlib/manifest.go
@@ -23,6 +23,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"ErrWriteAfterClose", Var, 0},
 		{"ErrWriteTooLong", Var, 0},
 		{"FileInfoHeader", Func, 1},
+		{"FileInfoNames", Type, 23},
 		{"Format", Type, 10},
 		{"FormatGNU", Const, 10},
 		{"FormatPAX", Const, 10},
@@ -267,6 +268,8 @@ var PackageSymbols = map[string][]Symbol{
 		{"ErrTooLarge", Var, 0},
 		{"Fields", Func, 0},
 		{"FieldsFunc", Func, 0},
+		{"FieldsFuncSeq", Func, 24},
+		{"FieldsSeq", Func, 24},
 		{"HasPrefix", Func, 0},
 		{"HasSuffix", Func, 0},
 		{"Index", Func, 0},
@@ -279,6 +282,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"LastIndexAny", Func, 0},
 		{"LastIndexByte", Func, 5},
 		{"LastIndexFunc", Func, 0},
+		{"Lines", Func, 24},
 		{"Map", Func, 0},
 		{"MinRead", Const, 0},
 		{"NewBuffer", Func, 0},
@@ -292,7 +296,9 @@ var PackageSymbols = map[string][]Symbol{
 		{"Split", Func, 0},
 		{"SplitAfter", Func, 0},
 		{"SplitAfterN", Func, 0},
+		{"SplitAfterSeq", Func, 24},
 		{"SplitN", Func, 0},
+		{"SplitSeq", Func, 24},
 		{"Title", Func, 0},
 		{"ToLower", Func, 0},
 		{"ToLowerSpecial", Func, 0},
@@ -534,6 +540,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"NewCTR", Func, 0},
 		{"NewGCM", Func, 2},
 		{"NewGCMWithNonceSize", Func, 5},
+		{"NewGCMWithRandomNonce", Func, 24},
 		{"NewGCMWithTagSize", Func, 11},
 		{"NewOFB", Func, 0},
 		{"Stream", Type, 0},
@@ -672,6 +679,14 @@ var PackageSymbols = map[string][]Symbol{
 		{"Unmarshal", Func, 0},
 		{"UnmarshalCompressed", Func, 15},
 	},
+	"crypto/fips140": {
+		{"Enabled", Func, 24},
+	},
+	"crypto/hkdf": {
+		{"Expand", Func, 24},
+		{"Extract", Func, 24},
+		{"Key", Func, 24},
+	},
 	"crypto/hmac": {
 		{"Equal", Func, 1},
 		{"New", Func, 0},
@@ -682,11 +697,43 @@ var PackageSymbols = map[string][]Symbol{
 		{"Size", Const, 0},
 		{"Sum", Func, 2},
 	},
+	"crypto/mlkem": {
+		{"(*DecapsulationKey1024).Bytes", Method, 24},
+		{"(*DecapsulationKey1024).Decapsulate", Method, 24},
+		{"(*DecapsulationKey1024).EncapsulationKey", Method, 24},
+		{"(*DecapsulationKey768).Bytes", Method, 24},
+		{"(*DecapsulationKey768).Decapsulate", Method, 24},
+		{"(*DecapsulationKey768).EncapsulationKey", Method, 24},
+		{"(*EncapsulationKey1024).Bytes", Method, 24},
+		{"(*EncapsulationKey1024).Encapsulate", Method, 24},
+		{"(*EncapsulationKey768).Bytes", Method, 24},
+		{"(*EncapsulationKey768).Encapsulate", Method, 24},
+		{"CiphertextSize1024", Const, 24},
+		{"CiphertextSize768", Const, 24},
+		{"DecapsulationKey1024", Type, 24},
+		{"DecapsulationKey768", Type, 24},
+		{"EncapsulationKey1024", Type, 24},
+		{"EncapsulationKey768", Type, 24},
+		{"EncapsulationKeySize1024", Const, 24},
+		{"EncapsulationKeySize768", Const, 24},
+		{"GenerateKey1024", Func, 24},
+		{"GenerateKey768", Func, 24},
+		{"NewDecapsulationKey1024", Func, 24},
+		{"NewDecapsulationKey768", Func, 24},
+		{"NewEncapsulationKey1024", Func, 24},
+		{"NewEncapsulationKey768", Func, 24},
+		{"SeedSize", Const, 24},
+		{"SharedKeySize", Const, 24},
+	},
+	"crypto/pbkdf2": {
+		{"Key", Func, 24},
+	},
 	"crypto/rand": {
 		{"Int", Func, 0},
 		{"Prime", Func, 0},
 		{"Read", Func, 0},
 		{"Reader", Var, 0},
+		{"Text", Func, 24},
 	},
 	"crypto/rc4": {
 		{"(*Cipher).Reset", Method, 0},
@@ -765,6 +812,39 @@ var PackageSymbols = map[string][]Symbol{
 		{"Sum224", Func, 2},
 		{"Sum256", Func, 2},
 	},
+	"crypto/sha3": {
+		{"(*SHA3).AppendBinary", Method, 24},
+		{"(*SHA3).BlockSize", Method, 24},
+		{"(*SHA3).MarshalBinary", Method, 24},
+		{"(*SHA3).Reset", Method, 24},
+		{"(*SHA3).Size", Method, 24},
+		{"(*SHA3).Sum", Method, 24},
+		{"(*SHA3).UnmarshalBinary", Method, 24},
+		{"(*SHA3).Write", Method, 24},
+		{"(*SHAKE).AppendBinary", Method, 24},
+		{"(*SHAKE).BlockSize", Method, 24},
+		{"(*SHAKE).MarshalBinary", Method, 24},
+		{"(*SHAKE).Read", Method, 24},
+		{"(*SHAKE).Reset", Method, 24},
+		{"(*SHAKE).UnmarshalBinary", Method, 24},
+		{"(*SHAKE).Write", Method, 24},
+		{"New224", Func, 24},
+		{"New256", Func, 24},
+		{"New384", Func, 24},
+		{"New512", Func, 24},
+		{"NewCSHAKE128", Func, 24},
+		{"NewCSHAKE256", Func, 24},
+		{"NewSHAKE128", Func, 24},
+		{"NewSHAKE256", Func, 24},
+		{"SHA3", Type, 24},
+		{"SHAKE", Type, 24},
+		{"Sum224", Func, 24},
+		{"Sum256", Func, 24},
+		{"Sum384", Func, 24},
+		{"Sum512", Func, 24},
+		{"SumSHAKE128", Func, 24},
+		{"SumSHAKE256", Func, 24},
+	},
 	"crypto/sha512": {
 		{"BlockSize", Const, 0},
 		{"New", Func, 0},
@@ -787,6 +867,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"ConstantTimeEq", Func, 0},
 		{"ConstantTimeLessOrEq", Func, 2},
 		{"ConstantTimeSelect", Func, 0},
+		{"WithDataIndependentTiming", Func, 24},
 		{"XORBytes", Func, 20},
 	},
 	"crypto/tls": {
@@ -820,6 +901,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*ConnectionState).ExportKeyingMaterial", Method, 11},
 		{"(*Dialer).Dial", Method, 15},
 		{"(*Dialer).DialContext", Method, 15},
+		{"(*ECHRejectionError).Error", Method, 23},
 		{"(*QUICConn).Close", Method, 21},
 		{"(*QUICConn).ConnectionState", Method, 21},
 		{"(*QUICConn).HandleData", Method, 21},
@@ -827,6 +909,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*QUICConn).SendSessionTicket", Method, 21},
 		{"(*QUICConn).SetTransportParameters", Method, 21},
 		{"(*QUICConn).Start", Method, 21},
+		{"(*QUICConn).StoreSession", Method, 23},
 		{"(*SessionState).Bytes", Method, 21},
 		{"(AlertError).Error", Method, 21},
 		{"(ClientAuthType).String", Method, 15},
@@ -861,6 +944,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"ClientHelloInfo", Type, 4},
 		{"ClientHelloInfo.CipherSuites", Field, 4},
 		{"ClientHelloInfo.Conn", Field, 8},
+		{"ClientHelloInfo.Extensions", Field, 24},
 		{"ClientHelloInfo.ServerName", Field, 4},
 		{"ClientHelloInfo.SignatureSchemes", Field, 8},
 		{"ClientHelloInfo.SupportedCurves", Field, 4},
@@ -877,6 +961,9 @@ var PackageSymbols = map[string][]Symbol{
 		{"Config.ClientSessionCache", Field, 3},
 		{"Config.CurvePreferences", Field, 3},
 		{"Config.DynamicRecordSizingDisabled", Field, 7},
+		{"Config.EncryptedClientHelloConfigList", Field, 23},
+		{"Config.EncryptedClientHelloKeys", Field, 24},
+		{"Config.EncryptedClientHelloRejectionVerify", Field, 23},
 		{"Config.GetCertificate", Field, 4},
 		{"Config.GetClientCertificate", Field, 8},
 		{"Config.GetConfigForClient", Field, 8},
@@ -902,6 +989,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"ConnectionState", Type, 0},
 		{"ConnectionState.CipherSuite", Field, 0},
 		{"ConnectionState.DidResume", Field, 1},
+		{"ConnectionState.ECHAccepted", Field, 23},
 		{"ConnectionState.HandshakeComplete", Field, 0},
 		{"ConnectionState.NegotiatedProtocol", Field, 0},
 		{"ConnectionState.NegotiatedProtocolIsMutual", Field, 0},
@@ -925,7 +1013,13 @@ var PackageSymbols = map[string][]Symbol{
 		{"ECDSAWithP384AndSHA384", Const, 8},
 		{"ECDSAWithP521AndSHA512", Const, 8},
 		{"ECDSAWithSHA1", Const, 10},
+		{"ECHRejectionError", Type, 23},
+		{"ECHRejectionError.RetryConfigList", Field, 23},
 		{"Ed25519", Const, 13},
+		{"EncryptedClientHelloKey", Type, 24},
+		{"EncryptedClientHelloKey.Config", Field, 24},
+		{"EncryptedClientHelloKey.PrivateKey", Field, 24},
+		{"EncryptedClientHelloKey.SendAsRetry", Field, 24},
 		{"InsecureCipherSuites", Func, 14},
 		{"Listen", Func, 0},
 		{"LoadX509KeyPair", Func, 0},
@@ -943,6 +1037,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"ParseSessionState", Func, 21},
 		{"QUICClient", Func, 21},
 		{"QUICConfig", Type, 21},
+		{"QUICConfig.EnableSessionEvents", Field, 23},
 		{"QUICConfig.TLSConfig", Field, 21},
 		{"QUICConn", Type, 21},
 		{"QUICEncryptionLevel", Type, 21},
@@ -954,16 +1049,20 @@ var PackageSymbols = map[string][]Symbol{
 		{"QUICEvent.Data", Field, 21},
 		{"QUICEvent.Kind", Field, 21},
 		{"QUICEvent.Level", Field, 21},
+		{"QUICEvent.SessionState", Field, 23},
 		{"QUICEvent.Suite", Field, 21},
 		{"QUICEventKind", Type, 21},
 		{"QUICHandshakeDone", Const, 21},
 		{"QUICNoEvent", Const, 21},
 		{"QUICRejectedEarlyData", Const, 21},
+		{"QUICResumeSession", Const, 23},
 		{"QUICServer", Func, 21},
 		{"QUICSessionTicketOptions", Type, 21},
 		{"QUICSessionTicketOptions.EarlyData", Field, 21},
+		{"QUICSessionTicketOptions.Extra", Field, 23},
 		{"QUICSetReadSecret", Const, 21},
 		{"QUICSetWriteSecret", Const, 21},
+		{"QUICStoreSession", Const, 23},
 		{"QUICTransportParameters", Const, 21},
 		{"QUICTransportParametersRequired", Const, 21},
 		{"QUICWriteData", Const, 21},
@@ -1019,6 +1118,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"VersionTLS12", Const, 2},
 		{"VersionTLS13", Const, 12},
 		{"X25519", Const, 8},
+		{"X25519MLKEM768", Const, 24},
 		{"X509KeyPair", Func, 0},
 	},
 	"crypto/x509": {
@@ -1036,13 +1136,19 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*Certificate).Verify", Method, 0},
 		{"(*Certificate).VerifyHostname", Method, 0},
 		{"(*CertificateRequest).CheckSignature", Method, 5},
+		{"(*OID).UnmarshalBinary", Method, 23},
+		{"(*OID).UnmarshalText", Method, 23},
 		{"(*RevocationList).CheckSignatureFrom", Method, 19},
 		{"(CertificateInvalidError).Error", Method, 0},
 		{"(ConstraintViolationError).Error", Method, 0},
 		{"(HostnameError).Error", Method, 0},
 		{"(InsecureAlgorithmError).Error", Method, 6},
+		{"(OID).AppendBinary", Method, 24},
+		{"(OID).AppendText", Method, 24},
 		{"(OID).Equal", Method, 22},
 		{"(OID).EqualASN1OID", Method, 22},
+		{"(OID).MarshalBinary", Method, 23},
+		{"(OID).MarshalText", Method, 23},
 		{"(OID).String", Method, 22},
 		{"(PublicKeyAlgorithm).String", Method, 10},
 		{"(SignatureAlgorithm).String", Method, 6},
@@ -1067,6 +1173,10 @@ var PackageSymbols = map[string][]Symbol{
 		{"Certificate.Extensions", Field, 2},
 		{"Certificate.ExtraExtensions", Field, 2},
 		{"Certificate.IPAddresses", Field, 1},
+		{"Certificate.InhibitAnyPolicy", Field, 24},
+		{"Certificate.InhibitAnyPolicyZero", Field, 24},
+		{"Certificate.InhibitPolicyMapping", Field, 24},
+		{"Certificate.InhibitPolicyMappingZero", Field, 24},
 		{"Certificate.IsCA", Field, 0},
 		{"Certificate.Issuer", Field, 0},
 		{"Certificate.IssuingCertificateURL", Field, 2},
@@ -1083,6 +1193,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"Certificate.PermittedURIDomains", Field, 10},
 		{"Certificate.Policies", Field, 22},
 		{"Certificate.PolicyIdentifiers", Field, 0},
+		{"Certificate.PolicyMappings", Field, 24},
 		{"Certificate.PublicKey", Field, 0},
 		{"Certificate.PublicKeyAlgorithm", Field, 0},
 		{"Certificate.Raw", Field, 0},
@@ -1090,6 +1201,8 @@ var PackageSymbols = map[string][]Symbol{
 		{"Certificate.RawSubject", Field, 0},
 		{"Certificate.RawSubjectPublicKeyInfo", Field, 0},
 		{"Certificate.RawTBSCertificate", Field, 0},
+		{"Certificate.RequireExplicitPolicy", Field, 24},
+		{"Certificate.RequireExplicitPolicyZero", Field, 24},
 		{"Certificate.SerialNumber", Field, 0},
 		{"Certificate.Signature", Field, 0},
 		{"Certificate.SignatureAlgorithm", Field, 0},
@@ -1181,6 +1294,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"NameConstraintsWithoutSANs", Const, 10},
 		{"NameMismatch", Const, 8},
 		{"NewCertPool", Func, 0},
+		{"NoValidChains", Const, 24},
 		{"NotAuthorizedToSign", Const, 0},
 		{"OID", Type, 22},
 		{"OIDFromInts", Func, 22},
@@ -1196,11 +1310,15 @@ var PackageSymbols = map[string][]Symbol{
 		{"ParseCertificates", Func, 0},
 		{"ParseDERCRL", Func, 0},
 		{"ParseECPrivateKey", Func, 1},
+		{"ParseOID", Func, 23},
 		{"ParsePKCS1PrivateKey", Func, 0},
 		{"ParsePKCS1PublicKey", Func, 10},
 		{"ParsePKCS8PrivateKey", Func, 0},
 		{"ParsePKIXPublicKey", Func, 0},
 		{"ParseRevocationList", Func, 19},
+		{"PolicyMapping", Type, 24},
+		{"PolicyMapping.IssuerDomainPolicy", Field, 24},
+		{"PolicyMapping.SubjectDomainPolicy", Field, 24},
 		{"PublicKeyAlgorithm", Type, 0},
 		{"PureEd25519", Const, 13},
 		{"RSA", Const, 0},
@@ -1247,6 +1365,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"UnknownPublicKeyAlgorithm", Const, 0},
 		{"UnknownSignatureAlgorithm", Const, 0},
 		{"VerifyOptions", Type, 0},
+		{"VerifyOptions.CertificatePolicies", Field, 24},
 		{"VerifyOptions.CurrentTime", Field, 0},
 		{"VerifyOptions.DNSName", Field, 0},
 		{"VerifyOptions.Intermediates", Field, 0},
@@ -1957,6 +2076,8 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*File).DynString", Method, 1},
 		{"(*File).DynValue", Method, 21},
 		{"(*File).DynamicSymbols", Method, 4},
+		{"(*File).DynamicVersionNeeds", Method, 24},
+		{"(*File).DynamicVersions", Method, 24},
 		{"(*File).ImportedLibraries", Method, 0},
 		{"(*File).ImportedSymbols", Method, 0},
 		{"(*File).Section", Method, 0},
@@ -2222,6 +2343,19 @@ var PackageSymbols = map[string][]Symbol{
 		{"DynFlag", Type, 0},
 		{"DynFlag1", Type, 21},
 		{"DynTag", Type, 0},
+		{"DynamicVersion", Type, 24},
+		{"DynamicVersion.Deps", Field, 24},
+		{"DynamicVersion.Flags", Field, 24},
+		{"DynamicVersion.Index", Field, 24},
+		{"DynamicVersion.Name", Field, 24},
+		{"DynamicVersionDep", Type, 24},
+		{"DynamicVersionDep.Dep", Field, 24},
+		{"DynamicVersionDep.Flags", Field, 24},
+		{"DynamicVersionDep.Index", Field, 24},
+		{"DynamicVersionFlag", Type, 24},
+		{"DynamicVersionNeed", Type, 24},
+		{"DynamicVersionNeed.Name", Field, 24},
+		{"DynamicVersionNeed.Needs", Field, 24},
 		{"EI_ABIVERSION", Const, 0},
 		{"EI_CLASS", Const, 0},
 		{"EI_DATA", Const, 0},
@@ -2541,6 +2675,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"PT_NOTE", Const, 0},
 		{"PT_NULL", Const, 0},
 		{"PT_OPENBSD_BOOTDATA", Const, 16},
+		{"PT_OPENBSD_NOBTCFI", Const, 23},
 		{"PT_OPENBSD_RANDOMIZE", Const, 16},
 		{"PT_OPENBSD_WXNEEDED", Const, 16},
 		{"PT_PAX_FLAGS", Const, 16},
@@ -3620,13 +3755,16 @@ var PackageSymbols = map[string][]Symbol{
 		{"STT_COMMON", Const, 0},
 		{"STT_FILE", Const, 0},
 		{"STT_FUNC", Const, 0},
+		{"STT_GNU_IFUNC", Const, 23},
 		{"STT_HIOS", Const, 0},
 		{"STT_HIPROC", Const, 0},
 		{"STT_LOOS", Const, 0},
 		{"STT_LOPROC", Const, 0},
 		{"STT_NOTYPE", Const, 0},
 		{"STT_OBJECT", Const, 0},
+		{"STT_RELC", Const, 23},
 		{"STT_SECTION", Const, 0},
+		{"STT_SRELC", Const, 23},
 		{"STT_TLS", Const, 0},
 		{"STV_DEFAULT", Const, 0},
 		{"STV_HIDDEN", Const, 0},
@@ -3704,8 +3842,19 @@ var PackageSymbols = map[string][]Symbol{
 		{"Symbol.Size", Field, 0},
 		{"Symbol.Value", Field, 0},
 		{"Symbol.Version", Field, 13},
+		{"Symbol.VersionIndex", Field, 24},
+		{"Symbol.VersionScope", Field, 24},
+		{"SymbolVersionScope", Type, 24},
 		{"Type", Type, 0},
+		{"VER_FLG_BASE", Const, 24},
+		{"VER_FLG_INFO", Const, 24},
+		{"VER_FLG_WEAK", Const, 24},
 		{"Version", Type, 0},
+		{"VersionScopeGlobal", Const, 24},
+		{"VersionScopeHidden", Const, 24},
+		{"VersionScopeLocal", Const, 24},
+		{"VersionScopeNone", Const, 24},
+		{"VersionScopeSpecific", Const, 24},
 	},
 	"debug/gosym": {
 		{"(*DecodingError).Error", Method, 0},
@@ -4431,8 +4580,10 @@ var PackageSymbols = map[string][]Symbol{
 		{"FS", Type, 16},
 	},
 	"encoding": {
+		{"BinaryAppender", Type, 24},
 		{"BinaryMarshaler", Type, 2},
 		{"BinaryUnmarshaler", Type, 2},
+		{"TextAppender", Type, 24},
 		{"TextMarshaler", Type, 2},
 		{"TextUnmarshaler", Type, 2},
 	},
@@ -4544,11 +4695,14 @@ var PackageSymbols = map[string][]Symbol{
 		{"URLEncoding", Var, 0},
 	},
 	"encoding/binary": {
+		{"Append", Func, 23},
 		{"AppendByteOrder", Type, 19},
 		{"AppendUvarint", Func, 19},
 		{"AppendVarint", Func, 19},
 		{"BigEndian", Var, 0},
 		{"ByteOrder", Type, 0},
+		{"Decode", Func, 23},
+		{"Encode", Func, 23},
 		{"LittleEndian", Var, 0},
 		{"MaxVarintLen16", Const, 0},
 		{"MaxVarintLen32", Const, 0},
@@ -5308,6 +5462,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"ParenExpr.Rparen", Field, 0},
 		{"ParenExpr.X", Field, 0},
 		{"Pkg", Const, 0},
+		{"Preorder", Func, 23},
 		{"Print", Func, 0},
 		{"RECV", Const, 0},
 		{"RangeStmt", Type, 0},
@@ -5898,7 +6053,12 @@ var PackageSymbols = map[string][]Symbol{
 	},
 	"go/types": {
 		{"(*Alias).Obj", Method, 22},
+		{"(*Alias).Origin", Method, 23},
+		{"(*Alias).Rhs", Method, 23},
+		{"(*Alias).SetTypeParams", Method, 23},
 		{"(*Alias).String", Method, 22},
+		{"(*Alias).TypeArgs", Method, 23},
+		{"(*Alias).TypeParams", Method, 23},
 		{"(*Alias).Underlying", Method, 22},
 		{"(*ArgumentError).Error", Method, 18},
 		{"(*ArgumentError).Unwrap", Method, 18},
@@ -5943,6 +6103,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*Func).Pkg", Method, 5},
 		{"(*Func).Pos", Method, 5},
 		{"(*Func).Scope", Method, 5},
+		{"(*Func).Signature", Method, 23},
 		{"(*Func).String", Method, 5},
 		{"(*Func).Type", Method, 5},
 		{"(*Info).ObjectOf", Method, 5},
@@ -5952,13 +6113,16 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*Interface).Complete", Method, 5},
 		{"(*Interface).Embedded", Method, 5},
 		{"(*Interface).EmbeddedType", Method, 11},
+		{"(*Interface).EmbeddedTypes", Method, 24},
 		{"(*Interface).Empty", Method, 5},
 		{"(*Interface).ExplicitMethod", Method, 5},
+		{"(*Interface).ExplicitMethods", Method, 24},
 		{"(*Interface).IsComparable", Method, 18},
 		{"(*Interface).IsImplicit", Method, 18},
 		{"(*Interface).IsMethodSet", Method, 18},
 		{"(*Interface).MarkImplicit", Method, 18},
 		{"(*Interface).Method", Method, 5},
+		{"(*Interface).Methods", Method, 24},
 		{"(*Interface).NumEmbeddeds", Method, 5},
 		{"(*Interface).NumExplicitMethods", Method, 5},
 		{"(*Interface).NumMethods", Method, 5},
@@ -5979,9 +6143,11 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*MethodSet).At", Method, 5},
 		{"(*MethodSet).Len", Method, 5},
 		{"(*MethodSet).Lookup", Method, 5},
+		{"(*MethodSet).Methods", Method, 24},
 		{"(*MethodSet).String", Method, 5},
 		{"(*Named).AddMethod", Method, 5},
 		{"(*Named).Method", Method, 5},
+		{"(*Named).Methods", Method, 24},
 		{"(*Named).NumMethods", Method, 5},
 		{"(*Named).Obj", Method, 5},
 		{"(*Named).Origin", Method, 18},
@@ -6022,6 +6188,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*Pointer).String", Method, 5},
 		{"(*Pointer).Underlying", Method, 5},
 		{"(*Scope).Child", Method, 5},
+		{"(*Scope).Children", Method, 24},
 		{"(*Scope).Contains", Method, 5},
 		{"(*Scope).End", Method, 5},
 		{"(*Scope).Innermost", Method, 5},
@@ -6057,6 +6224,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*StdSizes).Offsetsof", Method, 5},
 		{"(*StdSizes).Sizeof", Method, 5},
 		{"(*Struct).Field", Method, 5},
+		{"(*Struct).Fields", Method, 24},
 		{"(*Struct).NumFields", Method, 5},
 		{"(*Struct).String", Method, 5},
 		{"(*Struct).Tag", Method, 5},
@@ -6068,8 +6236,10 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*Tuple).Len", Method, 5},
 		{"(*Tuple).String", Method, 5},
 		{"(*Tuple).Underlying", Method, 5},
+		{"(*Tuple).Variables", Method, 24},
 		{"(*TypeList).At", Method, 18},
 		{"(*TypeList).Len", Method, 18},
+		{"(*TypeList).Types", Method, 24},
 		{"(*TypeName).Exported", Method, 5},
 		{"(*TypeName).Id", Method, 5},
 		{"(*TypeName).IsAlias", Method, 9},
@@ -6087,9 +6257,11 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*TypeParam).Underlying", Method, 18},
 		{"(*TypeParamList).At", Method, 18},
 		{"(*TypeParamList).Len", Method, 18},
+		{"(*TypeParamList).TypeParams", Method, 24},
 		{"(*Union).Len", Method, 18},
 		{"(*Union).String", Method, 18},
 		{"(*Union).Term", Method, 18},
+		{"(*Union).Terms", Method, 24},
 		{"(*Union).Underlying", Method, 18},
 		{"(*Var).Anonymous", Method, 5},
 		{"(*Var).Embedded", Method, 11},
@@ -6360,10 +6532,12 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*Hash).WriteByte", Method, 14},
 		{"(*Hash).WriteString", Method, 14},
 		{"Bytes", Func, 19},
+		{"Comparable", Func, 24},
 		{"Hash", Type, 14},
 		{"MakeSeed", Func, 14},
 		{"Seed", Type, 14},
 		{"String", Func, 19},
+		{"WriteComparable", Func, 24},
 	},
 	"html": {
 		{"EscapeString", Func, 0},
@@ -6992,6 +7166,12 @@ var PackageSymbols = map[string][]Symbol{
 		{"TempFile", Func, 0},
 		{"WriteFile", Func, 0},
 	},
+	"iter": {
+		{"Pull", Func, 23},
+		{"Pull2", Func, 23},
+		{"Seq", Type, 23},
+		{"Seq2", Type, 23},
+	},
 	"log": {
 		{"(*Logger).Fatal", Method, 0},
 		{"(*Logger).Fatalf", Method, 0},
@@ -7044,6 +7224,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*JSONHandler).WithGroup", Method, 21},
 		{"(*Level).UnmarshalJSON", Method, 21},
 		{"(*Level).UnmarshalText", Method, 21},
+		{"(*LevelVar).AppendText", Method, 24},
 		{"(*LevelVar).Level", Method, 21},
 		{"(*LevelVar).MarshalText", Method, 21},
 		{"(*LevelVar).Set", Method, 21},
@@ -7072,6 +7253,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"(Attr).Equal", Method, 21},
 		{"(Attr).String", Method, 21},
 		{"(Kind).String", Method, 21},
+		{"(Level).AppendText", Method, 24},
 		{"(Level).Level", Method, 21},
 		{"(Level).MarshalJSON", Method, 21},
 		{"(Level).MarshalText", Method, 21},
@@ -7102,6 +7284,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"Debug", Func, 21},
 		{"DebugContext", Func, 21},
 		{"Default", Func, 21},
+		{"DiscardHandler", Var, 24},
 		{"Duration", Func, 21},
 		{"DurationValue", Func, 21},
 		{"Error", Func, 21},
@@ -7222,11 +7405,16 @@ var PackageSymbols = map[string][]Symbol{
 		{"Writer", Type, 0},
 	},
 	"maps": {
+		{"All", Func, 23},
 		{"Clone", Func, 21},
+		{"Collect", Func, 23},
 		{"Copy", Func, 21},
 		{"DeleteFunc", Func, 21},
 		{"Equal", Func, 21},
 		{"EqualFunc", Func, 21},
+		{"Insert", Func, 23},
+		{"Keys", Func, 23},
+		{"Values", Func, 23},
 	},
 	"math": {
 		{"Abs", Func, 0},
@@ -7332,6 +7520,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*Float).Acc", Method, 5},
 		{"(*Float).Add", Method, 5},
 		{"(*Float).Append", Method, 5},
+		{"(*Float).AppendText", Method, 24},
 		{"(*Float).Cmp", Method, 5},
 		{"(*Float).Copy", Method, 5},
 		{"(*Float).Float32", Method, 5},
@@ -7378,6 +7567,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*Int).And", Method, 0},
 		{"(*Int).AndNot", Method, 0},
 		{"(*Int).Append", Method, 6},
+		{"(*Int).AppendText", Method, 24},
 		{"(*Int).Binomial", Method, 0},
 		{"(*Int).Bit", Method, 0},
 		{"(*Int).BitLen", Method, 0},
@@ -7434,6 +7624,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*Int).Xor", Method, 0},
 		{"(*Rat).Abs", Method, 0},
 		{"(*Rat).Add", Method, 0},
+		{"(*Rat).AppendText", Method, 24},
 		{"(*Rat).Cmp", Method, 0},
 		{"(*Rat).Denom", Method, 0},
 		{"(*Rat).Float32", Method, 4},
@@ -7616,10 +7807,13 @@ var PackageSymbols = map[string][]Symbol{
 		{"Zipf", Type, 0},
 	},
 	"math/rand/v2": {
+		{"(*ChaCha8).AppendBinary", Method, 24},
 		{"(*ChaCha8).MarshalBinary", Method, 22},
+		{"(*ChaCha8).Read", Method, 23},
 		{"(*ChaCha8).Seed", Method, 22},
 		{"(*ChaCha8).Uint64", Method, 22},
 		{"(*ChaCha8).UnmarshalBinary", Method, 22},
+		{"(*PCG).AppendBinary", Method, 24},
 		{"(*PCG).MarshalBinary", Method, 22},
 		{"(*PCG).Seed", Method, 22},
 		{"(*PCG).Uint64", Method, 22},
@@ -7636,6 +7830,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*Rand).NormFloat64", Method, 22},
 		{"(*Rand).Perm", Method, 22},
 		{"(*Rand).Shuffle", Method, 22},
+		{"(*Rand).Uint", Method, 23},
 		{"(*Rand).Uint32", Method, 22},
 		{"(*Rand).Uint32N", Method, 22},
 		{"(*Rand).Uint64", Method, 22},
@@ -7663,6 +7858,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"Rand", Type, 22},
 		{"Shuffle", Func, 22},
 		{"Source", Type, 22},
+		{"Uint", Func, 23},
 		{"Uint32", Func, 22},
 		{"Uint32N", Func, 22},
 		{"Uint64", Func, 22},
@@ -7743,6 +7939,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*DNSError).Error", Method, 0},
 		{"(*DNSError).Temporary", Method, 0},
 		{"(*DNSError).Timeout", Method, 0},
+		{"(*DNSError).Unwrap", Method, 23},
 		{"(*Dialer).Dial", Method, 1},
 		{"(*Dialer).DialContext", Method, 7},
 		{"(*Dialer).MultipathTCP", Method, 21},
@@ -7809,6 +8006,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*TCPConn).RemoteAddr", Method, 0},
 		{"(*TCPConn).SetDeadline", Method, 0},
 		{"(*TCPConn).SetKeepAlive", Method, 0},
+		{"(*TCPConn).SetKeepAliveConfig", Method, 23},
 		{"(*TCPConn).SetKeepAlivePeriod", Method, 2},
 		{"(*TCPConn).SetLinger", Method, 0},
 		{"(*TCPConn).SetNoDelay", Method, 0},
@@ -7883,6 +8081,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*UnixListener).SyscallConn", Method, 10},
 		{"(Flags).String", Method, 0},
 		{"(HardwareAddr).String", Method, 0},
+		{"(IP).AppendText", Method, 24},
 		{"(IP).DefaultMask", Method, 0},
 		{"(IP).Equal", Method, 0},
 		{"(IP).IsGlobalUnicast", Method, 0},
@@ -7922,6 +8121,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"DNSError.IsTimeout", Field, 0},
 		{"DNSError.Name", Field, 0},
 		{"DNSError.Server", Field, 0},
+		{"DNSError.UnwrapErr", Field, 23},
 		{"DefaultResolver", Var, 8},
 		{"Dial", Func, 0},
 		{"DialIP", Func, 0},
@@ -7937,6 +8137,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"Dialer.DualStack", Field, 2},
 		{"Dialer.FallbackDelay", Field, 5},
 		{"Dialer.KeepAlive", Field, 3},
+		{"Dialer.KeepAliveConfig", Field, 23},
 		{"Dialer.LocalAddr", Field, 1},
 		{"Dialer.Resolver", Field, 8},
 		{"Dialer.Timeout", Field, 1},
@@ -7989,10 +8190,16 @@ var PackageSymbols = map[string][]Symbol{
 		{"Interfaces", Func, 0},
 		{"InvalidAddrError", Type, 0},
 		{"JoinHostPort", Func, 0},
+		{"KeepAliveConfig", Type, 23},
+		{"KeepAliveConfig.Count", Field, 23},
+		{"KeepAliveConfig.Enable", Field, 23},
+		{"KeepAliveConfig.Idle", Field, 23},
+		{"KeepAliveConfig.Interval", Field, 23},
 		{"Listen", Func, 0},
 		{"ListenConfig", Type, 11},
 		{"ListenConfig.Control", Field, 11},
 		{"ListenConfig.KeepAlive", Field, 13},
+		{"ListenConfig.KeepAliveConfig", Field, 23},
 		{"ListenIP", Func, 0},
 		{"ListenMulticastUDP", Func, 0},
 		{"ListenPacket", Func, 0},
@@ -8075,12 +8282,16 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*MaxBytesError).Error", Method, 19},
 		{"(*ProtocolError).Error", Method, 0},
 		{"(*ProtocolError).Is", Method, 21},
+		{"(*Protocols).SetHTTP1", Method, 24},
+		{"(*Protocols).SetHTTP2", Method, 24},
+		{"(*Protocols).SetUnencryptedHTTP2", Method, 24},
 		{"(*Request).AddCookie", Method, 0},
 		{"(*Request).BasicAuth", Method, 4},
 		{"(*Request).Clone", Method, 13},
 		{"(*Request).Context", Method, 7},
 		{"(*Request).Cookie", Method, 0},
 		{"(*Request).Cookies", Method, 0},
+		{"(*Request).CookiesNamed", Method, 23},
 		{"(*Request).FormFile", Method, 0},
 		{"(*Request).FormValue", Method, 0},
 		{"(*Request).MultipartReader", Method, 0},
@@ -8133,6 +8344,10 @@ var PackageSymbols = map[string][]Symbol{
 		{"(Header).Values", Method, 14},
 		{"(Header).Write", Method, 0},
 		{"(Header).WriteSubset", Method, 0},
+		{"(Protocols).HTTP1", Method, 24},
+		{"(Protocols).HTTP2", Method, 24},
+		{"(Protocols).String", Method, 24},
+		{"(Protocols).UnencryptedHTTP2", Method, 24},
 		{"AllowQuerySemicolons", Func, 17},
 		{"CanonicalHeaderKey", Func, 0},
 		{"Client", Type, 0},
@@ -8148,7 +8363,9 @@ var PackageSymbols = map[string][]Symbol{
 		{"Cookie.HttpOnly", Field, 0},
 		{"Cookie.MaxAge", Field, 0},
 		{"Cookie.Name", Field, 0},
+		{"Cookie.Partitioned", Field, 23},
 		{"Cookie.Path", Field, 0},
+		{"Cookie.Quoted", Field, 23},
 		{"Cookie.Raw", Field, 0},
 		{"Cookie.RawExpires", Field, 0},
 		{"Cookie.SameSite", Field, 11},
@@ -8193,6 +8410,18 @@ var PackageSymbols = map[string][]Symbol{
 		{"FileSystem", Type, 0},
 		{"Flusher", Type, 0},
 		{"Get", Func, 0},
+		{"HTTP2Config", Type, 24},
+		{"HTTP2Config.CountError", Field, 24},
+		{"HTTP2Config.MaxConcurrentStreams", Field, 24},
+		{"HTTP2Config.MaxDecoderHeaderTableSize", Field, 24},
+		{"HTTP2Config.MaxEncoderHeaderTableSize", Field, 24},
+		{"HTTP2Config.MaxReadFrameSize", Field, 24},
+		{"HTTP2Config.MaxReceiveBufferPerConnection", Field, 24},
+		{"HTTP2Config.MaxReceiveBufferPerStream", Field, 24},
+		{"HTTP2Config.PermitProhibitedCipherSuites", Field, 24},
+		{"HTTP2Config.PingTimeout", Field, 24},
+		{"HTTP2Config.SendPingTimeout", Field, 24},
+		{"HTTP2Config.WriteByteTimeout", Field, 24},
 		{"Handle", Func, 0},
 		{"HandleFunc", Func, 0},
 		{"Handler", Type, 0},
@@ -8225,12 +8454,15 @@ var PackageSymbols = map[string][]Symbol{
 		{"NoBody", Var, 8},
 		{"NotFound", Func, 0},
 		{"NotFoundHandler", Func, 0},
+		{"ParseCookie", Func, 23},
 		{"ParseHTTPVersion", Func, 0},
+		{"ParseSetCookie", Func, 23},
 		{"ParseTime", Func, 1},
 		{"Post", Func, 0},
 		{"PostForm", Func, 0},
 		{"ProtocolError", Type, 0},
 		{"ProtocolError.ErrorString", Field, 0},
+		{"Protocols", Type, 24},
 		{"ProxyFromEnvironment", Func, 0},
 		{"ProxyURL", Func, 0},
 		{"PushOptions", Type, 8},
@@ -8252,6 +8484,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"Request.Host", Field, 0},
 		{"Request.Method", Field, 0},
 		{"Request.MultipartForm", Field, 0},
+		{"Request.Pattern", Field, 23},
 		{"Request.PostForm", Field, 1},
 		{"Request.Proto", Field, 0},
 		{"Request.ProtoMajor", Field, 0},
@@ -8299,9 +8532,11 @@ var PackageSymbols = map[string][]Symbol{
 		{"Server.ConnState", Field, 3},
 		{"Server.DisableGeneralOptionsHandler", Field, 20},
 		{"Server.ErrorLog", Field, 3},
+		{"Server.HTTP2", Field, 24},
 		{"Server.Handler", Field, 0},
 		{"Server.IdleTimeout", Field, 8},
 		{"Server.MaxHeaderBytes", Field, 0},
+		{"Server.Protocols", Field, 24},
 		{"Server.ReadHeaderTimeout", Field, 8},
 		{"Server.ReadTimeout", Field, 0},
 		{"Server.TLSConfig", Field, 0},
@@ -8391,12 +8626,14 @@ var PackageSymbols = map[string][]Symbol{
 		{"Transport.ExpectContinueTimeout", Field, 6},
 		{"Transport.ForceAttemptHTTP2", Field, 13},
 		{"Transport.GetProxyConnectHeader", Field, 16},
+		{"Transport.HTTP2", Field, 24},
 		{"Transport.IdleConnTimeout", Field, 7},
 		{"Transport.MaxConnsPerHost", Field, 11},
 		{"Transport.MaxIdleConns", Field, 7},
 		{"Transport.MaxIdleConnsPerHost", Field, 0},
 		{"Transport.MaxResponseHeaderBytes", Field, 7},
 		{"Transport.OnProxyConnectResponse", Field, 20},
+		{"Transport.Protocols", Field, 24},
 		{"Transport.Proxy", Field, 0},
 		{"Transport.ProxyConnectHeader", Field, 8},
 		{"Transport.ReadBufferSize", Field, 13},
@@ -8453,6 +8690,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"DefaultRemoteAddr", Const, 0},
 		{"NewRecorder", Func, 0},
 		{"NewRequest", Func, 7},
+		{"NewRequestWithContext", Func, 23},
 		{"NewServer", Func, 0},
 		{"NewTLSServer", Func, 0},
 		{"NewUnstartedServer", Func, 0},
@@ -8583,6 +8821,8 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*AddrPort).UnmarshalText", Method, 18},
 		{"(*Prefix).UnmarshalBinary", Method, 18},
 		{"(*Prefix).UnmarshalText", Method, 18},
+		{"(Addr).AppendBinary", Method, 24},
+		{"(Addr).AppendText", Method, 24},
 		{"(Addr).AppendTo", Method, 18},
 		{"(Addr).As16", Method, 18},
 		{"(Addr).As4", Method, 18},
@@ -8613,6 +8853,8 @@ var PackageSymbols = map[string][]Symbol{
 		{"(Addr).WithZone", Method, 18},
 		{"(Addr).Zone", Method, 18},
 		{"(AddrPort).Addr", Method, 18},
+		{"(AddrPort).AppendBinary", Method, 24},
+		{"(AddrPort).AppendText", Method, 24},
 		{"(AddrPort).AppendTo", Method, 18},
 		{"(AddrPort).Compare", Method, 22},
 		{"(AddrPort).IsValid", Method, 18},
@@ -8621,6 +8863,8 @@ var PackageSymbols = map[string][]Symbol{
 		{"(AddrPort).Port", Method, 18},
 		{"(AddrPort).String", Method, 18},
 		{"(Prefix).Addr", Method, 18},
+		{"(Prefix).AppendBinary", Method, 24},
+		{"(Prefix).AppendText", Method, 24},
 		{"(Prefix).AppendTo", Method, 18},
 		{"(Prefix).Bits", Method, 18},
 		{"(Prefix).Contains", Method, 18},
@@ -8805,6 +9049,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*Error).Temporary", Method, 6},
 		{"(*Error).Timeout", Method, 6},
 		{"(*Error).Unwrap", Method, 13},
+		{"(*URL).AppendBinary", Method, 24},
 		{"(*URL).EscapedFragment", Method, 15},
 		{"(*URL).EscapedPath", Method, 5},
 		{"(*URL).Hostname", Method, 8},
@@ -8904,6 +9149,17 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*ProcessState).SysUsage", Method, 0},
 		{"(*ProcessState).SystemTime", Method, 0},
 		{"(*ProcessState).UserTime", Method, 0},
+		{"(*Root).Close", Method, 24},
+		{"(*Root).Create", Method, 24},
+		{"(*Root).FS", Method, 24},
+		{"(*Root).Lstat", Method, 24},
+		{"(*Root).Mkdir", Method, 24},
+		{"(*Root).Name", Method, 24},
+		{"(*Root).Open", Method, 24},
+		{"(*Root).OpenFile", Method, 24},
+		{"(*Root).OpenRoot", Method, 24},
+		{"(*Root).Remove", Method, 24},
+		{"(*Root).Stat", Method, 24},
 		{"(*SyscallError).Error", Method, 0},
 		{"(*SyscallError).Timeout", Method, 10},
 		{"(*SyscallError).Unwrap", Method, 13},
@@ -8917,6 +9173,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"Chown", Func, 0},
 		{"Chtimes", Func, 0},
 		{"Clearenv", Func, 0},
+		{"CopyFS", Func, 23},
 		{"Create", Func, 0},
 		{"CreateTemp", Func, 16},
 		{"DevNull", Const, 0},
@@ -8996,6 +9253,8 @@ var PackageSymbols = map[string][]Symbol{
 		{"O_WRONLY", Const, 0},
 		{"Open", Func, 0},
 		{"OpenFile", Func, 0},
+		{"OpenInRoot", Func, 24},
+		{"OpenRoot", Func, 24},
 		{"PathError", Type, 0},
 		{"PathError.Err", Field, 0},
 		{"PathError.Op", Field, 0},
@@ -9017,6 +9276,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"Remove", Func, 0},
 		{"RemoveAll", Func, 0},
 		{"Rename", Func, 0},
+		{"Root", Type, 24},
 		{"SEEK_CUR", Const, 0},
 		{"SEEK_END", Const, 0},
 		{"SEEK_SET", Const, 0},
@@ -9150,6 +9410,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"IsLocal", Func, 20},
 		{"Join", Func, 0},
 		{"ListSeparator", Const, 0},
+		{"Localize", Func, 23},
 		{"Match", Func, 0},
 		{"Rel", Func, 0},
 		{"Separator", Const, 0},
@@ -9232,6 +9493,8 @@ var PackageSymbols = map[string][]Symbol{
 		{"(Value).Pointer", Method, 0},
 		{"(Value).Recv", Method, 0},
 		{"(Value).Send", Method, 0},
+		{"(Value).Seq", Method, 23},
+		{"(Value).Seq2", Method, 23},
 		{"(Value).Set", Method, 0},
 		{"(Value).SetBool", Method, 0},
 		{"(Value).SetBytes", Method, 0},
@@ -9314,6 +9577,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"SelectSend", Const, 1},
 		{"SendDir", Const, 0},
 		{"Slice", Const, 0},
+		{"SliceAt", Func, 23},
 		{"SliceHeader", Type, 0},
 		{"SliceHeader.Cap", Field, 0},
 		{"SliceHeader.Data", Field, 0},
@@ -9354,6 +9618,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"Zero", Func, 0},
 	},
 	"regexp": {
+		{"(*Regexp).AppendText", Method, 24},
 		{"(*Regexp).Copy", Method, 6},
 		{"(*Regexp).Expand", Method, 0},
 		{"(*Regexp).ExpandString", Method, 0},
@@ -9534,6 +9799,8 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*StackRecord).Stack", Method, 0},
 		{"(*TypeAssertionError).Error", Method, 0},
 		{"(*TypeAssertionError).RuntimeError", Method, 0},
+		{"(Cleanup).Stop", Method, 24},
+		{"AddCleanup", Func, 24},
 		{"BlockProfile", Func, 1},
 		{"BlockProfileRecord", Type, 1},
 		{"BlockProfileRecord.Count", Field, 1},
@@ -9544,6 +9811,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"Caller", Func, 0},
 		{"Callers", Func, 0},
 		{"CallersFrames", Func, 7},
+		{"Cleanup", Type, 24},
 		{"Compiler", Const, 0},
 		{"Error", Type, 0},
 		{"Frame", Type, 7},
@@ -9655,6 +9923,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"BuildSetting", Type, 18},
 		{"BuildSetting.Key", Field, 18},
 		{"BuildSetting.Value", Field, 18},
+		{"CrashOptions", Type, 23},
 		{"FreeOSMemory", Func, 1},
 		{"GCStats", Type, 1},
 		{"GCStats.LastGC", Field, 1},
@@ -9672,6 +9941,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"PrintStack", Func, 0},
 		{"ReadBuildInfo", Func, 12},
 		{"ReadGCStats", Func, 1},
+		{"SetCrashOutput", Func, 23},
 		{"SetGCPercent", Func, 1},
 		{"SetMaxStack", Func, 2},
 		{"SetMaxThreads", Func, 2},
@@ -9742,10 +10012,15 @@ var PackageSymbols = map[string][]Symbol{
 		{"WithRegion", Func, 11},
 	},
 	"slices": {
+		{"All", Func, 23},
+		{"AppendSeq", Func, 23},
+		{"Backward", Func, 23},
 		{"BinarySearch", Func, 21},
 		{"BinarySearchFunc", Func, 21},
+		{"Chunk", Func, 23},
 		{"Clip", Func, 21},
 		{"Clone", Func, 21},
+		{"Collect", Func, 23},
 		{"Compact", Func, 21},
 		{"CompactFunc", Func, 21},
 		{"Compare", Func, 21},
@@ -9767,11 +10042,16 @@ var PackageSymbols = map[string][]Symbol{
 		{"MaxFunc", Func, 21},
 		{"Min", Func, 21},
 		{"MinFunc", Func, 21},
+		{"Repeat", Func, 23},
 		{"Replace", Func, 21},
 		{"Reverse", Func, 21},
 		{"Sort", Func, 21},
 		{"SortFunc", Func, 21},
 		{"SortStableFunc", Func, 21},
+		{"Sorted", Func, 23},
+		{"SortedFunc", Func, 23},
+		{"SortedStableFunc", Func, 23},
+		{"Values", Func, 23},
 	},
 	"sort": {
 		{"(Float64Slice).Len", Method, 0},
@@ -9894,6 +10174,8 @@ var PackageSymbols = map[string][]Symbol{
 		{"EqualFold", Func, 0},
 		{"Fields", Func, 0},
 		{"FieldsFunc", Func, 0},
+		{"FieldsFuncSeq", Func, 24},
+		{"FieldsSeq", Func, 24},
 		{"HasPrefix", Func, 0},
 		{"HasSuffix", Func, 0},
 		{"Index", Func, 0},
@@ -9906,6 +10188,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"LastIndexAny", Func, 0},
 		{"LastIndexByte", Func, 5},
 		{"LastIndexFunc", Func, 0},
+		{"Lines", Func, 24},
 		{"Map", Func, 0},
 		{"NewReader", Func, 0},
 		{"NewReplacer", Func, 0},
@@ -9917,7 +10200,9 @@ var PackageSymbols = map[string][]Symbol{
 		{"Split", Func, 0},
 		{"SplitAfter", Func, 0},
 		{"SplitAfterN", Func, 0},
+		{"SplitAfterSeq", Func, 24},
 		{"SplitN", Func, 0},
+		{"SplitSeq", Func, 24},
 		{"Title", Func, 0},
 		{"ToLower", Func, 0},
 		{"ToLowerSpecial", Func, 0},
@@ -9936,10 +10221,14 @@ var PackageSymbols = map[string][]Symbol{
 		{"TrimSpace", Func, 0},
 		{"TrimSuffix", Func, 1},
 	},
+	"structs": {
+		{"HostLayout", Type, 23},
+	},
 	"sync": {
 		{"(*Cond).Broadcast", Method, 0},
 		{"(*Cond).Signal", Method, 0},
 		{"(*Cond).Wait", Method, 0},
+		{"(*Map).Clear", Method, 23},
 		{"(*Map).CompareAndDelete", Method, 20},
 		{"(*Map).CompareAndSwap", Method, 20},
 		{"(*Map).Delete", Method, 9},
@@ -9986,13 +10275,17 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*Bool).Store", Method, 19},
 		{"(*Bool).Swap", Method, 19},
 		{"(*Int32).Add", Method, 19},
+		{"(*Int32).And", Method, 23},
 		{"(*Int32).CompareAndSwap", Method, 19},
 		{"(*Int32).Load", Method, 19},
+		{"(*Int32).Or", Method, 23},
 		{"(*Int32).Store", Method, 19},
 		{"(*Int32).Swap", Method, 19},
 		{"(*Int64).Add", Method, 19},
+		{"(*Int64).And", Method, 23},
 		{"(*Int64).CompareAndSwap", Method, 19},
 		{"(*Int64).Load", Method, 19},
+		{"(*Int64).Or", Method, 23},
 		{"(*Int64).Store", Method, 19},
 		{"(*Int64).Swap", Method, 19},
 		{"(*Pointer).CompareAndSwap", Method, 19},
@@ -10000,18 +10293,24 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*Pointer).Store", Method, 19},
 		{"(*Pointer).Swap", Method, 19},
 		{"(*Uint32).Add", Method, 19},
+		{"(*Uint32).And", Method, 23},
 		{"(*Uint32).CompareAndSwap", Method, 19},
 		{"(*Uint32).Load", Method, 19},
+		{"(*Uint32).Or", Method, 23},
 		{"(*Uint32).Store", Method, 19},
 		{"(*Uint32).Swap", Method, 19},
 		{"(*Uint64).Add", Method, 19},
+		{"(*Uint64).And", Method, 23},
 		{"(*Uint64).CompareAndSwap", Method, 19},
 		{"(*Uint64).Load", Method, 19},
+		{"(*Uint64).Or", Method, 23},
 		{"(*Uint64).Store", Method, 19},
 		{"(*Uint64).Swap", Method, 19},
 		{"(*Uintptr).Add", Method, 19},
+		{"(*Uintptr).And", Method, 23},
 		{"(*Uintptr).CompareAndSwap", Method, 19},
 		{"(*Uintptr).Load", Method, 19},
+		{"(*Uintptr).Or", Method, 23},
 		{"(*Uintptr).Store", Method, 19},
 		{"(*Uintptr).Swap", Method, 19},
 		{"(*Value).CompareAndSwap", Method, 17},
@@ -10023,6 +10322,11 @@ var PackageSymbols = map[string][]Symbol{
 		{"AddUint32", Func, 0},
 		{"AddUint64", Func, 0},
 		{"AddUintptr", Func, 0},
+		{"AndInt32", Func, 23},
+		{"AndInt64", Func, 23},
+		{"AndUint32", Func, 23},
+		{"AndUint64", Func, 23},
+		{"AndUintptr", Func, 23},
 		{"Bool", Type, 19},
 		{"CompareAndSwapInt32", Func, 0},
 		{"CompareAndSwapInt64", Func, 0},
@@ -10038,6 +10342,11 @@ var PackageSymbols = map[string][]Symbol{
 		{"LoadUint32", Func, 0},
 		{"LoadUint64", Func, 0},
 		{"LoadUintptr", Func, 0},
+		{"OrInt32", Func, 23},
+		{"OrInt64", Func, 23},
+		{"OrUint32", Func, 23},
+		{"OrUint64", Func, 23},
+		{"OrUintptr", Func, 23},
 		{"Pointer", Type, 19},
 		{"StoreInt32", Func, 0},
 		{"StoreInt64", Func, 0},
@@ -16200,6 +16509,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"WSAEACCES", Const, 2},
 		{"WSAECONNABORTED", Const, 9},
 		{"WSAECONNRESET", Const, 3},
+		{"WSAENOPROTOOPT", Const, 23},
 		{"WSAEnumProtocols", Func, 2},
 		{"WSAID_CONNECTEX", Var, 1},
 		{"WSAIoctl", Func, 0},
@@ -16308,7 +16618,9 @@ var PackageSymbols = map[string][]Symbol{
 		{"ValueOf", Func, 0},
 	},
 	"testing": {
+		{"(*B).Chdir", Method, 24},
 		{"(*B).Cleanup", Method, 14},
+		{"(*B).Context", Method, 24},
 		{"(*B).Elapsed", Method, 20},
 		{"(*B).Error", Method, 0},
 		{"(*B).Errorf", Method, 0},
@@ -16320,6 +16632,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*B).Helper", Method, 9},
 		{"(*B).Log", Method, 0},
 		{"(*B).Logf", Method, 0},
+		{"(*B).Loop", Method, 24},
 		{"(*B).Name", Method, 8},
 		{"(*B).ReportAllocs", Method, 1},
 		{"(*B).ReportMetric", Method, 13},
@@ -16337,7 +16650,9 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*B).StopTimer", Method, 0},
 		{"(*B).TempDir", Method, 15},
 		{"(*F).Add", Method, 18},
+		{"(*F).Chdir", Method, 24},
 		{"(*F).Cleanup", Method, 18},
+		{"(*F).Context", Method, 24},
 		{"(*F).Error", Method, 18},
 		{"(*F).Errorf", Method, 18},
 		{"(*F).Fail", Method, 18},
@@ -16358,7 +16673,9 @@ var PackageSymbols = map[string][]Symbol{
 		{"(*F).TempDir", Method, 18},
 		{"(*M).Run", Method, 4},
 		{"(*PB).Next", Method, 3},
+		{"(*T).Chdir", Method, 24},
 		{"(*T).Cleanup", Method, 14},
+		{"(*T).Context", Method, 24},
 		{"(*T).Deadline", Method, 15},
 		{"(*T).Error", Method, 0},
 		{"(*T).Errorf", Method, 0},
@@ -16849,7 +17166,9 @@ var PackageSymbols = map[string][]Symbol{
 		{"(Time).Add", Method, 0},
 		{"(Time).AddDate", Method, 0},
 		{"(Time).After", Method, 0},
+		{"(Time).AppendBinary", Method, 24},
 		{"(Time).AppendFormat", Method, 5},
+		{"(Time).AppendText", Method, 24},
 		{"(Time).Before", Method, 0},
 		{"(Time).Clock", Method, 0},
 		{"(Time).Compare", Method, 20},
@@ -17284,6 +17603,7 @@ var PackageSymbols = map[string][]Symbol{
 		{"Encode", Func, 0},
 		{"EncodeRune", Func, 0},
 		{"IsSurrogate", Func, 0},
+		{"RuneLen", Func, 23},
 	},
 	"unicode/utf8": {
 		{"AppendRune", Func, 18},
@@ -17306,6 +17626,11 @@ var PackageSymbols = map[string][]Symbol{
 		{"ValidRune", Func, 1},
 		{"ValidString", Func, 0},
 	},
+	"unique": {
+		{"(Handle).Value", Method, 23},
+		{"Handle", Type, 23},
+		{"Make", Func, 23},
+	},
 	"unsafe": {
 		{"Add", Func, 0},
 		{"Alignof", Func, 0},
@@ -17317,4 +17642,9 @@ var PackageSymbols = map[string][]Symbol{
 		{"String", Func, 0},
 		{"StringData", Func, 0},
 	},
+	"weak": {
+		{"(Pointer).Value", Method, 24},
+		{"Make", Func, 24},
+		{"Pointer", Type, 24},
+	},
 }
diff --git a/vendor/golang.org/x/tools/internal/tokeninternal/tokeninternal.go b/vendor/golang.org/x/tools/internal/tokeninternal/tokeninternal.go
deleted file mode 100644
index ff9437a3..00000000
--- a/vendor/golang.org/x/tools/internal/tokeninternal/tokeninternal.go
+++ /dev/null
@@ -1,137 +0,0 @@
-// Copyright 2023 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 tokeninternal provides access to some internal features of the token
-// package.
-package tokeninternal
-
-import (
-	"fmt"
-	"go/token"
-	"sort"
-	"sync"
-	"unsafe"
-)
-
-// GetLines returns the table of line-start offsets from a token.File.
-func GetLines(file *token.File) []int {
-	// token.File has a Lines method on Go 1.21 and later.
-	if file, ok := (interface{})(file).(interface{ Lines() []int }); ok {
-		return file.Lines()
-	}
-
-	// This declaration must match that of token.File.
-	// This creates a risk of dependency skew.
-	// For now we check that the size of the two
-	// declarations is the same, on the (fragile) assumption
-	// that future changes would add fields.
-	type tokenFile119 struct {
-		_     string
-		_     int
-		_     int
-		mu    sync.Mutex // we're not complete monsters
-		lines []int
-		_     []struct{}
-	}
-
-	if unsafe.Sizeof(*file) != unsafe.Sizeof(tokenFile119{}) {
-		panic("unexpected token.File size")
-	}
-	var ptr *tokenFile119
-	type uP = unsafe.Pointer
-	*(*uP)(uP(&ptr)) = uP(file)
-	ptr.mu.Lock()
-	defer ptr.mu.Unlock()
-	return ptr.lines
-}
-
-// AddExistingFiles adds the specified files to the FileSet if they
-// are not already present. It panics if any pair of files in the
-// resulting FileSet would overlap.
-func AddExistingFiles(fset *token.FileSet, files []*token.File) {
-	// Punch through the FileSet encapsulation.
-	type tokenFileSet struct {
-		// This type remained essentially consistent from go1.16 to go1.21.
-		mutex sync.RWMutex
-		base  int
-		files []*token.File
-		_     *token.File // changed to atomic.Pointer[token.File] in go1.19
-	}
-
-	// If the size of token.FileSet changes, this will fail to compile.
-	const delta = int64(unsafe.Sizeof(tokenFileSet{})) - int64(unsafe.Sizeof(token.FileSet{}))
-	var _ [-delta * delta]int
-
-	type uP = unsafe.Pointer
-	var ptr *tokenFileSet
-	*(*uP)(uP(&ptr)) = uP(fset)
-	ptr.mutex.Lock()
-	defer ptr.mutex.Unlock()
-
-	// Merge and sort.
-	newFiles := append(ptr.files, files...)
-	sort.Slice(newFiles, func(i, j int) bool {
-		return newFiles[i].Base() < newFiles[j].Base()
-	})
-
-	// Reject overlapping files.
-	// Discard adjacent identical files.
-	out := newFiles[:0]
-	for i, file := range newFiles {
-		if i > 0 {
-			prev := newFiles[i-1]
-			if file == prev {
-				continue
-			}
-			if prev.Base()+prev.Size()+1 > file.Base() {
-				panic(fmt.Sprintf("file %s (%d-%d) overlaps with file %s (%d-%d)",
-					prev.Name(), prev.Base(), prev.Base()+prev.Size(),
-					file.Name(), file.Base(), file.Base()+file.Size()))
-			}
-		}
-		out = append(out, file)
-	}
-	newFiles = out
-
-	ptr.files = newFiles
-
-	// Advance FileSet.Base().
-	if len(newFiles) > 0 {
-		last := newFiles[len(newFiles)-1]
-		newBase := last.Base() + last.Size() + 1
-		if ptr.base < newBase {
-			ptr.base = newBase
-		}
-	}
-}
-
-// FileSetFor returns a new FileSet containing a sequence of new Files with
-// the same base, size, and line as the input files, for use in APIs that
-// require a FileSet.
-//
-// Precondition: the input files must be non-overlapping, and sorted in order
-// of their Base.
-func FileSetFor(files ...*token.File) *token.FileSet {
-	fset := token.NewFileSet()
-	for _, f := range files {
-		f2 := fset.AddFile(f.Name(), f.Base(), f.Size())
-		lines := GetLines(f)
-		f2.SetLines(lines)
-	}
-	return fset
-}
-
-// CloneFileSet creates a new FileSet holding all files in fset. It does not
-// create copies of the token.Files in fset: they are added to the resulting
-// FileSet unmodified.
-func CloneFileSet(fset *token.FileSet) *token.FileSet {
-	var files []*token.File
-	fset.Iterate(func(f *token.File) bool {
-		files = append(files, f)
-		return true
-	})
-	newFileSet := token.NewFileSet()
-	AddExistingFiles(newFileSet, files)
-	return newFileSet
-}
diff --git a/vendor/golang.org/x/tools/internal/typeparams/common.go b/vendor/golang.org/x/tools/internal/typeparams/common.go
new file mode 100644
index 00000000..cdae2b8e
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typeparams/common.go
@@ -0,0 +1,68 @@
+// Copyright 2021 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 typeparams contains common utilities for writing tools that
+// interact with generic Go code, as introduced with Go 1.18. It
+// supplements the standard library APIs. Notably, the StructuralTerms
+// API computes a minimal representation of the structural
+// restrictions on a type parameter.
+//
+// An external version of these APIs is available in the
+// golang.org/x/exp/typeparams module.
+package typeparams
+
+import (
+	"go/ast"
+	"go/token"
+	"go/types"
+)
+
+// UnpackIndexExpr extracts data from AST nodes that represent index
+// expressions.
+//
+// For an ast.IndexExpr, the resulting indices slice will contain exactly one
+// index expression. For an ast.IndexListExpr (go1.18+), it may have a variable
+// number of index expressions.
+//
+// For nodes that don't represent index expressions, the first return value of
+// UnpackIndexExpr will be nil.
+func UnpackIndexExpr(n ast.Node) (x ast.Expr, lbrack token.Pos, indices []ast.Expr, rbrack token.Pos) {
+	switch e := n.(type) {
+	case *ast.IndexExpr:
+		return e.X, e.Lbrack, []ast.Expr{e.Index}, e.Rbrack
+	case *ast.IndexListExpr:
+		return e.X, e.Lbrack, e.Indices, e.Rbrack
+	}
+	return nil, token.NoPos, nil, token.NoPos
+}
+
+// PackIndexExpr returns an *ast.IndexExpr or *ast.IndexListExpr, depending on
+// the cardinality of indices. Calling PackIndexExpr with len(indices) == 0
+// will panic.
+func PackIndexExpr(x ast.Expr, lbrack token.Pos, indices []ast.Expr, rbrack token.Pos) ast.Expr {
+	switch len(indices) {
+	case 0:
+		panic("empty indices")
+	case 1:
+		return &ast.IndexExpr{
+			X:      x,
+			Lbrack: lbrack,
+			Index:  indices[0],
+			Rbrack: rbrack,
+		}
+	default:
+		return &ast.IndexListExpr{
+			X:       x,
+			Lbrack:  lbrack,
+			Indices: indices,
+			Rbrack:  rbrack,
+		}
+	}
+}
+
+// IsTypeParam reports whether t is a type parameter (or an alias of one).
+func IsTypeParam(t types.Type) bool {
+	_, ok := types.Unalias(t).(*types.TypeParam)
+	return ok
+}
diff --git a/vendor/golang.org/x/tools/internal/typeparams/coretype.go b/vendor/golang.org/x/tools/internal/typeparams/coretype.go
new file mode 100644
index 00000000..27a2b179
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typeparams/coretype.go
@@ -0,0 +1,155 @@
+// Copyright 2022 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 typeparams
+
+import (
+	"fmt"
+	"go/types"
+)
+
+// CoreType returns the core type of T or nil if T does not have a core type.
+//
+// See https://go.dev/ref/spec#Core_types for the definition of a core type.
+func CoreType(T types.Type) types.Type {
+	U := T.Underlying()
+	if _, ok := U.(*types.Interface); !ok {
+		return U // for non-interface types,
+	}
+
+	terms, err := NormalTerms(U)
+	if len(terms) == 0 || err != nil {
+		// len(terms) -> empty type set of interface.
+		// err != nil => U is invalid, exceeds complexity bounds, or has an empty type set.
+		return nil // no core type.
+	}
+
+	U = terms[0].Type().Underlying()
+	var identical int // i in [0,identical) => Identical(U, terms[i].Type().Underlying())
+	for identical = 1; identical < len(terms); identical++ {
+		if !types.Identical(U, terms[identical].Type().Underlying()) {
+			break
+		}
+	}
+
+	if identical == len(terms) {
+		// https://go.dev/ref/spec#Core_types
+		// "There is a single type U which is the underlying type of all types in the type set of T"
+		return U
+	}
+	ch, ok := U.(*types.Chan)
+	if !ok {
+		return nil // no core type as identical < len(terms) and U is not a channel.
+	}
+	// https://go.dev/ref/spec#Core_types
+	// "the type chan E if T contains only bidirectional channels, or the type chan<- E or
+	// <-chan E depending on the direction of the directional channels present."
+	for chans := identical; chans < len(terms); chans++ {
+		curr, ok := terms[chans].Type().Underlying().(*types.Chan)
+		if !ok {
+			return nil
+		}
+		if !types.Identical(ch.Elem(), curr.Elem()) {
+			return nil // channel elements are not identical.
+		}
+		if ch.Dir() == types.SendRecv {
+			// ch is bidirectional. We can safely always use curr's direction.
+			ch = curr
+		} else if curr.Dir() != types.SendRecv && ch.Dir() != curr.Dir() {
+			// ch and curr are not bidirectional and not the same direction.
+			return nil
+		}
+	}
+	return ch
+}
+
+// NormalTerms returns a slice of terms representing the normalized structural
+// type restrictions of a type, if any.
+//
+// For all types other than *types.TypeParam, *types.Interface, and
+// *types.Union, this is just a single term with Tilde() == false and
+// Type() == typ. For *types.TypeParam, *types.Interface, and *types.Union, see
+// below.
+//
+// Structural type restrictions of a type parameter are created via
+// non-interface types embedded in its constraint interface (directly, or via a
+// chain of interface embeddings). For example, in the declaration type
+// T[P interface{~int; m()}] int the structural restriction of the type
+// parameter P is ~int.
+//
+// With interface embedding and unions, the specification of structural type
+// restrictions may be arbitrarily complex. For example, consider the
+// following:
+//
+//	type A interface{ ~string|~[]byte }
+//
+//	type B interface{ int|string }
+//
+//	type C interface { ~string|~int }
+//
+//	type T[P interface{ A|B; C }] int
+//
+// In this example, the structural type restriction of P is ~string|int: A|B
+// expands to ~string|~[]byte|int|string, which reduces to ~string|~[]byte|int,
+// which when intersected with C (~string|~int) yields ~string|int.
+//
+// NormalTerms computes these expansions and reductions, producing a
+// "normalized" form of the embeddings. A structural restriction is normalized
+// if it is a single union containing no interface terms, and is minimal in the
+// sense that removing any term changes the set of types satisfying the
+// constraint. It is left as a proof for the reader that, modulo sorting, there
+// is exactly one such normalized form.
+//
+// Because the minimal representation always takes this form, NormalTerms
+// returns a slice of tilde terms corresponding to the terms of the union in
+// the normalized structural restriction. An error is returned if the type is
+// invalid, exceeds complexity bounds, or has an empty type set. In the latter
+// case, NormalTerms returns ErrEmptyTypeSet.
+//
+// NormalTerms makes no guarantees about the order of terms, except that it
+// is deterministic.
+func NormalTerms(T types.Type) ([]*types.Term, error) {
+	// typeSetOf(T) == typeSetOf(Unalias(T))
+	typ := types.Unalias(T)
+	if named, ok := typ.(*types.Named); ok {
+		typ = named.Underlying()
+	}
+	switch typ := typ.(type) {
+	case *types.TypeParam:
+		return StructuralTerms(typ)
+	case *types.Union:
+		return UnionTermSet(typ)
+	case *types.Interface:
+		return InterfaceTermSet(typ)
+	default:
+		return []*types.Term{types.NewTerm(false, T)}, nil
+	}
+}
+
+// Deref returns the type of the variable pointed to by t,
+// if t's core type is a pointer; otherwise it returns t.
+//
+// Do not assume that Deref(T)==T implies T is not a pointer:
+// consider "type T *T", for example.
+//
+// TODO(adonovan): ideally this would live in typesinternal, but that
+// creates an import cycle. Move there when we melt this package down.
+func Deref(t types.Type) types.Type {
+	if ptr, ok := CoreType(t).(*types.Pointer); ok {
+		return ptr.Elem()
+	}
+	return t
+}
+
+// MustDeref returns the type of the variable pointed to by t.
+// It panics if t's core type is not a pointer.
+//
+// TODO(adonovan): ideally this would live in typesinternal, but that
+// creates an import cycle. Move there when we melt this package down.
+func MustDeref(t types.Type) types.Type {
+	if ptr, ok := CoreType(t).(*types.Pointer); ok {
+		return ptr.Elem()
+	}
+	panic(fmt.Sprintf("%v is not a pointer", t))
+}
diff --git a/vendor/golang.org/x/tools/internal/typeparams/free.go b/vendor/golang.org/x/tools/internal/typeparams/free.go
new file mode 100644
index 00000000..0ade5c29
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typeparams/free.go
@@ -0,0 +1,131 @@
+// Copyright 2024 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 typeparams
+
+import (
+	"go/types"
+
+	"golang.org/x/tools/internal/aliases"
+)
+
+// Free is a memoization of the set of free type parameters within a
+// type. It makes a sequence of calls to [Free.Has] for overlapping
+// types more efficient. The zero value is ready for use.
+//
+// NOTE: Adapted from go/types/infer.go. If it is later exported, factor.
+type Free struct {
+	seen map[types.Type]bool
+}
+
+// Has reports whether the specified type has a free type parameter.
+func (w *Free) Has(typ types.Type) (res bool) {
+	// detect cycles
+	if x, ok := w.seen[typ]; ok {
+		return x
+	}
+	if w.seen == nil {
+		w.seen = make(map[types.Type]bool)
+	}
+	w.seen[typ] = false
+	defer func() {
+		w.seen[typ] = res
+	}()
+
+	switch t := typ.(type) {
+	case nil, *types.Basic: // TODO(gri) should nil be handled here?
+		break
+
+	case *types.Alias:
+		if aliases.TypeParams(t).Len() > aliases.TypeArgs(t).Len() {
+			return true // This is an uninstantiated Alias.
+		}
+		// The expansion of an alias can have free type parameters,
+		// whether or not the alias itself has type parameters:
+		//
+		//   func _[K comparable]() {
+		//     type Set      = map[K]bool // free(Set)      = {K}
+		//     type MapTo[V] = map[K]V    // free(Map[foo]) = {V}
+		//   }
+		//
+		// So, we must Unalias.
+		return w.Has(types.Unalias(t))
+
+	case *types.Array:
+		return w.Has(t.Elem())
+
+	case *types.Slice:
+		return w.Has(t.Elem())
+
+	case *types.Struct:
+		for i, n := 0, t.NumFields(); i < n; i++ {
+			if w.Has(t.Field(i).Type()) {
+				return true
+			}
+		}
+
+	case *types.Pointer:
+		return w.Has(t.Elem())
+
+	case *types.Tuple:
+		n := t.Len()
+		for i := 0; i < n; i++ {
+			if w.Has(t.At(i).Type()) {
+				return true
+			}
+		}
+
+	case *types.Signature:
+		// t.tparams may not be nil if we are looking at a signature
+		// of a generic function type (or an interface method) that is
+		// part of the type we're testing. We don't care about these type
+		// parameters.
+		// Similarly, the receiver of a method may declare (rather than
+		// use) type parameters, we don't care about those either.
+		// Thus, we only need to look at the input and result parameters.
+		return w.Has(t.Params()) || w.Has(t.Results())
+
+	case *types.Interface:
+		for i, n := 0, t.NumMethods(); i < n; i++ {
+			if w.Has(t.Method(i).Type()) {
+				return true
+			}
+		}
+		terms, err := InterfaceTermSet(t)
+		if err != nil {
+			return false // ill typed
+		}
+		for _, term := range terms {
+			if w.Has(term.Type()) {
+				return true
+			}
+		}
+
+	case *types.Map:
+		return w.Has(t.Key()) || w.Has(t.Elem())
+
+	case *types.Chan:
+		return w.Has(t.Elem())
+
+	case *types.Named:
+		args := t.TypeArgs()
+		if params := t.TypeParams(); params.Len() > args.Len() {
+			return true // this is an uninstantiated named type.
+		}
+		for i, n := 0, args.Len(); i < n; i++ {
+			if w.Has(args.At(i)) {
+				return true
+			}
+		}
+		return w.Has(t.Underlying()) // recurse for types local to parameterized functions
+
+	case *types.TypeParam:
+		return true
+
+	default:
+		panic(t) // unreachable
+	}
+
+	return false
+}
diff --git a/vendor/golang.org/x/tools/internal/typeparams/normalize.go b/vendor/golang.org/x/tools/internal/typeparams/normalize.go
new file mode 100644
index 00000000..93c80fdc
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typeparams/normalize.go
@@ -0,0 +1,218 @@
+// Copyright 2021 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 typeparams
+
+import (
+	"errors"
+	"fmt"
+	"go/types"
+	"os"
+	"strings"
+)
+
+//go:generate go run copytermlist.go
+
+const debug = false
+
+var ErrEmptyTypeSet = errors.New("empty type set")
+
+// StructuralTerms returns a slice of terms representing the normalized
+// structural type restrictions of a type parameter, if any.
+//
+// Structural type restrictions of a type parameter are created via
+// non-interface types embedded in its constraint interface (directly, or via a
+// chain of interface embeddings). For example, in the declaration
+//
+//	type T[P interface{~int; m()}] int
+//
+// the structural restriction of the type parameter P is ~int.
+//
+// With interface embedding and unions, the specification of structural type
+// restrictions may be arbitrarily complex. For example, consider the
+// following:
+//
+//	type A interface{ ~string|~[]byte }
+//
+//	type B interface{ int|string }
+//
+//	type C interface { ~string|~int }
+//
+//	type T[P interface{ A|B; C }] int
+//
+// In this example, the structural type restriction of P is ~string|int: A|B
+// expands to ~string|~[]byte|int|string, which reduces to ~string|~[]byte|int,
+// which when intersected with C (~string|~int) yields ~string|int.
+//
+// StructuralTerms computes these expansions and reductions, producing a
+// "normalized" form of the embeddings. A structural restriction is normalized
+// if it is a single union containing no interface terms, and is minimal in the
+// sense that removing any term changes the set of types satisfying the
+// constraint. It is left as a proof for the reader that, modulo sorting, there
+// is exactly one such normalized form.
+//
+// Because the minimal representation always takes this form, StructuralTerms
+// returns a slice of tilde terms corresponding to the terms of the union in
+// the normalized structural restriction. An error is returned if the
+// constraint interface is invalid, exceeds complexity bounds, or has an empty
+// type set. In the latter case, StructuralTerms returns ErrEmptyTypeSet.
+//
+// StructuralTerms makes no guarantees about the order of terms, except that it
+// is deterministic.
+func StructuralTerms(tparam *types.TypeParam) ([]*types.Term, error) {
+	constraint := tparam.Constraint()
+	if constraint == nil {
+		return nil, fmt.Errorf("%s has nil constraint", tparam)
+	}
+	iface, _ := constraint.Underlying().(*types.Interface)
+	if iface == nil {
+		return nil, fmt.Errorf("constraint is %T, not *types.Interface", constraint.Underlying())
+	}
+	return InterfaceTermSet(iface)
+}
+
+// InterfaceTermSet computes the normalized terms for a constraint interface,
+// returning an error if the term set cannot be computed or is empty. In the
+// latter case, the error will be ErrEmptyTypeSet.
+//
+// See the documentation of StructuralTerms for more information on
+// normalization.
+func InterfaceTermSet(iface *types.Interface) ([]*types.Term, error) {
+	return computeTermSet(iface)
+}
+
+// UnionTermSet computes the normalized terms for a union, returning an error
+// if the term set cannot be computed or is empty. In the latter case, the
+// error will be ErrEmptyTypeSet.
+//
+// See the documentation of StructuralTerms for more information on
+// normalization.
+func UnionTermSet(union *types.Union) ([]*types.Term, error) {
+	return computeTermSet(union)
+}
+
+func computeTermSet(typ types.Type) ([]*types.Term, error) {
+	tset, err := computeTermSetInternal(typ, make(map[types.Type]*termSet), 0)
+	if err != nil {
+		return nil, err
+	}
+	if tset.terms.isEmpty() {
+		return nil, ErrEmptyTypeSet
+	}
+	if tset.terms.isAll() {
+		return nil, nil
+	}
+	var terms []*types.Term
+	for _, term := range tset.terms {
+		terms = append(terms, types.NewTerm(term.tilde, term.typ))
+	}
+	return terms, nil
+}
+
+// A termSet holds the normalized set of terms for a given type.
+//
+// The name termSet is intentionally distinct from 'type set': a type set is
+// all types that implement a type (and includes method restrictions), whereas
+// a term set just represents the structural restrictions on a type.
+type termSet struct {
+	complete bool
+	terms    termlist
+}
+
+func indentf(depth int, format string, args ...interface{}) {
+	fmt.Fprintf(os.Stderr, strings.Repeat(".", depth)+format+"\n", args...)
+}
+
+func computeTermSetInternal(t types.Type, seen map[types.Type]*termSet, depth int) (res *termSet, err error) {
+	if t == nil {
+		panic("nil type")
+	}
+
+	if debug {
+		indentf(depth, "%s", t.String())
+		defer func() {
+			if err != nil {
+				indentf(depth, "=> %s", err)
+			} else {
+				indentf(depth, "=> %s", res.terms.String())
+			}
+		}()
+	}
+
+	const maxTermCount = 100
+	if tset, ok := seen[t]; ok {
+		if !tset.complete {
+			return nil, fmt.Errorf("cycle detected in the declaration of %s", t)
+		}
+		return tset, nil
+	}
+
+	// Mark the current type as seen to avoid infinite recursion.
+	tset := new(termSet)
+	defer func() {
+		tset.complete = true
+	}()
+	seen[t] = tset
+
+	switch u := t.Underlying().(type) {
+	case *types.Interface:
+		// The term set of an interface is the intersection of the term sets of its
+		// embedded types.
+		tset.terms = allTermlist
+		for i := 0; i < u.NumEmbeddeds(); i++ {
+			embedded := u.EmbeddedType(i)
+			if _, ok := embedded.Underlying().(*types.TypeParam); ok {
+				return nil, fmt.Errorf("invalid embedded type %T", embedded)
+			}
+			tset2, err := computeTermSetInternal(embedded, seen, depth+1)
+			if err != nil {
+				return nil, err
+			}
+			tset.terms = tset.terms.intersect(tset2.terms)
+		}
+	case *types.Union:
+		// The term set of a union is the union of term sets of its terms.
+		tset.terms = nil
+		for i := 0; i < u.Len(); i++ {
+			t := u.Term(i)
+			var terms termlist
+			switch t.Type().Underlying().(type) {
+			case *types.Interface:
+				tset2, err := computeTermSetInternal(t.Type(), seen, depth+1)
+				if err != nil {
+					return nil, err
+				}
+				terms = tset2.terms
+			case *types.TypeParam, *types.Union:
+				// A stand-alone type parameter or union is not permitted as union
+				// term.
+				return nil, fmt.Errorf("invalid union term %T", t)
+			default:
+				if t.Type() == types.Typ[types.Invalid] {
+					continue
+				}
+				terms = termlist{{t.Tilde(), t.Type()}}
+			}
+			tset.terms = tset.terms.union(terms)
+			if len(tset.terms) > maxTermCount {
+				return nil, fmt.Errorf("exceeded max term count %d", maxTermCount)
+			}
+		}
+	case *types.TypeParam:
+		panic("unreachable")
+	default:
+		// For all other types, the term set is just a single non-tilde term
+		// holding the type itself.
+		if u != types.Typ[types.Invalid] {
+			tset.terms = termlist{{false, t}}
+		}
+	}
+	return tset, nil
+}
+
+// under is a facade for the go/types internal function of the same name. It is
+// used by typeterm.go.
+func under(t types.Type) types.Type {
+	return t.Underlying()
+}
diff --git a/vendor/golang.org/x/tools/internal/typeparams/termlist.go b/vendor/golang.org/x/tools/internal/typeparams/termlist.go
new file mode 100644
index 00000000..cbd12f80
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typeparams/termlist.go
@@ -0,0 +1,163 @@
+// Copyright 2021 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.
+
+// Code generated by copytermlist.go DO NOT EDIT.
+
+package typeparams
+
+import (
+	"bytes"
+	"go/types"
+)
+
+// A termlist represents the type set represented by the union
+// t1 ∪ y2 ∪ ... tn of the type sets of the terms t1 to tn.
+// A termlist is in normal form if all terms are disjoint.
+// termlist operations don't require the operands to be in
+// normal form.
+type termlist []*term
+
+// allTermlist represents the set of all types.
+// It is in normal form.
+var allTermlist = termlist{new(term)}
+
+// String prints the termlist exactly (without normalization).
+func (xl termlist) String() string {
+	if len(xl) == 0 {
+		return "∅"
+	}
+	var buf bytes.Buffer
+	for i, x := range xl {
+		if i > 0 {
+			buf.WriteString(" | ")
+		}
+		buf.WriteString(x.String())
+	}
+	return buf.String()
+}
+
+// isEmpty reports whether the termlist xl represents the empty set of types.
+func (xl termlist) isEmpty() bool {
+	// If there's a non-nil term, the entire list is not empty.
+	// If the termlist is in normal form, this requires at most
+	// one iteration.
+	for _, x := range xl {
+		if x != nil {
+			return false
+		}
+	}
+	return true
+}
+
+// isAll reports whether the termlist xl represents the set of all types.
+func (xl termlist) isAll() bool {
+	// If there's a 𝓤 term, the entire list is 𝓤.
+	// If the termlist is in normal form, this requires at most
+	// one iteration.
+	for _, x := range xl {
+		if x != nil && x.typ == nil {
+			return true
+		}
+	}
+	return false
+}
+
+// norm returns the normal form of xl.
+func (xl termlist) norm() termlist {
+	// Quadratic algorithm, but good enough for now.
+	// TODO(gri) fix asymptotic performance
+	used := make([]bool, len(xl))
+	var rl termlist
+	for i, xi := range xl {
+		if xi == nil || used[i] {
+			continue
+		}
+		for j := i + 1; j < len(xl); j++ {
+			xj := xl[j]
+			if xj == nil || used[j] {
+				continue
+			}
+			if u1, u2 := xi.union(xj); u2 == nil {
+				// If we encounter a 𝓤 term, the entire list is 𝓤.
+				// Exit early.
+				// (Note that this is not just an optimization;
+				// if we continue, we may end up with a 𝓤 term
+				// and other terms and the result would not be
+				// in normal form.)
+				if u1.typ == nil {
+					return allTermlist
+				}
+				xi = u1
+				used[j] = true // xj is now unioned into xi - ignore it in future iterations
+			}
+		}
+		rl = append(rl, xi)
+	}
+	return rl
+}
+
+// union returns the union xl ∪ yl.
+func (xl termlist) union(yl termlist) termlist {
+	return append(xl, yl...).norm()
+}
+
+// intersect returns the intersection xl ∩ yl.
+func (xl termlist) intersect(yl termlist) termlist {
+	if xl.isEmpty() || yl.isEmpty() {
+		return nil
+	}
+
+	// Quadratic algorithm, but good enough for now.
+	// TODO(gri) fix asymptotic performance
+	var rl termlist
+	for _, x := range xl {
+		for _, y := range yl {
+			if r := x.intersect(y); r != nil {
+				rl = append(rl, r)
+			}
+		}
+	}
+	return rl.norm()
+}
+
+// equal reports whether xl and yl represent the same type set.
+func (xl termlist) equal(yl termlist) bool {
+	// TODO(gri) this should be more efficient
+	return xl.subsetOf(yl) && yl.subsetOf(xl)
+}
+
+// includes reports whether t ∈ xl.
+func (xl termlist) includes(t types.Type) bool {
+	for _, x := range xl {
+		if x.includes(t) {
+			return true
+		}
+	}
+	return false
+}
+
+// supersetOf reports whether y ⊆ xl.
+func (xl termlist) supersetOf(y *term) bool {
+	for _, x := range xl {
+		if y.subsetOf(x) {
+			return true
+		}
+	}
+	return false
+}
+
+// subsetOf reports whether xl ⊆ yl.
+func (xl termlist) subsetOf(yl termlist) bool {
+	if yl.isEmpty() {
+		return xl.isEmpty()
+	}
+
+	// each term x of xl must be a subset of yl
+	for _, x := range xl {
+		if !yl.supersetOf(x) {
+			return false // x is not a subset yl
+		}
+	}
+	return true
+}
diff --git a/vendor/golang.org/x/tools/internal/typeparams/typeterm.go b/vendor/golang.org/x/tools/internal/typeparams/typeterm.go
new file mode 100644
index 00000000..7350bb70
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typeparams/typeterm.go
@@ -0,0 +1,169 @@
+// Copyright 2021 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.
+
+// Code generated by copytermlist.go DO NOT EDIT.
+
+package typeparams
+
+import "go/types"
+
+// A term describes elementary type sets:
+//
+//	 ∅:  (*term)(nil)     == ∅                      // set of no types (empty set)
+//	 𝓤:  &term{}          == 𝓤                      // set of all types (𝓤niverse)
+//	 T:  &term{false, T}  == {T}                    // set of type T
+//	~t:  &term{true, t}   == {t' | under(t') == t}  // set of types with underlying type t
+type term struct {
+	tilde bool // valid if typ != nil
+	typ   types.Type
+}
+
+func (x *term) String() string {
+	switch {
+	case x == nil:
+		return "∅"
+	case x.typ == nil:
+		return "𝓤"
+	case x.tilde:
+		return "~" + x.typ.String()
+	default:
+		return x.typ.String()
+	}
+}
+
+// equal reports whether x and y represent the same type set.
+func (x *term) equal(y *term) bool {
+	// easy cases
+	switch {
+	case x == nil || y == nil:
+		return x == y
+	case x.typ == nil || y.typ == nil:
+		return x.typ == y.typ
+	}
+	// ∅ ⊂ x, y ⊂ 𝓤
+
+	return x.tilde == y.tilde && types.Identical(x.typ, y.typ)
+}
+
+// union returns the union x ∪ y: zero, one, or two non-nil terms.
+func (x *term) union(y *term) (_, _ *term) {
+	// easy cases
+	switch {
+	case x == nil && y == nil:
+		return nil, nil // ∅ ∪ ∅ == ∅
+	case x == nil:
+		return y, nil // ∅ ∪ y == y
+	case y == nil:
+		return x, nil // x ∪ ∅ == x
+	case x.typ == nil:
+		return x, nil // 𝓤 ∪ y == 𝓤
+	case y.typ == nil:
+		return y, nil // x ∪ 𝓤 == 𝓤
+	}
+	// ∅ ⊂ x, y ⊂ 𝓤
+
+	if x.disjoint(y) {
+		return x, y // x ∪ y == (x, y) if x ∩ y == ∅
+	}
+	// x.typ == y.typ
+
+	// ~t ∪ ~t == ~t
+	// ~t ∪  T == ~t
+	//  T ∪ ~t == ~t
+	//  T ∪  T ==  T
+	if x.tilde || !y.tilde {
+		return x, nil
+	}
+	return y, nil
+}
+
+// intersect returns the intersection x ∩ y.
+func (x *term) intersect(y *term) *term {
+	// easy cases
+	switch {
+	case x == nil || y == nil:
+		return nil // ∅ ∩ y == ∅ and ∩ ∅ == ∅
+	case x.typ == nil:
+		return y // 𝓤 ∩ y == y
+	case y.typ == nil:
+		return x // x ∩ 𝓤 == x
+	}
+	// ∅ ⊂ x, y ⊂ 𝓤
+
+	if x.disjoint(y) {
+		return nil // x ∩ y == ∅ if x ∩ y == ∅
+	}
+	// x.typ == y.typ
+
+	// ~t ∩ ~t == ~t
+	// ~t ∩  T ==  T
+	//  T ∩ ~t ==  T
+	//  T ∩  T ==  T
+	if !x.tilde || y.tilde {
+		return x
+	}
+	return y
+}
+
+// includes reports whether t ∈ x.
+func (x *term) includes(t types.Type) bool {
+	// easy cases
+	switch {
+	case x == nil:
+		return false // t ∈ ∅ == false
+	case x.typ == nil:
+		return true // t ∈ 𝓤 == true
+	}
+	// ∅ ⊂ x ⊂ 𝓤
+
+	u := t
+	if x.tilde {
+		u = under(u)
+	}
+	return types.Identical(x.typ, u)
+}
+
+// subsetOf reports whether x ⊆ y.
+func (x *term) subsetOf(y *term) bool {
+	// easy cases
+	switch {
+	case x == nil:
+		return true // ∅ ⊆ y == true
+	case y == nil:
+		return false // x ⊆ ∅ == false since x != ∅
+	case y.typ == nil:
+		return true // x ⊆ 𝓤 == true
+	case x.typ == nil:
+		return false // 𝓤 ⊆ y == false since y != 𝓤
+	}
+	// ∅ ⊂ x, y ⊂ 𝓤
+
+	if x.disjoint(y) {
+		return false // x ⊆ y == false if x ∩ y == ∅
+	}
+	// x.typ == y.typ
+
+	// ~t ⊆ ~t == true
+	// ~t ⊆ T == false
+	//  T ⊆ ~t == true
+	//  T ⊆  T == true
+	return !x.tilde || y.tilde
+}
+
+// disjoint reports whether x ∩ y == ∅.
+// x.typ and y.typ must not be nil.
+func (x *term) disjoint(y *term) bool {
+	if debug && (x.typ == nil || y.typ == nil) {
+		panic("invalid argument(s)")
+	}
+	ux := x.typ
+	if y.tilde {
+		ux = under(ux)
+	}
+	uy := y.typ
+	if x.tilde {
+		uy = under(uy)
+	}
+	return !types.Identical(ux, uy)
+}
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/element.go b/vendor/golang.org/x/tools/internal/typesinternal/element.go
new file mode 100644
index 00000000..4957f021
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typesinternal/element.go
@@ -0,0 +1,133 @@
+// Copyright 2024 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 typesinternal
+
+import (
+	"fmt"
+	"go/types"
+
+	"golang.org/x/tools/go/types/typeutil"
+)
+
+// ForEachElement calls f for type T and each type reachable from its
+// type through reflection. It does this by recursively stripping off
+// type constructors; in addition, for each named type N, the type *N
+// is added to the result as it may have additional methods.
+//
+// The caller must provide an initially empty set used to de-duplicate
+// identical types, potentially across multiple calls to ForEachElement.
+// (Its final value holds all the elements seen, matching the arguments
+// passed to f.)
+//
+// TODO(adonovan): share/harmonize with go/callgraph/rta.
+func ForEachElement(rtypes *typeutil.Map, msets *typeutil.MethodSetCache, T types.Type, f func(types.Type)) {
+	var visit func(T types.Type, skip bool)
+	visit = func(T types.Type, skip bool) {
+		if !skip {
+			if seen, _ := rtypes.Set(T, true).(bool); seen {
+				return // de-dup
+			}
+
+			f(T) // notify caller of new element type
+		}
+
+		// Recursion over signatures of each method.
+		tmset := msets.MethodSet(T)
+		for i := 0; i < tmset.Len(); i++ {
+			sig := tmset.At(i).Type().(*types.Signature)
+			// It is tempting to call visit(sig, false)
+			// but, as noted in golang.org/cl/65450043,
+			// the Signature.Recv field is ignored by
+			// types.Identical and typeutil.Map, which
+			// is confusing at best.
+			//
+			// More importantly, the true signature rtype
+			// reachable from a method using reflection
+			// has no receiver but an extra ordinary parameter.
+			// For the Read method of io.Reader we want:
+			//   func(Reader, []byte) (int, error)
+			// but here sig is:
+			//   func([]byte) (int, error)
+			// with .Recv = Reader (though it is hard to
+			// notice because it doesn't affect Signature.String
+			// or types.Identical).
+			//
+			// TODO(adonovan): construct and visit the correct
+			// non-method signature with an extra parameter
+			// (though since unnamed func types have no methods
+			// there is essentially no actual demand for this).
+			//
+			// TODO(adonovan): document whether or not it is
+			// safe to skip non-exported methods (as RTA does).
+			visit(sig.Params(), true)  // skip the Tuple
+			visit(sig.Results(), true) // skip the Tuple
+		}
+
+		switch T := T.(type) {
+		case *types.Alias:
+			visit(types.Unalias(T), skip) // emulates the pre-Alias behavior
+
+		case *types.Basic:
+			// nop
+
+		case *types.Interface:
+			// nop---handled by recursion over method set.
+
+		case *types.Pointer:
+			visit(T.Elem(), false)
+
+		case *types.Slice:
+			visit(T.Elem(), false)
+
+		case *types.Chan:
+			visit(T.Elem(), false)
+
+		case *types.Map:
+			visit(T.Key(), false)
+			visit(T.Elem(), false)
+
+		case *types.Signature:
+			if T.Recv() != nil {
+				panic(fmt.Sprintf("Signature %s has Recv %s", T, T.Recv()))
+			}
+			visit(T.Params(), true)  // skip the Tuple
+			visit(T.Results(), true) // skip the Tuple
+
+		case *types.Named:
+			// A pointer-to-named type can be derived from a named
+			// type via reflection.  It may have methods too.
+			visit(types.NewPointer(T), false)
+
+			// Consider 'type T struct{S}' where S has methods.
+			// Reflection provides no way to get from T to struct{S},
+			// only to S, so the method set of struct{S} is unwanted,
+			// so set 'skip' flag during recursion.
+			visit(T.Underlying(), true) // skip the unnamed type
+
+		case *types.Array:
+			visit(T.Elem(), false)
+
+		case *types.Struct:
+			for i, n := 0, T.NumFields(); i < n; i++ {
+				// TODO(adonovan): document whether or not
+				// it is safe to skip non-exported fields.
+				visit(T.Field(i).Type(), false)
+			}
+
+		case *types.Tuple:
+			for i, n := 0, T.Len(); i < n; i++ {
+				visit(T.At(i).Type(), false)
+			}
+
+		case *types.TypeParam, *types.Union:
+			// forEachReachable must not be called on parameterized types.
+			panic(T)
+
+		default:
+			panic(T)
+		}
+	}
+	visit(T, false)
+}
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go b/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go
index 834e0538..235a6def 100644
--- a/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go
+++ b/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go
@@ -838,7 +838,7 @@ const (
 	// InvalidCap occurs when an argument to the cap built-in function is not of
 	// supported type.
 	//
-	// See https://golang.org/ref/spec#Lengthand_capacity for information on
+	// See https://golang.org/ref/spec#Length_and_capacity for information on
 	// which underlying types are supported as arguments to cap and len.
 	//
 	// Example:
@@ -859,7 +859,7 @@ const (
 	// InvalidCopy occurs when the arguments are not of slice type or do not
 	// have compatible type.
 	//
-	// See https://golang.org/ref/spec#Appendingand_copying_slices for more
+	// See https://golang.org/ref/spec#Appending_and_copying_slices for more
 	// information on the type requirements for the copy built-in.
 	//
 	// Example:
@@ -897,7 +897,7 @@ const (
 	// InvalidLen occurs when an argument to the len built-in function is not of
 	// supported type.
 	//
-	// See https://golang.org/ref/spec#Lengthand_capacity for information on
+	// See https://golang.org/ref/spec#Length_and_capacity for information on
 	// which underlying types are supported as arguments to cap and len.
 	//
 	// Example:
@@ -914,7 +914,7 @@ const (
 
 	// InvalidMake occurs when make is called with an unsupported type argument.
 	//
-	// See https://golang.org/ref/spec#Makingslices_maps_and_channels for
+	// See https://golang.org/ref/spec#Making_slices_maps_and_channels for
 	// information on the types that may be created using make.
 	//
 	// Example:
@@ -966,7 +966,7 @@ const (
 	//  var _ = string(x)
 	InvalidConversion
 
-	// InvalidUntypedConversion occurs when an there is no valid implicit
+	// InvalidUntypedConversion occurs when there is no valid implicit
 	// conversion from an untyped value satisfying the type constraints of the
 	// context in which it is used.
 	//
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/qualifier.go b/vendor/golang.org/x/tools/internal/typesinternal/qualifier.go
new file mode 100644
index 00000000..b64f714e
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typesinternal/qualifier.go
@@ -0,0 +1,46 @@
+// Copyright 2024 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 typesinternal
+
+import (
+	"go/ast"
+	"go/types"
+	"strconv"
+)
+
+// FileQualifier returns a [types.Qualifier] function that qualifies
+// imported symbols appropriately based on the import environment of a given
+// file.
+// If the same package is imported multiple times, the last appearance is
+// recorded.
+func FileQualifier(f *ast.File, pkg *types.Package) types.Qualifier {
+	// Construct mapping of import paths to their defined names.
+	// It is only necessary to look at renaming imports.
+	imports := make(map[string]string)
+	for _, imp := range f.Imports {
+		if imp.Name != nil && imp.Name.Name != "_" {
+			path, _ := strconv.Unquote(imp.Path.Value)
+			imports[path] = imp.Name.Name
+		}
+	}
+
+	// Define qualifier to replace full package paths with names of the imports.
+	return func(p *types.Package) string {
+		if p == nil || p == pkg {
+			return ""
+		}
+
+		if name, ok := imports[p.Path()]; ok {
+			if name == "." {
+				return ""
+			} else {
+				return name
+			}
+		}
+
+		// If there is no local renaming, fall back to the package name.
+		return p.Name()
+	}
+}
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/recv.go b/vendor/golang.org/x/tools/internal/typesinternal/recv.go
index fea7c8b7..8352ea76 100644
--- a/vendor/golang.org/x/tools/internal/typesinternal/recv.go
+++ b/vendor/golang.org/x/tools/internal/typesinternal/recv.go
@@ -6,20 +6,21 @@ package typesinternal
 
 import (
 	"go/types"
-
-	"golang.org/x/tools/internal/aliases"
 )
 
 // ReceiverNamed returns the named type (if any) associated with the
 // type of recv, which may be of the form N or *N, or aliases thereof.
 // It also reports whether a Pointer was present.
+//
+// The named result may be nil if recv is from a method on an
+// anonymous interface or struct types or in ill-typed code.
 func ReceiverNamed(recv *types.Var) (isPtr bool, named *types.Named) {
 	t := recv.Type()
-	if ptr, ok := aliases.Unalias(t).(*types.Pointer); ok {
+	if ptr, ok := types.Unalias(t).(*types.Pointer); ok {
 		isPtr = true
 		t = ptr.Elem()
 	}
-	named, _ = aliases.Unalias(t).(*types.Named)
+	named, _ = types.Unalias(t).(*types.Named)
 	return
 }
 
@@ -36,7 +37,7 @@ func ReceiverNamed(recv *types.Var) (isPtr bool, named *types.Named) {
 // indirection from the type, regardless of named types (analogous to
 // a LOAD instruction).
 func Unpointer(t types.Type) types.Type {
-	if ptr, ok := aliases.Unalias(t).(*types.Pointer); ok {
+	if ptr, ok := types.Unalias(t).(*types.Pointer); ok {
 		return ptr.Elem()
 	}
 	return t
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/types.go b/vendor/golang.org/x/tools/internal/typesinternal/types.go
index 7c77c2fb..34534879 100644
--- a/vendor/golang.org/x/tools/internal/typesinternal/types.go
+++ b/vendor/golang.org/x/tools/internal/typesinternal/types.go
@@ -11,6 +11,8 @@ import (
 	"go/types"
 	"reflect"
 	"unsafe"
+
+	"golang.org/x/tools/internal/aliases"
 )
 
 func SetUsesCgo(conf *types.Config) bool {
@@ -48,3 +50,78 @@ func ReadGo116ErrorData(err types.Error) (code ErrorCode, start, end token.Pos,
 	}
 	return ErrorCode(data[0]), token.Pos(data[1]), token.Pos(data[2]), true
 }
+
+// NameRelativeTo returns a types.Qualifier that qualifies members of
+// all packages other than pkg, using only the package name.
+// (By contrast, [types.RelativeTo] uses the complete package path,
+// which is often excessive.)
+//
+// If pkg is nil, it is equivalent to [*types.Package.Name].
+func NameRelativeTo(pkg *types.Package) types.Qualifier {
+	return func(other *types.Package) string {
+		if pkg != nil && pkg == other {
+			return "" // same package; unqualified
+		}
+		return other.Name()
+	}
+}
+
+// A NamedOrAlias is a [types.Type] that is named (as
+// defined by the spec) and capable of bearing type parameters: it
+// abstracts aliases ([types.Alias]) and defined types
+// ([types.Named]).
+//
+// Every type declared by an explicit "type" declaration is a
+// NamedOrAlias. (Built-in type symbols may additionally
+// have type [types.Basic], which is not a NamedOrAlias,
+// though the spec regards them as "named".)
+//
+// NamedOrAlias cannot expose the Origin method, because
+// [types.Alias.Origin] and [types.Named.Origin] have different
+// (covariant) result types; use [Origin] instead.
+type NamedOrAlias interface {
+	types.Type
+	Obj() *types.TypeName
+	// TODO(hxjiang): add method TypeArgs() *types.TypeList after stop supporting go1.22.
+}
+
+// TypeParams is a light shim around t.TypeParams().
+// (go/types.Alias).TypeParams requires >= 1.23.
+func TypeParams(t NamedOrAlias) *types.TypeParamList {
+	switch t := t.(type) {
+	case *types.Alias:
+		return aliases.TypeParams(t)
+	case *types.Named:
+		return t.TypeParams()
+	}
+	return nil
+}
+
+// TypeArgs is a light shim around t.TypeArgs().
+// (go/types.Alias).TypeArgs requires >= 1.23.
+func TypeArgs(t NamedOrAlias) *types.TypeList {
+	switch t := t.(type) {
+	case *types.Alias:
+		return aliases.TypeArgs(t)
+	case *types.Named:
+		return t.TypeArgs()
+	}
+	return nil
+}
+
+// Origin returns the generic type of the Named or Alias type t if it
+// is instantiated, otherwise it returns t.
+func Origin(t NamedOrAlias) NamedOrAlias {
+	switch t := t.(type) {
+	case *types.Alias:
+		return aliases.Origin(t)
+	case *types.Named:
+		return t.Origin()
+	}
+	return t
+}
+
+// IsPackageLevel reports whether obj is a package-level symbol.
+func IsPackageLevel(obj types.Object) bool {
+	return obj.Pkg() != nil && obj.Parent() == obj.Pkg().Scope()
+}
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/varkind.go b/vendor/golang.org/x/tools/internal/typesinternal/varkind.go
new file mode 100644
index 00000000..e5da0495
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typesinternal/varkind.go
@@ -0,0 +1,40 @@
+// Copyright 2024 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 typesinternal
+
+// TODO(adonovan): when CL 645115 lands, define the go1.25 version of
+// this API that actually does something.
+
+import "go/types"
+
+type VarKind uint8
+
+const (
+	_          VarKind = iota // (not meaningful)
+	PackageVar                // a package-level variable
+	LocalVar                  // a local variable
+	RecvVar                   // a method receiver variable
+	ParamVar                  // a function parameter variable
+	ResultVar                 // a function result variable
+	FieldVar                  // a struct field
+)
+
+func (kind VarKind) String() string {
+	return [...]string{
+		0:          "VarKind(0)",
+		PackageVar: "PackageVar",
+		LocalVar:   "LocalVar",
+		RecvVar:    "RecvVar",
+		ParamVar:   "ParamVar",
+		ResultVar:  "ResultVar",
+		FieldVar:   "FieldVar",
+	}[kind]
+}
+
+// GetVarKind returns an invalid VarKind.
+func GetVarKind(v *types.Var) VarKind { return 0 }
+
+// SetVarKind has no effect.
+func SetVarKind(v *types.Var, kind VarKind) {}
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/zerovalue.go b/vendor/golang.org/x/tools/internal/typesinternal/zerovalue.go
new file mode 100644
index 00000000..d272949c
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typesinternal/zerovalue.go
@@ -0,0 +1,392 @@
+// Copyright 2024 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 typesinternal
+
+import (
+	"fmt"
+	"go/ast"
+	"go/token"
+	"go/types"
+	"strings"
+)
+
+// ZeroString returns the string representation of the zero value for any type t.
+// The boolean result indicates whether the type is or contains an invalid type
+// or a non-basic (constraint) interface type.
+//
+// Even for invalid input types, ZeroString may return a partially correct
+// string representation. The caller should use the returned isValid boolean
+// to determine the validity of the expression.
+//
+// When assigning to a wider type (such as 'any'), it's the caller's
+// responsibility to handle any necessary type conversions.
+//
+// This string can be used on the right-hand side of an assignment where the
+// left-hand side has that explicit type.
+// References to named types are qualified by an appropriate (optional)
+// qualifier function.
+// Exception: This does not apply to tuples. Their string representation is
+// informational only and cannot be used in an assignment.
+//
+// See [ZeroExpr] for a variant that returns an [ast.Expr].
+func ZeroString(t types.Type, qual types.Qualifier) (_ string, isValid bool) {
+	switch t := t.(type) {
+	case *types.Basic:
+		switch {
+		case t.Info()&types.IsBoolean != 0:
+			return "false", true
+		case t.Info()&types.IsNumeric != 0:
+			return "0", true
+		case t.Info()&types.IsString != 0:
+			return `""`, true
+		case t.Kind() == types.UnsafePointer:
+			fallthrough
+		case t.Kind() == types.UntypedNil:
+			return "nil", true
+		case t.Kind() == types.Invalid:
+			return "invalid", false
+		default:
+			panic(fmt.Sprintf("ZeroString for unexpected type %v", t))
+		}
+
+	case *types.Pointer, *types.Slice, *types.Chan, *types.Map, *types.Signature:
+		return "nil", true
+
+	case *types.Interface:
+		if !t.IsMethodSet() {
+			return "invalid", false
+		}
+		return "nil", true
+
+	case *types.Named:
+		switch under := t.Underlying().(type) {
+		case *types.Struct, *types.Array:
+			return types.TypeString(t, qual) + "{}", true
+		default:
+			return ZeroString(under, qual)
+		}
+
+	case *types.Alias:
+		switch t.Underlying().(type) {
+		case *types.Struct, *types.Array:
+			return types.TypeString(t, qual) + "{}", true
+		default:
+			// A type parameter can have alias but alias type's underlying type
+			// can never be a type parameter.
+			// Use types.Unalias to preserve the info of type parameter instead
+			// of call Underlying() going right through and get the underlying
+			// type of the type parameter which is always an interface.
+			return ZeroString(types.Unalias(t), qual)
+		}
+
+	case *types.Array, *types.Struct:
+		return types.TypeString(t, qual) + "{}", true
+
+	case *types.TypeParam:
+		// Assumes func new is not shadowed.
+		return "*new(" + types.TypeString(t, qual) + ")", true
+
+	case *types.Tuple:
+		// Tuples are not normal values.
+		// We are currently format as "(t[0], ..., t[n])". Could be something else.
+		isValid := true
+		components := make([]string, t.Len())
+		for i := 0; i < t.Len(); i++ {
+			comp, ok := ZeroString(t.At(i).Type(), qual)
+
+			components[i] = comp
+			isValid = isValid && ok
+		}
+		return "(" + strings.Join(components, ", ") + ")", isValid
+
+	case *types.Union:
+		// Variables of these types cannot be created, so it makes
+		// no sense to ask for their zero value.
+		panic(fmt.Sprintf("invalid type for a variable: %v", t))
+
+	default:
+		panic(t) // unreachable.
+	}
+}
+
+// ZeroExpr returns the ast.Expr representation of the zero value for any type t.
+// The boolean result indicates whether the type is or contains an invalid type
+// or a non-basic (constraint) interface type.
+//
+// Even for invalid input types, ZeroExpr may return a partially correct ast.Expr
+// representation. The caller should use the returned isValid boolean to determine
+// the validity of the expression.
+//
+// This function is designed for types suitable for variables and should not be
+// used with Tuple or Union types.References to named types are qualified by an
+// appropriate (optional) qualifier function.
+//
+// See [ZeroString] for a variant that returns a string.
+func ZeroExpr(t types.Type, qual types.Qualifier) (_ ast.Expr, isValid bool) {
+	switch t := t.(type) {
+	case *types.Basic:
+		switch {
+		case t.Info()&types.IsBoolean != 0:
+			return &ast.Ident{Name: "false"}, true
+		case t.Info()&types.IsNumeric != 0:
+			return &ast.BasicLit{Kind: token.INT, Value: "0"}, true
+		case t.Info()&types.IsString != 0:
+			return &ast.BasicLit{Kind: token.STRING, Value: `""`}, true
+		case t.Kind() == types.UnsafePointer:
+			fallthrough
+		case t.Kind() == types.UntypedNil:
+			return ast.NewIdent("nil"), true
+		case t.Kind() == types.Invalid:
+			return &ast.BasicLit{Kind: token.STRING, Value: `"invalid"`}, false
+		default:
+			panic(fmt.Sprintf("ZeroExpr for unexpected type %v", t))
+		}
+
+	case *types.Pointer, *types.Slice, *types.Chan, *types.Map, *types.Signature:
+		return ast.NewIdent("nil"), true
+
+	case *types.Interface:
+		if !t.IsMethodSet() {
+			return &ast.BasicLit{Kind: token.STRING, Value: `"invalid"`}, false
+		}
+		return ast.NewIdent("nil"), true
+
+	case *types.Named:
+		switch under := t.Underlying().(type) {
+		case *types.Struct, *types.Array:
+			return &ast.CompositeLit{
+				Type: TypeExpr(t, qual),
+			}, true
+		default:
+			return ZeroExpr(under, qual)
+		}
+
+	case *types.Alias:
+		switch t.Underlying().(type) {
+		case *types.Struct, *types.Array:
+			return &ast.CompositeLit{
+				Type: TypeExpr(t, qual),
+			}, true
+		default:
+			return ZeroExpr(types.Unalias(t), qual)
+		}
+
+	case *types.Array, *types.Struct:
+		return &ast.CompositeLit{
+			Type: TypeExpr(t, qual),
+		}, true
+
+	case *types.TypeParam:
+		return &ast.StarExpr{ // *new(T)
+			X: &ast.CallExpr{
+				// Assumes func new is not shadowed.
+				Fun: ast.NewIdent("new"),
+				Args: []ast.Expr{
+					ast.NewIdent(t.Obj().Name()),
+				},
+			},
+		}, true
+
+	case *types.Tuple:
+		// Unlike ZeroString, there is no ast.Expr can express tuple by
+		// "(t[0], ..., t[n])".
+		panic(fmt.Sprintf("invalid type for a variable: %v", t))
+
+	case *types.Union:
+		// Variables of these types cannot be created, so it makes
+		// no sense to ask for their zero value.
+		panic(fmt.Sprintf("invalid type for a variable: %v", t))
+
+	default:
+		panic(t) // unreachable.
+	}
+}
+
+// IsZeroExpr uses simple syntactic heuristics to report whether expr
+// is a obvious zero value, such as 0, "", nil, or false.
+// It cannot do better without type information.
+func IsZeroExpr(expr ast.Expr) bool {
+	switch e := expr.(type) {
+	case *ast.BasicLit:
+		return e.Value == "0" || e.Value == `""`
+	case *ast.Ident:
+		return e.Name == "nil" || e.Name == "false"
+	default:
+		return false
+	}
+}
+
+// TypeExpr returns syntax for the specified type. References to named types
+// are qualified by an appropriate (optional) qualifier function.
+// It may panic for types such as Tuple or Union.
+func TypeExpr(t types.Type, qual types.Qualifier) ast.Expr {
+	switch t := t.(type) {
+	case *types.Basic:
+		switch t.Kind() {
+		case types.UnsafePointer:
+			return &ast.SelectorExpr{X: ast.NewIdent(qual(types.NewPackage("unsafe", "unsafe"))), Sel: ast.NewIdent("Pointer")}
+		default:
+			return ast.NewIdent(t.Name())
+		}
+
+	case *types.Pointer:
+		return &ast.UnaryExpr{
+			Op: token.MUL,
+			X:  TypeExpr(t.Elem(), qual),
+		}
+
+	case *types.Array:
+		return &ast.ArrayType{
+			Len: &ast.BasicLit{
+				Kind:  token.INT,
+				Value: fmt.Sprintf("%d", t.Len()),
+			},
+			Elt: TypeExpr(t.Elem(), qual),
+		}
+
+	case *types.Slice:
+		return &ast.ArrayType{
+			Elt: TypeExpr(t.Elem(), qual),
+		}
+
+	case *types.Map:
+		return &ast.MapType{
+			Key:   TypeExpr(t.Key(), qual),
+			Value: TypeExpr(t.Elem(), qual),
+		}
+
+	case *types.Chan:
+		dir := ast.ChanDir(t.Dir())
+		if t.Dir() == types.SendRecv {
+			dir = ast.SEND | ast.RECV
+		}
+		return &ast.ChanType{
+			Dir:   dir,
+			Value: TypeExpr(t.Elem(), qual),
+		}
+
+	case *types.Signature:
+		var params []*ast.Field
+		for i := 0; i < t.Params().Len(); i++ {
+			params = append(params, &ast.Field{
+				Type: TypeExpr(t.Params().At(i).Type(), qual),
+				Names: []*ast.Ident{
+					{
+						Name: t.Params().At(i).Name(),
+					},
+				},
+			})
+		}
+		if t.Variadic() {
+			last := params[len(params)-1]
+			last.Type = &ast.Ellipsis{Elt: last.Type.(*ast.ArrayType).Elt}
+		}
+		var returns []*ast.Field
+		for i := 0; i < t.Results().Len(); i++ {
+			returns = append(returns, &ast.Field{
+				Type: TypeExpr(t.Results().At(i).Type(), qual),
+			})
+		}
+		return &ast.FuncType{
+			Params: &ast.FieldList{
+				List: params,
+			},
+			Results: &ast.FieldList{
+				List: returns,
+			},
+		}
+
+	case *types.TypeParam:
+		pkgName := qual(t.Obj().Pkg())
+		if pkgName == "" || t.Obj().Pkg() == nil {
+			return ast.NewIdent(t.Obj().Name())
+		}
+		return &ast.SelectorExpr{
+			X:   ast.NewIdent(pkgName),
+			Sel: ast.NewIdent(t.Obj().Name()),
+		}
+
+	// types.TypeParam also implements interface NamedOrAlias. To differentiate,
+	// case TypeParam need to be present before case NamedOrAlias.
+	// TODO(hxjiang): remove this comment once TypeArgs() is added to interface
+	// NamedOrAlias.
+	case NamedOrAlias:
+		var expr ast.Expr = ast.NewIdent(t.Obj().Name())
+		if pkgName := qual(t.Obj().Pkg()); pkgName != "." && pkgName != "" {
+			expr = &ast.SelectorExpr{
+				X:   ast.NewIdent(pkgName),
+				Sel: expr.(*ast.Ident),
+			}
+		}
+
+		// TODO(hxjiang): call t.TypeArgs after adding method TypeArgs() to
+		// typesinternal.NamedOrAlias.
+		if hasTypeArgs, ok := t.(interface{ TypeArgs() *types.TypeList }); ok {
+			if typeArgs := hasTypeArgs.TypeArgs(); typeArgs != nil && typeArgs.Len() > 0 {
+				var indices []ast.Expr
+				for i := range typeArgs.Len() {
+					indices = append(indices, TypeExpr(typeArgs.At(i), qual))
+				}
+				expr = &ast.IndexListExpr{
+					X:       expr,
+					Indices: indices,
+				}
+			}
+		}
+
+		return expr
+
+	case *types.Struct:
+		return ast.NewIdent(t.String())
+
+	case *types.Interface:
+		return ast.NewIdent(t.String())
+
+	case *types.Union:
+		if t.Len() == 0 {
+			panic("Union type should have at least one term")
+		}
+		// Same as go/ast, the return expression will put last term in the
+		// Y field at topmost level of BinaryExpr.
+		// For union of type "float32 | float64 | int64", the structure looks
+		// similar to:
+		// {
+		// 	X: {
+		// 		X: float32,
+		// 		Op: |
+		// 		Y: float64,
+		// 	}
+		// 	Op: |,
+		// 	Y: int64,
+		// }
+		var union ast.Expr
+		for i := range t.Len() {
+			term := t.Term(i)
+			termExpr := TypeExpr(term.Type(), qual)
+			if term.Tilde() {
+				termExpr = &ast.UnaryExpr{
+					Op: token.TILDE,
+					X:  termExpr,
+				}
+			}
+			if i == 0 {
+				union = termExpr
+			} else {
+				union = &ast.BinaryExpr{
+					X:  union,
+					Op: token.OR,
+					Y:  termExpr,
+				}
+			}
+		}
+		return union
+
+	case *types.Tuple:
+		panic("invalid input type types.Tuple")
+
+	default:
+		panic("unreachable")
+	}
+}
diff --git a/vendor/golang.org/x/tools/internal/versions/toolchain.go b/vendor/golang.org/x/tools/internal/versions/toolchain.go
deleted file mode 100644
index 377bf7a5..00000000
--- a/vendor/golang.org/x/tools/internal/versions/toolchain.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2024 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 versions
-
-// toolchain is maximum version (<1.22) that the go toolchain used
-// to build the current tool is known to support.
-//
-// When a tool is built with >=1.22, the value of toolchain is unused.
-//
-// x/tools does not support building with go <1.18. So we take this
-// as the minimum possible maximum.
-var toolchain string = Go1_18
diff --git a/vendor/golang.org/x/tools/internal/versions/toolchain_go119.go b/vendor/golang.org/x/tools/internal/versions/toolchain_go119.go
deleted file mode 100644
index f65beed9..00000000
--- a/vendor/golang.org/x/tools/internal/versions/toolchain_go119.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2024 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.
-
-//go:build go1.19
-// +build go1.19
-
-package versions
-
-func init() {
-	if Compare(toolchain, Go1_19) < 0 {
-		toolchain = Go1_19
-	}
-}
diff --git a/vendor/golang.org/x/tools/internal/versions/toolchain_go120.go b/vendor/golang.org/x/tools/internal/versions/toolchain_go120.go
deleted file mode 100644
index 1a9efa12..00000000
--- a/vendor/golang.org/x/tools/internal/versions/toolchain_go120.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2024 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.
-
-//go:build go1.20
-// +build go1.20
-
-package versions
-
-func init() {
-	if Compare(toolchain, Go1_20) < 0 {
-		toolchain = Go1_20
-	}
-}
diff --git a/vendor/golang.org/x/tools/internal/versions/toolchain_go121.go b/vendor/golang.org/x/tools/internal/versions/toolchain_go121.go
deleted file mode 100644
index b7ef216d..00000000
--- a/vendor/golang.org/x/tools/internal/versions/toolchain_go121.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2024 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.
-
-//go:build go1.21
-// +build go1.21
-
-package versions
-
-func init() {
-	if Compare(toolchain, Go1_21) < 0 {
-		toolchain = Go1_21
-	}
-}
diff --git a/vendor/golang.org/x/tools/internal/versions/types.go b/vendor/golang.org/x/tools/internal/versions/types.go
index 562eef21..0fc10ce4 100644
--- a/vendor/golang.org/x/tools/internal/versions/types.go
+++ b/vendor/golang.org/x/tools/internal/versions/types.go
@@ -5,15 +5,29 @@
 package versions
 
 import (
+	"go/ast"
 	"go/types"
 )
 
-// GoVersion returns the Go version of the type package.
-// It returns zero if no version can be determined.
-func GoVersion(pkg *types.Package) string {
-	// TODO(taking): x/tools can call GoVersion() [from 1.21] after 1.25.
-	if pkg, ok := any(pkg).(interface{ GoVersion() string }); ok {
-		return pkg.GoVersion()
+// FileVersion returns a file's Go version.
+// The reported version is an unknown Future version if a
+// version cannot be determined.
+func FileVersion(info *types.Info, file *ast.File) string {
+	// In tools built with Go >= 1.22, the Go version of a file
+	// follow a cascades of sources:
+	// 1) types.Info.FileVersion, which follows the cascade:
+	//   1.a) file version (ast.File.GoVersion),
+	//   1.b) the package version (types.Config.GoVersion), or
+	// 2) is some unknown Future version.
+	//
+	// File versions require a valid package version to be provided to types
+	// in Config.GoVersion. Config.GoVersion is either from the package's module
+	// or the toolchain (go run). This value should be provided by go/packages
+	// or unitchecker.Config.GoVersion.
+	if v := info.FileVersions[file]; IsValid(v) {
+		return v
 	}
-	return ""
+	// Note: we could instead return runtime.Version() [if valid].
+	// This would act as a max version on what a tool can support.
+	return Future
 }
diff --git a/vendor/golang.org/x/tools/internal/versions/types_go121.go b/vendor/golang.org/x/tools/internal/versions/types_go121.go
deleted file mode 100644
index b4345d33..00000000
--- a/vendor/golang.org/x/tools/internal/versions/types_go121.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2023 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.
-
-//go:build !go1.22
-// +build !go1.22
-
-package versions
-
-import (
-	"go/ast"
-	"go/types"
-)
-
-// FileVersion returns a language version (<=1.21) derived from runtime.Version()
-// or an unknown future version.
-func FileVersion(info *types.Info, file *ast.File) string {
-	// In x/tools built with Go <= 1.21, we do not have Info.FileVersions
-	// available. We use a go version derived from the toolchain used to
-	// compile the tool by default.
-	// This will be <= go1.21. We take this as the maximum version that
-	// this tool can support.
-	//
-	// There are no features currently in x/tools that need to tell fine grained
-	// differences for versions <1.22.
-	return toolchain
-}
-
-// InitFileVersions is a noop when compiled with this Go version.
-func InitFileVersions(*types.Info) {}
diff --git a/vendor/golang.org/x/tools/internal/versions/types_go122.go b/vendor/golang.org/x/tools/internal/versions/types_go122.go
deleted file mode 100644
index e8180632..00000000
--- a/vendor/golang.org/x/tools/internal/versions/types_go122.go
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2023 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.
-
-//go:build go1.22
-// +build go1.22
-
-package versions
-
-import (
-	"go/ast"
-	"go/types"
-)
-
-// FileVersions returns a file's Go version.
-// The reported version is an unknown Future version if a
-// version cannot be determined.
-func FileVersion(info *types.Info, file *ast.File) string {
-	// In tools built with Go >= 1.22, the Go version of a file
-	// follow a cascades of sources:
-	// 1) types.Info.FileVersion, which follows the cascade:
-	//   1.a) file version (ast.File.GoVersion),
-	//   1.b) the package version (types.Config.GoVersion), or
-	// 2) is some unknown Future version.
-	//
-	// File versions require a valid package version to be provided to types
-	// in Config.GoVersion. Config.GoVersion is either from the package's module
-	// or the toolchain (go run). This value should be provided by go/packages
-	// or unitchecker.Config.GoVersion.
-	if v := info.FileVersions[file]; IsValid(v) {
-		return v
-	}
-	// Note: we could instead return runtime.Version() [if valid].
-	// This would act as a max version on what a tool can support.
-	return Future
-}
-
-// InitFileVersions initializes info to record Go versions for Go files.
-func InitFileVersions(info *types.Info) {
-	info.FileVersions = make(map[*ast.File]string)
-}
diff --git a/vendor/golang.org/x/xerrors/LICENSE b/vendor/golang.org/x/xerrors/LICENSE
index e4a47e17..c3c8b7d2 100644
--- a/vendor/golang.org/x/xerrors/LICENSE
+++ b/vendor/golang.org/x/xerrors/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2019 The Go Authors. All rights reserved.
+Copyright 2019 The Go Authors.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are
@@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer.
 copyright notice, this list of conditions and the following disclaimer
 in the documentation and/or other materials provided with the
 distribution.
-   * Neither the name of Google Inc. nor the names of its
+   * Neither the name of Google LLC nor the names of its
 contributors may be used to endorse or promote products derived from
 this software without specific prior written permission.
 
diff --git a/vendor/golang.org/x/xerrors/adaptor.go b/vendor/golang.org/x/xerrors/adaptor.go
index 4317f248..c3c5f8e6 100644
--- a/vendor/golang.org/x/xerrors/adaptor.go
+++ b/vendor/golang.org/x/xerrors/adaptor.go
@@ -175,13 +175,13 @@ func (s *state) Write(b []byte) (n int, err error) {
 // printer wraps a state to implement an xerrors.Printer.
 type printer state
 
-func (s *printer) Print(args ...interface{}) {
+func (s *printer) Print(args ...any) {
 	if !s.inDetail || s.printDetail {
 		fmt.Fprint((*state)(s), args...)
 	}
 }
 
-func (s *printer) Printf(format string, args ...interface{}) {
+func (s *printer) Printf(format string, args ...any) {
 	if !s.inDetail || s.printDetail {
 		fmt.Fprintf((*state)(s), format, args...)
 	}
diff --git a/vendor/golang.org/x/xerrors/doc.go b/vendor/golang.org/x/xerrors/doc.go
index 2ef99f5a..c255c433 100644
--- a/vendor/golang.org/x/xerrors/doc.go
+++ b/vendor/golang.org/x/xerrors/doc.go
@@ -6,7 +6,7 @@
 //
 // This package is based on the Go 2 proposal for error values:
 //
-//	https://golang.org/design/29934-error-values
+// https://go.dev/design/29934-error-values
 //
 // These functions were incorporated into the standard library's errors package
 // in Go 1.13:
@@ -16,8 +16,6 @@
 //
 // Also, Errorf's %w verb was incorporated into fmt.Errorf.
 //
-// Use this package to get equivalent behavior in all supported Go versions.
-//
 // No other features of this package were included in Go 1.13, and at present
 // there are no plans to include any of them.
-package xerrors // import "golang.org/x/xerrors"
+package xerrors
diff --git a/vendor/golang.org/x/xerrors/fmt.go b/vendor/golang.org/x/xerrors/fmt.go
index 27a5d70b..268f28f2 100644
--- a/vendor/golang.org/x/xerrors/fmt.go
+++ b/vendor/golang.org/x/xerrors/fmt.go
@@ -36,7 +36,7 @@ const percentBangString = "%!"
 //
 // Note that as of Go 1.13, the fmt.Errorf function will do error formatting,
 // but it will not capture a stack backtrace.
-func Errorf(format string, a ...interface{}) error {
+func Errorf(format string, a ...any) error {
 	format = formatPlusW(format)
 	// Support a ": %[wsv]" suffix, which works well with xerrors.Formatter.
 	wrap := strings.HasSuffix(format, ": %w")
@@ -81,7 +81,7 @@ func Errorf(format string, a ...interface{}) error {
 	return &wrapError{msg, err, frame}
 }
 
-func errorAt(args []interface{}, i int) error {
+func errorAt(args []any, i int) error {
 	if i < 0 || i >= len(args) {
 		return nil
 	}
diff --git a/vendor/golang.org/x/xerrors/format.go b/vendor/golang.org/x/xerrors/format.go
index 1bc9c26b..9e5ec6cc 100644
--- a/vendor/golang.org/x/xerrors/format.go
+++ b/vendor/golang.org/x/xerrors/format.go
@@ -20,10 +20,10 @@ type Formatter interface {
 // typically provide their own implementations.
 type Printer interface {
 	// Print appends args to the message output.
-	Print(args ...interface{})
+	Print(args ...any)
 
 	// Printf writes a formatted string.
-	Printf(format string, args ...interface{})
+	Printf(format string, args ...any)
 
 	// Detail reports whether error detail is requested.
 	// After the first call to Detail, all text written to the Printer
diff --git a/vendor/golang.org/x/xerrors/wrap.go b/vendor/golang.org/x/xerrors/wrap.go
index 9842758c..b54e1381 100644
--- a/vendor/golang.org/x/xerrors/wrap.go
+++ b/vendor/golang.org/x/xerrors/wrap.go
@@ -4,9 +4,7 @@
 
 package xerrors
 
-import (
-	"reflect"
-)
+import "errors"
 
 // A Wrapper provides context around another error.
 type Wrapper interface {
@@ -36,77 +34,50 @@ func (e noWrapper) FormatError(p Printer) (next error) {
 // Unwrap returns the result of calling the Unwrap method on err, if err implements
 // Unwrap. Otherwise, Unwrap returns nil.
 //
-// Deprecated: As of Go 1.13, use errors.Unwrap instead.
-func Unwrap(err error) error {
-	u, ok := err.(Wrapper)
-	if !ok {
-		return nil
-	}
-	return u.Unwrap()
-}
+// Unwrap only calls a method of the form "Unwrap() error".
+// In particular Unwrap does not unwrap errors returned by [errors.Join].
+//
+// Deprecated: As of Go 1.13, this function simply calls [errors.Unwrap].
+func Unwrap(err error) error { return errors.Unwrap(err) }
 
-// Is reports whether any error in err's chain matches target.
+// Is reports whether any error in err's tree matches target.
+//
+// The tree consists of err itself, followed by the errors obtained by repeatedly
+// calling its Unwrap() error or Unwrap() []error method. When err wraps multiple
+// errors, Is examines err followed by a depth-first traversal of its children.
 //
 // An error is considered to match a target if it is equal to that target or if
 // it implements a method Is(error) bool such that Is(target) returns true.
 //
-// Deprecated: As of Go 1.13, use errors.Is instead.
-func Is(err, target error) bool {
-	if target == nil {
-		return err == target
-	}
-
-	isComparable := reflect.TypeOf(target).Comparable()
-	for {
-		if isComparable && err == target {
-			return true
-		}
-		if x, ok := err.(interface{ Is(error) bool }); ok && x.Is(target) {
-			return true
-		}
-		// TODO: consider supporing target.Is(err). This would allow
-		// user-definable predicates, but also may allow for coping with sloppy
-		// APIs, thereby making it easier to get away with them.
-		if err = Unwrap(err); err == nil {
-			return false
-		}
-	}
-}
-
-// As finds the first error in err's chain that matches the type to which target
-// points, and if so, sets the target to its value and returns true. An error
-// matches a type if it is assignable to the target type, or if it has a method
-// As(interface{}) bool such that As(target) returns true. As will panic if target
-// is not a non-nil pointer to a type which implements error or is of interface type.
+// An error type might provide an Is method so it can be treated as equivalent
+// to an existing error. For example, if MyError defines
 //
-// The As method should set the target to its value and return true if err
-// matches the type to which target points.
+//	func (m MyError) Is(target error) bool { return target == fs.ErrExist }
 //
-// Deprecated: As of Go 1.13, use errors.As instead.
-func As(err error, target interface{}) bool {
-	if target == nil {
-		panic("errors: target cannot be nil")
-	}
-	val := reflect.ValueOf(target)
-	typ := val.Type()
-	if typ.Kind() != reflect.Ptr || val.IsNil() {
-		panic("errors: target must be a non-nil pointer")
-	}
-	if e := typ.Elem(); e.Kind() != reflect.Interface && !e.Implements(errorType) {
-		panic("errors: *target must be interface or implement error")
-	}
-	targetType := typ.Elem()
-	for err != nil {
-		if reflect.TypeOf(err).AssignableTo(targetType) {
-			val.Elem().Set(reflect.ValueOf(err))
-			return true
-		}
-		if x, ok := err.(interface{ As(interface{}) bool }); ok && x.As(target) {
-			return true
-		}
-		err = Unwrap(err)
-	}
-	return false
-}
+// then Is(MyError{}, fs.ErrExist) returns true. See [syscall.Errno.Is] for
+// an example in the standard library. An Is method should only shallowly
+// compare err and the target and not call [Unwrap] on either.
+//
+// Deprecated: As of Go 1.13, this function simply calls [errors.Is].
+func Is(err, target error) bool { return errors.Is(err, target) }
 
-var errorType = reflect.TypeOf((*error)(nil)).Elem()
+// As finds the first error in err's tree that matches target, and if one is found,
+// sets target to that error value and returns true. Otherwise, it returns false.
+//
+// The tree consists of err itself, followed by the errors obtained by repeatedly
+// calling its Unwrap() error or Unwrap() []error method. When err wraps multiple
+// errors, As examines err followed by a depth-first traversal of its children.
+//
+// An error matches target if the error's concrete value is assignable to the value
+// pointed to by target, or if the error has a method As(any) bool such that
+// As(target) returns true. In the latter case, the As method is responsible for
+// setting target.
+//
+// An error type might provide an As method so it can be treated as if it were a
+// different error type.
+//
+// As panics if target is not a non-nil pointer to either a type that implements
+// error, or to any interface type.
+//
+// Deprecated: As of Go 1.13, this function simply calls [errors.As].
+func As(err error, target any) bool { return errors.As(err, target) }
diff --git a/vendor/google.golang.org/grpc/balancer/base/balancer.go b/vendor/google.golang.org/grpc/balancer/base/balancer.go
index a7f1eeec..2b87bd79 100644
--- a/vendor/google.golang.org/grpc/balancer/base/balancer.go
+++ b/vendor/google.golang.org/grpc/balancer/base/balancer.go
@@ -36,7 +36,7 @@ type baseBuilder struct {
 	config        Config
 }
 
-func (bb *baseBuilder) Build(cc balancer.ClientConn, opt balancer.BuildOptions) balancer.Balancer {
+func (bb *baseBuilder) Build(cc balancer.ClientConn, _ balancer.BuildOptions) balancer.Balancer {
 	bal := &baseBalancer{
 		cc:            cc,
 		pickerBuilder: bb.pickerBuilder,
@@ -259,6 +259,6 @@ type errPicker struct {
 	err error // Pick() always returns this err.
 }
 
-func (p *errPicker) Pick(info balancer.PickInfo) (balancer.PickResult, error) {
+func (p *errPicker) Pick(balancer.PickInfo) (balancer.PickResult, error) {
 	return balancer.PickResult{}, p.err
 }
diff --git a/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go b/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go
index 5b592f48..4d69b405 100644
--- a/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go
+++ b/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go
@@ -50,7 +50,7 @@ const (
 
 type pickfirstBuilder struct{}
 
-func (pickfirstBuilder) Build(cc balancer.ClientConn, opt balancer.BuildOptions) balancer.Balancer {
+func (pickfirstBuilder) Build(cc balancer.ClientConn, _ balancer.BuildOptions) balancer.Balancer {
 	b := &pickfirstBalancer{cc: cc}
 	b.logger = internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf(logPrefix, b))
 	return b
diff --git a/vendor/google.golang.org/grpc/balancer_wrapper.go b/vendor/google.golang.org/grpc/balancer_wrapper.go
index 6561b769..8ad6ce2f 100644
--- a/vendor/google.golang.org/grpc/balancer_wrapper.go
+++ b/vendor/google.golang.org/grpc/balancer_wrapper.go
@@ -192,7 +192,7 @@ func (ccb *ccBalancerWrapper) NewSubConn(addrs []resolver.Address, opts balancer
 	return acbw, nil
 }
 
-func (ccb *ccBalancerWrapper) RemoveSubConn(sc balancer.SubConn) {
+func (ccb *ccBalancerWrapper) RemoveSubConn(balancer.SubConn) {
 	// The graceful switch balancer will never call this.
 	logger.Errorf("ccb RemoveSubConn(%v) called unexpectedly, sc")
 }
@@ -342,8 +342,8 @@ func (acbw *acBalancerWrapper) GetOrBuildProducer(pb balancer.ProducerBuilder) (
 	pData := acbw.producers[pb]
 	if pData == nil {
 		// Not found; create a new one and add it to the producers map.
-		p, close := pb.Build(acbw)
-		pData = &refCountedProducer{producer: p, close: close}
+		p, closeFn := pb.Build(acbw)
+		pData = &refCountedProducer{producer: p, close: closeFn}
 		acbw.producers[pb] = pData
 	}
 	// Account for this new reference.
diff --git a/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go b/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go
index fcd1cfe8..55bffaa7 100644
--- a/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go
+++ b/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go
@@ -18,7 +18,7 @@
 
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.34.1
+// 	protoc-gen-go v1.34.2
 // 	protoc        v5.27.1
 // source: grpc/binlog/v1/binarylog.proto
 
@@ -1015,7 +1015,7 @@ func file_grpc_binlog_v1_binarylog_proto_rawDescGZIP() []byte {
 
 var file_grpc_binlog_v1_binarylog_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
 var file_grpc_binlog_v1_binarylog_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
-var file_grpc_binlog_v1_binarylog_proto_goTypes = []interface{}{
+var file_grpc_binlog_v1_binarylog_proto_goTypes = []any{
 	(GrpcLogEntry_EventType)(0),   // 0: grpc.binarylog.v1.GrpcLogEntry.EventType
 	(GrpcLogEntry_Logger)(0),      // 1: grpc.binarylog.v1.GrpcLogEntry.Logger
 	(Address_Type)(0),             // 2: grpc.binarylog.v1.Address.Type
@@ -1058,7 +1058,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() {
 		return
 	}
 	if !protoimpl.UnsafeEnabled {
-		file_grpc_binlog_v1_binarylog_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+		file_grpc_binlog_v1_binarylog_proto_msgTypes[0].Exporter = func(v any, i int) any {
 			switch v := v.(*GrpcLogEntry); i {
 			case 0:
 				return &v.state
@@ -1070,7 +1070,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() {
 				return nil
 			}
 		}
-		file_grpc_binlog_v1_binarylog_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+		file_grpc_binlog_v1_binarylog_proto_msgTypes[1].Exporter = func(v any, i int) any {
 			switch v := v.(*ClientHeader); i {
 			case 0:
 				return &v.state
@@ -1082,7 +1082,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() {
 				return nil
 			}
 		}
-		file_grpc_binlog_v1_binarylog_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+		file_grpc_binlog_v1_binarylog_proto_msgTypes[2].Exporter = func(v any, i int) any {
 			switch v := v.(*ServerHeader); i {
 			case 0:
 				return &v.state
@@ -1094,7 +1094,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() {
 				return nil
 			}
 		}
-		file_grpc_binlog_v1_binarylog_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+		file_grpc_binlog_v1_binarylog_proto_msgTypes[3].Exporter = func(v any, i int) any {
 			switch v := v.(*Trailer); i {
 			case 0:
 				return &v.state
@@ -1106,7 +1106,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() {
 				return nil
 			}
 		}
-		file_grpc_binlog_v1_binarylog_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+		file_grpc_binlog_v1_binarylog_proto_msgTypes[4].Exporter = func(v any, i int) any {
 			switch v := v.(*Message); i {
 			case 0:
 				return &v.state
@@ -1118,7 +1118,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() {
 				return nil
 			}
 		}
-		file_grpc_binlog_v1_binarylog_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+		file_grpc_binlog_v1_binarylog_proto_msgTypes[5].Exporter = func(v any, i int) any {
 			switch v := v.(*Metadata); i {
 			case 0:
 				return &v.state
@@ -1130,7 +1130,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() {
 				return nil
 			}
 		}
-		file_grpc_binlog_v1_binarylog_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+		file_grpc_binlog_v1_binarylog_proto_msgTypes[6].Exporter = func(v any, i int) any {
 			switch v := v.(*MetadataEntry); i {
 			case 0:
 				return &v.state
@@ -1142,7 +1142,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() {
 				return nil
 			}
 		}
-		file_grpc_binlog_v1_binarylog_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+		file_grpc_binlog_v1_binarylog_proto_msgTypes[7].Exporter = func(v any, i int) any {
 			switch v := v.(*Address); i {
 			case 0:
 				return &v.state
@@ -1155,7 +1155,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() {
 			}
 		}
 	}
-	file_grpc_binlog_v1_binarylog_proto_msgTypes[0].OneofWrappers = []interface{}{
+	file_grpc_binlog_v1_binarylog_proto_msgTypes[0].OneofWrappers = []any{
 		(*GrpcLogEntry_ClientHeader)(nil),
 		(*GrpcLogEntry_ServerHeader)(nil),
 		(*GrpcLogEntry_Message)(nil),
diff --git a/vendor/google.golang.org/grpc/credentials/insecure/insecure.go b/vendor/google.golang.org/grpc/credentials/insecure/insecure.go
index 82bee144..4c805c64 100644
--- a/vendor/google.golang.org/grpc/credentials/insecure/insecure.go
+++ b/vendor/google.golang.org/grpc/credentials/insecure/insecure.go
@@ -40,7 +40,7 @@ func NewCredentials() credentials.TransportCredentials {
 // NoSecurity.
 type insecureTC struct{}
 
-func (insecureTC) ClientHandshake(ctx context.Context, _ string, conn net.Conn) (net.Conn, credentials.AuthInfo, error) {
+func (insecureTC) ClientHandshake(_ context.Context, _ string, conn net.Conn) (net.Conn, credentials.AuthInfo, error) {
 	return conn, info{credentials.CommonAuthInfo{SecurityLevel: credentials.NoSecurity}}, nil
 }
 
diff --git a/vendor/google.golang.org/grpc/dialoptions.go b/vendor/google.golang.org/grpc/dialoptions.go
index 27c1b9bb..2b285bee 100644
--- a/vendor/google.golang.org/grpc/dialoptions.go
+++ b/vendor/google.golang.org/grpc/dialoptions.go
@@ -518,6 +518,8 @@ func WithUserAgent(s string) DialOption {
 
 // WithKeepaliveParams returns a DialOption that specifies keepalive parameters
 // for the client transport.
+//
+// Keepalive is disabled by default.
 func WithKeepaliveParams(kp keepalive.ClientParameters) DialOption {
 	if kp.Time < internal.KeepaliveMinPingTime {
 		logger.Warningf("Adjusting keepalive ping interval to minimum period of %v", internal.KeepaliveMinPingTime)
diff --git a/vendor/google.golang.org/grpc/grpclog/internal/logger.go b/vendor/google.golang.org/grpc/grpclog/internal/logger.go
index 0d9a824c..e524fdd4 100644
--- a/vendor/google.golang.org/grpc/grpclog/internal/logger.go
+++ b/vendor/google.golang.org/grpc/grpclog/internal/logger.go
@@ -81,7 +81,7 @@ func (l *LoggerWrapper) Errorf(format string, args ...any) {
 }
 
 // V reports whether verbosity level l is at least the requested verbose level.
-func (*LoggerWrapper) V(l int) bool {
+func (*LoggerWrapper) V(int) bool {
 	// Returns true for all verbose level.
 	return true
 }
diff --git a/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go b/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go
index aa4505a8..96693289 100644
--- a/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go
+++ b/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go
@@ -106,7 +106,7 @@ func (ml *TruncatingMethodLogger) Build(c LogEntryConfig) *binlogpb.GrpcLogEntry
 }
 
 // Log creates a proto binary log entry, and logs it to the sink.
-func (ml *TruncatingMethodLogger) Log(ctx context.Context, c LogEntryConfig) {
+func (ml *TruncatingMethodLogger) Log(_ context.Context, c LogEntryConfig) {
 	ml.sink.Write(ml.Build(c))
 }
 
diff --git a/vendor/google.golang.org/grpc/internal/channelz/channelmap.go b/vendor/google.golang.org/grpc/internal/channelz/channelmap.go
index bb531225..64c79195 100644
--- a/vendor/google.golang.org/grpc/internal/channelz/channelmap.go
+++ b/vendor/google.golang.org/grpc/internal/channelz/channelmap.go
@@ -234,13 +234,6 @@ func copyMap(m map[int64]string) map[int64]string {
 	return n
 }
 
-func min(a, b int) int {
-	if a < b {
-		return a
-	}
-	return b
-}
-
 func (c *channelMap) getTopChannels(id int64, maxResults int) ([]*Channel, bool) {
 	if maxResults <= 0 {
 		maxResults = EntriesPerPage
diff --git a/vendor/google.golang.org/grpc/internal/channelz/funcs.go b/vendor/google.golang.org/grpc/internal/channelz/funcs.go
index 03e24e15..078bb812 100644
--- a/vendor/google.golang.org/grpc/internal/channelz/funcs.go
+++ b/vendor/google.golang.org/grpc/internal/channelz/funcs.go
@@ -33,7 +33,7 @@ var (
 	// outside this package except by tests.
 	IDGen IDGenerator
 
-	db *channelMap = newChannelMap()
+	db = newChannelMap()
 	// EntriesPerPage defines the number of channelz entries to be shown on a web page.
 	EntriesPerPage = 50
 	curState       int32
diff --git a/vendor/google.golang.org/grpc/internal/channelz/syscall_nonlinux.go b/vendor/google.golang.org/grpc/internal/channelz/syscall_nonlinux.go
index d1ed8df6..0e6e18e1 100644
--- a/vendor/google.golang.org/grpc/internal/channelz/syscall_nonlinux.go
+++ b/vendor/google.golang.org/grpc/internal/channelz/syscall_nonlinux.go
@@ -35,13 +35,13 @@ type SocketOptionData struct {
 // Getsockopt defines the function to get socket options requested by channelz.
 // It is to be passed to syscall.RawConn.Control().
 // Windows OS doesn't support Socket Option
-func (s *SocketOptionData) Getsockopt(fd uintptr) {
+func (s *SocketOptionData) Getsockopt(uintptr) {
 	once.Do(func() {
 		logger.Warning("Channelz: socket options are not supported on non-linux environments")
 	})
 }
 
 // GetSocketOption gets the socket option info of the conn.
-func GetSocketOption(c any) *SocketOptionData {
+func GetSocketOption(any) *SocketOptionData {
 	return nil
 }
diff --git a/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go b/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go
index 00abc7c2..452985f8 100644
--- a/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go
+++ b/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go
@@ -45,7 +45,7 @@ var (
 	// option is present for backward compatibility. This option may be overridden
 	// by setting the environment variable "GRPC_ENFORCE_ALPN_ENABLED" to "true"
 	// or "false".
-	EnforceALPNEnabled = boolFromEnv("GRPC_ENFORCE_ALPN_ENABLED", false)
+	EnforceALPNEnabled = boolFromEnv("GRPC_ENFORCE_ALPN_ENABLED", true)
 	// XDSFallbackSupport is the env variable that controls whether support for
 	// xDS fallback is turned on. If this is unset or is false, only the first
 	// xDS server in the list of server configs will be used.
diff --git a/vendor/google.golang.org/grpc/internal/internal.go b/vendor/google.golang.org/grpc/internal/internal.go
index 73fa407b..7aae9240 100644
--- a/vendor/google.golang.org/grpc/internal/internal.go
+++ b/vendor/google.golang.org/grpc/internal/internal.go
@@ -183,7 +183,7 @@ var (
 
 	// GRPCResolverSchemeExtraMetadata determines when gRPC will add extra
 	// metadata to RPCs.
-	GRPCResolverSchemeExtraMetadata string = "xds"
+	GRPCResolverSchemeExtraMetadata = "xds"
 
 	// EnterIdleModeForTesting gets the ClientConn to enter IDLE mode.
 	EnterIdleModeForTesting any // func(*grpc.ClientConn)
@@ -203,7 +203,7 @@ var (
 
 	// UserSetDefaultScheme is set to true if the user has overridden the
 	// default resolver scheme.
-	UserSetDefaultScheme bool = false
+	UserSetDefaultScheme = false
 
 	// ShuffleAddressListForTesting pseudo-randomizes the order of addresses.  n
 	// is the number of elements.  swap swaps the elements with indexes i and j.
diff --git a/vendor/google.golang.org/grpc/internal/resolver/passthrough/passthrough.go b/vendor/google.golang.org/grpc/internal/resolver/passthrough/passthrough.go
index afac5657..b901c7ba 100644
--- a/vendor/google.golang.org/grpc/internal/resolver/passthrough/passthrough.go
+++ b/vendor/google.golang.org/grpc/internal/resolver/passthrough/passthrough.go
@@ -55,7 +55,7 @@ func (r *passthroughResolver) start() {
 	r.cc.UpdateState(resolver.State{Addresses: []resolver.Address{{Addr: r.target.Endpoint()}}})
 }
 
-func (*passthroughResolver) ResolveNow(o resolver.ResolveNowOptions) {}
+func (*passthroughResolver) ResolveNow(resolver.ResolveNowOptions) {}
 
 func (*passthroughResolver) Close() {}
 
diff --git a/vendor/google.golang.org/grpc/internal/status/status.go b/vendor/google.golang.org/grpc/internal/status/status.go
index c7dbc820..75792538 100644
--- a/vendor/google.golang.org/grpc/internal/status/status.go
+++ b/vendor/google.golang.org/grpc/internal/status/status.go
@@ -138,11 +138,11 @@ func (s *Status) WithDetails(details ...protoadapt.MessageV1) (*Status, error) {
 	// s.Code() != OK implies that s.Proto() != nil.
 	p := s.Proto()
 	for _, detail := range details {
-		any, err := anypb.New(protoadapt.MessageV2Of(detail))
+		m, err := anypb.New(protoadapt.MessageV2Of(detail))
 		if err != nil {
 			return nil, err
 		}
-		p.Details = append(p.Details, any)
+		p.Details = append(p.Details, m)
 	}
 	return &Status{s: p}, nil
 }
diff --git a/vendor/google.golang.org/grpc/internal/syscall/syscall_nonlinux.go b/vendor/google.golang.org/grpc/internal/syscall/syscall_nonlinux.go
index 999f52cd..54c24c2f 100644
--- a/vendor/google.golang.org/grpc/internal/syscall/syscall_nonlinux.go
+++ b/vendor/google.golang.org/grpc/internal/syscall/syscall_nonlinux.go
@@ -58,20 +58,20 @@ func GetRusage() *Rusage {
 
 // CPUTimeDiff returns the differences of user CPU time and system CPU time used
 // between two Rusage structs. It a no-op function for non-linux environments.
-func CPUTimeDiff(first *Rusage, latest *Rusage) (float64, float64) {
+func CPUTimeDiff(*Rusage, *Rusage) (float64, float64) {
 	log()
 	return 0, 0
 }
 
 // SetTCPUserTimeout is a no-op function under non-linux environments.
-func SetTCPUserTimeout(conn net.Conn, timeout time.Duration) error {
+func SetTCPUserTimeout(net.Conn, time.Duration) error {
 	log()
 	return nil
 }
 
 // GetTCPUserTimeout is a no-op function under non-linux environments.
 // A negative return value indicates the operation is not supported
-func GetTCPUserTimeout(conn net.Conn) (int, error) {
+func GetTCPUserTimeout(net.Conn) (int, error) {
 	log()
 	return -1, nil
 }
diff --git a/vendor/google.golang.org/grpc/internal/transport/controlbuf.go b/vendor/google.golang.org/grpc/internal/transport/controlbuf.go
index ea0633bb..ef72fbb3 100644
--- a/vendor/google.golang.org/grpc/internal/transport/controlbuf.go
+++ b/vendor/google.golang.org/grpc/internal/transport/controlbuf.go
@@ -1033,10 +1033,3 @@ func (l *loopyWriter) processData() (bool, error) {
 	}
 	return false, nil
 }
-
-func min(a, b int) int {
-	if a < b {
-		return a
-	}
-	return b
-}
diff --git a/vendor/google.golang.org/grpc/internal/transport/handler_server.go b/vendor/google.golang.org/grpc/internal/transport/handler_server.go
index e1cd86b2..ce878693 100644
--- a/vendor/google.golang.org/grpc/internal/transport/handler_server.go
+++ b/vendor/google.golang.org/grpc/internal/transport/handler_server.go
@@ -333,7 +333,7 @@ func (ht *serverHandlerTransport) writeCustomHeaders(s *Stream) {
 	s.hdrMu.Unlock()
 }
 
-func (ht *serverHandlerTransport) Write(s *Stream, hdr []byte, data mem.BufferSlice, opts *Options) error {
+func (ht *serverHandlerTransport) Write(s *Stream, hdr []byte, data mem.BufferSlice, _ *Options) error {
 	// Always take a reference because otherwise there is no guarantee the data will
 	// be available after this function returns. This is what callers to Write
 	// expect.
@@ -475,7 +475,7 @@ func (ht *serverHandlerTransport) IncrMsgSent() {}
 
 func (ht *serverHandlerTransport) IncrMsgRecv() {}
 
-func (ht *serverHandlerTransport) Drain(debugData string) {
+func (ht *serverHandlerTransport) Drain(string) {
 	panic("Drain() is not implemented")
 }
 
diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_client.go b/vendor/google.golang.org/grpc/internal/transport/http2_client.go
index f46194fd..c769deab 100644
--- a/vendor/google.golang.org/grpc/internal/transport/http2_client.go
+++ b/vendor/google.golang.org/grpc/internal/transport/http2_client.go
@@ -772,7 +772,7 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*Stream,
 	hdr := &headerFrame{
 		hf:        headerFields,
 		endStream: false,
-		initStream: func(id uint32) error {
+		initStream: func(uint32) error {
 			t.mu.Lock()
 			// TODO: handle transport closure in loopy instead and remove this
 			// initStream is never called when transport is draining.
@@ -1667,11 +1667,10 @@ func (t *http2Client) reader(errCh chan<- error) {
 					t.closeStream(s, status.Error(code, msg), true, http2.ErrCodeProtocol, status.New(code, msg), nil, false)
 				}
 				continue
-			} else {
-				// Transport error.
-				t.Close(connectionErrorf(true, err, "error reading from server: %v", err))
-				return
 			}
+			// Transport error.
+			t.Close(connectionErrorf(true, err, "error reading from server: %v", err))
+			return
 		}
 		switch frame := frame.(type) {
 		case *http2.MetaHeadersFrame:
@@ -1696,13 +1695,6 @@ func (t *http2Client) reader(errCh chan<- error) {
 	}
 }
 
-func minTime(a, b time.Duration) time.Duration {
-	if a < b {
-		return a
-	}
-	return b
-}
-
 // keepalive running in a separate goroutine makes sure the connection is alive by sending pings.
 func (t *http2Client) keepalive() {
 	p := &ping{data: [8]byte{}}
@@ -1770,7 +1762,7 @@ func (t *http2Client) keepalive() {
 			// timeoutLeft. This will ensure that we wait only for kp.Time
 			// before sending out the next ping (for cases where the ping is
 			// acked).
-			sleepDuration := minTime(t.kp.Time, timeoutLeft)
+			sleepDuration := min(t.kp.Time, timeoutLeft)
 			timeoutLeft -= sleepDuration
 			timer.Reset(sleepDuration)
 		case <-t.ctx.Done():
diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_server.go b/vendor/google.golang.org/grpc/internal/transport/http2_server.go
index f5163f77..584b50fe 100644
--- a/vendor/google.golang.org/grpc/internal/transport/http2_server.go
+++ b/vendor/google.golang.org/grpc/internal/transport/http2_server.go
@@ -1117,7 +1117,7 @@ func (t *http2Server) WriteStatus(s *Stream, st *status.Status) error {
 
 // Write converts the data into HTTP2 data frame and sends it out. Non-nil error
 // is returns if it fails (e.g., framing error, transport error).
-func (t *http2Server) Write(s *Stream, hdr []byte, data mem.BufferSlice, opts *Options) error {
+func (t *http2Server) Write(s *Stream, hdr []byte, data mem.BufferSlice, _ *Options) error {
 	reader := data.Reader()
 
 	if !s.isHeaderSent() { // Headers haven't been written yet.
@@ -1238,7 +1238,7 @@ func (t *http2Server) keepalive() {
 			// timeoutLeft. This will ensure that we wait only for kp.Time
 			// before sending out the next ping (for cases where the ping is
 			// acked).
-			sleepDuration := minTime(t.kp.Time, kpTimeoutLeft)
+			sleepDuration := min(t.kp.Time, kpTimeoutLeft)
 			kpTimeoutLeft -= sleepDuration
 			kpTimer.Reset(sleepDuration)
 		case <-t.done:
diff --git a/vendor/google.golang.org/grpc/internal/transport/http_util.go b/vendor/google.golang.org/grpc/internal/transport/http_util.go
index f609c6c6..3613d7b6 100644
--- a/vendor/google.golang.org/grpc/internal/transport/http_util.go
+++ b/vendor/google.golang.org/grpc/internal/transport/http_util.go
@@ -393,7 +393,7 @@ type framer struct {
 	fr     *http2.Framer
 }
 
-var writeBufferPoolMap map[int]*sync.Pool = make(map[int]*sync.Pool)
+var writeBufferPoolMap = make(map[int]*sync.Pool)
 var writeBufferMutex sync.Mutex
 
 func newFramer(conn net.Conn, writeBufferSize, readBufferSize int, sharedWriteBuffer bool, maxHeaderListSize uint32) *framer {
diff --git a/vendor/google.golang.org/grpc/internal/transport/transport.go b/vendor/google.golang.org/grpc/internal/transport/transport.go
index fdd6fa86..924ba4f3 100644
--- a/vendor/google.golang.org/grpc/internal/transport/transport.go
+++ b/vendor/google.golang.org/grpc/internal/transport/transport.go
@@ -616,7 +616,7 @@ func (t *transportReader) ReadHeader(header []byte) (int, error) {
 		t.er = err
 		return 0, err
 	}
-	t.windowHandler(len(header))
+	t.windowHandler(n)
 	return n, nil
 }
 
diff --git a/vendor/google.golang.org/grpc/keepalive/keepalive.go b/vendor/google.golang.org/grpc/keepalive/keepalive.go
index 34d31b5e..eb42b19f 100644
--- a/vendor/google.golang.org/grpc/keepalive/keepalive.go
+++ b/vendor/google.golang.org/grpc/keepalive/keepalive.go
@@ -34,15 +34,29 @@ type ClientParameters struct {
 	// After a duration of this time if the client doesn't see any activity it
 	// pings the server to see if the transport is still alive.
 	// If set below 10s, a minimum value of 10s will be used instead.
-	Time time.Duration // The current default value is infinity.
+	//
+	// Note that gRPC servers have a default EnforcementPolicy.MinTime of 5
+	// minutes (which means the client shouldn't ping more frequently than every
+	// 5 minutes).
+	//
+	// Though not ideal, it's not a strong requirement for Time to be less than
+	// EnforcementPolicy.MinTime.  Time will automatically double if the server
+	// disconnects due to its enforcement policy.
+	//
+	// For more details, see
+	// https://github.com/grpc/proposal/blob/master/A8-client-side-keepalive.md
+	Time time.Duration
 	// After having pinged for keepalive check, the client waits for a duration
 	// of Timeout and if no activity is seen even after that the connection is
 	// closed.
-	Timeout time.Duration // The current default value is 20 seconds.
+	//
+	// If keepalive is enabled, and this value is not explicitly set, the default
+	// is 20 seconds.
+	Timeout time.Duration
 	// If true, client sends keepalive pings even with no active RPCs. If false,
 	// when there are no active RPCs, Time and Timeout will be ignored and no
 	// keepalive pings will be sent.
-	PermitWithoutStream bool // false by default.
+	PermitWithoutStream bool
 }
 
 // ServerParameters is used to set keepalive and max-age parameters on the
diff --git a/vendor/google.golang.org/grpc/mem/buffers.go b/vendor/google.golang.org/grpc/mem/buffers.go
index 975ceb71..4d66b2cc 100644
--- a/vendor/google.golang.org/grpc/mem/buffers.go
+++ b/vendor/google.golang.org/grpc/mem/buffers.go
@@ -224,11 +224,11 @@ func (e emptyBuffer) Len() int {
 	return 0
 }
 
-func (e emptyBuffer) split(n int) (left, right Buffer) {
+func (e emptyBuffer) split(int) (left, right Buffer) {
 	return e, e
 }
 
-func (e emptyBuffer) read(buf []byte) (int, Buffer) {
+func (e emptyBuffer) read([]byte) (int, Buffer) {
 	return 0, e
 }
 
diff --git a/vendor/google.golang.org/grpc/rpc_util.go b/vendor/google.golang.org/grpc/rpc_util.go
index db8865ec..2d96f140 100644
--- a/vendor/google.golang.org/grpc/rpc_util.go
+++ b/vendor/google.golang.org/grpc/rpc_util.go
@@ -220,8 +220,8 @@ type HeaderCallOption struct {
 	HeaderAddr *metadata.MD
 }
 
-func (o HeaderCallOption) before(c *callInfo) error { return nil }
-func (o HeaderCallOption) after(c *callInfo, attempt *csAttempt) {
+func (o HeaderCallOption) before(*callInfo) error { return nil }
+func (o HeaderCallOption) after(_ *callInfo, attempt *csAttempt) {
 	*o.HeaderAddr, _ = attempt.s.Header()
 }
 
@@ -242,8 +242,8 @@ type TrailerCallOption struct {
 	TrailerAddr *metadata.MD
 }
 
-func (o TrailerCallOption) before(c *callInfo) error { return nil }
-func (o TrailerCallOption) after(c *callInfo, attempt *csAttempt) {
+func (o TrailerCallOption) before(*callInfo) error { return nil }
+func (o TrailerCallOption) after(_ *callInfo, attempt *csAttempt) {
 	*o.TrailerAddr = attempt.s.Trailer()
 }
 
@@ -264,8 +264,8 @@ type PeerCallOption struct {
 	PeerAddr *peer.Peer
 }
 
-func (o PeerCallOption) before(c *callInfo) error { return nil }
-func (o PeerCallOption) after(c *callInfo, attempt *csAttempt) {
+func (o PeerCallOption) before(*callInfo) error { return nil }
+func (o PeerCallOption) after(_ *callInfo, attempt *csAttempt) {
 	if x, ok := peer.FromContext(attempt.s.Context()); ok {
 		*o.PeerAddr = *x
 	}
@@ -304,7 +304,7 @@ func (o FailFastCallOption) before(c *callInfo) error {
 	c.failFast = o.FailFast
 	return nil
 }
-func (o FailFastCallOption) after(c *callInfo, attempt *csAttempt) {}
+func (o FailFastCallOption) after(*callInfo, *csAttempt) {}
 
 // OnFinish returns a CallOption that configures a callback to be called when
 // the call completes. The error passed to the callback is the status of the
@@ -339,7 +339,7 @@ func (o OnFinishCallOption) before(c *callInfo) error {
 	return nil
 }
 
-func (o OnFinishCallOption) after(c *callInfo, attempt *csAttempt) {}
+func (o OnFinishCallOption) after(*callInfo, *csAttempt) {}
 
 // MaxCallRecvMsgSize returns a CallOption which sets the maximum message size
 // in bytes the client can receive. If this is not set, gRPC uses the default
@@ -363,7 +363,7 @@ func (o MaxRecvMsgSizeCallOption) before(c *callInfo) error {
 	c.maxReceiveMessageSize = &o.MaxRecvMsgSize
 	return nil
 }
-func (o MaxRecvMsgSizeCallOption) after(c *callInfo, attempt *csAttempt) {}
+func (o MaxRecvMsgSizeCallOption) after(*callInfo, *csAttempt) {}
 
 // MaxCallSendMsgSize returns a CallOption which sets the maximum message size
 // in bytes the client can send. If this is not set, gRPC uses the default
@@ -387,7 +387,7 @@ func (o MaxSendMsgSizeCallOption) before(c *callInfo) error {
 	c.maxSendMessageSize = &o.MaxSendMsgSize
 	return nil
 }
-func (o MaxSendMsgSizeCallOption) after(c *callInfo, attempt *csAttempt) {}
+func (o MaxSendMsgSizeCallOption) after(*callInfo, *csAttempt) {}
 
 // PerRPCCredentials returns a CallOption that sets credentials.PerRPCCredentials
 // for a call.
@@ -410,7 +410,7 @@ func (o PerRPCCredsCallOption) before(c *callInfo) error {
 	c.creds = o.Creds
 	return nil
 }
-func (o PerRPCCredsCallOption) after(c *callInfo, attempt *csAttempt) {}
+func (o PerRPCCredsCallOption) after(*callInfo, *csAttempt) {}
 
 // UseCompressor returns a CallOption which sets the compressor used when
 // sending the request.  If WithCompressor is also set, UseCompressor has
@@ -438,7 +438,7 @@ func (o CompressorCallOption) before(c *callInfo) error {
 	c.compressorType = o.CompressorType
 	return nil
 }
-func (o CompressorCallOption) after(c *callInfo, attempt *csAttempt) {}
+func (o CompressorCallOption) after(*callInfo, *csAttempt) {}
 
 // CallContentSubtype returns a CallOption that will set the content-subtype
 // for a call. For example, if content-subtype is "json", the Content-Type over
@@ -475,7 +475,7 @@ func (o ContentSubtypeCallOption) before(c *callInfo) error {
 	c.contentSubtype = o.ContentSubtype
 	return nil
 }
-func (o ContentSubtypeCallOption) after(c *callInfo, attempt *csAttempt) {}
+func (o ContentSubtypeCallOption) after(*callInfo, *csAttempt) {}
 
 // ForceCodec returns a CallOption that will set codec to be used for all
 // request and response messages for a call. The result of calling Name() will
@@ -514,7 +514,7 @@ func (o ForceCodecCallOption) before(c *callInfo) error {
 	c.codec = newCodecV1Bridge(o.Codec)
 	return nil
 }
-func (o ForceCodecCallOption) after(c *callInfo, attempt *csAttempt) {}
+func (o ForceCodecCallOption) after(*callInfo, *csAttempt) {}
 
 // ForceCodecV2 returns a CallOption that will set codec to be used for all
 // request and response messages for a call. The result of calling Name() will
@@ -554,7 +554,7 @@ func (o ForceCodecV2CallOption) before(c *callInfo) error {
 	return nil
 }
 
-func (o ForceCodecV2CallOption) after(c *callInfo, attempt *csAttempt) {}
+func (o ForceCodecV2CallOption) after(*callInfo, *csAttempt) {}
 
 // CallCustomCodec behaves like ForceCodec, but accepts a grpc.Codec instead of
 // an encoding.Codec.
@@ -579,7 +579,7 @@ func (o CustomCodecCallOption) before(c *callInfo) error {
 	c.codec = newCodecV0Bridge(o.Codec)
 	return nil
 }
-func (o CustomCodecCallOption) after(c *callInfo, attempt *csAttempt) {}
+func (o CustomCodecCallOption) after(*callInfo, *csAttempt) {}
 
 // MaxRetryRPCBufferSize returns a CallOption that limits the amount of memory
 // used for buffering this RPC's requests for retry purposes.
@@ -607,7 +607,7 @@ func (o MaxRetryRPCBufferSizeCallOption) before(c *callInfo) error {
 	c.maxRetryRPCBufferSize = o.MaxRetryRPCBufferSize
 	return nil
 }
-func (o MaxRetryRPCBufferSizeCallOption) after(c *callInfo, attempt *csAttempt) {}
+func (o MaxRetryRPCBufferSizeCallOption) after(*callInfo, *csAttempt) {}
 
 // The format of the payload: compressed or not?
 type payloadFormat uint8
diff --git a/vendor/google.golang.org/grpc/stream_interfaces.go b/vendor/google.golang.org/grpc/stream_interfaces.go
index 8b813529..0037fee0 100644
--- a/vendor/google.golang.org/grpc/stream_interfaces.go
+++ b/vendor/google.golang.org/grpc/stream_interfaces.go
@@ -22,15 +22,35 @@ package grpc
 // request, many responses) RPC. It is generic over the type of the response
 // message. It is used in generated code.
 type ServerStreamingClient[Res any] interface {
+	// Recv receives the next response message from the server. The client may
+	// repeatedly call Recv to read messages from the response stream.  If
+	// io.EOF is returned, the stream has terminated with an OK status.  Any
+	// other error is compatible with the status package and indicates the
+	// RPC's status code and message.
 	Recv() (*Res, error)
+
+	// ClientStream is embedded to provide Context, Header, and Trailer
+	// functionality.  No other methods in the ClientStream should be called
+	// directly.
 	ClientStream
 }
 
 // ServerStreamingServer represents the server side of a server-streaming (one
 // request, many responses) RPC. It is generic over the type of the response
 // message. It is used in generated code.
+//
+// To terminate the response stream, return from the handler method and return
+// an error from the status package, or use nil to indicate an OK status code.
 type ServerStreamingServer[Res any] interface {
+	// Send sends a response message to the client.  The server handler may
+	// call Send multiple times to send multiple messages to the client.  An
+	// error is returned if the stream was terminated unexpectedly, and the
+	// handler method should return, as the stream is no longer usable.
 	Send(*Res) error
+
+	// ServerStream is embedded to provide Context, SetHeader, SendHeader, and
+	// SetTrailer functionality.  No other methods in the ServerStream should
+	// be called directly.
 	ServerStream
 }
 
@@ -39,8 +59,22 @@ type ServerStreamingServer[Res any] interface {
 // message stream and the type of the unary response message. It is used in
 // generated code.
 type ClientStreamingClient[Req any, Res any] interface {
+	// Send sends a request message to the server.  The client may call Send
+	// multiple times to send multiple messages to the server.  On error, Send
+	// aborts the stream.  If the error was generated by the client, the status
+	// is returned directly.  Otherwise, io.EOF is returned, and the status of
+	// the stream may be discovered using CloseAndRecv().
 	Send(*Req) error
+
+	// CloseAndRecv closes the request stream and waits for the server's
+	// response.  This method must be called once and only once after sending
+	// all request messages.  Any error returned is implemented by the status
+	// package.
 	CloseAndRecv() (*Res, error)
+
+	// ClientStream is embedded to provide Context, Header, and Trailer
+	// functionality.  No other methods in the ClientStream should be called
+	// directly.
 	ClientStream
 }
 
@@ -48,9 +82,28 @@ type ClientStreamingClient[Req any, Res any] interface {
 // requests, one response) RPC. It is generic over both the type of the request
 // message stream and the type of the unary response message. It is used in
 // generated code.
+//
+// To terminate the RPC, call SendAndClose and return nil from the method
+// handler or do not call SendAndClose and return an error from the status
+// package.
 type ClientStreamingServer[Req any, Res any] interface {
+	// Recv receives the next request message from the client.  The server may
+	// repeatedly call Recv to read messages from the request stream.  If
+	// io.EOF is returned, it indicates the client called CloseAndRecv on its
+	// ClientStreamingClient.  Any other error indicates the stream was
+	// terminated unexpectedly, and the handler method should return, as the
+	// stream is no longer usable.
 	Recv() (*Req, error)
+
+	// SendAndClose sends a single response message to the client and closes
+	// the stream.  This method must be called once and only once after all
+	// request messages have been processed.  Recv should not be called after
+	// calling SendAndClose.
 	SendAndClose(*Res) error
+
+	// ServerStream is embedded to provide Context, SetHeader, SendHeader, and
+	// SetTrailer functionality.  No other methods in the ServerStream should
+	// be called directly.
 	ServerStream
 }
 
@@ -59,8 +112,23 @@ type ClientStreamingServer[Req any, Res any] interface {
 // request message stream and the type of the response message stream. It is
 // used in generated code.
 type BidiStreamingClient[Req any, Res any] interface {
+	// Send sends a request message to the server.  The client may call Send
+	// multiple times to send multiple messages to the server.  On error, Send
+	// aborts the stream.  If the error was generated by the client, the status
+	// is returned directly.  Otherwise, io.EOF is returned, and the status of
+	// the stream may be discovered using Recv().
 	Send(*Req) error
+
+	// Recv receives the next response message from the server. The client may
+	// repeatedly call Recv to read messages from the response stream.  If
+	// io.EOF is returned, the stream has terminated with an OK status.  Any
+	// other error is compatible with the status package and indicates the
+	// RPC's status code and message.
 	Recv() (*Res, error)
+
+	// ClientStream is embedded to provide Context, Header, Trailer, and
+	// CloseSend functionality.  No other methods in the ClientStream should be
+	// called directly.
 	ClientStream
 }
 
@@ -68,9 +136,27 @@ type BidiStreamingClient[Req any, Res any] interface {
 // (many requests, many responses) RPC. It is generic over both the type of the
 // request message stream and the type of the response message stream. It is
 // used in generated code.
+//
+// To terminate the stream, return from the handler method and return
+// an error from the status package, or use nil to indicate an OK status code.
 type BidiStreamingServer[Req any, Res any] interface {
+	// Recv receives the next request message from the client.  The server may
+	// repeatedly call Recv to read messages from the request stream.  If
+	// io.EOF is returned, it indicates the client called CloseSend on its
+	// BidiStreamingClient.  Any other error indicates the stream was
+	// terminated unexpectedly, and the handler method should return, as the
+	// stream is no longer usable.
 	Recv() (*Req, error)
+
+	// Send sends a response message to the client.  The server handler may
+	// call Send multiple times to send multiple messages to the client.  An
+	// error is returned if the stream was terminated unexpectedly, and the
+	// handler method should return, as the stream is no longer usable.
 	Send(*Res) error
+
+	// ServerStream is embedded to provide Context, SetHeader, SendHeader, and
+	// SetTrailer functionality.  No other methods in the ServerStream should
+	// be called directly.
 	ServerStream
 }
 
diff --git a/vendor/google.golang.org/grpc/version.go b/vendor/google.golang.org/grpc/version.go
index 7c70005d..a96b6a6b 100644
--- a/vendor/google.golang.org/grpc/version.go
+++ b/vendor/google.golang.org/grpc/version.go
@@ -19,4 +19,4 @@
 package grpc
 
 // Version is the current grpc version.
-const Version = "1.66.2"
+const Version = "1.67.1"
diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/decode.go b/vendor/google.golang.org/protobuf/encoding/protojson/decode.go
index bb2966e3..8f9e592f 100644
--- a/vendor/google.golang.org/protobuf/encoding/protojson/decode.go
+++ b/vendor/google.golang.org/protobuf/encoding/protojson/decode.go
@@ -351,7 +351,7 @@ func (d decoder) unmarshalScalar(fd protoreflect.FieldDescriptor) (protoreflect.
 		panic(fmt.Sprintf("unmarshalScalar: invalid scalar kind %v", kind))
 	}
 
-	return protoreflect.Value{}, d.newError(tok.Pos(), "invalid value for %v type: %v", kind, tok.RawString())
+	return protoreflect.Value{}, d.newError(tok.Pos(), "invalid value for %v field %v: %v", kind, fd.JSONName(), tok.RawString())
 }
 
 func unmarshalInt(tok json.Token, bitSize int) (protoreflect.Value, bool) {
diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/encode.go b/vendor/google.golang.org/protobuf/encoding/protojson/encode.go
index 29846df2..0e72d853 100644
--- a/vendor/google.golang.org/protobuf/encoding/protojson/encode.go
+++ b/vendor/google.golang.org/protobuf/encoding/protojson/encode.go
@@ -216,9 +216,7 @@ func (m unpopulatedFieldRanger) Range(f func(protoreflect.FieldDescriptor, proto
 		}
 
 		v := m.Get(fd)
-		isProto2Scalar := fd.Syntax() == protoreflect.Proto2 && fd.Default().IsValid()
-		isSingularMessage := fd.Cardinality() != protoreflect.Repeated && fd.Message() != nil
-		if isProto2Scalar || isSingularMessage {
+		if fd.HasPresence() {
 			if m.skipNull {
 				continue
 			}
diff --git a/vendor/google.golang.org/protobuf/internal/descopts/options.go b/vendor/google.golang.org/protobuf/internal/descopts/options.go
index 8401be8c..024ffebd 100644
--- a/vendor/google.golang.org/protobuf/internal/descopts/options.go
+++ b/vendor/google.golang.org/protobuf/internal/descopts/options.go
@@ -9,7 +9,7 @@
 // dependency on the descriptor proto package).
 package descopts
 
-import pref "google.golang.org/protobuf/reflect/protoreflect"
+import "google.golang.org/protobuf/reflect/protoreflect"
 
 // These variables are set by the init function in descriptor.pb.go via logic
 // in internal/filetype. In other words, so long as the descriptor proto package
@@ -17,13 +17,13 @@ import pref "google.golang.org/protobuf/reflect/protoreflect"
 //
 // Each variable is populated with a nil pointer to the options struct.
 var (
-	File           pref.ProtoMessage
-	Enum           pref.ProtoMessage
-	EnumValue      pref.ProtoMessage
-	Message        pref.ProtoMessage
-	Field          pref.ProtoMessage
-	Oneof          pref.ProtoMessage
-	ExtensionRange pref.ProtoMessage
-	Service        pref.ProtoMessage
-	Method         pref.ProtoMessage
+	File           protoreflect.ProtoMessage
+	Enum           protoreflect.ProtoMessage
+	EnumValue      protoreflect.ProtoMessage
+	Message        protoreflect.ProtoMessage
+	Field          protoreflect.ProtoMessage
+	Oneof          protoreflect.ProtoMessage
+	ExtensionRange protoreflect.ProtoMessage
+	Service        protoreflect.ProtoMessage
+	Method         protoreflect.ProtoMessage
 )
diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc.go
index df53ff40..fa790e0f 100644
--- a/vendor/google.golang.org/protobuf/internal/filedesc/desc.go
+++ b/vendor/google.golang.org/protobuf/internal/filedesc/desc.go
@@ -258,6 +258,7 @@ type (
 		StringName       stringName
 		IsProto3Optional bool // promoted from google.protobuf.FieldDescriptorProto
 		IsWeak           bool // promoted from google.protobuf.FieldOptions
+		IsLazy           bool // promoted from google.protobuf.FieldOptions
 		Default          defaultValue
 		ContainingOneof  protoreflect.OneofDescriptor // must be consistent with Message.Oneofs.Fields
 		Enum             protoreflect.EnumDescriptor
@@ -351,6 +352,7 @@ func (fd *Field) IsPacked() bool {
 }
 func (fd *Field) IsExtension() bool { return false }
 func (fd *Field) IsWeak() bool      { return fd.L1.IsWeak }
+func (fd *Field) IsLazy() bool      { return fd.L1.IsLazy }
 func (fd *Field) IsList() bool      { return fd.Cardinality() == protoreflect.Repeated && !fd.IsMap() }
 func (fd *Field) IsMap() bool       { return fd.Message() != nil && fd.Message().IsMapEntry() }
 func (fd *Field) MapKey() protoreflect.FieldDescriptor {
@@ -425,6 +427,7 @@ type (
 		Extendee        protoreflect.MessageDescriptor
 		Cardinality     protoreflect.Cardinality
 		Kind            protoreflect.Kind
+		IsLazy          bool
 		EditionFeatures EditionFeatures
 	}
 	ExtensionL2 struct {
@@ -465,6 +468,7 @@ func (xd *Extension) IsPacked() bool {
 }
 func (xd *Extension) IsExtension() bool                      { return true }
 func (xd *Extension) IsWeak() bool                           { return false }
+func (xd *Extension) IsLazy() bool                           { return xd.L1.IsLazy }
 func (xd *Extension) IsList() bool                           { return xd.Cardinality() == protoreflect.Repeated }
 func (xd *Extension) IsMap() bool                            { return false }
 func (xd *Extension) MapKey() protoreflect.FieldDescriptor   { return nil }
diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go
index 8a57d60b..d2f54949 100644
--- a/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go
+++ b/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go
@@ -495,6 +495,8 @@ func (xd *Extension) unmarshalOptions(b []byte) {
 			switch num {
 			case genid.FieldOptions_Packed_field_number:
 				xd.L1.EditionFeatures.IsPacked = protowire.DecodeBool(v)
+			case genid.FieldOptions_Lazy_field_number:
+				xd.L1.IsLazy = protowire.DecodeBool(v)
 			}
 		case protowire.BytesType:
 			v, m := protowire.ConsumeBytes(b)
diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go
index e56c91a8..67a51b32 100644
--- a/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go
+++ b/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go
@@ -504,6 +504,8 @@ func (fd *Field) unmarshalOptions(b []byte) {
 				fd.L1.EditionFeatures.IsPacked = protowire.DecodeBool(v)
 			case genid.FieldOptions_Weak_field_number:
 				fd.L1.IsWeak = protowire.DecodeBool(v)
+			case genid.FieldOptions_Lazy_field_number:
+				fd.L1.IsLazy = protowire.DecodeBool(v)
 			case FieldOptions_EnforceUTF8:
 				fd.L1.EditionFeatures.IsUTF8Validated = protowire.DecodeBool(v)
 			}
diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/editions.go b/vendor/google.golang.org/protobuf/internal/filedesc/editions.go
index 11f5f356..fd4d0c83 100644
--- a/vendor/google.golang.org/protobuf/internal/filedesc/editions.go
+++ b/vendor/google.golang.org/protobuf/internal/filedesc/editions.go
@@ -68,7 +68,7 @@ func unmarshalFeatureSet(b []byte, parent EditionFeatures) EditionFeatures {
 			v, m := protowire.ConsumeBytes(b)
 			b = b[m:]
 			switch num {
-			case genid.GoFeatures_LegacyUnmarshalJsonEnum_field_number:
+			case genid.FeatureSet_Go_ext_number:
 				parent = unmarshalGoFeature(v, parent)
 			}
 		}
diff --git a/vendor/google.golang.org/protobuf/internal/genid/doc.go b/vendor/google.golang.org/protobuf/internal/genid/doc.go
index 45ccd012..d9b9d916 100644
--- a/vendor/google.golang.org/protobuf/internal/genid/doc.go
+++ b/vendor/google.golang.org/protobuf/internal/genid/doc.go
@@ -6,6 +6,6 @@
 // and the well-known types.
 package genid
 
-import protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+import "google.golang.org/protobuf/reflect/protoreflect"
 
 const GoogleProtobuf_package protoreflect.FullName = "google.protobuf"
diff --git a/vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go b/vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go
index 9a652a2b..7f67cbb6 100644
--- a/vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go
+++ b/vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go
@@ -12,20 +12,25 @@ import (
 
 const File_google_protobuf_go_features_proto = "google/protobuf/go_features.proto"
 
-// Names for google.protobuf.GoFeatures.
+// Names for pb.GoFeatures.
 const (
 	GoFeatures_message_name     protoreflect.Name     = "GoFeatures"
-	GoFeatures_message_fullname protoreflect.FullName = "google.protobuf.GoFeatures"
+	GoFeatures_message_fullname protoreflect.FullName = "pb.GoFeatures"
 )
 
-// Field names for google.protobuf.GoFeatures.
+// Field names for pb.GoFeatures.
 const (
 	GoFeatures_LegacyUnmarshalJsonEnum_field_name protoreflect.Name = "legacy_unmarshal_json_enum"
 
-	GoFeatures_LegacyUnmarshalJsonEnum_field_fullname protoreflect.FullName = "google.protobuf.GoFeatures.legacy_unmarshal_json_enum"
+	GoFeatures_LegacyUnmarshalJsonEnum_field_fullname protoreflect.FullName = "pb.GoFeatures.legacy_unmarshal_json_enum"
 )
 
-// Field numbers for google.protobuf.GoFeatures.
+// Field numbers for pb.GoFeatures.
 const (
 	GoFeatures_LegacyUnmarshalJsonEnum_field_number protoreflect.FieldNumber = 1
 )
+
+// Extension numbers
+const (
+	FeatureSet_Go_ext_number protoreflect.FieldNumber = 1002
+)
diff --git a/vendor/google.golang.org/protobuf/internal/genid/map_entry.go b/vendor/google.golang.org/protobuf/internal/genid/map_entry.go
index 8f9ea02f..bef5a25f 100644
--- a/vendor/google.golang.org/protobuf/internal/genid/map_entry.go
+++ b/vendor/google.golang.org/protobuf/internal/genid/map_entry.go
@@ -4,7 +4,7 @@
 
 package genid
 
-import protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+import "google.golang.org/protobuf/reflect/protoreflect"
 
 // Generic field names and numbers for synthetic map entry messages.
 const (
diff --git a/vendor/google.golang.org/protobuf/internal/genid/wrappers.go b/vendor/google.golang.org/protobuf/internal/genid/wrappers.go
index 429384b8..9404270d 100644
--- a/vendor/google.golang.org/protobuf/internal/genid/wrappers.go
+++ b/vendor/google.golang.org/protobuf/internal/genid/wrappers.go
@@ -4,7 +4,7 @@
 
 package genid
 
-import protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+import "google.golang.org/protobuf/reflect/protoreflect"
 
 // Generic field name and number for messages in wrappers.proto.
 const (
diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go b/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go
index 4bb0a7a2..0d5b546e 100644
--- a/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go
+++ b/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go
@@ -67,7 +67,6 @@ type lazyExtensionValue struct {
 	xi         *extensionFieldInfo
 	value      protoreflect.Value
 	b          []byte
-	fn         func() protoreflect.Value
 }
 
 type ExtensionField struct {
@@ -158,10 +157,9 @@ func (f *ExtensionField) lazyInit() {
 		}
 		f.lazy.value = val
 	} else {
-		f.lazy.value = f.lazy.fn()
+		panic("No support for lazy fns for ExtensionField")
 	}
 	f.lazy.xi = nil
-	f.lazy.fn = nil
 	f.lazy.b = nil
 	atomic.StoreUint32(&f.lazy.atomicOnce, 1)
 }
@@ -174,13 +172,6 @@ func (f *ExtensionField) Set(t protoreflect.ExtensionType, v protoreflect.Value)
 	f.lazy = nil
 }
 
-// SetLazy sets the type and a value that is to be lazily evaluated upon first use.
-// This must not be called concurrently.
-func (f *ExtensionField) SetLazy(t protoreflect.ExtensionType, fn func() protoreflect.Value) {
-	f.typ = t
-	f.lazy = &lazyExtensionValue{fn: fn}
-}
-
 // Value returns the value of the extension field.
 // This may be called concurrently.
 func (f *ExtensionField) Value() protoreflect.Value {
diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_field.go b/vendor/google.golang.org/protobuf/internal/impl/codec_field.go
index 78ee47e4..7c1f66c8 100644
--- a/vendor/google.golang.org/protobuf/internal/impl/codec_field.go
+++ b/vendor/google.golang.org/protobuf/internal/impl/codec_field.go
@@ -65,6 +65,9 @@ func (mi *MessageInfo) initOneofFieldCoders(od protoreflect.OneofDescriptor, si
 			if err != nil {
 				return out, err
 			}
+			if cf.funcs.isInit == nil {
+				out.initialized = true
+			}
 			vi.Set(vw)
 			return out, nil
 		}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_message.go b/vendor/google.golang.org/protobuf/internal/impl/codec_message.go
index 6b2fdbb7..78be9df3 100644
--- a/vendor/google.golang.org/protobuf/internal/impl/codec_message.go
+++ b/vendor/google.golang.org/protobuf/internal/impl/codec_message.go
@@ -189,6 +189,9 @@ func (mi *MessageInfo) makeCoderMethods(t reflect.Type, si structInfo) {
 	if mi.methods.Merge == nil {
 		mi.methods.Merge = mi.merge
 	}
+	if mi.methods.Equal == nil {
+		mi.methods.Equal = equal
+	}
 }
 
 // getUnknownBytes returns a *[]byte for the unknown fields.
diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go b/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go
deleted file mode 100644
index 145c577b..00000000
--- a/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go
+++ /dev/null
@@ -1,210 +0,0 @@
-// Copyright 2019 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.
-
-//go:build purego || appengine
-// +build purego appengine
-
-package impl
-
-import (
-	"reflect"
-
-	"google.golang.org/protobuf/encoding/protowire"
-)
-
-func sizeEnum(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
-	v := p.v.Elem().Int()
-	return f.tagsize + protowire.SizeVarint(uint64(v))
-}
-
-func appendEnum(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
-	v := p.v.Elem().Int()
-	b = protowire.AppendVarint(b, f.wiretag)
-	b = protowire.AppendVarint(b, uint64(v))
-	return b, nil
-}
-
-func consumeEnum(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
-	if wtyp != protowire.VarintType {
-		return out, errUnknown
-	}
-	v, n := protowire.ConsumeVarint(b)
-	if n < 0 {
-		return out, errDecode
-	}
-	p.v.Elem().SetInt(int64(v))
-	out.n = n
-	return out, nil
-}
-
-func mergeEnum(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
-	dst.v.Elem().Set(src.v.Elem())
-}
-
-var coderEnum = pointerCoderFuncs{
-	size:      sizeEnum,
-	marshal:   appendEnum,
-	unmarshal: consumeEnum,
-	merge:     mergeEnum,
-}
-
-func sizeEnumNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
-	if p.v.Elem().Int() == 0 {
-		return 0
-	}
-	return sizeEnum(p, f, opts)
-}
-
-func appendEnumNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
-	if p.v.Elem().Int() == 0 {
-		return b, nil
-	}
-	return appendEnum(b, p, f, opts)
-}
-
-func mergeEnumNoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
-	if src.v.Elem().Int() != 0 {
-		dst.v.Elem().Set(src.v.Elem())
-	}
-}
-
-var coderEnumNoZero = pointerCoderFuncs{
-	size:      sizeEnumNoZero,
-	marshal:   appendEnumNoZero,
-	unmarshal: consumeEnum,
-	merge:     mergeEnumNoZero,
-}
-
-func sizeEnumPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
-	return sizeEnum(pointer{p.v.Elem()}, f, opts)
-}
-
-func appendEnumPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
-	return appendEnum(b, pointer{p.v.Elem()}, f, opts)
-}
-
-func consumeEnumPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
-	if wtyp != protowire.VarintType {
-		return out, errUnknown
-	}
-	if p.v.Elem().IsNil() {
-		p.v.Elem().Set(reflect.New(p.v.Elem().Type().Elem()))
-	}
-	return consumeEnum(b, pointer{p.v.Elem()}, wtyp, f, opts)
-}
-
-func mergeEnumPtr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
-	if !src.v.Elem().IsNil() {
-		v := reflect.New(dst.v.Type().Elem().Elem())
-		v.Elem().Set(src.v.Elem().Elem())
-		dst.v.Elem().Set(v)
-	}
-}
-
-var coderEnumPtr = pointerCoderFuncs{
-	size:      sizeEnumPtr,
-	marshal:   appendEnumPtr,
-	unmarshal: consumeEnumPtr,
-	merge:     mergeEnumPtr,
-}
-
-func sizeEnumSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
-	s := p.v.Elem()
-	for i, llen := 0, s.Len(); i < llen; i++ {
-		size += protowire.SizeVarint(uint64(s.Index(i).Int())) + f.tagsize
-	}
-	return size
-}
-
-func appendEnumSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
-	s := p.v.Elem()
-	for i, llen := 0, s.Len(); i < llen; i++ {
-		b = protowire.AppendVarint(b, f.wiretag)
-		b = protowire.AppendVarint(b, uint64(s.Index(i).Int()))
-	}
-	return b, nil
-}
-
-func consumeEnumSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
-	s := p.v.Elem()
-	if wtyp == protowire.BytesType {
-		b, n := protowire.ConsumeBytes(b)
-		if n < 0 {
-			return out, errDecode
-		}
-		for len(b) > 0 {
-			v, n := protowire.ConsumeVarint(b)
-			if n < 0 {
-				return out, errDecode
-			}
-			rv := reflect.New(s.Type().Elem()).Elem()
-			rv.SetInt(int64(v))
-			s.Set(reflect.Append(s, rv))
-			b = b[n:]
-		}
-		out.n = n
-		return out, nil
-	}
-	if wtyp != protowire.VarintType {
-		return out, errUnknown
-	}
-	v, n := protowire.ConsumeVarint(b)
-	if n < 0 {
-		return out, errDecode
-	}
-	rv := reflect.New(s.Type().Elem()).Elem()
-	rv.SetInt(int64(v))
-	s.Set(reflect.Append(s, rv))
-	out.n = n
-	return out, nil
-}
-
-func mergeEnumSlice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
-	dst.v.Elem().Set(reflect.AppendSlice(dst.v.Elem(), src.v.Elem()))
-}
-
-var coderEnumSlice = pointerCoderFuncs{
-	size:      sizeEnumSlice,
-	marshal:   appendEnumSlice,
-	unmarshal: consumeEnumSlice,
-	merge:     mergeEnumSlice,
-}
-
-func sizeEnumPackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
-	s := p.v.Elem()
-	llen := s.Len()
-	if llen == 0 {
-		return 0
-	}
-	n := 0
-	for i := 0; i < llen; i++ {
-		n += protowire.SizeVarint(uint64(s.Index(i).Int()))
-	}
-	return f.tagsize + protowire.SizeBytes(n)
-}
-
-func appendEnumPackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
-	s := p.v.Elem()
-	llen := s.Len()
-	if llen == 0 {
-		return b, nil
-	}
-	b = protowire.AppendVarint(b, f.wiretag)
-	n := 0
-	for i := 0; i < llen; i++ {
-		n += protowire.SizeVarint(uint64(s.Index(i).Int()))
-	}
-	b = protowire.AppendVarint(b, uint64(n))
-	for i := 0; i < llen; i++ {
-		b = protowire.AppendVarint(b, uint64(s.Index(i).Int()))
-	}
-	return b, nil
-}
-
-var coderEnumPackedSlice = pointerCoderFuncs{
-	size:      sizeEnumPackedSlice,
-	marshal:   appendEnumPackedSlice,
-	unmarshal: consumeEnumSlice,
-	merge:     mergeEnumSlice,
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go b/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go
index 757642e2..077712c2 100644
--- a/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go
+++ b/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go
@@ -2,9 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !purego && !appengine
-// +build !purego,!appengine
-
 package impl
 
 // When using unsafe pointers, we can just treat enum values as int32s.
diff --git a/vendor/google.golang.org/protobuf/internal/impl/convert.go b/vendor/google.golang.org/protobuf/internal/impl/convert.go
index e06ece55..f72ddd88 100644
--- a/vendor/google.golang.org/protobuf/internal/impl/convert.go
+++ b/vendor/google.golang.org/protobuf/internal/impl/convert.go
@@ -322,7 +322,7 @@ func (c *stringConverter) PBValueOf(v reflect.Value) protoreflect.Value {
 	return protoreflect.ValueOfString(v.Convert(stringType).String())
 }
 func (c *stringConverter) GoValueOf(v protoreflect.Value) reflect.Value {
-	// pref.Value.String never panics, so we go through an interface
+	// protoreflect.Value.String never panics, so we go through an interface
 	// conversion here to check the type.
 	s := v.Interface().(string)
 	if c.goType.Kind() == reflect.Slice && s == "" {
diff --git a/vendor/google.golang.org/protobuf/internal/impl/encode.go b/vendor/google.golang.org/protobuf/internal/impl/encode.go
index febd2122..6254f5de 100644
--- a/vendor/google.golang.org/protobuf/internal/impl/encode.go
+++ b/vendor/google.golang.org/protobuf/internal/impl/encode.go
@@ -10,7 +10,7 @@ import (
 	"sync/atomic"
 
 	"google.golang.org/protobuf/internal/flags"
-	proto "google.golang.org/protobuf/proto"
+	"google.golang.org/protobuf/proto"
 	piface "google.golang.org/protobuf/runtime/protoiface"
 )
 
diff --git a/vendor/google.golang.org/protobuf/internal/impl/equal.go b/vendor/google.golang.org/protobuf/internal/impl/equal.go
new file mode 100644
index 00000000..9f6c32a7
--- /dev/null
+++ b/vendor/google.golang.org/protobuf/internal/impl/equal.go
@@ -0,0 +1,224 @@
+// Copyright 2024 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 impl
+
+import (
+	"bytes"
+
+	"google.golang.org/protobuf/encoding/protowire"
+	"google.golang.org/protobuf/reflect/protoreflect"
+	"google.golang.org/protobuf/runtime/protoiface"
+)
+
+func equal(in protoiface.EqualInput) protoiface.EqualOutput {
+	return protoiface.EqualOutput{Equal: equalMessage(in.MessageA, in.MessageB)}
+}
+
+// equalMessage is a fast-path variant of protoreflect.equalMessage.
+// It takes advantage of the internal messageState type to avoid
+// unnecessary allocations, type assertions.
+func equalMessage(mx, my protoreflect.Message) bool {
+	if mx == nil || my == nil {
+		return mx == my
+	}
+	if mx.Descriptor() != my.Descriptor() {
+		return false
+	}
+
+	msx, ok := mx.(*messageState)
+	if !ok {
+		return protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my))
+	}
+	msy, ok := my.(*messageState)
+	if !ok {
+		return protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my))
+	}
+
+	mi := msx.messageInfo()
+	miy := msy.messageInfo()
+	if mi != miy {
+		return protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my))
+	}
+	mi.init()
+	// Compares regular fields
+	// Modified Message.Range code that compares two messages of the same type
+	// while going over the fields.
+	for _, ri := range mi.rangeInfos {
+		var fd protoreflect.FieldDescriptor
+		var vx, vy protoreflect.Value
+
+		switch ri := ri.(type) {
+		case *fieldInfo:
+			hx := ri.has(msx.pointer())
+			hy := ri.has(msy.pointer())
+			if hx != hy {
+				return false
+			}
+			if !hx {
+				continue
+			}
+			fd = ri.fieldDesc
+			vx = ri.get(msx.pointer())
+			vy = ri.get(msy.pointer())
+		case *oneofInfo:
+			fnx := ri.which(msx.pointer())
+			fny := ri.which(msy.pointer())
+			if fnx != fny {
+				return false
+			}
+			if fnx <= 0 {
+				continue
+			}
+			fi := mi.fields[fnx]
+			fd = fi.fieldDesc
+			vx = fi.get(msx.pointer())
+			vy = fi.get(msy.pointer())
+		}
+
+		if !equalValue(fd, vx, vy) {
+			return false
+		}
+	}
+
+	// Compare extensions.
+	// This is more complicated because mx or my could have empty/nil extension maps,
+	// however some populated extension map values are equal to nil extension maps.
+	emx := mi.extensionMap(msx.pointer())
+	emy := mi.extensionMap(msy.pointer())
+	if emx != nil {
+		for k, x := range *emx {
+			xd := x.Type().TypeDescriptor()
+			xv := x.Value()
+			var y ExtensionField
+			ok := false
+			if emy != nil {
+				y, ok = (*emy)[k]
+			}
+			// We need to treat empty lists as equal to nil values
+			if emy == nil || !ok {
+				if xd.IsList() && xv.List().Len() == 0 {
+					continue
+				}
+				return false
+			}
+
+			if !equalValue(xd, xv, y.Value()) {
+				return false
+			}
+		}
+	}
+	if emy != nil {
+		// emy may have extensions emx does not have, need to check them as well
+		for k, y := range *emy {
+			if emx != nil {
+				// emx has the field, so we already checked it
+				if _, ok := (*emx)[k]; ok {
+					continue
+				}
+			}
+			// Empty lists are equal to nil
+			if y.Type().TypeDescriptor().IsList() && y.Value().List().Len() == 0 {
+				continue
+			}
+
+			// Cant be equal if the extension is populated
+			return false
+		}
+	}
+
+	return equalUnknown(mx.GetUnknown(), my.GetUnknown())
+}
+
+func equalValue(fd protoreflect.FieldDescriptor, vx, vy protoreflect.Value) bool {
+	// slow path
+	if fd.Kind() != protoreflect.MessageKind {
+		return vx.Equal(vy)
+	}
+
+	// fast path special cases
+	if fd.IsMap() {
+		if fd.MapValue().Kind() == protoreflect.MessageKind {
+			return equalMessageMap(vx.Map(), vy.Map())
+		}
+		return vx.Equal(vy)
+	}
+
+	if fd.IsList() {
+		return equalMessageList(vx.List(), vy.List())
+	}
+
+	return equalMessage(vx.Message(), vy.Message())
+}
+
+// Mostly copied from protoreflect.equalMap.
+// This variant only works for messages as map types.
+// All other map types should be handled via Value.Equal.
+func equalMessageMap(mx, my protoreflect.Map) bool {
+	if mx.Len() != my.Len() {
+		return false
+	}
+	equal := true
+	mx.Range(func(k protoreflect.MapKey, vx protoreflect.Value) bool {
+		if !my.Has(k) {
+			equal = false
+			return false
+		}
+		vy := my.Get(k)
+		equal = equalMessage(vx.Message(), vy.Message())
+		return equal
+	})
+	return equal
+}
+
+// Mostly copied from protoreflect.equalList.
+// The only change is the usage of equalImpl instead of protoreflect.equalValue.
+func equalMessageList(lx, ly protoreflect.List) bool {
+	if lx.Len() != ly.Len() {
+		return false
+	}
+	for i := 0; i < lx.Len(); i++ {
+		// We only operate on messages here since equalImpl will not call us in any other case.
+		if !equalMessage(lx.Get(i).Message(), ly.Get(i).Message()) {
+			return false
+		}
+	}
+	return true
+}
+
+// equalUnknown compares unknown fields by direct comparison on the raw bytes
+// of each individual field number.
+// Copied from protoreflect.equalUnknown.
+func equalUnknown(x, y protoreflect.RawFields) bool {
+	if len(x) != len(y) {
+		return false
+	}
+	if bytes.Equal([]byte(x), []byte(y)) {
+		return true
+	}
+
+	mx := make(map[protoreflect.FieldNumber]protoreflect.RawFields)
+	my := make(map[protoreflect.FieldNumber]protoreflect.RawFields)
+	for len(x) > 0 {
+		fnum, _, n := protowire.ConsumeField(x)
+		mx[fnum] = append(mx[fnum], x[:n]...)
+		x = x[n:]
+	}
+	for len(y) > 0 {
+		fnum, _, n := protowire.ConsumeField(y)
+		my[fnum] = append(my[fnum], y[:n]...)
+		y = y[n:]
+	}
+	if len(mx) != len(my) {
+		return false
+	}
+
+	for k, v1 := range mx {
+		if v2, ok := my[k]; !ok || !bytes.Equal([]byte(v1), []byte(v2)) {
+			return false
+		}
+	}
+
+	return true
+}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go
index 6e8677ee..b6849d66 100644
--- a/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go
+++ b/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go
@@ -160,6 +160,7 @@ func (x placeholderExtension) HasPresence() bool
 func (x placeholderExtension) HasOptionalKeyword() bool                           { return false }
 func (x placeholderExtension) IsExtension() bool                                  { return true }
 func (x placeholderExtension) IsWeak() bool                                       { return false }
+func (x placeholderExtension) IsLazy() bool                                       { return false }
 func (x placeholderExtension) IsPacked() bool                                     { return false }
 func (x placeholderExtension) IsList() bool                                       { return false }
 func (x placeholderExtension) IsMap() bool                                        { return false }
diff --git a/vendor/google.golang.org/protobuf/internal/impl/message.go b/vendor/google.golang.org/protobuf/internal/impl/message.go
index 019399d4..741b5ed2 100644
--- a/vendor/google.golang.org/protobuf/internal/impl/message.go
+++ b/vendor/google.golang.org/protobuf/internal/impl/message.go
@@ -30,8 +30,8 @@ type MessageInfo struct {
 	// Desc is the underlying message descriptor type and must be populated.
 	Desc protoreflect.MessageDescriptor
 
-	// Exporter must be provided in a purego environment in order to provide
-	// access to unexported fields.
+	// Deprecated: Exporter will be removed the next time we bump
+	// protoimpl.GenVersion. See https://github.com/golang/protobuf/issues/1640
 	Exporter exporter
 
 	// OneofWrappers is list of pointers to oneof wrapper struct types.
diff --git a/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go b/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go
deleted file mode 100644
index da685e8a..00000000
--- a/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go
+++ /dev/null
@@ -1,215 +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.
-
-//go:build purego || appengine
-// +build purego appengine
-
-package impl
-
-import (
-	"fmt"
-	"reflect"
-	"sync"
-)
-
-const UnsafeEnabled = false
-
-// Pointer is an opaque pointer type.
-type Pointer any
-
-// offset represents the offset to a struct field, accessible from a pointer.
-// The offset is the field index into a struct.
-type offset struct {
-	index  int
-	export exporter
-}
-
-// offsetOf returns a field offset for the struct field.
-func offsetOf(f reflect.StructField, x exporter) offset {
-	if len(f.Index) != 1 {
-		panic("embedded structs are not supported")
-	}
-	if f.PkgPath == "" {
-		return offset{index: f.Index[0]} // field is already exported
-	}
-	if x == nil {
-		panic("exporter must be provided for unexported field")
-	}
-	return offset{index: f.Index[0], export: x}
-}
-
-// IsValid reports whether the offset is valid.
-func (f offset) IsValid() bool { return f.index >= 0 }
-
-// invalidOffset is an invalid field offset.
-var invalidOffset = offset{index: -1}
-
-// zeroOffset is a noop when calling pointer.Apply.
-var zeroOffset = offset{index: 0}
-
-// pointer is an abstract representation of a pointer to a struct or field.
-type pointer struct{ v reflect.Value }
-
-// pointerOf returns p as a pointer.
-func pointerOf(p Pointer) pointer {
-	return pointerOfIface(p)
-}
-
-// pointerOfValue returns v as a pointer.
-func pointerOfValue(v reflect.Value) pointer {
-	return pointer{v: v}
-}
-
-// pointerOfIface returns the pointer portion of an interface.
-func pointerOfIface(v any) pointer {
-	return pointer{v: reflect.ValueOf(v)}
-}
-
-// IsNil reports whether the pointer is nil.
-func (p pointer) IsNil() bool {
-	return p.v.IsNil()
-}
-
-// Apply adds an offset to the pointer to derive a new pointer
-// to a specified field. The current pointer must be pointing at a struct.
-func (p pointer) Apply(f offset) pointer {
-	if f.export != nil {
-		if v := reflect.ValueOf(f.export(p.v.Interface(), f.index)); v.IsValid() {
-			return pointer{v: v}
-		}
-	}
-	return pointer{v: p.v.Elem().Field(f.index).Addr()}
-}
-
-// AsValueOf treats p as a pointer to an object of type t and returns the value.
-// It is equivalent to reflect.ValueOf(p.AsIfaceOf(t))
-func (p pointer) AsValueOf(t reflect.Type) reflect.Value {
-	if got := p.v.Type().Elem(); got != t {
-		panic(fmt.Sprintf("invalid type: got %v, want %v", got, t))
-	}
-	return p.v
-}
-
-// AsIfaceOf treats p as a pointer to an object of type t and returns the value.
-// It is equivalent to p.AsValueOf(t).Interface()
-func (p pointer) AsIfaceOf(t reflect.Type) any {
-	return p.AsValueOf(t).Interface()
-}
-
-func (p pointer) Bool() *bool              { return p.v.Interface().(*bool) }
-func (p pointer) BoolPtr() **bool          { return p.v.Interface().(**bool) }
-func (p pointer) BoolSlice() *[]bool       { return p.v.Interface().(*[]bool) }
-func (p pointer) Int32() *int32            { return p.v.Interface().(*int32) }
-func (p pointer) Int32Ptr() **int32        { return p.v.Interface().(**int32) }
-func (p pointer) Int32Slice() *[]int32     { return p.v.Interface().(*[]int32) }
-func (p pointer) Int64() *int64            { return p.v.Interface().(*int64) }
-func (p pointer) Int64Ptr() **int64        { return p.v.Interface().(**int64) }
-func (p pointer) Int64Slice() *[]int64     { return p.v.Interface().(*[]int64) }
-func (p pointer) Uint32() *uint32          { return p.v.Interface().(*uint32) }
-func (p pointer) Uint32Ptr() **uint32      { return p.v.Interface().(**uint32) }
-func (p pointer) Uint32Slice() *[]uint32   { return p.v.Interface().(*[]uint32) }
-func (p pointer) Uint64() *uint64          { return p.v.Interface().(*uint64) }
-func (p pointer) Uint64Ptr() **uint64      { return p.v.Interface().(**uint64) }
-func (p pointer) Uint64Slice() *[]uint64   { return p.v.Interface().(*[]uint64) }
-func (p pointer) Float32() *float32        { return p.v.Interface().(*float32) }
-func (p pointer) Float32Ptr() **float32    { return p.v.Interface().(**float32) }
-func (p pointer) Float32Slice() *[]float32 { return p.v.Interface().(*[]float32) }
-func (p pointer) Float64() *float64        { return p.v.Interface().(*float64) }
-func (p pointer) Float64Ptr() **float64    { return p.v.Interface().(**float64) }
-func (p pointer) Float64Slice() *[]float64 { return p.v.Interface().(*[]float64) }
-func (p pointer) String() *string          { return p.v.Interface().(*string) }
-func (p pointer) StringPtr() **string      { return p.v.Interface().(**string) }
-func (p pointer) StringSlice() *[]string   { return p.v.Interface().(*[]string) }
-func (p pointer) Bytes() *[]byte           { return p.v.Interface().(*[]byte) }
-func (p pointer) BytesPtr() **[]byte       { return p.v.Interface().(**[]byte) }
-func (p pointer) BytesSlice() *[][]byte    { return p.v.Interface().(*[][]byte) }
-func (p pointer) WeakFields() *weakFields  { return (*weakFields)(p.v.Interface().(*WeakFields)) }
-func (p pointer) Extensions() *map[int32]ExtensionField {
-	return p.v.Interface().(*map[int32]ExtensionField)
-}
-
-func (p pointer) Elem() pointer {
-	return pointer{v: p.v.Elem()}
-}
-
-// PointerSlice copies []*T from p as a new []pointer.
-// This behavior differs from the implementation in pointer_unsafe.go.
-func (p pointer) PointerSlice() []pointer {
-	// TODO: reconsider this
-	if p.v.IsNil() {
-		return nil
-	}
-	n := p.v.Elem().Len()
-	s := make([]pointer, n)
-	for i := 0; i < n; i++ {
-		s[i] = pointer{v: p.v.Elem().Index(i)}
-	}
-	return s
-}
-
-// AppendPointerSlice appends v to p, which must be a []*T.
-func (p pointer) AppendPointerSlice(v pointer) {
-	sp := p.v.Elem()
-	sp.Set(reflect.Append(sp, v.v))
-}
-
-// SetPointer sets *p to v.
-func (p pointer) SetPointer(v pointer) {
-	p.v.Elem().Set(v.v)
-}
-
-func growSlice(p pointer, addCap int) {
-	// TODO: Once we only support Go 1.20 and newer, use reflect.Grow.
-	in := p.v.Elem()
-	out := reflect.MakeSlice(in.Type(), in.Len(), in.Len()+addCap)
-	reflect.Copy(out, in)
-	p.v.Elem().Set(out)
-}
-
-func (p pointer) growBoolSlice(addCap int) {
-	growSlice(p, addCap)
-}
-
-func (p pointer) growInt32Slice(addCap int) {
-	growSlice(p, addCap)
-}
-
-func (p pointer) growUint32Slice(addCap int) {
-	growSlice(p, addCap)
-}
-
-func (p pointer) growInt64Slice(addCap int) {
-	growSlice(p, addCap)
-}
-
-func (p pointer) growUint64Slice(addCap int) {
-	growSlice(p, addCap)
-}
-
-func (p pointer) growFloat64Slice(addCap int) {
-	growSlice(p, addCap)
-}
-
-func (p pointer) growFloat32Slice(addCap int) {
-	growSlice(p, addCap)
-}
-
-func (Export) MessageStateOf(p Pointer) *messageState     { panic("not supported") }
-func (ms *messageState) pointer() pointer                 { panic("not supported") }
-func (ms *messageState) messageInfo() *MessageInfo        { panic("not supported") }
-func (ms *messageState) LoadMessageInfo() *MessageInfo    { panic("not supported") }
-func (ms *messageState) StoreMessageInfo(mi *MessageInfo) { panic("not supported") }
-
-type atomicNilMessage struct {
-	once sync.Once
-	m    messageReflectWrapper
-}
-
-func (m *atomicNilMessage) Init(mi *MessageInfo) *messageReflectWrapper {
-	m.once.Do(func() {
-		m.m.p = pointerOfIface(reflect.Zero(mi.GoReflectType).Interface())
-		m.m.mi = mi
-	})
-	return &m.m
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go b/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go
index 5f20ca5d..79e18666 100644
--- a/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go
+++ b/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go
@@ -2,9 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !purego && !appengine
-// +build !purego,!appengine
-
 package impl
 
 import (
diff --git a/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go b/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go
deleted file mode 100644
index a1f6f333..00000000
--- a/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go
+++ /dev/null
@@ -1,28 +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.
-
-//go:build purego || appengine
-// +build purego appengine
-
-package strs
-
-import pref "google.golang.org/protobuf/reflect/protoreflect"
-
-func UnsafeString(b []byte) string {
-	return string(b)
-}
-
-func UnsafeBytes(s string) []byte {
-	return []byte(s)
-}
-
-type Builder struct{}
-
-func (*Builder) AppendFullName(prefix pref.FullName, name pref.Name) pref.FullName {
-	return prefix.Append(name)
-}
-
-func (*Builder) MakeString(b []byte) string {
-	return string(b)
-}
diff --git a/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go120.go b/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go120.go
index a008acd0..832a7988 100644
--- a/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go120.go
+++ b/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go120.go
@@ -2,8 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !purego && !appengine && !go1.21
-// +build !purego,!appengine,!go1.21
+//go:build !go1.21
 
 package strs
 
diff --git a/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go121.go b/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go121.go
index 60166f2b..1ffddf68 100644
--- a/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go121.go
+++ b/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go121.go
@@ -2,8 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !purego && !appengine && go1.21
-// +build !purego,!appengine,go1.21
+//go:build go1.21
 
 package strs
 
diff --git a/vendor/google.golang.org/protobuf/internal/version/version.go b/vendor/google.golang.org/protobuf/internal/version/version.go
index dbbf1f68..fb8e15e8 100644
--- a/vendor/google.golang.org/protobuf/internal/version/version.go
+++ b/vendor/google.golang.org/protobuf/internal/version/version.go
@@ -51,8 +51,8 @@ import (
 //  10. Send out the CL for review and submit it.
 const (
 	Major      = 1
-	Minor      = 34
-	Patch      = 2
+	Minor      = 35
+	Patch      = 1
 	PreRelease = ""
 )
 
diff --git a/vendor/google.golang.org/protobuf/proto/equal.go b/vendor/google.golang.org/protobuf/proto/equal.go
index 1a0be1b0..c36d4a9c 100644
--- a/vendor/google.golang.org/protobuf/proto/equal.go
+++ b/vendor/google.golang.org/protobuf/proto/equal.go
@@ -8,6 +8,7 @@ import (
 	"reflect"
 
 	"google.golang.org/protobuf/reflect/protoreflect"
+	"google.golang.org/protobuf/runtime/protoiface"
 )
 
 // Equal reports whether two messages are equal,
@@ -51,6 +52,14 @@ func Equal(x, y Message) bool {
 	if mx.IsValid() != my.IsValid() {
 		return false
 	}
+
+	// Only one of the messages needs to implement the fast-path for it to work.
+	pmx := protoMethods(mx)
+	pmy := protoMethods(my)
+	if pmx != nil && pmy != nil && pmx.Equal != nil && pmy.Equal != nil {
+		return pmx.Equal(protoiface.EqualInput{MessageA: mx, MessageB: my}).Equal
+	}
+
 	vx := protoreflect.ValueOfMessage(mx)
 	vy := protoreflect.ValueOfMessage(my)
 	return vx.Equal(vy)
diff --git a/vendor/google.golang.org/protobuf/proto/extension.go b/vendor/google.golang.org/protobuf/proto/extension.go
index d248f292..78445d11 100644
--- a/vendor/google.golang.org/protobuf/proto/extension.go
+++ b/vendor/google.golang.org/protobuf/proto/extension.go
@@ -39,6 +39,48 @@ func ClearExtension(m Message, xt protoreflect.ExtensionType) {
 // If the field is unpopulated, it returns the default value for
 // scalars and an immutable, empty value for lists or messages.
 // It panics if xt does not extend m.
+//
+// The type of the value is dependent on the field type of the extension.
+// For extensions generated by protoc-gen-go, the Go type is as follows:
+//
+//	╔═══════════════════╤═════════════════════════╗
+//	║ Go type           │ Protobuf kind           ║
+//	╠═══════════════════╪═════════════════════════╣
+//	║ bool              │ bool                    ║
+//	║ int32             │ int32, sint32, sfixed32 ║
+//	║ int64             │ int64, sint64, sfixed64 ║
+//	║ uint32            │ uint32, fixed32         ║
+//	║ uint64            │ uint64, fixed64         ║
+//	║ float32           │ float                   ║
+//	║ float64           │ double                  ║
+//	║ string            │ string                  ║
+//	║ []byte            │ bytes                   ║
+//	║ protoreflect.Enum │ enum                    ║
+//	║ proto.Message     │ message, group          ║
+//	╚═══════════════════╧═════════════════════════╝
+//
+// The protoreflect.Enum and proto.Message types are the concrete Go type
+// associated with the named enum or message. Repeated fields are represented
+// using a Go slice of the base element type.
+//
+// If a generated extension descriptor variable is directly passed to
+// GetExtension, then the call should be followed immediately by a
+// type assertion to the expected output value. For example:
+//
+//	mm := proto.GetExtension(m, foopb.E_MyExtension).(*foopb.MyMessage)
+//
+// This pattern enables static analysis tools to verify that the asserted type
+// matches the Go type associated with the extension field and
+// also enables a possible future migration to a type-safe extension API.
+//
+// Since singular messages are the most common extension type, the pattern of
+// calling HasExtension followed by GetExtension may be simplified to:
+//
+//	if mm := proto.GetExtension(m, foopb.E_MyExtension).(*foopb.MyMessage); mm != nil {
+//	    ... // make use of mm
+//	}
+//
+// The mm variable is non-nil if and only if HasExtension reports true.
 func GetExtension(m Message, xt protoreflect.ExtensionType) any {
 	// Treat nil message interface as an empty message; return the default.
 	if m == nil {
@@ -51,6 +93,35 @@ func GetExtension(m Message, xt protoreflect.ExtensionType) any {
 // SetExtension stores the value of an extension field.
 // It panics if m is invalid, xt does not extend m, or if type of v
 // is invalid for the specified extension field.
+//
+// The type of the value is dependent on the field type of the extension.
+// For extensions generated by protoc-gen-go, the Go type is as follows:
+//
+//	╔═══════════════════╤═════════════════════════╗
+//	║ Go type           │ Protobuf kind           ║
+//	╠═══════════════════╪═════════════════════════╣
+//	║ bool              │ bool                    ║
+//	║ int32             │ int32, sint32, sfixed32 ║
+//	║ int64             │ int64, sint64, sfixed64 ║
+//	║ uint32            │ uint32, fixed32         ║
+//	║ uint64            │ uint64, fixed64         ║
+//	║ float32           │ float                   ║
+//	║ float64           │ double                  ║
+//	║ string            │ string                  ║
+//	║ []byte            │ bytes                   ║
+//	║ protoreflect.Enum │ enum                    ║
+//	║ proto.Message     │ message, group          ║
+//	╚═══════════════════╧═════════════════════════╝
+//
+// The protoreflect.Enum and proto.Message types are the concrete Go type
+// associated with the named enum or message. Repeated fields are represented
+// using a Go slice of the base element type.
+//
+// If a generated extension descriptor variable is directly passed to
+// SetExtension (e.g., foopb.E_MyExtension), then the value should be a
+// concrete type that matches the expected Go type for the extension descriptor
+// so that static analysis tools can verify type correctness.
+// This also enables a possible future migration to a type-safe extension API.
 func SetExtension(m Message, xt protoreflect.ExtensionType, v any) {
 	xd := xt.TypeDescriptor()
 	pv := xt.ValueOf(v)
diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go
index d5d5af6e..742cb518 100644
--- a/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go
+++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go
@@ -23,6 +23,7 @@ type (
 		Unmarshal        func(unmarshalInput) (unmarshalOutput, error)
 		Merge            func(mergeInput) mergeOutput
 		CheckInitialized func(checkInitializedInput) (checkInitializedOutput, error)
+		Equal            func(equalInput) equalOutput
 	}
 	supportFlags = uint64
 	sizeInput    = struct {
@@ -75,4 +76,13 @@ type (
 	checkInitializedOutput = struct {
 		pragma.NoUnkeyedLiterals
 	}
+	equalInput = struct {
+		pragma.NoUnkeyedLiterals
+		MessageA Message
+		MessageB Message
+	}
+	equalOutput = struct {
+		pragma.NoUnkeyedLiterals
+		Equal bool
+	}
 )
diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go
deleted file mode 100644
index 75f83a2a..00000000
--- a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go
+++ /dev/null
@@ -1,60 +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.
-
-//go:build purego || appengine
-// +build purego appengine
-
-package protoreflect
-
-import "google.golang.org/protobuf/internal/pragma"
-
-type valueType int
-
-const (
-	nilType valueType = iota
-	boolType
-	int32Type
-	int64Type
-	uint32Type
-	uint64Type
-	float32Type
-	float64Type
-	stringType
-	bytesType
-	enumType
-	ifaceType
-)
-
-// value is a union where only one type can be represented at a time.
-// This uses a distinct field for each type. This is type safe in Go, but
-// occupies more memory than necessary (72B).
-type value struct {
-	pragma.DoNotCompare // 0B
-
-	typ   valueType // 8B
-	num   uint64    // 8B
-	str   string    // 16B
-	bin   []byte    // 24B
-	iface any       // 16B
-}
-
-func valueOfString(v string) Value {
-	return Value{typ: stringType, str: v}
-}
-func valueOfBytes(v []byte) Value {
-	return Value{typ: bytesType, bin: v}
-}
-func valueOfIface(v any) Value {
-	return Value{typ: ifaceType, iface: v}
-}
-
-func (v Value) getString() string {
-	return v.str
-}
-func (v Value) getBytes() []byte {
-	return v.bin
-}
-func (v Value) getIface() any {
-	return v.iface
-}
diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go120.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go120.go
index 7f3583ea..0015fcb3 100644
--- a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go120.go
+++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go120.go
@@ -2,8 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !purego && !appengine && !go1.21
-// +build !purego,!appengine,!go1.21
+//go:build !go1.21
 
 package protoreflect
 
diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go121.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go121.go
index f7d38699..479527b5 100644
--- a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go121.go
+++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go121.go
@@ -2,8 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !purego && !appengine && go1.21
-// +build !purego,!appengine,go1.21
+//go:build go1.21
 
 package protoreflect
 
diff --git a/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go b/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go
index 44cf467d..24615656 100644
--- a/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go
+++ b/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go
@@ -39,6 +39,9 @@ type Methods = struct {
 
 	// CheckInitialized returns an error if any required fields in the message are not set.
 	CheckInitialized func(CheckInitializedInput) (CheckInitializedOutput, error)
+
+	// Equal compares two messages and returns EqualOutput.Equal == true if they are equal.
+	Equal func(EqualInput) EqualOutput
 }
 
 // SupportFlags indicate support for optional features.
@@ -166,3 +169,18 @@ type CheckInitializedInput = struct {
 type CheckInitializedOutput = struct {
 	pragma.NoUnkeyedLiterals
 }
+
+// EqualInput is input to the Equal method.
+type EqualInput = struct {
+	pragma.NoUnkeyedLiterals
+
+	MessageA protoreflect.Message
+	MessageB protoreflect.Message
+}
+
+// EqualOutput is output from the Equal method.
+type EqualOutput = struct {
+	pragma.NoUnkeyedLiterals
+
+	Equal bool
+}
diff --git a/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go b/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go
index 7172b43d..87da199a 100644
--- a/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go
+++ b/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go
@@ -368,11 +368,9 @@ func (x *Any) UnmarshalNew() (proto.Message, error) {
 
 func (x *Any) Reset() {
 	*x = Any{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_protobuf_any_proto_msgTypes[0]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_protobuf_any_proto_msgTypes[0]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *Any) String() string {
@@ -383,7 +381,7 @@ func (*Any) ProtoMessage() {}
 
 func (x *Any) ProtoReflect() protoreflect.Message {
 	mi := &file_google_protobuf_any_proto_msgTypes[0]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -461,20 +459,6 @@ func file_google_protobuf_any_proto_init() {
 	if File_google_protobuf_any_proto != nil {
 		return
 	}
-	if !protoimpl.UnsafeEnabled {
-		file_google_protobuf_any_proto_msgTypes[0].Exporter = func(v any, i int) any {
-			switch v := v.(*Any); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
diff --git a/vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go b/vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go
index 1b71bcd9..b99d4d24 100644
--- a/vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go
+++ b/vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go
@@ -245,11 +245,9 @@ func (x *Duration) check() uint {
 
 func (x *Duration) Reset() {
 	*x = Duration{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_protobuf_duration_proto_msgTypes[0]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_protobuf_duration_proto_msgTypes[0]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *Duration) String() string {
@@ -260,7 +258,7 @@ func (*Duration) ProtoMessage() {}
 
 func (x *Duration) ProtoReflect() protoreflect.Message {
 	mi := &file_google_protobuf_duration_proto_msgTypes[0]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -339,20 +337,6 @@ func file_google_protobuf_duration_proto_init() {
 	if File_google_protobuf_duration_proto != nil {
 		return
 	}
-	if !protoimpl.UnsafeEnabled {
-		file_google_protobuf_duration_proto_msgTypes[0].Exporter = func(v any, i int) any {
-			switch v := v.(*Duration); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
diff --git a/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go b/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go
index 83a5a645..0d20722d 100644
--- a/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go
+++ b/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go
@@ -254,11 +254,9 @@ func (x *Timestamp) check() uint {
 
 func (x *Timestamp) Reset() {
 	*x = Timestamp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_protobuf_timestamp_proto_msgTypes[0]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_google_protobuf_timestamp_proto_msgTypes[0]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *Timestamp) String() string {
@@ -269,7 +267,7 @@ func (*Timestamp) ProtoMessage() {}
 
 func (x *Timestamp) ProtoReflect() protoreflect.Message {
 	mi := &file_google_protobuf_timestamp_proto_msgTypes[0]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -348,20 +346,6 @@ func file_google_protobuf_timestamp_proto_init() {
 	if File_google_protobuf_timestamp_proto != nil {
 		return
 	}
-	if !protoimpl.UnsafeEnabled {
-		file_google_protobuf_timestamp_proto_msgTypes[0].Exporter = func(v any, i int) any {
-			switch v := v.(*Timestamp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 0082027f..ee447df3 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -82,16 +82,21 @@ github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/shared
 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/pageblob
 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/sas
 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/service
-# github.com/ClickHouse/ch-go v0.61.2
-## explicit; go 1.21
+# github.com/BurntSushi/toml v1.4.0
+## explicit; go 1.18
+github.com/BurntSushi/toml
+github.com/BurntSushi/toml/internal
+# github.com/ClickHouse/ch-go v0.65.1
+## explicit; go 1.22.0
 github.com/ClickHouse/ch-go/compress
 github.com/ClickHouse/ch-go/proto
-# github.com/ClickHouse/clickhouse-go/v2 v2.17.1
-## explicit; go 1.20
+# github.com/ClickHouse/clickhouse-go/v2 v2.34.0
+## explicit; go 1.22.0
 github.com/ClickHouse/clickhouse-go/v2
 github.com/ClickHouse/clickhouse-go/v2/contributors
 github.com/ClickHouse/clickhouse-go/v2/ext
 github.com/ClickHouse/clickhouse-go/v2/lib/binary
+github.com/ClickHouse/clickhouse-go/v2/lib/chcol
 github.com/ClickHouse/clickhouse-go/v2/lib/column
 github.com/ClickHouse/clickhouse-go/v2/lib/driver
 github.com/ClickHouse/clickhouse-go/v2/lib/proto
@@ -100,37 +105,38 @@ github.com/ClickHouse/clickhouse-go/v2/resources
 # github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c
 ## explicit
 github.com/JohnCGriffin/overflow
-# github.com/andybalholm/brotli v1.1.0
+# github.com/andybalholm/brotli v1.1.1
 ## explicit; go 1.13
 github.com/andybalholm/brotli
 github.com/andybalholm/brotli/matchfinder
-# github.com/apache/arrow/go/v14 v14.0.2
-## explicit; go 1.20
-github.com/apache/arrow/go/v14/arrow
-github.com/apache/arrow/go/v14/arrow/array
-github.com/apache/arrow/go/v14/arrow/arrio
-github.com/apache/arrow/go/v14/arrow/bitutil
-github.com/apache/arrow/go/v14/arrow/compute
-github.com/apache/arrow/go/v14/arrow/compute/exec
-github.com/apache/arrow/go/v14/arrow/compute/internal/kernels
-github.com/apache/arrow/go/v14/arrow/decimal128
-github.com/apache/arrow/go/v14/arrow/decimal256
-github.com/apache/arrow/go/v14/arrow/encoded
-github.com/apache/arrow/go/v14/arrow/endian
-github.com/apache/arrow/go/v14/arrow/float16
-github.com/apache/arrow/go/v14/arrow/internal
-github.com/apache/arrow/go/v14/arrow/internal/debug
-github.com/apache/arrow/go/v14/arrow/internal/dictutils
-github.com/apache/arrow/go/v14/arrow/internal/flatbuf
-github.com/apache/arrow/go/v14/arrow/ipc
-github.com/apache/arrow/go/v14/arrow/memory
-github.com/apache/arrow/go/v14/arrow/memory/internal/cgoalloc
-github.com/apache/arrow/go/v14/arrow/memory/mallocator
-github.com/apache/arrow/go/v14/arrow/scalar
-github.com/apache/arrow/go/v14/internal/bitutils
-github.com/apache/arrow/go/v14/internal/hashing
-github.com/apache/arrow/go/v14/internal/json
-github.com/apache/arrow/go/v14/internal/utils
+# github.com/apache/arrow-go/v18 v18.0.0
+## explicit; go 1.22.0
+github.com/apache/arrow-go/v18/arrow
+github.com/apache/arrow-go/v18/arrow/array
+github.com/apache/arrow-go/v18/arrow/arrio
+github.com/apache/arrow-go/v18/arrow/bitutil
+github.com/apache/arrow-go/v18/arrow/compute
+github.com/apache/arrow-go/v18/arrow/compute/exec
+github.com/apache/arrow-go/v18/arrow/compute/internal/kernels
+github.com/apache/arrow-go/v18/arrow/decimal
+github.com/apache/arrow-go/v18/arrow/decimal128
+github.com/apache/arrow-go/v18/arrow/decimal256
+github.com/apache/arrow-go/v18/arrow/encoded
+github.com/apache/arrow-go/v18/arrow/endian
+github.com/apache/arrow-go/v18/arrow/float16
+github.com/apache/arrow-go/v18/arrow/internal
+github.com/apache/arrow-go/v18/arrow/internal/debug
+github.com/apache/arrow-go/v18/arrow/internal/dictutils
+github.com/apache/arrow-go/v18/arrow/internal/flatbuf
+github.com/apache/arrow-go/v18/arrow/ipc
+github.com/apache/arrow-go/v18/arrow/memory
+github.com/apache/arrow-go/v18/arrow/memory/internal/cgoalloc
+github.com/apache/arrow-go/v18/arrow/memory/mallocator
+github.com/apache/arrow-go/v18/arrow/scalar
+github.com/apache/arrow-go/v18/internal/bitutils
+github.com/apache/arrow-go/v18/internal/hashing
+github.com/apache/arrow-go/v18/internal/json
+github.com/apache/arrow-go/v18/internal/utils
 # github.com/aws/aws-sdk-go v1.50.6
 ## explicit; go 1.19
 github.com/aws/aws-sdk-go/aws
@@ -178,8 +184,8 @@ github.com/aws/aws-sdk-go/service/sso/ssoiface
 github.com/aws/aws-sdk-go/service/ssooidc
 github.com/aws/aws-sdk-go/service/sts
 github.com/aws/aws-sdk-go/service/sts/stsiface
-# github.com/aws/aws-sdk-go-v2 v1.24.1
-## explicit; go 1.19
+# github.com/aws/aws-sdk-go-v2 v1.26.1
+## explicit; go 1.20
 github.com/aws/aws-sdk-go-v2/aws
 github.com/aws/aws-sdk-go-v2/aws/arn
 github.com/aws/aws-sdk-go-v2/aws/defaults
@@ -203,50 +209,50 @@ github.com/aws/aws-sdk-go-v2/internal/sdkio
 github.com/aws/aws-sdk-go-v2/internal/strings
 github.com/aws/aws-sdk-go-v2/internal/sync/singleflight
 github.com/aws/aws-sdk-go-v2/internal/timeconv
-# github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4
-## explicit; go 1.19
+# github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2
+## explicit; go 1.20
 github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream
 github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi
-# github.com/aws/aws-sdk-go-v2/credentials v1.16.16
-## explicit; go 1.19
+# github.com/aws/aws-sdk-go-v2/credentials v1.17.11
+## explicit; go 1.20
 github.com/aws/aws-sdk-go-v2/credentials
-# github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.15.15
-## explicit; go 1.19
+# github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.16.15
+## explicit; go 1.20
 github.com/aws/aws-sdk-go-v2/feature/s3/manager
-# github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10
-## explicit; go 1.19
+# github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5
+## explicit; go 1.20
 github.com/aws/aws-sdk-go-v2/internal/configsources
-# github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10
-## explicit; go 1.19
+# github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5
+## explicit; go 1.20
 github.com/aws/aws-sdk-go-v2/internal/endpoints/v2
-# github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.10
-## explicit; go 1.19
+# github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5
+## explicit; go 1.20
 github.com/aws/aws-sdk-go-v2/internal/v4a
 github.com/aws/aws-sdk-go-v2/internal/v4a/internal/crypto
 github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4
-# github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4
-## explicit; go 1.19
+# github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2
+## explicit; go 1.20
 github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding
-# github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.10
-## explicit; go 1.19
+# github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7
+## explicit; go 1.20
 github.com/aws/aws-sdk-go-v2/service/internal/checksum
-# github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10
-## explicit; go 1.19
+# github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7
+## explicit; go 1.20
 github.com/aws/aws-sdk-go-v2/service/internal/presigned-url
-# github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.10
-## explicit; go 1.19
+# github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5
+## explicit; go 1.20
 github.com/aws/aws-sdk-go-v2/service/internal/s3shared
 github.com/aws/aws-sdk-go-v2/service/internal/s3shared/arn
 github.com/aws/aws-sdk-go-v2/service/internal/s3shared/config
-# github.com/aws/aws-sdk-go-v2/service/s3 v1.48.1
-## explicit; go 1.19
+# github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1
+## explicit; go 1.20
 github.com/aws/aws-sdk-go-v2/service/s3
 github.com/aws/aws-sdk-go-v2/service/s3/internal/arn
 github.com/aws/aws-sdk-go-v2/service/s3/internal/customizations
 github.com/aws/aws-sdk-go-v2/service/s3/internal/endpoints
 github.com/aws/aws-sdk-go-v2/service/s3/types
-# github.com/aws/smithy-go v1.19.0
-## explicit; go 1.19
+# github.com/aws/smithy-go v1.20.2
+## explicit; go 1.20
 github.com/aws/smithy-go
 github.com/aws/smithy-go/auth
 github.com/aws/smithy-go/auth/bearer
@@ -279,7 +285,7 @@ github.com/cenkalti/backoff
 # github.com/cespare/xxhash/v2 v2.3.0
 ## explicit; go 1.11
 github.com/cespare/xxhash/v2
-# github.com/danieljoos/wincred v1.2.1
+# github.com/danieljoos/wincred v1.2.2
 ## explicit; go 1.18
 github.com/danieljoos/wincred
 # github.com/dvsekhvalnov/jose2go v1.6.0
@@ -308,10 +314,7 @@ github.com/elastic/go-windows
 # github.com/felixge/httpsnoop v1.0.4
 ## explicit; go 1.13
 github.com/felixge/httpsnoop
-# github.com/form3tech-oss/jwt-go v3.2.5+incompatible
-## explicit
-github.com/form3tech-oss/jwt-go
-# github.com/gabriel-vasile/mimetype v1.4.3
+# github.com/gabriel-vasile/mimetype v1.4.7
 ## explicit; go 1.20
 github.com/gabriel-vasile/mimetype
 github.com/gabriel-vasile/mimetype/internal/charset
@@ -350,8 +353,8 @@ github.com/gobwas/glob/syntax/ast
 github.com/gobwas/glob/syntax/lexer
 github.com/gobwas/glob/util/runes
 github.com/gobwas/glob/util/strings
-# github.com/goccy/go-json v0.10.2
-## explicit; go 1.12
+# github.com/goccy/go-json v0.10.4
+## explicit; go 1.19
 github.com/goccy/go-json
 github.com/goccy/go-json/internal/decoder
 github.com/goccy/go-json/internal/encoder
@@ -364,6 +367,9 @@ github.com/goccy/go-json/internal/runtime
 # github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2
 ## explicit; go 1.12
 github.com/godbus/dbus
+# github.com/golang-jwt/jwt/v5 v5.2.2
+## explicit; go 1.18
+github.com/golang-jwt/jwt/v5
 # github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9
 ## explicit
 github.com/golang-sql/civil
@@ -373,7 +379,7 @@ github.com/golang-sql/sqlexp
 # github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da
 ## explicit
 github.com/golang/groupcache/lru
-# github.com/google/flatbuffers v23.5.26+incompatible
+# github.com/google/flatbuffers v24.12.23+incompatible
 ## explicit
 github.com/google/flatbuffers/go
 # github.com/google/s2a-go v0.1.8
@@ -508,8 +514,8 @@ github.com/jmoiron/sqlx/reflectx
 # github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901
 ## explicit
 github.com/joeshaw/multierror
-# github.com/klauspost/compress v1.17.9
-## explicit; go 1.20
+# github.com/klauspost/compress v1.17.11
+## explicit; go 1.21
 github.com/klauspost/compress
 github.com/klauspost/compress/fse
 github.com/klauspost/compress/huff0
@@ -517,8 +523,8 @@ github.com/klauspost/compress/internal/cpuinfo
 github.com/klauspost/compress/internal/snapref
 github.com/klauspost/compress/zstd
 github.com/klauspost/compress/zstd/internal/xxhash
-# github.com/klauspost/cpuid/v2 v2.2.6
-## explicit; go 1.15
+# github.com/klauspost/cpuid/v2 v2.2.9
+## explicit; go 1.20
 github.com/klauspost/cpuid/v2
 # github.com/lib/pq v1.10.9
 ## explicit; go 1.13
@@ -551,7 +557,7 @@ github.com/munnerz/goautoneg
 # github.com/paulmach/orb v0.11.1
 ## explicit; go 1.15
 github.com/paulmach/orb
-# github.com/pierrec/lz4/v4 v4.1.21
+# github.com/pierrec/lz4/v4 v4.1.22
 ## explicit; go 1.14
 github.com/pierrec/lz4/v4
 github.com/pierrec/lz4/v4/internal/lz4block
@@ -600,14 +606,14 @@ github.com/segmentio/asm/cpu/x86
 # github.com/segmentio/go-athena v0.0.0-20230626212750-5fac08ed8dab
 ## explicit
 github.com/segmentio/go-athena
-# github.com/shopspring/decimal v1.3.1
-## explicit; go 1.13
+# github.com/shopspring/decimal v1.4.0
+## explicit; go 1.10
 github.com/shopspring/decimal
 # github.com/sirupsen/logrus v1.9.3
 ## explicit; go 1.13
 github.com/sirupsen/logrus
-# github.com/snowflakedb/gosnowflake v1.7.2
-## explicit; go 1.19
+# github.com/snowflakedb/gosnowflake v1.13.3
+## explicit; go 1.22.0
 github.com/snowflakedb/gosnowflake
 # github.com/vertica/vertica-sql-go v1.3.3
 ## explicit; go 1.13
@@ -638,14 +644,18 @@ go.opencensus.io/trace
 go.opencensus.io/trace/internal
 go.opencensus.io/trace/propagation
 go.opencensus.io/trace/tracestate
+# go.opentelemetry.io/auto/sdk v1.1.0
+## explicit; go 1.22.0
+go.opentelemetry.io/auto/sdk
+go.opentelemetry.io/auto/sdk/internal/telemetry
 # go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0
 ## explicit; go 1.21
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil
-# go.opentelemetry.io/otel v1.29.0
-## explicit; go 1.21
+# go.opentelemetry.io/otel v1.35.0
+## explicit; go 1.22.0
 go.opentelemetry.io/otel
 go.opentelemetry.io/otel/attribute
 go.opentelemetry.io/otel/baggage
@@ -657,23 +667,25 @@ go.opentelemetry.io/otel/internal/global
 go.opentelemetry.io/otel/propagation
 go.opentelemetry.io/otel/semconv/v1.20.0
 go.opentelemetry.io/otel/semconv/v1.26.0
-# go.opentelemetry.io/otel/metric v1.29.0
-## explicit; go 1.21
+# go.opentelemetry.io/otel/metric v1.35.0
+## explicit; go 1.22.0
 go.opentelemetry.io/otel/metric
 go.opentelemetry.io/otel/metric/embedded
 go.opentelemetry.io/otel/metric/noop
-# go.opentelemetry.io/otel/trace v1.29.0
-## explicit; go 1.21
+# go.opentelemetry.io/otel/trace v1.35.0
+## explicit; go 1.22.0
 go.opentelemetry.io/otel/trace
 go.opentelemetry.io/otel/trace/embedded
+go.opentelemetry.io/otel/trace/internal/telemetry
+go.opentelemetry.io/otel/trace/noop
 # go.uber.org/automaxprocs v1.5.3
 ## explicit; go 1.18
 go.uber.org/automaxprocs
 go.uber.org/automaxprocs/internal/cgroups
 go.uber.org/automaxprocs/internal/runtime
 go.uber.org/automaxprocs/maxprocs
-# golang.org/x/crypto v0.31.0
-## explicit; go 1.20
+# golang.org/x/crypto v0.36.0
+## explicit; go 1.23.0
 golang.org/x/crypto/chacha20
 golang.org/x/crypto/chacha20poly1305
 golang.org/x/crypto/cryptobyte
@@ -684,32 +696,34 @@ golang.org/x/crypto/internal/poly1305
 golang.org/x/crypto/md4
 golang.org/x/crypto/ocsp
 golang.org/x/crypto/pbkdf2
-# golang.org/x/exp v0.0.0-20240119083558-1b970713d09a
-## explicit; go 1.20
+# golang.org/x/exp v0.0.0-20240909161429-701f63a606c0
+## explicit; go 1.22.0
 golang.org/x/exp/constraints
 golang.org/x/exp/maps
 golang.org/x/exp/slices
-# golang.org/x/mod v0.17.0
-## explicit; go 1.18
+# golang.org/x/mod v0.23.0
+## explicit; go 1.22.0
 golang.org/x/mod/internal/lazyregexp
 golang.org/x/mod/module
 golang.org/x/mod/semver
-# golang.org/x/net v0.33.0
-## explicit; go 1.18
+# golang.org/x/net v0.38.0
+## explicit; go 1.23.0
 golang.org/x/net/html
 golang.org/x/net/html/atom
 golang.org/x/net/http/httpguts
 golang.org/x/net/http2
 golang.org/x/net/http2/hpack
 golang.org/x/net/idna
+golang.org/x/net/internal/httpcommon
 golang.org/x/net/internal/socks
 golang.org/x/net/internal/timeseries
 golang.org/x/net/proxy
 golang.org/x/net/trace
-# golang.org/x/oauth2 v0.23.0
+# golang.org/x/oauth2 v0.26.0
 ## explicit; go 1.18
 golang.org/x/oauth2
 golang.org/x/oauth2/authhandler
+golang.org/x/oauth2/clientcredentials
 golang.org/x/oauth2/google
 golang.org/x/oauth2/google/externalaccount
 golang.org/x/oauth2/google/internal/externalaccountauthorizeduser
@@ -718,21 +732,21 @@ golang.org/x/oauth2/google/internal/stsexchange
 golang.org/x/oauth2/internal
 golang.org/x/oauth2/jws
 golang.org/x/oauth2/jwt
-# golang.org/x/sync v0.10.0
-## explicit; go 1.18
+# golang.org/x/sync v0.12.0
+## explicit; go 1.23.0
 golang.org/x/sync/errgroup
-# golang.org/x/sys v0.28.0
-## explicit; go 1.18
+# golang.org/x/sys v0.31.0
+## explicit; go 1.23.0
 golang.org/x/sys/cpu
 golang.org/x/sys/plan9
 golang.org/x/sys/unix
 golang.org/x/sys/windows
 golang.org/x/sys/windows/registry
-# golang.org/x/term v0.27.0
-## explicit; go 1.18
+# golang.org/x/term v0.30.0
+## explicit; go 1.23.0
 golang.org/x/term
-# golang.org/x/text v0.21.0
-## explicit; go 1.18
+# golang.org/x/text v0.23.0
+## explicit; go 1.23.0
 golang.org/x/text/cases
 golang.org/x/text/encoding
 golang.org/x/text/encoding/internal
@@ -754,15 +768,15 @@ golang.org/x/text/width
 # golang.org/x/time v0.6.0
 ## explicit; go 1.18
 golang.org/x/time/rate
-# golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d
-## explicit; go 1.19
+# golang.org/x/tools v0.30.0
+## explicit; go 1.22.0
 golang.org/x/tools/cmd/goimports
 golang.org/x/tools/cmd/stringer
 golang.org/x/tools/go/ast/astutil
 golang.org/x/tools/go/gcexportdata
-golang.org/x/tools/go/internal/packagesdriver
 golang.org/x/tools/go/packages
 golang.org/x/tools/go/types/objectpath
+golang.org/x/tools/go/types/typeutil
 golang.org/x/tools/internal/aliases
 golang.org/x/tools/internal/event
 golang.org/x/tools/internal/event/core
@@ -772,13 +786,14 @@ golang.org/x/tools/internal/gcimporter
 golang.org/x/tools/internal/gocommand
 golang.org/x/tools/internal/gopathwalk
 golang.org/x/tools/internal/imports
+golang.org/x/tools/internal/modindex
 golang.org/x/tools/internal/packagesinternal
 golang.org/x/tools/internal/pkgbits
 golang.org/x/tools/internal/stdlib
-golang.org/x/tools/internal/tokeninternal
+golang.org/x/tools/internal/typeparams
 golang.org/x/tools/internal/typesinternal
 golang.org/x/tools/internal/versions
-# golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028
+# golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da
 ## explicit; go 1.18
 golang.org/x/xerrors
 golang.org/x/xerrors/internal
@@ -801,7 +816,7 @@ google.golang.org/api/transport/http/internal/propagation
 google.golang.org/genproto/googleapis/rpc/code
 google.golang.org/genproto/googleapis/rpc/errdetails
 google.golang.org/genproto/googleapis/rpc/status
-# google.golang.org/grpc v1.66.2
+# google.golang.org/grpc v1.67.1
 ## explicit; go 1.21
 google.golang.org/grpc
 google.golang.org/grpc/attributes
@@ -858,8 +873,8 @@ google.golang.org/grpc/serviceconfig
 google.golang.org/grpc/stats
 google.golang.org/grpc/status
 google.golang.org/grpc/tap
-# google.golang.org/protobuf v1.34.2
-## explicit; go 1.20
+# google.golang.org/protobuf v1.35.1
+## explicit; go 1.21
 google.golang.org/protobuf/encoding/protodelim
 google.golang.org/protobuf/encoding/protojson
 google.golang.org/protobuf/encoding/prototext